Skip to content

Commit f673df4

Browse files
docs(readme): convert README.adoc -> Markdown (renders on Glama/profile/community-health) (#46)
README was AsciiDoc → renders as raw markup in Markdown consumers (Glama MCP directory, GitHub community-health, GitHub profile). pandoc asciidoc→GFM (badges → clickable), SPDX header kept, duplicate `.adoc` removed. Part of the estate README-format fix. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent ceba05c commit f673df4

2 files changed

Lines changed: 52 additions & 183 deletions

File tree

README.adoc

Lines changed: 0 additions & 111 deletions
This file was deleted.

README.md

Lines changed: 52 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,38 @@
1-
[![Sponsor](https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?logo=github)](https://github.com/sponsors/hyperpolymath)
2-
3-
= a2ml-validate-action
4-
:toc: preamble
5-
:icons: font
1+
<!--
2+
SPDX-License-Identifier: CC-BY-SA-4.0
3+
SPDX-FileCopyrightText: 2025-2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
-->
65

7-
== Overview
6+
# Overview
87

98
**GitHub Action to validate A2ML manifest files in your repository.**
109

11-
A2ML (Agnostic Agent Markup Language) is a manifest format used across RSR
12-
(Rhodium Standard Repository) projects to declare machine-readable metadata,
13-
AI agent instructions, and project state. This action scans for `.a2ml` files
14-
and validates their structure and required fields.
10+
A2ML (Agnostic Agent Markup Language) is a manifest format used across
11+
RSR (Rhodium Standard Repository) projects to declare machine-readable
12+
metadata, AI agent instructions, and project state. This action scans
13+
for `.a2ml` files and validates their structure and required fields.
14+
15+
# Checks Performed
16+
17+
1. **SPDX header** — Verifies `SPDX-License-Identifier` is present in
18+
the first 10 lines
19+
20+
2. **Identity fields** — Requires `agent-id`, `name`, or `project`
21+
field (relaxed for AI-MANIFEST files)
22+
23+
3. **Version field** — Checks for `version` or `schema_version`
1524

16-
== Checks Performed
25+
4. **Attestation blocks** — If an `[attestation]` section exists,
26+
validates it contains `proof`, `signature`, or `hash` fields
1727

18-
1. **SPDX header** — Verifies `SPDX-License-Identifier` is present in the first 10 lines
19-
2. **Identity fields** — Requires `agent-id`, `name`, or `project` field (relaxed for AI-MANIFEST files)
20-
3. **Version field** — Checks for `version` or `schema_version`
21-
4. **Attestation blocks** — If an `[attestation]` section exists, validates it contains `proof`, `signature`, or `hash` fields
22-
5. **Section syntax** — Warns on malformed `[section]` headings with unclosed brackets
28+
5. **Section syntax** — Warns on malformed `[section]` headings with
29+
unclosed brackets
2330

24-
== Usage
31+
# Usage
2532

2633
Add to your workflow:
2734

28-
[source,yaml]
29-
----
35+
```yaml
3036
name: Validate A2ML
3137
on: [push, pull_request]
3238

@@ -44,70 +50,44 @@ jobs:
4450
strict: 'false' # Promote warnings to errors (default: false)
4551
# paths-ignore: defaults to vendored / fixture patterns; override
4652
# via newline-separated string. Use '' to disable.
47-
----
48-
49-
=== Inputs
50-
51-
[cols="1,1,3"]
52-
|===
53-
| Input | Default | Description
54-
55-
| `path`
56-
| `.`
57-
| Directory path to scan for `.a2ml` files
58-
59-
| `strict`
60-
| `false`
61-
| When `true`, warnings become errors and the action fails on any issue
62-
63-
| `paths-ignore`
64-
| _vendored & fixture defaults_
65-
| Newline-separated path fragments to skip. Substring match against each
66-
file path. Default set: `vendor/`, `vendored/`, `verified-container-spec/`,
67-
`.audittraining/`, `integration/fixtures/`, `test/fixtures/`,
68-
`tests/fixtures/`. Pass an empty string (`paths-ignore: ''`) to disable
69-
and scan everything. See https://github.com/hyperpolymath/hypatia/pull/243
70-
for the architectural rationale (content-pattern validators must
71-
distinguish targets from fixtures / vendored / training-corpus files
72-
that legitimately contain the very pattern being checked).
73-
|===
74-
75-
==== Why default-on path exemptions?
53+
```
7654

77-
A2ML files inside vendored projects (e.g. `verified-container-spec/`) have
78-
their own identity declarations elsewhere or are themselves training corpora.
79-
Flagging every such file as "missing identity field" is provenance noise,
80-
not signal. The defaults match the canonical RSR vendored-content paths;
81-
override for project-specific carve-outs.
55+
## Inputs
8256

83-
=== Outputs
57+
| Input | Default | Description |
58+
|----|----|----|
59+
| `path` | `.` | Directory path to scan for `.a2ml` files |
60+
| `strict` | `false` | When `true`, warnings become errors and the action fails on any issue |
61+
| `paths-ignore` | *vendored & fixture defaults* | Newline-separated path fragments to skip. Substring match against each file path. Default set: `vendor/`, `vendored/`, `verified-container-spec/`, `.audittraining/`, `integration/fixtures/`, `test/fixtures/`, `tests/fixtures/`. Pass an empty string (`paths-ignore:` `’’`) to disable and scan everything. See <https://github.com/hyperpolymath/hypatia/pull/243> for the architectural rationale (content-pattern validators must distinguish targets from fixtures / vendored / training-corpus files that legitimately contain the very pattern being checked). |
8462

85-
[cols="1,3"]
86-
|===
87-
| Output | Description
63+
### Why default-on path exemptions?
8864

89-
| `files-scanned`
90-
| Number of `.a2ml` files processed
65+
A2ML files inside vendored projects (e.g. `verified-container-spec/`)
66+
have their own identity declarations elsewhere or are themselves
67+
training corpora. Flagging every such file as "missing identity field"
68+
is provenance noise, not signal. The defaults match the canonical RSR
69+
vendored-content paths; override for project-specific carve-outs.
9170

92-
| `errors`
93-
| Count of validation errors
71+
## Outputs
9472

95-
| `warnings`
96-
| Count of validation warnings
97-
|===
73+
| Output | Description |
74+
|-----------------|-----------------------------------|
75+
| `files-scanned` | Number of `.a2ml` files processed |
76+
| `errors` | Count of validation errors |
77+
| `warnings` | Count of validation warnings |
9878

99-
== Strict Mode
79+
# Strict Mode
10080

101-
In strict mode (`strict: 'true'`), all warnings are promoted to errors. This
102-
is useful for repositories that require full A2ML compliance, such as those
103-
following the RSR standard.
81+
In strict mode (`strict:` `true`), all warnings are promoted to
82+
errors. This is useful for repositories that require full A2ML
83+
compliance, such as those following the RSR standard.
10484

105-
== Author
85+
# Author
10686

107-
Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
87+
Jonathan D.A. Jewell \<[j.d.a.jewell@open.ac](j.d.a.jewell@open.ac).uk\>
10888

109-
== License
89+
# License
11090

11191
SPDX-License-Identifier: CC-BY-SA-4.0
11292

113-
See link:LICENSE[LICENSE] for details.
93+
See [LICENSE](LICENSE) for details.

0 commit comments

Comments
 (0)