Skip to content

lane_packets --manifest-newcomers: carry a discovery refuted only by a missing vote (F-2W-3) - #471

Merged
seathatflowsinourveins merged 1 commit into
mainfrom
claude/lane-packets-absence-20260928
Sep 29, 2026
Merged

seathatflowsinourveins merged 1 commit into
mainfrom
claude/lane-packets-absence-20260928

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Owner

Summary

This is roadmap move F-2W-3 from docs/decisions/2026-09-28-ecosystem-roadmap.md (#469).

The problem. In catalogs/sota-convergence/manifest-20260926.json, 27 discoveries are refuted_* only because a vote never returned: the GPT-6 fit vote is {missing: true} in the retained returns. scripts/saturation_ledger.py refuted_by_absence already treats those as not adjudicated, and landscape-sweep/build_inputs.py applies that rule. But lane_packets --manifest-newcomers withheld every refuted_* row, so 23 of them could never reach the next verdict wave (the other 4 are already ledger candidates).

The change (tools/sota-convergence/lane_packets.py):

  • absence_refuted(root, manifest)
    • Loads the ledger rule and binds only completed sweeps whose manifest_sha256 equals these manifest bytes.
    • Records (lane, identity) under (catalog, layer_id) for every entry that refuted_by_absence reads as absence-only.
  • manifest_newcomers no longer counts such a row as refuted.
  • Unchanged:
    • a row refuted on merit still withholds the repository, and so does a mixed row (missing GPT-6 beside a returned refuting vote);
    • the default build without --manifest-newcomers;
    • the 2026-09-22 and 2026-09-23 builds.
  • The rule is reused, not reimplemented. scripts/saturation_ledger.py is loaded by path, as landscape-sweep/sweep_common.ledger_module does. An import statement would pull the ledger into the verdict-review gate's trust base, which SeparationTests forbids.

Effect on the 2026-09-26 manifest: 23 more newcomers across 9 foundation packets.

SOTA sources

  • Rule source, reused unchanged from this repository:
    • scripts/saturation_ledger.py refutes_on_merit, refuted_by_absence and ref_resolver (lines 236-275);
    • how it is applied: tools/sota-convergence/landscape-sweep/build_inputs.py:145-154;
    • the loading pattern: tools/sota-convergence/landscape-sweep/sweep_common.py:103-108.
  • The writer that sets the missing marker: tools/sota-convergence/landscape-sweep/convert.py:452-510.
  • Python stdlib importlib.util.spec_from_file_location / module_from_spec (https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly). No new dependency.

Checks (at 11b5341f, rebased on main f0219263)

Check Result
python3 scripts/validate.py exit 0, status: passed
python3 -m unittest tests.test_lane_packets tests.test_saturation_ledger tests.test_verdict_review_gate Ran 353, OK (skipped=3)
the three builder registry tests Ran 3, OK
python3 scripts/saturation_ledger.py --check ok: 4 sweep record(s), chain intact, bindings verified

Failing-first. Reproduced by an independent stack-verifier on a git archive of the base: the 8 new tests fail against base lane_packets.py (7 FAIL, 1 ERROR).

Mutation. The builder killed 6 mutants. After the Claude review, a 9th test was added: the real earendil-works/pi row is absence-only in native-clients but refuted on merit in agent-sdks, in the same lane. It kills a mutant that drops the per-layer key (frozenset().union(*absent.values())), which all 8 earlier tests missed.

Review. An evidence-reviewer round returned 1 should-fix and 3 nits, all repaired:

  • the layer-scope test above;
  • class docstrings changed to "not refuted on merit";
  • README scope wording;
  • the docstring states that the returns are trusted as saturation_ledger.py --check binds them.

The reviewer accepted loading by path for the trust base. A GPT-6 cross-family review follows before merge.

Lane

lane:foundation: tools/, tests/ for a foundation tool, and the hot-file protocol for manifests/evidence.json (docs/lanes.md:24, 96-131). No shared path changes meaning.

🤖 Generated with Claude Code

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Sep 28, 2026
…absence (F-2W-3)

A manifest candidate whose refuted_* disposition came only from a vote that
did not return was never adjudicated (scripts/saturation_ledger.py
refuted_by_absence), yet --manifest-newcomers withheld it like a refutation on
merit. absence_refuted now reads each completed saturation-ledger sweep that
recorded the manifest (its manifest_sha256 is the file's) and applies the
ledger's own rule over the retained returns; manifest_newcomers no longer
counts those (lane, identity) rows as refuted. A row that any returned vote
refuted, including a missing vote beside a returned refuting vote, stays
withheld, as does any other refuted_* row of the repository.

The rule is loaded by path, as landscape-sweep/sweep_common.ledger_module
loads it, so scripts/saturation_ledger.py stays outside the verdict review
gate's trust paths (tests/test_saturation_ledger.py SeparationTests).

On manifest-20260926.json 27 rows are refuted only by absence: 23 are now
carried as newcomers in 9 foundation packets (newcomer flags 48 -> 71, or
50 -> 73 with --trading-candidates manifest) and the other 4 were already
ledger candidates. Builds without the flag and the 2026-09-22 and 2026-09-23
builds are byte-identical.

Tests: 8 new, 7 FAIL and 1 ERROR on the base code; tests.test_lane_packets
125 OK (skipped=2). manifests/evidence.json re-registers the test file and
the README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/lane-packets-absence-20260928 branch from 11b5341 to f30dbfb Compare September 29, 2026 00:03
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Cross-family review, one round. GPT-6 (gpt-6-astra, effort max, codex exec -s read-only) reviewed head 11b5341f and returned changes-needed: 1 must-fix and 1 should-fix. Both are repaired in f30dbfb7.

The reviewer also verified, beyond the two findings:

  • 126 tests OK at head, and 7 failures plus 2 errors against the base builder;
  • 7 further mutants caught;
  • 28 expected-unchanged build configurations byte-identical to base, including the default and both historical manifests;
  • the trust and separation tests;
  • the ledger check, validate.py and the evidence registration.

Findings and repairs:

  1. Must-fix: an unresolvable ref on a not-refuting vote still released the candidate. refuted_by_absence resolves only refuting votes. absence_refuted now also requires every role's vote ref (facts, fit) to resolve through the same ledger resolver before a release; otherwise the refutation stands. New subtests break the facts ref and then the fit ref. The facts case failed before the fix, as the reviewer reproduced.
  2. Should-fix: no integration test covered the lens-vote exception. Added a lens_votes subtest, with the absence-only row as its positive control.

Checks at f30dbfb7 (rebased on main f0219263):

  • validate.py: exit 0;
  • tests.test_lane_packets, tests.test_saturation_ledger and tests.test_verdict_review_gate: Ran 353, OK (skipped=3);
  • the three registry tests: OK;
  • saturation_ledger.py --check: ok;
  • two mutants, run on git archive copies, are each killed by ManifestNewcomersTests: dropping resolves(entry), and stripping lens_votes before refuted_by_absence;
  • the real-data count is unchanged: 27 absence-only rows, 23 newly carried.

Residuals. None open from this round. Under the bounded-review rule there is one review and one repair, with no second review round.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant