Live tracker

Stale PR drive

Decision b87939371 — drive the 6 revivable stale PRs to merge; close #260 with reasoning.

Where this stands — 28 Aug

Measured per branch rather than treated as one backlog. Two are a merge-main away from green; four are 2-5 conflicts in small diffs; #260 is 111 behind with 14 conflicting files across 16 — a rewrite, not a rebase. Three already have RED CI, which the derived status surfaced and a hand-written page would have missed.

Status is DERIVED from each row’s own PR and decision links by bin/refresh-tracker stale-pr-drive — never typed. Last refreshed 2026-09-16 06:40Z.

Landed

Nothing from this list yet. The measurement itself is the landed part: every branch now has a behind-count, a conflict count and a file count, so none of them has to be re-diagnosed.

Phase 1 · Zero-conflict — a merge-main away

PHASE 1

Revive what is already mergeable

no conflict resolution required

Two PRs that only ever needed their branch brought up to date reach main.

StatusItemEvidence
done#142 — standup: an owned commitment is a ticket, a dropped item is never silent“a commitment someone made in standup should not evaporate because nobody wrote it down”108 behind but zero conflicts across 4 files. ⚠️ Fede’s branch, not a Smith one — worth a word with him before driving it.PR #142
108 behind · 0 conflicts · 4 files
done#291 — docs(failure-notes): fold PR #5496’s root cause into maintenance-eval“the same maintenance-eval failure keeps being rediscovered from scratch”51 behind, zero conflicts, 1 file — the cheapest diff here. Its CI is nonetheless RED, which is why the status column is derived and not typed.PR #291
51 behind · 0 conflicts · 1 file

Phase 2 · Small conflicts — 2 to 5 files

PHASE 2

Resolve the small ones

each diff stays under 10 files

The four small-conflict PRs land, or fail on something real rather than on staleness.

StatusItemEvidence
done#303 — feat(hygiene): session-gc — collect the disk state dead sessions leave“dead sessions leave state on disk forever and nothing reaps it”41 behind, 2 conflicts across 6 files. Newest of the stale set.PR #303
41 behind · 2 conflicts · 6 files
done#271 — fix(alerts): the decider ledger discarded morpheus-nightly’s own root cause“the alert told us something failed and threw away the reason”67 behind, 2 conflicts across 4 files.PR #271
67 behind · 2 conflicts · 4 files
done#295 — tests(eval_heal): raise the real-time wait ceilings 20s → 90s“eval_heal flakes on timing and the red is never the code”66 behind, 3 conflicts across 6 files. CI already RED.PR #295
66 behind · 3 conflicts · 6 files
done#267 — The decision driver records the answer it observed“a decision Gera answered can read as unanswered, and nothing records what was seen”69 behind, 5 conflicts across 9 files. Checked for the same supersession as #260 and it is NOT supersededanswer_record appears zero times anywhere on main and twice on this branch. Genuinely unshipped work, and it closes the exact gap hit this morning: Gera’s three answers landed with answer: null, provable only from by: “gera via /agents”.
Merge finished by hand after its agent died on a session limit. Verified the resolution kept BOTH sides: zero code tokens from main missing, and the _NO_ANSWER_ECHO_PATCH_ID determinism gate intact (4 occurrences, same as main). A line-level check first flagged 16 “lost” docstring lines — a false alarm: the branch REPHRASED them (“TWO PATCH GATES” where main says ONE, “five activities” where main says four). Its docstring is the superset. 265 tests green.
PR #267
69 behind · 5 conflicts · 9 files

Phase 3 · The rewrite

PHASE 3

Decide the rewrite, do not attempt it

nothing is merged from a branch nobody can reconstruct

#260 is closed with its reasoning recorded, and the work stays recoverable in git.

StatusItemEvidence
withdrawn#260 — fix(decisions): three guards more permissive than the thing they guard“three guards pass inputs they were written to reject”CLOSED — and the 14-file conflict was never the real objection. The work is already on main: all four decision-block files exist there and are LARGER (1161/359/897/334 vs 915/265/685/259), landed 2026-08-23 — six days after this branch’s head. Including the fixes, not just the feature: main carries the exit-3/exit-4 split (WAKE_UNREACHABLE / WAKE_NEEDS_CONFIRMATION) from this branch’s own 3c6caf1.
Stripping comments and docstrings and comparing code tokens: zero unique to this branch in three of the four files. The 66 raw line differences are reflowed prose.
⚠️ And its one real difference is why it must not merge. It defaults chat_jid=channel or config.SLACK_AGENT_SMITH_CHANNEL. Main removed that default on purpose — its docstring names the 2026-08-19 incident: the sweep armed 25 drivers and every one announced into #agent-smith, because a block raised by a Claude Code session has no Slack thread and the missing origin fell back to a broadcast. Merging this would reintroduce a fixed production incident.
PR #260
111 behind · 14 conflicts · 16 files
close, do not resolve

Standing risks

These are not tasks. They are things that stay true until someone changes them.

Merge origin/main FIRST on every one. agent-smith's manifest tests read propflowai's LIVE SHARED manifest, and manifest.py carries the allowed-value enum — main taught it the github-actions runtime, so a branch predating that commit rejects a manifest the fleet already accepts and reds the pre-push gate on 5 tests it never touched. Every branch here is 41-111 behind. Also: #142 is Fede's branch, not a Smith one.

PropFlow Docs