fleetd #489: the fix is merged and deployed; criterion 6 is still unmet
Also records #486: a settle wait that never settles hangs the suite instead of failing it, because the test seams pass a clock that never advances with a no-op sleeper.
+19
-13
@@ -5505,17 +5505,23 @@ re-litigating:
|
||||
- **The settle waits require `IDLE` or `DONE`, not `injectable()`.** `injectable()` also accepts
|
||||
`BLOCKED`, which is a live turn paused on an approval prompt. Treating that as settled sent
|
||||
`/clear` into an open prompt mid-turn.
|
||||
- **The bootstrap prompt does NOT land — measured 2026-09-12, fleetd #489.** The first real
|
||||
rollover put one line into the pane: `/clearFresh lead session. …`, and Claude Code answered
|
||||
`Unknown command: /clearFresh`. That is `/clear` and the bootstrap text joined with no space,
|
||||
because a paste lands at the cursor. Two faults. The second settle wait is a no-op: `/clear`
|
||||
starts no turn, so the pane never leaves `IDLE` and the wait returns on its first poll — the
|
||||
whole roll ran in 438 ms of a 20-second budget. Under that, the submit keystroke raced the paste,
|
||||
which `AgentControl.submit`'s own javadoc already records as CB-113; `LeadRollover` bypasses
|
||||
`Injector` on purpose, so it gets none of the Enter-nudging that makes a `/clear` land
|
||||
everywhere else. **The failure is safe.** Nothing was cleared, no context was lost, and the
|
||||
handover file is written before `confirm` is even accepted — so the operator recovers by starting
|
||||
a session by hand, which is the manual path this feature replaces. Do not rely on the automatic
|
||||
roll until #489 is merged and redeployed.
|
||||
- **The first real roll failed, and the fix is merged but not yet proven live (#489).** On
|
||||
2026-09-12 the roll put one line into the pane — `/clearFresh lead session. …` — and Claude Code
|
||||
answered `Unknown command: /clearFresh`. That is `/clear` and the bootstrap text joined with no
|
||||
space, because a paste lands at the cursor. Two faults. The second settle wait was a no-op:
|
||||
`/clear` starts no turn, so the pane never leaves `IDLE` and the wait returned on its first poll —
|
||||
the whole roll ran in 438 ms of a 20-second budget. Under that, the submit keystroke raced the
|
||||
paste, which `AgentControl.submit`'s own javadoc already records as CB-113; `LeadRollover`
|
||||
bypasses `Injector` on purpose, so it got none of the Enter-nudging that makes a `/clear` land
|
||||
everywhere else. **The failure was safe**: nothing was cleared and no context was lost. PR #490
|
||||
replaced the second wait with `waitForClearPickupAndSettle`, which nudges the submit keystroke
|
||||
while no pickup has been seen — the same pattern `Injector` already ships for its own post-turn
|
||||
`/clear` (#306). Merged and deployed on 2026-09-12. **Acceptance criterion 6 is still not met**:
|
||||
no roll has yet bootstrapped a fresh session end to end, and only using the feature for real on a
|
||||
live lead can settle it. Until then, treat the manual path as the reliable one.
|
||||
- **A settle wait that never settles hangs the test suite instead of failing it (#486).** The poll
|
||||
loop is bounded only by an injected clock, and the test seams pass a clock that never advances
|
||||
together with a no-op sleeper. Both `waitUntilAtTurnBoundary` and `waitForClearPickupAndSettle`
|
||||
have this shape. In production the bound is real; in the suite it is inert.
|
||||
|
||||
fleetd #480 (PRs #483, #484, #485). Related: #486, #489.
|
||||
fleetd #480 (PRs #483, #484, #485). Related: #486, #489 (PR #490).
|
||||
|
||||
Reference in New Issue
Block a user