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..75b78c8a 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,62 @@ 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. + +* a further **5 paths** under nested `.claude/worktrees/` — linked worktrees + inside the repos themselves, which duplicate every file they contain. + +`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 | 31 +| **distinct descriptor basenames** | **21** +| paths citing the deleted `launcher-standard.a2ml` | 26 +| distinct descriptors citing it | 17 +| **distinct upstream repositories affected** | **18** +|=== + +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. == 8. What this spec does not claim