Skip to content

Commit 76cdcea

Browse files
fix(gates): gate on the DEED grammar, per the template and standards#837 (#43)
## Why The guard in `dogfood-gate.yml` counted `.a2ml` files only: ``` COUNT=$(find . -name '*.a2ml' -not -path './.git/*' | wc -l) ``` so a repo whose manifest is written in the current grammar is reported as having none, and the summary/compliance row is skipped by the same predicate (`if find . -name '*.a2ml' ... | grep -q .`). The validator itself has scanned both grammars for a while -- the caller's predicate is the bug. ## Authority - `rsr-template-repo/.github/workflows/deed-validate.yml` (the mint source) is what this wording is copied from, byte for byte, including `-type f`-free `find` and the dual-accept stance. - `standards#837` — "DEED conversion campaign", campaign step 4: *"flip ... RSR gates from `.a2ml` presence to `.deed` presence alongside". Gate predicates, not document contents. - `deed-ecosystem/README.adoc`: *"The DEED format name and `.deed` extension are final, not A2ML."* ## Deliberately not done - No `.a2ml` file is translated or renamed. #837 makes classification into the four DEED forms and per-family mapping specs a prerequisite for mass translation; that is not this PR. - No gate that *reads* a retained file is touched (`CLAIMS.a2ml`, `.machine_readable/Debtfile.a2ml`, `contractiles/INDEX.a2ml`); rewriting those would fail gates that currently pass. - No job-id or shell-var renames (`a2ml-validate`, `A2ML_COUNT`): they are referenced from `needs:` and `${{ needs.*.outputs }}`. The Checks-UI label is updated, as it has no references. _Estate-wide `.deed` gate convergence, 2026-09-21. Script: `estate-audit/engine/deed_gate_migration.py`._ --------- Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent c788649 commit 76cdcea

2 files changed

Lines changed: 11 additions & 11 deletions

File tree

‎.github/hooks/validate-a2ml.sh‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,8 +288,8 @@ echo "::group::A2ML Manifest Validation"
288288
echo "Scanning ${SCAN_PATH} for .a2ml files..."
289289
echo ""
290290

291-
# Find all .a2ml files, excluding .git directory
292-
mapfile -t a2ml_candidates < <(find "$SCAN_PATH" -name '*.a2ml' -not -path '*/.git/*' -type f | sort)
291+
# Find all manifest files, excluding .git directory
292+
mapfile -t a2ml_candidates < <(find "$SCAN_PATH" \( -name '*.a2ml' -o -name '*.deed' \) -not -path '*/.git/*' -type f | sort)
293293

294294
# Apply paths-ignore filter
295295
a2ml_files=()

‎.github/workflows/dogfood-gate.yml‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
# Job 1: A2ML manifest validation
2121
# ---------------------------------------------------------------------------
2222
a2ml-validate:
23-
name: Validate A2ML manifests
23+
name: Validate DEED manifests
2424
runs-on: ubuntu-latest
2525

2626
steps:
@@ -30,10 +30,10 @@ jobs:
3030
- name: Check for A2ML files
3131
id: detect
3232
run: |
33-
COUNT=$(find . -name '*.a2ml' -not -path './.git/*' | wc -l)
33+
COUNT=$(find . \( -name '*.a2ml' -o -name '*.deed' \) -not -path './.git/*' | wc -l)
3434
echo "count=$COUNT" >> "$GITHUB_OUTPUT"
3535
if [ "$COUNT" -eq 0 ]; then
36-
echo "::warning::No .a2ml manifest files found. Every RSR repo should have 0-AI-MANIFEST.a2ml"
36+
echo "::warning::No .a2ml/.deed manifest files found. Every RSR repo should have a repo deed (<reponame>_chora.deed); legacy 0-AI-MANIFEST.a2ml accepted mid-migration — standards #837"
3737
fi
3838
3939
- name: Validate A2ML manifests
@@ -46,14 +46,14 @@ jobs:
4646
cat <<'EOF' >> "$GITHUB_STEP_SUMMARY"
4747
## A2ML Validation
4848
49-
:warning: **No .a2ml files found.** Every RSR-compliant repo should have at least `0-AI-MANIFEST.a2ml`.
49+
:warning: **No .a2ml/.deed manifest files found.** Every RSR-compliant repo should have a repo deed (`<reponame>_chora.deed`) at its root.
5050
51-
Create one with: `a2mliser init` or copy from [rsr-template-repo](https://github.com/hyperpolymath/rsr-template-repo).
51+
Copy it from [rsr-template-repo](https://github.com/hyperpolymath/rsr-template-repo).
5252
EOF
5353
else
5454
echo "## A2ML Validation" >> "$GITHUB_STEP_SUMMARY"
5555
echo "" >> "$GITHUB_STEP_SUMMARY"
56-
echo "Scanned **${A2ML_COUNT}** .a2ml file(s). See step output for details." >> "$GITHUB_STEP_SUMMARY"
56+
echo "Scanned **${A2ML_COUNT}** manifest file(s) (.deed, or legacy .a2ml). See step output for details." >> "$GITHUB_STEP_SUMMARY"
5757
fi
5858
5959
# ---------------------------------------------------------------------------
@@ -91,7 +91,7 @@ jobs:
9191
cat <<'EOF' >> "$GITHUB_STEP_SUMMARY"
9292
## K9 Contract Validation
9393
94-
:warning: **No K9 contract files found.** Repos with configuration files should have K9 contracts.
94+
:warning: **No .k9/.k9.ncl contract files found.**
9595
9696
Generate contracts with: `k9iser generate .`
9797
EOF
@@ -242,7 +242,7 @@ jobs:
242242
MAX=5
243243
244244
# A2ML manifest present?
245-
if find . -name '*.a2ml' -not -path './.git/*' | head -1 | grep -q .; then
245+
if find . \( -name '*.a2ml' -o -name '*.deed' \) -not -path './.git/*' | head -1 | grep -q .; then
246246
SCORE=$((SCORE + 1))
247247
A2ML_STATUS=":white_check_mark:"
248248
else
@@ -288,7 +288,7 @@ jobs:
288288
289289
| Tool/Format | Status | Notes |
290290
|-------------|--------|-------|
291-
| A2ML manifest (0-AI-MANIFEST.a2ml) | ${A2ML_STATUS} | Required for all RSR repos |
291+
| DEED repo deed (`<reponame>_chora.deed`) | ${A2ML_STATUS} | Required for all RSR repos |
292292
| K9 contracts | ${K9_STATUS} | Required for repos with config files |
293293
| .editorconfig | ${EC_STATUS} | Required for all repos |
294294
| Groove endpoint | ${GROOVE_STATUS} | Required for service repos |

0 commit comments

Comments
 (0)