The dispatcher's countExecutingSlots gate (scripts/feature-loop/dispatch.mjs) — an
AWAITING MERGE holder still occupies its slot: work isn't done until merged, and freeing the
slot for a parked PR would let WIP pile up invisibly behind your merge latency. Fix a MERGE card above to free it.
A MERGED — RECONCILING row is a merged (or closed) PR waiting on the dispatcher's next pass
(≤10 min) to advance its manifest's stage — it is not waiting on you.
Repair lane
PR
mode
owned
rounds/cap
last repair
escalated
next actor
age
The dispatcher's repair lane owns red/conflicted PRs on impl/prd-<slug>-* branches ONLY (scripts/feature-loop/dispatch.mjs) —
a CONFLICTING or CI-failing PR on any other branch prefix is UNOWNED: nobody, human or machine, is fixing it automatically until someone picks it up by hand.
Pipeline — left → right is the lifecycle (order shipped in payload, not hardcoded)
Chips answer "who has the ball": YOU founder action ·
MACHINE dispatcher acts ≤1 pass · BLOCKED with reason.
EXECUTING is only legal with a live session or a machine action due — parked work says awaiting-merge or stalled (bold, in the card's last line).
pack vs context:composer owns PACK (bulk retrieval — builds
context-pack.md; Fable never retrieves) · fable owns CONTEXT
(grades the pack, writes the brief — judgment only). Separate columns so a slug stuck between goal and bless can't hide
which half is failing: pack rejected 2× = pack-recipe bug (Composer's), 2 Fable ABORTs = circuit opens. Column
owners ship in the payload's stageOrder[].owner, not hardcoded.
Commands (last 2h) durable on-board receipt · no push notification — this table is the confirmation · Mac poller executes pending within ~5 min
ts
kind
target
status
result
Merged (last 24h) gh-sourced superset — board button, gh CLI, GitHub UI alike (R6, informed-merges.jsonl covers the protected lane only)
PR
title
merged
by
Every PR merged in the last 24h — the complete inform surface push notifications draw from (R7). YOU a human clicked merge ·
MACHINE pr-babysit auto-merged it · UNKNOWN merger not determinable from mergedBy
(always the local gh identity) or the merge-lane-decisions audit trail.
Loop health — last successful outcome, never last activity
loop
verdict
last fire
last success
next expected
fails
reason / fix
30-second daily scan: any row not GREEN or PAUSED gets its fix command run or a defect filed. CONFIGURED rows: check after first expected fire, not before. PAUSED rows carry a founder ack (docs/agents/loop-acks.json) — deliberately not running; a PAUSED row that goes GREEN again means the underlying loop fired successfully and the ack has gone stale (flagged in its reason). UNPUBLISHED means the board payload doesn't carry this loop's telemetry yet — not that the loop is silent.
Step heartbeats — "no row = didn't run"; "ran, found nothing" is now visible
step
last heartbeat
outcome
found
did
duration
Knobs — published at publish-time, finally auditable
knob
value
Setup integrity + notification audit
check
state
detail
Merge-lane decisions (last pass)
PR
lane
reason
merged
Every open PR pr-babysit.mjs considered its last pass, and why — the durable trail lives in ~/tempo-feature-loop/merge-lane-decisions.jsonl. review-lane PRs are held; their reason is the hold reason, so a waiting PR is never a mystery.
Account success
followers
reach (7d)
profile views (7d)
website clicks (7d)
signups (7d)
published
face
format
reach
views
saves
shares
likes
comments
save rate
share rate
retro score
Per-post insights from ~/tempo-content/ig-metrics.json, rendered verbatim — no board-side math beyond formatting. Date links to the post's permalink.
Planned content
id
face
format
hook
status
slot
predicted rank
next actor
Learnings
Machinery
Content lane machinery: MEASURE heartbeats, guard kills, and proof-row gaps — payload.content.machinery, assembled by scripts/loops/lib/content-lane.mjs (one derivation; the board renders, never re-derives). docs/attention/instagram/OS.md is the constitution.
Organic + referral vs paid
week
total
organic
referral
paid
unknown
org+ref %
paid %
Weekly signup attribution split — payload.growth, assembled by scripts/loops/lib/growth-lane.mjs (one derivation; the board renders, never re-derives). Standalone CLI sibling: scripts/growth/signup-share-report.mjs. Classifier: scripts/growth/lib/signup-attribution-class.mjs.
Funnel
ad
Spend
Impr
Clicks
Visitors
Taps
Installs (A)
Installs (iOS-ASC)
Signups
Per-ad lifetime funnel from the newest data-bearing kind:measure ledger row — payload.ads.funnel, derived ONCE in scripts/attention/lib/ads-queue.mjs (deriveFunnel — the same lib the acting runners import). An em-dash is an unmeasured field (null), never a zero. Ad names come from launch rows.
Governance
Machinery
Ads lane machinery: MEASURE heartbeat, next daily fires, and alerts — payload.ads, assembled by scripts/loops/lib/ads-lane.mjs (one derivation; the board renders, never re-derives). docs/attention/ads/STRATEGY.md is the constitution; the founder verb is scripts/attention/ads-veto.mjs.