Skip to content

docs(deed): first mapping spec — CLADE.a2ml → repo-deed (campaign step, #837) - #840

Merged
hyperpolymath merged 1 commit into
mainfrom
fix/837-clade-mapping-spec
Sep 17, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
fix/837-clade-mapping-spec

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Campaign step 2 → first mapping spec. Refs #837 (tracking); does not close it.

What this adds

1-formats/deed/mappings/ — a new home for translation authority docs, exactly the thing the groundwork said was missing (a family is allowed to be translated only against a mapping spec; translation-without-spec is how the pin-generator trap repeats).

mappings/README.adoc — the frame every family spec must carry: source surface · target form · field table (path + deed value type + transform) · drop doctrine (STATE-v2 "discard the derivable" carried into the campaign) · provenance/validation rules · acceptance greps. Also fixes the family order groundwork chose, highest-loss-risk first.

mappings/clade-to-repo-deed.adoc — family 1: CLADE.a2ml → <canonical-name>_chora.deed.

  • Field table is complete — every template field mapped to clause path + type + transform. Enums and closed taxonomies carried verbatim as symbols: lineage standalone|monorepo|monorepo-child|inflated|deflated|hub|satellite, status reserved|incubating|active|dormant|merged|superseded|archived|extinct, the 12-clade closed taxonomy, and the deliberate primary+primary-name redundancy (so CLADE-006 survives).
  • P-1..P-5 provenance rules: uuid re-derived (UUIDv5 URL namespace) and fail-closed on mismatch, never copied; source must still parse as a2ml before translation (half-hand-translated files rejected); every emitted deed parses against the normative grammar (deed.anbf v1.0.0 until the DEED conversion campaign — tracking & acceptance criteria (.a2ml → .deed) #837 canonical-file ruling); estate stem fails closed on dispatch ordering; CLADE-003/004/005/006 gate semantics re-expressed before the checker may retire.
  • :beholding-chora handled honestly — required by the grammar, so the translator resolves it from the registry (gv-clade-index is the one declaration site today) and refuses to emit otherwise; no made-up identifiers.
  • Worked translation of the real rsr-template-repo instance, machine-checked against the grammar's structural rules before commit (balanced forms 12/12, :schema-version structurally first, zero bare = outside strings).
  • Open questions recorded, not decided (§8): stem choice canonical- vs prefixed-name; whether gv-clade-index migrates in the same wave; ordering for repos minted before the chora is registered.

What this does not do

After this lands (and with the open rulings answered), the next campaign steps are the remaining family specs (META/ECOSYSTEM, STATE, AGENTIC/…) and then the canonical translator + conformance lane that these specs constrain.

…step 1)

Adds the mappings frame (mappings/README.adoc — what every family spec
must carry: source surface, target form, field table, drop doctrine,
provenance rules, acceptance greps) plus the highest-loss-risk family
first: CLADE.a2ml (lineage registry, the only home of the #122
hub/satellite enums).

The spec proposes: filename <canonical-name>_chora.deed; full field
table to the repo-deed clause surface (enums/closed taxonomies
carried verbatim as symbols, uuid re-derived fail-closed never copied,
:beholding-chora resolved from the registry refuse-to-emit otherwise);
drop doctrine (instructional comment blocks stay in the template era
docs — STATE v2 doctrine); provenance/validation rules P-1..P-5
including source-must-parse-as-a2ml-first and estate-stem fail-closed;
worked translation of the real rsr-template-repo instance, machine-
checked against the grammar's structural rules (balanced forms,
:schema-version structurally first, no bare '=' outside strings);
acceptance greps; and three open questions recorded for the owner
rather than decided.

No grammar, no existing files touched; CLADE-003..006 gate semantics
preserved as a P-5 obligation.

Refs #837
@coderabbitai

coderabbitai Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 30 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 1814f138-dfcf-44b6-8bec-3355d05cc1db

📥 Commits

Reviewing files that changed from the base of the PR and between b6d5842 and e0b2299.

