Repository navigation
Conversation
…to routine-wake triage The pause recheck is reached for an ordinary crew only once its agent is confidently dead, and the triage refused every agent that was not alive, so the recheck it was wired to could never be offered. A worker whose agent has exited beside an open pull request is now offered, the model is told which, and the question reads a wait for the merge word of that pull request as the already reported merge whoever gives it.
…e verification
This was referenced Oct 5, 2026
fix(bin): let routine-wake triage close pause rechecks of merge-word waits after the agent exits
#46
Closed
Owner
Author
|
Superseded by #50, which carries this change's final content together with the other three Jev items on one branch. |
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.
Intent
The first Jev item, merged as pull request 38, was accepted from a proposal table as: "Routine monitoring checks - Jev decides: does this check need firstmate, or is it routine? - Stops the stream of 'nothing new' turns; routine checks are closed without a message." All Jev items were then ordered merged: "merge all jev items".
It is live but is not closing the checks it was built for. Since it went live the supervisor has still been woken, one at a time, for every "stale: (paused Ns, awaiting external - declared pause, rechecked on a long cadence not a wedge; confirm the wait still holds)" recheck of the ten JewelTrek pull requests that are open and waiting for a merge word (jeweltrek2627-slim pull requests 222 to 231; examples at 18:49Z and 18:51Z on 2026-10-05 for tasks jt-diamond-cert-mismatch-flag and jt-diamond-consignor-statement, whose metadata carry pr= and whose pull requests are open). state/.watch-triage.log in the firstmate home shows exactly one "jev triage" line all evening (a different task, delivered at confidence 0.61) and none for these.
What Changed
jev_triage_task_evidenceinbin/fm-watch.shnow offers a paused task to Jev when its agent state isdeadas well asalive, and adds aworker_agentfield (runningorexited) to the evidence. Previously anything butalivewas refused, although an exited agent is the state that routes an ordinary crew to the pause recheck. Missing, ambiguous, unreadable and unverified endpoints are still delivered unasked.routinewhether the agent is running or exited. With an exited agent every other wait isneeds_firstmate, and waiting on a person for anything other than that merge still is.tests/fm-jev-wake-triage.test.shcovers the exited-agent pause recheck (asked once, nothing queued, no wake,worker_agentreported) and adds pull-request-read cases: no-checks reads stay eligible, while a pending required check, a draft, and a conflict alongside no checks are delivered.docs/configuration.mdanddocs/verification/jev-wake-triage.mdare updated to match.Risk Assessment
✅ Low: The fix round changed only one commit reference in the verification doc (now 3ac9b3d, confirmed an ancestor of HEAD that carries the fm-watch.sh change), and the underlying change is a small bounded gate widening (alive or dead agents offered, everything else still refused in code) whose two open concerns were already decided by the user as intended behaviour.
Testing
I drove a real
bin/fm-watch.shprocess six times in an isolated firstmate home, with a real tmux pane whose agent had exited, the realbin/fm-pr-state.shreading the real jeweltrek2627-slim pull requests 228 and 230, and the real Jev model. On the base commit the merge-word recheck for pull request 228 was delivered with no triage line, reproducing the report; on the target commit it was absorbed (routine, confidence 0.95), nothing was queued, and the watcher kept supervising. The four adversarial runs on the target all delivered the wake: conflicting pull request 230 without asking Jev, a "waiting to be told which" wait (needs_firstmate 1.0), a CI wait of an exited worker (routine at 0.24, below the 0.6 floor), and no key. The focused suitetests/fm-jev-wake-triage.test.shalso passed. Not driven live: the herdr backend and a running-agent pane. No UI surface, so the evidence is a CLI transcript rather than screenshots.stale: ... confirm the wait still holdswake queued; state/.watch-triage.log absentabsorbed jev-routine declared-pause-recheck (confidence=0.95, routine=0.98 needs_firstmate=0.02, 354 ms), empty stdout and wake queue, watcher ali…MERGEABILITY: conflicting; stale wake queued; no triage log linejev triage delivered declared-pause-recheck (choice=needs_firstmate confidence=1.0 floor=0.6); stale wake queuedjev triage delivered declared-pause-recheck (choice=routine confidence=0.24 floor=0.6); stale wake queued. Only the confidence floor delivered it, th…worker_agent: running; missing, ambiguous, unreadable and unverified endpoints are never offeredbash tests/fm-jev-wake-triage.test.sh, which stubs Jev at the library boundary and stubs the agent state. The six live wat…backend=herdrin their metadata)Evidence: Live transcript: six real watcher runs (base reproduction, target absorb, four adversarial deliveries)
Source: Live transcript: six real watcher runs (base reproduction, target absorb, four adversarial deliveries)
Evidence: Live driver script used for every run
Source: Live driver script used for every run
Evidence: Before and after for pull request 228, merge-word wait, exited agent
Evidence: Adversarial deliveries on the target commit
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
🔧 **Review** - 3 issues found → auto-fixed ✅
bin/fm-watch.sh:1728- The intent says the recheck must be closed for "the ten JewelTrek pull requests that are open and waiting for a merge word (jeweltrek2627-slim pull requests 222 to 231; examples ... jt-diamond-cert-mismatch-flag". Traced read-only against the live firstmate home: all ten tasks now pass every gate up to the pull-request read (last linepaused:, no open keyed decision,pr=recorded, agent statedead), and nine of them readCHECKS: none reported yetand are offered. Butbin/fm-pr-state.shon pull request 230 (jt-diamond-cert-mismatch-flag, one of the two named examples) printsMERGEABILITY: conflictingplusCHECKS: none reported yet, and the unchanged gategrep -Eqv '^(CHECKS: |MERGEABILITY: unknown$)'returns 1 for it, so that task's recheck is still delivered unasked every FM_PAUSE_RESURFACE_SECS. The change keeps this deliberately (docs/configuration.md: "a conflict ... each are" blockers; tests/fm-jev-wake-triage.test.sh:380 asserts it). Whether a conflicting pull request awaiting the merge word should keep waking the supervisor on every cadence, or be absorbed/delivered once, is a product decision: confirm that leaving 230 delivered is acceptable, since the intent names it as a recheck that should be closed.bin/fm-watch.sh:1724- Offering dead agents makes the model the only guard between a merge wait and any other wait of a worker that can no longer resume. The change's own live evidence (docs/verification/jev-wake-triage.md, rowci/exited) shows the model still choosesroutinethere with routine probability 0.56, delivered only because of the 0.6 floor. A dead worker whose last line is a non-merge automatic wait, in a repository with no required checks so the deterministic read does not catch it, is therefore one small model shift from being absorbed for up to six cadences before the streak bound delivers it. Bounded and documented; noted as an accepted tradeoff.docs/verification/jev-wake-triage.md:12- The live-evidence paragraph citesbin/fm-watch.shat commit 1f534a99, which is not an ancestor of this branch: it is a pre-rebase copy of 3ac9b3d (identical fm-watch.sh content, same subject). The SHA will not resolve from the merged history; cite 3ac9b3d instead.🔧 Fix applied.
✅ Re-checked - no issues remain.
✅ **Test** - passed
✅ No issues found.
stale: ... confirm the wait still holdswake queued; state/.watch-triage.log absentabsorbed jev-routine declared-pause-recheck (confidence=0.95, routine=0.98 needs_firstmate=0.02, 354 ms), empty stdout and wake queue, watcher ali…MERGEABILITY: conflicting; stale wake queued; no triage log linejev triage delivered declared-pause-recheck (choice=needs_firstmate confidence=1.0 floor=0.6); stale wake queuedjev triage delivered declared-pause-recheck (choice=routine confidence=0.24 floor=0.6); stale wake queued. Only the confidence floor delivered it, th…worker_agent: running; missing, ambiguous, unreadable and unverified endpoints are never offeredbash tests/fm-jev-wake-triage.test.sh, which stubs Jev at the library boundary and stubs the agent state. The six live wat…backend=herdrin their metadata)drive-live.sh <base d0dd8b5>/bin base-merge-word-exited https://github.com/talktejas/jeweltrek2627-slim/pull/228 yes ...- real watcher on the base commit: stale recheck delivered, no triage log linedrive-live.sh bin target-merge-word-exited .../pull/228 yes ...- real watcher on 1efd16a:absorbed jev-routine declared-pause-recheck (confidence=0.95 ...), empty wake queue, watcher still supervisingdrive-live.sh bin target-conflicting-pr230 .../pull/230 yes ...- delivered, Jev never askeddrive-live.sh bin target-told-which-exited .../pull/228 yes ...-jev triage delivered ... choice=needs_firstmate confidence=1.0drive-live.sh bin target-ci-wait-exited .../pull/228 yes ...-jev triage delivered ... choice=routine confidence=0.24 floor=0.6drive-live.sh bin target-no-key .../pull/228 no ...- delivered, no triage log linebin/fm-pr-state.shon pull requests 228 (CHECKS: none reported yet) and 230 (MERGEABILITY: conflictingplusCHECKS: none reported yet)bash tests/fm-jev-wake-triage.test.sh- all passed✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.