Skip to content

Keep the two-checkout parity harness working across a moved bridge - #2240

Closed
SawyerHood wants to merge 1 commit into
ws2b-acp-7-delete-the-acp-tierfrom
ws2b-acp-8-parity-across-moved-bridge
Closed

Keep the two-checkout parity harness working across a moved bridge#2240
SawyerHood wants to merge 1 commit into
ws2b-acp-7-delete-the-acp-tierfrom
ws2b-acp-8-parity-across-moved-bridge

Conversation

@SawyerHood

@SawyerHood SawyerHood commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Stacked on #2238.

What was wrong

pnpm parity --old <main-worktree> --new . spawns the same provider's bridge from two checkouts. FIRST_PARTY_BRIDGE_MODULES names one path per bridge, resolved against each checkout root — so a bridge module that moves makes the old leg spawn nothing.

#2228 moved the ACP bridge into the published kit and repointed the harness at the plugin's new one-line host entry (plugins/provider-acp/src/host.ts). That file does not exist in a pre-migration checkout, so every acp-cursor cell came back:

FAIL acp-cursor/turn-tools: old 0 events/0 rows, new 98 events/2 rows, … 3 stall(s)

Zero events on the old leg, three stalls, ten cells "failing" — which reads exactly like a badly broken change under test. It cost me a full debugging pass to notice the old leg was the broken one, and it would have cost the next person the same.

What changed

FIRST_PARTY_BRIDGE_MODULES entries may name legacyModulePaths, and resolveBridgeLaunch picks the first path that exists in that checkout (falling back to the current path when none do, so a genuinely missing module still fails loudly instead of replaying nothing). The ACP entry lists its pre-kit location.

Also adds the last intended acp-cursor allowlist class, attributed to the layer that caused it: #2234 stopped showing a command's rawOutput envelope when the command printed nothing, and approval-allow exercises that with touch approved.txt.

How I verified

Two-checkout A2 against a main worktree, on a quiet machine, at this stack tip:

provider result
acp-cursor 10 passed, 0 failed, 1 skipped
codex 16 passed, 0 failed, 1 skipped — zero new diffs
claude-code 13 passed, 0 failed, 1 skipped — zero new diffs

Before this fix the same acp-cursor command reported 0 passed / 10 failed with three stalls per cell. pnpm exec turbo run test --filter=@bb/provider-parity --force: 43/43.

AGENT GENERATED: by Claude Opus 5

A parity run spawns the SAME provider from an older checkout, so a bridge
module that moved must still be found there. The ACP plugin's host entry
became src/host.ts when the bridge moved into the published kit, and the old
leg then spawned nothing: every acp-cursor cell reported 0 events and three
stalls, which reads exactly like a broken change under test.

FIRST_PARTY_BRIDGE_MODULES now names where a bridge lived before, and the
launch resolves the first path that exists in that checkout.

Also allowlists the last intended acp-cursor diff class: a command that
printed nothing no longer shows its rawOutput envelope (#2234), which the
approval-allow cell exercises with .

Co-Authored-By: Claude <noreply@anthropic.com>
@SawyerHood SawyerHood closed this Aug 21, 2026
@SawyerHood
SawyerHood deleted the ws2b-acp-8-parity-across-moved-bridge branch August 21, 2026 21:41
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