Repository navigation
feat: reconcile open work and require delivery before completion - #45
Merged
Merged
Conversation
bin/fm-open-loops.sh reconciles what a home owes against its live records and lists each unfinished obligation with an owner, a next action, and an age: workers that are missing, failed, or stalled while alive (with the pane's last error signature), ready work that never started, open questions, open and red PRs, unlanded commits on live task copies, and Done rows with no proof of delivery. A source that cannot be read becomes one degraded row and complete:false, never an empty answer. The watcher refreshes the ledger from its existing poll loop through a detached helper, ahead of any signal or check exit, and wakes on a newly overdue set. A ledger the helper stopped publishing is its own wake. Bearings lists every overdue row from the effective state root. A ship or scout reaches Done only with a merged PR, a written report, or the captain's own words, retained at data/<id>/captain-drop.md. The tasks wrapper normalizes the optional task noun and reads real argument tokens. Teardown no longer treats a pushed branch as delivered, requires the words for --force on ordinary work, and refuses a non-regular report.
…d durable wake invariants
…pe landing proofs
…letion regression coverage
…overage and cancellation
…d endpoint fixtures
…e completion contracts
…ource annotations
…e six failing checks: successful teardown fixtures now provide hermetic landing proof; forced-drop recovery verifies the captain’s retained words and dropped outcome; remote retirement coverage matches lifecycle-lock refusal and safe retry; tmux fixtures expose live endpoints so generation-race checks exercise the intended path. Removed brittle hardcoded test-count guards from stock-Bash CI while preserving every test invocation and exit-status failure check. Updated contributor guidance; production completion gates remain unchanged. Verification passed: scratch teardown suite, all three affected public-cleanup cases, full stock-Bash Bearings and snapshot suites, full recovery suite with pinned Herdr 0.7.4, isolated remote spawn/retirement scenario including sibling preservation, remaining stock-Bash companion checks, 353-file Bash parse sweep, ShellCheck, actionlint, and documentation checks. Full remote and public-followup runs reached local timeouts; the affected scenarios passed separately. Temporary verification files were removed
…bin/fm-spawn.sh (exit 251, peak RSS 8,387,300 KiB). Removed redundant classifier, PR, and timeout imports from spawn and the duplicate configuration-inheritance import from the shared Claude-launcher library; spawn and control retain those dependencies through their existing owners. Updated lint ownership documentation. Full bin/fm-lint.sh analysis passed for spawn, control, and the launcher library with cache disabled; spawn measured 7,249,104 KiB peak RSS on Darwin. The full task-delivery suite, focused fresh-launch/relaunch/refusal scenarios through both callers, and documentation checks passed. Exact Linux CI-cap success remains unverified: local container attempts were killed in the 7.75 GiB Docker VM. Lint flags, diagnostics, and CI resource limits remain unchanged. Removed all temporary verification files
This was referenced Oct 8, 2026
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
"I need you to drive work to completion. we don't navigate around problems. We fix the root causes of problems. there are other examples of commits you have forgotten. How do we close the loop so I can trust that assigned work will not be lost or forgotten?" Also that morning: "I want work to get fucking done. No handicaps", and on red CI: "why is ci red? is it because the code is bad or the test is bad? We can't leave it red and work around it".
Known examples of lost or stalled work (2026-09-14 to 2026-09-30): the TeamClaude launcher commit 5bdf408e passed review on 2026-09-14, its push failed, and nothing followed up for 16 days; two API-key guard commits (958c95ed, 341b4d0c) sat unlanded in an old copy; the analytics lane kept 10 copies holding commits not on origin plus 5 not-carried copies archived as bundles in ~/vernant-archive/2026-09-29/; a steward question blocking the approved production engine upgrade went unanswered for 10 hours; a CI decision for a firstmate fix waited 4.5 hours; captain answers on Lavish pages went unseen; green PRs waited hours or days before anyone routed their review.
Decision 2026-10-07, "Proceed as recommended": the earlier all-history version of this work did not converge in review (73 distinct findings over 10 review rounds, 3 to 8 new per round). Ship the smallest version of the ask first, and file each remaining history-proof family as its own later PR. The first PR is: a work item reaches Done only when its deliverable landed (PR merged, report written, or local merge) or the captain dropped it in his own words, and teardown refuses otherwise; one deterministic reconciler, run from the existing watcher heartbeat with no new daemon, that lists rows with an owner, a next action, and an age for workerless in-flight work, ready work not started, aged open questions, red or unreviewed PRs, stalled-but-alive workers (with the pane's last error signature), and unlanded commits; any row past its configurable age limit becomes a wake and a Bearings board row; and one degraded row when a source cannot be read. Archive bundles, stashes, recovery refs, canonical-PR landing in another repository, captured-answer routing proofs, and cross-home aggregation are not part of this PR.
What Changed
Risk Assessment
Testing
Both targeted regression scripts passed. Live isolated completion, reconciliation, real Claude, public GitHub, watcher acknowledgement/cooldown, stale-publication, and Bearings scenarios passed after resolving disposable setup/startup issues. CLI transcripts, persisted ledgers, rendered HTML, and a board screenshot were retained; all disposable resources were removed. No full suite, lint, formatter, push, PR, or CI phase was run.
Evidence: Completion CLI transcript
Source: Completion CLI transcript
Evidence: Live endpoint teardown guard
Source: Live endpoint teardown guard
Evidence: Owned obligation ledger
Source: Owned obligation ledger
Evidence: Live public forge ledger
Source: Live public forge ledger
Evidence: Actual Claude pane diagnostic fixture
Source: Actual Claude pane diagnostic fixture
Evidence: Unreadable inventory degradation
Source: Unreadable inventory degradation
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
✅ No issues found.
✅ **Test** - passed
✅ No issues found.
env TMPDIR="$PWD/.livevalidation" bash tests/fm-open-loops.test.shenv TMPDIR="$PWD/.livevalidation" bash tests/fm-backlog-read-bound.test.shbin/fm-lab-home.sh create <home>followed by realbin/fm-tasks-axi.sh add,start,hold,done, andreopencommands against isolated backlogsbin/fm-teardown.sh <id>andbin/fm-teardown.sh <id> --force --drop-file <words>against disposable Git/treehouse records and an actual private Claude endpointReal local Git commit, branch push to a disposable bare origin, and local-main merge to distinguish recoverable work from landed deliverybin/fm-open-loops.sh --json, default human output, and--heartbeatagainst actual backlog, status, Git, forge, and SQLite sourcesRead-only public GitHub collection through realgh-axi, including origin-discovered and recorded-task-only PRsPrivate 120×40 tmux Claude session with per-launch lifecycle hooks; observed real Stop publication and stalled-worker pane evidenceFM_POLL=1 FM_OPEN_LOOPS_INTERVAL=1209600 bin/fm-watch.shwith no initial ledger;bin/fm-wake-drain.shpresentation and acknowledgementWatcher restart with an unchanged acknowledged obligation, followed by captain disposition and fresh reconciliationFM_OPEN_LOOPS_INTERVAL=1 bin/fm-watch.shwith an aged missing publication and held collection lockUnreadable state-directory permissions, a lookalike non-GitHub origin, empty addressing overrides, and relative task-scoped SQLite progressbin/fm-bearings-snapshot.sh --json, default TOON output, andbin/fm-bearings-board.sh build <payload>; real browser rendering and screenshot of generated board HTMLIsolated Lavish session end and listener retirement, private tmux shutdown verification, evidence-server shutdown, and disposable-directory removal✅ **Document** - passed
✅ No issues found.
🔧 **Lint** - 1 issue found → auto-fixed ✅
🔧 Fix applied.
✅ Re-checked - no issues remain.
✅ **Push** - passed
✅ No issues found.