0056 — #agent-smith carries big updates and the queue rollups; an automated per-event post goes to a DM, and SEVERITY decides the contested middle
- Status: ⚠️ THE NUMBER 0056 IS SHARED BY TWO ACCEPTED DECISIONS — a bare "ADR-0056" does not identify one. Cite this record as
ADR-0056 agent-smith-channel; the other isADR-0056 script-fix-pr(0056-a-script-that-fell-back-to-ai-becomes-a-script-fix-pr-through-smiths-existing-alert-decider.md). Not renumbered, on purpose: ADR-0023 decision 6 and ADR-0025 Open 3. The one record of this, with the citation counts, isNUMBER-REGISTER.md;relay/tests/adr-register.test.tsfails if it goes stale. Accepted for the uncontested families, DRIVER-RULED on the contested three, 2026-10-14 — the severity split below is a Driver's ruling under a resolved Fable round, not a founder's ratification, and that channel stays open. Mechanism in flight on dockquiet-agent-smith-channel. REVISIT TRIGGER, so an unratified narrowing cannot sit as Accepted indefinitely: this status is provisional until either founder responds to the severity split. Whoever sees a response first amends this file; if neither has responded by the time the dock's last row merges, the Driver says so in its closing report rather than letting silence read as ratification. Written at decision time, per ADR-0004, before any of the mechanism merged. No implementing PR is cited here because none existed when this was written. - Date: 2026-10-14
- Deciders — split on purpose, because three different kinds of authority are at
work and attributing a machine's inference to a person is the same defect class
as a post going out under his name:
- The decision that automated per-event posts leave the channel is Gera's.
Spoken 2026-10-14 in
#agent-smiththreadC0BDW7G1Z62/1791993386.027589, verbatim: "I don't want things spamming agent Smith channel. Should just be like big agent Smith updates or our nightly and morning queues, things like that — not mass alerts and stuff. So whoever's doing that, have whatever tool under the hood redirect them. And don't just stop here, see if there's other spaces where this could be worthwhile." Note the last sentence: the sweep beyond the loud emitters is part of the ask, not scope creep. - The standard that CI, deploys, merge guard, red main and fleet belong IN
this channel is Fede's, published the same day as the noise diet
(
docs.propflowai.co/a/alerting-state-2026-10, docksmith-alerts-noise-diet) and already merged as agent-smith #1094, together with the deploy-freshness part of that same diet. Nothing here reverts its structure, and ONE piece of it is narrowed: deploy-freshness moves from the channel to the DM. That is the only part of #1094 this ruling touches, it is the lowest-confidence piece of the ruling (see below), and it is the first thing to put back if Fede objects. Fleet-down, which #1094 also routes into the channel, is left exactly as he set it. - The narrowing — WHICH of the two standards governs the contested three
(fleet-down, deploy-freshness, red-main pairs) — is the Driver's, ruled
2026-10-14 from a resolved two-pass Fable round (receipt
ff91594ec, confidence reported as medium, the lower of the two passes). Neither founder has seen or ratified that narrowing. It is surfaced to both in the Driver's report so either can overrule it, and every destination is a single module constant, so each piece reverses in one small PR.
- The decision that automated per-event posts leave the channel is Gera's.
Spoken 2026-10-14 in
- Systems:
gera-propflow/local-bin(slack-poster,fleet-stability,prequeue-status-alarm,task-event, and the new shared destination reader),PropFlow-Technologies/propflowai(.github/workflows/review-verdict-watchdog.yml,config/channels.toml),PropFlow-Technologies/agent-smith(git_hygiene.py,machine_hygiene.py), andgera-propflow/dotclaude(hooks/context-budget.py, the reviewer-pool check scripts).
The problem
#agent-smith is Smith's two-way brain channel, and it had become a log. Measured
from the outbound ledger (~/.claude/smith-state/outbound-ledger.db, table
posts, channel C0BDW7G1Z62, 30 days) plus a Slack scan: 1,520 top-level bot
posts, of which 785 were ✅ board-row closures from one specialist, 177 were
"Fleet check: TROUBLE", 70 were review-wait nag roots carrying another 134
bot-only thread replies, and a long tail of compact-delivery failures, pre-queue
alarms, reviewer-pool checks, driver progress lines and git-hygiene notes.
Smith deleted 1,227 of them by hand, taking the window down to 254. A hand deletion is not a fix — the emitters were untouched, so the channel would have refilled within weeks. The thing worth writing down is not the cleanup; it is where each post goes from now on, and what stops a new emitter quietly aiming at the channel again.
The decision
One mechanism, not N channel decisions. Every redirected emitter reads ONE
shared destination reader, in the shape lib/mini_alerts.py already proved on the
preceding dock (post_args() yielding an explicit --channel, a file on disk
because these posters run under launchd and cannot see an env var, an env seam for
tests, and never a silent fallback to the team channel). A per-tool
#agent-smith → D… string swap is explicitly refused: six hardcoded ids is the
failure the preceding dock existed to delete, and re-introducing it one emitter at
a time is the same defect with better manners.
What the channel keeps: big Agent Smith updates, the nightly and morning queue rollups, every human-addressed post and thread reply, and decision relays. A reply inside a person's thread is not an automated per-event post and is not touched — including the receipts this dock itself posts into Gera's thread.
What leaves for the DM: the automated per-event families — board-row closures, fleet checks, review-wait nags, compact-delivery failures, pre-queue alarms, reviewer-pool checks, driver progress lines, git-hygiene.
The contested three, by SEVERITY rather than by family (the Driver's ruling, not a founder's): a per-event banner goes to the DM; a state change meaning the fleet CANNOT RUN — fleet-down, red main — stays in the channel as a big update. The reasoning, from the Fable round: the two standards overlap narrowly, covering only deploy-freshness (53 posts/14d) and fleet-down (9/14d), so freezing every redirect until the founders reconcile would hold up work nobody disputes while the channel refilled. Fleet-down is sustained-only (120s sustain, 900s cooldown) — a rare state alert that sits inside Gera's own "big updates stay" carve-out, and routing it to a single-reader DM would recreate the 2026-07-13 burial that alert was built to prevent. Fede's rationale argues "not #alerts" rather than channel-over-DM, so moving deploy-freshness to the DM honours both texts rather than choosing between them.
⚠️ Red main is kept by the SEVERITY RULE, not by that overlap evidence, and the distinction matters. The measured overlap covers only deploy-freshness (53 posts/14d) and fleet-down (9/14d). Red main has no measured overlap and no measured cadence — it is kept in the channel because "main is red" is a state meaning the fleet cannot ship, which is the same test applied to fleet-down, and for no other reason. A reader must not take the Fable measurement as covering it. If its cadence turns out to be per-failing-run rather than per-state-transition (see the cost section, where this is listed as unverified), the severity rule stops applying to it and it should move.
Deploy-freshness is the lowest-confidence piece of this ruling and should be the first thing reverted if Fede objects. It rests on a reading of his rationale rather than on a measurement, and the cost section concedes that verdict-threading into a DM is untested. It is one module constant; reverting it is one small PR.
What this costs if the narrowing is wrong
Stated because a medium-confidence ruling that hides its downside is worse than no ruling:
- If Gera wants fleet-down in the DM too, a few rare posts per fortnight of residual channel noise remain until he says so.
- If Fede watches deploy-freshness banners in-channel, this gives that family one reader, and the remediation verdict threading into a DM is untested — a stuck deploy could be noticed later than it is today.
- Red-main cadence is unverified. If it posts per failing run rather than per state transition, this ruling keeps per-event noise in the channel until that emitter is made transition-only. Whoever implements the red-main row must measure the cadence before relying on this paragraph.
Why a guard, not just a redirect
The backlog was deleted by hand once. A redirect that nothing enforces decays the first time somebody adds an emitter, and the preceding dock already paid for this lesson: its guard test is what proves each poster reads the one key, derived per file rather than pinned to a hardcoded list, and proven by deleting a poster's line and watching the build fail naming that poster. This dock ships the sibling of that test. A destination standard with no test is a comment.