Skip to content

DEED conversion campaign — tracking & acceptance criteria (.a2ml → .deed) #837

Description

@hyperpolymath

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, and estate_chora.deed also 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 .a2ml artifact 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. 1-formats/deed/spec/abnf/deed.anbf and deed.abnf_v1.0 diverge — one must be ruled normative and the other deleted/aliased.
  2. The spec links ../abnf/deed.abnf — that file does not exist.
  3. 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).
  4. 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

  1. Grammar hygiene: one normative ABNF; fix broken abnf/deed.abnf links; point the README at THIS issue. (Prepared but held for owner review.)
  2. Mapping specs, one PR per family: CLADE/META/ECOSYSTEM/AGENTIC/NEUROSYM/PLAYBOOK → repo-deed clause mapping; STATE → journal/praxis-deed decision; scorecards → repo-deed-clause vs separate form.
  3. Canonical translator + conformance lane: CI parses every translated file against the normative ABNF, including the estate_chora dispatch-ordering test.
  4. Per-district conversion: standards .machine_readable/ (dogfood) → rsr-template mint sources → estate wave; flip assess.just RSR gates from .a2ml presence to .deed presence alongside.
  5. Acceptance: the §above table verified greppable; enum vocab byte-preserved (hub|satellite|planned|reserved, PMPL carve-out wording).

Related

