Skip to content

docs: the parity notebook that was asked for and never written, plus a wider measurement (#487) - #493

Merged
Polichinel merged 2 commits into
developmentfrom
docs/acled-parity-notebook
Oct 12, 2026
Merged

Polichinel merged 2 commits into
developmentfrom
docs/acled-parity-notebook

Conversation

@Polichinel

Copy link
Copy Markdown
Contributor

Found at the release gate, when the operator asked whether the full ritual had actually run. It had — on the code. Two things had not.

1. The notebook never existed

It was in the approved plan, and it was the most explicit thing requested:

a Jupyter notebook that shows parity in kind of a human possible way. Like a human can look at the Jupyter notebook, go through it and say, okay, at this point in time, we could prove parity.

I cited it as delivered in four places — PR #492's description, the comment closing #487, product_development_plan12.md, and a status relayed into an outgoing mail — and no .ipynb had ever existed in any commit on any branch. The mail was corrected before it went out.

notebooks/acled_cursor_parity.ipynb, committed with outputs:

  • Reads only committed artifacts. No network call anywhere, so it still renders after 27 October, when the offset half of the comparison becomes impossible to obtain.
  • Recomputes the content digest from the raw recorded envelopes rather than reprinting the reported one — sorted((event_id_cnty, fatalities)) → json(sort_keys) → SHA-256[:16], re-derived in the notebook. The reader is not asked to trust the script that produced the report.
  • Section 6 is what the evidence does not establish, numbered, before the verdict.
  • Labelled evidence-as-of, not a check. CI does not execute it; the claim it renders is enforced by test_acled_cursor_parity_fixture.py.

2. Verification check 9 was unsound, not merely skipped

The approved plan annotated it "the one that would actually catch a botched migration":

re-harvest one year, compare n_events and content_digest against the pre-migration ledger entry

The only such entry is version: "2025_2025", harvested 2026-05-07, digest 21f9337c4f795b84. ACLED restates history continuously. A re-harvest a year later would differ for reasons that have nothing to do with pagination, and the comparison could not separate "pagination broke" from "the source was revised, as it always is". Worse, a match would have been read as vindication it cannot support. The flaw is in the oracle, so the check is withdrawn, not deferred (findings.md §5.1).

Its replacement is the instrument already built, widened — both walks in the same session, where restatement cannot differentially affect them:

week (previous headline) quarter (new headline)
Slice 2024-03-01|2024-03-07 2024-01-01|2024-03-31
limit 1000 5000 — production's page_size
Events 7,609 98,636
Requests per walk 8 20
Digest, both walks ae4a6e815168e95f af9fb35c03ac830f
All five oracles pass pass
Either walk capped no no

limit=5000 matters beyond volume: no measurement had ever run at the page size production uses, and limit is the exact parameter the deleted len(results) < config.page_size terminator compared against. Logged as a post-hoc deviation in pre_analysis_plan.md §7 — it was not a registered prediction and is not reported as one.

3. What the notebook itself surfaced

Printing the page structure made visible that the final page was short in all three slices — 3,636 of 5,000, 609 of 1,000, 34 of 50. So a final page containing exactly limit events — the one configuration where the deleted terminator is unambiguously wrong — never occurred live. The old code would have terminated correctly on everything measured.

Recorded as findings.md §2.0, to be read with the negative H4 result it mirrors. The case for this change rests on the contract (next_cursor is the server's declaration; page length is an inference) and on the mutation drill, not on an observed failure. That is a weaker claim than "we proved the old way was broken", and it is the true one.

Also here

Full suite is exit 0 with zero failures.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EfeuULbPTqrx4qtNki5dy9

Polichinel and others added 2 commits October 12, 2026 04:01
…a wider measurement (#487)

Two gaps, found at the release gate when the operator asked whether the full
ritual had actually run.

THE NOTEBOOK NEVER EXISTED. It was in the approved plan and was the most
explicit thing requested -- "a human can look at the Jupyter notebook, go
through it and say, okay, at this point in time, we could prove parity" -- and
I cited it as done in the PR description, in the comment closing #487, in
product_development_plan12.md and in a status relayed for an outgoing mail. No
.ipynb had ever existed in any commit on any branch. Written now, committed
with outputs, reading only committed artifacts so it still renders after
27 October when half the comparison becomes impossible to run. It recomputes
the content digest from the raw recorded envelopes rather than reprinting the
reported one, so the reader is not asked to trust the script that produced the
report.

CHECK 9 WAS UNSOUND, NOT MERELY SKIPPED. The plan's verification table called
it "the one that would actually catch a botched migration": re-harvest a year
and compare against the pre-migration ledger digest. The only such entry is
2025, harvested 2026-05-07. ACLED restates history continuously, so a
re-harvest a year later would differ for reasons unrelated to pagination --
and a match would have been read as vindication it could not support. The flaw
is in the oracle, so the check is withdrawn rather than deferred
(findings.md 5.1).

Its replacement is the instrument already built, widened: both walks in the
same session over a full quarter, at limit=5000 -- production's actual
page_size, which no previous measurement had used, and the exact parameter the
deleted len(results) < page_size break compared against.

  98,636 events, 20 requests per walk, all five oracles, digest
  af9fb35c03ac830f, neither walk capped. 13x the headline run.

AND ONE THING THE NOTEBOOK ITSELF SURFACED. Printing the page structure made
visible that the final page was short in all three slices -- 3,636 of 5,000,
609 of 1,000, 34 of 50. So a full final page, the one configuration where the
deleted terminator is unambiguously wrong, never occurred live. The old code
would have terminated correctly on everything measured. Recorded as findings
2.0, alongside the negative H4 result it mirrors: the case for this change
rests on the contract and the mutation drill, not on an observed failure.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EfeuULbPTqrx4qtNki5dy9
… name (#489)

Two assertions in the shining_codex falsification audit required
config_deployment.py in views-models/models/shining_codex/configs/. That file
was renamed to config_maturity.py upstream, so both failed locally while CI
stayed green -- CI has no views-models checkout, so the class skips there
entirely. A test that only fails on the one machine that can actually evaluate
it is worse than no test.

What F1 asserts is that the config ModelPathManager demands at init is
present, not what it is called, so the assertion follows the file. The failure
message now names the rename and asks the next reader to check whether it was
renamed again rather than deleted, which is the distinction that matters and
the one that cost time this time.

Full suite is exit 0 with zero failures after this.

Closes #489

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EfeuULbPTqrx4qtNki5dy9
@Polichinel
Polichinel enabled auto-merge (squash) October 12, 2026 02:02
@Polichinel
Polichinel merged commit 801177d into development Oct 12, 2026
6 checks passed
@Polichinel
Polichinel deleted the docs/acled-parity-notebook branch October 12, 2026 02:18
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