Skip to content

Commit 86c6da6

Browse files
fix(validate-a2ml): exempt canonical typed manifests + *file.a2ml from identity check (#8)
The identity check (`agent-id`/`name`/`project`) is appropriate for manifests that genuinely declare a subject, but two families of A2ML files carry identity by convention rather than by in-file field: 1. **Canonical typed manifests under `.machine_readable/6a2/`** — `AGENTIC.a2ml`, `META.a2ml`, `NEUROSYM.a2ml`, `PLAYBOOK.a2ml`. These hold typed *aspects* of the enclosing project (agent permissions, metadata, neurosymbolic invariants, playbook recipes). Identity is the parent directory; the filename indicates the aspect. Sibling files `ECOSYSTEM.a2ml` and `STATE.a2ml` already declare `[project] name` or `[metadata] project` and continue to be validated normally. 2. **Dockerfile-style top-level typed manifests** — `Intentfile.a2ml`, `Trustfile.a2ml`, etc. These use markdown-flavoured A2ML (`@abstract:` blocks, `## headers`) rather than TOML-style fields, so the identity-field regex cannot match by construction. Identity is the parent repo, exactly as with a `Dockerfile` or `Makefile`. Adds both patterns to the existing `*AI-MANIFEST*` exemption. The check remains active for any other `*.a2ml` filename, so genuinely-missing- identity bugs are still surfaced. Without this, `Validate A2ML manifests` reports 40+ errors across every estate consumer that ships a complete 6a2 manifest set. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
1 parent fd7b2d8 commit 86c6da6

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

validate-a2ml.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,21 @@ validate_a2ml() {
145145
if [[ "$basename" == *"AI-MANIFEST"* ]]; then
146146
is_manifest=true
147147
fi
148+
# Canonical typed manifests under .machine_readable/6a2/ — identity comes
149+
# from the enclosing directory + filename, not an in-file field. Sibling
150+
# files in the same directory (ECOSYSTEM.a2ml, STATE.a2ml) DO carry their
151+
# own
152+
ame/project and continue to be validated normally.
153+
case "$basename" in
154+
AGENTIC.a2ml|META.a2ml|NEUROSYM.a2ml|PLAYBOOK.a2ml)
155+
is_manifest=true
156+
;;
157+
# Dockerfile-style top-level typed manifests (Intentfile, Trustfile, …)
158+
# use markdown-flavoured A2ML; identity is carried by the parent repo.
159+
*file.a2ml)
160+
is_manifest=true
161+
;;
162+
esac
148163

149164
# Contractile-shape A2ML files use `@directive:` syntax instead of
150165
# TOML `key = value`. Trustfile.a2ml, Intentfile.a2ml, Mustfile.a2ml,

0 commit comments

Comments
 (0)