Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions core/decisions/DDD-dec-34.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
format: 1
id: DDD-dec-34
kind: decision
statement: |
The upstream pin advances v5.9.0 -> v5.12.0 across three releases in one act, six pinned objects are re-instrumented and four unpinned ones are added, and the advance's firing is predicted in a committed file before graph/upstream.yaml is touched — because the node whose retirement forces this revision's largest repair, DDD-measure-06, fired nothing at all: it was never pinned.
principal: Emil
made: 2026-08-30, Paper A revision (GATE 3 ruling to proceed; the advance executed and verified at GATE 4)
resolution: |
The advance, what it fired, and the finding that changes what gets pinned.

## Why three releases at once

The pin was HELD at v5.9.0 by ruling, so canon could be repaired without dragging the projection
behind it. Three releases landed against that hold: v5.10.0 (the Phase 1a session — the discharge
partition and the measure boundary), v5.11.0 (retirement provenance and the validator) and
v5.12.0 (definitions that were never in the registry, and a collision the store won). The hold
was correct and it is discharged here, in one advance, by the paper it was protecting.

## Predicted before, verified after

Stated in this order so the verification can disconfirm it, per DDD-dec-28 and DDD-dec-29, and
COMMITTED AHEAD OF THE OPERATION at
meta/sessions/2026-08-30-paper-a-revision/gate4-prediction.md, with the instrument that computed
it beside it (predict-pin-advance.py, which re-implements validate-core-order.py's own
pinned_content_digest rather than approximating it).

PREDICTED FIRING:
E12 0 — all 67 pinned ids still exist at v5.12.0
W5 exactly 1 — DDD-frame-15, projected -> retired
W6 exactly 6 — DDD-cost-09 (region); DDD-delivery-01 (statement); DDD-frame-02
(statement); DDD-frame-15 (statement and region); term:delivery (canonical_md);
term:residual-discretion (canonical_md)
W7 1, unchanged — term:maturation, declared against DDD-dec-21
and 61 of 67 pins unmoved.

OBSERVED, at ref v5.12.0 with the hashes NOT yet re-instrumented:

67 pins resolved against the pinned ref, 1 basis-loss, 6 content-drift, 1 shadowed id(s)

Every id and every hash was the one written down beforehand. **The prediction held in every
limb.** The two-stage method is the point: had the hashes been advanced in the same edit as the
ref, the drift count would have read 0 throughout, the pass and the skip would have produced
identical output, and there would have been nothing to check the prediction against.

After re-instrumentation: 71 pins resolved, 0 basis-loss, 0 content-drift, 1 shadowed id.

## Reconciled against the migration seed's own prediction

meta/migration-plan-ground.md predicted three W6 for the next advance past both sessions —
term:delivery, DDD-cost-09, DDD-delivery-01. Those three appear exactly. The other three are the
Phase 1a session's repairs and are not ground-migration work, which is why the seed does not
list them. The seed also names seven W6 that fire when W1 executes IN CANON; none fired, because
this session carries W1 in the two manuscripts only and renames nothing upstream.

## The finding: four pins added, and why it is a finding

DDD-measure-06 retires at v5.12.0 from established. It forces the largest prose repair in this
revision — the paper asserted its biconditional as **established** in three places, and the
companion measure note had already conceded both failure directions without canon being updated
to match, so this projection was stronger than the note sharing its graph.

**It fired nothing.** W5 only sees ids that are pinned, and DDD-measure-06 was not. Both existing
checkers passed all three lines, because none is a block quotation and none is an appendix row.
The gap was found by a sweep written at this session's GATE 1 for inline status assertions, now
shipped as papers/paper-a/check-status.py.

That is DDD-agent-01 applied to this repository's own apparatus: a basis cited without a pin is a
basis that can move silently. Four nodes are therefore pinned at this advance — DDD-measure-06,
its two successors DDD-measure-16 and DDD-measure-17, and DDD-frame-17, which supersedes
DDD-frame-15. Three of the four could not have been pinned earlier: they do not exist at v5.9.0
and pinning them there would have fired E12.

## The other steps, and their results

