Skip to content

Don't suppress re-surfaced offers in the delivery scheduler - #159

Merged
germ-mark merged 5 commits into
mainfrom
llm/ger-2566-differential-harness
Oct 5, 2026
Merged

germ-mark merged 5 commits into
mainfrom
llm/ger-2566-differential-harness

Conversation

@germ-mark

@germ-mark germ-mark commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Removes the foldedOffers digest blacklist from DeliveryScheduler.offer. The disallow-list treated any popped digest as permanently dead, but both engines re-hold a re-surfaced identical offer (Swift re-staples the same Upd bytes idempotently per recv epoch; Rust re-sets offered_proposal per frame), so suppressing it manufactured a NO-OFFER the engines never see and stalled the receiver's send-epoch cadence — the amplifier behind most of the commit-cadence divergence findings in GER-2583.

Test notes: 12-seed deployed-pin differential goes 169 → 121 failing findings, presence exclusions 303 → 178, designed-wedge 104 → 107; plain suite green with the differential tests skipped. Successor to #158 (merged this morning); the residual 121 decompose into the ±1-epoch cadence class (under active diagnosis), post-restore one-direction wedges (unattributed), and the already-filed GER-2587 error-mapping case.

🤖 Generated with Claude Code

foldedOffers dropped an offer whose digest had ever been popped, but a
re-surfaced identical digest is live again on both engines (Swift re-staples
the same Upd bytes idempotently; Rust re-sets offered_proposal per frame).
Suppressing it manufactured a no-offer the engines never see, stalling the
receiver's send epoch. Staleness is already handled by the fold liveness gates.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@changeset-bot

changeset-bot Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: abaab0a

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

germ-mark and others added 4 commits September 26, 2026 15:41
The deployed-pin run resolved twomlspq-swift as a version range, so engine
changes merged ahead of the released tag were invisible to the differential.
Package.swift now redirects the dependency to a local checkout when
TWOMLSPQ_SWIFT_LOCAL is set, and the script defaults to a shallow clone of
twomlspq-swift main (fetched/reset every run). TWOMLSPQ_SWIFT_LOCAL=release
falls back to the released tag for pre/post comparison.

Co-Authored-By: Claude Code <noreply@anthropic.com>
Swift's never-opened funnel and messageFromUnretainedEpoch fold (GER-2586/7)
land as decryptionFailed on the Rust side too: the new Swift case is matched
by text (it exists only on twomlspq-swift main, and this table must also
compile against the released tag), and Rust's Mls — "a frame that never
parsed" per the pin's own binding docs — moves to the receive family: an
unparseable blob is indistinguishable from an out-of-window frame and
garbage per the book's receive rule.

Co-Authored-By: Claude Code <noreply@anthropic.com>
The ±1 epoch class roots at send ops whose errors only print on
findings; a per-send line (proposing, didCommit, epoch before/after,
error class/text) pins the throw site directly. The fold debug lines
get the direction so mixed-pair output separates without the pure-pair
run's principal-id prefix.

Co-Authored-By: Claude Code <noreply@anthropic.com>
A `.rotationInFlight` send (Swift refuses, deployed Rust permits) is the
first real divergence in every affected seed; its downstream apply/skip,
payload, error-class and side-band count differences are the deterministic
one-commit-epoch skew, not independent signal. Record the root op per
direction and count post-root mismatches in a new visible bucket instead of
failing them, still never excusing an unclassified `.other`.

Also stop the Rust respond adapter consuming the parked side-band leg:
Swift's `pqRatchetRespond` keeps it parked, so taking on Rust made a later
`handOutSideBand` see a leg on one engine and none on the other.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@germ-mark
germ-mark merged commit 41d4a2c into main Oct 5, 2026
11 checks passed
@germ-mark
germ-mark deleted the llm/ger-2566-differential-harness branch October 5, 2026 04:02
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