Activity

  1. hyperpolymath commented on Sep 17, 2026

    @hyperpolymath
    OwnerAuthor

    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.abnf links resolved per-doc-depth to the file holding the cited content, K9-spec links repointed, three extra dead links in a2ml/anchor/README.adoc repaired, 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 (likely git mv deed.anbf deed.abnf + archive rename to deed.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.

  2. hyperpolymath commented on Sep 17, 2026

    @hyperpolymath
    OwnerAuthor

    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.

  3. hyperpolymath commented on Sep 17, 2026

    @hyperpolymath
    OwnerAuthor

    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.

    • Full field table; enums + closed taxonomies carried verbatim as symbols (incl. the harden(ci): estate-wide concurrency-cancel guard + scope affinescript-verify push #122 hub/satellite lineage values, else they lose their other home).
    • P-1..P-5 provenance rules: uuid re-derive fail-closed (never copy); source must parse as a2ml first; every emitted deed parses against the normative grammar; estate stem dispatch fail-closed; CLADE-003/004/005/006 gate semantics re-expressed before the checker retires.
    • :beholding-chora is resolved from the registry with refuse-to-emit absent — no invented identifiers.
    • Worked translation of the real rsr-template instance, machine-checked structurally before commit.
    • Three open questions recorded (§8), NOT decided in the PR.

    Still gated on owner alone: the canonical-grammar-file ruling (rename/archival from #838's body). Everything else in §6 unblocked once #840 lands.

  4. hyperpolymath commented on Sep 17, 2026

    @hyperpolymath
    OwnerAuthor

    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 siblings STATE.a2ml.v2.template, state-migrate-v1-to-v2.sh, state-scm-to-v2.jl.

    Two facts worth the record:

    1. 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.

    2. 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 … @end directive 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.

  5. hyperpolymath commented on Sep 17, 2026

    @hyperpolymath
    OwnerAuthor

    Conformance lane up: PR #849. The campaign now has its tooling half alongside the spec half (#840–#848 all merged). Highlights:

    Findings delivered, NOT silently fixed:

    1. standards' own .machine_readable/CLADE.a2ml is missing primary-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).
    2. Scorecard census (this repo's corpus): 28 files, 48 absolute-path leak lines (/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 + :maturity extension; #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.

  6. 9 remaining items

  7. hyperpolymath commented on Sep 19, 2026

    @hyperpolymath
    OwnerAuthor

    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:

    • A (recommended) — one repo-deed per repo: the ply tree folds into a single <reponame>_chora.deed; depth survives as :ply N data; no grammar change
    • B — one <dirname>_chora.deed per directory (mechanical 1:1, but stretches _chora semantics and multiplies dispatch hazards)
    • C — new fifth form (violates the four-form classification; last resort)

    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 RULING

    Family: ply manifests — 49% of the estate's 20,881 .a2ml files (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:

    # SPDX-License-Identifier: MPL-2.0
    ---
    ### [META]
    id: "wikis-track"
    level: 2
    parent: "../0.1-AI-MANIFEST.a2ml"
    
    ---
    ### [AI_MANIFEST]
    description: |
      Long-form collaborative documentation…
    invariants:
      - "Primary wiki format MUST be Markdown (.md)…"
    

    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 N inside 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.deed per 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/_chora or
    equal ATLAS/estate_chora (the §chora-dispatch-exclusion hazard multiplies).

    Option C — new form. Grammar extension (e.g. *_topos.deed for 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)

    ply manifest deed (repo-file) notes
    file 0.x-AI-MANIFEST.a2ml at depth x clause (dir <path> …) inside <repo>_chora.deed path relative to repo root
    :schema-version :schema-version "1.0.0" required on every deed form — NEW field, header position
    ;; SPDX… header ;; SPDX-License-Identifier: MPL-2.0 licence per-file as today
    META id :id "…"
    META level :ply N depth preserved as data
    META parent clause nesting / :parent "…" prefer nesting under Option A
    AI_MANIFEST description :description "…" string
    AI_MANIFEST invariants :invariants (…) list of strings semantics-critical: acceptance greps run against these

    Semantics 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

    • Root 0-AI-MANIFEST.a2ml → the repo-deed itself: <reponame>_chora.deed at repo root.
    • Stem constraint check: reponame ∉ {estate, …} per dispatch rules — repos named
      estate* need the §chora-dispatch-exclusion side condition tested (estate-file first).

    5. Consumer updates carried by each translation PR

    • rsr: dogfood-gate.yml reads rsr-profile.a2ml (different family, separate spec); ply
      consumers = scripts/gen-repo-map.sh, build/just/repo-init.just, e2e assertions,
      .machine_readable/README.adoc — update in-repo with the translation.
    • standards: scripts/check-manifest-ply.sh (advisory ply checker) retargeted to the deed
      form or retired with the campaign.
    • cicd-suite: manifest-check gate dual-accept already; ply-aware checks audited per repo.

    6. Sequencing within the family

    1. Ruling on §2 (A/B/C).
    2. One pilot repo with a shallow tree (rsr-template-repo, 77 files) — translate by hand/script
      per this spec, witness through the full gate suite.
    3. Script the mechanical parts (META/AI_MANIFEST → clause emission) — the script is
      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).
    4. Propagate estate-wide via the update mechanism (262-repo automation precedent),
      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. .a2ml data files of non-manifest
    families (scorecards, descriptiles, policies…) are NOT ply manifests.

  8. hyperpolymath commented on Sep 19, 2026

    @hyperpolymath
    OwnerAuthor

    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 on 7c804f5.

  9. hyperpolymath commented on Sep 19, 2026

    @hyperpolymath
    OwnerAuthor

    PILOT EXECUTED — Ruling A landed on rsr-template-repo (PR hyperpolymath/rsr-template-repo#176).

    The fold. All 83 0.N-AI-MANIFEST.a2ml → one rsr-template-repo_chora.deed at root:

    • family 7 (root INI allocation manifest) → (manifest …) per mappings/ai-manifest-decision.adoc: 4 agents as verbatim SYMBOLs, 2 policy rules, 4 work items, metadata/project fields — all verbatim.
    • ply tree (77 META-shape + 2 prose + 3 stub manifests; 82 directories) → (ply (directory …)) clauses: parent-links become nesting, level: becomes :ply tier data carried verbatim (it is not filesystem depth — docs/governance is 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.abnf clause production; deed_lint rejects). Minimal conforming form: :rules as 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.py validated 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 Mustfile template-readonly check retired (it grepped a marker that existed nowhere — fake-gate class).

    Next proposed: graduate the family-7 + ply modes into tools/a2ml_to_deed.py so 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.

  10. hyperpolymath commented on Sep 19, 2026

    @hyperpolymath
    OwnerAuthor

    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 as minted-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 archive deed.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 — :maturity extension. Approve the one-field vocabulary extension (status … :maturity X) with closed set experimental 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.deed stem = repo canonical-name (stable identity — my recommendation, and what marid already ships) or repo prefixed-name (reads nicer in ls; 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-chora resolves 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.deed cleanup. 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.

  11. added
    migrationPorting between languages or toolchains (e.g. -> AffineScript)
    scope:estateAffects many or all repos across the estate
    on Sep 30, 2026
  12. hyperpolymath commented on Oct 9, 2026

    @hyperpolymath
    OwnerAuthor

    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:

    • Main: freeze the scorecard corpus to a tombstoned archive. Put exactly one aggregate (assessment …) clause per previously covered spec_id on the assessed repo's deed. Future assessments come from estate-audit in the deed era.
    • Subsidiary: clean the absolute-path leak lines in place before archiving.

    Increment 1 is #1216 (draft, stacked on #1213). It contains:

    • the leak clean, then the move to .machine_readable/archive/scorecards-v1/ with a README tombstone;
    • the four consumers repointed;
    • the ruling recorded in 1-formats/deed/mappings/scorecard-corpus-decision.adoc §5.

    Measured, not estimated:

    Still open on this ruling:

    • Increment 2: one (assessment …) clause per spec_id, with counts computed from the archived records. This needs a <repo>_chora.deed for standards itself, which does not exist yet. Acceptance item 3 (the forward link) is met by the directory tombstone, not by editing frozen .a2ml records.
    • Increment 3: the estate-audit emitter.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    migrationPorting between languages or toolchains (e.g. -> AffineScript)priority:p1High - schedule nextscope:estateAffects many or all repos across the estatestatus:needs-rulingAwaiting an owner decision

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions