Skip to content

Section 02 swapped: a resolution record now checks with the version the page tells you to install - #101

Closed
BTCBoyd wants to merge 4 commits into
check/latest-exports-predicatefrom
swap/section-02-post-move
Closed

Section 02 swapped: a resolution record now checks with the version the page tells you to install#101
BTCBoyd wants to merge 4 commits into
check/latest-exports-predicatefrom
swap/section-02-post-move

Conversation

@BTCBoyd

@BTCBoyd BTCBoyd commented Aug 23, 2026

Copy link
Copy Markdown
Member

The held swap, run after the tag moved. Stacked on check/latest-exports-predicate (#96) — that PR carries the latest-exports predicate this branch names. Merge #96 first.

Before: red, which is the starting condition the rewrite assumes

FAILED — 1 measured figure(s) out of sync, 2 derived claim(s) no longer true.
  results/engine-payload-exports.json records npmLatest 1.0.0-rc.12, npm now serves 1.0.0-rc.21.
  verify.html: a derived claim on the page is no longer true.
    the version at latest (1.0.0-rc.21) DOES export `resolutionPayload`, so this sentence is false.
EXIT=1

Three findings, exactly as the rc.21 simulation predicted last block.

After: green, and both markers assert the affirmative

PASSED — every marked figure matches results/, and every derived claim still holds.
DERIVED CLAIMS: 2 claim marker(s) evaluated against freshly measured values.

latest-exports(resolutionPayload)  latest=1.0.0-rc.21  ok=true
markers on the page asserting it: 2      old marker remaining: 0

13 of 14 checks green. The one red is sync-engine-versionprecondition 6, the scripts/package.json pin still at rc.12. That is a separate change and the check's own output says why: re-verify the credential expectations against rc.21 first.

The six parts were not all of them

The held plan enumerated six and named two dependents. It missed two sentences, and one was inside the section being swapped:

We hold [122] signed resolution records that a reader on [1.0.0-rc.21] has no route to.

That is the failure the mechanism exists to prevent, in the one place it was supposed to be watched. The data-measured span updated itself to rc.21 while the sentence inverted in meaning and did not. Part 6 moved the span; nothing moved the words around it.

index.html carried the same shape. Both rewritten, count now 0, four-release history kept rather than deleted.

The check caught me dropping a declared figure

Rewriting index.html removed the kinds span, and check-measured-figures refused: "Dropping a measured claim must not be something an edit does quietly."

Correct. The kinds list is empty now that the count is 0, so the declaration's own reason — a count with no class name cannot be acted on — has no subject. Removed in this commit, with that reason recorded, which is what the check's message asks for.

The count declaration is kept at zero rather than dropped: a page that stops citing a figure when it clears cannot show a reader it ever was not zero.

Commits

  1. re-measure engine-payload-exports — alone, ahead of the copy
  2. all six parts in one commit, verified in the index per §18
  3. the two missed sentences, the re-measured coverage, and the declaration removal

Committed alone, ahead of the copy change, because npmLatest is compared by
several markers and mixing the two makes the copy commit unreviewable.

  npmLatest  1.0.0-rc.12 -> 1.0.0-rc.21
  npmLatestExports now includes resolutionPayload

The withdrawal band is unchanged: resolutionPayload is still absent from rc.9
through rc.12. What changed is that latest no longer points inside it.
…he page tells you to install

All six parts in one commit, because no ordering buys anything and part 4
without parts 1-3 is green and wrong. No check reads the words, so writing them
together is the only thing that makes the set atomic.

  1  heading                 "You cannot check a resolution record with the
                             version this page tells you to install" becomes
                             "A resolution record now checks ... It did not, for
                             four releases."
  2  consequence sentence 1  "The version npm install serves does not export it"
                             becomes "serves exports it. For four releases it
                             did not."
  3  consequence sentence 2  the reader-cannot-check sentence becomes the record
                             of who could and who could not: the 122 signed
                             resolution records were always rebuildable by
                             someone who installed @rc, and were not by someone
                             who followed the instruction on this page.
  4  marker, both sites      latest-does-not-export -> latest-exports
  5  "What to do about it"   it told a reader to accept the gap and said the gap
                             closes when latest moves past the band. It has. The
                             paragraph now says nothing needs doing and why the
                             page stays pinned to latest regardless.
  6  npmLatest spans         1.0.0-rc.12 -> 1.0.0-rc.21, both

THE FOUR-RELEASE GAP IS RECORDED, NOT DELETED. The section stays because a
section that vanishes when a defect clears leaves a reader unable to tell a page
that was always right from a page that was corrected. resolutionPayload was
still absent from rc.9 through rc.12 and the withdrawal still appears in no
changelog; what changed is which release a reader receives.

Verified in the INDEX before committing, per CONVENTIONS 18: all six present in
the staged bytes, the old heading gone, and zero occurrences of the old marker
or the old span value.
…ation

The held plan enumerated six parts and named the two dependents that must change
with them. IT MISSED TWO SENTENCES, ON TWO PAGES, AND ONE OF THEM WAS INSIDE THE
SECTION BEING SWAPPED.

  verify.html  "We hold 122 signed resolution records that a reader on
               1.0.0-rc.21 has no route to."

That is the failure the whole mechanism was built to prevent, in the one place
it was supposed to be watched: the data-measured SPAN inside the sentence
updated itself to rc.21 while the SENTENCE inverted in meaning and did not.
Part 6 moved the span. Nothing moved the words around it.

  index.html   "A further 122 resolution records are rebuildable at some
               published version but not at the one npm install serves."

Both rewritten. The count is now 0 and both pages say so in the past tense, with
the four-release history kept rather than deleted.

RE-MEASURED signed-record-coverage against the stores, which are reachable:

  resolution.rebuildableAtNpmLatest   false -> true
  notRebuildableAtNpmLatest           kinds [resolution] count 122
                                      -> kinds [] count 0
  neverRebuildable                    UNCHANGED, instructed and report, 3089,
                                      27.0%. No route at ANY version, so the tag
                                      move cannot touch it.

AND THE CHECK CAUGHT ME DROPPING A DECLARED FIGURE. Rewriting index.html removed
the kinds span, and check-measured-figures refused: "Dropping a measured claim
must not be something an edit does quietly." Correct. The kinds list is now empty
because the count is 0, so there is no class name to show and the declaration's
own reason -- a count with no class name cannot be acted on -- no longer has a
subject. Removed in this commit with that reason recorded, which is what the
check's message asks for.

The count declaration is KEPT AT ZERO rather than dropped: a page that stops
citing a figure when it clears cannot show a reader that it ever was not zero.
…85

BOTH FOUND BY THE NEW INSTRUMENT, not by reading.

sentences-at-risk.mjs, run against the pre-move baseline, enumerated three
sentences containing a span whose value the tag move changed. Two were the ones
already fixed. The third was live on this branch and false:

  "npm's latest tag SITS INSIDE THAT BAND, at 1.0.0-rc.21"

rc.21 is not inside rc.9 through rc.12. The span updated itself to rc.21 and the
sentence around it did not, which is the exact class this branch already
corrected twice and missed a third time. Now reads "no longer points inside that
band".

THE INSTRUMENT FOUND IN ONE RUN WHAT THREE READINGS OF THE SAME SECTION DID NOT.

AND A MALFORMED TAG, ON MASTER, SINCE #85:

  <p data-derived-claim="...latest-does-not-export(resolutionPayload)" <strong>

The closing angle bracket is missing. #85 added the marker by replacing '<p>'
with '<p ' + attribute + ' ', which drops the '>'. The sibling <h4> marker was
added by a different substitution and is well formed, which is why one is broken
and one is not.

It has been on the served page since #85 merged. NOTHING CAUGHT IT: no check in
this repository parses HTML, so a broken tag is invisible to all fourteen. A
browser recovers from it, which is why it is invisible to a reader too.

Found only because the sentence beside it was being read for a different reason.
That is not a method.
@BTCBoyd

BTCBoyd commented Aug 24, 2026

Copy link
Copy Markdown
Member Author

Closing in favour of #104, which carries this branch's commits unchanged.

Ruling from Boyd: #101 and #103 are combined because they are one change to the world. A repository state with one landed and not the other is a state that should not exist, so they land together or not at all. The branch protection is correct and was not relaxed.

The measurement that forced it: each was red for the other's reasons.

combination result
#103 alone RED — stale npmLatest, two section-02 markers
#101 alone RED — the pin drift
#103 + #101 13/13 GREEN

Neither could go green first, so neither could merge first. Combined, the merge is clean and the suite passes.

Nothing from this branch is dropped; its commits are in #104's history.

@BTCBoyd BTCBoyd closed this Aug 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant