# Project-specific pull request sync proof

Target: [#18854](https://github.com/pingdotgg/t3code/pull/18854).
Candidate: [a8c6716e38](https://github.com/saphid/t3code/commit/a8c6716e3849efebcea17b800ec88b5f2ad45999).
Base: [1451e7cb23](https://github.com/pingdotgg/t3code/commit/1451e7cb23034d29774338608368a15d8845df36).

The existing reactor suite had 20 passing cases. The rebuilt suite has 22 cases in the same file. Against unchanged base production, it produces 19 passes and 3 expected failures. Against the candidate, all 22 pass.

The two parameterized failure cases exercise summary and stack failure separately. Three threads share one pull request across two projects; two threads share the healthy project. A host-level explicit refresh reads each project through its own project reference, updates both healthy threads with their own project summary and stack, and leaves the failed project unchanged. After that failure is removed, the next scheduled sweep retries the failed terminal link even though the healthy project already succeeded. Reads remain deduplicated within one project. The strengthened closed-link case verifies both project invalidations and reads. The existing Deferred-controlled test exercises requests arriving while reads are in flight.

This executes the real PullRequestSyncReactor and its serialized worker with Effect test services, queues, TestClock, and drained work. PullRequestService and projection/command boundaries are fixtures. It proves reactor behavior at those boundaries; it is not a live GitHub, checkout credential-routing, running HTTP server, or client end-to-end test. No browser screenshot is applicable to this server-only change. macOS, Windows, Electron, iOS, and Android were not exercised.

Separate scratch diagnostics execute the actual base and candidate reactors with a refresh before any matching projected link exists. Both drop the request; a later terminal link receives zero invalidations and zero reads in that diagnostic. This reproduces the historical CodeRabbit finding on both revisions, rather than calling it fixed. Keeping unmatched requests requires a lifetime policy beyond this project-grouping fix. The scratch diagnostic is outside the repository and is not added to the durable suite.

Scoped lint and formatting pass. Server typecheck passes after copying a readonly fixture array for the assertion API; no production workaround was needed. Two pre-existing unused-parameter lint warnings remain.
