From 89c7989f2c1a91ec5b0a4aa0fad8daad00cbbd5d Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Sat, 19 Sep 2026 08:39:07 +0000 Subject: [PATCH] fix(deed): table owner-ruled relationship symbols minted-from + registry (#837 marid report) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First estate conversion (marid, owner ruling 2026-09-19) fail-closed on two relationship values outside the template-instance seen-set: minted-from (the rsr-template parent edge every minted repo carries) and registry (the gv-clade-index registration edge). Both ruled legal deed relationship symbols by the owner; tabled here in the family-2 spec §3 and the translator's RELATIONSHIPS set. The seen-set gap was structural: built from the template instance, which by definition has no mint parent. Refs #837 --- 1-formats/deed/mappings/meta-ecosystem-to-repo-deed.adoc | 2 +- 1-formats/deed/tools/a2ml_to_deed.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/1-formats/deed/mappings/meta-ecosystem-to-repo-deed.adoc b/1-formats/deed/mappings/meta-ecosystem-to-repo-deed.adoc index 7d22c02aa..031b2caac 100644 --- a/1-formats/deed/mappings/meta-ecosystem-to-repo-deed.adoc +++ b/1-formats/deed/mappings/meta-ecosystem-to-repo-deed.adoc @@ -66,7 +66,7 @@ does not get its own file. (One deed per repo is the doc-head's semantics.) | `[pipeline] chain` | `(ecosystem :chain "standards → rsr-template-repo → (every estate repo)")` | verbatim STRING (arrow prose stays prose) | `[pipeline] notes` | `(ecosystem :pipeline-notes "…")` | verbatim STRING | `[pipeline] coordination` | `(ecosystem :coordination standards)` | **the #726 hub-pointer, carried VERBATIM** — hub repo name → SYMBOL; empty string (standalone) stays `:coordination ""` -| `[related-projects] projects[]` | repeated clauses: `(related :name "standards" :relationship standard-source :notes "…")` | name → STRING, relationship → SYMBOL (`standard-source build-tooling validation-tooling signing-tooling verification-tooling` seen set), notes → STRING; one `(related …)` per array element, order-free (deed order is not semantic) +| `[related-projects] projects[]` | repeated clauses: `(related :name "standards" :relationship standard-source :notes "…")` | name → STRING, relationship → SYMBOL (`standard-source build-tooling validation-tooling signing-tooling verification-tooling minted-from registry` — closed set, **owner-ruled 2026-09-19** per the first estate conversion report (marid): `minted-from` = the rsr-template parent edge every minted repo carries, `registry` = the gv-clade-index registration edge; the template-instance seen-set could never contain them, so the gap was structural, not incidental), notes → STRING; one `(related …)` per array element, order-free (deed order is not semantic) |=== == 4. Drop doctrine diff --git a/1-formats/deed/tools/a2ml_to_deed.py b/1-formats/deed/tools/a2ml_to_deed.py index 01ed70488..b12cea1f4 100644 --- a/1-formats/deed/tools/a2ml_to_deed.py +++ b/1-formats/deed/tools/a2ml_to_deed.py @@ -129,7 +129,11 @@ def require(data, section, keys, fam, required=None, defaults=None): META_TYPES = {"library", "binary", "service", "website", "monorepo"} PKGMGR = {"guix", "cargo", "mix"} RELATIONSHIPS = { - "standard-source", "build-tooling", "validation-tooling", "signing-tooling", "verification-tooling" + "standard-source", "build-tooling", "validation-tooling", "signing-tooling", "verification-tooling", + # Owner ruling 2026-09-19 (first estate conversion, marid): legal deed + # relationship symbols — minted-from = the rsr-template parent edge every + # minted repo carries; registry = the gv-clade-index registration edge. + "minted-from", "registry" } SCAN_DEPTH = {"quick", "standard", "deep"}