Conversation
added 6 commits
September 24, 2026 07:05
A desk-parked backlog row (hold-kind parked) records intended quiet on a lane, but the watcher's stale bound read only captain holds, so an idle parked pane re-alarmed on every pane-hash churn. fm-captain-hold.sh open gains an opt-in --include-parked (identity bound to the parked reason) that only the watcher asks for, and captain_call_stale_bound applies the same first-sight-then-cadence bound to parked holds while keeping the away-posture silence for captain calls only.
Author
|
This PR comes from a fork, so its CI workflow run is waiting for maintainer approval (action_required, no jobs started). Could a maintainer please approve the workflow run so the checks can execute? Thanks. |
Author
|
The branch was re-validated and pushed, so there are new workflow runs waiting for maintainer approval (action_required, no jobs started). Could a maintainer please approve them so the checks can run? Thanks. |
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
Bound stale wakes for parked-hold rows: admit hold-kind parked into captain_call_stale_bound. Parked-hold rows get no stale bound because fm-captain-hold.sh open reads only hold-kind captain, so a bare stale wake fires on every pane-hash churn. Evidence and the smallest fix (from the referenced report): captain-held lanes (hold-kind captain) are already bounded by design - first sight alarms once per declaration (hold identity x status signature), then at most once per 4h re-surface cadence. Desk-parked backlog rows (hold-kind parked) are invisible to every wait bound, so a parked lane whose newest status line is not paused:/captain-held: (for example a resolved: close) gets a bare stale wake on every new pane-display hash, and an idle pane's footer refresh changes that hash every few minutes. The smallest fix is to admit parked holds into the existing bound family instead of inventing a new cadence: let fm-captain-hold.sh open (or a sibling read-only predicate) report hold-kind parked rows, and in captain_call_stale_bound treat them as bounded waits whose declaration scope is the parked row's identity x status signature, owed by the supervisor/desk rather than the captain, keeping first-sight alarming. The fix must not: change the away-posture captain-held silence (parked rows are not captain calls), absorb a live parked gate worker (the config-gated wedge-defer-parked-gate path keeps its own owner), or change unheld lanes, which must keep alarming on every new hash as the pinned tests require. Bounding by a closing verb such as resolved: alone was rejected because it would silence finished unheld deliveries. The pinned test should be extended to a parked fixture mirroring test_open_captain_call_bounds_stale_churn.
What Changed
parkcommand that records a parked-hold occurrence, and letopen --include-parkedreport parked rows without changing captain-only reads.Risk Assessment
✅ Low: The parked-hold bound is limited to open parked rows, preserves the existing captain-held and unheld paths, and the re-review found no substantiated new defect.
Testing
The hold lifecycle run printed passing parked-row admission and user-prose preservation checks before timing out, but the prior payload did not establish a live product result. The watcher run timed out before its parked scenarios; no live product evidence was captured.
Why the scenarios were not driven live: they exercise Firstmate watcher internals with no separate product surface, and driving parked-pane churn against the maintainer's live Firstmate home would disturb its supervision. Each scenario is covered instead by a regression test in tests/fm-watch-triage.test.sh or tests/fm-captain-hold-lifecycle.test.sh that fails before the fix and passes after, and upstream CI runs those suites.
Known limit: the first-sight guarantee for a re-parked row is scoped to holds made through bin/fm-captain-hold.sh park. A raw tasks-axi unhold followed by tasks-axi hold --kind parked bypasses the parked hold occurrence tracking, so that re-park's first stale sight may be absorbed within the four-hour re-surface window. Firstmate routes holds through the wrapper.
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
🔧 **Review** - 1 issue found → auto-fixed ✅
bin/fm-captain-hold.sh:1885- If an existing task body begins withParked hold occurrence: planned work\n\n..., the firstparkcall treats that user-written paragraph as a stamp and silently deletes it. Strip only a valid wrapper-generated occurrence marker.🔧 Fix applied.
✅ Re-checked - no issues remain.
timeout 110 tests/fm-captain-hold-lifecycle.test.shtimeout 175 bash tests/.fm-targeted-run.tmp.sh(temporary targeted watcher runner; removed afterward)✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.
Pipeline status for head 55a75c3: the review, test and document steps all completed in this run (none skipped), along with lint, push and PR. The test step's live-validation finding was approved rather than skipped.