Repository navigation
Add Go Pickup and bounded reservation model checking - #1850
Merged
Merged
Conversation
Pickup built its whole-label PUT from the issue snapshot taken before history and trust checks. A gate label applied in that window was left out of the replacement, so the PUT deleted it and the Harness still started. Re-read at the PUT, skip the claim when that read shows the gate closed, and keep every other label from the new read.
This was referenced Nov 6, 2026
Closed
Merged
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.
Summary
Add Pickup to the isolated Go prototype, selecting the lowest-numbered Ready Ticket and holding an ADR-0017 reservation through its Ticket run and Claim ending.
The in-test BFS checks both safety properties across three hosts, Day shift changes and crashes: 1,993,250 guarded states; shortest negative traces of 19 actions (
WithoutClaimCount) and 16 (UnconditionalCreate). Bounds and request mapping are inprototype/go/PICKUP-MODEL.md.This Ticket keeps the prototype's existing scope: Ticket runs only, checked-out Base branch, and refusal to resume an existing local branch/Worktree. Specs are passed over. Delivery and production Pass limits remain separate work.
Closes #1834
Evidence
Execution evidence
PATH=/usr/local/go/bin:$PATH go test -C prototype/go -run '^TestPickupSelectsLowestReadyAcrossPages$' -count=1 -vfailed:Pickup run: exit status 1: invalid Issue URL: pickup.After: the same command passed:
--- PASS: TestPickupSelectsLowestReadyAcrossPages.python3 /tmp/issue-1834-run-atomic-label-regression.pyran the supplied Go regression against a temporary copy and failed:want one label PUT for Claim acquisition and one for ending, got 0, identifying both splitgh issue editcalls.After: the same command passed:
--- PASS: TestPickupClaimRequestsMatchModelAtomicTransitions. The complete test is retained inprototype/go/spec_atomic_label_regression_test.go; reproduce from the Go module withgo test -count=1 -run '^TestPickupClaimRequestsMatchModelAtomicTransitions$' -v ./....ghagainst a local TLS mock also confirmed separateLabelAddandLabelRemoverequests; no GitHub writes were involved. The fix uses a whole-label REST PUT for both transitions, matching the model. GitHub CLI source.PATH=/usr/local/go/bin:$PATH go test -C prototype/go ./...passed in 46.579s;go vetpassed. CLI coverage includes paginated selection/trust/history, competing same-identity clones, stale refresh, permission failure, interrupted release and replacement-token preservation.PATH=/usr/local/go/bin:$PATH scripts/affected-tests issue-1830: Go passed (67.09s). The older local review ref conservatively selected Rust too: 1,657 unit tests and the completed integration suites passed before that redundant portion was interrupted. The fetched PR base (origin/issue-1830,1bbcc4fc) already contains Go prototype: isolated static binary, embedded skills, and Ticket run through Harness session #1832, and all 15 files in the actual PR diff are underprototype/go/. Final-source Go tests/vet and exact-head Go CI passed; no local validation task remains running.python3 -m unittest discover -s scripts -p 'test_*.py': 37 tests passed.python3 prototype/go/bundle-skills.py --check: passed.PICKUP_MODEL_VARIANTnegative assertions exited 1 with their expected minimal counterexamples; the ordinary model safety and sensitivity tests pass.Seams under test
Review coverage
Independent Standards and Spec reviews used fixed point
issue-1830(305923a8e93a286b6fa546ddfc02fa30abc23f64), then reviewed all fix hunks throughfef1253c. Each axis read all 24 hand-written changed files.prototype/go/factory-skills.jsonwas intentionally unread: both confirmed its exclusion after reviewing root skill sources,bundle-skills.py,skills.go, the passing snapshot check, and the passing linked-skill/Worktree/streaming behavior test. No other changed file remains unread.Standards raised 1 finding (duplicate Launch/origin discovery), fixed with
launchOrigin. Spec raised 1 finding (atomic model versus split label requests), reproduced and fixed with the retained regression. Counts include fixed findings.Unaddressed findings
Standards
None.
Spec
None.
Security
None.
Security review outcome
No unaddressed introduced findings.
Merge Danger
Door: two-way
The isolated prototype can be reverted. Real Pickup use creates temporary origin reservation refs; a crashed owner requires confirmed-dead manual recovery, as documented in ADR-0017.
Blast Radius: prototype
No production Rust behavior changes. Go tests use temporary repositories and fake external executables.
Built with codex codex-cli 0.164.0 · gpt-6.1-sol · xhigh