From 81a2841d49c151d965b9135dfc711361cacc9554 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 22 Sep 2026 14:24:01 +0100 Subject: [PATCH 1/2] docs(deed): correct the descriptor census MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The census this document recorded on 2026-09-22 was wrong, and the explanation it offered for disagreeing with standards#960 was a rationalisation of a control that was correctly firing. It read "23 distinct descriptors across 52 on-disk paths… 39 of those paths cite the deleted launcher-standard.a2ml", and explained the gap against #960's own figure of 21 by asserting that two set-level directories inflate the count. The sweep had been run from developer/ with no scope restriction, so it counted 9 paths under archive/ quarantine snapshots and 7 under tools/opt/cargo/git/checkouts/ — neither a live repository. 52 - 16 = 36. #960's 21 was right; this document's 23 was wrong. "An undercount by more than 5x" was also wrong: 10 -> 21 is roughly 2x. Re-measured scoped to hyper-repos and meta-repos: 36 paths, 21 distinct descriptors, 29 citing paths, 17 distinct descriptors citing, 18 distinct upstream repositories, 71 citing lines in six shapes — all # comments. Corrected in place and dated rather than silently overwritten, matching the two withdrawals already in this document. Gate and suite re-run with the edit in place: rc=0, 19 passed 0 failed. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01WPSJ7fBhVAMcpSffCBWUDo --- .../launcher-standard-to-praxis-deed.adoc | 52 +++++++++++++++---- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/1-formats/deed/mappings/launcher-standard-to-praxis-deed.adoc b/1-formats/deed/mappings/launcher-standard-to-praxis-deed.adoc index ae5d8296..affc3551 100644 --- a/1-formats/deed/mappings/launcher-standard-to-praxis-deed.adoc +++ b/1-formats/deed/mappings/launcher-standard-to-praxis-deed.adoc @@ -361,16 +361,48 @@ descriptors under `metadatastician/` and `_ESOTERIC_GROUP _SET/`. These are per-application *instances* of the metadata block, a different family from this standard, and they need their own spec before anything touches them. -⚠ This was first recorded as **10 files**. That is an undercount by more than -5×. Measured 2026-09-22 (`rg --files -g '*.launcher.a2ml'`, excluding -`.claude/worktrees/` and `developer/worktrees/`): **23 distinct descriptors -across 52 on-disk paths** — the path count exceeds the descriptor count because -several repos are cloned more than once — and **39 of those paths cite the -deleted `launcher-standard.a2ml`**. Two of the 23 (`_DATABASE`, -`_ESOTERIC_GROUP`) are set-level rather than per-application, which is why an -app-name census returns 21. The figure decays as clones are added, so it is -dated rather than stated as standing fact; `hyperpolymath/standards#960` carries -the decision on what happens to these descriptors. +⚠ This was first recorded as **10 files**, which was an undercount. + +⚠ **CORRECTED 2026-09-22 — the correction itself was wrong.** This paragraph +previously read "an undercount by more than 5×… **23 distinct descriptors across +52 on-disk paths**… **39 of those paths cite the deleted +`launcher-standard.a2ml`**", and explained the gap against `standards#960`'s own +figure of 21 by asserting that two set-level directories (`_DATABASE`, +`_ESOTERIC_GROUP`) inflate the descriptor census. **All three numbers were +wrong, the multiplier was wrong, and the explanation was a rationalisation of a +control that was correctly firing.** The sweep was run from `developer/` without +a scope restriction, so it counted two populations that are not live repositories: + +* **9 paths** under `archive/` quarantine snapshots + (`_QUARANTINE-2026-09-02`, `_QUARANTINE-2026-09-03-halted-rebase`, + `2026-09-08-drain/orphaned-worktrees`); +* **7 paths** under `tools/opt/cargo/git/checkouts/` (`burble` ×5, + `gossamer` ×2) — vendored cargo git checkouts, not clones. + +52 − 16 = 36. `standards#960`'s figure of **21 was right**; this document's 23 +was wrong, and so was the set-level explanation offered for the difference. +10 → 21 is roughly **2×**, not "more than 5×". + +Re-measured 2026-09-22, scoped to `hyper-repos` and `meta-repos` only and +excluding both `.claude/worktrees/` and `developer/worktrees/`: + +[cols="3,1"] +|=== +| metric | value + +| `*.launcher.a2ml` paths on disk | 36 +| **distinct descriptor basenames** | **21** +| paths citing the deleted `launcher-standard.a2ml` | 29 +| distinct descriptors citing it | 17 +| **distinct upstream repositories affected** | **18** +|=== + +All **71** citing lines are `#` comments, in six distinct shapes — so the +citation text is fixable independently of the file extension. The path figures +decay as clones are added, so they are dated rather than stated as standing +fact; the distinct-descriptor and distinct-repository figures do not. +`hyperpolymath/standards#960` carries the decision on what happens to these +descriptors. == 8. What this spec does not claim From 68fe1cb99a3785b86ddd539338ad26af2120fc2f Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 22 Sep 2026 14:26:54 +0100 Subject: [PATCH 2/2] docs(deed): fix the worktree exclusion in the census MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The corrected census in the previous commit was itself measured with a broken exclusion. A ripgrep -g '!.claude/worktrees/**' glob only matches at the SEARCH ROOT, so it excluded nothing where worktrees are nested inside repos. It fails silently: no error, no warning, and it reads as scoping while supplying none. The exclude must be -g '!**/.claude/worktrees/**'. Path counts move: 36 -> 31 on disk, 29 -> 26 citing, 71 -> 66 lines. The distinct counts do NOT move: 21 distinct descriptors, 17 distinct descriptors citing, 18 distinct upstream repositories. That is exactly what removing duplicates should do, and it is the invariant worth trusting — the distinct figures were sound throughout, and only the path figures were ever inflated. The document now states the glob trap and marks the path counts as dated while the distinct counts stand. Gate and suite re-run: rc=0, 19 passed 0 failed. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01WPSJ7fBhVAMcpSffCBWUDo --- .../launcher-standard-to-praxis-deed.adoc | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/1-formats/deed/mappings/launcher-standard-to-praxis-deed.adoc b/1-formats/deed/mappings/launcher-standard-to-praxis-deed.adoc index affc3551..75b78c8a 100644 --- a/1-formats/deed/mappings/launcher-standard-to-praxis-deed.adoc +++ b/1-formats/deed/mappings/launcher-standard-to-praxis-deed.adoc @@ -379,28 +379,42 @@ a scope restriction, so it counted two populations that are not live repositorie * **7 paths** under `tools/opt/cargo/git/checkouts/` (`burble` ×5, `gossamer` ×2) — vendored cargo git checkouts, not clones. -52 − 16 = 36. `standards#960`'s figure of **21 was right**; this document's 23 -was wrong, and so was the set-level explanation offered for the difference. -10 → 21 is roughly **2×**, not "more than 5×". +* a further **5 paths** under nested `.claude/worktrees/` — linked worktrees + inside the repos themselves, which duplicate every file they contain. -Re-measured 2026-09-22, scoped to `hyper-repos` and `meta-repos` only and -excluding both `.claude/worktrees/` and `developer/worktrees/`: +`standards#960`'s figure of **21 was right**; this document's 23 was wrong, and +so was the set-level explanation offered for the difference. 10 → 21 is roughly +**2×**, not "more than 5×". + +⚠ The worktree exclusion is worth stating precisely, because getting it wrong +is silent: a ripgrep `-g '!.claude/worktrees/**'` glob **only matches at the +search root** and excludes nothing when the worktrees are nested inside repos. +The exclude must be `-g '!**/.claude/worktrees/**'`, and the sweep needs a +positive control on its own filter. + +Re-measured 2026-09-22, scoped to `hyper-repos` and `meta-repos` only, with +nested worktrees verified absent from the result: [cols="3,1"] |=== | metric | value -| `*.launcher.a2ml` paths on disk | 36 +| `*.launcher.a2ml` paths on disk | 31 | **distinct descriptor basenames** | **21** -| paths citing the deleted `launcher-standard.a2ml` | 29 +| paths citing the deleted `launcher-standard.a2ml` | 26 | distinct descriptors citing it | 17 | **distinct upstream repositories affected** | **18** |=== -All **71** citing lines are `#` comments, in six distinct shapes — so the -citation text is fixable independently of the file extension. The path figures -decay as clones are added, so they are dated rather than stated as standing -fact; the distinct-descriptor and distinct-repository figures do not. +All **66** citing lines are `#` comments, in six distinct shapes — so the +citation text is fixable independently of the file extension. + +The path counts decay as clones and worktrees are added, so they are dated +rather than stated as standing fact. **The distinct counts do not**, and that +is the invariant worth trusting: when the worktree exclusion was corrected the +path figures moved (36→31, 29→26, 71→66) while distinct descriptors stayed 21, +distinct citing descriptors stayed 17 and distinct upstream repositories stayed +18 — which is exactly what removing duplicates should do. `hyperpolymath/standards#960` carries the decision on what happens to these descriptors.