- **The four failing quotations**, all repaired and verified: DDD-frame-15's statement (retired,
the four modes replaced by DDD-frame-17's three values), DDD-frame-02's (amended clause),
term:residual-discretion's (amended, the cryptographic-hash separation), and the compact form
in the conclusion — the cheapest, since the compact form survives verbatim in DDD-frame-17's
closing clause, so the citation moved and no prose did. check-quotations.py at v5.12.0:
**30 verbatim, 0 disclosed-partial, 0 failing.**
- **Appendix A regenerated wholesale** against the tag, never hand-edited, and re-read by the
independent script: **75 nodes rendered, 75 cited, 0 discrepancies**, up from 72 nodes and 13
discrepancies before regeneration. Idempotent across three runs, byte-compared.
- **check-status.py at v5.12.0: 93 inline status assertions, 0 wrong**, from 4 wrong before the
repair.
- **The declared ref** advanced in the manuscript's front matter, which is now the supplement's
S2.

## What this act does not do

It does not merge anything; Emil ratifies. It does not file, amend or retire any claim in either
repository — the two retirements this revision carries were made upstream at v5.10 and are only
projected here. It does not rule on the accountability arity finding (S4 of the supplement),
which is routed as a successor item rather than ridden in on a pin advance.
basis:
- DDD-dec-29
- DDD-dec-28
- DDD-dec-10
- DDD-agent-01
- DDD-frame-15
- DDD-frame-17
- DDD-measure-06
- DDD-measure-16
notes: |
Numbering: decisions share one id space across the principle repository and this one. 33 is the
highest before this file (upstream, at v5.12.0), so this advance is 34.

Filed at the advance rather than staged [PROPOSED], because the tag it pins already existed:
v5.12.0 resolves to 81f6929, verified as the principle repository's default-branch head before
anything moved. The DDD-dec-28/29 near-miss — an instruction to bump arriving before the tag was
cut — does not apply here, and the file lands ratified rather than being tidied later.

The ordering constraint from DDD-dec-29 still binds and was followed: the ref written into
graph/upstream.yaml is also written into a published manuscript, so pinning a branch during
staging would put a branch sha into a paper. Tag first, always.

## What the two-stage verification cost, and why it is worth it

