diff --git a/core/claims/DDD-delivery-04.yaml b/core/claims/DDD-delivery-04.yaml index fc10d21..381bf54 100644 --- a/core/claims/DDD-delivery-04.yaml +++ b/core/claims/DDD-delivery-04.yaml @@ -9,13 +9,13 @@ region: | and not upstream (DDD-dec-09's charter). Governs the consuming-side half of the channel condition; the authoring-side half (the harvest actually reaching the encoded store) is upstream core/08's as stated. Per act-site, inheriting term:delivery's edge-colouring - (upstream, pinned on acceptance): the same standing decision amortises at a mechanically - delivered site and not at a judgement-mediated one. + (upstream, pinned on acceptance): the same standing decision amortises at an act-triggered + site and not at a judgement-mediated one. evidence: - kind: observation ref: "meta/corpus-test-results-2026-08-14.md — rows 1 and 5 (DDD-dec-15/16)" note: | - A standing mechanical channel that did not deliver: the pin's checks (E12/E13/W5) + A standing act-triggered channel that did not deliver: the pin's checks (E12/E13/W5) instrument status, not statement, and the escape-scope correction crossed the repo boundary by governed judgement instead — the paid-once property failing at exactly the half the channel did not carry. Corpus sample: 11 rows (5 canon-ratified, 4 accepted-not-ratified, @@ -23,14 +23,14 @@ evidence: - kind: observation ref: "meta/corpus-test-results-2026-08-14.md — row 6 and row 3" note: | - Row 6: one standing decision, two act-sites, two delivery types — mechanically delivered + Row 6: one standing decision, two act-sites, two delivery types — act-triggered (and inheriting per run) at the MCP write path, absent at the CLI act-site, the variance documented in the consuming repo's own instructions. Row 3 (DDD-dec-02): a standing policy - with no mechanical carrier possible at the time — it reaches an act only through prompt + with no act-triggered carrier possible at the time — it reaches an act only through prompt text or recall, and its failure mode leaves the register looking exactly as it does when things work: filed, standing, and inheriting nothing per run by itself. falsifier: | - A corpus in which judgement-mediated standing decisions show the same per-run inheritance as mechanically delivered ones — delivery type failing to predict amortisation at matched content. + A corpus in which judgement-mediated standing decisions show the same per-run inheritance as act-triggered ones — delivery type failing to predict amortisation at matched content. test: | Track per-run arrival of standing decisions across act-sites of both delivery types over a working period; the claim fails if inheritance rates do not separate by delivery type. breaks: | diff --git a/core/claims/DDD-track-01.yaml b/core/claims/DDD-track-01.yaml index bb0292e..471d181 100644 --- a/core/claims/DDD-track-01.yaml +++ b/core/claims/DDD-track-01.yaml @@ -9,7 +9,7 @@ region: | one worked decision held constant, a terminal act the learner owns. Diachronic by construction: the claim quantifies over conduct after the track, so it files with the projection and not upstream (DDD-dec-09's charter). Bounded to judgement-mediated acts (upstream term:delivery, - pinned): where an act mechanically triggers retrieval of a governing decision, the arrangement + pinned): where an act triggers retrieval of a governing decision without judgment, the arrangement supplies governance whatever the actor learned, and the claim makes no prediction. Nothing is claimed about comprehension, recall, or self-reported confidence — only about acts. evidence: [] diff --git a/meta/ground-audit-2026-08-24-erratum.md b/meta/ground-audit-2026-08-24-erratum.md new file mode 100644 index 0000000..cd13e5b --- /dev/null +++ b/meta/ground-audit-2026-08-24-erratum.md @@ -0,0 +1,114 @@ +# Erratum — the ground audit, 2026-08-24 + +**Filed 2026-08-27 by the ground-migration session** +(`meta/sessions/2026-08-27-ground-migration/`), ruled by Emil at that session's GATE 1. + +**This is an erratum, not a repair.** `meta/ground-audit-2026-08-24.md` is a merged artefact and its +history is not edited. It stands as filed; this note stands beside it and records what the full +classification found to be wrong in it. Both are canon-adjacent; neither supersedes the other. + +**Why it exists at all.** The audit classified 64% of occurrences by rule and sampled the rest. The +migration session completed the classification — all 2,845 occurrences, each read in its own file — +and in doing so re-read the registry the audit's central finding rests on. Three of the audit's +statements did not survive that reading. + +--- + +## E-1 — the definition layer is **17 settled terms and one draft**, not fifteen + +The audit's §3.1 gives a table headed *"Every use of the word in `core/graph/terms.yaml`, the settled +layer"*, and concludes **"Fifteen settled terms. Four senses. One registry."** + +The count is wrong **in both directions**, measured at `v5.11.0`. + +**Two terms it named do not use the word at all:** + +| Named by the audit | Occurrences of the word in its registry entry | +|---|---| +| `term:attribution` | **0** | +| `term:accountability` | **0** | + +The *"ground channels"* the audit credited to `term:accountability` is in **`term:arrangement`**: +*"executor, prior commitments, **ground channels**, checks, reviewers, record, and accountable +principal"*. + +**Six terms it omitted do use it:** + +| Omitted | Status | Sense | +|---|---|---| +| `term:tolerance` | settled | **S1** — *"a fact is ground only relative to a declared tolerance"* | +| `term:arrangement` | settled | **S2** — *"ground channels"* | +| `term:answerability` | settled | **S1** — *"against what ground"* | +| `term:capability` | settled | **S3** — *"the class of ground a pathway can read"* | +| `term:swarm-gate` | settled | **S1** — *"genuinely determines choices against ground"* | +| `term:residual-discretion` | **draft** | **S3** — *"held at fixed ground"* | + +**Corrected:** 18 registry entries use the word — **17 settled and one draft** — carrying **four +senses**. The sense count, which is the load-bearing half of the finding, is unchanged. + +**The correction makes the finding worse, not weaker.** `term:tolerance` is S1 and `term:arrangement` +is S2, and **both are established by `00-primitives.md`** — the first document a reader meets. The +multi-sense defect is not distributed across the registry; it is on one page of it. + +**One consequence for the audit's reasoning.** Its §3.1 closes: *"The registry alone uses S3 twice as +often as S1 (12 against 6), so there is no clean origin to have drifted from."* Corrected, the split +is **7 entries S1 and 7 entries S3** (9 and 16 by occurrence). **The conclusion survives and the +asymmetry that supported it does not** — there is no clean origin because there are two equal ones, +which is a stronger statement of the same finding. + +--- + +## E-2 — `ground channel` occurs **10 times**, not zero + +The audit's §2 states: *"Two compounds the proposal named — `ground channel` and `ground coverage` — +occur **zero times anywhere**."* + +**`ground coverage` is indeed zero.** `ground channel` is not: + +| | | +|---|---| +| `upstream/core/graph/terms.yaml:62` | **inside `term:arrangement`'s settled canonical text** | +| `upstream/core/00-primitives.md:129` | the same text, embedded | +| `downstream/projections/tracks/01-determination.md` | 3 occurrences | +| `downstream/papers/paper-a/paper-a.md` | 3 occurrences (one is the appendix's `term:arrangement` row) | +| `downstream/meta/holding-note-ground-axes-rev18.md:891` | 1 | +| `downstream/meta/sessions/2026-08-18-wave3/revision-foundation.md:125` | 1 (immutable) | + +All ten are S2. **The audit told the migration plan it had no `ground channel` surface; it has one, +and it is in the registry**, which is the most expensive place for a surface to be missed. + +--- + +## E-3 — the audit counted itself once more than it caught + +The audit's §1 records three instrument corrections, the third being *"the audit counted itself, +because its own instrument quotes its own regex"*, and reports **−101** self-occurrences removed by a +`SELF` skip on `meta/sessions/2026-08-24-ground-audit/`. + +Re-running `extract-occurrences.py` unchanged, at the audit's own read commits, yields **2,843**. +The two missing rows are both `meta/sessions/README.md:34` — the audit's own session-index line, +*"`2026-08-24-ground-audit/` | Interactive audit — Phase 1b: the ground audit"* — which it wrote in +its working tree, **outside the directory its `SELF` skip excluded**. + +**Corrected:** 103 self-occurrences, and the corpus proper at the audit's read commits is **2,843**. + +**Nothing else moves.** Both rows are immutable-class and both classify U. The migration session +classifies the committed 2,845-row extract in full, so the two are visible rather than quietly +dropped, and excludes its own directory from every count it takes. + +--- + +## What is *not* corrected + +The audit's four rulings (§4), its cost analysis, its wave shape (§6) and its §5 report of the +§7/Q27 collision are untouched by this note. So is its central finding, which the full +classification corroborated: **the remedy is definitional, because the definition layer was never +single-sensed.** + +Two of the audit's own numbers were re-derived exactly over all 2,845 rather than over the +rule-assigned 1,823, and one moved: **canonical text is 222, not 240** — the audit's figure +double-counted across the two repositories' claim directories. Identifiers (820), immutable (260), +merged papers (164), embeds (26) and pinned objects (4) are unchanged. + +**Basis:** the migration session's `gate1-classification.md` §3, §4.2 and §4.4, and its +`w0-full.json`. Reproducible from `meta/sessions/2026-08-27-ground-migration/w0-classify.py`. diff --git a/meta/ground-audit-2026-08-24.md b/meta/ground-audit-2026-08-24.md index f896940..a01b0c9 100644 --- a/meta/ground-audit-2026-08-24.md +++ b/meta/ground-audit-2026-08-24.md @@ -8,6 +8,15 @@ written. The whole of the session's diff is this document, its instruments, and **Read at:** `actor-indexed-determination` `37f508e` (= `v5.10.0`) · `decision-driven-design` `92c7b2e` · `product-cli` `d0f4297`. +> **Erratum filed against this document:** `meta/ground-audit-2026-08-24-erratum.md`, by the +> ground-migration session of 2026-08-27, on Emil's ruling at that session's GATE 1 and GATE 2. +> Three corrections — the definition layer is **17 settled terms and one draft, not fifteen** (§3.1); +> **`ground channel` occurs 10 times, not zero**, one of them inside `term:arrangement`'s settled +> canonical text (§2); and the corpus at this document's own read commits is **2,843**, because the +> instrument counted this session's index line (§1). The findings, the four rulings and the wave +> shape are untouched, and the central finding was corroborated by the completed classification. +> **This forward reference is the only change to this file.** Its text stands as filed. + **Instruments and data**, reproducible, in `meta/sessions/2026-08-24-ground-audit/`: `count-ground.py`, `extract-occurrences.py`, `classify.py`, `classification.json` (2,845 rows), `residual-adjudication.json`, and the four gate reports. diff --git a/meta/migration-plan-ground.md b/meta/migration-plan-ground.md new file mode 100644 index 0000000..714ec1b --- /dev/null +++ b/meta/migration-plan-ground.md @@ -0,0 +1,108 @@ +# The ground migration — plan, deferred whole, filed as the successor's seed + +**Filed 2026-08-27 by the ground-migration session** +(`meta/sessions/2026-08-27-ground-migration/`), on Emil's GATE 4 ruling. **Nothing was migrated.** +The plan is complete, the classification is execution-grade, and **a successor starts at execution.** + +Filed here rather than only in the session directory because a successor must be able to find it +beside the audit it descends from: `meta/ground-audit-2026-08-24.md` and its erratum. + +--- + +## What the successor does not have to redo + +| | | +|---|---| +| **The vocabulary is settled** | SR-1…SR-7, plus `act-triggered` (filed), plus `denominations:` (filed) | +| **The classification is execution-grade** | 2,845 rows, residual zero by construction, reproducible: `meta/sessions/2026-08-27-ground-migration/w0-classify.py` | +| **The plan is written** | `gate4-plan.md` — every pin, every embed, every firing named | +| **The design rulings are answered** | six gates of them, in `gate1`…`gate5` | +| **The surprises are spent** | two senses nobody had, a compound the audit called absent, a translated defect, a definition layer 17 terms wide, an instrument with three named failure mechanisms | + +--- + +## The migration, in one table + +**SR-1 gives S1 the word; SR-2 says S3 is verbs applied to the S1 object. Prose that already names +the verb is already correct.** Measured over the 567 S2/S3 prose occurrences in canon and the +projection: **380 (67%) need no edit; 187 are bare and need re-expression.** + +| Wave | Content | Size | Pins | +|---|---|---|---| +| **W1** | S5 → *deployment distribution* | 87 mutable, 29 in merged papers | `term:verdict` unpinned | +| **W2** | 11 registry entries + 11 embeds + upstream `core/` bare prose + **`apparatus/`** | 11 + 11 + 65 | **7 fire W6** | +| **W3** | projections, applications, papers, downstream `core/` | 122 bare | 0 | +| **W4** | `product-cli` | 1,203 | ruled separately | +| **never** | U (261, of which **142 identifiers**) + immutable (260) | 521 | — | + +**Corrected counts, after W0 and W0-bis:** S2 1,529 · S1 **567** · S3 369 · U 261 · S5 97 · S4 **22**. +Canon is **S1-led** (182 S1 : 154 S3) and **canon's S4 is mechanically zero.** + +### The seven W6, predicted and unfired + +`term:actor` · `term:arrangement` · `term:capability` · `term:capacity` · `term:closure` · +`term:judgment` · `term:residual-discretion`. **Zero W5, zero W7, zero W3.** All seven carry a +`content_hash`, so each advance is governed in the `DDD-dec-29` pattern. + +**Add three that this session created and did not fire**, because the pin stays at `v5.9.0`: +`term:delivery`, `DDD-cost-09`, `DDD-delivery-01`. **Ten in total when the pin next advances past +both.** + +### The seven S1 entries are not touched at all + +`term:ground` · `term:admission-test` · `term:determination` · `term:act` · `term:tolerance` · +`term:answerability` · `term:swarm-gate`. + +--- + +## Four things the successor must not re-decide + +1. **`apparatus/` is W2's, not W3's.** The audit booked it as *"rides with revisions already owed"*; + it is where the delivered sense concentrates, and `encode-verify.md:21` carries the miscitation — + *"Ground is the read-only surface an actor inspects in order to act (`core/00`)"*, an S2 + definition attributed to an S1 source. **W2 repairs that line or nothing does.** +2. **`poisoned ground` needs one sentence, not 66 edits.** SR-2 makes the compound already + verb-shaped; what it needs is `term:poisoned-ground` saying which state it names. +3. **`ground channel` exists**, 10 occurrences, one inside `term:arrangement`'s settled text. The + audit reported zero; the erratum records the correction. +4. **W1 is bound and has been found unavailable twice** — `v5.11.0` recorded `ground distribution` in + four claim statements, one `established`; SR-5 additionally ties W1 to a paper revision. It is a + real constraint, not an oversight. + +--- + +## What §6 already landed, so the successor does not repeat it + +Filed at `v5.12.0` (proposed): three Grade A definitions promoted; `mechanical` → `act-triggered` on +the delivery value with the store untouched; `denominations:` as an additive field with +`term:verdict`'s parenthetical moved in; the `README.md` judgment row and closure paraphrase; the +Danish double gloss. **None of it moved a `ground` occurrence.** + +**Still open from §6's neighbours:** sweep 1's Grades B and C (7 entries, with their grading); +the `projection` and `verdict` collisions (both unpinned, `09`'s contract already disambiguates +`verdict|verdict function`); the drafting-warning instrument, which now needs **five** exceptions — +quotations, historical notes, ordinary English, the RDF `ground term`, the CSS surface colour. + +--- + +## The method rule, for whoever writes the next instrument + +> **A classification rule whose match window can cross a clause boundary is not an anchored rule, and +> the two classes cannot share an acceptance standard.** + +Three mechanisms, all found by reading rows the instrument had already scored: + +1. **Clause-crossing windows.** Rules written `ground\b[^.]{0,N}\bKEYWORD\b` assume `[^.]` stops at a + sentence boundary. **It does not** — not at a comma, semicolon, dash, list item, `§`-ref, version + number or decimal — so a 50–70 character window routinely spans two clauses and often two list + entries. *"outcome variation across ground · epistemic uncertainty about a fixed **policy**"* is + one list; the rule read it as one sentence. +2. **Rule ordering.** In an ordered first-match-wins table, any rule that can match an identifier + steals rows from the identifier rule unless the identifier rule is **first**. The audit's was + **last**: 15 steals and, symmetrically, 13 inverse steals. **Put identifier and immutability rules + first.** +3. **Size and quality are uncorrelated.** A 60-row sample across a mixed table reported 29% correct + where the truth was 72%, because two rules of 22 rows carried a tenth of the sample. **Report + per-rule precision, never one figure for a table. A windowed rule earns a sample of its own.** + +**This closes two mechanisms, not the possibility of a rare third.** diff --git a/meta/sessions/2026-08-27-ground-migration/bootstrap.md b/meta/sessions/2026-08-27-ground-migration/bootstrap.md new file mode 100644 index 0000000..86fa8a1 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/bootstrap.md @@ -0,0 +1,93 @@ +# Bootstrap — item 5: the ground migration (2026-08-27) + +The invocation message that accompanied `prompt.md`, recorded verbatim as the session's arrival +record. Committed **before** any repository is read for the work, per `DDD-dec-20`. + +## Parameters + +- **Branch:** `claude/ground-migration-item-5-jpa9tc` (all three repositories; the branch name was + fixed by the invocation harness and is mirrored across the three so the set is one name) +- **Base commits:** + - `actor-indexed-determination` — head `ce2c477540d7aeeba294a0aaaa470a1d353ba110`. Annotated tag + `v5.11.0` resolves to **the same commit**; head and tag coincide, and canon at head is canon at + `v5.11.0` exactly as the prompt asserts. Tag message: *"v5.11.0 — Retirement provenance, the + validator, and what a status means"*, tagged by Emil Klein 2026-08-28. + - `decision-driven-design` — head `e81a454aeab60522124ad032561bfb80e3a46dbd` (the item-4 merge, + PR #30) + - `product-cli` — head `d0f429741fd06e6d09d25937efcb61f440b94472`. **Read-only in this session.** + W4 is assessed and reported at Gate 4; it is never executed here. +- **Gates:** 6 (G1 classification · G2 collision sweep · G3 §7/Q27 · G4 plan · G5 execution · + G6 close) +- **Principal:** Emil +- **Session type:** interactive canon curation, with an execution phase — hold at every gate, merge + nothing +- **Input identity:** + + | File | Lines | sha256 | + |---|---|---| + | `prompt.md` | 169 | `7a7b34d96cba1addef2f4ad3f13e1e96627747991df51cd4f3b53b10141d1bde` | + | package `README.md` | 52 | `89f1fef496e1064f62a70e842d8e80dcb9576eaee3aa61bf1776ac700cc31270` | + | package `ground-terminology-recommendation.md` | 260 | `d8c43b1ebcdb41d7bad27ae3ca943b9047a95351504e4f7299de5481dd64316e` | + | package `ground-terminology-assessment.md` | 171 | `1668b529cb2aaf61d44bbdb290010b7cc04753a12b5093e29e0a11998b94cc44` | + | package `q44-act-and-verdict-ontology.md` | 212 | `4d49ded8c34ac0a48b096040932ca478eae5140ad5aa26f16302f2171a740af8` | + | package `q45-routes-and-compositional-coverage.md` | 114 | `c5925b25656a53279f858b742f3cecd84acd2052ea7d2ead9ccfd5f0a52c051b` | + | package `q46-encoding-price.md` | 127 | `699c39c0ec3b969beef837038bb89121ba29d02c06c46d6128153970c2a6aa81` | + | package `act-and-verdict-ontology-explainer.md` | 222 | `644eabd6a70c74894ae195c3ddda72728932562786e974479041b329b5fe59b5` | + +## Arrival — clean + +The prompt arrived with the invocation, inside `item5-package.zip`, and is filed here with its +identity in this session's first commit. No supplementary input was named and none is missing. + +Two package files duplicate artefacts already committed by the ground-audit session at +`meta/sessions/2026-08-24-ground-audit/` — the recommendation and the assessment. Both are +**byte-identical** to the committed copies (`d8c43b1e…` and `1668b529…` respectively, verified), so +they are not re-filed; the ground-audit copies are the ones cited throughout. + +The remaining five package files exist in no repository, so they are filed under `inputs/` to make +this session's charter reconstructible, which is the whole of `DDD-dec-20`'s mechanism. **Filing +them here is not filing them as canon.** Q44, Q45 and Q46 are unfiled downstream demand and remain +so; the prompt puts their filing out of scope and this session rules *with their existence known*, +which is only possible if they are quotable at the gates. + +## The invocation message, verbatim + +Unzip the package and read README.md, then read prompt-ground-migration.md in its entirety — this +session follows that prompt exactly, including every gate and all seven standing rulings. + +This is item 5: the ground migration. The audit is already done and its four design rulings are +made — this session executes them and stops where they run out. The finding that makes it necessary: +the remedy is definitional, not a prose repair. Fifteen settled terms carry four senses of one word +between them, including the term defining what an actor is. + +First act, before anything else: commit this prompt and bootstrap to +meta/sessions/2026-08-27-ground-migration/ in decision-driven-design, per DDD-dec-20. + +Fetch all three repos — actor-indexed-determination at v5.11.0 (verify and report the tag found), +decision-driven-design at head, product-cli (W4 assessment only, never executed here). + +The standing rulings you inherit and do not re-litigate: S1 keeps the word; S3 is not a rival +primitive but verbs applied to the S1 object; reuse the v5.5.0 delivery vocabulary and mint nothing +beside it, with `basis` excluded as a candidate name; provenance is independent attributes, not an +enumeration; S5 leaves as deployment distribution and rides with a paper revision; node identifiers +never move — the migration renames the concept, not the identifiers; and counts are counted, never +estimated. + +Other rules that override anything you might infer: +- Interactive curation with an execution phase. Stop at every gate for Emil's ruling. Merge nothing. +- G1 (completing the 1,022-occurrence classification) blocks everything. A sense boundary that moves + against the sampled estimate is a finding, not an error — report and hold. +- G2's collision sweep reports with costs and repairs nothing. Two known collisions to confirm and + price: `mechanical` (a store and a delivery type) and `judgment` (term versus DDD-frame-17's mode). +- G3's §7/Q27 reconciliation must settle here or Q27 files onto a dissolving category. +- G4 is the plan, not the cut. If the plan exceeds the session's budget, Emil rules defer-whole — a + half-renamed concept is worse than an un-renamed one. +- W4 (product-cli's serialised `ground:` field, 660 occurrences) is a data migration and is NOT + executed here. Report cost and options at Gate 4. +- Every candidate name is checked against the full registry before it is proposed, and the check is + reported whether or not it fires. Two prior naming attempts died on exactly this check. +- State predicted W6/W7 results before any pin operation. +- Commit drafts before reporting at each gate, bodies marked draft-pending-ruling. + +Begin with G1 and end your first report at GATE 1: the completed classification of all 2,845 +occurrences, every unassignable case with its reason, and any sense boundary that moved. diff --git a/meta/sessions/2026-08-27-ground-migration/gate1-classification.md b/meta/sessions/2026-08-27-ground-migration/gate1-classification.md new file mode 100644 index 0000000..bd74520 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/gate1-classification.md @@ -0,0 +1,274 @@ +# GATE 1 — W0, the completed classification + +**Status: draft-pending-ruling.** Nothing in canon is touched. This gate changed no term, no claim, +no prose; the whole of its diff is this document, its instruments, and its data. + +**Read at:** `actor-indexed-determination` `ce2c477` (= annotated tag `v5.11.0`, verified: head and +tag are the same commit) · `decision-driven-design` `e81a454` · `product-cli` `d0f4297`. + +**Instruments**, reproducible from this directory: `w0-classify.py`, `rulings/r001.py`…`r021.py` +(one ruling per occurrence, with the reason), `w0-full.json` (2,845 rows), `w0-residual.json` (the +1,022 this gate ruled), `w0-extract-head.py` (the head delta). + +--- + +## 1. The classification is complete + +> **All 2,845 occurrences now carry a sense or a recorded reason for carrying none. The residual is +> zero by construction** — `w0-classify.py` asserts that the rulings cover the residual exactly, and +> fails if one occurrence is unruled or twice-ruled. + +| Sense | Rule-assigned (audit) | **Ruled here** | **Total** | Share | +|---|---|---|---|---| +| **S2** representations the arrangement holds | 1,004 | 532 | **1,536** | **54.0%** | +| **S1** conditions in the case | 273 | 247 | **520** | 18.3% | +| **S3** representations delivered at the act | 270 | 147 | **417** | 14.7% | +| **U** unassignable | 172 | 66 | **238** | 8.4% | +| **S5** the population | 74 | 27 | **101** | 3.6% | +| **S4** institutional rules | 30 | 3 | **33** | 1.2% | + +**Method.** The audit's committed extract was taken unaltered, so the rule-assigned half is inherited +exactly and only the residual moved. Each of the 1,022 was read **in its own file**, not in the +240-character extract window. After the first file a decision rule was fixed and applied to every +one after it: **read the predicate applied to the word, never the compound** — world predicates +(*varies, moves, is uncontrolled, is a dimension*) are S1; store predicates (*held, available, +assembled, filed, cited, pinned, stale*) are S2; act predicates (*read at, delivered, consulted, +present, in context, bound at the as-of*) are S3; rule predicates S4; population predicates S5. +The rule is stated at the head of `rulings/r005.py`, where it was fixed. + +--- + +## 2. Two sense boundaries moved. **Findings, held, not errors.** + +The audit's sampled estimate carried 95% confidence intervals. Two senses landed outside theirs. + +| Sense | Sampled est. | 95% CI | **Counted** | | +|---|---|---|---|---| +| **S3** | 61 | [14, 109] | **147** | **+38 above the upper bound** | +| **S2** | 634 | [536, 731] | **532** | **−4 below the lower bound** | +| S1 | 215 | [133, 296] | 247 | in CI | +| U | 72 | [20, 123] | 66 | in CI | +| S5 | 31 | [0, 65] | 27 | in CI | +| S4 | 10 | [0, 30] | 3 | in CI | + +**S3 is the one that matters, and it is not marginal.** Full-corpus S3 goes from the audit's 331 to +**417, up 26%.** The 100-occurrence sample drew six S3 rows; the true rate was fourteen in a hundred. + +**Where the extra S3 came from** — and it is not scattered: + +| | S3 rows added | +|---|---| +| `apparatus/` (tool-surfaces, tool-contract, encode-verify, the-skill-floor, prefix-stability) | 38 | +| upstream `core/` documents | 28 | +| holding notes, both repositories | 26 | +| session records (immutable) | 10 | +| claim, decision and registry files | 18 | + +**Why the sample missed it.** The rule table's S3 rules keyed on *delivery* and on *reading*. +The apparatus does neither: it says **exports**, **bounds**, **consumes**, **sits on**, **fires +against**, **is in the prefix**. `tool-surfaces.md` alone contributes nine — a *ground exporter* +"returns content the actor must interpret", and *Roots* "bounds the ground". Those are act +predicates in every case, and no rule was looking for them. + +**What it does to SR-1 and SR-2: nothing, and it strengthens SR-2.** S1 keeping the word was ruled +on canon's authority against the counts, so a count moving cannot disturb it. And every one of the +86 new S3 occurrences is a *verb applied to the S1 object* — exported, bounded, consumed, held in a +prefix — which is exactly SR-2's "one object in three conditions, not three objects". **The sense +that grew is the sense SR-2 says is not a rival primitive.** The delivery vocabulary now has 26% +more work to do than the audit priced, and no more kinds of work. + +**The one caution.** S3 at 417 is now larger than the *whole* of what W2 was scoped to touch. Its +distribution is the reason the W2/W3 boundary needs re-drawing at Gate 4: 38 of the new rows are +`apparatus/`, which the audit put in W3 as "rides with revisions already owed", and `apparatus/` +turns out to be where the delivered sense actually lives. + +--- + +## 3. The definition layer is larger than recorded: **17 settled terms, not 15** + +The audit's §3.1 table, the finding the whole migration rests on, is **wrong in both directions** — +and correcting it makes the finding stronger. + +> **18 registry entries use the word at `v5.11.0`: 17 settled and one draft. They carry four senses.** + +| Sense | Entries | | +|---|---|---| +| **S1** (7) | `term:ground` · `term:admission-test` · `term:determination` · `term:act` · **`term:tolerance`** · **`term:answerability`** · **`term:swarm-gate`** | | +| **S3** (7) | `term:actor` · `term:judgment` · `term:poisoned-ground` · `term:capacity` · `term:overflow` · `term:capability` · **`term:residual-discretion`** *(draft)* | | +| **S2** (3) | `term:closure` · `term:encode-verify-split` · **`term:arrangement`** | | +| **S5** (1) | `term:verdict` | | + +**The audit named two terms that do not use the word at all** — `term:attribution` and +`term:accountability`, zero occurrences each. The "ground channels" it credited to +`term:accountability` is in **`term:arrangement`**. **And it omitted six that do**: `term:tolerance`, +`term:arrangement`, `term:answerability`, `term:capability`, `term:swarm-gate`, and the draft +`term:residual-discretion`. + +**The count moved from 15 to 17 settled and the sense split stayed four.** The prompt's own +statement of the finding — *"fifteen settled terms carry four senses of one word between them, +including the term defining what an actor is"* — is right in substance and wrong in its number, and +the corrected number is worse: **`term:tolerance` is S1 and `term:arrangement` is S2, and both sit +in `00-primitives.md`, the first document a reader meets.** The multi-sense defect is not merely in +the registry; it is on one page of it. + +**Also corrected: S1 and S3 are tied at seven each.** The audit reported the registry as using S3 +twice as often as S1 (12 against 6) and concluded "there is no clean origin to have drifted from". +The corrected figures are 7 and 7 by entry, 9 and 16 by occurrence. The conclusion survives; the +asymmetry that supported it does not. + +--- + +## 4. What the full pass found that no sample could + +### 4.1 A sixth object, and a seventh — both in `product-cli`, both invisible to a rule table + +**`ground term` — the RDF/logic term of art (11 occurrences).** In +`product-core/tests/graph_capability_tests.rs`, `let ground = |store| … .filter(|q| !matches!(q.object, +Term::BlankNode(_)))` — a *ground term* is one containing no variables or blank nodes. Related to +none of S1–S5. Eleven occurrences in a local closure name and its assertion messages. + +**`ground` as a CSS surface colour (6 occurrences).** *"the two surface **grounds** the page and its +cards sit on"*, *"the card **ground** one step above `--surface`"*, *"the page's **ground** colour"* +— in `.ddd/render.html`, a design-token decision, and two `seam-web-token-*` files. Background +against foreground, ordinary design vocabulary. + +**Both matter to the drafting-warning instrument, and to G2.** The audit already ruled that the +warning needs a third exception for ordinary English. These are two more classes it must not fire +on, and the second is a name collision inside the repository that carries the serialised field. + +### 4.2 `ground channel` occurs **10 times**, not zero + +The audit reported *"two compounds the proposal named — `ground channel` and `ground coverage` — +occur **zero times anywhere**"*. Half of that is wrong. `ground coverage` is indeed zero. +**`ground channel` occurs 10 times, and one of them is inside settled canonical text** — +`term:arrangement`: *"executor, prior commitments, **ground channels**, checks, reviewers, record, +and accountable principal"*. The others are `core/00-primitives.md:129`, three in +`projections/tracks/01-determination.md`, three in `papers/paper-a/paper-a.md`, one holding note, +one session record. All S2. + +**This is a migration surface the audit told the plan it did not have**, and it is in the registry. + +### 4.3 The multi-sense defect has been **translated** + +`i18n/ordliste-dansk.md:17` glosses `grund` as **both senses in one entry**: *"Det, en beslutning +afgøres **imod**"* — what a decision is determined against, S1 — *"— det læsbare underlag, aktøren +inspicerer"* — the readable substrate the actor inspects, S3. The Danish glossary is not drifting +from the registry either; it is faithfully translating a definition layer that was never +single-sensed. **The migration owes i18n a pass, and the audit did not budget one.** + +### 4.4 The audit counted itself once more than it caught + +Re-running the audit's extractor at its own read commits yields **2,843, not 2,845.** The two extra +rows are `meta/sessions/README.md:34` — the audit's own session-index line, *"`2026-08-24-ground-audit/` +| Interactive audit — Phase 1b: the ground audit"* — written in its working tree and outside the +directory its `SELF` skip excluded. Its §1 reports catching 101 self-occurrences; there were 103. + +**Nothing moves.** Both rows are immutable-class and both are U. **The corpus proper at the audit's +commits is 2,843**, and this gate classifies the committed 2,845-row extract in full so the two are +visible rather than quietly dropped. This session's own directory is excluded from every count it +takes, which is the same lesson applied a third time. + +--- + +## 5. Every occurrence that will not sit in exactly one sense + +**238 of 2,845 (8.4%).** The audit projected 244; it was right to within six. + +| Count | Cluster | Why it will not sit in one sense | +|---|---|---| +| **116** | `DDD-ground-01`…`05` identifiers | A node identifier, not a use of the word. The five claims split across senses. **`CLAUDE.md` forbids renumbering: unmigratable at any price** | +| **59** | ordinary English | *"new ground"*, *"on the grounds that"*, *"common ground"*, *"the claim it grounds"*, *"groundwork"*, *"literature-grounded"*, *"cost the paper ground"*. A global replace corrupts every one | +| **13** | `ground truth` | The imported machine-learning idiom: the held label set standing in for the world. **The idiom exists because the two are conflated** | +| **13** | `missing ground` / *"ground is missing"* | **Spans S1 and S3 irreducibly** — a relevant condition inadequately represented at the act. The gap *between* two senses | +| **11** | the RDF `ground term` | §4.1. A sixth object, from logic | +| **10** | bare name citations | *"the ground area"*, *"the ground audit"*, *"the ground PRD"*, `"ground"` as a token in a checker's `SKIP` set. **No predication to read a sense from** | +| **6** | the CSS design token | §4.1. A seventh object, from design | +| **5** | names two senses at once | The provenance table's subject in Paper A and its two ancestors; the Danish gloss; the Paper A review's *"`G*` (relevant) vs `G_A` (accessible and delivered)"* | +| **3** | bare node-identifier citations | *"the ground-01 join"*, *"D-3/ground-04"* | +| **2** | the audit's own index line | §4.4 | + +**The five-sense partition would lose the relational cases silently**, which the audit's design +requirement already predicted. There are now **18** of them, not 11: `missing ground` (13) plus the +five that name two senses in one phrase. Q2's `undelivered ground` is relational by construction and +covers the first cluster. **It does not cover the second.** A provenance table whose subject is +*"The ground is"* and whose four values are S1, S2, S2 and S4 has no home in a partition, and SR-4 +is what dissolves it — the table becomes independent attributes on a record, and the subject stops +having to be one sense. **Recorded for Gate 4: SR-4 is not only a ruling about provenance, it is the +repair for five occurrences that no naming scheme could fix.** + +--- + +## 6. Cost columns, now exact over all 2,845 + +The audit's were exact over the 1,823 rule-assigned only. Three moved. + +| Column | Audit | **Exact** | | +|---|---|---|---| +| identifiers | 820 | **820** | unchanged — every identifier was rule-assigned | +| immutable | 260 | **260** | unchanged. By sense: S1 70 · S2 69 · S3 56 · U 42 · S4 12 · S5 11 | +| merged papers | 164 | **164** | unchanged (Paper A 100, measure note 64) | +| canonical text | 240 | **222** | −18: the audit's figure double-counted across the two repositories' claim directories | +| embeds | 26 | **26** | unchanged | +| pinned objects | 4 | **4** | unchanged. `term:ground`'s pin in `graph/upstream.yaml` is one | + +**Never touched — immutable or U: 456. Remainder: 2,389.** + +--- + +## 7. The corpus at head, because execution happens there and not at the audit's commits + +**2,976 at head, against 2,843 at the audit's read commits: +133 across 11 files, +0 in `product-cli`.** +This session's own directory is excluded. + +| Movement | | | +|---|---|---| +| +85 | the ground audit's own output (`meta/ground-audit-2026-08-24.md` 61, `successor-items-ground-audit.md` 24) | a document about the word | +| +19 | item-4 session records | **immutable** | +| +17 | `actor-indexed-determination/README.md` | **the one that needs attention** | +| +6 | `meta/sessions/README.md` | index rows | +| +3 | `DDD-dec-31` | new canon | +| +2 | `releases/v5.11.0.yaml` | **immutable** | +| +1 | `successor-items-item4.md` | | + +**Upstream's `README.md` was rewritten in three commits after `v5.10.0`** (+515 lines), and 17 of its +lines now use the word — up from 2. It is outside `core/`, so it is not canon, **but it embeds +canonical definitions**: line 115 carries `term:closure`'s *"relevant ground is observable"* and +line 58 carries `term:arrangement`'s *"ground channels"*. A public-facing README reproducing two +registry definitions in two different senses is a migration surface, and it did not exist when the +audit was taken. + +**Recommended, for the ruling:** classify the head delta at Gate 4 rather than now. 106 of the 133 +are immutable or are the audit's own output; the 27 that are not sit in three files and can be read +in one pass alongside the plan. + +--- + +## 8. What did not move + +- **The compounds are still pure**, and now measured over the whole corpus rather than half: + `poisoned ground` 100% S3 (66) · `ground-cli` 100% S2 (120) · `ground distribution` 100% S5 (58) · + `institutional ground` 100% S4 (13) · `ground channel` 100% S2 (10) · `ground axes` 97% S1 (77) · + `reading ground` 96% S3 (49) · `uncontrolled ground` 95% S1 (22). + **One is not**: `ground state`, 13 occurrences, S2 7 / S1 4 / U 2. It is the only impure compound + found, and it is the one `product-cli` puts in a status line. +- **`uniform ground` / `non-uniform ground` is S5**, 25 occurrences, 100% — a compound nobody named, + in `core/09`, three canon assets and the measure note. S5 was 74 rule-assigned and is now 101. +- **The two halves are still bilingual**, and canon more sharply than reported: upstream is now + S3 171 · S1 167 · S2 85, so the delivered sense is canon's *most frequent*, not its second. + `product-cli` is 91% S2 (1,173 of 1,286), essentially unmoved from the audit's 92%. +- **`ground coverage` really is zero.** + +--- + +## 9. What this gate asks + +1. **The completed classification**, §1 — accept as the execution-grade basis W0 was to supply. +2. **The two moved boundaries**, §2 — S3 +26%, held as a finding. Nothing in SR-1 or SR-2 turns on + it, and the redistribution is an input to the W2/W3 boundary at Gate 4, not a re-opening here. +3. **The definition layer at 17 settled terms, not 15**, §3 — a correction to the finding the + migration rests on, in the direction that makes it worse. +4. **The four things the audit could not have seen**, §4 — two further objects under the word, a + compound reported as absent that is in the registry, a translated defect, and a self-count. +5. **Whether the head delta is classified now or at Gate 4**, §7 — recommendation: Gate 4. + +**Nothing here is repaired.** G2's sweeps are next and repair nothing either. diff --git a/meta/sessions/2026-08-27-ground-migration/gate2-collision-sweep.md b/meta/sessions/2026-08-27-ground-migration/gate2-collision-sweep.md new file mode 100644 index 0000000..074507d --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/gate2-collision-sweep.md @@ -0,0 +1,322 @@ +# GATE 2 — the collision sweep + +**Status: draft-pending-ruling.** **This gate repairs nothing.** It reports two sweeps over the same +registry read, with costs, so the repairs can be ruled in batches or declined. + +**Scope:** all **62** entries in `core/graph/terms.yaml` carrying canonical text (the remaining 8 are +registry-only and out of sweep 1, since nothing pins their wording), plus the downstream registry's 5. +Read at `ce2c477` (= `v5.11.0`), `e81a454`, `d0f4297`. Instrument: `sweep2.py`. + +--- + +## Sweep 1 — canonical text that asserts without defining + +**The pattern**, from `DDD-dec-29`'s warrant: `term:floor` carried the *claim about* the floor and +never a definition of it, while both sibling terms established by the same document defined. Such an +entry is useful prose but cannot serve as an embedded definition — **the reader meets a claim about a +thing before learning what the thing is.** + +**All 62 read. Three buckets.** + +| Bucket | Count | +|---|---| +| **Defines** — the canonical text says what the subject is | **41** | +| **Mixed** — defines, then asserts. This is `term:floor`'s *repaired* shape and is correct | **11** | +| **Asserts** — the F-1 defect, in three grades below | **10** | + +**Mixed (11), for the record:** `tolerance` · `arrangement` · `act` · `poisoned-ground` · `encoded` · +`mechanical` · `judgment` · `escape` · `acceptance-predicate` · `floor` · `accountability`. + +### The ten, graded by how far the definition is from the reader + +**Grade A — no definition anywhere, in the registry or in the establishing document. Worse than F-1.** + +| Term | Canonical text | What is missing | +|---|---|---| +| **`term:seam`** | *"A composite carries the demand of its parts, plus the seam demand `S` created between them."* | The entry is named `seam` and defines **seam demand** in passing. **A seam is never defined.** 41 uses of the bare word in `06`, none definitional | +| **`term:composite-actor`** | *"A composite actor carries its members' demand, plus the seam demand between them."* | Near-duplicate of `term:seam`'s text. *"Composite actor"* appears twice in `06`, both the embed | +| **`term:projection`** | *"The principle has two projections. They are not two mechanisms. They are the same mechanism — the compound — run along two different axes."* | Says there are two and what they share. Never says what **a projection is** | + +**Grade B — the exact F-1 shape: an ungoverned definition sits in the establishing document.** + +| Term | The ungoverned definition, already in the document | +|---|---| +| **`term:training`** | `04` §3: *"Selection and training are two ways to **acquire an actor whose capability envelope covers the residual**."* | +| **`term:ensemble-actor`** | `12` §1: *"It is a **strategy for populating the judgment store when no single actor** …"* | + +**Grade C — the definition is present but grammatically subordinate to the assertion.** + +`term:path-degeneracy` (*"…infinitely many structurally different candidates satisfy the predicate"*, +inside a consequence clause) · `term:pinning-resolution` (an appositive under *"Actors differ in…"*) · +`term:orchestrator` (a parenthetical: *"An actor at the seam (an orchestrator) carries judgment"*) · +`term:p-err` (*"the error rate rises smoothly with load"*, after the derivation claim) · +`term:redundancy` (defined only by contrast with diversity). + +### Cost — and it is the finding + +> **30 of the 62 entries are pinned downstream. Not one of the ten is.** + +| | | +|---|---| +| pin advances (W5/W6) | **0** | +| decision nodes of the `DDD-dec-29` kind | **0** | +| embed sites | **1 each**, all upstream `core/` | +| Paper A exposure | **4** — `training`, `seam`, `composite-actor`, `ensemble-actor`: appendix regeneration and a quotation re-check, no pin | + +**F-1 cost a decision node, an Appendix A regeneration and a manuscript re-quote *because +`term:floor` is pinned*.** These ten are the cheap tail of the same defect. **Grade A is three +entries, unpinned, one embed each** — the cheapest canon repair available anywhere in this programme. + +**Not repaired here**, per the booking. Recommended at Gate 4 as a batch of three (Grade A) with +B and C ruled separately, because B has a definition to promote byte-for-byte and C only needs a +sentence reordered. + +--- + +## Sweep 2 — names used in canon for a second object + +**Five collisions confirmed live, one confirmed and already retired, one already governed.** +Plus the two Gate 1 added by ruling. + +### C-A · `mechanical` — **CONFIRMED, live, and the registry itself carries both** + +| | | +|---|---| +| **Object 1** | `term:mechanical` (**settled**, `01-the-principle.md`) — *"a criterion, applied **after the act**, by a check"*. A **store** | +| **Object 2** | `term:delivery` (**draft**, `13-delivery.md`, v5.5.0) — *"**mechanical** — the act triggers retrieval, without judgment"*. A **delivery mode** | + +**Unrelated objects.** One says where a determination was resolved; the other says how governance +reached the act. *"Encoded and mechanically delivered"* reads as incoherent because the reader parses +`mechanical` as the store. + +**Three aggravations the sweep found:** + +1. **The registry registers the collision as an alias.** `term:delivery` carries + `aliases: [mechanical delivery, judgment-mediated delivery, …]`. The overloaded compound is a + *first-class registry entry*. +2. **One document does both.** `13-delivery.md`'s own contract reads + `requires: [store, **mechanical**, judgment, escape, …]` — it declares a dependency on the store + sense and then establishes the delivery sense in the same file. +3. **Canon already has the discipline, and it postdates the collision.** `DDD-dec-30` (v5.10.0) + records choosing `predetermined`/`exercised`/`drawn` because they *"share no word with + `term:store`, with the timing terms (`term:encoded`, `term:mechanical`, `term:judgment`), or with + `term:escape` … the shared word would have read the discharge axis back into the store partition — + the one thing this decision exists to prevent."* **`term:delivery` is the case that rule was + written for, five versions too late.** + +**Cost, both directions. Both terms are pinned, so either repair fires a pin advance and needs a +`DDD-dec-29`-class decision. The volumes are not close.** + +| Repair | Occurrences | Status of the term repaired | +|---|---|---| +| rename the **delivery value** | **≈49** (34 *"mechanical delivery"*, 9 *"mechanical channel/path/edge"*, 4 *"delivered mechanically"*, 2 *"delivery is mechanical"*) | **draft**, filed v5.5.0 | +| rename the **store** | **≈340** of 389 bare `mechanical` + 159 `mechanically` | **settled**, filed at `01`, the framework's second document | + +> **Recommended: repair the newer, smaller, draft-status object.** The store keeps the word. +> That is `DDD-dec-30`'s own discipline applied — the new value gives back the word the store +> vocabulary owns — and it is roughly a seventh of the work. + +**Consequence for `posterior`: it is not needed.** It was a candidate to replace the **store**, which +is the expensive side. If the repair goes to the delivery side, **nothing replaces `mechanical` and +no name is minted for the store at all.** The check on it is reported below regardless, because the +prompt requires it and because it fires. + +### C-B · `judgment` — **CONFIRMED, and already retired. Cost: zero.** + +The brief names *"`term:judgment` versus `DDD-frame-17`'s judgment mode"*. **The mode was +`DDD-frame-15`'s, not `DDD-frame-17`'s**, and `DDD-frame-17` is the claim that *removed* it. + +- `DDD-frame-15` — **`status: retired`**, `retired_from: projected`. Its four modes were *filed + decision, judgment, arrangement default, uncontrolled draw*. +- `DDD-frame-17` — the three values are **`predetermined` · `exercised` · `drawn`**. None is + `judgment`. +- **Canon records the collision in its own words.** `DDD-dec-30`: *"`DDD-frame-15`'s judgment mode + and `term:judgment` were therefore two distinct objects sharing one word inside canon, **not a + reader's confusion**."* And `13-delivery.md` §4: *"The retired mode list borrowed *filed decision* + and *judgment* from the store vocabulary while partitioning a different object — and + `term:judgment` carries an accountability clause…"* + +**So the collision was real, was recorded at Phase 1a as open, and was closed at v5.10.0 by the node +it was recorded against.** The residue is ~7 historical mentions in the retired claim, +`DDD-frame-17`'s *"what was wrong"*, `DDD-dec-30` and `13-delivery.md` §4. **All are correct as +history and must not be migrated.** The item to carry is that the brief inherited it as open. + +### C-C · `projection` — **NEW, live, and it sits inside `term:verdict`** + +| | | +|---|---| +| **Object 1** | `term:projection` (settled, `08`) — one of the two axes the compound runs along: the funnel and maturation | +| **Object 2** | the **projection layer / the engineering projection** — a repository and an audience denomination | + +Object 2 in canon: `core/README.md` *"Its software **projection** lives in a separate repository"* · +`core/10-cost.md` ×2 *"files with the **projection** layer"* · `core/13-delivery.md` *"files with the +**projection** that carries diachronic claims"* · `core/00-primitives.md` *"the **engineering +projection** — the same principle, denominated in the vocabulary of a domain"* · and — + +> **inside `term:verdict`'s settled canonical text**: *"(In the engineering **projection** this same +> quantity is denominated in the vocabulary of the domain and called **specification demand**.)"* + +**The collision sits on the one term that already carries an audience denomination**, which is item 3 +of the queued downstream demand. See §4. + +**Cost:** `term:projection` is **not pinned**; one embed site (`08`). Object 2's occurrences are prose +across `core/README`, `00`, `10`, `13` and both repositories' structural vocabulary. + +### C-D · `verdict` — **NEW, live, and it is between three settled registry entries** + +| | | +|---|---| +| **Object 1** | `term:verdict` — *"that induced assignment — the correct output over **each point of the input space**"*. A **function**. `D = H(verdict)` is its entropy | +| **Object 2** | `term:act-individuation` — *"one act = **one verdict** of the acceptance predicate at the declared boundary; batch boundaries are verdict boundaries"*. A **value at one act** | +| | `term:outcome` — *"The **verdict** is the same determinate as assessed by a declared predicate, produced only where governance has declared one"*. Also the per-act value | + +**A function and a value of that function are not the same object**, and `H(verdict)` is only +well-formed on the first reading while *"one act, one verdict"* is only well-formed on the second. +All three terms are settled and all three are established by `09-the-measure.md`. + +**Canon half-knows.** `09`'s contract already disambiguates — +`establishes: [**verdict|verdict function**, …]` — and `term:verdict` carries +`aliases: [verdict function]`. **The `term:` field itself is the bare word**, and §7a is titled +*"Outcome and verdict: the determinate's two registers"* while naming the two registers of +*determinate*, not of *verdict*. + +**Cost:** `term:verdict`, `term:outcome` and `term:act-individuation` are **all unpinned**. The +cheapest available repair is to promote the existing alias — make `verdict function` the term and +`verdict` the alias — which touches the registry and `09`'s prose and fires no pin. + +### C-E · `maturation` — **already governed. Reported as the pricing precedent.** + +Upstream `term:maturation` (*the compound over repetition*, `08`) and downstream `term:maturation` +(*the return channel from the mechanical store to the encoded store*, `14-maturation.md`) are two +objects under **one id**, declared by `shadows_upstream: DDD-dec-21` and reported by the validator as +*"1 shadowed id"*. + +`DDD-dec-21`'s framing is the model for the four above: **"deliberate in destination, escaped in +mechanism, known and temporary"** — the escape being that *"no ruling governed id reuse across the two +registries; the validator's default resolved it silently, by having no opinion, which is a governing +decision determined by nobody."* Resolution bound to the deferred 06/08 carve. + +**`mechanical`, `projection` and `verdict` are the same escape inside one registry**, where no +validator reports them at all. + +### C-F · `floor` in `product-cli` — **CONFIRMED, live, cross-repo** + +`tolerance_floor` — a decision set's minimum tier, `§4.2.1`, *"an override is valid only above the +floor"* — against the **Polanyi floor** (`§3.5`), which is `term:floor`. **168 files touch +`tolerance_floor`**, and both senses appear in the same documents. A serialised field name, so W4's +class. + +### C-G · `ground` — the two Gate 1 added by ruling, both in `product-cli` + +- **the RDF/logic `ground term`** — 11 occurrences, `product-core/tests/graph_capability_tests.rs`; + a term containing no variables or blank nodes. +- **`ground` as a CSS surface colour** — 6 occurrences; *"the two surface **grounds** the page and + its cards sit on"*. + +Both are local to one repository, neither touches canon, and neither is migrated. **They belong on the +drafting-warning instrument's exception list**, which already needs a third exception for ordinary +English and now needs five. + +### Checked and clear + +`store` · `closure` (aliases `closes/closed/closing` already registered) · `capacity` · `selection` · +`training` · `demand` · `outcome` · `escape` · `encoded` · `act` · `decision` · `actor` · +`arrangement` · `tolerance` · `assurance` · `compound` · `funnel` · `attribution` · `capability` · +`overflow` · `conservation` · `exhaustiveness` · `diversity` · `redundancy` · `liability` · +`accountability` · `answerability` and the remaining registry names: **one object each in canon.** + +**One near-miss, reported as drafting and not as collision:** `floor` is used twice in +`core/00-primitives.md` in ordinary English — *"you never reach a **floor** of pure action"*, *"the +collapse removes the act as a **floor**"*. Same class as the `ground` ordinary-English cluster; +a matter for the drafting-warning instrument's exceptions, not for a rename. + +--- + +## The required registry check on `posterior` — **it fires** + +**Reported whether or not it fires, per the standing note. It fires.** + +**Name check: clear.** No term or alias in either registry is called `posterior`. Prose occurrences +across all three repositories: **3, and all three are this session's own committed prompt and +inputs.** Zero pre-existing. + +**Content check: fires.** The objection is the one that killed `basis` — *"the framework is already +carrying an information-theoretic register"* — and it is **stronger here, because the framework does +not merely carry the register, it uses the pair's other half.** + +`prior` is live in the **Bayesian** sense, in four places, one of them ratified canon: + +| Where | | +|---|---| +| `core/claims/DDD-measure-05.yaml` | **ratified canon** — *"200 samples from the **prior** and channel the asset stipulates"* | +| `meta/holding-note-addendum-determinables.md` (upstream) | *"encoding-proxy as **prior**, act stream as **update**, calibration ledger as **estimator**"* | +| `meta/holding-note-ground-axes-rev18.md` (downstream, ×2) | *"**The encoding-proxy is a prior; the act stream is the update.**"* | +| `ledger-cli` fixture | *"parks demand on a **prior** while reading as allocated"* | + +**And the collision would land next door to its own pair.** `term:calibration-ledger` is +*"a claimant's record across claims whose predicates later closed: a matured-verdict certificate"* — +the **estimator** in that very prior→update→estimator pipeline, and an object about verdicts arriving +after the act. A *"posterior store"* beside a calibration ledger whose machinery is explicitly +prior-and-update would read as the updated belief, which is not what the mechanical store is. + +> **Third naming attempt, third registry check.** `fixed` died against `term:encoded`; `resolved` +> died against `term:determination`; **`posterior` dies against the live Bayesian register, one +> instance of which is in ratified canon.** + +**And it is moot under the recommendation.** If C-A is repaired on the delivery side, the store keeps +`mechanical` and no candidate is needed. `posterior` is reported as checked and declined, not as +rejected in favour of something else. + +**If Emil rules the store side anyway**, the candidates that pass both checks are `ex-post` (0 +occurrences anywhere) and `act-supplied` (0). **`automatic` is clear on the registry but fires on +Emil's own stated criterion** — it carries the automation implication `posterior` was liked for +avoiding. **`standing` fires**: 626 occurrences, and *"standing supply"* is live framework vocabulary +that `13-delivery.md` explicitly sets delivery beside. + +## The delivery value's replacement, if C-A is repaired as recommended + +**Checked before proposing.** `act-triggered` — **registry check clear**, and **already canon's own +gloss of the value**: `DDD-cost-09` reads *"at act-sites where the check is **act-triggered** +(`term:delivery`, mechanical)"*, and `term:delivery`'s own text is *"the act triggers retrieval, +without judgment"*. 18 occurrences across upstream and downstream, all in this sense. + +**This is reuse, not minting.** It pairs cleanly with the existing `judgment-mediated`, and the pair +`act-triggered` / `judgment-mediated` names the mechanism on both sides by what triggers it. + +Also checked and clear on the registry, reported for completeness: `retrieved` (26, but the word is +load-bearing in `product-cli`'s ledger), `unprompted` (2), `pulled` (17, 15 of them `product-cli` +code), `ambient` (18, 13 of them `product-cli`). + +--- + +## Two questions this gate raises, for ruling at whichever gate Emil prefers + +**Q-1 — the erratum has no pointer from the artefact it corrects.** +`meta/ground-audit-2026-08-24-erratum.md` is filed. Adding a line to the audit pointing at it would +edit a merged artefact, which the GATE 1 ruling forbids. Leaving it means a reader of the audit meets +the fifteen-term count with nothing to warn them. **That is a delivery failure of exactly +`term:undelivered`'s shape — filed, adequate, and never reaching the act.** Options: leave as filed; +add a one-line pointer and treat a pointer as not-a-history-edit; or list errata in +`meta/README.md`. **Not decided here.** + +**Q-2 — a `denominations:` field would repair C-C more cheaply than a rename.** +C-C exists because `term:verdict`'s canonical text carries an audience denomination *inline*, and the +word it uses for that is `projection`. If denominations moved to a registry field — +`denominations: [{audience: engineering, name: specification demand}]` — the parenthetical leaves +canonical text, `projection` stops doing denomination duty inside a settled entry, and the practice +canon already has in one place becomes a rule. **The queued primer is the first projection that needs +it at scale, and C-C is the first place it would pay for itself.** Costed at Gate 4 if Emil wants it. + +--- + +## What this gate asks + +1. **Sweep 1's ten**, with the finding that **none is pinned** — batch, split, or decline. +2. **C-A `mechanical`**, confirmed live, with the recommendation to **repair the delivery side** + (~49 occurrences, draft) rather than the store (~340, settled). +3. **C-B `judgment`**, confirmed and **already retired** — the brief named the wrong node; cost zero. +4. **C-C `projection`** and **C-D `verdict`**, both new, both live, **both unpinned**. +5. **`posterior`: checked, fires, declined** — and moot under the C-A recommendation. +6. **Q-1** and **Q-2**, at Emil's convenience. + +**Nothing repaired. Nothing merged.** diff --git a/meta/sessions/2026-08-27-ground-migration/gate3-reconciliation.md b/meta/sessions/2026-08-27-ground-migration/gate3-reconciliation.md new file mode 100644 index 0000000..b6a8869 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/gate3-reconciliation.md @@ -0,0 +1,193 @@ +# GATE 3 — the §7 / Q27 reconciliation, and a finding that blocks Gate 4 + +**Status: draft-pending-ruling.** Two things in this gate, and the second is the larger. + +--- + +# Part 1 — the reconciliation. **Tested against the corpus, not assumed.** + +## The candidate, restated + +> The rule's normative force sits in the **acceptance relation**; the arrangement's *representation* +> of the rule is a **reading**; the **trust decision** governs whether that representation may be +> relied on without independent verification. Three objects, currently one. + +**The prompt requires this to be tested and not assumed. It was tested, it survives, and the test +changes it** — in the direction that makes Q27 cheaper to file, not dearer. + +## The test: every occurrence of `institutional ground`, read + +The compound is matched by an **anchored** rule (`institutional[ _-]ground`), which Part 2 shows is +the reliable class. **17 rows; 2 are the rule catching a neighbouring list item** (`inferred ground` +and `missing ground` in the same taxonomy list), so **15 genuine**. The audit reported 13; the +corrected figure is 15, and its claim that **zero are in upstream canon holds exactly.** + +| | Count | | +|---|---|---| +| **Meta-mentions** — naming the category, not using it | **11** | Q27's own heading, the taxonomy definition, "the slot is Q27-gated", "rung 3's least settled kind" | +| **Actual uses** | **4** | `paper-a.md:882`, `paper-a.md:909`, and two `product-cli` predicates | + +**All four actual uses denote a representation supplied by an authority. Not one denotes a rule's +normative force.** + +| Use | What is actually being called ground | +|---|---| +| `paper-a.md:882` | *"how the endpoint behaves on a country the **institutional ground** does not cover"* — the country-rules table the model consults. **Coverage is a property of a representation** | +| `paper-a.md:909` | *"the correct output is **computed by rule** from **institutional ground**"* — canon **already separates them in one sentence**: `by rule` is the procedure, `institutional ground` is the data it reads | +| `serialisation-contract-declared.yaml` | *"The institutional ground item… the defaults are not wrong, they are simply **owned by someone else**"* — a serialiser's defaults. A fact, not a rule | +| `deployment-secret-containment.yaml` | *"what counts as a secret is **knowledge the template author has**"* — a fact held by an authority | + +**And the three hard cases outside the compound resolve the same way.** *"The ground is +institutional — a statute, a contract"* (`01-determination.md:984`, `DDD-dec-27:243`) and *"a discard +decision with the regulation as its ground"* (rev18:1029) look like rules-as-ground. Read in place, +they are not: the determination track's own record field reads **"ground cited: the statutory +minimum for the records class (institutional, verified against the regulation's…)"** — what is cited +is **a value read from the statute**, with a provenance and a date. `DDD-dec-27`'s *authority +disagreement* is a disagreement about **which value the authority licenses**. Both are +representations. + +> **Result: the corpus contains no use of `ground` for a rule's normative force. Zero.** + +## What the collision actually is — one mis-listed word + +§7 and Q27 do not compete for the same occurrences, because §7's object never occupied any. The +appearance of collision lives entirely in **the canon slot's own wording**, which all three +definitional occurrences reproduce verbatim: + +> *institutional ground — supplied through **rules**, conventions, authority, or social practice* + +**That list mixes a content kind with three supply channels.** `conventions`, `authority` and +`social practice` answer *how the material arrived*. `rules` answers *what kind of thing it is*. +One word, in one list, in the foundation document — and it is the whole of the §7/Q27 conflict. + +## The reconciliation, as the corpus supports it + +**Three objects, and the word only ever named one of them.** + +| Object | Where it belongs | Status | +|---|---|---| +| The **rule's normative force** — what makes a resolution acceptable | the **acceptance relation**, or **standing commitments** | §7 is right, and **it was never ground.** §7 repairs a defect the corpus does not have | +| The arrangement's **representation** of a rule or of an authority's fact | **delivered ground**, carrying an **institutional provenance attribute** (SR-4) | **Q27's object. All four actual uses.** Reuse `term:delivery`'s vocabulary; mint nothing | +| The **trust decision** — may this be relied on without independent verification | a **filed governing decision**, Q27's mechanism, backing the provenance attribute | Q27's mechanism, unchanged | + +**The repair is to strike one word**, not to relocate a category: remove `rules` from the supply list +so the slot reads *"supplied through conventions, authority, or social practice"*. What is supplied is +a representation, always. A rule's normative force is then visibly not on that list, which is §7's +whole point, achieved without moving anything. + +**SR-4 completes it and makes the slot unnecessary.** With provenance as independent attributes rather +than a five-way enumeration, `institutional` becomes an attribute a record carries — alongside +`observed`, alongside `inferred`, as the proposal's own §6 already argued (*"an institutional record +may contain an inference"*) — and the trust decision backs that attribute. **There is no enumeration +slot left to dissolve.** + +## The question G3 was asked + +> **Q27 does not file onto a dissolving category.** It files onto the only category that was ever +> occupied, narrowed to exactly what its mechanism is about. **Filing it is safe, and it is safe +> before the migration cuts.** + +**Consequence for the sense partition: S4 does not survive as a sense.** Its four real occurrences +are S2/S3 material carrying a provenance attribute; its eleven meta-mentions name a category. The +partition is **four senses plus attributes**, not five — which is SR-4 reaching the partition itself, +and it removes the smallest and least defensible sense without a single rename. + +**One thing the reconciliation does not fix, stated so nobody expects it to.** Q27's own hardest +limit stands untouched: *"triangulation raises assurance within closure and never closes an open +predicate"*, and *"it yields assurance without a principal — six people saying the ice held is +evidence, and none bears your consequences."* Assurance and accountability remain separate axes. +The vocabulary makes the limit easier to state; it does not move it. + +--- + +# Part 2 — **a finding that blocks Gate 4.** Reported and held. + +## What happened + +G3 required reading the S4 occurrences, because a reconciliation cannot settle on a category whose +membership is unknown. Reading them showed the S4 set was wrong. Tracing why showed something larger. + +**GATE 1's acceptance rested on the residual being complete, which it is.** The 1,022 were read one +by one, in their own files, and every ruling is enumerated. **What Gate 1 did not examine was the +1,823 rows the audit assigned by rule, which it inherited exactly and by design.** Examining them for +G3 broke them. + +## The measurement + +A seeded sample of **60 rows drawn from the 1,823 rule-assigned**, hand-read in place. +**15 are wrong — 75% correct overall.** The errors are **not uniform**, and the split is the finding: + +| Rule class | Sampled | Wrong | Correct | Rows in corpus | +|---|---|---|---|---| +| **Anchored** — the pattern matches at or beside the token: `software-module`, `ddd-ground-id`, `ground-distribution`, `characterised`, `watched-not-grounding`, `yaml-field`, `poisoned-ground`, `admission-test`, `relevant-conditions`, `declared-ground-axes`, `institutional-ground`, … | 39 | **0** | **100%** | **1,396** | +| **Prose-context** — the pattern matches a keyword up to 70 characters away, across clause boundaries `[^.]` does not stop: `accessible-available` (191), `reading-ground` (99), `delivered` (41), `ordinary-english` (32), `ground-coverage-assurance` (31), `rule-standard-context` (13), `missing-ground` (11), `distribution-context` (9) | 21 | **15** | **29%** | **427** | + +> **The identifier- and compound-anchored rules are perfect. The prose-context rules are wrong about +> seven times in ten, and there are 427 of them — roughly 305 suspect rows.** + +**Two of the eight were adjudicated in full, not sampled**, and both confirm the rate: +`rule-standard-context` — **11 of 13 wrong** (it matches `policy` within 70 characters, so *"outcome +variation across ground … a fixed **policy**"* and *"no ground **truth** … the **standard** varies by +rater"* both became S4). `distribution-context` — **4 of 9 wrong** (it matches `deployment` and +`distribution`, so *"relative to a task **distribution**, accessible ground"* became S5 when it is S2). + +Typical misassignments, all from the sample: *"a determination against some **ground**"* filed as +ordinary English because the rule lists `some ground`; *"variation in **declared ground**"* inside +`term:actor` filed S3 because *"reading ground"* sits earlier in the same sentence; the release +descriptor's basis line `DDD-**ground**-03` filed S3 because `deliver` appears nearby; *"**Ground** +channels — axes readable **at act time**"* filed S2 when the predicate is an act predicate. + +## Why this is a finding and not an error to fix quietly + +**The audit was explicit about its own standard**, and it holds: *"every rule states why its +assignment is safe … there is no default rule."* The rules do state their warrant. **What no rule +states is its precision**, and the audit's §2 reported the rule-assigned half as *"exact"* against +the sampled half's confidence intervals — a distinction that turns out to run the wrong way. The +sampled half is now the better-measured one. + +**It does not touch anything ruled so far:** + +- **G1's residual work stands.** 1,022 rows, read individually, unaffected. +- **G2 stands.** Both sweeps read the registry directly and never consulted the classification. +- **G3 Part 1 stands.** `institutional-ground` is an anchored rule, 15 genuine rows, all read here. +- **SR-1 and SR-2 stand.** Both were ruled on canon's authority against the counts. + +**What it does touch is Gate 4.** A migration plan is a per-file, per-occurrence instrument. The +wave table, the cost columns, and every "what moves and what re-words" line are computed off the +classification, and ~305 of its rows are suspect — concentrated in `accessible-available` and +`reading-ground`, which are precisely the S2/S3 boundary the delivery vocabulary is being reused to +name. + +## What it would cost to close + +**W0-bis: re-adjudicate the 427 prose-context rows.** Same method as W0 — read each in its own file, +one ruling per row with its reason, residual zero by construction. The anchored 1,396 stay inherited, +now with a measured warrant rather than an assumed one. + +**427 rows is 42% of W0's 1,022, and W0 ran within this session.** No new instrument is needed: +`w0-classify.py` already merges per-row rulings and asserts coverage; the rulings files extend by one +range. + +## The three options, priced + +| | | | +|---|---|---| +| **A — run W0-bis now**, then Gate 4 | Gate 4 plans on a classification with a measured error rate throughout. Costs roughly 40% of W0 | **Recommended** | +| **B — defer W0-bis and plan Gate 4 anyway** | The plan's file lists and wave sizes carry ~305 suspect rows, unmarked. **This is the C-1 precedent's failure mode**, arriving one gate early: a plan that looks executable and is not | +| **C — defer the whole migration now**, W0-bis with it | Available, and cheaper than B. But G1–G3 have already produced the design rulings the audit said were the point, and none of them depends on the suspect rows | + +**Recommended: A.** The finding is bounded, measured, and its remedy is the method that already +worked once in this session. + +--- + +## What this gate asks + +1. **The reconciliation** — three objects, the word only ever named one, the repair is to strike + `rules` from the supply list, and **Q27 is safe to file.** +2. **S4 does not survive as a sense** — four senses plus provenance attributes, which is SR-4 + reaching the partition. +3. **The W0-bis finding** — 427 prose-context rows, ~305 suspect, Gate 4 blocked until they are read. +4. **Option A, B or C.** + +**Nothing repaired. Nothing merged.** diff --git a/meta/sessions/2026-08-27-ground-migration/gate3-w0bis.md b/meta/sessions/2026-08-27-ground-migration/gate3-w0bis.md new file mode 100644 index 0000000..8dc523f --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/gate3-w0bis.md @@ -0,0 +1,199 @@ +# GATE 3, re-opened — W0-bis + +**Status: draft-pending-ruling.** The classification is whole. Reproducible: +`python3 w0-classify.py` merges `rulings/r001…r021.py` (W0's 1,022) and `rulings-bis/b001…b009.py` +(W0-bis's 456) and asserts that neither set overlaps the other and that nothing is unruled. + +--- + +## First: a correction to what I reported at GATE 3, in the direction that mattered + +> **I told you the prose-context class was 29% correct, from a 21-row sample. +> Measured over all 427, it is 71.7% correct. My estimate over-stated the error rate by 2.5×.** + +Two causes, both mine: + +1. **The sample drew disproportionately from the small bad rules.** Of 21 prose rows it drew 1 each + from `rule-standard-context` (15% correct) and `distribution-context` (56%), which are 13 and 9 + rows in a 427-row class — so two of the worst rules carried a tenth of the sample. +2. **I mis-ruled four rows in the sample itself.** I marked `ground-provenance` occurrences wrong + when the audit had them right. Naming the provenance *axis* is S2; only a subject *characterised + by* the enumeration spans senses and is U-multi. That rule is now fixed and stated at the head of + `rulings-bis/b008.py`, and it was applied to the whole pass. + +**Emil ruled option A on that number.** The ruling still holds on the corrected one — **146 sense +changes across 2,845 rows is material, and Gate 4 could not have been planned on top of them** — but +the number I gave was wrong and the ruling deserved the right one. + +--- + +## What W0-bis measured + +**427 prose-context rows, each read in its own file. Not sampled — counted.** + +| Rows | Rule | Wrong | Correct | +|---|---|---|---| +| 191 | `accessible-available` | 17 | **91.1%** | +| 99 | `reading-ground` | 16 | **83.8%** | +| 41 | `delivered` | **38** | **7.3%** | +| 32 | `ordinary-english` | 20 | 37.5% | +| 31 | `ground-coverage-assurance` | 13 | 58.1% | +| 13 | `rule-standard-context` | 11 | 15.4% | +| 11 | `missing-ground` | 2 | 81.8% | +| 9 | `distribution-context` | 4 | 55.6% | +| **427** | **total** | **121** | **71.7%** | + +**The class is not uniformly bad — two rules are.** `delivered` and `rule-standard-context` supply +49 of the 121 errors from 54 rows. The two largest rules, which carry 68% of the class, are 91% and +84% correct. **"Prose-context rules are unreliable" was the wrong generalisation; "these two rules +are broken" is the right one.** + +**Why `delivered` fails at 7%.** Its pattern is `ground\b[^.]{0,50}\bdeliver\w*`, and the v5.5.0 +release descriptor, the CHANGELOG entry and `core/13-delivery.md` all name **the `ground` area and +the `delivery` area in the same breath**. Thirteen `DDD-ground-0N` identifiers and the area name +itself became S3, the delivered sense. The rule is not reading prose; it is reading a table of +contents. + +**Two sub-clusters came back clean**, which is why `accessible-available` survives at 91%: +`ground registry` / `ground table` / `ground item` — 69 rows, 3 wrong; and `ground provenance` / +`observed ground` / `inferred ground` — **60 rows, 0 wrong.** + +--- + +## The anchored-class reopening — it happened, and it **closes** + +Per the ruling: an anchored-class error reopens the question rather than being absorbed. One turned +up. It reopened, and it closes, because **the mechanism is decidable rather than a sampling matter.** + +> **It is rule ORDERING, not window width.** `ddd-ground-id` is the **last** rule in the audit's +> ordered table, and first match wins. + +| | | +|---|---| +| **15 rows** whose token **is** a `DDD-ground-0N` identifier were taken by an **earlier anchored rule** and given a sense — `declared-ground-axes` 11, `reads-different-ground` 2, `relevant-conditions` 1, `software-module` 1. An identifier inherits no sense | +| **13 rows** whose token is **not** the identifier were taken **by** `ddd-ground-id`, because an identifier sits elsewhere in the 240-character window. **The inverse steal** | + +**Both sets were enumerated mechanically over the whole corpus, not sampled.** The family is +therefore closed by construction, not bounded by a confidence interval. + +> **The true count of `DDD-ground-NN` identifier rows is 142, not the 116 the audit reported — and +> all 142 now classify U.** Verified mechanically: every row whose token sits inside the identifier. + +**One further anchored error is not mechanically findable**, and it came from a second seeded sample: +`reads-different-ground` on *"edges … are never read as ground"*, where the sense is the ledger's +basis (S2) and not what an actor reads at an act. + +**The second anchored sample, for the confidence you asked for.** 35 rows, seeded, drawn outside +W0-bis's scope and outside the first sample: **33 correct, 2 wrong** — and both errors are the two +mechanisms already named. Combined with the first sample: **72 of 74 anchored rows correct (97%)**, +with every identified failure belonging to an enumerable family. That is the honest bound, and it is +finite: it does not exclude a rare third mechanism, only the two now closed. + +--- + +## The corrected classification + +| | audit estimate | GATE 1 | **W0-bis** | net vs audit | +|---|---|---|---|---| +| **S2** | 1,638 | 1,536 | **1,529** | −109 (−7%) | +| **S1** | 488 | 520 | **567** | **+79 (+16%)** | +| **S3** | 331 | 417 | **369** | +38 (+11%) | +| **U** | 244 | 238 | **261** | +17 (+7%) | +| **S5** | 105 | 101 | **97** | −8 (−8%) | +| **S4** | 40 | 33 | **22** | **−18 (−45%)** | + +**146 rows changed sense; 171 changed label.** + +### Does a sense boundary move a second time? **Yes — S3, and it moves back.** + +> **At GATE 1 I reported S3 up 26% on the audit, and called it corroboration of SR-2. S3 gives back +> 48 of those 86 occurrences. It lands at +11%, not +26%.** + +The inflation came from the two broken rules: `delivered` labelled thirteen identifiers and the area +name S3, and `reading-ground` labelled sixteen S1 occurrences S3 — the second `ground` in sentences +like `term:actor`'s *"reading ground: variation in **declared ground**"*, where canon deliberately +opposes the two in one breath. + +**The finding survives; its magnitude does not.** S3 is still materially larger than the audit +estimated, and every genuinely-added occurrence is still a verb applied to the S1 object — the +apparatus's *exports*, *bounds*, *consumes*, *sits on*. **SR-2 is unaffected either way**, since it +was ruled on canon's authority and not on a count. But the Gate 4 consequence I drew from the +26% — that `apparatus/` is where the delivered sense concentrates — needs restating at the corrected +size, and it does survive: `apparatus/` is still the largest single contributor of added S3. + +### The boundary that moved most is **S1**, and nobody predicted it + +**+79 over the audit, +47 over GATE 1.** S1 is now **567 (19.9%)**, and upstream canon is +**182 S1 against 154 S3** — reversing the ordering I reported at Gate 1, where S3 led. + +**This strengthens SR-1 rather than disturbing it.** S1 keeps the word, and the sense that keeps the +word turns out to be canon's largest — which the audit's own ruling reached on authority, against +what the counts then showed. **The counts have now come to it.** + +### S4 falls to 22, and **canon's S4 is exactly zero** + +| | S1 | S2 | S3 | S4 | S5 | U | total | +|---|---|---|---|---|---|---|---| +| upstream | **182** | 81 | 154 | **0** | 42 | 64 | 523 | +| downstream | 362 | 267 | 196 | 20 | 54 | 137 | 1,036 | +| `product-cli` | 23 | **1,181** | 19 | 2 | 1 | 60 | 1,286 | + +**GATE 3 Part 1 said the corpus contains no use of `ground` for a rule's normative force in canon. +The corrected classification says it mechanically: upstream S4 = 0.** The reconciliation and the +count were derived independently and agree. + +### Independent corroboration: compound purity improved + +Re-measured after W0-bis, the compounds are **cleaner**, which is what a correct correction looks +like: `reading ground` **96% → 100% S3** · `accessible ground` **85% → 100% S2** · +`poisoned ground` 100% S3 · `ground-cli` 100% S2 · `ground distribution` 100% S5 · +`institutional ground` 100% S4 · `uniform ground` 100% S5 · `ground registry` 100% S2. +`ground-state` remains the one impure compound (S2 7 · S1 4 · U 2). + +--- + +## The method rule, for the manifest + +> **A classification rule whose match window can cross a clause boundary is not an anchored rule, and +> the two classes cannot share an acceptance standard.** + +**The mechanism, recorded precisely because the next instrument will make the same mistake in a +different regex:** + +- The audit's context rules are written `ground\b[^.]{0,N}\bKEYWORD\b`. **`[^.]` is intended to stop + at a sentence boundary and does not.** It fails on abbreviations, decimals, version numbers, + file extensions, ellipses and `§`-refs, and it never stops at a comma, semicolon, dash or list + item — so a 50-to-70-character window routinely spans two clauses and often two list entries. + *"outcome variation across ground · epistemic uncertainty about a fixed **policy**"* is one list; + the rule read it as one sentence. +- **An anchored rule matches at or beside the token** — `poisoned[ _-]ground`, `ground[ _-]registry`, + `src/ground`. Its warrant is the compound, and the compound is present at the token or it is not. + **A windowed rule's warrant is proximity, which is not a fact about the occurrence.** +- **Ordering is a third mechanism, independent of both.** In an ordered first-match-wins table, a + rule that can match an identifier steals rows from the identifier rule unless the identifier rule + is **first**. The audit's is last. That produced 15 steals and, symmetrically, 13 inverse steals. + +**Three corollaries for any successor instrument:** + +1. **Report per-rule precision, never a single figure for the table.** The audit reported its + rule-assigned half as *"exact"* against the sampled half's confidence intervals. The distinction + ran the wrong way: the sampled half was the better-measured one. +2. **Put identifier and immutability rules first**, because they are decidable and cannot be stolen + from without loss. +3. **A rule with a window earns a sample of its own.** A 60-row sample across a mixed table told me + 29% when the truth was 72%, because rule size and rule quality are uncorrelated. + +--- + +## What this gate asks + +1. **The correction to my GATE 3 estimate** — 29% reported, 71.7% measured, and the two reasons. +2. **The completed classification** — 146 sense changes, residual zero by construction. +3. **S3 moving a second time, and back** — my GATE 1 finding was inflated; the finding survives at + +11% rather than +26%, and SR-2 is untouched. +4. **S1 as the largest movement (+16%), and canon now S1-led** — unpredicted, and it strengthens SR-1. +5. **The anchored-class reopening, closed** — one mechanism, two directions, 28 rows enumerated + mechanically; 97% on 74 sampled rows as the residual bound. +6. **The method rule for the manifest.** + +**Gate 4 is now unblocked.** Nothing repaired. Nothing merged. diff --git a/meta/sessions/2026-08-27-ground-migration/gate4-carry.md b/meta/sessions/2026-08-27-ground-migration/gate4-carry.md new file mode 100644 index 0000000..f2bd3cc --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/gate4-carry.md @@ -0,0 +1,256 @@ +# Carried to Gate 4 — booked at each gate, ruled in the plan + +**Status: accumulating.** This file is the plan's inbox. Every gate adds what it found that the plan +must decide; nothing here is a decision. Gate 4 empties it. + +--- + +## From GATE 1 (ruled 2026-08-27) + +### C1 — `apparatus/`'s wave booking must be re-examined, not inherited + +The audit booked `apparatus/` into **W3**, *"rides with revisions already owed"*. The full +classification found **38 of the 86 added S3 occurrences are in `apparatus/`** — `tool-surfaces.md`, +`tool-contract.md`, `encode-verify.md`, `the-skill-floor.md`, `prefix-stability.md`. + +**`apparatus/` is where the delivered sense concentrates.** W2 is *"canon's definitional repair; the +S2/S3 states named by reuse"* — the wave whose whole content is naming the delivered state. Booking +the largest body of delivered-sense prose into the later wave, on the grounds that it rides with +revisions already owed, was a decision taken without knowing that. + +**Ruled at GATE 1:** re-examine at Gate 4. Do not inherit. + +### C2 — record why the S3 estimate was low + +**The rule table under-sampled the vocabulary of delivery. The sense boundary was not wrong.** + +The table's S3 rules keyed on *delivers* and *reads*. The apparatus says **exports**, **bounds**, +**consumes**, **sits on**, **fires against**, **is in the prefix**. Those are act predicates in every +case and no rule was looking for them, so they fell to the residual and the 100-row sample drew six +of them where the true rate was fourteen in a hundred. + +**This is corroborating, not awkward.** Every one of the 86 added occurrences is a *verb applied to +the S1 object*. **The sense that grew by 26% is precisely the one SR-2 says is not a rival +primitive**, and it grew because the framework has more verbs for delivery than the rule table knew. + +### C3 — `ground channel`: a migration surface the plan was told it did not have + +10 occurrences, one **inside `term:arrangement`'s settled canonical text**, one in `00-primitives.md` +embedding it, three in the determination track, three in Paper A, one holding note, one immutable +session record. All S2. Filed as erratum E-2. **The plan must carry it; the audit's wave table does +not.** + +### C4 — the i18n pass: **book it or defer it explicitly** + +`i18n/ordliste-dansk.md:17` glosses `grund` as **both senses in one entry** — *"Det, en beslutning +afgøres **imod**"* (S1) *"— det læsbare underlag, aktøren inspicerer"* (S3). The Danish glossary is +faithfully translating a definition layer that was never single-sensed. + +**Ruled at GATE 1: do not let it fall between.** The plan either books an i18n pass or defers it by +name, with the deferral recorded. Two upstream occurrences (`i18n/ordliste-dansk.md:17`, `:139`). + +### C5 — upstream `README.md` is fixed **in this migration** + +Rewritten in three commits after `v5.10.0` (+515 lines); its uses of the word went 2 → 17. It is +outside `core/`, so not canon, **but it embeds two registry definitions in two different senses**: +line 115 carries `term:closure`'s *"relevant ground is observable"* (S2) and line 58 carries +`term:arrangement`'s *"ground channels"* (S2) beside line 7's *"determines choices against ground"* +(S1). + +**Ruled at GATE 1: that page is the transfer's front door, so it is fixed here rather than later.** + +### C6 — SR-4's warrant, recorded + +Five occurrences **name two or more senses in one phrase** and therefore sit in no partition: + +| | | +|---|---| +| `papers/paper-a/paper-a.md:211` | the provenance table's subject, *"The ground is"*, over values that are S1, S2, S2 and S4 | +| `meta/sessions/2026-08-18-wave3/revision-foundation.md:109` | the same table, in Paper A's ancestor | +| `meta/sessions/2026-08-18-track-1-determination/prompt.md:39` | *"Ground and its provenance — controlled, observed, inferred, institutional, missing"* | +| `i18n/ordliste-dansk.md:17` | the Danish gloss, S1 and S3 in one sentence | +| `meta/sessions/2026-08-23-phase1a/paper-a-review-triage.md:136` | *"`G*` (relevant) vs `G_A` (accessible and delivered)"* | + +**No naming scheme fixes the first three.** A table whose subject must be one sense and whose values +span three cannot be repaired by choosing a better subject word. **Only the attribute split fixes +it** — SR-4 makes provenance independent attributes on a record, and the subject stops having to be +one sense at all. + +**Ruled at GATE 1: this is SR-4's warrant.** It is not only a ruling about provenance; it is the +repair for occurrences no rename could reach. + +### C7 — the head delta is classified at Gate 4 + +**+133 across 11 files** against the audit's read commits, **+0 in `product-cli`**. 106 are immutable +or the audit's own output. The 27 live rows sit in three files and are read alongside the plan. +C5 rides with this. + +--- + +## From GATE 2 (reported 2026-08-27, pending ruling) + +### C8 — sweep 1's ten assert-not-define entries: **none is pinned** + +30 of the 62 entries carrying canonical text are pinned downstream; **not one of the ten is**. Zero +pin advances, zero `DDD-dec-29`-class decisions, one embed site each, four with Paper A appendix +exposure (`training`, `seam`, `composite-actor`, `ensemble-actor`). + +Grade A — **no definition anywhere**, the worst grade and the cheapest fix: `term:seam`, +`term:composite-actor`, `term:projection`. Grade B — an ungoverned definition already sits in the +establishing document, promotable byte-for-byte: `term:training`, `term:ensemble-actor`. Grade C — +the definition is present but subordinate, needing only a reordering: `term:path-degeneracy`, +`term:pinning-resolution`, `term:orchestrator`, `term:p-err`, `term:redundancy`. + +### C9 — `mechanical`: repair the delivery side, not the store + +Both `term:mechanical` and `term:delivery` are pinned, so either direction fires a pin advance. The +volumes are not close: the delivery value is **≈49 occurrences at `draft` status, filed v5.5.0**; the +store is **≈340 at `settled`, filed at `01`**. `DDD-dec-30`'s own discipline — a new value must share +no word with the store vocabulary — is the argument, and `term:delivery` is the case that rule was +written for, five versions too late. + +**`act-triggered` is the replacement, checked and clear**, and it is canon's own gloss: +`DDD-cost-09` already reads *"where the check is act-triggered (`term:delivery`, mechanical)"*. +Reuse, not minting. It pairs with the existing `judgment-mediated`. + +**`posterior` is therefore moot**, and it fires its check independently: `prior` is live in the +Bayesian sense in four places, one of them ratified canon (`DDD-measure-05`), and +`term:calibration-ledger` is the estimator in that same prior→update pipeline. + +### C10 — `projection` and `verdict`: two new live collisions, both unpinned + +`term:projection` (the compound's two axes) against *the projection layer* / *the engineering +projection* — which appears **inside `term:verdict`'s settled canonical text**. And `term:verdict` +(the induced assignment, whose entropy is `D`) against the per-act verdict in `term:act-individuation` +and `term:outcome` — a function against a value of it, across three settled entries established by +one document. `09`'s contract already disambiguates as `verdict|verdict function` and the registry +carries the alias; only the `term:` field is the bare word. + +### C11 — `judgment` is closed; the brief inherited it as open + +`DDD-frame-15` is retired and `DDD-frame-17`'s three values are `predetermined`/`exercised`/`drawn`. +`DDD-dec-30` records the collision in canon's own words. ~7 historical mentions remain and **must not +be migrated** — they are correct as history. Cost: zero. + +### C12 — the drafting-warning instrument now needs **five** exceptions, not three + +Quotations · historical notes · ordinary English (the audit's third) · the RDF `ground term` · the CSS +surface colour. `floor` shows the same shape in `core/00-primitives.md` (*"a floor of pure action"*), +so the instrument is a general exception-list problem and not a `ground` one. + +### C13 — `floor` collides in `product-cli` (W4 class) + +`tolerance_floor` (a set's minimum tier, §4.2.1) against the **Polanyi floor** (§3.5, `term:floor`). +**168 files** touch `tolerance_floor`, and both senses appear in the same documents. A serialised +field name, so it prices with W4 and not with the canon waves. + +### C14 — two questions raised at GATE 2, unruled + +**Q-1** the erratum has no pointer from the audit it corrects, and a pointer would edit a merged +artefact. Leaving it is `term:undelivered`'s shape exactly. **Q-2** a `denominations:` registry field +would repair C10's `projection` half more cheaply than a rename, by moving `term:verdict`'s inline +audience denomination out of canonical text — and the primer is the first projection needing it at +scale. + +--- + +## GATE 2 ruled (2026-08-27) — dispositions + +- **Sweep 1 Grade A files in this migration**: `term:seam`, `term:composite-actor`, + `term:projection`. Three unpinned entries, one embed each, zero pin advances. +- **Grades B and C carry to the freight list with their grading intact** — the grading is the + artefact, because it prices the rest without re-reading. +- **`mechanical` repairs on the delivery side. `act-triggered` ruled in.** Record `DDD-dec-30` as + the warrant, **and record that the discipline existed before the violation**, because that is the + finding. +- **`judgment`**: closed, cost zero, historical mentions stay as history. +- **`projection` and `verdict`**: confirmed, priced, **deferred to the freight list** — unpinned, + and `09`'s contract already disambiguates `verdict|verdict function`. Only the bare `term:` field + is exposed, a small repair that should not ride a migration. +- **`posterior` withdrawn.** Record all three deaths together in the manifest — `fixed`, `resolved`, + `posterior` — because three is a pattern and the pattern is the argument for the check. +- **Q-1 filed.** The erratum pointer is in `meta/ground-audit-2026-08-24.md`, as a forward reference + that touches no other line. The supersession convention has always added forward references. +- **Q-2 ruled in, and moved up.** A `denominations:` field files **in this migration**: it repairs + `projection` more cheaply than a rename by moving `term:verdict`'s inline audience denomination out + of canonical text, and it is the same move as the appendix defect and claim-format §5 — the + projection carrying what the schema should say. **Two consumers now, not one**, and the primer + needs it at scale. +- **To Gate 4**: the i18n gloss (C4), `ground channel` inside `term:arrangement` (C3), the + five-exception drafting warning (C12). +- **To W4's assessment**: the `floor` collision in `product-cli` (C13). + +--- + +## From GATE 3 (reported 2026-08-27, pending ruling) + +### C15 — the reconciliation settles, and it narrows rather than dissolves + +**The corpus contains no use of `ground` for a rule's normative force.** Of 15 genuine +`institutional ground` occurrences, 11 are meta-mentions of the category and all 4 actual uses denote +a representation supplied by an authority. §7 repairs a defect the corpus does not have; Q27's object +is the only one the word ever named. **The collision is one mis-listed word** — `rules` inside the +slot's list of *supply channels* (`conventions, authority, social practice`). **Q27 is safe to file.** + +### C16 — S4 does not survive as a sense + +Four senses plus provenance attributes, not five. This is SR-4 reaching the partition itself, and it +removes the smallest sense with no rename. **The plan's wave table should be redrawn on four senses.** + +### C17 — **BLOCKING: W0-bis, the 427 prose-context rows** + +A seeded 60-row sample of the inherited rule-assigned half: **anchored rules 39/39 correct; +prose-context rules 6/21 correct.** ~305 of 427 rows suspect, concentrated in `accessible-available` +(191) and `reading-ground` (99) — **precisely the S2/S3 boundary the delivery vocabulary is being +reused to name.** + +Nothing ruled so far moves: G1's residual work, both G2 sweeps, G3 Part 1 and SR-1/SR-2 are all +independent of these rows. **Gate 4 is not**, because a plan's file lists and wave sizes are computed +off the classification. Recommended: **run W0-bis (427 rows, 42% of W0) before the plan.** + +--- + +## From W0-bis (reported 2026-08-27, pending ruling) — GATE 3 re-opened + +### C18 — the classification is whole, and C17's estimate was wrong + +**Reported at GATE 3: 29% correct. Measured over all 427: 71.7%.** The sample over-stated by 2.5×, +because it drew a tenth of itself from two rules that are 22 of 427 rows, and because I mis-ruled four +`ground-provenance` rows in it. **146 rows changed sense** — the ruling holds, the number did not. + +**Two rules carry 49 of the 121 prose errors from 54 rows**: `delivered` (7% correct) and +`rule-standard-context` (15%). The two largest rules are 91% and 84%. **Plan on the rules, not the +class.** + +### C19 — S3 moved a second time, and back. GATE 1's +26% was inflated; it is **+11%** + +`delivered` labelled thirteen identifiers and the area name S3; `reading-ground` labelled sixteen S1 +occurrences S3. **SR-2 is untouched** — it was ruled on canon's authority, not a count — and +`apparatus/` remains the largest single contributor of added S3, so **C1 stands at the corrected +size**. + +### C20 — **S1 is the largest movement: +79 (+16%), and canon is now S1-led (182 S1 : 154 S3)** + +Unpredicted by the audit or by GATE 1. **It strengthens SR-1**: the sense that keeps the word is +canon's largest, which the audit ruled on authority against the counts of the day. The counts have +come to it. **The wave table should be redrawn on this**, not on GATE 1's figures. + +### C21 — canon's S4 is exactly **zero**, mechanically + +Independent of GATE 3 Part 1's reading, and agreeing with it. **Four senses plus attributes**, and the +sense that dissolves has no canon occurrences to migrate at all. + +### C22 — the true identifier count is **142**, not 116 + +`ddd-ground-id` sits last in an ordered first-match-wins table, so 15 identifier rows were stolen by +earlier rules and 13 non-identifier rows were stolen by it. Both sets enumerated mechanically; all +142 now classify U. **The unmigratable-at-any-price column grows by 26.** + +### C23 — the method rule, for the manifest + +**A classification rule whose match window can cross a clause boundary is not an anchored rule, and +the two classes cannot share an acceptance standard.** `[^.]` does not stop at a sentence boundary — +not at a comma, a semicolon, a dash, a list item, a `§`-ref or a version number — so a 50–70 +character window routinely spans two clauses. Ordering is a separate third mechanism. Corollaries: +report per-rule precision and never one figure for a table; put identifier and immutability rules +first; a windowed rule earns a sample of its own. diff --git a/meta/sessions/2026-08-27-ground-migration/gate4-plan.md b/meta/sessions/2026-08-27-ground-migration/gate4-plan.md new file mode 100644 index 0000000..836dbbd --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/gate4-plan.md @@ -0,0 +1,272 @@ +# GATE 4 — the migration plan + +**Status: draft-pending-ruling. This is the plan, not the cut.** Nothing in canon is touched by this +gate. Read at `ce2c477` (= `v5.11.0`), `e81a454`, `d0f4297`, on the classification +`w0-classify.py` produces. + +--- + +## 1. The finding that resizes the whole migration + +**SR-1 gives S1 the word. SR-2 says S3 is not a rival primitive but *verbs applied to the S1 +object*. Put together, those two rulings mean that prose which already names the verb is already +correct** — *"an actor **reading** ground"*, *"the ground **at the act**"*, *"**held at fixed** +ground"*, *"**available** ground", *"ground **channels**"*. Nothing in those sentences moves. + +Measured over the 567 S2/S3 prose occurrences in canon and the projection, excluding immutable rows +and identifiers: + +| | | | +|---|---|---| +| **already qualified** by a verb or adjective within 40 characters | **380** | **67%** — no edit | +| **bare** — the reader must infer the state from the sentence | **187** | **33%** — needs re-expression | + +> **The migration is 187 prose decisions in canon and the projection, not 684.** + +**This is SR-2 paying for itself.** The audit priced the migration at *"~2,357 migrating +occurrences, mostly re-expression"*. Two thirds of that re-expression turns out to be already +written, because canon's own habit is to say what is being done to the ground rather than to name a +state. **The expensive disposition Emil took with the cost in view is cheaper than the cost he +accepted.** + +--- + +## 2. The corpus, dispositioned + +| | Rows | Disposition | +|---|---|---| +| **S1** | **567** | **Keeps the word. No edit, no pin, no re-projection.** | +| **U** | **261** | Never migrated. 142 are `DDD-ground-NN` identifiers, unmigratable at any price | +| **immutable** | **260** | Session records and release descriptors: classified, never touched | +| **S2 + S3 prose, qualified** | 380 | Already correct under SR-1 + SR-2 | +| **S2 + S3 prose, bare** | **187** | **The migration's real body** | +| **S5** | 97 (87 mutable) | → *deployment distribution* | +| **S4** | 22 (20 mutable, **0 in canon**) | Dissolves into provenance attributes (SR-4) | +| **`product-cli`** | 1,203 | **W4. Priced below, not executed.** | + +--- + +## 3. The waves, redrawn on the corrected counts + +The audit's table is superseded in three places: `apparatus/` moves, S4 disappears, and W2 shrinks. + +| Wave | Content | Size | Pins | Notes | +|---|---|---|---|---| +| **W1** | S5 → *deployment distribution* | 87 mutable, **29 in merged papers** | `term:verdict` **unpinned** | SR-5: rides with a paper revision, which is **out of this session's scope** | +| **W2** | the definitional repair: 11 registry entries + 11 embeds + upstream `core/` bare prose | 11 + 11 + **65** | **7 fire W6** | The most expensive to get wrong | +| **W3** | `apparatus/`, projections, applications, papers, downstream `core/` | **122** bare | 0 | **Re-booked from the audit — see §5** | +| **W4** | `product-cli` | 1,203 | — | **Not executed. §7** | +| **never** | U (261) + immutable (260) | 521 | — | | + +### W2's registry work, exactly + +**Seven pinned entries whose canonical text moves. Predicted firing, stated before any operation:** + +> **Exactly seven `W6`, on `term:actor`, `term:arrangement`, `term:capability`, `term:capacity`, +> `term:closure`, `term:judgment`, `term:residual-discretion`. Nothing else. Zero `W5`** — no pinned +> status moves. **Zero `W7`** — no local id is added or shadowed. **Zero `W3`** — every entry keeps +> its single embed site. + +All seven are instrumented (each carries a `content_hash`), so each firing is a governed advance in +the `DDD-dec-29` pattern and not undetected drift. Four further entries move and are **unpinned**: +`term:encode-verify-split`, `term:overflow`, `term:poisoned-ground`, `term:verdict`. + +**Eleven embed re-projections, all in upstream `core/`**, one site each: `00-primitives.md` ×3, +`11-the-floor-mechanism.md` ×2, `01-the-principle.md`, `03-the-floor.md`, `09-the-measure.md`, +`10-cost.md`, `14-indexed-determination.md`. + +**The seven S1 entries are not touched at all**: `term:ground`, `term:admission-test`, +`term:determination`, `term:act`, `term:tolerance`, `term:answerability`, `term:swarm-gate`. + +### `poisoned ground` — a decision, not 66 edits + +The audit put it on the must-touch list because **its sense changes without its text changing**: an +S3 compound of an S1 head word, 66 occurrences at 100% S3 purity. Under SR-2 the compound is +*already* a verb-shaped construction (*"ground that is **present but false**: the substrate a +determination **reads**"*), so the text stands. **What it needs is one sentence in `term:poisoned-ground` +saying which state it names** — one entry, unpinned, one embed. Not sixty-six edits. + +--- + +## 4. Order of operations + +1. **The separately-ruled items** (§6) — they do not depend on the rename and three are already ruled. +2. **W2's registry**, one entry at a time, each with its predicted firing stated first, then the + embed re-projected, then `validate-core-order.py` re-run. +3. **W2's upstream `core/` prose** — 65 bare occurrences, after the registry, because the registry + is what the prose must agree with. +4. **The pin advance**, as one decision node citing all seven W6 firings, in the `DDD-dec-29` pattern. +5. **W3**, downstream, after the pin advance lands. +6. **W1** only when a paper revision carries it (SR-5), which is out of scope here. +7. **W4** never in this session. + +**The seam that must not be crossed:** upstream lands and is accepted before downstream advances its +pin. Every prior session in this programme has followed that order and `graph/upstream.yaml`'s own +header requires it. + +--- + +## 5. `apparatus/` — the re-booking Emil ordered at GATE 1 + +The audit booked `apparatus/` into **W3**, *"rides with revisions already owed"*. W0 found it is +where the delivered sense concentrates; W0-bis corrected the size but not the direction. + +**Re-booked: `apparatus/` moves to W2's tail, not W3's.** Its five documents — +`tool-surfaces.md`, `tool-contract.md`, `encode-verify.md`, `the-skill-floor.md`, +`prefix-stability.md` — carry the vocabulary the definitional repair is *about*, and +`encode-verify.md:21` carries the miscitation the audit found (*"Ground is the read-only surface an +actor inspects in order to act (`core/00`)"* — an S2 definition attributed to an S1 source). **That +line is repaired by W2 or it is not repaired at all**, because W3 rides with revisions that are +themselves out of scope. + +--- + +## 6. The separately-ruled items — independent of the rename + +**Each was ruled on its own merits. None depends on the concept moving.** + +| | Work | Pins | +|---|---|---| +| **Sweep 1 Grade A** *(ruled in)* | `term:seam`, `term:composite-actor`, `term:projection` — promote a definition into each | **0** — all three unpinned, one embed each | +| **`mechanical` → `act-triggered`** *(ruled in)* | `term:delivery`'s canonical text and alias list; ~49 occurrences across three repos | **1 W6**, on `term:delivery`. `term:mechanical` is **not touched** — the store keeps its word | +| **`denominations:` field** *(ruled in)* | `spec/claim-format` addendum; move `term:verdict`'s inline parenthetical into the field; validator check | **0** — `term:verdict` unpinned | +| **The erratum pointer** *(filed)* | done at GATE 3 | 0 | +| **README.md** *(ruled in, C5)* | 19 occurrences, **five senses on one public page** — S1×8, S2×4, S3×4, S5×1, U×1 | 0 — outside `core/` | +| **i18n** *(C4, book or defer by name)* | `ordliste-dansk.md:17` glosses both senses in one entry; 2 occurrences | 0 | + +**`denominations:` has a second consumer beyond the primer**, and it is the cheapest repair of the +`projection` collision: moving `term:verdict`'s *"(in the engineering **projection** …)"* out of +canonical text stops the word doing denomination duty inside a settled entry. + +--- + +## 7. W4 — priced, not executed + +**1,203 mutable occurrences in `product-cli`, 1,181 of them S2 (98%).** The repository is +essentially monolingual, which is what makes the option below real. + +| | | +|---|---| +| **The field** | `ground:` in `.ddd/` predicates and `.decisions/` sets — **the audit's 660 occurrences across 70 files**, a serialised key, not prose | +| **Code** | `product-core/src/ground/` (a module path), `ground-cli` (a **published binary name**), `Ground`/`Ground::Characterised` (Rust types), `crate::ground::*` (57 import paths) | +| **The risk** | **the only edit in this programme that can break something already running** | + +**Three options, unchanged in shape by the corrected counts:** + +- **A — full data migration.** Rename the field, the module, the binary and the types; write a + reader that accepts both keys for one release. Correct, and the largest single body of work in the + programme. +- **B — the field stays, the concept is renamed**, at the price of a **documented divergence**. The + audit surfaced this without recommending it. **The corrected counts strengthen it**: `product-cli` + is 98% one sense, so the field name is unambiguous *inside* that repository, and the divergence is + a seam note rather than a live confusion. +- **C — defer W4 entirely** and revisit when the ledger next changes format. + +**Two findings W4 must carry**, both from this session: `floor` collides inside `product-cli` +(`tolerance_floor` §4.2.1 against the Polanyi floor §3.5, **168 files**), and two further objects sit +under `ground` there — the RDF `ground term` (11) and the CSS surface colour (6). **Option B does not +dispose of those**; they are local collisions and are ruled with W4 or not at all. + +--- + +## 8. The head delta, classified — C7 discharged + +**+133 across 11 files. 106 are immutable or the audit's own output. 27 are live, in 4 files.** + +| | | +|---|---| +| `upstream/README.md` **+17** (2 → 19) | **The migration surface that did not exist when the audit was taken.** Five senses on one page, and it embeds two registry definitions: `term:closure`'s *"relevant ground is observable"* (S2) beside line 7's *"determines choices against ground"* (S1). **Ruled into this migration at GATE 1 — it is the transfer's front door** | +| `upstream/core/decisions/DDD-dec-31.yaml` **+3** | All three are `DDD-ground-0N` identifiers. **U. No work** | +| `downstream/meta/successor-items-*.md` **+25** | Downstream meta prose; migrates with W3 | +| `downstream/meta/ground-audit-2026-08-24.md` **+61** | The merged artefact. **Not edited** — its erratum is filed and now carries a forward reference | + +--- + +## 9. The size, honestly, against the C-1 precedent + +**What the plan is:** + +| | | +|---|---| +| 187 | bare prose re-expressions, canon + projection — **each a judgment about how to re-say a sentence**, not a replacement | +| 11 | registry entries superseded, of which **7 are ratified canon under a live pin** | +| 11 | embed re-projections | +| 7 | `W6` firings, needing one decision node in the `DDD-dec-29` pattern | +| 87 | S5 occurrences that cannot land without a paper revision **that is out of scope** | +| ~49 | the `mechanical` repair, with its own pin | +| 3 + 1 + 19 + 2 | Grade A · `denominations:` · README · i18n | + +**Against the precedent.** `DDD-dec-29` records what **one** pinned registry entry cost: a decision +node, an Appendix A regeneration, a manuscript re-quote, and a predicted-then-verified firing. +**This plan has seven of those, plus 187 prose rulings in ratified canon and merged papers.** + +**My assessment, for the ruling and not in place of it: the migration proper exceeds what this +session can execute at the standard it has held.** The reasons are specific rather than general: + +- **Every one of the 187 is a ruling, not an edit.** SR-2 means the question at each site is *does + this sentence need a qualifier, and which one* — and the vocabulary Q2 settled (`available`, + `delivered`, `undelivered`) has never been applied to a single canon sentence. The first twenty + would set precedents the remaining 167 would inherit, unreviewed. +- **W1 cannot land at all** without bundling a paper revision the prompt puts out of scope, so S5 — + the cheapest wave, and the one the audit said could go early and alone — is unavailable here. +- **The half-renamed risk is real and asymmetric.** A registry that says *delivered ground* while + `apparatus/` still says bare *ground* is worse than one where neither does, and `apparatus/` is + exactly the body the re-booking just moved into W2. + +**The recommendation is therefore: defer the migration whole, and land §6.** The separately-ruled +items are not the migration: each was ruled on its own evidence, none moves the concept, and three of +them (Grade A, `mechanical`, `denominations:`) Emil ruled *into* this session explicitly. **Whether +"defer whole" reaches them is Emil's to say, and it is the one question this gate cannot answer for +itself.** + +**What a successor session inherits if it defers.** This is the argument that the deferral is cheap: + +- **the vocabulary is settled** — SR-1 through SR-7, plus `act-triggered`, plus `denominations:`; +- **the classification is execution-grade** — 2,845 rows, residual zero by construction, reproducible; +- **the plan is written** — this document, with every pin, every embed and every firing named; +- **the surprises are spent** — two senses that nobody had (RDF, CSS), a compound the audit reported + as absent, a translated defect, a definition layer 17 terms wide, and a classification instrument + with three named failure mechanisms. + +**A successor starts at execution.** The audit said an audit was worth running *even if the migration +then defers*, because it makes the design rulings answerable. The same holds one level up: this +session made them answerable **and answered them**. + +--- + +## 10. The twenty-three carried items, dispositioned + +| | Item | Disposition | +|---|---|---| +| C1 | `apparatus/` re-booked | **Done — §5.** W2's tail, not W3 | +| C2 | why S3's estimate was low | Recorded; superseded in size by C19 | +| C3 | `ground channel`, 10 occurrences | **In W2** — `term:arrangement` is one of the seven pinned entries | +| C4 | the i18n gloss | **Booked in §6.** Two occurrences, no pin | +| C5 | `README.md` | **In §6 and §8.** Five senses, one public page | +| C6 | SR-4's warrant | Recorded; the five two-sense occurrences dissolve with S4 | +| C7 | the head delta | **Discharged — §8** | +| C8 | sweep 1's grades | Grade A in §6; B and C to freight with their grading | +| C9 | `mechanical` → `act-triggered` | **In §6.** 1 W6, on `term:delivery` | +| C10 | `projection`, `verdict` | To freight — and `denominations:` repairs `projection`'s half cheaply | +| C11 | `judgment` closed | No work | +| C12 | five exceptions | Rides with the drafting-warning instrument, which is W2's | +| C13 | `floor` in `product-cli` | **In §7** — W4's assessment | +| C14 | Q-1, Q-2 | Q-1 **filed**; Q-2 **in §6** | +| C15 | the reconciliation | Q27 cleared to file; strike `rules` from the supply list — one word, in W2 | +| C16 | S4 dissolves | **Four senses plus attributes.** §2, §3 | +| C17 | W0-bis blocking | **Discharged** | +| C18–C23 | W0-bis's findings and the method rule | **In the manifest**, §11 below | + +--- + +## 11. What this gate asks + +1. **The plan**, §3–§8, on the corrected counts. +2. **The re-sizing at §1** — 187, not 684, because SR-2 already did two thirds of the work. +3. **The size ruling.** My assessment is that the migration proper exceeds this session. + **Execute, or defer whole?** +4. **If defer-whole: does it reach §6?** The four separately-ruled items were ruled on their own + merits and Emil ruled three of them into this migration. **They can land without the rename.** +5. **W4: option A, B or C** — priced, not executed, with the two local collisions named. + +**Nothing repaired. Nothing merged.** diff --git a/meta/sessions/2026-08-27-ground-migration/gate5-execution.md b/meta/sessions/2026-08-27-ground-migration/gate5-execution.md new file mode 100644 index 0000000..a36b0b5 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/gate5-execution.md @@ -0,0 +1,144 @@ +# GATE 5 — §6 executed + +**The migration deferred whole. These are the repairs that surfaced during it.** + +**The boundary held.** Nothing in this gate re-expressed a bare S2/S3 occurrence. **No occurrence of +`ground` changed sense or wording anywhere in either repository.** Repair what contradicts itself; +never resolve what is merely unqualified. + +--- + +## Predicted before operating, and verified after + +> **Prediction: zero `W5`, zero `W6`, zero `W7` in this session** — the downstream pin resolves +> against `ref: v5.9.0`, and this session neither advances the pin nor cuts a tag, so nothing here +> is visible to it. + +**Verified:** `upstream 67 pins resolved against the pinned ref, 0 basis-loss, 0 content-drift, +1 shadowed id(s)` — the shadowed id being `term:maturation`'s governed `DDD-dec-21` shadow, +unchanged. + +**A correction to GATE 4's prediction, and it is a real one.** GATE 4 stated *"exactly seven W6"*. +That prediction attaches to the **pin advance**, which is a separate operation this session does not +perform. **The seven belong to the deferred migration, not to §6.** + +**The deferred firing §6 itself creates, stated now so the successor inherits it rather than +discovering it:** + +> **When the pin is next advanced past these commits, exactly three `W6` fire and no more:** +> **`term:delivery`**, **`DDD-cost-09`** and **`DDD-delivery-01`** — the three pinned objects whose +> `statement` or `canonical_md` moved. + +**What does not fire, and why**, since the digest covers `statement`, `region` and `canonical_md` +only: `DDD-delivery-01`'s **notes** moved and notes are not hashed; `DDD-delivery-03` moved and is +**unpinned**; the three Grade A entries moved and **none is pinned**; `term:verdict` moved and is +**unpinned**. + +--- + +## What landed + +### 1 · Sweep 1 Grade A — three terms that never defined themselves + +Each definition **promoted byte-for-byte from its own establishing document**, never authored. Each +entry is now definition-then-claim, which is `term:floor`'s repaired shape. + +| Term | Promoted from | +|---|---| +| `term:seam` | `06` §"The seam-demand identity": *"splitting a task or an actor manufactures new governing decisions — the ones about how the parts coordinate — that did not exist when the thing was whole"* | +| `term:composite-actor` | `06` §"Composition at one act": *"from outside the declared boundary, the composite is **one actor**: one capability envelope, one verdict owed"* | +| `term:projection` | `08` §"The one line": *"the same compound — pay once, inherit thereafter — drawn on two axes"* | + +All three embeds re-projected. **All three unpinned; nothing fires.** `term:projection`'s sharper +definition also helps the deferred `projection` collision: a reader can now tell which object is +meant without the rename. + +### 2 · `mechanical` → `act-triggered`, on the delivery value only + +**The store keeps its word.** `term:mechanical` is untouched, and `term:compound`'s *"a mechanical +**check**"* is correctly retained — it is the store. + +`term:delivery`'s canonical text and aliases move: `mechanical delivery` out, `act-triggered +delivery` in. The weakest-edge clause is restated as *"a path from a decision to an act is +act-triggered only if **every** edge on it is"*, which preserves its meaning exactly rather than +carrying the old adjective into a new frame. + +**Reuse, not minting**, as ruled: `DDD-cost-09` already read *"where the check is **act-triggered**"*, +and `13-delivery.md` already read *"act-triggered in CI, actor-triggered locally"*. + +**Edited:** upstream `term:delivery`, `13-delivery.md`, `DDD-cost-09`, `DDD-delivery-01`, +`DDD-delivery-03`; downstream `DDD-delivery-04`, `DDD-track-01`. + +**Deliberately not edited, and this is a ruling not an omission:** + +- **`product-cli` (7 occurrences)** — the prompt makes that repository assessment-only. Its + occurrences ride with W4. +- **Session records, `meta/corpus-test-results-2026-08-14.md`, `meta/vocabulary-delivery-session-2026-08-15.md`, + and `meta/holding-note-ground-axes-rev18.md`** — these record what v5.5.0 filed, and v5.5.0 filed + `mechanical`. **Correct as history**, exactly as `judgment`'s retired-mode mentions were ruled at + GATE 2. The holding note additionally carries a recorded `sha256` in `DDD-dec-20`'s notes, so + editing it would break its filed identity. +- **`papers/paper-a/paper-a.md:1347`** — Appendix A is **generated from the pinned upstream**, which + is `v5.9.0`. It legitimately still reads `mechanical delivery` and will change when the pin + advances and the appendix regenerates. **Hand-editing it would forge agreement the pin does not + yet have** — which is the pin's whole purpose. + +### 3 · A finding, made while making the repair + +> **`core/13-delivery.md` used `mechanical` in exactly two places: its contract's `requires` list, +> and the delivery value. It never used the store at all.** + +The contract declared a dependency the body did not have, **and the collision masked it** — the body +linter sees the word and cannot see which object, so `W2 required term never appears in body` never +fired. The stale requirement is removed with the rename that revealed it. + +**This is the collision's cost made concrete.** G2 priced it as incoherent prose; it was also a false +edge in the dependency graph, invisible to the instrument that exists to catch false edges. + +### 4 · `denominations:` — the rule canon already practised in one place + +Files as an **additive terms-registry field** in `spec/claim-format-2-addendum.md`, with the rule: +**canon is the naming authority; a projection denominates for its audience; the denomination is +recorded on the term rather than invented downstream.** + +`term:verdict`'s inline parenthetical moves into the field. **That is also the cheapest available +repair of the `projection` collision** — the parenthetical is precisely where `projection` did +denomination duty inside a settled entry, while `term:projection` names an axis of the compound. + +**No validator check is proposed**, and the addendum says why: a denomination is right or wrong by +ruling, not by rule. The instrument is the field plus review, as with `canonical_home`. + +### 5 · i18n — two definitions in one entry + +`ordliste-dansk.md`'s gloss of `grund` gave canon's *"what a decision is determined against"* +**and** the apparatus's *"the readable substrate the actor inspects"* — the very definition the audit +found **miscited to `core/00`**. The second is removed, applying the file's own stated rule that the +English source wins where the two disagree. + +**The Danish text's other `grund` uses are untouched** and defer with the migration. + +### 6 · `README.md` — the transfer's front door + +Two self-contradictions repaired; **its ground senses untouched.** + +| | | +|---|---| +| **The judgment row was unpatched.** `README.md:82` read *"an actor reading ground"* with **no accountable-party clause** — the gloss `CANON-PATCH-REGISTER.md` records as corrected in `01-the-principle.md:75`, and which `term:judgment` settles with *"a judgment allocation naming no accountable party is not an allocation. It is Escaped with an executor attached."* **Restored.** It is the same gloss that made `DDD-frame-15`'s judgment mode collide with `term:judgment` — the collision G2 found already retired, still live on the public page | +| **`required` where canon says `declared`.** The closure paraphrase read *"within the **required** resource, latency, confidence, and assurance bounds"*; `term:closure` says **declared**, and *declared* is load-bearing throughout the framework. **Corrected** | + +**The README's nineteen `ground` occurrences carry five senses and not one of them moved.** That page +is the clearest single argument for the deferred migration, and it is left making it. + +--- + +## Gates, both repositories + +| | | +|---|---| +| upstream `validate-core-order.py` | **0 errors, 66 warnings** — *identical to the baseline before this gate*, verified by stash | +| upstream `validate-claims.py core/claims/` | **63 claims valid, 32 warnings** — the count `CLAUDE.md` documents for `v5.11.0` | +| upstream `validate-claims.py core/decisions/ --decisions` | **12 decisions valid** | +| downstream `validate-core-order.py` | **0 errors, 0 warnings**; 67 pins resolved, **0 content-drift**, 1 governed shadow | +| downstream `validate-claims.py core/claims/` | **26 claims valid, 6 warnings** — the documented downstream count | + +**No pin advanced. No tag cut. No merge.** diff --git a/meta/sessions/2026-08-27-ground-migration/inputs/README.md b/meta/sessions/2026-08-27-ground-migration/inputs/README.md new file mode 100644 index 0000000..339ff42 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/inputs/README.md @@ -0,0 +1,52 @@ +# Item 5 — the ground migration + +Upload this package to a Claude Code session with all three repositories available, and paste +`bootstrap.md` as the opening message. + +## Contents + +| File | Role | +|---|---| +| `prompt-ground-migration.md` | The session prompt. Six gates, seven standing rulings | +| `bootstrap.md` | Paste as the opening message | +| `ground-terminology-recommendation.md` | The original external proposal — source for the split | +| `ground-terminology-assessment.md` | Claude's assessment — where `basis` was excluded and the split ruled real | +| `q44-act-and-verdict-ontology.md` | Downstream demand item 1 — the term pair queued behind this ruling | +| `q45-routes-and-compositional-coverage.md` | Extends Q44; carried for context | +| `q46-encoding-price.md` | Carried for context; uses the vocabulary under review | +| `act-and-verdict-ontology-explainer.md` | Standalone explainer of the queued term pair | + +**Not in the package, because they are in the repositories:** the ground audit +(`meta/ground-audit-2026-08-24.md`), its successor items, and the classification data from that +session. The repo copies are authoritative. + +## What Emil rules + +| Gate | Ruling | +|---|---| +| G1 | The completed classification, and any sense boundary that moved against the sample | +| G2 | Both sweeps — assert-not-define, and name collisions with their costs | +| G3 | The §7 / Q27 reconciliation | +| G4 | The migration plan and its size — execute, or defer whole | +| G5 | Execution checkpoints | +| G6 | Close, PRs, version | + +Plus, at whichever gate they arise: whether `posterior` replaces the `mechanical` store, and whether +a `denominations:` field files for audience-scoped naming. + +## The three things queued behind this ruling + +Stated in the prompt so the session rules once with them visible: + +1. **The act-ontology / verdict-ontology term pair** — Q44, Q45, and the explainer. Both will use + whatever vocabulary this session settles. +2. **`posterior`** as a candidate for the `mechanical` store, if the collision confirms. A candidate, + not a ruling — two prior naming attempts died on registry checks. +3. **Audience denomination** — canon as naming authority, projections denominating for their + audience, with the denomination recorded on the term. Already canon's practice in one place + (`term:verdict`'s parenthetical), never named as a rule. The primer is the first projection that + needs it at scale. + +## After this + +The primer (item 6), then the transfer (item 7). Both were waiting on this. diff --git a/meta/sessions/2026-08-27-ground-migration/inputs/act-and-verdict-ontology-explainer.md b/meta/sessions/2026-08-27-ground-migration/inputs/act-and-verdict-ontology-explainer.md new file mode 100644 index 0000000..4293c4d --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/inputs/act-and-verdict-ontology-explainer.md @@ -0,0 +1,222 @@ +# Act ontology and verdict ontology + +**Status:** working explainer, drafted 2026-08-26. Not canon, not filed. Written to be handed to a +session or a reader with no memory of the conversation that produced it. +**Formal entry:** the claim-shaped version with falsifiers is `Q44`. This document explains; that one +files. +**Blocked by:** the ground migration — *ontology*, *carving* and *determinables* are all in the +vocabulary under review, so the names below may move even where the distinction survives. + +--- + +## 1. The distinction + +Every act's governing decisions draw their distinctions from somewhere. The claim is that they draw +from **two different places**, and the framework has had one word for both. + +**The act ontology** is the set of distinctions that govern **how the work is done**. Which tool, in +what sequence, by what technique. + +**The verdict ontology** is the set of distinctions that govern **what the output must be**. What the +thing is, what makes it good, what makes it acceptable. + +### The carpenter + +Asked to build a chair, a carpenter holds two bodies of knowledge that do not overlap. + +The first is about saws, planes, grain direction, which joint carries which load, what order to cut +in, how long glue takes. None of it is about chairs. It would be the same for a table. + +The second is about chairs: what height, what a seat has to do to a body over three hours, what +counts as beautiful in this room, who is going to sit in it. + +A brilliant carpenter with no idea what a chair is for builds something well-made and wrong. Someone +with excellent taste and no craft describes a chair nobody can build. + +**Both are ontologies in the same sense** — declared sets of distinctions at a grain. What differs is +what they govern and, crucially, who else holds them. + +### In software + +- **Act ontology:** how a service is structured, how errors propagate, when to use a queue, what a + handler may do. Shared with everyone doing this craft on this stack. +- **Verdict ontology:** what a valid referral is, when a claim may be paid, what makes a patient + record complete. Shared with the customer's sector. + +--- + +## 2. Why the distinction earns its place + +Three things follow that neither half explains alone. + +### 2.1 Method decisions can be unverifiable even when output is verifiable + +A chair passes every inspection at handover and fails in two years because a joint was cut across the +grain. + +The *output* predicate closed — you could check the chair. The *method* decision that determined its +life did not, and not because no criterion exists. The criterion exists; **its consequence arrives +after the verdict's horizon.** + +So *can this be checked?* is **two questions**, not one — can the outcome be assessed, and can the +method be assessed — and they have different answers in the same act. + +This explains, without appealing to culture or tradition: + +- why craft traditions inspect the *worker* (apprenticeship, licensure) even where the product is + inspectable; +- why code review exists at all — you cannot tell from a running program whether its error handling + was right, and the consequence arrives later than any verdict rendered at merge. + +### 2.2 The two ontologies are shared with different populations + +This is what makes one a standing asset and the other an engagement: + +| Layer | Shared with | Amortises over | +|---|---|---| +| How determination works at all | everyone | every arrangement | +| **Act ontology** | everyone practising that craft on that stack | every engagement the practice runs | +| **Verdict ontology** | everyone in the sector | every customer in that sector | +| **Tolerances and choices** | nobody | this customer, this engagement | + +Put in the framework's own terms: **within a sector the determinables are largely shared** — which +dimensions matter is set by the sector. What is customer-specific is the **grain and the choice**: +how tight the tolerance, and which alternative was taken. Same axes, different declarations. + +### 2.3 Sectors share because they share institutional ground + +Not a coincidence of similar businesses. A sector has a common regulator, common standards bodies, +common certification, common professional norms — and those write the distinctions **once, for +everyone in it.** + +Which predicts a gradient: the more institutionally governed a sector, the larger the shareable +fraction of its verdict ontology. Healthcare, aviation, finance high. Unregulated commercial software +low. + +--- + +## 3. What divergence between them shows + +Where the two ontologies do not line up, three distinct conditions arise: + +| Divergence | Condition | What it looks like | +|---|---|---| +| Act has a distinction the verdict lacks | **Invisible craft** | The customer has no word for it, so cannot want it. Quality goes unpriced; two suppliers who differ are bought as identical; a cost cut here is undetectable at handover | +| Verdict has a distinction the act lacks | **Unbuildable requirement** | A stated want with no technique that reaches it. The honest form of "we cannot do that" | +| Both carve, differently | **False agreement** | Same word, two distinctions. Agreement is reached, work proceeds, the verdict later disagrees | + +**The asymmetry is the diagnostic.** The first two produce *silence* — something unsaid, or something +refused. The third produces **confident agreement that is wrong**, and nothing in a normal engagement +checks it. Disputes over delivered work are disproportionately the third kind. + +### The inspectable diff + +The third condition used to be undetectable: both carvings private, the only evidence a dispute after +the fact. + +When both are **declared**, it becomes a diff — the same term, two definitions, side by side, before +the work starts. + +Two conditions on that, and they are what keep it real: +- both sides must declare, which a practice can supply for its own act ontology but must **elicit** + for the customer's verdict ontology; +- a matching term *name* is not a matching distinction. The diff finds candidates; adjudicating them + is judgement, with an owner. + +### "We're special" + +A customer saying this is reporting a **divergence from their sector's verdict ontology** — the only +part of their carving they can see, because nobody states what everyone shares. + +It is therefore the most useful thing they say, and the productive response is neither agreement nor +scepticism but: **which decision does this change?** + +- attaches to no decision → ceremonial; +- attaches to many → the engagement's scope. + +And the ceiling runs the other way: the divergences they *cannot* name are the dangerous ones, +because those are the assumptions deep enough to read as facts. Their list is where elicitation +starts, not where it finishes. + +--- + +## 4. Why this matters for delegation + +A model has a **strong ambient act ontology** for software — it read the corpus of how software is +built — and **no verdict ontology** for a specific customer's domain. + +So the supply pattern falls out: + +- **inherit** the ambient act ontology; +- **state only the divergences** from it — where this practice does something the field would not; +- **supply the verdict ontology explicitly**, because nothing ambient carries it. + +And one structural fact behind why the tooling works: **the act ontology is positional.** It attaches +to code structure — this method, this project, this type — which is what makes it deliverable +mechanically at the moment of the work. The verdict ontology is not positional and cannot be +delivered the same way. + +That may be the reason a language-server-shaped delivery mechanism works on the act side and no +equivalent exists on the verdict side. + +--- + +## 5. Assessing method, and why craft learns slowly + +Assessing an act *against the act ontology* — was this the right technique, in the right order — is +itself an act of judgement, with its determinations drawn from the act ontology. No new machinery is +needed; the same rules that stop the regress elsewhere apply. + +What is worth separating is **assessment from learning**. A method assessment yields a verdict about +*this act*. Learning is verdicts accumulating into what is encoded — and method verdicts update the +**act ontology itself** rather than any particular rule. + +By 2.1 that signal arrives late, sparsely, and is frequently attributed to the wrong cause. Which +gives a mechanism for why craft improves more slowly than outcome-driven work, without appealing to +temperament or tradition. + +--- + +## 6. The boundary case — architecture straddles + +Some decisions govern both. *Should this be a service* is a method decision and an output property at +once. + +**This is stated as a limit, not resolved.** A clean two-way distinction that quietly excludes its +hardest cases is exactly the defect that got a claim retired earlier this month, and the same +discipline applies here: the straddle files *with* the distinction, or the distinction does not file. + +--- + +## 7. What is not claimed + +Recorded so a later session does not inherit more than the argument supports. + +- **Not that the two ontologies partition all decisions cleanly.** §6 is a live boundary case. +- **Not that the act ontology is complete or completable in general.** The claim about completeness + is narrower: complete *for a given act*, because an act needs only the distinctions its governing + decisions turn on. +- **Not that a declared ontology is correct.** It is *stated* and therefore inspectable. It remains a + stand-in for the domain, and can be complied with perfectly while missing what was wanted. +- **Not a claim about which architecture, sector, or stack a practice should choose.** Those are + commercial decisions that use this material; they are not part of it. + +--- + +## 8. To carry into the next session + +**Open questions:** +1. Whether *ontology* is the right word at all, given the framework already has determinables at a + grain — and given the term is heavily loaded elsewhere. A naming ruling, best made against the + registry after the migration rather than against intuition. +2. Whether the act/verdict split is orthogonal to the existing timing and supply partitions, or + interacts with them. Untested. +3. Whether §3's three divergence conditions discriminate — the falsifier is whether competent + readers can classify real disputes into them at better than chance. + +**Where the formal version lives:** `Q44`, with falsifiers per part and routing per piece. `Q45` +extends it with the three routes to an open verdict and compositional coverage. + +**And the standing constraint:** nothing here files before the ground migration settles the +vocabulary. The material is not lost by waiting; it is written down, with its falsifiers, and the +migration will tell it which words to use. diff --git a/meta/sessions/2026-08-27-ground-migration/inputs/q44-act-and-verdict-ontology.md b/meta/sessions/2026-08-27-ground-migration/inputs/q44-act-and-verdict-ontology.md new file mode 100644 index 0000000..ee75b91 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/inputs/q44-act-and-verdict-ontology.md @@ -0,0 +1,212 @@ +# Holding note entry — Q44: act ontology and verdict ontology + +**Status:** holding. Claude-drafted from the 2026-08-26 working conversation (Emil's material: the +act-level / verdict-level decision distinction, the carpenter, and sector generalisation). Extends +the 2026-08-26 addendum. Nothing filed. +**Blocked by:** the ground migration — *ontology*, *carving* and *determinables* are all in the +vocabulary under review. Nothing here jumps the queue. + +--- + +## Q44 — Two ontologies, and what each amortises over + +### (a) The distinction + +**Proposed.** The governing decisions of an act draw their determinables from **two different +ontologies**, and canon currently has one word for both: + +- **The act ontology** — the distinctions that govern *how the work is done*. Which tool, in what + sequence, by what technique. The carpenter's knowledge of saws, grain, joints and order. +- **The verdict ontology** — the distinctions that govern *what the output must be*. What a chair + is, what makes one usable, what makes one good. The customer's knowledge, or the sector's. + +Both are ontologies in the same sense — declared sets of determinables at a grain. What differs is +what each governs and, as (c) shows, what population each is shared with. + +**Not identical to what/how.** That split is about *work*; this is about *where the distinctions come +from*. Related, and the boundary case in (e) is where they come apart. + +**Falsifier:** a governing decision whose determinables cannot be assigned to either ontology, or +whose assignment is arbitrary across competent readers. If assignment has poor coding reliability, +the distinction is not carving a joint. + +### (b) The verifiability asymmetry — a refinement of the floor + +**Proposed, and this is the entry's sharpest content.** + +Whether the *outcome* predicate closes and whether the *method* predicate closes are **separate +questions**, and canon has been treating them as one. + +A chair can pass every inspection at handover and fail in two years because a joint was cut across +the grain. The output was verifiable; the method decision that determined its life was not — not +because no criterion exists, but because **its consequences fall outside the verdict's horizon.** + +**Consequences:** + +- The check-the-worker branch is reachable from *either* question. Craft traditions inspect the + worker (apprenticeship, licensure) even where the product is inspectable, and this says why. +- It explains code review's existence without appealing to culture: you cannot tell from a running + program whether its error handling was right, and the consequence arrives later than any verdict + you render at merge. +- It gives the consequence-horizon material a second site: previously about assurance mechanisms + outrunning their position, now also about *which ontology's decisions* can be assessed at all + within a given horizon. + +**Falsifier:** a domain where method decisions are reliably assessable from the output at the +verdict's own horizon — where nothing about how the work was done leaves a consequence the output +does not reveal in time. + +### (b2) Assessing method, and why craft learns slowly + +**Recorded, not separately claimed.** Assessing an act *against the act ontology* — was this the +right technique, in the right order — is an assessment act (Q39) whose determinables come from the +act ontology. The regress cuts already apply: depth-one self-supplied ground, constructive closure +where the criterion computes, accountable grounding where it does not. No new machinery. + +What is worth naming is the difference from learning. Method-assessment yields a verdict about *this +act*; learning is the return channel, verdicts accumulating into encoding. Method verdicts update +the **act ontology itself** — the return channel pointed at the carving rather than at the rules — +and by (b) that signal arrives late, sparsely, and frequently attributed to the wrong cause. Which is +a mechanism for why craft improves more slowly than outcome-driven work, without appealing to +tradition or temperament. + +### (c) What each ontology amortises over + +**Proposed, downstream (economics).** The two ontologies are shared with different populations, and +that is what makes one a standing asset and the other an engagement: + +| Layer | Shared with | Amortises over | +|---|---|---| +| Determination itself — how governing works at all | everyone | every arrangement | +| **Act ontology**, craft-scoped | everyone practising that craft on that stack | every engagement the practice runs | +| **Verdict ontology**, sector-scoped | everyone in the sector | every customer in that sector | +| **Tolerances and resolutions** | nobody | this customer, this engagement | + +**The sharp form, in Johnson's terms:** within a sector the *determinables* are largely shared — +which dimensions matter is set by the sector. What is customer-specific is the **grain and the +determinates**: how tight the tolerance, and which alternative was chosen. Same axes, different +declarations. + +**Consequence:** sector specialisation is not a relationship strategy. It is where the verdict +ontology amortises. A practice spanning unrelated sectors has as many verdict ontologies as sectors +and no sharing across them, exactly as a practice spanning unrelated stacks has as many act +ontologies. + +### (d) Why sectors share — the mechanism + +**Proposed, and it is testable.** A sector's verdict ontology is shareable to the extent the sector +has **shared institutional ground**: a common regulator, common standards, common professional +bodies, common certification. Those write the distinctions once, for everyone in the sector — which +is why the sharing exists at all rather than being a coincidence of similar businesses. + +**Prediction:** the more institutionally governed a sector, the larger the shareable fraction of its +verdict ontology. Healthcare, aviation, finance high; unregulated commercial software low. + +**Falsifier:** sectors with strong shared regulation showing no more verdict-ontology sharing across +firms than unregulated ones, at matched firm size and market structure. + +**Interaction:** this makes the sector verdict ontology largely a projection of institutional ground, +which routes it to Q27's trust material — a regulator is a trusted source, and its distinctions +arrive as standing supply the sector inherits rather than authors. + +### (e) The boundary case — architecture straddles + +**Recorded as a limit, not resolved.** Some decisions govern both: *should this be a service* is a +method decision and an output property at once. This is the same residue the delegation material +flagged as not vanishing — and it predicts where the ontologies cannot be cleanly separated, which +is useful to know in advance rather than to discover mid-session. + +**Do not file (a) without (e).** A clean two-way distinction that quietly excludes its hardest cases +is the defect `DDD-frame-15` was retired for. + +### (f) What the divergence between the two ontologies shows + +**Proposed.** Where the act ontology and the verdict ontology do not align, three distinct +conditions arise, with three distinct symptoms: + +| Divergence | Condition | What it looks like | +|---|---|---| +| Act has a distinction the verdict lacks | **Invisible craft** | The customer has no word for it and cannot want it. Quality goes unpriced; two suppliers who differ are bought as though identical; a cost cut here is undetectable at handover | +| Verdict has a distinction the act lacks | **Unbuildable requirement** | A stated want with no technique that reaches it. The honest form of "we cannot do that" — not incapacity, but a distinction with no method attached | +| Both carve, but differently | **False agreement** | Both sides use the same word believing it names the same distinction. Agreement is reached, work proceeds, and the verdict later disagrees | + +**The diagnostic value is in the asymmetry of symptoms.** The first two produce *silence* — something +unsaid, or something refused. The third produces **confident agreement that is wrong**, and nothing +in a normal engagement checks it. Disputes over delivered work are disproportionately the third kind. + +**Falsifier:** competent readers, given real disputes over delivered work, classifying them into the +three conditions at no better than chance. If the types do not discriminate, they are not carving a +joint. + +### (g) The conflicting term as an inspectable diff + +**Proposed, and this is the instrument (f) implies.** + +The third condition — one word, two carvings — was previously undetectable, because both carvings +were private and the only evidence was a dispute after the fact. When both are **declared**, the +conflict becomes a diff: the same term, two definitions, side by side, before the work starts. + +This is the versioned-drift capability (Q40(d)) applied across parties rather than across time. The +same property that lets an arrangement compare its carving to last year's lets it compare its +carving to the customer's — and a term appearing in both declarations with different content is +mechanically findable. + +**Two conditions on it, and they are what make it real rather than aspirational.** Both sides must +declare, which the practice can supply for its own act ontology but must *elicit* for the customer's +verdict ontology. And a matching term name is not a matching distinction: the diff finds candidates, +and adjudicating them is judgement — an assessment act with its own owner. + +**Elicitation consequence, recorded here because it follows directly.** A customer saying *we are +special* is reporting a divergence from the sector's verdict ontology — the only part of their +carving they can see, because nobody states what everyone shares. It is therefore the most useful +thing they say, and the productive response is not agreement or scepticism but: **which decision does +this change?** A claimed divergence attaching to no decision is ceremonial; one attaching to many is +the engagement's scope. The ceiling from Q42 applies in reverse — the divergences they cannot name +are the dangerous ones, so their list is where elicitation starts, not where it finishes. + +**Falsifier for the instrument:** declared-carving diffs over the same engagement failing to predict +where disputes later arise, against a baseline of experienced judgement without the diff. + + +--- + +## Interaction with delegation + +The distinction explains the current position precisely, and this is worth carrying into the +G-track: + +- An LLM has a **strong ambient act ontology** for software — it read the corpus of how software is + built — and **no verdict ontology** for a specific customer's domain. +- So the supply pattern is: inherit the act ontology, mechanise only the arrangement's *divergences* + from it (Q42), and supply the verdict ontology explicitly. +- And the act ontology is **positional** — it attaches to code structure — which is what makes it + mechanisable through tooling at act time. The verdict ontology is not positional and cannot be + delivered the same way. + +That last point may be the reason the LSP pattern works and no equivalent exists on the verdict +side. Flagged; not claimed. + +--- + +## Not canon — recorded so it does not leak + +**Who owns a sector verdict ontology** is a commercial question, not a claim about determination, and +it is a live one: canon goes to a foundation, the act ontology is the practice's standing asset, and +the sector layer sits between them — most valuable, most customer-adjacent, and currently +unallocated. Section D of the 2026-08-26 addendum applies: this projects from canon and is not canon. + +--- + +## Routing + +| Piece | Destination | +|---|---| +| (a) the distinction | Q-wave, after the migration; needs (e) filed with it | +| (b) the verifiability asymmetry | Upstream — it refines the floor and the consequence horizon | +| (c) amortisation layers | Downstream economics, beside the cost material | +| (d) sector mechanism | Downstream; interacts with Q27, and should file after it | +| (e) the straddle | With (a), as its limit | +| (f) the three divergences | With (a); it is what the distinction is *for* | +| (g) the term diff | Instrument — G-track PRD and the elicitation practice; the claim half files with Q40(d) | +| The delegation pattern | G-track PRD, as design rationale | +| Ownership of the sector layer | Business record and the method paper. Not canon | diff --git a/meta/sessions/2026-08-27-ground-migration/inputs/q45-routes-and-compositional-coverage.md b/meta/sessions/2026-08-27-ground-migration/inputs/q45-routes-and-compositional-coverage.md new file mode 100644 index 0000000..27b4831 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/inputs/q45-routes-and-compositional-coverage.md @@ -0,0 +1,114 @@ +# Holding note entry — Q45: closing an open verdict, and compositional coverage + +**Status:** holding. Claude-drafted from the 2026-08-26 working conversation (Emil's material: the +proxy/method-supply disjunction, and the product company closing the loop through a closed +architecture). Extends the 2026-08-26 addendum and Q44. Nothing filed. +**Blocked by:** the ground migration, as with Q40–Q44. + +--- + +## Q45 — Three routes, and what makes the second one scale + +### (a) The trichotomy + +**Proposed.** An open verdict — one whose acceptance relation cannot be stated — has exactly three +dispositions, and canon currently names only the third clearly: + +| Route | What it does | Supply | Position | +|---|---|---|---| +| **1 — Write a proxy** | Keeps the determination at the verdict; substitutes a checkable criterion for the uncheckable one | assurance by check | after the act | +| **2 — Supply the act ontology** | Relocates the determination out of the verdict into the method; the open question is never posed | encoded | before the act | +| **3 — Carry it by the actor** | Leaves it open and trusts a qualified resolver | occasioned, carrier-borne | at the act | + +Route 3 is the status quo and the only one that never amortises. Routes 1 and 2 are both conversions +of occasioned assurance to standing, at different loci — which makes this the same shape as +*build the check or train the worker*, now applied to the verdict rather than to the assurance. + +**Falsifier:** an arrangement disposing of an open verdict by a mechanism that is none of the three +— neither a substituted criterion, nor a specified method, nor a trusted resolver. + +### (b) They fail differently, and the second failure is less discussed + +**Route 1 fails by divergence.** Both crescents of the proxy result: good work the check rejects, +and work that passes without being what was wanted. Optimising against the proxy widens the second. + +**Route 2 fails by foreclosure.** You get exactly what the method produces, *including where the +method is wrong for this instance* — the carpenter cutting the specified joint on wood that needed a +different one. Nothing rejects it; the specification was followed. + +**The trade, stated:** route 1 exchanges fidelity for checkability. Route 2 exchanges adaptivity for +determinacy. Neither is free, and an arrangement that has taken route 2 everywhere has bought +predictability by removing its own ability to notice a novel case. + +### (c) Route 2's precondition + +**Proposed.** Route 2 requires that the act ontology **actually determine** the verdict in that +domain — same method, same outcome. Where it does, specification works and has for centuries: +surgical checklists, GMP, building codes, traditional craft. + +Where the same method yields varying outcomes — diagnosis, negotiation, design — no amount of +specification closes the verdict, and attempting it produces confident wrong work rather than +refusal. + +**Falsifier:** a domain with demonstrably variable outcomes under fixed method where full method +specification nonetheless closes the verdict. + +### (d) Compositional coverage — the property that makes route 2 scale + +**Proposed, and this is the entry's centre.** + +Route 2 appears expensive: specifying the method for a large verdict space looks like specifying +everything. It is not, when the act ontology has **compositional coverage** — a *small closed* set +of primitives whose *compositions* span a large verdict space. + +The test is what happens when a new requirement arrives: + +- **Without compositional coverage:** a new requirement is a new architectural decision. The act + ontology grows with the verdict space, and route 2 costs what it appeared to cost. +- **With compositional coverage:** a new requirement is a new *composition* of existing primitives. + The act ontology stays closed while the verdict space it reaches keeps expanding. + +**This is what makes an act ontology a standing asset rather than a growing liability**, and it is +the property being selected for when an arrangement commits to one architecture across engagements. + +**Falsifier:** an act ontology committed to across many engagements whose size grows in proportion to +the verdict space it serves — compositions failing to absorb new requirements. + +**Two limits, both necessary.** Compositional coverage is **domain-relative**: a primitive set spans +some domains superbly and others badly, so the claim is about the fit between primitives and domain, +never about primitives being good in themselves. And the closed set still forecloses per (b) — where +composition reaches a requirement awkwardly, the requirement is met *badly* rather than refused, +which is the failure mode that looks like success. + +### (e) The refusal asymmetry — why route 1 closes for a product company + +**Proposed, downstream.** The proxy result assumes the target is fixed and external. A party that +owns **both** the what and the how does not face a fixed target: it can decline the requirements its +architecture expresses badly. The proxy then stops standing in for something outside it and +approaches a definition — which is why route 1 can close for a product company and cannot for a +practice taking the *what* as given. + +**Consequence for a consultancy:** the loop closes only where the closed set composes to reach what +was asked. Where it does not, the choice is to break the architecture or renegotiate the +requirement, and **that boundary is where amortisation stops.** + +**Recorded interaction:** a sector-scoped verdict ontology (Q44(c)) buys partial refusal — *that is +not how this sector does it* is a defensible decline in a way *our architecture cannot* is not. So +sector specialisation and compositional coverage are complements: one supplies partial refusal, the +other supplies reach. + +--- + +## Routing + +| Piece | Destination | +|---|---| +| (a) the trichotomy | Q-wave, upstream — it enumerates dispositions of an open verdict | +| (b) the two failure modes | With (a); (b)'s foreclosure half is new and belongs upstream | +| (c) route 2's precondition | With (a) | +| (d) compositional coverage | Downstream economics — it is an amortisation property | +| (e) the refusal asymmetry | Downstream; and the consultancy half is business record, not canon | + +**Not canon, per the 08-26 addendum's section D:** which architecture a practice commits to, and +whether to own the *what*. Both are commercial decisions that *use* (d) and (e); neither is a claim +about determination. diff --git a/meta/sessions/2026-08-27-ground-migration/inputs/q46-encoding-price.md b/meta/sessions/2026-08-27-ground-migration/inputs/q46-encoding-price.md new file mode 100644 index 0000000..e8b40a8 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/inputs/q46-encoding-price.md @@ -0,0 +1,127 @@ +# Holding note entry — Q46: determination, execution, and the price of encoding + +**Status:** holding. Claude-drafted from the 2026-08-26 working conversation (Emil's observation: the +closer a decision sits to an act, the clearer its verdict). Extends the 2026-08-26 addendum, Q44 and +Q45. Nothing filed. +**Blocked by:** the ground migration, as with Q40–Q45. + +--- + +## Q46 — What encoding costs + +### (a) The distinction that already exists, restated so it is not re-litigated + +Canon settles act versus decision, and the settlement is **not** about latency: an act is the unit of +account, individuated by one verdict at a declared boundary; decisions are what the act is composed +of. + +**Recorded because a natural-seeming alternative fails.** Defining a decision as *a determination +whose verdict is deferred* would make it a synonym for a claim — canon already holds that a claim is +an act with a deferred verdict — and would cost the individuation that makes acts countable. The +distinction below is therefore **a dimension over decisions**, not a redefinition of either term. + +### (b) The mechanism: encoding separates determination from execution + +**Proposed.** + +- **Judgment fuses them.** An actor resolving at the act determines and executes in one motion. +- **Encoding separates them.** A filed rule determines once and executes later, at many acts. + +That separation is the whole of what encoding is, seen from the time axis rather than from the +store partition — and it is what generates everything below. + +**Falsifier:** an encoded determination whose execution cannot be separated from its determination — +a rule that can only be applied at the moment it is decided. + +### (c) The observable: verdict distance + +**Proposed.** The further a determination sits from the act it governs, the more its verdict is +**delayed, diffuse, and misattributed**: + +- **Delayed** — it can only be assessed through acts that have not happened yet. +- **Diffuse** — its consequence is spread across every act it governs, rather than landing on one. +- **Misattributed** — the acts have their own resolvers and their own failures, and an encoded + decision's contribution is the hardest term to isolate. + +This is what Emil's observation names: a decision made at the act has a verdict you can see; a +decision made at architecture time has one you may never cleanly attribute. + +**Note this is not a new axis.** It is the timing already in the store partition, read for its +evidential consequence rather than for its supply consequence. + +**Falsifier:** encoded determinations whose verdicts are recovered as promptly and as cleanly as +those resolved at the act, at matched stake and matched act volume. + +### (d) The price: ground for reuse + +**Proposed, and this is the entry's centre.** + +Canon prices encoding as **amortisation** — determine once, inherit at every act. It does not state +what is paid for that. + +**Deciding earlier means deciding on less ground.** A determination made at architecture time is made +against *predicted* ground; the same determination made at the act has the actual material in front +of it. So: + +> **Encoding trades ground for reuse.** + +The trade is favourable where the ground is stable — the prediction holds across the acts governed — +and unfavourable where it moves, which is the same stability question the revalidation material +already asks about stored checks, now asked about stored *decisions*. + +**This makes the encode/judge boundary an economic question with two terms rather than one.** The +benefit is act volume; the cost is ground fidelity at the moment of determination. An arrangement +encoding everything is not maximally governed — it is maximally committed to predictions. + +**Falsifier:** encoded determinations over unstable ground performing as well as act-time resolution +at matched volume — the trade having no cost. + +### (e) Why encoded decisions drift undetected + +**Proposed, and it supplies a mechanism to something previously observed.** + +(c) and (d) compose. A decision made on predicted ground can go stale when the ground moves — and by +(c), its verdict signal is delayed, diffuse and misattributed, so **nothing reports the staleness.** +The rule keeps being followed; the acts keep producing outcomes; the drift is invisible in exactly +the register that would show it. + +This is the ontology-drift observation with a mechanism instead of a description: rules are not +abandoned because practitioners are undisciplined, and not only because the carving moved — but +because the feedback that would have caught the movement is structurally the weakest feedback in the +system. + +**Falsifier:** arrangements where encoded-decision staleness is detected at rates comparable to +act-time error, without a dedicated instrument. + +--- + +## Interactions + +- **With the maturation material.** The descent is priced as pure gain: encode, and per-act cost + falls. (d) says the descent has a cost that grows with ground instability, which suggests the + curve has a floor set by prediction quality and not only by what is encodable. +- **With the predicted-ground material.** That note reached the same trade from the other side — + determination on ground that does not yet exist. (d) is its standing-supply case: the encoded + decision is a prediction, and everything true of predicted ground applies to it. +- **With Q40(a).** Ontology drift said *the carving moved*. (e) says *and the movement is + undetectable*, which is why the recorded-ignore instrument is the right remedy: it manufactures the + signal the structure suppresses. +- **With Q44(b).** Method decisions' consequences fall outside the verdict horizon; (c) says encoded + decisions' consequences are diffuse across acts. Both are verdict-distance problems and may be one + claim seen from two sides — worth testing whether the falsifiers are the same test. + +--- + +## Routing + +| Piece | Destination | +|---|---| +| (a) the restatement | Notes only — it exists to stop a re-litigation, not to file | +| (b) determination/execution separation | Upstream; it is a synchronic property of encoding | +| (c) verdict distance | Upstream, with (b) | +| (d) ground for reuse | **Upstream, and the highest-value piece here** — it adds a term to a claim canon already carries | +| (e) undetected drift | Downstream; it is diachronic and needs the ledger | + +**One filing caution.** (d) modifies how canon prices encoding. It should be drafted as an *addition* +to the amortisation account rather than a correction of it — the benefit claim is not wrong, it is +one-sided. Filing it as a correction would misdescribe what moved. diff --git a/meta/sessions/2026-08-27-ground-migration/manifest.md b/meta/sessions/2026-08-27-ground-migration/manifest.md new file mode 100644 index 0000000..c45beae --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/manifest.md @@ -0,0 +1,142 @@ +# Manifest — item 5, the ground migration + +**Session type:** interactive canon curation with an execution phase. Six gates, Emil ruling at each. +**Merged nothing.** Branch `claude/ground-migration-item-5-jpa9tc` in all three repositories; +`product-cli` carries **no commit** and no working-tree change. + +**Read at:** `actor-indexed-determination` `ce2c477` (= annotated tag **`v5.11.0`**, verified — head +and tag are the same commit) · `decision-driven-design` `e81a454` · `product-cli` `d0f4297`. + +--- + +## The session's principal finding + +> **The migration is planned in full and deferred whole. That is the finding, not the failure.** + +The plan is complete, the classification is execution-grade, every pin and firing is named, and the +design rulings the audit said were the point are **answered**. **A successor starts at execution.** + +What ships instead is the set of repairs that surfaced while planning it and that stand on their own +evidence — proposed as **`v5.12.0`**. **No occurrence of `ground` changed sense or wording anywhere +in either repository.** + +--- + +## What the session found + +| | | +|---|---| +| **The definition layer is 17 settled terms and one draft, not fifteen** | The audit named two that do not use the word and omitted six that do. `term:tolerance` (S1) and `term:arrangement` (S2) are both in `00-primitives.md` — **the defect is on one page, not spread across the registry** | +| **Two further objects under the word**, both in `product-cli` | the RDF/logic **`ground term`** (11) and a **CSS surface colour** (6). Neither is any of S1–S5 | +| **`ground channel` occurs 10 times, not zero** | one inside `term:arrangement`'s settled canonical text. A migration surface the plan was told it did not have | +| **The defect is translated** | the Danish glossary gave two definitions in one entry, the second being the one the audit found miscited to `core/00` | +| **The audit counted itself a third time** | the corpus at its own read commits is **2,843** | +| **`judgment`'s collision was already closed** | by `DDD-frame-17`, the node it was recorded against; `DDD-dec-30` says so in canon's own words. Cost zero | +| **`projection` and `verdict` are two new live collisions** | both unpinned; `denominations:` repaired `projection`'s half as a side effect | +| **The classification instrument had three failure mechanisms** | clause-crossing windows, rule ordering, and uncorrelated size-and-quality | +| **S1 is canon's largest sense** | +16% over the audit, **182 S1 : 154 S3** upstream. The authority-over-volume ruling was made on the definition layer and **the corrected corpus agrees** | +| **Canon's S4 is mechanically zero** | agreeing with GATE 3's independent reading of the reconciliation. **Two methods converging** is what makes the S4 dissolution safe rather than convenient | +| **`13-delivery.md` declared a dependency it never had** | and the collision masked it: the body linter sees the word and cannot see which object. **Discovered, not planned** | + +--- + +## The twenty-three carried items, closed + +| | Item | Closed how | +|---|---|---| +| C1 | `apparatus/` re-booked | W2's tail. In the seed | +| C2 | why S3's estimate was low | Recorded; superseded by C19 | +| C3 | `ground channel` ×10 | In W2 via `term:arrangement`. Erratum E-2 | +| C4 | the i18n gloss | **Landed** — the second definition removed | +| C5 | `README.md` | **Landed** — judgment row and closure paraphrase | +| C6 | SR-4's warrant | Recorded; dissolves with S4 | +| C7 | the head delta | **Discharged** — 106 of 133 immutable or audit output | +| C8 | sweep 1's grades | **Grade A landed**; B and C to freight with grading intact | +| C9 | `mechanical` → `act-triggered` | **Landed.** `DDD-dec-30` the warrant; the discipline **existed before the violation** | +| C10 | `projection`, `verdict` | To freight; `projection`'s half repaired by `denominations:` **as a side effect** | +| C11 | `judgment` closed | No work | +| C12 | five drafting-warning exceptions | In the seed | +| C13 | `floor` in `product-cli` | W4's assessment | +| C14 | Q-1, Q-2 | Q-1 **filed** (the erratum pointer); Q-2 **landed** (`denominations:`) | +| C15 | the §7/Q27 reconciliation | **Settled.** Q27 cleared to file | +| C16 | S4 dissolves | Four senses plus attributes | +| C17 | W0-bis blocking | **Discharged** | +| C18 | the classification whole; C17's estimate corrected | 29% reported, **71.7% measured** | +| C19 | S3 moved back | +11%, not +26%. SR-2 untouched | +| C20 | S1 the largest movement | Canon S1-led. **Strengthens SR-1** | +| C21 | canon's S4 zero | Two methods converging | +| C22 | identifiers are **142**, not 116 | Rule ordering, both directions enumerated | +| C23 | the method rule | In the seed, all three mechanisms named | + +--- + +## Deliverables + +**Upstream** (`actor-indexed-determination`, 2 commits): `core/graph/terms.yaml` — three Grade A +definitions promoted, `term:delivery`'s value renamed, `term:verdict`'s `denominations:` field; +`core/06`, `core/08`, `core/09`, `core/13` re-projected; `DDD-cost-09`, `DDD-delivery-01`, +`DDD-delivery-03`; `spec/claim-format-2-addendum.md`; `README.md`; `i18n/ordliste-dansk.md`; +`releases/v5.12.0.yaml`. + +**Downstream** (`decision-driven-design`, 7 commits): the session record and its six gate reports; +`w0-classify.py` with `rulings/r001…r021.py` and `rulings-bis/b001…b009.py`; +`w0-full-v2.json`; `meta/ground-audit-2026-08-24-erratum.md` and the audit's forward reference; +`meta/migration-plan-ground.md`, the successor's seed; `DDD-delivery-04`; `DDD-track-01`. + +**`product-cli`:** nothing. Read-only throughout, as the prompt requires. + +--- + +## Instruments + +| | | +|---|---| +| `w0-classify.py` | merges `rulings/` and `rulings-bis/`, asserts the two sets do not overlap and that no row is unruled. **Residual zero by construction** | +| `rulings/r001…r021.py` | W0 — 1,022 rows, one ruling and its reason each | +| `rulings-bis/b001…b009.py` | W0-bis — 427 prose-context rows plus 29 anchored-class ordering corrections | +| `w0-extract-head.py` | the head delta, with **this session excluded from its own count** | +| `sweep2.py` | the G2 registry sweep | + +--- + +## Gates + +| | | +|---|---| +| upstream `validate-core-order.py` | **0 errors, 66 warnings** — identical to the pre-session baseline, verified by stash | +| upstream `validate-claims.py` | **63 claims valid, 32 warnings** · **12 decisions valid** | +| upstream `validate-releases.py` | **8 descriptors valid, versions unique, basis resolves** | +| downstream `validate-core-order.py` | **0 errors, 0 warnings**; 67 pins resolved, **0 content-drift**, 1 governed shadow | +| downstream `validate-claims.py` | **26 claims valid, 6 warnings** · **21 decisions valid** | + +**Basis-impact sweep: no basis edge breaks.** No id moved, so every citing node still resolves; +`releases/v5.5.0.yaml`'s historical basis list is unaffected. Nothing quotes the moved denomination +verbatim. + +**Predicted before operating, verified after: zero W5, zero W6, zero W7.** The downstream pin resolves +against `ref: v5.9.0`; this session neither advances it nor cuts a tag. **When it is next advanced +past these commits, exactly three fire — `term:delivery`, `DDD-cost-09`, `DDD-delivery-01`.** + +--- + +## Three sentences worth keeping + +> **Hand-editing Appendix A would forge agreement the pin does not yet have, which is the pin's +> entire purpose.** + +> A classification rule whose match window can cross a clause boundary is not an anchored rule, and +> the two classes cannot share an acceptance standard. + +> Repair what contradicts itself; never resolve what is merely unqualified. + +--- + +## Three naming attempts, three registry checks + +**`fixed`** died against `term:encoded`. **`resolved`** died against `term:determination`. +**`posterior`** died against the live Bayesian register — `prior` is used in that sense in four +places, one of them ratified canon (`DDD-measure-05`), and `term:calibration-ledger` is the +**estimator** in that same prior→update pipeline. + +**Three is a pattern, and the pattern is the argument for the check.** The one name that survived, +`act-triggered`, survived because it was **not minted**: canon was already using it. diff --git a/meta/sessions/2026-08-27-ground-migration/prompt.md b/meta/sessions/2026-08-27-ground-migration/prompt.md new file mode 100644 index 0000000..274cb29 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/prompt.md @@ -0,0 +1,169 @@ +# Session prompt — item 5: the ground migration + +Repositories: `actor-indexed-determination` (upstream, head — canon at **v5.11.0**; verify) and +`decision-driven-design` (downstream, head). `product-cli` is in scope for W4 only, and W4 is ruled +separately. Fetch all three. +Session type: **interactive canon curation, with an execution phase.** Hold at every gate. +Supersession, never rewriting. British spelling; one idea per sentence. +**First act, before Gate 1:** commit this prompt and bootstrap to +`meta/sessions/2026-08-27-ground-migration/` in `decision-driven-design`, per DDD-dec-20. + +## What this session is + +The migration the audit priced. **The audit is done and its rulings are made** — this session +executes them, and stops where they run out. + +**The finding that makes this necessary**, and it should be stated in the session's own record: the +remedy is definitional, not a prose repair. Fifteen settled terms carry four senses of one word +between them, including the term defining what an actor is. Prose was never drifting from the +registry; it was faithfully following a definition layer that was never single-sensed. + +## Standing rulings inherited — do not re-litigate + +**SR-1 — S1 keeps the word.** *Ground* means conditions in the case whose variation moves the outcome +past tolerance — the world-facing sense. Ruled on canon's authority, against the counts: it is the +only sense with an admission test, three further settled terms repeat the same *against* +construction, `DDD-ground-05` makes it constitutively prior, and `term:determinable` gives it formal +structure. + +**SR-2 — S3 is not a rival primitive.** Canon's S3 occurrences are verbs applied to the S1 object — +reading, held, present, delivered. One object in three conditions, not three objects. This is why the +migration is re-expression rather than re-conception, and why the delivery vocabulary fits instead of +needing a parallel invention. + +**SR-3 — reuse the delivery vocabulary** (`term:delivery`, `term:undelivered`, +`term:presumed-discharge`, v5.5.0). Mint nothing beside it. `basis` remains excluded as a candidate +name for anything. + +**SR-4 — provenance is independent attributes, not an enumeration.** `DDD-dec-26`'s ineligibility +ruling was on the *value*, not the axis; the enumeration's values live in three different senses, so +it was three attributes flattened. + +**SR-5 — S5 leaves as *deployment distribution*.** Zero identifiers, zero pins; 29 of 74 sit in +merged papers, so it **rides with a paper revision** rather than replacing one. + +**SR-6 — node identifiers do not move.** `DDD-ground-01…05` keep their names permanently. The +migration renames the **concept**, never the identifiers. + +**SR-7 — counts are counted.** No estimates enter any report. + +## The gates + +### G1 — W0, the classification grind + +**Blocks everything.** The audit classified 64% by rule and sampled the rest; that was +decision-grade, and execution needs the full set. Complete the classification of the remaining 1,022 +occurrences. + +**This is mechanical work with a ruling at its edges.** Report: the full classification, every +occurrence that would not sit in exactly one sense, and any sense boundary the full pass moved +against the sampled estimate. **A shifted boundary is a finding, not an error** — report it and hold. + +**GATE 1 — hold on the completed classification and any moved boundary.** + +### G2 — the collision sweep + +**Widened from the booked assert-not-define sweep, because it is the same registry read.** + +Two sweeps, one pass over all 62 terms carrying canonical text: + +1. **Assert-not-define** — canonical text that asserts a property of its subject without defining + the subject. `term:floor` was the found instance; `term:path-degeneracy` is the next candidate. +2. **Name collision** — any term whose *name* is used in canon for a second object. **Two known + instances, both to be confirmed and priced:** + - `mechanical` — a store (a criterion applied after the act) and a delivery type (arrives by + construction, v5.5.0). Unrelated objects; "encoded and mechanically delivered" currently reads + as incoherent. + - `judgment` — `term:judgment` carries an accountability clause that `DDD-frame-17`'s judgment + *mode* cannot carry. Recorded at Phase 1a as two objects under one word. + +**Report with costs; repair nothing in this gate.** Each promotion or rename is a supersession with a +pin cost, and this session's budget is the ground migration. + +**GATE 2 — hold on both sweeps.** + +### G3 — the §7 / Q27 reconciliation + +**Must settle here, or Q27 files onto a category about to dissolve.** + +The terminology proposal's §7 relocates institutional rules out of ground; Q27 (unfiled) gives +institutional ground a mechanism *as* ground. Both texts are quoted in the audit. + +**The candidate reconciliation, to be tested and not assumed:** the rule's normative force sits in +the acceptance relation; the arrangement's *representation* of the rule is a reading; the trust +decision governs whether that representation may be relied on without independent verification. +Three objects, currently one. + +**Two facts from the audit that make this cheaper than it looks:** `institutional ground` occurs 13 +times, **zero of them in canon** — so nothing in canon needs unpicking either way. And SR-4's answer +partially dissolves it: the record carries an institutional provenance attribute. + +**GATE 3 — hold on the reconciliation.** + +### G4 — the migration plan + +Not the cut. The plan, with everything from G1–G3 folded in: what moves, what re-words, every embed +re-projection, every pin that fires, the order of operations, and what defers. + +**The C-1 precedent governs: if the plan exceeds the session's remaining budget, Emil rules +defer-whole. No partial migration.** A half-renamed concept is worse than an un-renamed one. + +**GATE 4 — hold on the plan and its size.** + +### G5 — execution + +On Emil's approval of the plan. Supersession throughout; predicted W6/W7 results stated before every +pin operation. + +**GATE 5 — hold at the midpoint if the plan has one; otherwise at completion.** + +### G6 — close + +Basis-impact sweep; instruments; validators all repos; reference closure; branch per repo; PRs +upstream-first; manifest; version proposal with reasoning. + +**GATE 6 — hold.** + +## Ruled separately — W4, the serialised field + +`product-cli` carries `ground:` as a **YAML field name in the serialised ledger** — 660 occurrences +across 70 files in `.ddd/`. **This is a data migration, not a rename**, and it is the only edit in +this programme that can break something already running. + +**The audit surfaced an option without recommending it, and it stands: the field name may stay while +the concept is renamed, at the price of a documented divergence.** + +**Do not execute W4 in this session.** Report its cost and its options at Gate 4; Emil rules whether +it runs at all, and if so, separately. + +## Downstream demand — rule once, with these visible + +Three things are queued behind whichever words this session rules. The session does not file them; it +**rules with their existence known**, so the ruling is made once. + +1. **An act-ontology / verdict-ontology term pair** (Q44, Q45, and the standalone explainer). + Candidate names for two ontologies, both of which will use whatever this session settles. +2. **`posterior` as a candidate replacement for the `mechanical` store**, if G2 confirms the + collision. Emil's lean, not a ruling: it names the timing, parallels `encoded`, carries no + automation implication, and collides with nothing found so far. **Two prior naming attempts died + on registry checks** — `fixed` against `term:encoded`, `resolved` against `term:determination` — + so treat it as a candidate to be checked, never as settled. +3. **Audience denomination.** Canon is the naming authority; projections denominate for their + audience, and the denomination is **recorded on the term** rather than invented downstream. This + is already canon's practice in one place — `term:verdict` carries the engineering projection's + name as a parenthetical — and has never been named as a rule. If a `denominations:` field is + wanted, this is the session to rule it, because the primer is the first projection that will need + it at scale. + +## Out of scope + +W4's execution. Q40–Q46's filings. The primer. The transfer. Paper A's revision and its pin advance. +The carve. S-1. The decoder repair. G-track work. Do not bundle. + +## Standing note + +Commit drafts before reporting at each gate, bodies marked draft-pending-ruling. This migration +exists because a word carried four senses and nobody had put the fifteen terms side by side. The +failure mode to avoid is the same one at a smaller scale: **renaming into a word whose collisions +were not checked.** Every candidate name is checked against the full registry before it is proposed, +and the check is reported whether or not it fires. diff --git a/meta/sessions/2026-08-27-ground-migration/rulings-bis/b001.py b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b001.py new file mode 100644 index 0000000..1b3e754 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b001.py @@ -0,0 +1,7 @@ +# W0-bis :: rule-standard-context (13) — adjudicated in full at GATE 3, recorded here +# The rule matches `policy|standard|statute|regulation` within 70 characters of the token, and +# `[^.]` does not stop at a clause boundary, so "outcome variation across ground ... a fixed POLICY" +# and "no ground TRUTH ... the STANDARD varies by rater" both became S4. +R = {203:'U-idiom', 321:'S1', 519:'S1', 627:'S4', 1121:'S3', 1122:'S1', 1131:'S1', 1137:'S3', + 1375:'S4', 1546:'U-idiom', 1694:'S2', 2506:'S2', 2532:'S2'} +WAS = {i:'S4' for i in R} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings-bis/b002.py b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b002.py new file mode 100644 index 0000000..ffea950 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b002.py @@ -0,0 +1,6 @@ +# W0-bis :: distribution-context (9) — adjudicated in full at GATE 3, recorded here +# The rule matches `distribution|population|deployment` within 60 characters, so "relative to a task +# DISTRIBUTION, accessible ground" and "verified against real ground ... set by DEPLOYMENT frequency" +# both became S5. `ground distribution` proper is the separate anchored rule and is sound. +R = {408:'S2', 445:'S5', 888:'S5', 1006:'S1', 1043:'S2', 1176:'S5', 1243:'S5', 1247:'S5', 1542:'S1'} +WAS = {i:'S5' for i in R} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings-bis/b003.py b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b003.py new file mode 100644 index 0000000..cbe82b1 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b003.py @@ -0,0 +1,8 @@ +# W0-bis :: missing-ground (11) +# Anchored on the compound but with a window wide enough to catch a neighbouring sentence twice. +R = {404:'U-missing', 419:'U-missing', 587:'U-missing', + 588:'S1', # "it passes the ground test" — the admission test + 596:'U-missing', 935:'U-missing', 940:'U-missing', 1021:'U-missing', 1056:'U-missing', + 1166:'U-missing', + 1167:'S1'} # "a property of *ground* rather than of the executor" +WAS = {i:'U' for i in R} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings-bis/b004.py b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b004.py new file mode 100644 index 0000000..c97552e --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b004.py @@ -0,0 +1,29 @@ +# W0-bis :: ordinary-english (32) — 20 wrong, and the errors run in the DANGEROUS direction. +# Every error is a FALSE POSITIVE: a technical use labelled ordinary English, and therefore excluded +# from the migration. The rule's own word list is the mechanism — `some|any|no|conceptual` match +# "against SOME ground", "not about ANY ground", "NO ground at all", where the use is technical. +R = { + 1:'S1', # "a determination against some ground" + 136:'S3', # "capability not *about* any ground" + 248:'S3', # hold-overflow: "the decision's governing ground does not fit" + 249:'S2', # "pre-resolve some ground into the constraint" + 282:'U-idiom', 394:'U-ordinary', 399:'U-idiom', 420:'U-ordinary', + 462:'S1', # "the ground-applicability holding note" + 479:'U-ordinary', + 524:'S1', # "a determination against some ground" + 589:'U-missing', # "the three actors have *different* ground missing" — relabelled, class held + 590:'S1', # "a decision made against no ground at all" + 616:'S2', # the escaped-decision record's fields: "no axis, no ground, no principal" + 624:'S2', # "asserted, never measured — no ground exists for it" + 738:'S1', # "no outcome-relevant alternative declared over any ground" + 817:'S2', # "how much ground can be supplied by citation" (Q27) + 835:'S1', # "placing decisions on the ground" + 858:'U-ordinary', 903:'U-ordinary', 904:'U-ordinary', + 915:'S2', 916:'S2', # the record's ground field + 994:'U-ordinary', 1084:'U-idiom', 1265:'U-idiom', + 1485:'S2', # "some ground is yours and some is not" — encode/verify + 1650:'S2', 1726:'S2', 1727:'S2', # "no ground in this repo at all" — no evidence held + 2402:'S2', # "a statement that mentions no ground is suspect" — the predicate field + 2423:'S2', +} +WAS = {i:'U' for i in R} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings-bis/b005.py b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b005.py new file mode 100644 index 0000000..9406771 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b005.py @@ -0,0 +1,24 @@ +# W0-bis :: ground-coverage-assurance (31) — 18 right, 13 wrong +# TWO mechanisms, not one. Ten of the thirteen errors are `DDD-ground-0N` IDENTIFIERS captured by +# this rule before `ddd-ground-id` could reach them, because the audit's table is ordered, first +# match wins, and the identifier rule sits LAST. That is a rule-ORDERING defect, distinct from the +# window-crossing defect, and it also reaches the anchored class. See b009. +R = { + 190:'S2', 337:'S2', + 422:'U-idname', + 423:'S2', 440:'S2', + 591:'U-idname', + 600:'S2', 601:'S2', 602:'S2', + 603:'S3', # "the narrowest ground" — the per-actor readable table + 644:'S2', + 694:'S1', # "the ground-applicability holding note" + 708:'U-idname', + 816:'S3', # "Ground channels — axes readable AT ACT TIME" + 991:'U-idname', + 1204:'S2', 1221:'S2', 1236:'S2', 1307:'S2', 1309:'S2', 1312:'S2', 1316:'S2', 1332:'S2', 1337:'S2', + 1220:'U-idname', + 1340:'S1', # "ground-incident rates" + 1341:'S2', + 2606:'U-idname', 2617:'U-idname', 2660:'U-idname', 2676:'U-idname', +} +WAS = {i:'S2' for i in R} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings-bis/b006.py b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b006.py new file mode 100644 index 0000000..629091b --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b006.py @@ -0,0 +1,38 @@ +# W0-bis :: delivered (41) — 3 right, 38 wrong. The worst rule in the table. +# `ground\b[^.]{0,50}\bdeliver\w*` matches the word "delivery" anywhere within 50 characters, and the +# v5.5.0 release descriptor, the CHANGELOG entry and core/13-delivery.md all name the `ground` area +# and the `delivery` area in the same breath — so thirteen `DDD-ground-0N` identifiers and the area +# name itself became S3, the delivered sense. +R = { + 4:'U-mention', + 5:'S1', 26:'S1', # "the **ground** area names what a determination stands on" + 21:'U-mention', + 22:'U-idname', 23:'U-idname', 24:'U-idname', 25:'U-idname', + 52:'U-ordinary', # "what was refused, and on what ground" + 53:'U-idname', + 132:'S1', # "determination records are indexed by ground (position, as-of, …)" + 168:'U-idname', 169:'U-idname', + 480:'U-mention', + 546:'S1', # "ground-dependent technical" — closes only over real ground + 677:'U-idiom', 678:'U-idiom', + 679:'S1', # the predicted-ground note + 695:'U-mention', 696:'U-mention', + 697:'U-idname', + 730:'S1', # "Holding note — ground axes, decision regions, …" + 1096:'S3', # "the standing rule not fix the output given the ground" + 1114:'S3', # G_A — "accessible and delivered to arrangement A" + 1115:'S2', # "the ground-access hypotheses" + 1118:'S1', # "relevant ground", the G* half + 1119:'S3', # "accessible and delivered ground" + 1133:'S1', # "the delivery distinction applied to ground" — SR-2's object exactly + 1134:'S2', + 1198:'U-idname', 1199:'U-idname', + 1358:'S1', 1359:'S1', # ground-indexed determination + 1549:'S1', # "verification against real ground" + 1556:'S1', + 2494:'U-idiom', + 2564:'U-idname', 2587:'U-idname', 2628:'U-idname', + 2671:'S1', # "ground-not-as-expected" + 2681:'S2', # prd-ground-as-ontology.md +} +WAS = {i:'S3' for i in R} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings-bis/b007.py b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b007.py new file mode 100644 index 0000000..b211fdc --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b007.py @@ -0,0 +1,13 @@ +# W0-bis :: reading-ground (99) — 83 right, 16 wrong. The BEST of the eight prose rules. +# The rule is `\b(read|reads|reading|...)\b[ _-]ground|ground\b[^.]{0,30}\bat the act\b`, and its +# adjacent alternative is sound: 'an actor reading ground' and 'ground available at the act' are S3 +# every time. All 16 errors are one shape — the token is a SECOND `ground` in a sentence whose +# FIRST one triggered the rule: term:actor's 'reading ground: variation in declared ground', +# term:act's 'resolved against ground', term:residual-discretion's 'not variation across ground'. +# Those second occurrences are S1, and canon deliberately opposes them to the first in one breath. +R = { + 31:'S3', 33:'S3', 39:'S3', 40:'S3', 41:'S3', 113:'S3', 143:'S3', 145:'S3', 157:'S3', 170:'S3', 180:'S3', 188:'S3', 206:'S3', 209:'S3', 210:'S3', 213:'S3', 278:'S3', 295:'S3', 296:'S3', 300:'S3', 315:'S3', 316:'S3', 322:'S3', 327:'S3', 335:'S3', 346:'S3', 355:'S3', 356:'S3', 382:'S3', 385:'S3', 443:'S3', 450:'S3', 453:'S3', 454:'S3', 458:'S3', 515:'S3', 545:'S3', 598:'S3', 605:'S3', 667:'S3', 764:'S3', 905:'S3', 950:'S3', 953:'S3', 972:'S3', 981:'S3', 1067:'S3', 1072:'S3', 1073:'S3', 1076:'S3', 1077:'S3', 1080:'S3', 1081:'S3', 1086:'S3', 1087:'S3', 1088:'S3', 1089:'S3', 1092:'S3', 1093:'S3', 1102:'S3', 1106:'S3', 1107:'S3', 1108:'S3', 1120:'S3', 1125:'S3', 1128:'S3', 1129:'S3', 1175:'S3', 1181:'S3', 1183:'S3', 1206:'S3', 1229:'S3', 1232:'S3', 1246:'S3', 1253:'S3', 1267:'S3', 1281:'S3', 1283:'S3', 1294:'S3', 1299:'S3', 1301:'S3', 1497:'S3', 1498:'S3', + 142:'S1', 177:'S1', 189:'S1', 317:'S1', 336:'S1', 338:'S1', 357:'S1', 457:'S1', 599:'S1', 1074:'S1', 1091:'S1', 1103:'S1', 1233:'S1', 1282:'S1', 1284:'S1', + 1101:'S2', +} +WAS = {i:'S3' for i in R} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings-bis/b008.py b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b008.py new file mode 100644 index 0000000..eb4c99e --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b008.py @@ -0,0 +1,14 @@ +# W0-bis :: accessible-available (191) — 174 right, 17 wrong. 91% correct. +# The rule is a long DISJUNCTION and only some alternatives misfire. Two sub-clusters are +# essentially sound: `ground registry` / `ground table` / `ground item` (69 rows, 3 wrong) and +# `ground provenance` / `observed ground` / `inferred ground` (60 rows, 0 wrong). The errors +# concentrate where the compound names an S1 object — `controlled ground` (S1 by the audit's own +# Q3 evidence), `predicted-ground`, `ground-version cohort`, `regioning ground` — plus four +# identifiers and the §2.4 provenance-table subject, which spans senses and is U-multi. +# +# RULE SETTLED HERE and applied to the whole pass, because the sample got it wrong: +# `ground provenance` NAMING THE AXIS -> S2 (the provenance of held material; SR-4's attributes) +# a subject CHARACTERISED BY the enumeration ('Ground is not homogeneous ... kinds of ground', +# 'The ground is | controlled | observed | inferred | institutional') -> U-multi, it spans senses. +R = {30: 'S2', 126: 'S2', 127: 'S1', 130: 'S2', 165: 'S2', 202: 'S2', 244: 'S3', 285: 'S2', 384: 'S3', 393: 'S2', 401: 'S2', 402: 'S2', 405: 'S2', 407: 'S3', 415: 'S2', 431: 'S2', 432: 'U-idname', 498: 'S2', 500: 'S2', 567: 'S2', 759: 'S1', 760: 'S2', 774: 'S1', 775: 'S2', 822: 'S2', 823: 'S2', 826: 'S2', 839: 'S2', 840: 'S1', 843: 'S2', 856: 'S2', 857: 'S1', 868: 'S2', 884: 'S2', 893: 'S2', 913: 'S2', 918: 'S2', 920: 'S2', 925: 'S2', 926: 'S2', 933: 'S2', 934: 'S2', 939: 'S2', 942: 'S2', 946: 'S2', 952: 'S2', 954: 'S2', 963: 'S2', 964: 'S2', 965: 'S2', 966: 'S2', 992: 'S2', 1005: 'S2', 1026: 'S2', 1027: 'S2', 1028: 'S2', 1035: 'S1', 1036: 'S2', 1042: 'S2', 1044: 'S2', 1050: 'S2', 1055: 'S2', 1060: 'S1', 1061: 'S2', 1063: 'S2', 1085: 'S2', 1098: 'S2', 1099: 'S2', 1111: 'U-mention', 1112: 'S2', 1113: 'U-missing', 1143: 'S2', 1144: 'S2', 1156: 'U-idname', 1157: 'S2', 1158: 'U-multi', 1159: 'U-multi', 1165: 'S2', 1174: 'S2', 1180: 'S2', 1188: 'S2', 1197: 'S2', 1200: 'S2', 1205: 'S2', 1217: 'S2', 1231: 'S2', 1266: 'S2', 1354: 'S2', 1366: 'S2', 1367: 'S2', 1368: 'S1', 1379: 'S2', 1562: 'S2', 1563: 'S2', 1566: 'S2', 1567: 'S2', 1568: 'S2', 1569: 'S2', 1616: 'S2', 1619: 'S2', 1626: 'S2', 1643: 'S2', 1644: 'S2', 1645: 'S2', 1646: 'S2', 1648: 'S2', 1655: 'S2', 1656: 'S2', 1657: 'S2', 1658: 'S2', 1661: 'S2', 1665: 'S2', 1672: 'S2', 1673: 'S2', 1678: 'S2', 1681: 'S2', 1691: 'S2', 1693: 'S2', 1695: 'S2', 1698: 'S2', 1700: 'S2', 1705: 'S2', 1790: 'S2', 1806: 'S2', 1807: 'S2', 1851: 'S2', 1852: 'S2', 2098: 'S2', 2301: 'S2', 2302: 'S2', 2304: 'S2', 2305: 'S2', 2306: 'S2', 2307: 'S2', 2315: 'S2', 2316: 'S2', 2317: 'S2', 2320: 'S2', 2321: 'S2', 2358: 'S2', 2385: 'S2', 2392: 'S2', 2393: 'S2', 2394: 'S2', 2395: 'S2', 2405: 'S2', 2416: 'S2', 2417: 'S2', 2418: 'S2', 2425: 'S2', 2426: 'S2', 2458: 'S2', 2459: 'S2', 2461: 'S2', 2465: 'S2', 2469: 'S2', 2470: 'S2', 2476: 'S2', 2567: 'S2', 2572: 'S2', 2574: 'S2', 2575: 'S2', 2576: 'S2', 2579: 'S2', 2580: 'S2', 2594: 'S2', 2645: 'S2', 2646: 'S2', 2648: 'S2', 2649: 'S2', 2650: 'S2', 2651: 'S2', 2652: 'S2', 2653: 'S2', 2655: 'S2', 2673: 'S2', 2682: 'S2', 2683: 'S2', 2684: 'S2', 2685: 'S2', 2691: 'S2', 2692: 'S2', 2693: 'S2', 2823: 'S2', 2824: 'S2', 2825: 'S2', 2826: 'S2', 2827: 'S2', 2828: 'S2', 2829: 'S2', 2830: 'S2'} +WAS = {i:'S2' for i in R} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings-bis/b009.py b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b009.py new file mode 100644 index 0000000..055a01c --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings-bis/b009.py @@ -0,0 +1,17 @@ +# W0-bis :: the ANCHORED-CLASS reopening (29 rows). Emil's GATE 3 ruling: an anchored-class +# error reopens the question rather than being absorbed. It did, and the reopening CLOSES, +# because the mechanism is decidable rather than a sampling matter. +# +# ONE mechanism, in two directions, and it is rule ORDERING, not window width: +# `ddd-ground-id` is the LAST rule in the audit's ordered table and first match wins. +# * 15 rows whose token IS a `DDD-ground-0N` identifier were taken by an earlier anchored +# rule (declared-ground-axes 11, reads-different-ground 2, relevant-conditions 1, +# software-module 1) and given a sense. An identifier inherits no sense. +# * 13 rows whose token is NOT the identifier were taken BY `ddd-ground-id`, because the +# identifier sits elsewhere in the 240-character window. The inverse steal. +# Both sets were found MECHANICALLY over the whole corpus, not sampled, so the class is closed. +# +# Plus one row from the second anchored sample that is not mechanically findable: +# 1581 — `reads-different-ground` on 'never read as ground', where the sense is the ledger's +# basis (S2), not what an actor reads at an act. +R = {48: 'U-idname', 128: 'U-idname', 434: 'U-idname', 435: 'U-idname', 484: 'U-idname', 622: 'U-idname', 931: 'U-idname', 945: 'U-idname', 1013: 'U-idname', 1016: 'U-idname', 1150: 'U-idname', 1223: 'U-idname', 1377: 'U-idname', 1378: 'U-idname', 2592: 'U-idname', 7: 'U-mention', 18: 'S1', 19: 'S1', 28: 'U-mention', 495: 'S1', 496: 'S1', 569: 'S1', 722: 'U-mention', 1000: 'U-idname', 1009: 'S1', 2618: 'S1', 2627: 'S2', 2666: 'S2', 1581: 'S2'} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r001.py b/meta/sessions/2026-08-27-ground-migration/rulings/r001.py new file mode 100644 index 0000000..b103ebc --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r001.py @@ -0,0 +1,34 @@ +# downstream :: meta/holding-note-ground-axes-rev18.md (87 rows) +# Dominant construction: a *factored ground space* whose axes are dimensions of variation and whose +# regions decisions cover. That is term:determinable / DDD-ground-05 exactly, so the file is S1-heavy. +R = { + 731:'S1',734:'S1',735:'S1',739:'S1',740:'S1',742:'S1',744:'S1',745:'S1',757:'S1',758:'S1', + 761:'S1',762:'S1',763:'S1',766:'S1',767:'S1',768:'S1', + 769:'S3', # "ground-reading an act ... readings themselves into the ledger" + 770:'S1',771:'S1',772:'S1',773:'S1',777:'S1',778:'S1',779:'S1',780:'S1', + 781:'U-ordinary', # "on the grounds that" = for the reason that + 782:'S3',783:'S3', # "self-supplied ground, no further reading required" / "already in hand" + 784:'S1',786:'S1',787:'S1',788:'S1',789:'S1',791:'S1', + 794:'S2',795:'S2',798:'S2',799:'S2',800:'S2',801:'S2',802:'S2',803:'S2', # Q27 trusted-source supply + 804:'S1',805:'S1',806:'S1',807:'S1', # "ground projection" = over the region space + 812:'S2', + 815:'S1', + 818:'S2',819:'S2',820:'S2',821:'S2', + 824:'S2', + 825:'S1',828:'S1',831:'S1',832:'S1',833:'S1', + 834:'S4', # "a discard decision with the regulation as its ground" + 841:'S1',842:'S1', + 844:'S3',845:'S3', # hold capacity: "holding ground" / "context is simultaneously the ground" + 846:'S1',847:'S1',848:'S1',849:'S1',850:'S1',851:'S1',852:'S1', + 854:'S2',855:'S2', + 862:'U-ordinary', # "a claim the acts ground" — the verb, ordinary English + 863:'S1', + 864:'U-ordinary', # "on the framework's own grounds" + 865:'S1',866:'S1', + 867:'S3', # "repeated ground reads, as-of refreshed per glance" + 869:'S1', + 870:'S3', # "binding current ground at current as-ofs" — act-indexed + 871:'S1', + 872:'S3', # "as-of determines what ground binds" + 873:'S1',874:'S1',875:'S1',877:'S1',881:'S1', +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r002.py b/meta/sessions/2026-08-27-ground-migration/rulings/r002.py new file mode 100644 index 0000000..ed81ac4 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r002.py @@ -0,0 +1,7 @@ +# product-cli :: docs/audits/provenance-2026-08.md (54 rows) +# 41 rows are the Rel column of the reach tables; §1.7 defines the value: 'grounding — the decision +# would be different, or unsupported, were the upstream thing false or absent'. That is the ledger's +# held-provenance edge between filed objects: S2. Verified by reading §1.7 and the table header. +# 2495/2496 are a bare term-name citation in an inventory ('ground and ground state') with no +# predication to read a sense from — a U cluster the rule table had no name for. +R = {2497: 'S2', 2499: 'S2', 2500: 'S2', 2501: 'S2', 2502: 'S2', 2503: 'S2', 2504: 'S2', 2505: 'S2', 2507: 'S2', 2508: 'S2', 2509: 'S2', 2510: 'S2', 2511: 'S2', 2512: 'S2', 2513: 'S2', 2514: 'S2', 2515: 'S2', 2516: 'S2', 2517: 'S2', 2518: 'S2', 2519: 'S2', 2520: 'S2', 2521: 'S2', 2522: 'S2', 2523: 'S2', 2524: 'S2', 2525: 'S2', 2526: 'S2', 2527: 'S2', 2528: 'S2', 2529: 'S2', 2530: 'S2', 2531: 'S2', 2533: 'S2', 2534: 'S2', 2535: 'S2', 2536: 'S2', 2537: 'S2', 2538: 'S2', 2539: 'S2', 2540: 'S2', 2487: 'S2', 2491: 'S2', 2493: 'U-ordinary', 2495: 'U-mention', 2496: 'U-mention', 2498: 'S2', 2541: 'S2', 2542: 'S2', 2543: 'S2', 2547: 'S2', 2548: 'S2', 2552: 'S2', 2554: 'S2'} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r003.py b/meta/sessions/2026-08-27-ground-migration/rulings/r003.py new file mode 100644 index 0000000..96264ef --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r003.py @@ -0,0 +1,25 @@ +# downstream :: papers/paper-a/paper-a.md (33) +# The paper's own §2.3 definition — "a fact belongs to ground when information about it can change +# the resolution ... beyond the declared tolerance" — is the admission test, so the tuple slot and +# every definitional use are S1. The accessibility material (§6.1, DDD-hyp-02, the agent's ground) +# is about what the arrangement can reach and hold, and reads S2. +# 1161 is the provenance table's subject cell ("The ground is"), whose four values the audit found +# to live in three different senses. It cannot be one of them — U, and the reason is SR-4's. +R = { + 1145:'S1',1146:'S1',1147:'S1',1151:'S1',1152:'S1', + 1153:'S2', # DDD-ground-02's orthogonal properties relative to a filed decision + 1160:'S1', + 1161:'U-multi', # the provenance table's subject; its values span S1/S2/S4 + 1162:'S2', # "computed from ground already held" + 1169:'S2',1170:'S2', # ground the arrangement cannot reach; a ground property + 1172:'S2',1173:'S2', # an institution's *statement* used as ground — a representation, not a rule + 1178:'S2', # term:closure — "the relevant ground is observable" + 1179:'S2', # "with the ground, time, memory, tools ... available to the arrangement" + 1189:'S1',1190:'S1', + 1191:'S2', # "ground access" + 1194:'S2',1201:'S2',1202:'S2', + 1207:'S2',1208:'S2',1209:'S2', + 1210:'S1',1211:'S2',1212:'S2',1213:'S2',1214:'S1',1215:'S1',1225:'S2', + 1230:'S1', # DDD-ground-05, constitutive priority + 1235:'S1', # term:answerability — "against what ground" +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r004.py b/meta/sessions/2026-08-27-ground-migration/rulings/r004.py new file mode 100644 index 0000000..5ea758c --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r004.py @@ -0,0 +1,19 @@ +# product-cli :: docs/g-track/prd-ground-as-ontology.md (31) +# The track's `ground` is a registry of Readings carrying value+provenance+assurance — held +# material, S2 — except where it speaks of the *ground state at a position*, which is the +# four-state typing over regions of the declared space and is S1. +R = { + 2562:'S2',2569:'S2', + 2570:'S3', # "ground reads" by the loop; a tool call is an act with a position + 2573:'S2',2577:'S2', + 2578:'S1', # "one ground projection of that registry" — the region space + 2582:'S2',2583:'S2',2584:'S2', + 2585:'S1', # ground-state status line + 2590:'S2',2593:'S2',2595:'S2', + 2598:'S2',2599:'S2',2600:'S2',2601:'S2', # the tick-rate cluster: a held datum with provenance + 2604:'S1',2605:'S1',2608:'S1',2609:'S1',2612:'S1', + 2613:'S2',2614:'S2',2619:'S2',2620:'S2',2621:'S2',2622:'S2', + 2629:'S1', + 2630:'S2', + 2631:'U-ordinary', # "on the grounds that" +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r005.py b/meta/sessions/2026-08-27-ground-migration/rulings/r005.py new file mode 100644 index 0000000..dac8edc --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r005.py @@ -0,0 +1,21 @@ +# The decision rule fixed here and applied from this point on, so the pass is consistent rather +# than case-by-case: read the PREDICATE APPLIED TO THE WORD. +# world predicates (obtains, varies, moves, is uncontrolled, is a dimension/region) -> S1 +# store predicates (held, available, assembled, filed, cited, pinned, stale, complete) -> S2 +# act predicates (read at, delivered, consulted, present, in context, bound at as-of) -> S3 +# rule predicates (is a standard, determines acceptability, is the regulation) -> S4 +# population preds (distribution over, evaluated over) -> S5 +# downstream :: projections/tracks/01-determination.md (27) +R = { + 573:'S3', # term:capability — "what ground you can read" + 577:'S1',581:'S1',584:'S1', + 585:'S2', # authority/convention *supply* ground — supplied representations + 593:'S2',594:'S2', # "never been assembled" / "the same ground available" + 595:'S3',604:'S3',606:'S3',607:'S3',608:'S3', # the per-actor "Ground it can actually read" table + 609:'S1', + 610:'S2',611:'S2',612:'S2',613:'S2', # term:closure and its exposition — observable + 614:'S3', # "none consulted" + 615:'S2',618:'S2',619:'S2', + 620:'S1', # term:answerability — "against what ground" + 623:'S2',625:'S2',626:'S2',628:'S2',629:'S2', +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r006.py b/meta/sessions/2026-08-27-ground-migration/rulings/r006.py new file mode 100644 index 0000000..f37a217 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r006.py @@ -0,0 +1,13 @@ +# downstream :: apparatus/adversarial-ground.md (21) +# The document's own claim is "the attack surface of any actor is its ground, not its logic", and +# term:poisoned-ground settles that object as "the substrate a determination reads" — S3 throughout, +# except the two closure-principle quotations, which are about what may be held as ground at all. +R = { + 1409:'S3', + 1410:'U-mention', # a bare pointer, "(core/01-the-principle.md, ground)" + 1411:'S3',1412:'S3', + 1413:'S2', # "an actor's own prior output is not ground" — the closure principle + 1414:'S3',1417:'S3',1418:'S3',1419:'S3',1421:'S3', + 1422:'S2', # "the check that keeps the ground clean" — the state file as store + 1423:'S3',1425:'S3',1426:'S3',1427:'S3',1431:'S3',1432:'S3',1435:'S3',1436:'S3',1437:'S3',1438:'S3', +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r007.py b/meta/sessions/2026-08-27-ground-migration/rulings/r007.py new file mode 100644 index 0000000..ecb8850 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r007.py @@ -0,0 +1,9 @@ +# downstream :: apparatus/tool-contract.md (20) +# §2.1 fixes the referent: "every tool response declares the ground it depended on ... it *is* the +# ground; it cannot be stale relative to a source of truth". That is the returned representation, S2. +R = { + 1462:'S2',1463:'S2',1464:'S2',1465:'S2',1466:'S2',1468:'S2',1469:'S2',1470:'S2',1471:'S2', + 1472:'S2',1473:'S2',1474:'S2',1475:'S2',1476:'S2',1478:'S2', + 1479:'S1', # "a promise that ground will not move" — movement is a world predicate. BOUNDARY + 1481:'S2',1482:'S2',1483:'S2',1484:'S2', +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r008.py b/meta/sessions/2026-08-27-ground-migration/rulings/r008.py new file mode 100644 index 0000000..6f11ffb --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r008.py @@ -0,0 +1,7 @@ +# upstream :: core/11-the-floor-mechanism.md (18) +# The chapter's subject is the hold/resolve capacity pair and the three ground-failures at the act — +# absent (not in the window), false (present but wrong), unresolved (present but exceeds C_resolve). +# All three are act predicates, so the chapter is S3 apart from the closure-principle citation. +R = {242:'S2',243:'S3',245:'S3',246:'S3',247:'S3',250:'S3', + 259:'S1', # "output decoupled from the *true* ground ... what is actually the case" + 260:'S3',261:'S3',262:'S3',263:'S3',264:'S3',265:'S3',266:'S3',267:'S3',268:'S3',269:'S3',270:'S3'} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r009.py b/meta/sessions/2026-08-27-ground-migration/rulings/r009.py new file mode 100644 index 0000000..86db7ea --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r009.py @@ -0,0 +1,8 @@ +# downstream :: applications/sdlc/production-as-ground.md (18) +# This document states the S1/S2 split in its own words a year before the terminology work did: +# "pre-production predicates close over *substitute* ground; production predicates close over *real* +# ground". Substitute reads S2, real reads S1, and the paper's thesis sentence is S1. +R = {1533:'S1',1534:'S1',1535:'S1', + 1536:'S2',1537:'S1',1538:'S1',1540:'S1',1541:'S1', + 1543:'S2',1544:'S1',1545:'S1',1548:'S1', + 1550:'S2',1551:'S2',1552:'S1',1553:'S1',1554:'S1',1557:'S1'} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r010.py b/meta/sessions/2026-08-27-ground-migration/rulings/r010.py new file mode 100644 index 0000000..278e57e --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r010.py @@ -0,0 +1,6 @@ +# upstream :: core/08-projections.md (15) +# The funnel chapter: "encoded ground accumulates", "inherits the resolved ground". Ground here is +# material converted into the encoded store, S2 — except 226/227, where a predicate *closes over* a +# large or small ground, which is the extent of conditions and reads S1. +R = {212:'S2',214:'S2',215:'S2',216:'S2',217:'S2',218:'S2',219:'S2',220:'S2',221:'S2',222:'S2', + 223:'S2',224:'S2',225:'S2',226:'S1',227:'S1'} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r011.py b/meta/sessions/2026-08-27-ground-migration/rulings/r011.py new file mode 100644 index 0000000..8d19915 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r011.py @@ -0,0 +1,9 @@ +# downstream :: meta/sessions/2026-08-18-wave3/revision-foundation.md (15) IMMUTABLE — session record +# Paper A's ancestor draft; the senses track Paper A's exactly. +R = {1025:'S2',1029:'S1',1032:'S1',1033:'S1', + 1034:'U-multi', # the provenance-table subject, as at Paper A 1161 + 1046:'S2',1048:'S2',1051:'S1',1052:'S2',1053:'S2',1057:'S2', + 1058:'S1', # the worked example's Ground list + 1059:'U-missing', # "where ground is missing" — the S1/S3 gap, adjudicated U by the audit + 1062:'S4', # "contested normative ground" + 1064:'S2'} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r012.py b/meta/sessions/2026-08-27-ground-migration/rulings/r012.py new file mode 100644 index 0000000..fa9642c --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r012.py @@ -0,0 +1,7 @@ +# downstream :: apparatus/closure-principle.md (15) +# The principle is about what may be *consumed as* ground — the held/read surface, S2 — with the +# poisoned product S3. 1387 carries the apparatus definition the audit found miscited to core/00. +R = {1386:'U-mention', # "the definition of ground in core/00-determination.md" — a pointer + 1387:'S2',1388:'S2',1389:'S2',1390:'S2', + 1393:'S3', # "the ground it produces poisoned" + 1395:'S2',1396:'S2',1397:'S2',1400:'S2',1401:'S2',1404:'S2',1406:'S2',1407:'S2',1408:'S2'} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r013.py b/meta/sessions/2026-08-27-ground-migration/rulings/r013.py new file mode 100644 index 0000000..712809b --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r013.py @@ -0,0 +1,10 @@ +# product-cli :: C1 Rust source (155 rows, 57 of them `crate::ground::` module paths) +# Uniformly the ledger/extraction store sense - what a decision rests on, or what a check must see, +# held with provenance. product-core/src/ground/mod.rs states it: 'Code extraction into ground ... +# output is a **proposal**, never ground'. S2, and 57 of them are identifiers rather than prose. +# +# EXCEPTION, and a finding: the 11 rows in product-core/tests/graph_capability_tests.rs are the +# RDF/logic term of art. `let ground = |store| ... .filter(|q| !matches!(q.object, Term::BlankNode(_)))` +# - a *ground term* is one containing no variables or blank nodes. That is a SIXTH object, imported +# from logic, related to none of S1-S5, and the sampled pass did not find it. +R = {1561: 'S2', 1565: 'S2', 1597: 'S2', 1598: 'S2', 1599: 'S2', 1606: 'S2', 1608: 'S2', 1609: 'S2', 1610: 'S2', 1611: 'S2', 1612: 'S2', 1613: 'S2', 1614: 'S2', 1617: 'S2', 1618: 'S2', 1620: 'S2', 1621: 'S2', 1623: 'S2', 1624: 'S2', 1625: 'S2', 1629: 'S2', 1630: 'S2', 1631: 'S2', 1634: 'S2', 1635: 'S2', 1636: 'S2', 1640: 'S2', 2318: 'S2', 2319: 'S2', 2322: 'S2', 2323: 'S2', 2327: 'S2', 2329: 'S2', 2330: 'S2', 2331: 'S2', 2332: 'S2', 2333: 'S2', 2334: 'S2', 2337: 'S2', 2338: 'S2', 2340: 'S2', 2341: 'S2', 2347: 'S2', 2348: 'S2', 2349: 'S2', 2350: 'S2', 2351: 'S2', 2352: 'S2', 2353: 'S2', 2356: 'S2', 2357: 'S2', 2359: 'S2', 2362: 'S2', 2363: 'S2', 2364: 'S2', 2365: 'S2', 2371: 'S2', 2372: 'S2', 2377: 'S2', 2378: 'S2', 2379: 'S2', 2380: 'S2', 2381: 'S2', 2382: 'S2', 2383: 'S2', 2387: 'S2', 2388: 'S2', 2391: 'S2', 2396: 'S2', 2397: 'S2', 2398: 'S2', 2399: 'S2', 2705: 'S2', 2706: 'S2', 2708: 'S2', 2709: 'S2', 2710: 'S2', 2711: 'S2', 2712: 'S2', 2713: 'S2', 2714: 'S2', 2715: 'S2', 2721: 'S2', 2724: 'S2', 2725: 'S2', 2726: 'S2', 2727: 'S2', 2728: 'S2', 2742: 'S2', 2743: 'S2', 2744: 'S2', 2745: 'S2', 2746: 'S2', 2747: 'S2', 2750: 'S2', 2752: 'S2', 2761: 'S2', 2765: 'S2', 2766: 'S2', 2767: 'S2', 2768: 'S2', 2769: 'S2', 2775: 'S2', 2776: 'S2', 2777: 'S2', 2778: 'S2', 2779: 'S2', 2780: 'S2', 2783: 'S2', 2784: 'S2', 2785: 'S2', 2786: 'S2', 2787: 'S2', 2788: 'S2', 2789: 'S2', 2790: 'S2', 2791: 'S2', 2792: 'S2', 2793: 'S2', 2796: 'S2', 2797: 'S2', 2798: 'S2', 2799: 'S2', 2800: 'S2', 2801: 'S2', 2802: 'S2', 2803: 'S2', 2804: 'S2', 2805: 'S2', 2806: 'S2', 2807: 'S2', 2808: 'S2', 2809: 'S2', 2810: 'S2', 2811: 'S2', 2814: 'S2', 2815: 'S2', 2816: 'S2', 2817: 'S2', 2818: 'S2', 2819: 'S2', 2820: 'S2', 2821: 'S2', 2833: 'S2', 2834: 'U-rdf', 2835: 'U-rdf', 2836: 'U-rdf', 2837: 'U-rdf', 2838: 'U-rdf', 2839: 'U-rdf', 2840: 'U-rdf', 2841: 'U-rdf', 2842: 'U-rdf', 2843: 'U-rdf', 2844: 'U-rdf'} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r014.py b/meta/sessions/2026-08-27-ground-migration/rulings/r014.py new file mode 100644 index 0000000..59dc91b --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r014.py @@ -0,0 +1,15 @@ +# product-cli :: everything outside C1 Rust source (106 rows) +# The ledger sense dominates: 'the read-only surface an actor inspects in order to act; a fact is +# one element of ground' (decision-ledger-prd 2.3) and the based_on/revisit_if edge split. S2. +# +# TWO EXCEPTIONS, both findings: +# * U-visual (6) - a SEVENTH object: the CSS design tokens. 'the two surface **grounds** the page +# and its cards sit on', 'the card ground one step above --surface', 'the page's ground colour'. +# That is background-versus-foreground, ordinary design vocabulary, not the technical term. +# * S1 (6) - the Bicep/idempotence predicates, where the ground IS the target's current state and +# 'moves on its own'. World predicates in a repository the audit measured at 92% S2. +# +# Ruled deliberately: 'the decision this claim **grounds**' reads S2, not ordinary English, because +# in this corpus `grounding` is the filed edge kind (provenance audit 1.7). The holding note's +# 'a claim the acts ground' stays U-ordinary - there is no filed edge there, only speculative prose. +R = {1560: 'S2', 1570: 'S2', 1573: 'S2', 1575: 'S2', 1579: 'S2', 1583: 'S2', 1585: 'S2', 1588: 'S2', 1641: 'S1', 1642: 'S1', 1647: 'S2', 1649: 'S2', 1651: 'U-visual', 1652: 'U-visual', 1653: 'U-visual', 1654: 'S2', 1659: 'S1', 1660: 'S1', 1662: 'S2', 1669: 'S1', 1674: 'S2', 1682: 'S1', 1689: 'S2', 1702: 'S2', 1706: 'S2', 1709: 'S2', 1710: 'U-visual', 1712: 'S2', 1714: 'S2', 1715: 'S2', 1716: 'S2', 1717: 'S2', 1718: 'S2', 1719: 'S2', 1721: 'S2', 1722: 'S2', 1723: 'S2', 1724: 'S2', 1725: 'S2', 1791: 'S2', 1792: 'S2', 1793: 'S2', 2027: 'U-visual', 2291: 'S2', 2292: 'U-visual', 2386: 'S2', 2401: 'S2', 2403: 'S2', 2406: 'S2', 2407: 'S2', 2408: 'S2', 2409: 'S2', 2410: 'S2', 2411: 'S2', 2412: 'S2', 2413: 'S2', 2414: 'S2', 2419: 'S2', 2420: 'S2', 2421: 'S2', 2422: 'S2', 2424: 'S2', 2428: 'S2', 2429: 'S2', 2431: 'S2', 2433: 'S2', 2436: 'S2', 2437: 'S2', 2438: 'S2', 2439: 'S2', 2440: 'S2', 2449: 'S2', 2457: 'S2', 2462: 'S2', 2463: 'S2', 2464: 'S2', 2466: 'S2', 2467: 'S2', 2468: 'S2', 2471: 'S2', 2472: 'S2', 2473: 'S2', 2474: 'S2', 2477: 'U-ordinary', 2478: 'S2', 2479: 'S2', 2480: 'S2', 2481: 'S2', 2482: 'S2', 2483: 'S2', 2484: 'S2', 2485: 'S2', 2632: 'S2', 2641: 'S2', 2642: 'S2', 2644: 'S2', 2647: 'S2', 2656: 'S2', 2674: 'S2', 2679: 'S2', 2680: 'S2', 2688: 'S2', 2690: 'S2', 2694: 'S2', 2699: 'S2', 2700: 'S2'} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r015.py b/meta/sessions/2026-08-27-ground-migration/rulings/r015.py new file mode 100644 index 0000000..68a1c07 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r015.py @@ -0,0 +1,41 @@ +# upstream :: core/* (first 60 of 112) +# FINDING carried here: "uniform ground" / "non-uniform ground" / "varied ground" is S5 — the +# distribution over inputs, P. core/09 §"triangulation" and three assets (measure-mdl-demo.py, +# measure-aggregate-discharge.py, measure-nonuniform-ground.py) all mean the input distribution. +# The audit's S5 rules keyed only on `ground distribution`, so these sat in the residual. +R = { + 171:'S3', # 13-delivery: "given the standing configuration and the ground" + 186:'S3', # term:poisoned-ground embed + 187:'S2', # term:encode-verify-split: "pre-resolving ground into the encoded store" + 193:'S3', # "you authoring ground, not the rock reading it" + 204:'S2', + 207:'S1',208:'S1',211:'S1', # the ddd:contract requires-lists and "the two primitives" + 228:'S1', # "Vary the ground (which antigen is present) -> outcome moves" — the admission test + 229:'S3',231:'S3',234:'S3',235:'S3',236:'S3', + 238:'S3',239:'S3', # term:capability — "the class of ground a pathway can read" + 240:'S2', + 241:'U-ordinary', # "**Grounded**, exclusionary, no free parameter" — the adjective + 271:'S3', + 274:'S1',275:'S1', # "closing over a large ground ... than one over a small ground" + 279:'S2',280:'S2',283:'S2', + 291:'S5',292:'S5', # "a decomposition under varied ground" / "non-uniform ground" + 297:'S2', + 298:'S1',299:'S1', # term:answerability + 301:'S1',302:'S1', + 303:'S2',305:'S2',307:'S2', + 308:'S1', # "the relevant ground is small and closed" + 309:'S2', # "Hayek in the dispersion of ground" + 312:'S1',313:'S1',314:'S1', + 318:'S3', # "held at fixed ground" + 319:'S1',320:'S1', # "at a ground point" / "across ground points" + 323:'S2',324:'S2',325:'S2', + 326:'U-missing', # "as ground goes missing" + 330:'S1',331:'S1', # term:ground's own id and term fields + 344:'S3', # term:poisoned-ground + 347:'S2', # term:closure + 348:'S1', # term:answerability + 350:'S3',351:'S3',352:'S3', # term:capacity, term:overflow + 353:'S3', # term:capability + 361:'S2',362:'S2', + 363:'S5',365:'S5',366:'S5', # "uniform ground" / "Non-uniform ground" in the measure assets +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r016.py b/meta/sessions/2026-08-27-ground-migration/rulings/r016.py new file mode 100644 index 0000000..e3a28c4 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r016.py @@ -0,0 +1,33 @@ +# upstream :: core/* (remaining 52 of 112) — claims, decisions, assets +# The "ground-applicability holding note" is a title, and the note is about whether a decision +# applies at a region, so it reads S1. "Held at fixed ground" (term:residual-discretion, +# DDD-frame-02, DDD-frame-17, DDD-dec-30) is act-indexed and reads S3, while "variation ACROSS +# ground" in the same sentences is the space itself and reads S1 — the two are deliberately opposed +# in canon's own text, which is the cleanest S1/S3 contrast in the corpus. +R = { + 369:'S5',373:'S5', # measure-nonuniform-ground.py; "on the benign ground ... on the uniform" + 378:'S1',379:'S1', + 383:'S2',386:'S2',387:'S2',391:'S2',392:'S2',395:'S2',396:'S2',397:'S2', + 406:'S3', + 409:'S1', + 410:'S3',411:'S3', + 412:'S1',413:'S1',414:'S1', + 416:'S2',417:'S2', + 418:'S1', + 424:'S2', + 425:'S1', + 428:'S1', # "the ground-applicability holding note" — a title + 439:'S1', # DDD-ground-05, constitutive priority + 448:'S5', + 451:'S3',452:'S3',456:'S3', + 460:'S1',461:'S1',464:'S1',467:'S1',468:'S1',470:'S1', + 471:'S3', # "context is simultaneously the ground, the retrieved governance ..." + 493:'S1', + 499:'S2', # "it never supplies the mint's ground" — the decision's own basis + 501:'S1', + 503:'S2', + 504:'S1', + 505:'S3',506:'S3', # the hold-overflow correction: ground that does not fit at the act + 507:'S1',508:'S1',509:'S1',512:'S1', + 513:'S3',514:'S3',517:'S3',518:'S3', +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r017.py b/meta/sessions/2026-08-27-ground-migration/rulings/r017.py new file mode 100644 index 0000000..7c22bdb --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r017.py @@ -0,0 +1,34 @@ +# upstream :: everything outside core/ (60 rows) — root docs, meta, releases, i18n +# FINDING at 520: the Danish glossary glosses `grund` as BOTH senses in one entry — "Det, en +# beslutning afgøres *imod*" (what a decision is determined against, S1) "— det læsbare underlag, +# aktøren inspicerer" (the readable substrate the actor inspects, S3). The definition layer's +# multi-sense defect has been translated, so the migration owes i18n a pass it did not budget for. +R = { + 3:'S2', + 9:'U-mention', # "the ground area's exposition" — the claim-area name, no predication + 11:'S1',13:'S1', + 20:'S2',32:'S3',34:'S2',35:'S5',36:'S5', # release descriptors — IMMUTABLE, classified only + 44:'S5', + 46:'S3', + 54:'S2', + 56:'U-ordinary', # "literature-grounded" + 59:'S3',60:'S3',61:'S3', + 62:'S1',63:'S1', # production-as-ground.md, cited by name + 64:'S2',65:'S2',66:'S2',67:'S2',68:'S2', # the Hayek dispersion material + 82:'S1', # "decidable over digital ground" + 90:'S2',91:'S2', + 92:'S3',93:'S3', + 102:'S3',105:'S2',106:'S2', + 111:'S1',112:'S1', + 114:'S2', + 115:'S3',116:'S3',117:'S3',119:'S3', + 122:'S1', + 131:'S1',133:'S1',134:'S1',135:'S1',137:'S1',138:'S1',139:'S1',140:'S1',141:'S1', + 147:'S1', + 151:'S2',152:'S2', + 153:'S1',154:'S1', # "the actor's model of the ground diverged from the ground" + 159:'S3',160:'S2',161:'S3',162:'S3', + 167:'S5', + 520:'U-multi', # the Danish glossary: S1 and S3 in one gloss + 521:'S1', +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r018.py b/meta/sessions/2026-08-27-ground-migration/rulings/r018.py new file mode 100644 index 0000000..2b83538 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r018.py @@ -0,0 +1,45 @@ +# downstream :: root docs, graph pins, meta (60 rows) +# 899/900 are the two rows the re-extraction could not locate: the audit's own session-index line in +# meta/sessions/README.md, written in its working tree and not committed at the read commit. They are +# the audit counting itself a third time, beyond the 101 its SELF skip removed. U-selfcount. +R = { + 523:'S2', # "the `ground` PRD" — the G-track PRD + 526:'S2',527:'S2', + 531:'S3',532:'S3', + 533:'S1',534:'S1',535:'S1', + 537:'S2',538:'S2',540:'S2', + 541:'S1',542:'S1', + 547:'S1', # "a decision was encoded whose ground still moves" + 548:'S3', # INV-6 prefix ordering: ground -> decisions -> task, into the context + 549:'S3', + 551:'U-ordinary', # "how well the principle is grounded" + 552:'S1', + 556:'S3',557:'S3', + 558:'S2', # `ground-prd.md` + 559:'S3', + 560:'S1', # graph/upstream.yaml — the term:ground PIN + 565:'S3', + 632:'U-ordinary', # "posed on IB's ground" — the idiom + 635:'U-ordinary', # "this claim also grounds why ..." — explains, no filed edge + 637:'S3',638:'S3', + 639:'S2', + 640:'U-ordinary',641:'U-ordinary', # "Grounded, exclusionary"; "is established ground" + 648:'S3', + 651:'S1',655:'S1', + 657:'S2', + 666:'S1',669:'S1',674:'S1',680:'S1', + 685:'S2', + 686:'S1',699:'S1',702:'S1', + 713:'U-idname', # "the ground-01 join" — the node identifier + 885:'S2', + 886:'S3', + 887:'S2', + 889:'S1',890:'S1',891:'S1', + 894:'S2', + 895:'U-ordinary', + 896:'S2',897:'S2',898:'S2', + 899:'U-selfcount',900:'U-selfcount', + 901:'S2', + 902:'S1', + 906:'S5', +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r019.py b/meta/sessions/2026-08-27-ground-migration/rulings/r019.py new file mode 100644 index 0000000..0a95dd0 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r019.py @@ -0,0 +1,48 @@ +# downstream :: session records — measure-discharge, track-1, paper-a, freight, wave3, phase1a (60) +# IMMUTABLE class throughout: classified, never migrated. +R = { + 908:'S5', + 910:'U-mention',911:'U-mention', # the word as a token in a checker's SKIP set / rung map + 912:'S2',917:'S2', # the prompt's "Ground state — fetch before proposing anything" + 914:'U-multi', # "Ground and its provenance — controlled, observed, inferred, institutional, missing" + 919:'S1',922:'S1',923:'S1', + 924:'U-ordinary', + 936:'S1', + 941:'S2', + 943:'S1',944:'S1', + 947:'S2', + 948:'S1', + 949:'S2', + 951:'S4', + 955:'S1', + 956:'S2', + 962:'S1', + 969:'U-ordinary', + 970:'S1', + 973:'S5', + 975:'S2', + 978:'U-ordinary', + 979:'S3', + 982:'S5', + 984:'S2',985:'S2', + 987:'S1', + 988:'U-idname', + 989:'S1',990:'S1', + 993:'S2',995:'S2', + 998:'U-ordinary', # "Seam-guard groundwork" + 1001:'S1', + 1007:'S2', + 1010:'U-idname', + 1011:'S1', + 1012:'S2',1024:'S2', + 1066:'S3',1068:'S3', + 1069:'S1',1070:'S1',1071:'S1', + 1075:'S3',1078:'S3',1079:'S3', + 1082:'U-ordinary', + 1090:'S3',1095:'S3', + 1097:'U-mention', # "The ground audit" — naming the audit + 1104:'S2',1105:'S2', + 1109:'S3', + 1110:'S1', + 1116:'S2', +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r020.py b/meta/sessions/2026-08-27-ground-migration/rulings/r020.py new file mode 100644 index 0000000..469d4e1 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r020.py @@ -0,0 +1,39 @@ +# downstream :: migration, papers, core/, assets, claims, decisions (60) +# 1132 is the Paper A review's own proposed split — "§6 ground separation G* (relevant) vs G_A +# (accessible and delivered)" — an occurrence that names two senses in one phrase by construction. +R = { + 1123:'U-mention',1136:'U-mention', + 1130:'S3', + 1132:'U-multi', + 1138:'S1',1139:'S1',1140:'S1', + 1141:'S2',1142:'S2', + 1240:'S1',1241:'S2', + 1254:'S2',1255:'S2', + 1258:'S5',1260:'S5',1263:'S5', + 1268:'U-ordinary',1270:'U-ordinary', + 1272:'S5',1274:'S5', + 1277:'S1',1286:'S2', + 1292:'S5',1293:'S5',1296:'S5',1297:'S5', + 1298:'U-ordinary', # "cost the paper ground it should not have been holding" + 1302:'S2',1303:'S5', + 1306:'U-ordinary', + 1308:'S3',1317:'S3',1320:'S3', + 1321:'S2', + 1322:'S3', + 1324:'S2', # "depreciate at the drift rate of the ground they *encode*" + 1325:'U-ordinary', + 1327:'S3',1328:'S2',1329:'S3',1330:'S3', + 1331:'S5', + 1333:'S3',1334:'S3', + 1336:'S1', + 1338:'S3', + 1347:'S1',1348:'S1', + 1349:'S2', + 1350:'U-ordinary',1351:'U-ordinary', + 1353:'S2', + 1355:'S1', + 1356:'S2', + 1360:'S1',1361:'S1',1362:'S1',1363:'S1', + 1365:'U-ordinary', + 1372:'S1', +} diff --git a/meta/sessions/2026-08-27-ground-migration/rulings/r021.py b/meta/sessions/2026-08-27-ground-migration/rulings/r021.py new file mode 100644 index 0000000..16fc732 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/rulings/r021.py @@ -0,0 +1,33 @@ +# downstream :: apparatus and applications (55) — the last block +# 1488 is apparatus/encode-verify.md:21, the miscitation the audit named: "Ground is the read-only +# surface an actor inspects in order to act (`core/00`)" — an S2 definition attributed by citation +# to a source (term:ground) that gives an S1 one. +R = { + 1374:'S1',1380:'S2', + 1439:'S2', # the `ground` reference tool + 1440:'S3', # INV-6 prefix ordering into the context window + 1441:'S1', # "| Ground | most stable | *the world moves* |" + 1442:'S1', + 1443:'S3',1444:'S3', + 1445:'S1', + 1446:'S2',1447:'S2', + 1448:'S1',1449:'S1',1450:'S1', + 1451:'S3', # "the stale encoding is consumed as ground" + 1452:'S1', + 1453:'S2',1454:'S2', + 1458:'S3', + 1459:'S1', + 1460:'S2',1461:'S2', + 1486:'S2',1487:'S2', + 1488:'S2', # the miscited definition + 1493:'S2', + 1494:'S1',1496:'S1',1500:'S1', + 1501:'S2', + 1502:'S3',1503:'S3',1504:'S3',1505:'S3',1506:'S3',1507:'S3',1508:'S3',1509:'S3',1510:'S3', + 1511:'S3',1512:'S3',1518:'S3', + 1519:'S2',1520:'S2',1521:'S2',1522:'S2',1523:'S2',1524:'S2', + 1525:'S3',1526:'S3', + 1527:'S1',1528:'S1',1529:'S1', + 1530:'S2', + 1532:'S1', +} diff --git a/meta/sessions/2026-08-27-ground-migration/sweep2.py b/meta/sessions/2026-08-27-ground-migration/sweep2.py new file mode 100644 index 0000000..e69cbb2 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/sweep2.py @@ -0,0 +1,25 @@ +import yaml,re,os,sys +UP='/home/user/actor-indexed-determination' +def corpus(): + c={} + for dp,dn,fns in os.walk(f'{UP}/core'): + for fn in sorted(fns): + if fn.endswith(('.md','.yaml')): + p=os.path.join(dp,fn) + try: c[os.path.relpath(p,UP)]=open(p,encoding='utf-8').read() + except: pass + return c +C=corpus() +def show(name,pre=70,post=90,filt=None,limit=400): + pat=re.compile(r'(?2 else None)) diff --git a/meta/sessions/2026-08-27-ground-migration/w0-classify.py b/meta/sessions/2026-08-27-ground-migration/w0-classify.py new file mode 100644 index 0000000..7e397fc --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/w0-classify.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +"""W0 — complete the ground audit's classification. Every occurrence, one sense or U-with-reason. + +METHOD, stated so the result is checkable rather than trusted. + +The audit (meta/ground-audit-2026-08-24.md) assigned 1,823 of 2,845 occurrences by an ordered rule +table with no default rule, and sampled 100 of the 1,022 the table did not match. This completes the +1,022 by hand, reading each occurrence in its own file rather than in the 240-character extract +window, and records one ruling per row with the reason it was taken. + +INPUT is the audit's own committed extract, meta/sessions/2026-08-24-ground-audit/classification.json, +unaltered — so the rule-assigned half is inherited exactly and only the residual moves. + +THE DECISION RULE, fixed after the first file and applied to every one after it: read the PREDICATE +APPLIED TO THE WORD, never the compound. + world predicates (obtains, varies, moves, is uncontrolled, is a dimension or region) -> S1 + store predicates (held, available, assembled, filed, cited, pinned, stale, complete) -> S2 + act predicates (read at, delivered, consulted, present, in context, bound at as-of) -> S3 + rule predicates (is a standard, determines acceptability, is the regulation) -> S4 + population preds (distribution over, evaluated over, per deployment) -> S5 +An occurrence that will not sit in exactly one sense is U, with the reason recorded, never a default. + +OUTPUT: w0-full-v2.json, sense per row over all 2,845; w0-residual.json, W0's 1,022; w0bis-rulings.json, +W0-bis's 456. + +Per-file rulings and their reasons are in rulings/r0NN.py, which this script merges. Nothing here +re-derives a sense: the rulings ARE the classification, and this file only assembles and checks them. +""" +import json, glob, importlib.util, collections, os, sys + +HERE = os.path.dirname(os.path.abspath(__file__)) +AUDIT = os.path.join(HERE, '..', '2026-08-24-ground-audit', 'classification.json') + +def load_rulings(pattern='rulings/r0*.py'): + out = {} + for f in sorted(glob.glob(os.path.join(HERE, *pattern.split('/')))): + n = os.path.basename(f)[:-3] + s = importlib.util.spec_from_file_location(n, f) + m = importlib.util.module_from_spec(s); s.loader.exec_module(m) + dup = set(out) & set(m.R) + assert not dup, f'{n} re-rules rows already ruled: {sorted(dup)[:8]}' + out.update(m.R) + return out + +def main(src, outdir): + rows = json.load(open(src)) + residual = {i for i, r in enumerate(rows) if r['rule'] == 'residual-no-rule-matched'} + R = load_rulings('rulings/r0*.py') + assert set(R) == residual, ( + f'rulings cover {len(R)} rows, residual is {len(residual)}; ' + f'unruled={sorted(residual - set(R))[:8]} over-ruled={sorted(set(R) - residual)[:8]}') + # W0-bis: the 427 prose-context rows plus the 29 anchored-class ordering corrections. + B = load_rulings('rulings-bis/b0*.py') + assert not (set(B) & residual), 'W0-bis must not overlap W0 — the residual was already read' + full = {i: (R[i] if i in R else r['sense']) for i, r in enumerate(rows)} + full.update(B) + json.dump({str(k): v for k, v in R.items()}, open(os.path.join(outdir, 'w0-residual.json'), 'w')) + json.dump({str(k): v for k, v in B.items()}, open(os.path.join(outdir, 'w0bis-rulings.json'), 'w')) + json.dump({str(k): v for k, v in full.items()}, open(os.path.join(outdir, 'w0-full-v2.json'), 'w')) + top = lambda s: s.split('-')[0] + print(f'{len(full)} classified; 0 unassigned by construction (the assert above)') + for k, v in sorted(collections.Counter(top(v) for v in full.values()).items()): + print(f' {k} {v:>5} {100*v/len(full):5.1f}%') + +if __name__ == '__main__': + main(sys.argv[1] if len(sys.argv) > 1 else AUDIT, sys.argv[2] if len(sys.argv) > 2 else HERE) diff --git a/meta/sessions/2026-08-27-ground-migration/w0-extract-head.py b/meta/sessions/2026-08-27-ground-migration/w0-extract-head.py new file mode 100644 index 0000000..e7935e3 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/w0-extract-head.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 +"""Extract every occurrence of `ground` with its context, for classification. + +One row per occurrence: repository, path, line number, artefact class, whether +the occurrence sits in an identifier or in prose, the matched token, and 120 +characters of context either side. The classifier at classify.py reads this file +and nothing else, so the classification is reproducible from a fixed extract. +""" +import os, re, json, sys + +TOKEN = re.compile(r'(?i)(?