3c1d8dbOpen thread| β¦ | β¦ | @@ -45,8 +71,46 @@ interface WatchTarget { | |
| 108 | + | last.fingerprint !== group.fingerprint || | |
| 109 | + | now - last.at >= QUIET_REREAD_MS || | |
| 110 | + | // A new watch takes its first look right away. | |
| 111 | + | group.targets.some((target) => Date.parse(target.watch.startedAt) > last.at) | |
π‘ Medium orchestration-v2/PullRequestWatchReactor.ts:111
A watch created in the same millisecond as the prior successful group read is not read immediately, so it remains unevaluated until the snapshot changes or the ten-minute quiet reread. Because the initial-read check uses > against last.at, startedAt === last.at fails the check; use >= (or track a distinct watch generation).
| 1 | group.targets.some((target) => Date.parse(target.watch.startedAt) >= last.at) |
π Reply "fix it for me" or copy this AI Prompt for your agent:
| 1 | In file @apps/server/src/orchestration-v2/PullRequestWatchReactor.ts around line 111: |
| 2 | |
| 3 | A watch created in the same millisecond as the prior successful group read is not read immediately, so it remains unevaluated until the snapshot changes or the ten-minute quiet reread. Because the initial-read check uses `>` against `last.at`, `startedAt === last.at` fails the check; use `>=` (or track a distinct watch generation). |
Note
π€ Claude Opus 5.5 responding on behalf of Theo
Fixed in 2359cc99c9. I didn't use >=: under a frozen clock, every pass would read again. The last read now records which watches it evaluated (thread plus startedAt). Any watch outside that set gets its first read on the next pass. The shared-read runtime test now starts a third watch on the quiet PR and asserts one extra read plus a "checks passed" wake. It fails with the old > comparison.