Repository navigation
DEED conversion campaign — tracking & acceptance criteria (.a2ml → .deed) #837
Description
Status: tracking issue, opened 2026-09-17 after the owner ruling that the a2ml project is officially retired and that .a2ml artifacts are to be translated using the DEED grammar. No conversion PRs are attached yet — this issue is the campaign's acceptance surface. (The DEED README's (#64) reference for "the conversion campaign" resolves to an unrelated closed Hypatia issue; this issue replaces that dangling pointer.)
What DEED requires (implications for every translation)
- S-expression only. No
key = value, no[section]productions — "a file using=is not a deed." Translation is a rewrite into target forms, not a surface transform. - Four document forms, dispatched by FILENAME STEM before parsing:
estate_chora.deed→ estate-deed;ATLAS.deed→ estate-atlas-deed;<stem>_praxis.deed→ praxis-deed;<stem>_chora.deed→ repo-deed. Normative side condition (not ABNF-expressible): in repo-file, stem ≠estate, andestate_chora.deedalso matches repo-file — implementations MUST test estate-file first (spec §chora-dispatch-exclusion; ruled on standards#752). - Required on every form:
:schema-version. Header =;; SPDX-…lines. - Every
.a2mlartifact must therefore first be classified into one of the four forms; per-family mapping specs are the prerequisite of any mass translation.
Grammar/surface hazards to fix BEFORE any translator is written
1-formats/deed/spec/abnf/deed.anbfanddeed.abnf_v1.0diverge — one must be ruled normative and the other deleted/aliased.- The spec links
../abnf/deed.abnf— that file does not exist. - The campaign had no real tracking issue until this one (README points at the closed, unrelated Hypatia dogfooding job red estate-wide — unresolvable setup-beam pins (companion to hypatia-side fix) #64).
- The filename-dispatch ordering side condition must be hand-encoded in every validator.
Semantics that MUST survive translation (acceptance criteria)
These live only in about-to-be-translated surfaces and have no deed-era home yet — the campaign is not done until each is greppable in the deed era:
| Semantic | Current home | Must land in deed era as |
|---|---|---|
| licence per-category default (MPL-2.0 code / CC-BY-SA-4.0 docs); PMPL reserved for palimpsest-license/plasma/consent-aware-web | 1-formats/templates/STATE.a2ml.template:46 comment (fixed by #645) |
template comment in the deed STATE/journal generator + licensing-policy successor |
CLADE [lineage] type incl. hub/satellite (satellite parent stays "") |
rsr-template-repo build/templates/CLADE.a2ml.in (fixed by rsr#122) |
the repo-deed lineage clause — CLADE has no v2 surface: highest-loss-risk item |
STATE status incl. planned (≡ CLADE phase reserved) + AUTHORITY rule (CLADE phase wins on disagreement; STATE is re-derived) |
rsr-template-repo .machine_readable/descriptiles/STATE.a2ml:14 |
same repo-deed lineage/status clauses |
| STATE v2 doctrine: discard the derivable; keep resume-state only | 1-formats/templates/STATE.a2ml.v2.spec.adoc |
unchanged — deed design embodies it |
| Enum values have no canonical spec home (templates are the source of truth) | — proven during #726 close-out | deed spec chapter + conformance samples |
Existing tooling honesty
state-migrate-v1-to-v2.sh / state-scm-to-v2.jl (1-formats/templates/) are STATE-only and target the pre-DEED @state thin journal — they are not .a2ml → .deed translators. No general translator exists. Recommend a single canonical campaign translator (avoid the pin-generator trap of N writers).
Recommended campaign order
- Grammar hygiene: one normative ABNF; fix broken
abnf/deed.abnflinks; point the README at THIS issue. (Prepared but held for owner review.) - Mapping specs, one PR per family:
CLADE/META/ECOSYSTEM/AGENTIC/NEUROSYM/PLAYBOOK → repo-deedclause mapping; STATE → journal/praxis-deeddecision; scorecards → repo-deed-clause vs separate form. - Canonical translator + conformance lane: CI parses every translated file against the normative ABNF, including the estate_chora dispatch-ordering test.
- Per-district conversion: standards
.machine_readable/(dogfood) → rsr-template mint sources → estate wave; flipassess.justRSR gates from.a2mlpresence to.deedpresence alongside. - Acceptance: the §above table verified greppable; enum vocab byte-preserved (
hub|satellite|planned|reserved, PMPL carve-out wording).
Related
- PR fix(ci): echidna-verify — evict idris2-a2ml job (a2ml project retired; no ruleset pins its context) #836 — first artifact of the retirement ruling:
idris2-a2mlCI job evicted with anti-deadlock ruleset verification. - Orphan pin class: a reusable pin can be a real commit GitHub still refuses to run — 61 startup-dead rows, 0 alive; check-action-pins-resolve.sh tests the wrong predicate #782 (ancestry probe pattern) is the model for "detector before campaign" — the conformance lane in step 3 plays the same role here.
- Volume anchor: 70+
*.scorecard.a2mlin standards.machine_readable/, 6 template families, 435 estate repos with descriptiles (assess.just gates).
Activity
hyperpolymath commentedon Sep 17, 2026
Redirect layer landed: PR #838 (open) fixes every broken pointer this issue's hazard table named — #64 → here in both spec copies, all
abnf/deed.abnflinks resolved per-doc-depth to the file holding the cited content, K9-spec links repointed, three extra dead links ina2ml/anchor/README.adocrepaired, and both grammar files now carry comment-only banners stating the two-file situation. No normativity verdict was stamped (no renames): the surviving decision is the canonical-file ruling (likelygit mv deed.anbf deed.abnf+ archive rename todeed.abnf_v0.1), which the PR body proposes for your ruling.Also today: echidna a2ml-job eviction = PR #836 (open). Both PRs await merge; nothing in this campaign issue's order §6 starts before them.
docs(deed): redirect every broken deed-era pointer — #64 ref, abnf li…
hyperpolymath commentedon Sep 17, 2026
Merge trail: PR #838 (pointer redirects) MERGED 2026-09-17 (
f5ba975e). Hazards §4 items 2-3 are resolved by it; item 1 (canonical grammar file + rename) remains the open ruling. PR #836 (idris2-a2ml eviction) also MERGED (5574d3c4) — the deferred-corpus list in echidna-verify is now: lol + AVOW guarded-dormant, A2ML gone for good.hyperpolymath commentedon Sep 17, 2026
Progress: first campaign deliverable is up as PR #840 — the mapping-spec frame (
1-formats/deed/mappings/README.adoc) plus family 1:CLADE.a2ml → repo-deed.hub/satellitelineage values, else they lose their other home).estatestem dispatch fail-closed; CLADE-003/004/005/006 gate semantics re-expressed before the checker retires.:beholding-chorais resolved from the registry with refuse-to-emit absent — no invented identifiers.Still gated on owner alone: the canonical-grammar-file ruling (rename/archival from #838's body). Everything else in §6 unblocked once #840 lands.
docs(deed): first mapping spec — CLADE.a2ml → repo-deed (campaign step,
docs(deed): mapping spec family 3 — STATE v1 decision spec (options +…
docs(deed): family-1 mapping spec corrections — booleans, uuid5 names…
docs(deed): mapping spec family 2 — META+ECOSYSTEM → repo-deed clauses (
docs(deed): mapping spec family 4 — AGENTIC/NEUROSYM/PLAYBOOK → repo-…
docs(deed): mapping spec family 5 — scorecard corpus decision + path-…
hyperpolymath commentedon Sep 17, 2026
Documentary grounding for family 3: the v2 thin-journal doctrine that #843 cites now has its exact citation pinned —
1-formats/templates/STATE.a2ml.v2.spec.adoc(v2.0.0-draft, 2026-04-05), with live siblingsSTATE.a2ml.v2.template,state-migrate-v1-to-v2.sh,state-scm-to-v2.jl.Two facts worth the record:
The v2 spec's "Removed v1 field → where it lives now" table independently corroborates docs(deed): mapping spec family 3 — STATE v1 decision spec (options + recommendation) #843's option B: session history → git log, completion % → VeriSimDB, milestones → ROADMAP, metadata → META, related projects → ECOSYSTEM. The doctrine predates the campaign; the campaign is its faithful continuation.
The v2 model (phase / blockers / last_action / next_action / session_marker / updated) survives the a2ml deprecation — its consumers (VeriSimDB STATE-journal octad, PanLL session-resume, coordination.k9 reflex guards) want the fields, not the container. The container's grammar (a
@state … @enddirective dialect) is deed-era dead, and its k9-init path was never finished. New open residual for the owner, alongside docs(deed): mapping spec family 3 — STATE v1 decision spec (options + recommendation) #843's maturity question: where does the live v2 journal live in the deed era — a(state-journal …)clause or consumer-side ingest elsewhere? Placement ruling, not mapping fact.docs(deed): family-4 extension — [methodology] tabled; D4-1 comment-c…
docs(deed): family-2 table extension — axis-3-audit-rules populated, …
docs(deed): family-4 completion — PLAYBOOK [rsr-repo-skeleton] tabled (…
hyperpolymath commentedon Sep 17, 2026
Conformance lane up: PR #849. The campaign now has its tooling half alongside the spec half (#840–#848 all merged). Highlights:
deed_lint.py: full validator fordeed.anbfv1.0.0 (14-case self-test + fixture dir green, incl. a REAL translated deed)a2ml_to_deed.py: implements exactly the mapping specs, nothing more. Full six-instance translation of rsr-template-repo passes end-to-end (uuid oracle verified:uuid5(URL, github.com/hyperpolymath/rsr-template-repo) == a5ea1382-…)deed-conformance.ymlgates self-test → fixtures → every committed *.deedFindings delivered, NOT silently fixed:
.machine_readable/CLADE.a2mlis missingprimary-name(CLADE-006 territory) — the translator correctly refuses to translate it. Needs an instance fix by the owner (or a rule that template-era instances get repaired at mint-time)./home/user/standards/…). Full TSV rides with the residue artefacts for the owner-side clean per docs(deed): mapping spec family 5 — scorecard corpus decision + path-leak remediation #845's remediation.Everything now executable without owner input is executed. Remaining gated on you: the rulings bundled earlier (canonical grammar filename; #843's STATE option +
:maturityextension; #845's scorecard option B + journal placement; #840's three open questions), the actual conversion wave (needs those rulings + a repo where deeds may land), and #645's re-propagation run.9 remaining items
hyperpolymath commentedon Sep 19, 2026
Mapping spec DRAFT #1 — ply manifests (the 49% family) — for ruling
Per the 2026-09-19 rulings: a2mliser is retired (owner deleting it), so mapping specs + a spec-driven emitter carry the translation. This is the first spec, covering the largest family (3,678 of 7,494 sampled files; 77 in rsr alone).
The one open question is §2 — target form. Ply manifests are per-directory, but DEED's four forms have no per-directory shape:
<reponame>_chora.deed; depth survives as:ply Ndata; no grammar change<dirname>_chora.deedper directory (mechanical 1:1, but stretches_chorasemantics and multiplies dispatch hazards)Grammar-hygiene hazards 1–2 of this issue are cleared by the merged reconciliation (#856: one normative
deed.abnf).MAPPING SPEC — ply manifests (
0.x-AI-MANIFEST.a2ml) → DEED · DRAFT FOR RULINGFamily: ply manifests — 49% of the estate's 20,881
.a2mlfiles (3,678 of 7,494 sampled;77 in rsr-template-repo alone). Campaign: standards #837. Status: DRAFT — owner ruling 2026-09-19
assigned this spec as the translation authority after a2mliser's retirement.
1. Source form (what exists today)
YAML-ish manifests with
---separators, one per repository directory, ply number = depth:Observed fields: META{id, level, parent}, AI_MANIFEST{description, invariants, (occasional
extras per family)}. Root form
0-AI-MANIFEST.a2ml(level 0) sits at repo root.2. Target-form decision — THE open question (needs ruling)
DEED dispatches on filename stem into exactly four forms; none is per-directory by design.
Three options:
Option A — one repo-deed per repo (RECOMMENDED). Collapse each repo's ply tree into a
single
<reponame>_chora.deed(repo-file form), carrying one clause per former ply node.Depth survives as data (
:ply Ninside each clause), not as filename arithmetic.Pro: matches the four-form dispatch with zero grammar extension; one deed per repo is what
validators/consumers expect; parent-links become clause nesting. Con: large deeds for deep
trees (developer-ecosystem: 3,857 source files — its ply tree needs chunking rules).
Option B — one deed per directory.
<dirname>_chora.deedper former ply file.Pro: mechanical 1:1. Con: stretches
_chora(repo-deed) semantics to subdirectories;hundreds of tiny deeds; dispatch collisions where dir names end in
_praxis/_choraorequal
ATLAS/estate_chora(the §chora-dispatch-exclusion hazard multiplies).Option C — new form. Grammar extension (e.g.
*_topos.deedfor subtree-deeds).Con: changes the normative grammar mid-campaign; violates "classify into one of the four
forms"; only if A and B are both rejected.
3. Field mapping (Option A; symmetric for B)
0.x-AI-MANIFEST.a2mlat depth x(dir <path> …)inside<repo>_chora.deed:schema-version:schema-version "1.0.0";; SPDX…header;; SPDX-License-Identifier: MPL-2.0:id "…":ply N:parent "…":description "…"string:invariants (…)list of stringsSemantics that MUST survive (campaign acceptance, §837): per-directory licence defaults,
invariant strings verbatim (they carry rulings — e.g. the wiki-md invariant), parent
lineage, ply depth.
4. Filename rule
0-AI-MANIFEST.a2ml→ the repo-deed itself:<reponame>_chora.deedat repo root.estate, …} per dispatch rules — repos namedestate*need the §chora-dispatch-exclusion side condition tested (estate-file first).5. Consumer updates carried by each translation PR
dogfood-gate.ymlreadsrsr-profile.a2ml(different family, separate spec); plyconsumers =
scripts/gen-repo-map.sh,build/just/repo-init.just, e2e assertions,.machine_readable/README.adoc— update in-repo with the translation.scripts/check-manifest-ply.sh(advisory ply checker) retargeted to the deedform or retired with the campaign.
6. Sequencing within the family
per this spec, witness through the full gate suite.
campaign tooling owned by deed-ecosystem (a2mliser retired by owner ruling; a small
spec-driven emitter replaces it, or the conversion stays scripted-per-repo).
deepest trees last (developer-ecosystem needs the chunking rule from §2-A first).
7. Explicitly out of scope here
Other families get their own specs in census order:
.machine_readable/other (26%),contractiles (11%), STATE (4%), then the long tail.
.a2mldata files of non-manifestfamilies (scorecards, descriptiles, policies…) are NOT ply manifests.
hyperpolymath commentedon Sep 19, 2026
RULING LANDED 2026-09-19 — §2 target form: Option A (owner ruled)
One repo-deed per repo. Each repository's ply tree collapses into a single
<reponame>_chora.deed(repo-file form); every former ply node becomes a clause, depth survives as data (:ply N), parent-links become clause nesting. No grammar extension; dispatch stays within the four forms. Deep-tree repos (developer-ecosystem, 3,857 files) need the chunking rule before wave 4 reaches them — pilot on rsr-template-repo (77 ply manifests) first.Spec (
mapping-spec-ply-manifests-DRAFT.md, posted above) is now RATIFIED on §2; remaining spec sections (field mapping, sequencing) stand as drafted unless amended in pilot.Also merged today: grammar reconciliation (#856 — one normative
deed.abnf) and the wiki-doctrine fix (rsr#168 — wikis.md, rest.adoc). Estate audit on the template: all 26 gates GREEN as of run 35462811612 on7c804f5.docs(deed): mapping spec family 7 — 0-AI-MANIFEST decision (rename-ha…
hyperpolymath commentedon Sep 19, 2026
PILOT EXECUTED — Ruling A landed on rsr-template-repo (PR hyperpolymath/rsr-template-repo#176).
The fold. All 83
0.N-AI-MANIFEST.a2ml→ onersr-template-repo_chora.deedat root:(manifest …)permappings/ai-manifest-decision.adoc: 4 agents as verbatim SYMBOLs, 2 policy rules, 4 work items, metadata/project fields — all verbatim.(ply (directory …))clauses: parent-links become nesting,level:becomes:plytier data carried verbatim (it is not filesystem depth —docs/governanceis tier 1 at depth 2), descriptions / ordered invariants / canonical-locations preserved.Grammar finding for the campaign record: the decision spec's
(policy (rules (…)))sketch is not grammar-conformant — clauses cannot hold bare list values (deed.abnfclauseproduction; deed_lint rejects). Minimal conforming form::rulesas a field with a list value (order preserved; semantics identical). Flagging so the family-7 translator encodes the field form.Lane discipline held: nothing was written unless
tools/deed_lint.pyvalidated grammar + filename dispatch first; the emitter failed closed four times during development (unknown fields, level≠depth assumption, ungrammatical list children, block-scalar boundaries) — every failure surfaced, nothing guessed. Acceptance audit re-parsed the deed AST against every source file: ids/tiers/descriptions/invariants/canonical-locations 1:1; #858 §5 acceptance greps pass.Drop-doctrine disclosures:
build/container's[USAGE]how-to prose dropped (data sections carried, including FILE_RELATIONSHIPS); prose manifests' instructional sections dropped; stale[DATE]token row removed; the Mustfiletemplate-readonlycheck retired (it grepped a marker that existed nowhere — fake-gate class).Next proposed: graduate the family-7 + ply modes into
tools/a2ml_to_deed.pyso the wave inherits a tested translator, then apply the pilot's consumer checklist (root-allow glob-entry pattern, repo-init rename-not-token rule, validator recogniser sync) as the estate-wide playbook.hyperpolymath commentedon Sep 19, 2026
Ruling register R1–R11 — the campaign's whole open-question stack, answerable directly here
Reply terse if you like (
R2: yes,R6: canonical-name…). Each answer becomes a recorded ruling, tabled into the specs/tools with the date — same pattern asminted-from/registry. Replying "defaults" accepts the recommended option on every question.R1 — Grammar canonical filename. Rename
1-formats/deed/spec/abnf/deed.anbf→deed.abnf(the content is v1.0.0, the extension is a typo) AND rename the archivedeed.abnf_v1.0→deed.abnf_v0.1(its content is the v0.1.0 draft; the current name lies). Yes / no / different spelling?R2 — STATE option (family 3, #843). Confirm option B: extract genuinely-statal fields (
[position] phase/maturity) into the CLADE status clause; v1 files tombstoned to an archive surface; milestone/blocker/action journal rows do NOT translate. Yes / no?R3 —
:maturityextension. Approve the one-field vocabulary extension(status … :maturity X)with closed setexperimental alpha beta production lts(SYMBOL)? yes / no / revise-set?R4 — v2-journal placement. In the deed era, where does the live v2 thin-journal (phase / blockers / last_action / next_action, per
STATE.a2ml.v2.spec.adoc) live?(a) a
(state-journal …)clause on the repo deed;(b) stays a repo-local file ingested by consumers (VeriSimDB STATE-journal octad, PanLL resume panel, k9 reflex guards) with the deed pointing at it;
(c) other — tell me.
R5 — Scorecards (family 5, #845). Confirm option B: freeze the 70+ corpus to a tombstoned archive; exactly one aggregate
(assessment …)clause per previously-covered spec_id on the assessed repo's deed; future assessments emitted in the deeds era by estate-audit. Yes / no? And subsidiary: clean the 48 absolute-path leak lines (/home/user/standards/…) in place before archiving — yes / no?R6 — Deed filename stem.
<stem>_chora.deedstem = repo canonical-name (stable identity — my recommendation, and what marid already ships) or repo prefixed-name (reads nicer inls; changes when a clade is chosen → rename churn)?R7 — gv-clade-index wave. Does the clade registry migrate to the estate chora in this wave, or does it stay the external authority point that
:beholding-choraresolves from until a later campaign?R8 — Chora convention. marid ships
:beholding-chora #u5"estate/chora". Ratify that NAME form as the wave convention? And for repos minted before any chora is registered: keep translator refuse-to-emit (my recommendation) or a ruled placeholder?R9 — standards' own CLADE.a2ml. Its instance lacks
primary-name(CLADE-006 territory; the translator correctly refuses it).(a) I repair the instance to the template field set and post the exact one-line diff here first;
(b) you repair it;
(c) leave fail-closed until the wave reaches it.
R10 — Family 7, AI-MANIFEST (PR #858, bundled asks).
(a) Confirm option A:
(manifest …)clauses on the repo deed (praxis-deed rejected in the spec, with reasons);(b) agent seen-set closed-and-ruled (
CLAUDE CHATGPT GEMINI VIBE) or open-with-review-flag (translator emits, flags unknowns)?(c) Where is the AI-MANIFEST generator's home (the ~900-file emit source)? Wave rule is generator-first per the #645 lesson; I need the location.
R11 — marid's
0-AI-MANIFEST.deedcleanup. The renamed-not-translated file flagged today:(a) you handle marid-side (delete + regenerate once family 7 lands);
(b) I open a cleanup PR to marid after family 7 is ruled;
(c) leave as a live demonstration of the hazard class until the wave reaches marid.
Current interaction state (for completeness): PR #858 (family-7 decision spec) is open; R10(a)'s confirmation is its only gate. Everything else in the campaign that could execute without a ruling has executed — this register IS the boundary.
feat(deed): translate launcher-standard to .deed (D73-C, #837) (#952)
feat(gate): fail on stale launcher-standard refs (standards#960 AC4) (#…
hyperpolymath commentedon Oct 9, 2026
R5 — RULED 2026-10-09: option B, with the leak clean first (owner)
This answers R5 from the ruling register, main question and subsidiary together:
(assessment …)clause per previously coveredspec_idon the assessed repo's deed. Future assessments come from estate-audit in the deed era.Increment 1 is #1216 (draft, stacked on #1213). It contains:
.machine_readable/archive/scorecards-v1/with a README tombstone;1-formats/deed/mappings/scorecard-corpus-decision.adoc§5.Measured, not estimated:
7b05a323, 2026-09-22) had already rewritten one of the 48. All 47 are cleaned, and 0 remain.Still open on this ruling:
(assessment …)clause perspec_id, with counts computed from the archived records. This needs a<repo>_chora.deedfor standards itself, which does not exist yet. Acceptance item 3 (the forward link) is met by the directory tombstone, not by editing frozen.a2mlrecords.chore: retire the A2ML spec registry and its gates (#1161) (#1213)
chore(r5): archive the scorecard corpus and clean path leaks (#837)
chore(r5): archive the scorecard corpus and clean path leaks (#837) (#…