Nothing but one extra checker run. The alternative — advance ref and hashes together — produces
a green run whether or not the prediction was right, which is presumed discharge in its exact
form: the artefact recording the pass identical to the artefact recording the skip. Three
advances have now been verified this way (DDD-dec-28, DDD-dec-29, this one) and the prediction
has held each time, which is an argument for keeping the method rather than for dropping it.
54 changes: 46 additions & 8 deletions graph/upstream.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,24 @@ upstream:
# basis-loss, EXACTLY ONE content-drift — term:floor, daf43e07... -> 917f7e4d..., both hashes
# as predicted — 0 status movement, the one standing W7 unchanged. The prediction held. No
# pins added: v5.9.0 mints nothing.
ref: v5.9.0 # tag, never a branch
# Advanced v5.9.0 -> v5.12.0 at the Paper A revision (2026-08-30), on Emil's GATE 3 ruling;
# the advance is DDD-dec-34 here. Three releases at once, because the pin was HELD at v5.9.0 by
# ruling so canon could move without dragging the projection — v5.10.0 (Phase 1a), v5.11.0
# (retirement provenance) and v5.12.0 (definitions and the store collision) all landed against
# a projection deliberately left behind. Predicted firing, stated before it ran and committed
# ahead of the operation at meta/sessions/2026-08-30-paper-a-revision/gate4-prediction.md:
# E12 0 - W5 exactly 1 (DDD-frame-15, projected -> retired) - W6 exactly 6 (DDD-cost-09 region;
# DDD-delivery-01 and DDD-frame-02 statement; DDD-frame-15 statement and region; term:delivery
# and term:residual-discretion canonical_md) - W7 1, unchanged. Verified at the bump, by
# advancing ref first and re-instrumenting the hashes second so the firing could be observed
# rather than assumed: 67 pins resolved, 1 basis-loss, 6 content-drift, 1 shadowed id, every id
# and every hash the one written down beforehand. The prediction held in every limb. After
# re-instrumentation: 71 pins, 0 basis-loss, 0 content-drift, 1 shadowed id.
# FOUR PINS ADDED, and the reason is a finding rather than housekeeping: DDD-measure-06 retires
# at v5.12.0 and fired NOTHING, because W5 only sees ids that are pinned. Paper A asserted it as
# **established** in three places and both of its checkers passed those lines. The gap was found
# by a sweep written for inline status assertions, now shipped as papers/paper-a/check-status.py.
ref: v5.12.0 # tag, never a branch
pins:
# basis claims for DDD-dec-04 (the split decision itself rests on these)
- id: DDD-frame-01
Expand Down Expand Up @@ -123,7 +140,7 @@ upstream:
# the assurance-locus conversion core/13 §5's amortisation corollary rests on (GATE B carve)
- id: DDD-cost-09
status_at_pin: projected
content_hash: sha256:fecb317fb0b76a969b7f8f5eebdbfc94ea628faf75deb83142de7efb0dd4c013
content_hash: sha256:f6cc24f0f406dea4f43785106310669ed81a016202165c0d1c739df31b091ffe
# the routing layer core/15 exercises and core/14's register consumes (Wave 2, 2026-08-10)
- id: term:capability
status_at_pin: settled
Expand Down Expand Up @@ -163,10 +180,10 @@ upstream:
# 2026-08-15; staged with the v5.5.0 advance, DDD-dec-18)
- id: term:delivery
status_at_pin: draft
content_hash: sha256:1e7b2e4d5df5dad2869d966abe94f5d5677a4a2f4d3e0ff35356534f382ecac2
content_hash: sha256:c56909e53c93d1cfbf857df605df91607e75176ca146f07731386ef9d166e46e
- id: DDD-delivery-01
status_at_pin: projected
content_hash: sha256:67377ef2294de814afd95026f2e7ad0bdb768516696395d05f1ed1645aa6d804
content_hash: sha256:1340d483e45ad5db10acb754aa335453f719f01e8126c3ee0f028f8c5545a73d
# Basis added by the freight session (2026-08-17): four upstream objects gained basedOn
# edges from decisions filed here — DDD-dec-20 (the session convention), DDD-dec-22 (the
# pin/shadow instrumentation) and DDD-dec-23 (ruling 16). Found by the GATE 6 basis-impact
Expand Down Expand Up @@ -242,7 +259,7 @@ upstream:
content_hash: sha256:5c146793529821d24b0b45137f1d8e7893acd8c6392b3694d7e145078c9d5e3e
- id: DDD-frame-02
status_at_pin: projected
content_hash: sha256:f45492eedfaf5dc3e0a92776fb71b61639ac1941486816200b01894ba807f04a
content_hash: sha256:0002f60b446fc9d6a5561f21e61fb10472b3b209a416b4ed10216e37721fdbb3
- id: DDD-frame-13
status_at_pin: projected
content_hash: sha256:4add58e0f47c0ff22bb752d6b78aef7f591a14b17d610cdb06677439e0b33276
Expand Down Expand Up @@ -274,8 +291,8 @@ upstream:
status_at_pin: settled
content_hash: sha256:b3d940d3167c8e9e18667a224a13d98bad17509844930b3be9e49834014aa19e
- id: DDD-frame-15
status_at_pin: projected
content_hash: sha256:6d14509db3daaaf1773b6e6d24b6d6b742da2c7fa4f5f6bf18f2286a970df3f9
status_at_pin: retired
content_hash: sha256:2a65878dfdd95895ef91819fe4545ed125e542346eae2ed9b5e91e50e517d58b
- id: DDD-frame-04
status_at_pin: projected
content_hash: sha256:eec0a4b49c4f996f68a8b83281e0990b829efd318964f803a16452fb4d32a0d3
Expand Down Expand Up @@ -304,4 +321,25 @@ upstream:
content_hash: sha256:7714da9eb209a6839b862a36c0aecd48d411f6af18cab4b1acaa7a1dea032167
- id: term:residual-discretion
status_at_pin: draft
content_hash: sha256:77284b1467c8a100654279d5a3c86970c791badeb1d891e60f9618e13dc1541e
content_hash: sha256:9bbe31e3a02fd3cee70ad42d560268943cd136aa1c0d389ec081d7af0c579340
# [PROPOSED] Paper A revision (2026-08-30), added at the v5.12.0 advance. Four nodes the
# manuscript leans on that were NOT pinned, found by the Gate 1 status sweep rather than by
# the instrument: DDD-measure-06 retires at v5.12.0 and fired NOTHING, because W5 only sees
# ids that are pinned. The paper asserted it as **established** in three places and both
# existing checkers passed those lines. That is DDD-agent-01 about this repository's own
# apparatus — a basis cited without a pin is a basis that can move silently — and the four
# are pinned here so the next movement is instrumented rather than swept for. They could
# not be pinned before this advance: DDD-frame-17, DDD-measure-16 and DDD-measure-17 do not
# exist at v5.9.0 and pinning them there would have fired E12.
- id: DDD-frame-17
status_at_pin: projected
content_hash: sha256:bf8d2c699946fd388ee10af09a0e2441fde92d5d69c8e5e847a2e369ca23248d
- id: DDD-measure-06
status_at_pin: retired
content_hash: sha256:a7ae6e7ad5ccd0afd3bc35c5fd5ce061532b4f99f4d352464f9cc5b78ee01c39
- id: DDD-measure-16
status_at_pin: established
content_hash: sha256:2d763d1adf9e1c68c88d1f5c3e30550a5079e274d84e688c31f5f5bb51f1d94e
- id: DDD-measure-17
status_at_pin: projected
content_hash: sha256:164a18072145bc4a0cdb3c6e1ca8890fc64c1b36396c73be5ca8bd45c66114e5
36 changes: 35 additions & 1 deletion meta/migration-plan-ground.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,22 @@ 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 |
| **W1** | S5 → *deployment distribution* | 87 mutable, **31** in the two manuscripts (was recorded as 29) | `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 | — |

**W1's counts, corrected again by the Paper A revision (2026-08-30).** Against
`w0-full-v2.json`: S5 totals **97**, of which 9 are immutable, leaving **88 mutable** corpus-wide
and **87** excluding `product-cli`. The two merged manuscripts hold **31** of those (measure note
26, Paper A 5) — **35%, not 88%**, and the row above is corrected from 29. Of those 31, Emil's Gate 1
rulings put **15 in scope for that session and 16 out of it**: generated or hand-carried node-table
rows, passages quoting a live claim verbatim while canon still says `ground distribution`, one
filename, and the three occurrences ruled ambiguous between S5 and S1. **On those rulings W1's
remaining surface is 73 of 88, not zero** — the executed figure is recorded at that session's close
and supersedes this line if it differs.

**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.**

Expand Down Expand Up @@ -106,3 +116,27 @@ Three mechanisms, all found by reading rows the instrument had already scored:
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.**

### A third, found by the Paper A revision and added on Emil's ruling

> **Classification data cites content, never position.**

The W0 classification's line numbers for `papers/paper-a/paper-a.md` are stale, and not by error:
the audit's extract was taken on 2026-08-24, and the item-4 session regenerated that paper's
Appendix A the next day with a `kind` column, moving every appendix row down by eleven lines. Three
of the five S5 rows in that file therefore point at the wrong lines — `1365`, `1371`, `1409` in the
extract against `1376`, `1382`, `1420` at head.

Nothing was lost, because a sense assignment travels with the occurrence rather than with the line.
But **a migration executed by line number would have edited three wrong rows**, and the three wrong
rows were all inside a generated appendix, where an edit forges agreement with the graph. The
failure would have been silent in the only place the corpus cannot afford silence.

The rule is cheap: an occurrence is addressed by its file plus a content anchor, and a line number
is a convenience for a reader rather than an instruction to an instrument. `w1-enumerate.py`
(`meta/sessions/2026-08-30-paper-a-revision/`) carries both numbers and reconciles neither silently
— it fails loudly when a manuscript has moved under the enumeration, which is how this was found.

**Corollary, and it is the wave-planning fact:** a generated table's rows are not the wave's to
move at all. They carry canon's words and they move when canon moves. W1's own scope shrinks once
that is applied — see the counts correction below.
Loading
Loading