📒 Files selected for processing (2)
  • 1-formats/deed/mappings/README.adoc
  • 1-formats/deed/mappings/clade-to-repo-deed.adoc

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hyperpolymath
hyperpolymath merged commit b3b3190 into main Sep 17, 2026
20 of 26 checks passed
@sonarqubecloud

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath deleted the fix/837-clade-mapping-spec branch September 17, 2026 21:38
hyperpolymath added a commit that referenced this pull request Sep 17, 2026
…, escapes (grammar-faithful) (#841)

Faithfulness pass against the normative grammar (`deed.anbf` v1.0.0)
after #840 merged — three gotchas caught while implementing the
validator:

1. **Booleans:** grammar recognises ONLY `#t`/`#f` (strict lowercase);
the worked example wrote `:present true` — a parse ERROR. Field table +
example fixed; transform rule added.
2. **uuid5 body = NAME, not hex:** grammar states the body is the RFC
4122 §4.3 *name input*; emitted literal is
`#u5"github.com/hyperpolymath/rsr-template-repo"`, never derived hex.
P-1 aligned; oracle CI-reproducible (stdlib `uuid.uuid5(NAMESPACE_URL,
…)` == the instance's stored value, verified).
3. **Escapes:** only `\"` `\\` `\n` `\t` legal; `\r`/`\uXXXX` are parse
errors; non-ASCII raw UTF-8. P-3 states the emission rule.

Refs #837. One file, five targeted edits; no normative text changed.
hyperpolymath added a commit that referenced this pull request Sep 17, 2026
#842)

Campaign #837, family 2 per the merged frame (#840). META describes the
repo as artefact; ECOSYSTEM places it on the coordination graph the
acceptance greps live on.

- Full field tables → `(meta …)` / `(ecosystem …)` on the repo's single
deed; enums → symbols, booleans → `#t`/`#f`
- **The #726 `coordination` hub-pointer carried verbatim**; P-7
grep-guard asserts the hub→satellite edge set stays enumerably intact
- One `(related …)` clause per `projects[]` element; fail-closed on
untabled fields
- Worked translation of the real rsr instance machine-checked (balanced
forms, schema-version first, zero bare `=`, no literal true/false)
- Two open questions recorded, not decided

Refs #837. Specs only; no conversions.
hyperpolymath added a commit that referenced this pull request Sep 17, 2026
…en translator (campaign #837) (#849)

The campaign's tooling half arrives alongside the merged spec half
(#840–#848). One property defines the lane: **nothing invalid ever
lands** — emission is gated by validation, and CI gates the repo.

## `deed_lint.py` — the validator

Stdlib-only, written against `spec/abnf/deed.anbf` v1.0.0 (current until
the canonical-file ruling):

- SPDX header required; exactly one form; full input consumed (trailing
content is an error)
- head=`estate-deed|repo-deed|estate-atlas-deed|praxis-deed`;
`:schema-version` STRING exactly once
- filename↔head dispatch with the exact-stem-first side condition
(`estate_chora.deed` can never parse as repo-deed; dots in stems
preserved — final-suffix split only)
- booleans ONLY `#t`/`#f`; bare `true/false/yes/no` rejected as values
(they lex as symbols — the grammar's note is enforced here as a
value-level semantic)
- `#u5"name"` literals (body is the RFC 4122 §4.3 NAME input)
- strings: exactly 4 escapes (`\" \\ \n \t`); `\r`/`\uXXXX` parse
errors; raw control bytes rejected
- separators SP/line-end/comment only — tabs invalid (K9-consistent);
bare CR rejected
- 14-case embedded corpus (`--self-test`) mirrored to
`fixtures/valid|invalid` + one REAL translated deed
(`rsr-template-repo_chora.deed`)

It has already caught two real things: my own mapping spec's `:present
true`/`#u5"<hex>"` errors (fixed in #841 before merge) and a
validator-side guard bug (empty clauses rejected against grammar).

## `a2ml_to_deed.py` — the translator

Implements the specs in `1-formats/deed/mappings/` — and ONLY those. It
cannot invent mappings:

- **P-1**: uuid re-derived via RFC 4122 §4.3 (URL namespace) and
compared to the instance — mismatch writes nothing. Oracle verified:
`uuid5(URL, "github.com/hyperpolymath/rsr-template-repo") ==
a5ea1382-a34c-5334-8a46-a2ebe904c810`
- **refuse-to-emit** without `--beholding-chora` (no invented
identifiers)
- booleans→`#t`/`#f`; enums→symbols against closed sets; slot doctrine
(`""`/`()`) for missing-but-tabled fields; SPDX passthrough
- untabled fields/sections FAIL CLOSED (P-2a) — live catches during
development: `[axis-3-audit-rules]` (#846), `[methodology]` (#847),
`[rsr-repo-skeleton]` (#848) → review → table extended → translate.
Exactly the frame's prescription
- **POST-CONDITION**: emitted text is linted; failure writes nothing

Modes: `full` (six instance files → one deed), per-family
(`clade|agentic|neurosym|playbook`, meta/ecosystem merge via full),
`state-scan` (family-3 classification report — the ruling's paperwork,
no translation), `scorecard-scan` (family-5 census + absolute-path leak
TSV).

## Findings delivered, not silently fixed

- standards' own `.machine_readable/CLADE.a2ml` **lacks `primary-name`**
— CLADE-006 territory; flagged, not patched (reported on #837)
- scorecard corpus census + leak TSV generated from the scanner (28
files here, 48 absolute-path leak lines — full list rides #837)

## CI

`deed-conformance.yml`: self-test → fixtures → lint every committed
`*.deed`, triggered on grammar/tools/deed changes. checkout pinned by
SHA, `persist-credentials: false`.

Refs #837; does not close it (campaign still open: conversion wave,
remaining rulings).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant