From 7e649d0d58aeddd7b7b60e89dafb2739fb3d6092 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 29 Aug 2026 10:47:50 +0000 Subject: [PATCH 1/9] Session arrival: item 5, the ground migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The prompt and its bootstrap, committed before any repository is read for the work, per DDD-dec-20. The session's charter is thereby a repo object, quotable at each of the six gates and auditable afterwards against the commits produced. Parameters recorded in bootstrap.md: branch claude/ground-migration-item-5-jpa9tc across three repositories; base commits ce2c477 (actor-indexed-determination, which is annotated tag v5.11.0 exactly — head and tag coincide), e81a454 (decision-driven-design), d0f4297 (product-cli, read-only); six gates; principal Emil. Five package files exist in no repository and are filed under inputs/ so the charter is reconstructible. Filing them there is not filing them as canon — Q44, Q45 and Q46 remain unfiled downstream demand, and the prompt puts their filing out of scope. The two package files that duplicate the ground-audit session's committed copies are byte-identical and are not re-filed. Basis: DDD-dec-20; DDD-dec-17; DDD-delivery-02; term:delivery --- .../2026-08-27-ground-migration/bootstrap.md | 93 ++++++++ .../inputs/README.md | 52 ++++ .../act-and-verdict-ontology-explainer.md | 222 ++++++++++++++++++ .../inputs/q44-act-and-verdict-ontology.md | 212 +++++++++++++++++ .../q45-routes-and-compositional-coverage.md | 114 +++++++++ .../inputs/q46-encoding-price.md | 127 ++++++++++ .../2026-08-27-ground-migration/prompt.md | 169 +++++++++++++ meta/sessions/README.md | 1 + 8 files changed, 990 insertions(+) create mode 100644 meta/sessions/2026-08-27-ground-migration/bootstrap.md create mode 100644 meta/sessions/2026-08-27-ground-migration/inputs/README.md create mode 100644 meta/sessions/2026-08-27-ground-migration/inputs/act-and-verdict-ontology-explainer.md create mode 100644 meta/sessions/2026-08-27-ground-migration/inputs/q44-act-and-verdict-ontology.md create mode 100644 meta/sessions/2026-08-27-ground-migration/inputs/q45-routes-and-compositional-coverage.md create mode 100644 meta/sessions/2026-08-27-ground-migration/inputs/q46-encoding-price.md create mode 100644 meta/sessions/2026-08-27-ground-migration/prompt.md 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/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/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/README.md b/meta/sessions/README.md index 3ddf26e..6bfc704 100644 --- a/meta/sessions/README.md +++ b/meta/sessions/README.md @@ -33,3 +33,4 @@ session's later work exceeds the committed prompt, the excess is visible as exce | `2026-08-23-phase1a/` | Interactive canon curation — Phase 1a: the discharge partition and `DDD-measure-06` (R-1…R-4) | | `2026-08-24-ground-audit/` | Interactive audit — Phase 1b: the ground audit (D-1…D-4); changed nothing. Output: `meta/ground-audit-2026-08-24.md` | | `2026-08-25-item4/` | Interactive canon curation — item 4: status, kind, the validator and the appendix (I-1…I-4) | +| `2026-08-27-ground-migration/` | Interactive canon curation with an execution phase — item 5: the ground migration, on the ground audit's rulings (G1…G6) | From b68840205be01ce9f1351b4b408a8eb4f7e5ef3a Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 29 Aug 2026 11:09:33 +0000 Subject: [PATCH 2/9] GATE 1 (draft-pending-ruling): W0, the completed classification MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 audit's 1,022 exactly and fails if one is unruled or twice-ruled. The audit's committed extract is taken unaltered, so its rule-assigned half is inherited exactly and only the residual moves. Each of the 1,022 was read in its own file rather than in the 240-character extract window, and each carries its ruling and its reason in rulings/r001..r021.py. Findings, held for ruling, none repaired: Two boundaries moved outside the sampled 95% CI. S3 counted 147 against a [14,109] interval — full-corpus S3 rises 26%, from 331 to 417 — and S2 counted 532 against [536,731]. The S3 movement concentrates in apparatus/ (38 rows), where the sense is carried by exports, bounds, consumes and sits-on rather than by delivers or reads, which is what the rule table was looking for. Nothing in SR-1 or SR-2 turns on it; every added occurrence is a verb applied to the S1 object, which is SR-2 exactly. The definition layer is 17 settled terms and one draft, not 15. The audit named term:attribution and term:accountability, neither of which uses the word, and omitted term:tolerance, term:arrangement, term:answerability, term:capability, term:swarm-gate and the draft term:residual-discretion. The sense split stays at four, and term:tolerance (S1) and term:arrangement (S2) both sit in 00-primitives.md. Four things a sample could not have seen: a sixth object under the word (the RDF/logic `ground term`, 11 occurrences) and a seventh (the CSS surface colour, 6); `ground channel` occurs 10 times and not zero as reported, one of them inside term:arrangement's settled canonical text; the Danish glossary glosses both senses in one entry, so the defect is translated; and the audit counted its own session-index line, so the corpus at its read commits is 2,843. Cost columns re-derived exact over all 2,845: canonical text is 222, not 240. The corpus at head is 2,976, +133 over 11 files, of which upstream README.md is the only surface needing attention. Validators green: validate-core-order.py exit 0 zero W4; validate-claims.py exit 0 with the 6 documented downstream warnings. Basis: DDD-dec-20; DDD-ground-02; DDD-ground-05; term:ground; term:admission-test; term:delivery; term:undelivered; term:closure; term:arrangement --- .../gate1-classification.md | 274 ++++++++++++++++++ .../rulings/r001.py | 34 +++ .../rulings/r002.py | 7 + .../rulings/r003.py | 25 ++ .../rulings/r004.py | 19 ++ .../rulings/r005.py | 21 ++ .../rulings/r006.py | 13 + .../rulings/r007.py | 9 + .../rulings/r008.py | 7 + .../rulings/r009.py | 8 + .../rulings/r010.py | 6 + .../rulings/r011.py | 9 + .../rulings/r012.py | 7 + .../rulings/r013.py | 10 + .../rulings/r014.py | 15 + .../rulings/r015.py | 41 +++ .../rulings/r016.py | 33 +++ .../rulings/r017.py | 34 +++ .../rulings/r018.py | 45 +++ .../rulings/r019.py | 48 +++ .../rulings/r020.py | 39 +++ .../rulings/r021.py | 33 +++ .../w0-classify.py | 60 ++++ .../w0-extract-head.py | 113 ++++++++ .../2026-08-27-ground-migration/w0-full.json | 1 + .../w0-residual.json | 1 + 26 files changed, 912 insertions(+) create mode 100644 meta/sessions/2026-08-27-ground-migration/gate1-classification.md create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r001.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r002.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r003.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r004.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r005.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r006.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r007.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r008.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r009.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r010.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r011.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r012.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r013.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r014.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r015.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r016.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r017.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r018.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r019.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r020.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings/r021.py create mode 100644 meta/sessions/2026-08-27-ground-migration/w0-classify.py create mode 100644 meta/sessions/2026-08-27-ground-migration/w0-extract-head.py create mode 100644 meta/sessions/2026-08-27-ground-migration/w0-full.json create mode 100644 meta/sessions/2026-08-27-ground-migration/w0-residual.json 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/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/w0-classify.py b/meta/sessions/2026-08-27-ground-migration/w0-classify.py new file mode 100644 index 0000000..fe6f6a6 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/w0-classify.py @@ -0,0 +1,60 @@ +#!/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.json, sense per row over all 2,845; w0-residual.json, the 1,022 rulings alone. + +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(): + out = {} + for f in sorted(glob.glob(os.path.join(HERE, 'rulings', 'r0*.py'))): + 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() + 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]}') + full = {i: (R[i] if i in R else r['sense']) for i, r in enumerate(rows)} + 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 full.items()}, open(os.path.join(outdir, 'w0-full.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)(? Date: Sun, 30 Aug 2026 05:56:21 +0000 Subject: [PATCH 3/9] GATE 1 ruled: the erratum, and the plan's inbox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Emil's GATE 1 ruling, recorded as two artefacts rather than as prose in a report. meta/ground-audit-2026-08-24-erratum.md files the three corrections as an erratum beside the audit, not as a repair to it: the audit is a merged artefact and its history is not edited. E-1 gives the definition layer at 17 settled terms and one draft, with both directions stated — term:attribution and term:accountability named but using the word zero times, six omitted that use it — and notes that the correction makes the finding worse, since term:tolerance (S1) and term:arrangement (S2) are both established by 00-primitives.md. E-2 records ground channel at 10 occurrences, one inside term:arrangement's settled canonical text, against the audit's reported zero. E-3 records the third self-count and the corpus at 2,843 at the audit's own read commits. What is not corrected is stated: the four rulings, the cost analysis, the wave shape, the §7/Q27 report, and the central finding, which the full pass corroborated. The erratum carries no pointer from the audit, because filing one would edit the merged artefact. Raised at Gate 2 rather than decided here. meta/sessions/2026-08-27-ground-migration/gate4-carry.md opens the plan's inbox with seven items: apparatus/'s W3 booking re-examined rather than inherited; why the S3 estimate was low, recorded as the rule table under-sampling the vocabulary of delivery rather than the boundary being wrong; ground channel as a surface the plan was told it lacked; the i18n pass booked or deferred by name; upstream README.md fixed in this migration because it is the transfer's front door; SR-4's warrant, the five occurrences naming two senses in one phrase that no rename can reach; and the head delta classified at Gate 4. Basis: DDD-dec-20; term:arrangement; term:tolerance; term:capability; term:answerability; term:swarm-gate; term:residual-discretion; DDD-ground-02 --- meta/ground-audit-2026-08-24-erratum.md | 114 ++++++++++++++++++ .../gate4-carry.md | 86 +++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 meta/ground-audit-2026-08-24-erratum.md create mode 100644 meta/sessions/2026-08-27-ground-migration/gate4-carry.md 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/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..da412ed --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/gate4-carry.md @@ -0,0 +1,86 @@ +# 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 470991f15ec67f3377631005a90adc1ef5e43ac0 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 30 Aug 2026 06:07:05 +0000 Subject: [PATCH 4/9] GATE 2 (draft-pending-ruling): both sweeps, with costs, repairing nothing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One pass over the 62 registry entries carrying canonical text. Sweep 1, assert-not-define: 41 define, 11 are mixed (the repaired term:floor shape), 10 assert. Graded by how far the definition sits from the reader: three have no definition anywhere, in the registry or the establishing document (term:seam, term:composite-actor, term:projection); two have an ungoverned definition already in the document, the exact F-1 shape (term:training, term:ensemble-actor); five carry a definition subordinated to the assertion. The cost is the finding: 30 of the 62 are pinned downstream and not one of the ten is, so the batch fires no pin advance and needs no DDD-dec-29-class decision. F-1 was expensive because term:floor is pinned. Sweep 2, name collisions: five live, one already retired, one already governed. mechanical is confirmed: a store (term:mechanical, settled, 01) and a delivery mode (term:delivery, draft, 13). The registry registers the overloaded compound as an alias, 13-delivery.md's contract requires the store sense and establishes the delivery sense in one file, and DDD-dec-30 already states the discipline this violates. Both terms are pinned, so either repair fires; the delivery value is ~49 occurrences at draft and the store ~340 at settled, so the recommendation is to repair the newer object. act-triggered is checked, clear, and already canon's own gloss at DDD-cost-09 — reuse rather than minting. judgment is confirmed and already closed. The mode was DDD-frame-15's, not DDD-frame-17's, DDD-frame-15 is retired, and DDD-dec-30 records the collision in canon's own words. Cost zero; the residue is historical and must not migrate. Two new: projection (the compound's axes against the projection layer, which appears inside term:verdict's settled canonical text) and verdict (the induced assignment against the per-act verdict in term:act-individuation and term:outcome — a function against a value of it, three settled entries, one document). Both unpinned. maturation is reported as the pricing precedent: DDD-dec-21's shadow, declared, with the escape located in the id-allocation mechanism rather than the model. posterior: the required check is reported and it fires. No registry name collides, but prior is live in the Bayesian sense in four places including ratified canon (DDD-measure-05), and term:calibration-ledger is the estimator in that same prior-update pipeline. Third attempt, third check. Moot under the recommendation, since repairing the delivery side leaves the store its word. Basis: DDD-dec-29; DDD-dec-30; DDD-dec-21; DDD-frame-15; DDD-frame-17; DDD-cost-09; DDD-measure-05; term:mechanical; term:delivery; term:judgment; term:verdict; term:outcome; term:act-individuation; term:projection; term:seam; term:floor --- .../gate2-collision-sweep.md | 322 ++++++++++++++++++ .../gate4-carry.md | 67 ++++ .../2026-08-27-ground-migration/sweep2.py | 25 ++ 3 files changed, 414 insertions(+) create mode 100644 meta/sessions/2026-08-27-ground-migration/gate2-collision-sweep.md create mode 100644 meta/sessions/2026-08-27-ground-migration/sweep2.py 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/gate4-carry.md b/meta/sessions/2026-08-27-ground-migration/gate4-carry.md index da412ed..eb319e3 100644 --- a/meta/sessions/2026-08-27-ground-migration/gate4-carry.md +++ b/meta/sessions/2026-08-27-ground-migration/gate4-carry.md @@ -84,3 +84,70 @@ repair for occurrences no rename could reach. **+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. 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)) From 8d711e81e918185d0b51da24ac6ba74b75bd1ff6 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 30 Aug 2026 06:57:39 +0000 Subject: [PATCH 5/9] GATE 3 (draft-pending-ruling): the reconciliation settles; W0-bis blocks Gate 4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Part 1. The candidate reconciliation was tested against every occurrence rather than assumed, and it survives in a narrowed form. Of 17 rows the anchored institutional-ground rule assigns, 2 are it catching a neighbouring list item, so 15 are genuine — the audit reported 13, and its claim that zero are in upstream canon holds exactly. Eleven are meta-mentions naming the category. All four actual uses denote a representation supplied by an authority: a country-rules table's coverage, "computed by rule from institutional ground" (canon separating procedure from data in one sentence), a serialiser's defaults owned by someone else, and what counts as a secret. The three statute-and-contract cases outside the compound resolve the same way — the determination track cites "the statutory minimum for the records class", a value read from the statute with a provenance and a date. So the corpus contains no use of ground for a rule's normative force, and §7 repairs a defect it does not have. The collision is one mis-listed word: the foundation slot reads "supplied through rules, conventions, authority, or social practice", which puts a content kind inside a list of supply channels. Strike `rules` and the slot is coherent. SR-4 then makes the slot unnecessary, because institutional becomes an attribute a record carries and the trust decision backs it. Q27 does not file onto a dissolving category; it files onto the only one that was ever occupied. S4 does not survive as a sense — four senses plus attributes. Part 2, and it is the larger finding. G3 required reading the S4 set, which showed it wrong, and tracing why showed the inherited rule-assigned half is not uniform in quality. A seeded 60-row sample, hand-read in place: anchored rules 39 of 39 correct; prose-context rules 6 of 21. Two of the eight prose rules were adjudicated in full and confirm the rate — rule-standard-context 11 of 13 wrong, distribution-context 4 of 9. Roughly 305 of 427 rows are suspect, concentrated in accessible-available and reading-ground, which are 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, SR-1 and 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. Three options priced; recommended is to run W0-bis (427 rows, 42% of W0) before the plan. Also recorded: GATE 2's dispositions in gate4-carry.md, and the erratum forward reference filed in meta/ground-audit-2026-08-24.md per Q-1. Basis: DDD-dec-20; DDD-dec-26; DDD-ground-02; term:delivery; term:undelivered; term:closure; term:presumed-discharge --- meta/ground-audit-2026-08-24.md | 9 + .../gate3-reconciliation.md | 193 ++++++++++++++++++ .../gate4-carry.md | 56 +++++ 3 files changed, 258 insertions(+) create mode 100644 meta/sessions/2026-08-27-ground-migration/gate3-reconciliation.md 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/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/gate4-carry.md b/meta/sessions/2026-08-27-ground-migration/gate4-carry.md index eb319e3..f480e18 100644 --- a/meta/sessions/2026-08-27-ground-migration/gate4-carry.md +++ b/meta/sessions/2026-08-27-ground-migration/gate4-carry.md @@ -151,3 +151,59 @@ artefact. Leaving it is `term:undelivered`'s shape exactly. **Q-2** a `denominat 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 561700db930bf25abc39411a6d3c10a5f6a185d2 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 30 Aug 2026 11:24:49 +0000 Subject: [PATCH 6/9] W0-bis (draft-pending-ruling): the classification is whole MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 427 prose-context rows re-read in their own files, plus 29 anchored-class ordering corrections. w0-classify.py now merges both ruling sets and asserts they do not overlap and that nothing is unruled. First, a correction to GATE 3. I reported the prose-context class at 29% correct from a 21-row sample. Measured over all 427 it is 71.7%. The sample drew a tenth of itself from two rules that are 22 of 427 rows, and I mis-ruled four ground-provenance rows in it — naming the provenance axis is S2, and only a subject characterised by the enumeration spans senses. Option A still holds on the corrected number, because 146 rows changed sense, but the number was wrong. The class is not uniformly bad; two rules are. `delivered` is 7% correct and `rule-standard-context` 15%, supplying 49 of 121 errors from 54 rows, while the two largest rules are 91% and 84%. `delivered` fails because the v5.5.0 descriptor, the CHANGELOG and core/13-delivery.md all name the ground area and the delivery area in one breath, so thirteen identifiers and the area name became the delivered sense. The anchored-class reopening happened and closes. The mechanism is rule ordering, not window width: ddd-ground-id is last in a first-match-wins table, which produced 15 stolen identifier rows and 13 inverse steals. Both sets were enumerated mechanically over the whole corpus rather than sampled, so the family is closed by construction. The true identifier count is 142, not 116, and all 142 now classify U. A second seeded anchored sample of 35 found 2 errors, both of the named mechanisms; combined with the first, 72 of 74 correct. Corrected classification: S2 1529, S1 567, S3 369, U 261, S5 97, S4 22. A sense boundary moved a second time. S3 gives back 48 of the 86 it gained at GATE 1 and lands at +11% over the audit rather than +26% — my GATE 1 figure was inflated by the two broken rules. The finding survives, SR-2 is untouched, and apparatus/ remains the largest contributor of added S3. The largest movement is S1: +79 (+16%), and upstream canon is now S1-led at 182 against 154. Nobody predicted it and 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. Canon's S4 is exactly zero, mechanically, agreeing with GATE 3 Part 1's independent reading. Compound purity improved: reading ground 96% to 100% S3, accessible ground 85% to 100% S2. The method rule is recorded for the manifest. Basis: DDD-dec-20; DDD-ground-02; DDD-ground-05; term:delivery; term:actor; term:act; term:residual-discretion --- .../gate3-w0bis.md | 199 ++++++++++++++++++ .../gate4-carry.md | 47 +++++ .../rulings-bis/b001.py | 7 + .../rulings-bis/b002.py | 6 + .../rulings-bis/b003.py | 8 + .../rulings-bis/b004.py | 29 +++ .../rulings-bis/b005.py | 24 +++ .../rulings-bis/b006.py | 38 ++++ .../rulings-bis/b007.py | 13 ++ .../rulings-bis/b008.py | 14 ++ .../rulings-bis/b009.py | 17 ++ .../w0-classify.py | 16 +- .../w0-full-v2.json | 1 + .../w0bis-rulings.json | 1 + .../w0bis-scope.json | 1 + 15 files changed, 416 insertions(+), 5 deletions(-) create mode 100644 meta/sessions/2026-08-27-ground-migration/gate3-w0bis.md create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings-bis/b001.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings-bis/b002.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings-bis/b003.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings-bis/b004.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings-bis/b005.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings-bis/b006.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings-bis/b007.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings-bis/b008.py create mode 100644 meta/sessions/2026-08-27-ground-migration/rulings-bis/b009.py create mode 100644 meta/sessions/2026-08-27-ground-migration/w0-full-v2.json create mode 100644 meta/sessions/2026-08-27-ground-migration/w0bis-rulings.json create mode 100644 meta/sessions/2026-08-27-ground-migration/w0bis-scope.json 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 index f480e18..f2bd3cc 100644 --- a/meta/sessions/2026-08-27-ground-migration/gate4-carry.md +++ b/meta/sessions/2026-08-27-ground-migration/gate4-carry.md @@ -207,3 +207,50 @@ 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/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/w0-classify.py b/meta/sessions/2026-08-27-ground-migration/w0-classify.py index fe6f6a6..7e397fc 100644 --- a/meta/sessions/2026-08-27-ground-migration/w0-classify.py +++ b/meta/sessions/2026-08-27-ground-migration/w0-classify.py @@ -20,7 +20,8 @@ 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.json, sense per row over all 2,845; w0-residual.json, the 1,022 rulings alone. +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. @@ -30,9 +31,9 @@ HERE = os.path.dirname(os.path.abspath(__file__)) AUDIT = os.path.join(HERE, '..', '2026-08-24-ground-audit', 'classification.json') -def load_rulings(): +def load_rulings(pattern='rulings/r0*.py'): out = {} - for f in sorted(glob.glob(os.path.join(HERE, 'rulings', 'r0*.py'))): + 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) @@ -44,13 +45,18 @@ def load_rulings(): 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() + 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 full.items()}, open(os.path.join(outdir, 'w0-full.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()): diff --git a/meta/sessions/2026-08-27-ground-migration/w0-full-v2.json b/meta/sessions/2026-08-27-ground-migration/w0-full-v2.json new file mode 100644 index 0000000..551d315 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/w0-full-v2.json @@ -0,0 +1 @@ +{"0": "S1", "1": "S1", "2": "U", "3": "S2", "4": "U-mention", "5": "S1", "6": "U", "7": "U-mention", "8": "U", "9": "U-mention", "10": "U", "11": "S1", "12": "S1", "13": "S1", "14": "S1", "15": "S1", "16": "U", "17": "U", "18": "S1", "19": "S1", "20": "S2", "21": "U-mention", "22": "U-idname", "23": "U-idname", "24": "U-idname", "25": "U-idname", "26": "S1", "27": "U", "28": "U-mention", "29": "U", "30": "S2", "31": "S3", "32": "S3", "33": "S3", "34": "S2", "35": "S5", "36": "S5", "37": "S1", "38": "S1", "39": "S3", "40": "S3", "41": "S3", "42": "S1", "43": "S1", "44": "S5", "45": "S5", "46": "S3", "47": "S1", "48": "U-idname", "49": "U", "50": "U", "51": "U", "52": "U-ordinary", "53": "U-idname", "54": "S2", "55": "S1", "56": "U-ordinary", "57": "S3", "58": "S3", "59": "S3", "60": "S3", "61": "S3", "62": "S1", "63": "S1", "64": "S2", "65": "S2", "66": "S2", "67": "S2", "68": "S2", "69": "S5", "70": "S1", "71": "S1", "72": "S1", "73": "S1", "74": "S3", "75": "S3", "76": "S3", "77": "S3", "78": "S3", "79": "S1", "80": "S1", "81": "S3", "82": "S1", "83": "S3", "84": "S3", "85": "S3", "86": "S3", "87": "S3", "88": "S3", "89": "S3", "90": "S2", "91": "S2", "92": "S3", "93": "S3", "94": "S3", "95": "S3", "96": "S3", "97": "S3", "98": "S3", "99": "S3", "100": "S3", "101": "S3", "102": "S3", "103": "S3", "104": "S3", "105": "S2", "106": "S2", "107": "S3", "108": "S3", "109": "S3", "110": "S3", "111": "S1", "112": "S1", "113": "S3", "114": "S2", "115": "S3", "116": "S3", "117": "S3", "118": "S1", "119": "S3", "120": "S1", "121": "S3", "122": "S1", "123": "S5", "124": "S1", "125": "S1", "126": "S2", "127": "S1", "128": "U-idname", "129": "U", "130": "S2", "131": "S1", "132": "S1", "133": "S1", "134": "S1", "135": "S1", "136": "S3", "137": "S1", "138": "S1", "139": "S1", "140": "S1", "141": "S1", "142": "S1", "143": "S3", "144": "S1", "145": "S3", "146": "S1", "147": "S1", "148": "S1", "149": "S1", "150": "S1", "151": "S2", "152": "S2", "153": "S1", "154": "S1", "155": "S3", "156": "S3", "157": "S3", "158": "S3", "159": "S3", "160": "S2", "161": "S3", "162": "S3", "163": "S3", "164": "S1", "165": "S2", "166": "S1", "167": "S5", "168": "U-idname", "169": "U-idname", "170": "S3", "171": "S3", "172": "S1", "173": "S5", "174": "S3", "175": "S3", "176": "S3", "177": "S1", "178": "S1", "179": "S1", "180": "S3", "181": "S1", "182": "S3", "183": "S3", "184": "S3", "185": "S3", "186": "S3", "187": "S2", "188": "S3", "189": "S1", "190": "S2", "191": "S1", "192": "S1", "193": "S3", "194": "S1", "195": "U", "196": "S1", "197": "S3", "198": "S1", "199": "S1", "200": "S1", "201": "S1", "202": "S2", "203": "U-idiom", "204": "S2", "205": "S3", "206": "S3", "207": "S1", "208": "S1", "209": "S3", "210": "S3", "211": "S1", "212": "S2", "213": "S3", "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", "228": "S1", "229": "S3", "230": "S1", "231": "S3", "232": "S3", "233": "S3", "234": "S3", "235": "S3", "236": "S3", "237": "S3", "238": "S3", "239": "S3", "240": "S2", "241": "U-ordinary", "242": "S2", "243": "S3", "244": "S3", "245": "S3", "246": "S3", "247": "S3", "248": "S3", "249": "S2", "250": "S3", "251": "S1", "252": "S1", "253": "S1", "254": "S1", "255": "S1", "256": "S1", "257": "S1", "258": "S1", "259": "S1", "260": "S3", "261": "S3", "262": "S3", "263": "S3", "264": "S3", "265": "S3", "266": "S3", "267": "S3", "268": "S3", "269": "S3", "270": "S3", "271": "S3", "272": "S5", "273": "S5", "274": "S1", "275": "S1", "276": "S5", "277": "S1", "278": "S3", "279": "S2", "280": "S2", "281": "S5", "282": "U-idiom", "283": "S2", "284": "S1", "285": "S2", "286": "U", "287": "S5", "288": "S5", "289": "S5", "290": "S5", "291": "S5", "292": "S5", "293": "S5", "294": "S5", "295": "S3", "296": "S3", "297": "S2", "298": "S1", "299": "S1", "300": "S3", "301": "S1", "302": "S1", "303": "S2", "304": "S1", "305": "S2", "306": "S1", "307": "S2", "308": "S1", "309": "S2", "310": "S1", "311": "S1", "312": "S1", "313": "S1", "314": "S1", "315": "S3", "316": "S3", "317": "S1", "318": "S3", "319": "S1", "320": "S1", "321": "S1", "322": "S3", "323": "S2", "324": "S2", "325": "S2", "326": "U-missing", "327": "S3", "328": "S1", "329": "S1", "330": "S1", "331": "S1", "332": "S1", "333": "S1", "334": "S1", "335": "S3", "336": "S1", "337": "S2", "338": "S1", "339": "S3", "340": "S3", "341": "S3", "342": "S3", "343": "S3", "344": "S3", "345": "S1", "346": "S3", "347": "S2", "348": "S1", "349": "S5", "350": "S3", "351": "S3", "352": "S3", "353": "S3", "354": "S1", "355": "S3", "356": "S3", "357": "S1", "358": "S1", "359": "S1", "360": "S1", "361": "S2", "362": "S2", "363": "S5", "364": "S5", "365": "S5", "366": "S5", "367": "S5", "368": "S5", "369": "S5", "370": "S5", "371": "S5", "372": "S5", "373": "S5", "374": "S5", "375": "S1", "376": "S1", "377": "S1", "378": "S1", "379": "S1", "380": "S1", "381": "S1", "382": "S3", "383": "S2", "384": "S3", "385": "S3", "386": "S2", "387": "S2", "388": "U", "389": "S1", "390": "S1", "391": "S2", "392": "S2", "393": "S2", "394": "U-ordinary", "395": "S2", "396": "S2", "397": "S2", "398": "S5", "399": "U-idiom", "400": "S5", "401": "S2", "402": "S2", "403": "S1", "404": "U-missing", "405": "S2", "406": "S3", "407": "S3", "408": "S2", "409": "S1", "410": "S3", "411": "S3", "412": "S1", "413": "S1", "414": "S1", "415": "S2", "416": "S2", "417": "S2", "418": "S1", "419": "U-missing", "420": "U-ordinary", "421": "S5", "422": "U-idname", "423": "S2", "424": "S2", "425": "S1", "426": "U", "427": "U", "428": "S1", "429": "S1", "430": "S1", "431": "S2", "432": "U-idname", "433": "U", "434": "U-idname", "435": "U-idname", "436": "S1", "437": "U", "438": "S1", "439": "S1", "440": "S2", "441": "S1", "442": "S1", "443": "S3", "444": "S5", "445": "S5", "446": "S5", "447": "S5", "448": "S5", "449": "S1", "450": "S3", "451": "S3", "452": "S3", "453": "S3", "454": "S3", "455": "S1", "456": "S3", "457": "S1", "458": "S3", "459": "S5", "460": "S1", "461": "S1", "462": "S1", "463": "S1", "464": "S1", "465": "U", "466": "S1", "467": "S1", "468": "S1", "469": "S1", "470": "S1", "471": "S3", "472": "S1", "473": "U", "474": "U", "475": "U", "476": "U", "477": "U", "478": "S1", "479": "U-ordinary", "480": "U-mention", "481": "S1", "482": "U", "483": "S1", "484": "U-idname", "485": "U", "486": "U", "487": "U", "488": "S1", "489": "S1", "490": "S1", "491": "S1", "492": "S1", "493": "S1", "494": "U", "495": "S1", "496": "S1", "497": "U", "498": "S2", "499": "S2", "500": "S2", "501": "S1", "502": "S1", "503": "S2", "504": "S1", "505": "S3", "506": "S3", "507": "S1", "508": "S1", "509": "S1", "510": "S1", "511": "S1", "512": "S1", "513": "S3", "514": "S3", "515": "S3", "516": "S1", "517": "S3", "518": "S3", "519": "S1", "520": "U-multi", "521": "S1", "522": "S3", "523": "S2", "524": "S1", "525": "S1", "526": "S2", "527": "S2", "528": "S3", "529": "S3", "530": "S3", "531": "S3", "532": "S3", "533": "S1", "534": "S1", "535": "S1", "536": "U", "537": "S2", "538": "S2", "539": "S1", "540": "S2", "541": "S1", "542": "S1", "543": "S1", "544": "S1", "545": "S3", "546": "S1", "547": "S1", "548": "S3", "549": "S3", "550": "S1", "551": "U-ordinary", "552": "S1", "553": "S3", "554": "S3", "555": "S3", "556": "S3", "557": "S3", "558": "S2", "559": "S3", "560": "S1", "561": "U", "562": "U", "563": "U", "564": "U", "565": "S3", "566": "S1", "567": "S2", "568": "U", "569": "S1", "570": "U", "571": "U", "572": "U", "573": "S3", "574": "U", "575": "U", "576": "S1", "577": "S1", "578": "S1", "579": "S1", "580": "S1", "581": "S1", "582": "S1", "583": "S1", "584": "S1", "585": "S2", "586": "S1", "587": "U-missing", "588": "S1", "589": "U-missing", "590": "S1", "591": "U-idname", "592": "U", "593": "S2", "594": "S2", "595": "S3", "596": "U-missing", "597": "S3", "598": "S3", "599": "S1", "600": "S2", "601": "S2", "602": "S2", "603": "S3", "604": "S3", "605": "S3", "606": "S3", "607": "S3", "608": "S3", "609": "S1", "610": "S2", "611": "S2", "612": "S2", "613": "S2", "614": "S3", "615": "S2", "616": "S2", "617": "S1", "618": "S2", "619": "S2", "620": "S1", "621": "U", "622": "U-idname", "623": "S2", "624": "S2", "625": "S2", "626": "S2", "627": "S4", "628": "S2", "629": "S2", "630": "S1", "631": "S5", "632": "U-ordinary", "633": "S5", "634": "S2", "635": "U-ordinary", "636": "S1", "637": "S3", "638": "S3", "639": "S2", "640": "U-ordinary", "641": "U-ordinary", "642": "S1", "643": "S1", "644": "S2", "645": "S3", "646": "S3", "647": "S3", "648": "S3", "649": "S3", "650": "S3", "651": "S1", "652": "S5", "653": "S5", "654": "U", "655": "S1", "656": "U", "657": "S2", "658": "U", "659": "S1", "660": "S1", "661": "S1", "662": "S1", "663": "S1", "664": "S1", "665": "S1", "666": "S1", "667": "S3", "668": "S1", "669": "S1", "670": "S2", "671": "S2", "672": "S2", "673": "S2", "674": "S1", "675": "S1", "676": "S1", "677": "U-idiom", "678": "U-idiom", "679": "S1", "680": "S1", "681": "S1", "682": "S1", "683": "S1", "684": "S1", "685": "S2", "686": "S1", "687": "U", "688": "U", "689": "U", "690": "U", "691": "U", "692": "U", "693": "S1", "694": "S1", "695": "U-mention", "696": "U-mention", "697": "U-idname", "698": "U", "699": "S1", "700": "U", "701": "U", "702": "S1", "703": "U", "704": "U", "705": "U", "706": "U", "707": "S1", "708": "U-idname", "709": "U", "710": "S1", "711": "U", "712": "S1", "713": "U-idname", "714": "S1", "715": "U", "716": "U", "717": "U", "718": "U", "719": "U", "720": "S1", "721": "S1", "722": "U-mention", "723": "U", "724": "U", "725": "U", "726": "U", "727": "U", "728": "U", "729": "S1", "730": "S1", "731": "S1", "732": "S2", "733": "S2", "734": "S1", "735": "S1", "736": "S1", "737": "S1", "738": "S1", "739": "S1", "740": "S1", "741": "S1", "742": "S1", "743": "S1", "744": "S1", "745": "S1", "746": "S1", "747": "S1", "748": "S3", "749": "S3", "750": "S1", "751": "S2", "752": "S2", "753": "S3", "754": "S3", "755": "S3", "756": "S3", "757": "S1", "758": "S1", "759": "S1", "760": "S2", "761": "S1", "762": "S1", "763": "S1", "764": "S3", "765": "S3", "766": "S1", "767": "S1", "768": "S1", "769": "S3", "770": "S1", "771": "S1", "772": "S1", "773": "S1", "774": "S1", "775": "S2", "776": "S3", "777": "S1", "778": "S1", "779": "S1", "780": "S1", "781": "U-ordinary", "782": "S3", "783": "S3", "784": "S1", "785": "S1", "786": "S1", "787": "S1", "788": "S1", "789": "S1", "790": "S1", "791": "S1", "792": "S4", "793": "S4", "794": "S2", "795": "S2", "796": "S2", "797": "S2", "798": "S2", "799": "S2", "800": "S2", "801": "S2", "802": "S2", "803": "S2", "804": "S1", "805": "S1", "806": "S1", "807": "S1", "808": "S2", "809": "S3", "810": "S3", "811": "S3", "812": "S2", "813": "S2", "814": "S2", "815": "S1", "816": "S3", "817": "S2", "818": "S2", "819": "S2", "820": "S2", "821": "S2", "822": "S2", "823": "S2", "824": "S2", "825": "S1", "826": "S2", "827": "S3", "828": "S1", "829": "S3", "830": "S3", "831": "S1", "832": "S1", "833": "S1", "834": "S4", "835": "S1", "836": "S5", "837": "S1", "838": "S3", "839": "S2", "840": "S1", "841": "S1", "842": "S1", "843": "S2", "844": "S3", "845": "S3", "846": "S1", "847": "S1", "848": "S1", "849": "S1", "850": "S1", "851": "S1", "852": "S1", "853": "S4", "854": "S2", "855": "S2", "856": "S2", "857": "S1", "858": "U-ordinary", "859": "S1", "860": "S1", "861": "S1", "862": "U-ordinary", "863": "S1", "864": "U-ordinary", "865": "S1", "866": "S1", "867": "S3", "868": "S2", "869": "S1", "870": "S3", "871": "S1", "872": "S3", "873": "S1", "874": "S1", "875": "S1", "876": "S1", "877": "S1", "878": "S1", "879": "S4", "880": "S4", "881": "S1", "882": "S2", "883": "S3", "884": "S2", "885": "S2", "886": "S3", "887": "S2", "888": "S5", "889": "S1", "890": "S1", "891": "S1", "892": "S1", "893": "S2", "894": "S2", "895": "U-ordinary", "896": "S2", "897": "S2", "898": "S2", "899": "U-selfcount", "900": "U-selfcount", "901": "S2", "902": "S1", "903": "U-ordinary", "904": "U-ordinary", "905": "S3", "906": "S5", "907": "S1", "908": "S5", "909": "S1", "910": "U-mention", "911": "U-mention", "912": "S2", "913": "S2", "914": "U-multi", "915": "S2", "916": "S2", "917": "S2", "918": "S2", "919": "S1", "920": "S2", "921": "S4", "922": "S1", "923": "S1", "924": "U-ordinary", "925": "S2", "926": "S2", "927": "S1", "928": "S1", "929": "S1", "930": "S1", "931": "U-idname", "932": "S2", "933": "S2", "934": "S2", "935": "U-missing", "936": "S1", "937": "S1", "938": "S1", "939": "S2", "940": "U-missing", "941": "S2", "942": "S2", "943": "S1", "944": "S1", "945": "U-idname", "946": "S2", "947": "S2", "948": "S1", "949": "S2", "950": "S3", "951": "S4", "952": "S2", "953": "S3", "954": "S2", "955": "S1", "956": "S2", "957": "S1", "958": "S1", "959": "S1", "960": "S1", "961": "S1", "962": "S1", "963": "S2", "964": "S2", "965": "S2", "966": "S2", "967": "S1", "968": "S1", "969": "U-ordinary", "970": "S1", "971": "S1", "972": "S3", "973": "S5", "974": "S1", "975": "S2", "976": "S1", "977": "S1", "978": "U-ordinary", "979": "S3", "980": "S1", "981": "S3", "982": "S5", "983": "S1", "984": "S2", "985": "S2", "986": "U", "987": "S1", "988": "U-idname", "989": "S1", "990": "S1", "991": "U-idname", "992": "S2", "993": "S2", "994": "U-ordinary", "995": "S2", "996": "U", "997": "U", "998": "U-ordinary", "999": "U", "1000": "U-idname", "1001": "S1", "1002": "S4", "1003": "S4", "1004": "S1", "1005": "S2", "1006": "S1", "1007": "S2", "1008": "U", "1009": "S1", "1010": "U-idname", "1011": "S1", "1012": "S2", "1013": "U-idname", "1014": "S1", "1015": "S1", "1016": "U-idname", "1017": "S1", "1018": "S1", "1019": "S2", "1020": "S2", "1021": "U-missing", "1022": "S1", "1023": "S1", "1024": "S2", "1025": "S2", "1026": "S2", "1027": "S2", "1028": "S2", "1029": "S1", "1030": "S1", "1031": "S1", "1032": "S1", "1033": "S1", "1034": "U-multi", "1035": "S1", "1036": "S2", "1037": "S4", "1038": "S4", "1039": "S4", "1040": "S1", "1041": "S1", "1042": "S2", "1043": "S2", "1044": "S2", "1045": "S1", "1046": "S2", "1047": "S1", "1048": "S2", "1049": "S1", "1050": "S2", "1051": "S1", "1052": "S2", "1053": "S2", "1054": "S1", "1055": "S2", "1056": "U-missing", "1057": "S2", "1058": "S1", "1059": "U-missing", "1060": "S1", "1061": "S2", "1062": "S4", "1063": "S2", "1064": "S2", "1065": "S1", "1066": "S3", "1067": "S3", "1068": "S3", "1069": "S1", "1070": "S1", "1071": "S1", "1072": "S3", "1073": "S3", "1074": "S1", "1075": "S3", "1076": "S3", "1077": "S3", "1078": "S3", "1079": "S3", "1080": "S3", "1081": "S3", "1082": "U-ordinary", "1083": "S5", "1084": "U-idiom", "1085": "S2", "1086": "S3", "1087": "S3", "1088": "S3", "1089": "S3", "1090": "S3", "1091": "S1", "1092": "S3", "1093": "S3", "1094": "S5", "1095": "S3", "1096": "S3", "1097": "U-mention", "1098": "S2", "1099": "S2", "1100": "S5", "1101": "S2", "1102": "S3", "1103": "S1", "1104": "S2", "1105": "S2", "1106": "S3", "1107": "S3", "1108": "S3", "1109": "S3", "1110": "S1", "1111": "U-mention", "1112": "S2", "1113": "U-missing", "1114": "S3", "1115": "S2", "1116": "S2", "1117": "S1", "1118": "S1", "1119": "S3", "1120": "S3", "1121": "S3", "1122": "S1", "1123": "U-mention", "1124": "S1", "1125": "S3", "1126": "S1", "1127": "S1", "1128": "S3", "1129": "S3", "1130": "S3", "1131": "S1", "1132": "U-multi", "1133": "S1", "1134": "S2", "1135": "S1", "1136": "U-mention", "1137": "S3", "1138": "S1", "1139": "S1", "1140": "S1", "1141": "S2", "1142": "S2", "1143": "S2", "1144": "S2", "1145": "S1", "1146": "S1", "1147": "S1", "1148": "S1", "1149": "S1", "1150": "U-idname", "1151": "S1", "1152": "S1", "1153": "S2", "1154": "U", "1155": "U", "1156": "U-idname", "1157": "S2", "1158": "U-multi", "1159": "U-multi", "1160": "S1", "1161": "U-multi", "1162": "S2", "1163": "S1", "1164": "S1", "1165": "S2", "1166": "U-missing", "1167": "S1", "1168": "S1", "1169": "S2", "1170": "S2", "1171": "S4", "1172": "S2", "1173": "S2", "1174": "S2", "1175": "S3", "1176": "S5", "1177": "S1", "1178": "S2", "1179": "S2", "1180": "S2", "1181": "S3", "1182": "S1", "1183": "S3", "1184": "S5", "1185": "S1", "1186": "S1", "1187": "S1", "1188": "S2", "1189": "S1", "1190": "S1", "1191": "S2", "1192": "S1", "1193": "S1", "1194": "S2", "1195": "S4", "1196": "S4", "1197": "S2", "1198": "U-idname", "1199": "U-idname", "1200": "S2", "1201": "S2", "1202": "S2", "1203": "S1", "1204": "S2", "1205": "S2", "1206": "S3", "1207": "S2", "1208": "S2", "1209": "S2", "1210": "S1", "1211": "S2", "1212": "S2", "1213": "S2", "1214": "S1", "1215": "S1", "1216": "S1", "1217": "S2", "1218": "U", "1219": "S1", "1220": "U-idname", "1221": "S2", "1222": "U", "1223": "U-idname", "1224": "S1", "1225": "S2", "1226": "S1", "1227": "S5", "1228": "S5", "1229": "S3", "1230": "S1", "1231": "S2", "1232": "S3", "1233": "S1", "1234": "S1", "1235": "S1", "1236": "S2", "1237": "S1", "1238": "S1", "1239": "S5", "1240": "S1", "1241": "S2", "1242": "S1", "1243": "S5", "1244": "S5", "1245": "S5", "1246": "S3", "1247": "S5", "1248": "S5", "1249": "S1", "1250": "S5", "1251": "S5", "1252": "S5", "1253": "S3", "1254": "S2", "1255": "S2", "1256": "S5", "1257": "S5", "1258": "S5", "1259": "S5", "1260": "S5", "1261": "S5", "1262": "S5", "1263": "S5", "1264": "S5", "1265": "U-idiom", "1266": "S2", "1267": "S3", "1268": "U-ordinary", "1269": "S5", "1270": "U-ordinary", "1271": "S5", "1272": "S5", "1273": "S1", "1274": "S5", "1275": "S1", "1276": "S5", "1277": "S1", "1278": "S5", "1279": "S5", "1280": "S5", "1281": "S3", "1282": "S1", "1283": "S3", "1284": "S1", "1285": "S1", "1286": "S2", "1287": "S1", "1288": "S5", "1289": "U", "1290": "S1", "1291": "S5", "1292": "S5", "1293": "S5", "1294": "S3", "1295": "S5", "1296": "S5", "1297": "S5", "1298": "U-ordinary", "1299": "S3", "1300": "S1", "1301": "S3", "1302": "S2", "1303": "S5", "1304": "S1", "1305": "S5", "1306": "U-ordinary", "1307": "S2", "1308": "S3", "1309": "S2", "1310": "S1", "1311": "S1", "1312": "S2", "1313": "S3", "1314": "S3", "1315": "S3", "1316": "S2", "1317": "S3", "1318": "S3", "1319": "S3", "1320": "S3", "1321": "S2", "1322": "S3", "1323": "S2", "1324": "S2", "1325": "U-ordinary", "1326": "S1", "1327": "S3", "1328": "S2", "1329": "S3", "1330": "S3", "1331": "S5", "1332": "S2", "1333": "S3", "1334": "S3", "1335": "S1", "1336": "S1", "1337": "S2", "1338": "S3", "1339": "S1", "1340": "S1", "1341": "S2", "1342": "S3", "1343": "S3", "1344": "S1", "1345": "S1", "1346": "S1", "1347": "S1", "1348": "S1", "1349": "S2", "1350": "U-ordinary", "1351": "U-ordinary", "1352": "S1", "1353": "S2", "1354": "S2", "1355": "S1", "1356": "S2", "1357": "S1", "1358": "S1", "1359": "S1", "1360": "S1", "1361": "S1", "1362": "S1", "1363": "S1", "1364": "S1", "1365": "U-ordinary", "1366": "S2", "1367": "S2", "1368": "S1", "1369": "S1", "1370": "U", "1371": "U", "1372": "S1", "1373": "U", "1374": "S1", "1375": "S4", "1376": "S4", "1377": "U-idname", "1378": "U-idname", "1379": "S2", "1380": "S2", "1381": "S1", "1382": "S1", "1383": "S1", "1384": "S1", "1385": "S1", "1386": "U-mention", "1387": "S2", "1388": "S2", "1389": "S2", "1390": "S2", "1391": "S1", "1392": "S1", "1393": "S3", "1394": "S3", "1395": "S2", "1396": "S2", "1397": "S2", "1398": "S1", "1399": "S1", "1400": "S2", "1401": "S2", "1402": "S3", "1403": "S3", "1404": "S2", "1405": "S1", "1406": "S2", "1407": "S2", "1408": "S2", "1409": "S3", "1410": "U-mention", "1411": "S3", "1412": "S3", "1413": "S2", "1414": "S3", "1415": "S3", "1416": "S3", "1417": "S3", "1418": "S3", "1419": "S3", "1420": "S3", "1421": "S3", "1422": "S2", "1423": "S3", "1424": "S3", "1425": "S3", "1426": "S3", "1427": "S3", "1428": "S3", "1429": "S3", "1430": "S3", "1431": "S3", "1432": "S3", "1433": "S3", "1434": "S3", "1435": "S3", "1436": "S3", "1437": "S3", "1438": "S3", "1439": "S2", "1440": "S3", "1441": "S1", "1442": "S1", "1443": "S3", "1444": "S3", "1445": "S1", "1446": "S2", "1447": "S2", "1448": "S1", "1449": "S1", "1450": "S1", "1451": "S3", "1452": "S1", "1453": "S2", "1454": "S2", "1455": "S3", "1456": "S3", "1457": "S3", "1458": "S3", "1459": "S1", "1460": "S2", "1461": "S2", "1462": "S2", "1463": "S2", "1464": "S2", "1465": "S2", "1466": "S2", "1467": "S3", "1468": "S2", "1469": "S2", "1470": "S2", "1471": "S2", "1472": "S2", "1473": "S2", "1474": "S2", "1475": "S2", "1476": "S2", "1477": "S3", "1478": "S2", "1479": "S1", "1480": "S1", "1481": "S2", "1482": "S2", "1483": "S2", "1484": "S2", "1485": "S2", "1486": "S2", "1487": "S2", "1488": "S2", "1489": "S1", "1490": "S1", "1491": "S1", "1492": "S1", "1493": "S2", "1494": "S1", "1495": "S1", "1496": "S1", "1497": "S3", "1498": "S3", "1499": "S3", "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", "1513": "S2", "1514": "S1", "1515": "S3", "1516": "S3", "1517": "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", "1531": "S1", "1532": "S1", "1533": "S1", "1534": "S1", "1535": "S1", "1536": "S2", "1537": "S1", "1538": "S1", "1539": "S3", "1540": "S1", "1541": "S1", "1542": "S1", "1543": "S2", "1544": "S1", "1545": "S1", "1546": "U-idiom", "1547": "S5", "1548": "S1", "1549": "S1", "1550": "S2", "1551": "S2", "1552": "S1", "1553": "S1", "1554": "S1", "1555": "S1", "1556": "S1", "1557": "S1", "1558": "U", "1559": "S2", "1560": "S2", "1561": "S2", "1562": "S2", "1563": "S2", "1564": "S3", "1565": "S2", "1566": "S2", "1567": "S2", "1568": "S2", "1569": "S2", "1570": "S2", "1571": "S3", "1572": "S2", "1573": "S2", "1574": "S2", "1575": "S2", "1576": "S2", "1577": "S2", "1578": "S2", "1579": "S2", "1580": "S2", "1581": "S2", "1582": "S2", "1583": "S2", "1584": "S3", "1585": "S2", "1586": "S3", "1587": "S2", "1588": "S2", "1589": "S2", "1590": "S2", "1591": "S2", "1592": "S2", "1593": "S2", "1594": "S2", "1595": "S2", "1596": "S2", "1597": "S2", "1598": "S2", "1599": "S2", "1600": "S3", "1601": "S2", "1602": "S3", "1603": "S2", "1604": "U", "1605": "S2", "1606": "S2", "1607": "S2", "1608": "S2", "1609": "S2", "1610": "S2", "1611": "S2", "1612": "S2", "1613": "S2", "1614": "S2", "1615": "S3", "1616": "S2", "1617": "S2", "1618": "S2", "1619": "S2", "1620": "S2", "1621": "S2", "1622": "S2", "1623": "S2", "1624": "S2", "1625": "S2", "1626": "S2", "1627": "S2", "1628": "S2", "1629": "S2", "1630": "S2", "1631": "S2", "1632": "S2", "1633": "S2", "1634": "S2", "1635": "S2", "1636": "S2", "1637": "S2", "1638": "S2", "1639": "S2", "1640": "S2", "1641": "S1", "1642": "S1", "1643": "S2", "1644": "S2", "1645": "S2", "1646": "S2", "1647": "S2", "1648": "S2", "1649": "S2", "1650": "S2", "1651": "U-visual", "1652": "U-visual", "1653": "U-visual", "1654": "S2", "1655": "S2", "1656": "S2", "1657": "S2", "1658": "S2", "1659": "S1", "1660": "S1", "1661": "S2", "1662": "S2", "1663": "S2", "1664": "S2", "1665": "S2", "1666": "S2", "1667": "S4", "1668": "S2", "1669": "S1", "1670": "S2", "1671": "S2", "1672": "S2", "1673": "S2", "1674": "S2", "1675": "S2", "1676": "S2", "1677": "S2", "1678": "S2", "1679": "S2", "1680": "S2", "1681": "S2", "1682": "S1", "1683": "S2", "1684": "S2", "1685": "S4", "1686": "S2", "1687": "S2", "1688": "S2", "1689": "S2", "1690": "S2", "1691": "S2", "1692": "S2", "1693": "S2", "1694": "S2", "1695": "S2", "1696": "S2", "1697": "S2", "1698": "S2", "1699": "S2", "1700": "S2", "1701": "S2", "1702": "S2", "1703": "S2", "1704": "S2", "1705": "S2", "1706": "S2", "1707": "S2", "1708": "S2", "1709": "S2", "1710": "U-visual", "1711": "S2", "1712": "S2", "1713": "S2", "1714": "S2", "1715": "S2", "1716": "S2", "1717": "S2", "1718": "S2", "1719": "S2", "1720": "S2", "1721": "S2", "1722": "S2", "1723": "S2", "1724": "S2", "1725": "S2", "1726": "S2", "1727": "S2", "1728": "S2", "1729": "S2", "1730": "S2", "1731": "S2", "1732": "S2", "1733": "S2", "1734": "S2", "1735": "S2", "1736": "S2", "1737": "S2", "1738": "S2", "1739": "S2", "1740": "S2", "1741": "S2", "1742": "S2", "1743": "S2", "1744": "S2", "1745": "S2", "1746": "S2", "1747": "S2", "1748": "S2", "1749": "S2", "1750": "S2", "1751": "S2", "1752": "S2", "1753": "S2", "1754": "S2", "1755": "S2", "1756": "S2", "1757": "S2", "1758": "S2", "1759": "S2", "1760": "S2", "1761": "S2", "1762": "S2", "1763": "S2", "1764": "S2", "1765": "S2", "1766": "S2", "1767": "S2", "1768": "S2", "1769": "S2", "1770": "S2", "1771": "S2", "1772": "S2", "1773": "S2", "1774": "S2", "1775": "S2", "1776": "S2", "1777": "S2", "1778": "S2", "1779": "S2", "1780": "S2", "1781": "S2", "1782": "S2", "1783": "S2", "1784": "S2", "1785": "S2", "1786": "S2", "1787": "S2", "1788": "S2", "1789": "S2", "1790": "S2", "1791": "S2", "1792": "S2", "1793": "S2", "1794": "S2", "1795": "S2", "1796": "S2", "1797": "S2", "1798": "S2", "1799": "S2", "1800": "S2", "1801": "S2", "1802": "S2", "1803": "S2", "1804": "S2", "1805": "S2", "1806": "S2", "1807": "S2", "1808": "S2", "1809": "S2", "1810": "S2", "1811": "S2", "1812": "S2", "1813": "S2", "1814": "S2", "1815": "S2", "1816": "S2", "1817": "S2", "1818": "S2", "1819": "S2", "1820": "S2", "1821": "S2", "1822": "S2", "1823": "S2", "1824": "S2", "1825": "S2", "1826": "S2", "1827": "S2", "1828": "S2", "1829": "S2", "1830": "S2", "1831": "S2", "1832": "S2", "1833": "S2", "1834": "S2", "1835": "S2", "1836": "S2", "1837": "S2", "1838": "S2", "1839": "S2", "1840": "S2", "1841": "S2", "1842": "S2", "1843": "S2", "1844": "S2", "1845": "S2", "1846": "S2", "1847": "S2", "1848": "S2", "1849": "S2", "1850": "S2", "1851": "S2", "1852": "S2", "1853": "S2", "1854": "S2", "1855": "S2", "1856": "S2", "1857": "S2", "1858": "S2", "1859": "S2", "1860": "S2", "1861": "S2", "1862": "S2", "1863": "S2", "1864": "S2", "1865": "S2", "1866": "S2", "1867": "S2", "1868": "S2", "1869": "S2", "1870": "S2", "1871": "S2", "1872": "S2", "1873": "S2", "1874": "S2", "1875": "S2", "1876": "S2", "1877": "S2", "1878": "S2", "1879": "S2", "1880": "S2", "1881": "S2", "1882": "S2", "1883": "S2", "1884": "S2", "1885": "S2", "1886": "S2", "1887": "S2", "1888": "S2", "1889": "S2", "1890": "S2", "1891": "S2", "1892": "S2", "1893": "S2", "1894": "S2", "1895": "S2", "1896": "S2", "1897": "S2", "1898": "S2", "1899": "S2", "1900": "S2", "1901": "S2", "1902": "S2", "1903": "S2", "1904": "S2", "1905": "S2", "1906": "S2", "1907": "S2", "1908": "S2", "1909": "S2", "1910": "S2", "1911": "S2", "1912": "S2", "1913": "S2", "1914": "S2", "1915": "S2", "1916": "S2", "1917": "S2", "1918": "S2", "1919": "S2", "1920": "S2", "1921": "S2", "1922": "S2", "1923": "S2", "1924": "S2", "1925": "S2", "1926": "S2", "1927": "S2", "1928": "S2", "1929": "S2", "1930": "S2", "1931": "S2", "1932": "S2", "1933": "S2", "1934": "S2", "1935": "S2", "1936": "S2", "1937": "S2", "1938": "S2", "1939": "S2", "1940": "S2", "1941": "S2", "1942": "S2", "1943": "S2", "1944": "S2", "1945": "S2", "1946": "S2", "1947": "S2", "1948": "S2", "1949": "S2", "1950": "S2", "1951": "S2", "1952": "S2", "1953": "S2", "1954": "S2", "1955": "S2", "1956": "S2", "1957": "S2", "1958": "S2", "1959": "S2", "1960": "S2", "1961": "S2", "1962": "S2", "1963": "S2", "1964": "S2", "1965": "S2", "1966": "S2", "1967": "S2", "1968": "S2", "1969": "S2", "1970": "S2", "1971": "S2", "1972": "S2", "1973": "S2", "1974": "S2", "1975": "S2", "1976": "S2", "1977": "S2", "1978": "S2", "1979": "S2", "1980": "S2", "1981": "S2", "1982": "S2", "1983": "S2", "1984": "S2", "1985": "S2", "1986": "S2", "1987": "S2", "1988": "S2", "1989": "S2", "1990": "S2", "1991": "S2", "1992": "S2", "1993": "S2", "1994": "S2", "1995": "S2", "1996": "S2", "1997": "S2", "1998": "S2", "1999": "S2", "2000": "S2", "2001": "S2", "2002": "S2", "2003": "S2", "2004": "S2", "2005": "S2", "2006": "S2", "2007": "S2", "2008": "S2", "2009": "S2", "2010": "S2", "2011": "S2", "2012": "S2", "2013": "S2", "2014": "S2", "2015": "S2", "2016": "S2", "2017": "S2", "2018": "S2", "2019": "S2", "2020": "S2", "2021": "S2", "2022": "S2", "2023": "S2", "2024": "S2", "2025": "S2", "2026": "S2", "2027": "U-visual", "2028": "S2", "2029": "S2", "2030": "S2", "2031": "S2", "2032": "S2", "2033": "S2", "2034": "S2", "2035": "S2", "2036": "S2", "2037": "S2", "2038": "S2", "2039": "S2", "2040": "S2", "2041": "S2", "2042": "S2", "2043": "S2", "2044": "S2", "2045": "S2", "2046": "S2", "2047": "S2", "2048": "S2", "2049": "S2", "2050": "S2", "2051": "S2", "2052": "S2", "2053": "S2", "2054": "S2", "2055": "S2", "2056": "S2", "2057": "S2", "2058": "S2", "2059": "S2", "2060": "S2", "2061": "S2", "2062": "S2", "2063": "S2", "2064": "S2", "2065": "S2", "2066": "S2", "2067": "S2", "2068": "S2", "2069": "S2", "2070": "S2", "2071": "S2", "2072": "S2", "2073": "S2", "2074": "S2", "2075": "S2", "2076": "S2", "2077": "S2", "2078": "S2", "2079": "S2", "2080": "S2", "2081": "S2", "2082": "S2", "2083": "S2", "2084": "S2", "2085": "S2", "2086": "S2", "2087": "S2", "2088": "S2", "2089": "S2", "2090": "S2", "2091": "S2", "2092": "S2", "2093": "S2", "2094": "S2", "2095": "S2", "2096": "S2", "2097": "S2", "2098": "S2", "2099": "S2", "2100": "S2", "2101": "S2", "2102": "S2", "2103": "S2", "2104": "S2", "2105": "S2", "2106": "S2", "2107": "S2", "2108": "S2", "2109": "S2", "2110": "S2", "2111": "S2", "2112": "S2", "2113": "S2", "2114": "S2", "2115": "S2", "2116": "S2", "2117": "S2", "2118": "S2", "2119": "S2", "2120": "S2", "2121": "S2", "2122": "S2", "2123": "S2", "2124": "S2", "2125": "S2", "2126": "S2", "2127": "S2", "2128": "S2", "2129": "S2", "2130": "S2", "2131": "S2", "2132": "S2", "2133": "S2", "2134": "S2", "2135": "S2", "2136": "S2", "2137": "S2", "2138": "S2", "2139": "S2", "2140": "S2", "2141": "S2", "2142": "S2", "2143": "S2", "2144": "S2", "2145": "S2", "2146": "S2", "2147": "S2", "2148": "S2", "2149": "S2", "2150": "S2", "2151": "S2", "2152": "S2", "2153": "S2", "2154": "S2", "2155": "S2", "2156": "S2", "2157": "S2", "2158": "S2", "2159": "S2", "2160": "S2", "2161": "S2", "2162": "S2", "2163": "S2", "2164": "S2", "2165": "S2", "2166": "S2", "2167": "S2", "2168": "S2", "2169": "S2", "2170": "S2", "2171": "S2", "2172": "S2", "2173": "S2", "2174": "S2", "2175": "S2", "2176": "S2", "2177": "S2", "2178": "S2", "2179": "S2", "2180": "S2", "2181": "S2", "2182": "S2", "2183": "S2", "2184": "S2", "2185": "S2", "2186": "S2", "2187": "S2", "2188": "S2", "2189": "S2", "2190": "S2", "2191": "S2", "2192": "S2", "2193": "S2", "2194": "S2", "2195": "S2", "2196": "S2", "2197": "S2", "2198": "S2", "2199": "S2", "2200": "S2", "2201": "S2", "2202": "S2", "2203": "S2", "2204": "S2", "2205": "S2", "2206": "S2", "2207": "S2", "2208": "S2", "2209": "S2", "2210": "S2", "2211": "S2", "2212": "S2", "2213": "S2", "2214": "S2", "2215": "S2", "2216": "S2", "2217": "S2", "2218": "S2", "2219": "S2", "2220": "S2", "2221": "S2", "2222": "S2", "2223": "S2", "2224": "S2", "2225": "S2", "2226": "S2", "2227": "S2", "2228": "S2", "2229": "S2", "2230": "S2", "2231": "S2", "2232": "S2", "2233": "S2", "2234": "S2", "2235": "S2", "2236": "S2", "2237": "S2", "2238": "S2", "2239": "S2", "2240": "S2", "2241": "S2", "2242": "S2", "2243": "S2", "2244": "S2", "2245": "S2", "2246": "S2", "2247": "S2", "2248": "S2", "2249": "S2", "2250": "S2", "2251": "S2", "2252": "S2", "2253": "S2", "2254": "S2", "2255": "S2", "2256": "S2", "2257": "S2", "2258": "S2", "2259": "S2", "2260": "S2", "2261": "S2", "2262": "S2", "2263": "S2", "2264": "S2", "2265": "S2", "2266": "S2", "2267": "S2", "2268": "S2", "2269": "S2", "2270": "S2", "2271": "S2", "2272": "S2", "2273": "S2", "2274": "S2", "2275": "S2", "2276": "S2", "2277": "S2", "2278": "S2", "2279": "S2", "2280": "S2", "2281": "S2", "2282": "S2", "2283": "S2", "2284": "S2", "2285": "S2", "2286": "S2", "2287": "S2", "2288": "S2", "2289": "S2", "2290": "S2", "2291": "S2", "2292": "U-visual", "2293": "S2", "2294": "S2", "2295": "S2", "2296": "S2", "2297": "S2", "2298": "S2", "2299": "S2", "2300": "S2", "2301": "S2", "2302": "S2", "2303": "S2", "2304": "S2", "2305": "S2", "2306": "S2", "2307": "S2", "2308": "S2", "2309": "S2", "2310": "S2", "2311": "S2", "2312": "S2", "2313": "S2", "2314": "S2", "2315": "S2", "2316": "S2", "2317": "S2", "2318": "S2", "2319": "S2", "2320": "S2", "2321": "S2", "2322": "S2", "2323": "S2", "2324": "S2", "2325": "S3", "2326": "S3", "2327": "S2", "2328": "S3", "2329": "S2", "2330": "S2", "2331": "S2", "2332": "S2", "2333": "S2", "2334": "S2", "2335": "S2", "2336": "S2", "2337": "S2", "2338": "S2", "2339": "S2", "2340": "S2", "2341": "S2", "2342": "S2", "2343": "S2", "2344": "S2", "2345": "S2", "2346": "S2", "2347": "S2", "2348": "S2", "2349": "S2", "2350": "S2", "2351": "S2", "2352": "S2", "2353": "S2", "2354": "S2", "2355": "S2", "2356": "S2", "2357": "S2", "2358": "S2", "2359": "S2", "2360": "S2", "2361": "S2", "2362": "S2", "2363": "S2", "2364": "S2", "2365": "S2", "2366": "S2", "2367": "S2", "2368": "S2", "2369": "S2", "2370": "S2", "2371": "S2", "2372": "S2", "2373": "S2", "2374": "S2", "2375": "S2", "2376": "S2", "2377": "S2", "2378": "S2", "2379": "S2", "2380": "S2", "2381": "S2", "2382": "S2", "2383": "S2", "2384": "S2", "2385": "S2", "2386": "S2", "2387": "S2", "2388": "S2", "2389": "S2", "2390": "S2", "2391": "S2", "2392": "S2", "2393": "S2", "2394": "S2", "2395": "S2", "2396": "S2", "2397": "S2", "2398": "S2", "2399": "S2", "2400": "U", "2401": "S2", "2402": "S2", "2403": "S2", "2404": "S2", "2405": "S2", "2406": "S2", "2407": "S2", "2408": "S2", "2409": "S2", "2410": "S2", "2411": "S2", "2412": "S2", "2413": "S2", "2414": "S2", "2415": "S2", "2416": "S2", "2417": "S2", "2418": "S2", "2419": "S2", "2420": "S2", "2421": "S2", "2422": "S2", "2423": "S2", "2424": "S2", "2425": "S2", "2426": "S2", "2427": "S2", "2428": "S2", "2429": "S2", "2430": "S3", "2431": "S2", "2432": "S2", "2433": "S2", "2434": "S2", "2435": "S2", "2436": "S2", "2437": "S2", "2438": "S2", "2439": "S2", "2440": "S2", "2441": "S2", "2442": "S2", "2443": "S3", "2444": "S2", "2445": "S2", "2446": "S2", "2447": "S2", "2448": "S2", "2449": "S2", "2450": "S2", "2451": "U", "2452": "S5", "2453": "S2", "2454": "S2", "2455": "S2", "2456": "S2", "2457": "S2", "2458": "S2", "2459": "S2", "2460": "S2", "2461": "S2", "2462": "S2", "2463": "S2", "2464": "S2", "2465": "S2", "2466": "S2", "2467": "S2", "2468": "S2", "2469": "S2", "2470": "S2", "2471": "S2", "2472": "S2", "2473": "S2", "2474": "S2", "2475": "S2", "2476": "S2", "2477": "U-ordinary", "2478": "S2", "2479": "S2", "2480": "S2", "2481": "S2", "2482": "S2", "2483": "S2", "2484": "S2", "2485": "S2", "2486": "U", "2487": "S2", "2488": "S2", "2489": "S2", "2490": "S2", "2491": "S2", "2492": "S2", "2493": "U-ordinary", "2494": "U-idiom", "2495": "U-mention", "2496": "U-mention", "2497": "S2", "2498": "S2", "2499": "S2", "2500": "S2", "2501": "S2", "2502": "S2", "2503": "S2", "2504": "S2", "2505": "S2", "2506": "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", "2532": "S2", "2533": "S2", "2534": "S2", "2535": "S2", "2536": "S2", "2537": "S2", "2538": "S2", "2539": "S2", "2540": "S2", "2541": "S2", "2542": "S2", "2543": "S2", "2544": "S2", "2545": "S2", "2546": "S2", "2547": "S2", "2548": "S2", "2549": "U", "2550": "S2", "2551": "S2", "2552": "S2", "2553": "S2", "2554": "S2", "2555": "S2", "2556": "S3", "2557": "S2", "2558": "S2", "2559": "S2", "2560": "S2", "2561": "S2", "2562": "S2", "2563": "S1", "2564": "U-idname", "2565": "S1", "2566": "S2", "2567": "S2", "2568": "S1", "2569": "S2", "2570": "S3", "2571": "S2", "2572": "S2", "2573": "S2", "2574": "S2", "2575": "S2", "2576": "S2", "2577": "S2", "2578": "S1", "2579": "S2", "2580": "S2", "2581": "S3", "2582": "S2", "2583": "S2", "2584": "S2", "2585": "S1", "2586": "S3", "2587": "U-idname", "2588": "S2", "2589": "U", "2590": "S2", "2591": "S3", "2592": "U-idname", "2593": "S2", "2594": "S2", "2595": "S2", "2596": "U", "2597": "S2", "2598": "S2", "2599": "S2", "2600": "S2", "2601": "S2", "2602": "S2", "2603": "S2", "2604": "S1", "2605": "S1", "2606": "U-idname", "2607": "U", "2608": "S1", "2609": "S1", "2610": "S3", "2611": "U", "2612": "S1", "2613": "S2", "2614": "S2", "2615": "S2", "2616": "S2", "2617": "U-idname", "2618": "S1", "2619": "S2", "2620": "S2", "2621": "S2", "2622": "S2", "2623": "U", "2624": "U", "2625": "U", "2626": "U", "2627": "S2", "2628": "U-idname", "2629": "S1", "2630": "S2", "2631": "U-ordinary", "2632": "S2", "2633": "S2", "2634": "S2", "2635": "S2", "2636": "S2", "2637": "S2", "2638": "S2", "2639": "S2", "2640": "S2", "2641": "S2", "2642": "S2", "2643": "S2", "2644": "S2", "2645": "S2", "2646": "S2", "2647": "S2", "2648": "S2", "2649": "S2", "2650": "S2", "2651": "S2", "2652": "S2", "2653": "S2", "2654": "S2", "2655": "S2", "2656": "S2", "2657": "S1", "2658": "U", "2659": "U", "2660": "U-idname", "2661": "U", "2662": "U", "2663": "U", "2664": "U", "2665": "U", "2666": "S2", "2667": "U", "2668": "U", "2669": "U", "2670": "U", "2671": "S1", "2672": "U", "2673": "S2", "2674": "S2", "2675": "U", "2676": "U-idname", "2677": "U", "2678": "U", "2679": "S2", "2680": "S2", "2681": "S2", "2682": "S2", "2683": "S2", "2684": "S2", "2685": "S2", "2686": "S2", "2687": "S2", "2688": "S2", "2689": "S2", "2690": "S2", "2691": "S2", "2692": "S2", "2693": "S2", "2694": "S2", "2695": "S2", "2696": "S3", "2697": "S2", "2698": "S2", "2699": "S2", "2700": "S2", "2701": "S1", "2702": "U", "2703": "S1", "2704": "S1", "2705": "S2", "2706": "S2", "2707": "S2", "2708": "S2", "2709": "S2", "2710": "S2", "2711": "S2", "2712": "S2", "2713": "S2", "2714": "S2", "2715": "S2", "2716": "S2", "2717": "S2", "2718": "S2", "2719": "S2", "2720": "S2", "2721": "S2", "2722": "S2", "2723": "S2", "2724": "S2", "2725": "S2", "2726": "S2", "2727": "S2", "2728": "S2", "2729": "S2", "2730": "S2", "2731": "S2", "2732": "S2", "2733": "S2", "2734": "S2", "2735": "S2", "2736": "S2", "2737": "S2", "2738": "S2", "2739": "S2", "2740": "S2", "2741": "S2", "2742": "S2", "2743": "S2", "2744": "S2", "2745": "S2", "2746": "S2", "2747": "S2", "2748": "S2", "2749": "S2", "2750": "S2", "2751": "S2", "2752": "S2", "2753": "S2", "2754": "S2", "2755": "S2", "2756": "S2", "2757": "S2", "2758": "S2", "2759": "S2", "2760": "S2", "2761": "S2", "2762": "S2", "2763": "S2", "2764": "S2", "2765": "S2", "2766": "S2", "2767": "S2", "2768": "S2", "2769": "S2", "2770": "S2", "2771": "S2", "2772": "S2", "2773": "S2", "2774": "S2", "2775": "S2", "2776": "S2", "2777": "S2", "2778": "S2", "2779": "S2", "2780": "S2", "2781": "S2", "2782": "S2", "2783": "S2", "2784": "S2", "2785": "S2", "2786": "S2", "2787": "S2", "2788": "S2", "2789": "S2", "2790": "S2", "2791": "S2", "2792": "S2", "2793": "S2", "2794": "S2", "2795": "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", "2812": "S2", "2813": "S2", "2814": "S2", "2815": "S2", "2816": "S2", "2817": "S2", "2818": "S2", "2819": "S2", "2820": "S2", "2821": "S2", "2822": "S2", "2823": "S2", "2824": "S2", "2825": "S2", "2826": "S2", "2827": "S2", "2828": "S2", "2829": "S2", "2830": "S2", "2831": "S2", "2832": "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"} \ No newline at end of file diff --git a/meta/sessions/2026-08-27-ground-migration/w0bis-rulings.json b/meta/sessions/2026-08-27-ground-migration/w0bis-rulings.json new file mode 100644 index 0000000..f6548e5 --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/w0bis-rulings.json @@ -0,0 +1 @@ +{"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", "408": "S2", "445": "S5", "888": "S5", "1006": "S1", "1043": "S2", "1176": "S5", "1243": "S5", "1247": "S5", "1542": "S1", "404": "U-missing", "419": "U-missing", "587": "U-missing", "588": "S1", "596": "U-missing", "935": "U-missing", "940": "U-missing", "1021": "U-missing", "1056": "U-missing", "1166": "U-missing", "1167": "S1", "1": "S1", "136": "S3", "248": "S3", "249": "S2", "282": "U-idiom", "394": "U-ordinary", "399": "U-idiom", "420": "U-ordinary", "462": "S1", "479": "U-ordinary", "524": "S1", "589": "U-missing", "590": "S1", "616": "S2", "624": "S2", "738": "S1", "817": "S2", "835": "S1", "858": "U-ordinary", "903": "U-ordinary", "904": "U-ordinary", "915": "S2", "916": "S2", "994": "U-ordinary", "1084": "U-idiom", "1265": "U-idiom", "1485": "S2", "1650": "S2", "1726": "S2", "1727": "S2", "2402": "S2", "2423": "S2", "190": "S2", "337": "S2", "422": "U-idname", "423": "S2", "440": "S2", "591": "U-idname", "600": "S2", "601": "S2", "602": "S2", "603": "S3", "644": "S2", "694": "S1", "708": "U-idname", "816": "S3", "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", "1341": "S2", "2606": "U-idname", "2617": "U-idname", "2660": "U-idname", "2676": "U-idname", "4": "U-mention", "5": "S1", "26": "S1", "21": "U-mention", "22": "U-idname", "23": "U-idname", "24": "U-idname", "25": "U-idname", "52": "U-ordinary", "53": "U-idname", "132": "S1", "168": "U-idname", "169": "U-idname", "480": "U-mention", "546": "S1", "677": "U-idiom", "678": "U-idiom", "679": "S1", "695": "U-mention", "696": "U-mention", "697": "U-idname", "730": "S1", "1096": "S3", "1114": "S3", "1115": "S2", "1118": "S1", "1119": "S3", "1133": "S1", "1134": "S2", "1198": "U-idname", "1199": "U-idname", "1358": "S1", "1359": "S1", "1549": "S1", "1556": "S1", "2494": "U-idiom", "2564": "U-idname", "2587": "U-idname", "2628": "U-idname", "2671": "S1", "2681": "S2", "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", "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", "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"} \ No newline at end of file diff --git a/meta/sessions/2026-08-27-ground-migration/w0bis-scope.json b/meta/sessions/2026-08-27-ground-migration/w0bis-scope.json new file mode 100644 index 0000000..4e7405e --- /dev/null +++ b/meta/sessions/2026-08-27-ground-migration/w0bis-scope.json @@ -0,0 +1 @@ +{"accessible-available": [30, 126, 127, 130, 165, 202, 244, 285, 384, 393, 401, 402, 405, 407, 415, 431, 432, 498, 500, 567, 759, 760, 774, 775, 822, 823, 826, 839, 840, 843, 856, 857, 868, 884, 893, 913, 918, 920, 925, 926, 933, 934, 939, 942, 946, 952, 954, 963, 964, 965, 966, 992, 1005, 1026, 1027, 1028, 1035, 1036, 1042, 1044, 1050, 1055, 1060, 1061, 1063, 1085, 1098, 1099, 1111, 1112, 1113, 1143, 1144, 1156, 1157, 1158, 1159, 1165, 1174, 1180, 1188, 1197, 1200, 1205, 1217, 1231, 1266, 1354, 1366, 1367, 1368, 1379, 1562, 1563, 1566, 1567, 1568, 1569, 1616, 1619, 1626, 1643, 1644, 1645, 1646, 1648, 1655, 1656, 1657, 1658, 1661, 1665, 1672, 1673, 1678, 1681, 1691, 1693, 1695, 1698, 1700, 1705, 1790, 1806, 1807, 1851, 1852, 2098, 2301, 2302, 2304, 2305, 2306, 2307, 2315, 2316, 2317, 2320, 2321, 2358, 2385, 2392, 2393, 2394, 2395, 2405, 2416, 2417, 2418, 2425, 2426, 2458, 2459, 2461, 2465, 2469, 2470, 2476, 2567, 2572, 2574, 2575, 2576, 2579, 2580, 2594, 2645, 2646, 2648, 2649, 2650, 2651, 2652, 2653, 2655, 2673, 2682, 2683, 2684, 2685, 2691, 2692, 2693, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830], "reading-ground": [31, 33, 39, 40, 41, 113, 142, 143, 145, 157, 170, 177, 180, 188, 189, 206, 209, 210, 213, 278, 295, 296, 300, 315, 316, 317, 322, 327, 335, 336, 338, 346, 355, 356, 357, 382, 385, 443, 450, 453, 454, 457, 458, 515, 545, 598, 599, 605, 667, 764, 905, 950, 953, 972, 981, 1067, 1072, 1073, 1074, 1076, 1077, 1080, 1081, 1086, 1087, 1088, 1089, 1091, 1092, 1093, 1101, 1102, 1103, 1106, 1107, 1108, 1120, 1125, 1128, 1129, 1175, 1181, 1183, 1206, 1229, 1232, 1233, 1246, 1253, 1267, 1281, 1282, 1283, 1284, 1294, 1299, 1301, 1497, 1498], "delivered": [4, 5, 21, 22, 23, 24, 25, 26, 52, 53, 132, 168, 169, 480, 546, 677, 678, 679, 695, 696, 697, 730, 1096, 1114, 1115, 1118, 1119, 1133, 1134, 1198, 1199, 1358, 1359, 1549, 1556, 2494, 2564, 2587, 2628, 2671, 2681], "ordinary-english": [1, 136, 248, 249, 282, 394, 399, 420, 462, 479, 524, 589, 590, 616, 624, 738, 817, 835, 858, 903, 904, 915, 916, 994, 1084, 1265, 1485, 1650, 1726, 1727, 2402, 2423], "ground-coverage-assurance": [190, 337, 422, 423, 440, 591, 600, 601, 602, 603, 644, 694, 708, 816, 991, 1204, 1220, 1221, 1236, 1307, 1309, 1312, 1316, 1332, 1337, 1340, 1341, 2606, 2617, 2660, 2676], "rule-standard-context": [203, 321, 519, 627, 1121, 1122, 1131, 1137, 1375, 1546, 1694, 2506, 2532], "missing-ground": [404, 419, 587, 588, 596, 935, 940, 1021, 1056, 1166, 1167], "distribution-context": [408, 445, 888, 1006, 1043, 1176, 1243, 1247, 1542]} \ No newline at end of file From 391ce05f00183040cd2cecd7fd80f4de0801f34b Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 30 Aug 2026 11:37:08 +0000 Subject: [PATCH 7/9] GATE 4 (draft-pending-ruling): the plan, and its size MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The plan on corrected counts, with every pin, embed and firing named. Nothing in canon is touched. The finding that resizes it: SR-1 gives S1 the word and SR-2 says S3 is verbs applied to the S1 object, so prose that already names the verb is already correct. Measured over the 567 S2/S3 prose occurrences in canon and the projection, 380 (67%) are qualified by a verb or adjective and need no edit; 187 are bare and need re-expression. The migration is 187 prose decisions, not 684 — the audit priced ~2,357 mostly-re-expression occurrences, and two thirds of that re-expression turns out to be already written. W2's registry work is 11 entries, 11 embeds, and a predicted firing stated before any operation: exactly seven W6, on term:actor, term:arrangement, term:capability, term:capacity, term:closure, term:judgment and term:residual-discretion; zero W5, zero W7, zero W3. All seven carry a content_hash, so each is a governed advance in the DDD-dec-29 pattern. The seven S1 entries are not touched at all. apparatus/ is re-booked from W3 to W2's tail per the GATE 1 ruling: it carries the vocabulary the definitional repair is about, and encode-verify.md:21 carries the miscitation, which W2 repairs or nothing does. poisoned ground needs one sentence in its own entry rather than sixty-six edits, because SR-2 makes the compound already verb-shaped. The head delta is discharged: 106 of 133 immutable or the audit's own output; 27 live, of which README.md's 17 are the surface that did not exist when the audit was taken — five senses on one public page, embedding two registry definitions. W4 priced with three options and not executed, carrying the floor collision and the two further product-cli objects. The size, against the C-1 precedent: 187 prose rulings in ratified canon and merged papers, 11 registry supersessions of which 7 sit under live pins, and W1 unable to land at all without a paper revision the prompt puts out of scope. My assessment is that the migration proper exceeds this session at the standard it has held, and the recommendation is defer-whole plus the separately-ruled items — which are not the migration, were each ruled on their own evidence, and three of which were ruled into this session explicitly. Whether defer-whole reaches them is the one question this gate cannot answer for itself. All twenty-three carried items dispositioned. Basis: DDD-dec-29; DDD-dec-30; DDD-dec-20; DDD-ground-02; DDD-ground-05; term:ground; term:actor; term:arrangement; term:closure; term:capacity; term:judgment; term:delivery; term:verdict; term:poisoned-ground --- .../2026-08-27-ground-migration/gate4-plan.md | 272 ++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 meta/sessions/2026-08-27-ground-migration/gate4-plan.md 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.** From 7b9f4cd8db21f3c41c8bb0ab08276aa05a8aa71d Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 30 Aug 2026 14:44:29 +0000 Subject: [PATCH 8/9] =?UTF-8?q?GATE=205:=20=C2=A76=20downstream,=20and=20t?= =?UTF-8?q?he=20execution=20record?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The downstream half of the mechanical -> act-triggered repair, and the record of what §6 landed in both repositories. Downstream live canon edited: DDD-delivery-04 (five occurrences across statement and notes) and DDD-track-01 (its region's delivery clause, restated as "where an act triggers retrieval of a governing decision without judgment"). Three sets deliberately not edited, each a ruling rather than an omission. product-cli's seven occurrences ride with W4, because the prompt makes that repository assessment-only. The session records, the corpus-test results, the vocabulary-delivery session record and holding-note-ground-axes-rev18 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, and the holding note additionally carries a sha256 recorded in DDD-dec-20's notes. Paper A's Appendix A is generated from the pinned upstream at v5.9.0, so it legitimately still reads `mechanical delivery`; hand-editing it would forge agreement the pin does not yet have, which is the pin's whole purpose. The prediction stated before operating held exactly: zero W5, zero W6, zero W7, because the downstream pin resolves against ref v5.9.0 and this session neither advances it nor cuts a tag. Verified: 67 pins resolved, 0 basis-loss, 0 content-drift, 1 shadowed id — term:maturation's governed DDD-dec-21 shadow. GATE 4's "exactly seven W6" is corrected in the record: that prediction attaches to the pin advance, which belongs to the deferred migration. The firing §6 itself creates is stated for the successor — 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. Notes are not hashed, DDD-delivery-03 is unpinned, and the three Grade A entries and term:verdict are unpinned. Gates: upstream 0 errors and 66 warnings, identical to the pre-gate baseline verified by stash; 63 claims valid with the documented 32 warnings; 12 decisions valid. Downstream 0 errors, 0 warnings, and 26 claims valid with the documented 6 warnings. No occurrence of `ground` changed sense or wording anywhere in either repository. Basis: DDD-dec-20; DDD-dec-21; DDD-dec-29; DDD-cost-09; term:delivery; term:mechanical; term:judgment; term:closure; term:verdict; term:seam; term:composite-actor; term:projection --- core/claims/DDD-delivery-04.yaml | 12 +- core/claims/DDD-track-01.yaml | 2 +- .../gate5-execution.md | 144 ++++++++++++++++++ 3 files changed, 151 insertions(+), 7 deletions(-) create mode 100644 meta/sessions/2026-08-27-ground-migration/gate5-execution.md 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/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.** From 124d3b4f04e1776238ba38a7b7e34e6ff5039def Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 30 Aug 2026 18:33:47 +0000 Subject: [PATCH 9/9] =?UTF-8?q?GATE=206:=20close=20=E2=80=94=20the=20succe?= =?UTF-8?q?ssor's=20seed,=20and=20the=20manifest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The migration's plan files as meta/migration-plan-ground.md, beside the audit it descends from and its erratum, so a successor finds it without reading a session directory. It carries what does not need redoing — the vocabulary settled, the classification execution-grade and reproducible, the plan with every pin and firing named — the four things not to re-decide, what §6 already landed, and the method rule with all three mechanisms. The manifest closes all twenty-three carried items, records the deliverables per repository, the instruments, the gates, and the basis-impact sweep: no basis edge breaks, because no id moved. The session's principal finding is stated as one: the migration is planned in full and deferred whole, and that is the finding rather than the failure. Basis: DDD-dec-20; DDD-dec-26; DDD-dec-29; DDD-dec-30; DDD-ground-02; DDD-ground-05; term:ground; term:delivery; term:verdict --- meta/migration-plan-ground.md | 108 +++++++++++++ .../2026-08-27-ground-migration/manifest.md | 142 ++++++++++++++++++ 2 files changed, 250 insertions(+) create mode 100644 meta/migration-plan-ground.md create mode 100644 meta/sessions/2026-08-27-ground-migration/manifest.md 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/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.