standup
Session-scoped triage: what did I leave open, what is rotting, and is the plan still right — answered in under a screen. Runs in seconds over the session, the working tree, open PRs, and the two ledge
Files707
View on GitHubSKILL.mdskills/1-hourly/standup/SKILL.md
GitHub/standup
Two failure modes make long agent sessions expensive: a wall of text, and a rabbit hole where the original focus quietly got diverted six times. This skill answers one question in under a screen — what did I leave open, what is about to rot, and is the plan still right?
Status: partial. The deterministic half is built; the collector is partially built. triage.py (ranking,
tiering, suppression, parking, rendering) is implemented and pinned by test/gh77-standup-triage.sh
(92 assertions). collect.sh — currently implements lenses 2, 3, and 7. The remaining offline lenses and network-dependent lenses are not yet written, so this
skill cannot run completely end-to-end today. collect.sh requires jq in addition to git and
python3; without it every lens degrades to D5 and the collector exits 3 rather than emitting nothing. Design and remaining work:
PROJECT/3-COMPLETED/GH-77-STANDUP-SESSION-TRIAGE.md
· #77.
The division of labour, and why it is drawn here
Everything mechanical lives in triage.py. This file chooses only two things: the what
phrasing of each item, and one optional clause appended to a fixed verdict sentence. Nothing else is
model-authored.
That line is not stylistic. The PRD for this skill went four review rounds across two independent
models and escalated at the cap with a flat finding rate — 11 → 13 → 10 → 10. A converging review
goes 11 → 5 → 2. It stayed flat because a state machine was being specified in prose, where every gap
needs a human reader to find it. Four separate times, a fix faithful to a finding re-broke the same
property through a new route. triage.py exists so those properties are asserted by a test run
instead of argued in Markdown.
Invariants — these are enforced in code, not by instruction
- A tier-1–3 item is never silent. It is rendered, or counted as
K critical beyond capwith a--pageescape hatch. Never suppressed, never parked, never merely absent. - Writes stay inside
PARKED/. Session state lives atPARKED/.standup-session-<id>.json, not under.git/—.gitis a file in a linked worktree, and this repo uses them. - General PARKED notes remain human intake. Lens 8 parses only lines with its explicit
— check:machine field; Markdown checklists and other agent observations in rootPARKED/do not become standup records. Triage may promote those notes underPARKED/README.md. - A park file is never itself emitted as an item. Untracked paths under
PARKED/are excluded; a modified tracked one still surfaces, because it cannot loop. closeis never executed. Only a park record's read-onlycheckprobe runs during collection.- An unchanged rerun writes nothing — no new park file, no touch.
- Output is capped at 15 rendered lines, enumerated: 1 opening + 1 heading + ≤7 items + ≤1 notices + 1 heading + ≤4 body.
Usage
skills/1-hourly/standup/collect.sh > /tmp/lenses.json # Partially built (lenses 2, 3, 7 only)
python3 skills/1-hourly/standup/triage.py --lenses /tmp/lenses.json --dry-run
python3 skills/1-hourly/standup/triage.py --lenses /tmp/lenses.json --apply --session-state PARKED/.standup-session-$$.json
python3 skills/1-hourly/standup/triage.py --lenses /tmp/lenses.json --dry-run --page 2 # beyond the cap
Exit 0 clean · 2 usage or a contract violation · 3 one or more lenses degraded.
Verdict codes are a finite set — no-contradiction, ledger-behind, release-overdue,
insufficient-evidence — chosen with --verdict; --verdict-clause adds at most one newline-free
clause of ≤120 characters. An unbounded clause is a wall of text with extra steps, so it is refused.
Reporting the result
Print triage.py's output as-is. Do not summarise it, do not add a preamble, and do not narrate what
you did to produce it — narration of the agent's own recent work is the single most common
wall-of-text source and is the thing this skill exists to remove.
If a tier-1–3 item appears, say so in your first sentence. If K is non-zero, name the --page
command; the operator must be able to reach every critical item.
Degrading
Say which lens was unavailable and what it costs the verdict. gh missing means the PR and
issue-state lenses did not run — report that, never an implied clean sweep. A skill that degrades
quietly reports a sweep it never performed, which is the defect class this repo has spent the month
removing.