From 4c28cec72d88b13430544e55dbe733c43783f630 Mon Sep 17 00:00:00 2001 From: hyperpolymath Date: Sat, 19 Sep 2026 18:28:48 +0000 Subject: [PATCH] =?UTF-8?q?fix(deed):=20grammar=20files=20come=20together?= =?UTF-8?q?=20=E2=80=94=20one=20normative=20deed.abnf=20(#837=20ruling)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Owner ruling 2026-09-19: 'get them to come together'. The two grammar files were already diagnosed (their own NOTICE blocks cite #837): the v1.0.0 revision sat under a typo'd .anbf extension, and the v0.1.0 DRAFT archive was misnamed deed.abnf_v1.0. - spec/abnf/deed.anbf -> spec/abnf/deed.abnf (sole normative grammar; the rename also heals the long-dead '../abnf/deed.abnf' links in the v0.1 spec and IANA registration filename) - spec/abnf/deed.abnf_v1.0 -> spec/abnf/archive/deed.abnf_v0.1.0-draft (true version in the name; its only extra rule version-field is superseded — v1.0.0 folds :schema-version into 'field' with the exactly-once side condition) - all references follow: README.adoc + DEED-GRAMMAR-SPEC.adoc (normative note rewritten to the post-ruling state, links, references section), mappings/README + clade-to-repo-deed ('until the ruling' phrasing retired), tools/README + deed_lint.py docstring, IANA registration path prefix corrected (deed/spec -> 1-formats/deed/spec) Residual check: zero deed.anbf refs; the only deed.abnf_v1.0 mention is the historical 'previously misnamed' prose in the new NOTE. --- 1-formats/deed/README.adoc | 26 +++++++++---------- .../application-vnd.deed-registration.txt | 4 +-- 1-formats/deed/mappings/README.adoc | 5 ++-- .../deed/mappings/clade-to-repo-deed.adoc | 4 +-- 1-formats/deed/spec/DEED-GRAMMAR-SPEC.adoc | 26 +++++++++---------- .../deed.abnf_v0.1.0-draft} | 2 +- .../deed/spec/abnf/{deed.anbf => deed.abnf} | 11 ++++---- 1-formats/deed/tools/README.adoc | 3 +-- 1-formats/deed/tools/deed_lint.py | 2 +- 9 files changed, 39 insertions(+), 44 deletions(-) rename 1-formats/deed/spec/abnf/{deed.abnf_v1.0 => archive/deed.abnf_v0.1.0-draft} (98%) rename 1-formats/deed/spec/abnf/{deed.anbf => deed.abnf} (94%) diff --git a/1-formats/deed/README.adoc b/1-formats/deed/README.adoc index ed7ecca26..88512202e 100644 --- a/1-formats/deed/README.adoc +++ b/1-formats/deed/README.adoc @@ -20,20 +20,17 @@ what unblocks the `.a2ml` → `.deed` conversion (#837) and the downstream consumers. The typing chapter (<>) is marked PROPOSED throughout and is *not* part of the v0.1 conformance surface. -*Normative grammar:* link:spec/abnf/deed.anbf[abnf/deed.anbf] is normative for +*Normative grammar:* link:spec/abnf/deed.abnf[abnf/deed.abnf] is normative for parsing. The EBNF in <> is informative. + -NOTE (standards#837): the grammar currently ships as TWO files — -this one (declares v1.0.0; typo'd `.anbf` extension) and the sibling archive -`deed.abnf_v1.0` (misnamed: its content is v0.1.0 DRAFT, mirroring -`DEED-GRAMMAR-SPEC_v0.1.adoc`). Links below resolve to the file holding the -cited content. The campaign's held grammar-hygiene step declares ONE -normative file; until that owner ruling, `deed.anbf` carries the most -recent grammar. +NOTE (standards#837): owner ruling 2026-09-19 brought the grammar files +together — `deed.abnf` (v1.0.0) is the sole normative grammar. The v0.1.0 +DRAFT archive lives at `archive/deed.abnf_v0.1.0-draft` under its true +version (it was previously misnamed `deed.abnf_v1.0`). Compatible with: -* link:spec/abnf/deed.abnf_v1.0[DEED ABNF v0.1.0 DRAFT (file `deed.abnf_v1.0`; misnamed, content is v0.1.0)] (as amended by the alignment errata) +* link:spec/abnf/archive/deed.abnf_v0.1.0-draft[DEED ABNF v0.1.0 DRAFT (archived under its true version)] (as amended by the alignment errata) * link:../../2-protocols/k9-coordination/spec/COORDINATION-K9-SPEC.adoc[K9 Coordination Spec] (separate surface; DEED does not parse `.k9`) @@ -117,7 +114,7 @@ INVALID). Parsers MUST be deterministic given identical input bytes. Keywords, document heads, booleans, UUID prefixes, filename dispatch literals, and string-escape letters are *case-sensitive*. `repo-deed` is valid; `REPO-DEED` is not. `#t` is valid; `#T` is not. This matches RFC 7405 -`%s"..."` literals in link:spec/abnf/deed.anbf[deed.anbf]. +`%s"..."` literals in link:spec/abnf/deed.abnf[deed.abnf]. [cols="1,3"] |=== @@ -182,7 +179,7 @@ speciation artefact, not a deed. == Concrete syntax The productions below are *informative EBNF*. If they disagree with -link:spec/abnf/deed.anbf[abnf/deed.anbf], the ABNF wins. +link:spec/abnf/deed.abnf[abnf/deed.abnf], the ABNF wins. ---- Deed ::= Header Sep? Form Sep? EOF @@ -313,7 +310,7 @@ implementation MUST test the exact name `estate_chora.deed` BEFORE the [NOTE] ==== ABNF cannot express negation, so this exclusion is a side condition in -both this document and `abnf/deed.anbf`. The side condition is normative: +both this document and `abnf/deed.abnf`. The side condition is normative: the grammar alone is not sufficient to dispatch a filename. ==== @@ -756,7 +753,7 @@ unnoticed, and it must not carry over to `.deed`. A `.deed` file in `strict` mode MUST: -. Parse completely against `abnf/deed.anbf` (full input consumed). +. Parse completely against `abnf/deed.abnf` (full input consumed). . Have a filename that dispatches to a head matching `DocHead`. . Carry the required identity fields in the table in <>. . Not use `_` in any symbol, `#T`/`#F` as booleans, or unknown escapes. @@ -867,7 +864,8 @@ locally. Either the estate chora gains it, or `extends-vocabulary` lands. == References -* link:spec/abnf/deed.anbf[DEED ABNF (v1.0.0, file `deed.anbf`)] +* link:spec/abnf/deed.abnf[DEED ABNF (v1.0.0, normative)] · + link:spec/abnf/archive/deed.abnf_v0.1.0-draft[v0.1.0 DRAFT archive] * link:https://www.rfc-editor.org/rfc/rfc7405[RFC 7405] (case-sensitive ABNF strings) * link:https://www.rfc-editor.org/rfc/rfc4122[RFC 4122] §4.3 (UUID v5) * link:../../2-protocols/k9-coordination/spec/COORDINATION-K9-SPEC.adoc[K9 Coordination File Specification] diff --git a/1-formats/deed/docs/iana/application-vnd.deed-registration.txt b/1-formats/deed/docs/iana/application-vnd.deed-registration.txt index 11ecd30a7..efa752981 100644 --- a/1-formats/deed/docs/iana/application-vnd.deed-registration.txt +++ b/1-formats/deed/docs/iana/application-vnd.deed-registration.txt @@ -106,7 +106,7 @@ Published specification: https://github.com/hyperpolymath/standards/blob/main/deed/spec/DEED-GRAMMAR-SPEC.adoc Formal grammar (ABNF): - https://github.com/hyperpolymath/standards/blob/main/deed/spec/abnf/deed.abnf + https://github.com/hyperpolymath/standards/blob/main/1-formats/deed/spec/abnf/deed.abnf Applications which use this media type: - DEED validators and CI gates (the validate-action composite action) @@ -212,7 +212,7 @@ References: https://github.com/hyperpolymath/standards/blob/main/deed/spec/DEED-GRAMMAR-SPEC.adoc [4] DEED ABNF grammar - https://github.com/hyperpolymath/standards/blob/main/deed/spec/abnf/deed.abnf + https://github.com/hyperpolymath/standards/blob/main/1-formats/deed/spec/abnf/deed.abnf [5] application/vnd.k9 registration (companion enforcement format) https://github.com/hyperpolymath/standards/blob/main/k9-svc/docs/iana/application-vnd.k9-registration.txt diff --git a/1-formats/deed/mappings/README.adoc b/1-formats/deed/mappings/README.adoc index cfd47c522..96e5e43cb 100644 --- a/1-formats/deed/mappings/README.adoc +++ b/1-formats/deed/mappings/README.adoc @@ -23,9 +23,8 @@ trap repeats at campaign scale. duplicated (the STATE v2 doctrine, carried into the campaign). . **Provenance & validation** — how the conformance lane knows the translation is honest: re-derivation checks, reject cases, and the fixtures the lane - must parse against the normative grammar (see #837 for the pending - canonical-file ruling; references below say "the current grammar - (`deed.anbf`, v1.0.0)" until then). + must parse against the normative grammar (canonical-file ruling landed 2026-09-19; references below mean the + normative grammar (`deed.abnf`, v1.0.0)). . **Acceptance greps** — the strings that MUST be greppable in the deed era for the family to count as preserved (campaign acceptance criteria). diff --git a/1-formats/deed/mappings/clade-to-repo-deed.adoc b/1-formats/deed/mappings/clade-to-repo-deed.adoc index a1c02915e..5bc5d3e71 100644 --- a/1-formats/deed/mappings/clade-to-repo-deed.adoc +++ b/1-formats/deed/mappings/clade-to-repo-deed.adoc @@ -114,8 +114,8 @@ Fields not listed do not exist in the deed era for this family. is rejected before any output assignment. A source carrying `=` inside a *string* is fine (strings pass through escaped). * **P-3 (output must parse as DEED):** every emitted deed is parsed against - the current normative grammar (`deed.anbf` v1.0.0 until the #837 ruling - lands): full input consumed, `:schema-version` structurally first, unknown + the normative grammar (`deed.abnf` v1.0.0; the #837 canonical-file + ruling landed 2026-09-19): full input consumed, `:schema-version` structurally first, unknown clauses are *errors* (validator §conformance), no `=` outside a symbol-legal position, and string emission uses ONLY the four legal escapes `\"` `\\` `\n` `\t` — `\r` and `\uXXXX` are parse errors; non-ASCII diff --git a/1-formats/deed/spec/DEED-GRAMMAR-SPEC.adoc b/1-formats/deed/spec/DEED-GRAMMAR-SPEC.adoc index 703a18de9..b7e91fd65 100644 --- a/1-formats/deed/spec/DEED-GRAMMAR-SPEC.adoc +++ b/1-formats/deed/spec/DEED-GRAMMAR-SPEC.adoc @@ -20,20 +20,17 @@ what unblocks the `.a2ml` → `.deed` conversion (#837) and the downstream consumers. The typing chapter (<>) is marked PROPOSED throughout and is *not* part of the v0.1 conformance surface. -*Normative grammar:* link:./abnf/deed.anbf[abnf/deed.anbf] is normative for +*Normative grammar:* link:./abnf/deed.abnf[abnf/deed.abnf] is normative for parsing. The EBNF in <> is informative. + -NOTE (standards#837): the grammar currently ships as TWO files — -this one (declares v1.0.0; typo'd `.anbf` extension) and the sibling archive -`deed.abnf_v1.0` (misnamed: its content is v0.1.0 DRAFT, mirroring -`DEED-GRAMMAR-SPEC_v0.1.adoc`). Links below resolve to the file holding the -cited content. The campaign's held grammar-hygiene step declares ONE -normative file; until that owner ruling, `deed.anbf` carries the most -recent grammar. +NOTE (standards#837): owner ruling 2026-09-19 brought the grammar files +together — `deed.abnf` (v1.0.0) is the sole normative grammar. The v0.1.0 +DRAFT archive lives at `archive/deed.abnf_v0.1.0-draft` under its true +version (it was previously misnamed `deed.abnf_v1.0`). Compatible with: -* link:./abnf/deed.abnf_v1.0[DEED ABNF v0.1.0 DRAFT (file `deed.abnf_v1.0`; misnamed, content is v0.1.0)] (as amended by the alignment errata) +* link:./abnf/archive/deed.abnf_v0.1.0-draft[DEED ABNF v0.1.0 DRAFT (archived under its true version)] (as amended by the alignment errata) * link:../../../2-protocols/k9-coordination/spec/COORDINATION-K9-SPEC.adoc[K9 Coordination Spec] (separate surface; DEED does not parse `.k9`) @@ -117,7 +114,7 @@ INVALID). Parsers MUST be deterministic given identical input bytes. Keywords, document heads, booleans, UUID prefixes, filename dispatch literals, and string-escape letters are *case-sensitive*. `repo-deed` is valid; `REPO-DEED` is not. `#t` is valid; `#T` is not. This matches RFC 7405 -`%s"..."` literals in link:./abnf/deed.anbf[deed.anbf]. +`%s"..."` literals in link:./abnf/deed.abnf[deed.abnf]. [cols="1,3"] |=== @@ -182,7 +179,7 @@ speciation artefact, not a deed. == Concrete syntax The productions below are *informative EBNF*. If they disagree with -link:./abnf/deed.anbf[abnf/deed.anbf], the ABNF wins. +link:./abnf/deed.abnf[abnf/deed.abnf], the ABNF wins. ---- Deed ::= Header Sep? Form Sep? EOF @@ -313,7 +310,7 @@ implementation MUST test the exact name `estate_chora.deed` BEFORE the [NOTE] ==== ABNF cannot express negation, so this exclusion is a side condition in -both this document and `abnf/deed.anbf`. The side condition is normative: +both this document and `abnf/deed.abnf`. The side condition is normative: the grammar alone is not sufficient to dispatch a filename. ==== @@ -756,7 +753,7 @@ unnoticed, and it must not carry over to `.deed`. A `.deed` file in `strict` mode MUST: -. Parse completely against `abnf/deed.anbf` (full input consumed). +. Parse completely against `abnf/deed.abnf` (full input consumed). . Have a filename that dispatches to a head matching `DocHead`. . Carry the required identity fields in the table in <>. . Not use `_` in any symbol, `#T`/`#F` as booleans, or unknown escapes. @@ -867,7 +864,8 @@ locally. Either the estate chora gains it, or `extends-vocabulary` lands. == References -* link:./abnf/deed.anbf[DEED ABNF (v1.0.0, file `deed.anbf`)] +* link:./abnf/deed.abnf[DEED ABNF (v1.0.0, normative)] · + link:./abnf/archive/deed.abnf_v0.1.0-draft[v0.1.0 DRAFT archive] * link:https://www.rfc-editor.org/rfc/rfc7405[RFC 7405] (case-sensitive ABNF strings) * link:https://www.rfc-editor.org/rfc/rfc4122[RFC 4122] §4.3 (UUID v5) * link:../../../2-protocols/k9-coordination/spec/COORDINATION-K9-SPEC.adoc[K9 Coordination File Specification] diff --git a/1-formats/deed/spec/abnf/deed.abnf_v1.0 b/1-formats/deed/spec/abnf/archive/deed.abnf_v0.1.0-draft similarity index 98% rename from 1-formats/deed/spec/abnf/deed.abnf_v1.0 rename to 1-formats/deed/spec/abnf/archive/deed.abnf_v0.1.0-draft index e434ed05e..fd2c51f90 100644 --- a/1-formats/deed/spec/abnf/deed.abnf_v1.0 +++ b/1-formats/deed/spec/abnf/archive/deed.abnf_v0.1.0-draft @@ -8,7 +8,7 @@ ; NOTICE (standards#837): FILENAME MISNOMER — this file is the v0.1 DRAFT ; archive (its content declares v0.1.0; the "_v1.0" suffix contradicts the ; content, mirroring the correctly-named DEED-GRAMMAR-SPEC_v0.1.adoc). The -; later v1.0.0 revision is deed.anbf in this directory. Grammar below is +; 2026-09-19 owner ruling). The normative grammar is ../deed.abnf. Grammar below is ; unchanged. ; NOTE: there is no "key = value" production and no "[section]" production. ; The only bracket is "(". A file using "=" is not a deed. diff --git a/1-formats/deed/spec/abnf/deed.anbf b/1-formats/deed/spec/abnf/deed.abnf similarity index 94% rename from 1-formats/deed/spec/abnf/deed.anbf rename to 1-formats/deed/spec/abnf/deed.abnf index 55b2ea85c..e0561a628 100644 --- a/1-formats/deed/spec/abnf/deed.anbf +++ b/1-formats/deed/spec/abnf/deed.abnf @@ -5,11 +5,12 @@ ; DEED grammar, v1.0.0 ; Normative for parsing. Prose and rationale: ../DEED-GRAMMAR-SPEC.adoc ; -; NOTICE (standards#837): this file is the LATER v1.0.0 revision, but its -; extension is typo'd (.anbf) — documents linked "abnf/deed.abnf" while the -; v0.1.0 archive sat misnamed as deed.abnf_v1.0. As of 2026-09-17 the docs -; resolve to this file directly. The campaign's held grammar-hygiene step -; declares ONE normative file (this content, most likely renamed deed.abnf) +; NOTICE (standards#837): OWNER RULING 2026-09-19 — the grammar files have +; come together: THIS is the sole normative grammar (v1.0.0), now under its +; correct extension. The v0.1.0 DRAFT archive lives at +; archive/deed.abnf_v0.1.0-draft under its true version. Its only extra rule +; (version-field) is superseded: v1.0.0 folds :schema-version into `field` +; with the "exactly once" side condition. ; pending owner ruling. Grammar below is unchanged. ; Requires RFC 7405 (%s"..." case-sensitive string literals). ; diff --git a/1-formats/deed/tools/README.adoc b/1-formats/deed/tools/README.adoc index 27277c84c..1a66328ab 100644 --- a/1-formats/deed/tools/README.adoc +++ b/1-formats/deed/tools/README.adoc @@ -1,7 +1,6 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 = DEED conformance lane — tools -Campaign: standards#837 · Grammar: link:../spec/abnf/deed.anbf[spec/abnf/deed.anbf -(v1.0.0, current until the canonical-file ruling)] +Campaign: standards#837 · Grammar: link:../spec/abnf/deed.abnf[spec/abnf/deed.abnf (v1.0.0, normative)] == The lane's one property diff --git a/1-formats/deed/tools/deed_lint.py b/1-formats/deed/tools/deed_lint.py index aea4ccdc0..2b045b804 100644 --- a/1-formats/deed/tools/deed_lint.py +++ b/1-formats/deed/tools/deed_lint.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""deed-lint — conformance validator for the DEED grammar (deed.anbf v1.0.0). +"""deed-lint — conformance validator for the DEED grammar (deed.abnf v1.0.0). Stdlib-only. Implements the normative grammar faithfully: * header = 1* spdx-line (";;" SP "SPDX-" …)