Repository navigation
Select forward S1 receiver commits for the dormant Execution pair route - #1050
Merged
Merged
Conversation
The forward route reused the fixed original four-receiver table, whose S1 receivers (SDD d0bb4059, FsQuint 708587f2) pin the pair at exactly [0.3.0] with locked restores. A forward candidate could therefore never pass a real hosted receiver run or the publisher-side receiver join; the controls only passed against synthetic proofs. A forward selection now names its own S1 receiver commits and the seven FsQuint SDK-Core source-lock digests in selection.receiverSources. The maintained four-receiver join takes that override; repositories, fixture populations and both rollback receivers stay fixed, and the original pair still joins only the fixed table. The sources enter the content identity. The route stays disabled; nothing is dispatched or published. Refs #1026 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refs #1026 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
EHotwagner
marked this pull request as ready for review
October 22, 2026 15:55
Independent review found receiverSources: null passed the required key and selected the original table inside the shared helper. Selection and acquisition now refuse a non-object override, forward S1 commits may not reuse any of the four fixed receivers, and the doc names the tree inputs. Refs #1026 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #1026 (does not close it). Repairs a latent source gap in the dormant forward Execution pair route from #1044/#1045, which blocks the parent's "hosted receiver run" prerequisite.
Problem
The forward route reused the fixed original four-receiver table (
PAIR_RECEIVERS). Its two S1 receivers pin the pair at exactly[0.3.0], and their locks resolve0.3.0:FS.GG.SDD@d0bb4059:Directory.Packages.local.propsFsQuint@708587f2:FsQuint.Tooling.fsprojand the locksThe receiver jobs restore in
--locked-modeagainst a feed that holds only the candidate packages. The join (pair_consumers) requires every lock entry to beresolved == version. So no forward version (e.g. 0.3.1) could pass a real hosted receiver run or the publisher-side receiver join. The forward controls passed only because the synthetic fixture writes locks at the candidate version.Change
selection.receiverSourcesis a new required, closed key of a forward selection:{"sdd-s1": {"commit": "<40 hex>"}, "fsquint-s1": {"commit": "<40 hex>", "coreLocks": {"<the seven pinned FsQuint lock paths>": "<sha256>"}}}coreLocksmust cover exactly the sevenPAIR_SDK_SOURCE_LOCKSpaths.eng/write-callable-cli-release-readback.py:pair_receiver_table(sources).Nonereturns the unchanged original table.pair_consumers(admission, root, receiver_sources=None)andpair_sdk_bundled_input(..., source_locks=None)take the effective table.eng/execution_pair_forward.py:validate_selectionvalidates the sources through the maintained table.acquire_receiverspasses them to the join.content_idbinds them.RepositoryCommit= A, so the receiver lock hashes exist only after A is fixed, andmainmust stay at A from candidate preparation through the receiver run.coordination/execution-pair-forward-receivers.Validation (local, Python 3.14)
test_execution_pair_forward.py: passes. Refusals go 202 → 221 and the newacquisition-forward-receiverscontrol is counted.real-candidate=1(a real forward 0.3.1 candidate was prepared and reproduced on the clean tree), against shared helper641072f5.test_execution_pair_release.py: passes with case counts identical tomain.Not done / unchanged
enabled:false,selection:null). The admission file and workflows are unchanged.🤖 Generated with Claude Code