Context
Source: Cloudflare/Astro issue-triage post + withastro/triagebot-action.
/rad-research is a straight line: load the spec → confirm the read → ask clarifying questions → derive a slug → write the artifact → summarize. There is no step that can conclude the request should not be worked on. Every intake is presumed to be real, actionable work, so the cheapest possible refutation ("this is intended behavior", "there isn't enough here to act on") can only happen after the two most expensive steps: writing a plan and occupying the architect's approval gate.
Astro spends its cheapest states on refutation. Of their 11-label state machine, four exist purely to exit early:
triage: not actionable — not a bug report (terminal)
triage: needs reproduction — incomplete details (re-enterable)
triage: unable to reproduce — agent could not reproduce (re-enterable)
triage: skipped — environment/version unsupported (terminal)
And their four-phase skill (reproduce → diagnose → verify → fix) isolates verify — "how to distinguish bugs from intended behavior" — as its own subagent, for an explicitly stated reason: it
"prevents the frequent LLM bias toward forcing a solution when a bug might not actually exist."
That bias is not specific to triage. A planning agent handed a request will produce a plan; nothing in RAD's intake is structurally positioned to say "no plan is warranted here."
This also gives #92 the consumer it says is missing. #92 observes that the research artifact's Status: header has no consumer. A disposition vocabulary is exactly that consumer.
Proposal
Give the research artifact an enumerated Disposition: header written by /rad-research, and a deterministic downstream check that honors it.
Vocabulary (small, frozen, RAD-flavored — not a copy of Astro's triage labels):
| Disposition |
Meaning |
Downstream |
actionable |
a plan is warranted |
/rad-plan proceeds (today's only behavior) |
not-actionable |
the described behavior is intended, already covered, or out of the project's scope |
/rad-plan refuses; artifact records the evidence |
insufficient-context |
the request cannot be scoped without specific missing information |
/rad-plan refuses; artifact lists exactly what is missing |
superseded |
an existing plan/feature already covers it |
/rad-plan refuses; artifact names the covering feature |
/rad-research gains a refutation step before writing the artifact whose only job is to try to establish a non-actionable disposition — citing evidence from the codebase (a test pinning the behavior, a doc stating it, an existing plan). Absence of evidence yields actionable: the check is fail-open toward doing the work, because refusing real work is the worse error at intake.
The enforcement is a deterministic script (scripts/check-disposition.sh), not prose in the command file, so /rad-plan cannot be talked past it.
Hard constraints
- Fail-open toward
actionable. A missing, malformed, or absent Disposition: header means actionable — this is additive and must not break existing artifacts or block any workflow that runs today.
- Non-
actionable is a refusal to auto-proceed, never a lock. An explicit operator override (documented flag) always exists; RAD does not let an agent's judgment veto a human's intent. Overrides are recorded.
- The refutation step must cite a concrete artifact (file:line, test name, existing plan path) for any non-
actionable disposition. An uncited refusal is invalid and degrades to actionable.
- No new gate. This sits upstream of Gate 1 and changes no approval authority.
Files in scope
.claude/commands/team/rad-research.md (refutation step + Disposition: in the artifact template)
scripts/check-disposition.sh + scripts/test-check-disposition.sh (new)
.claude/commands/team/rad-plan.md, .claude/commands/team/rad-adopt.md (consume the check)
docs/daily-workflow.md
Suggested wave structure
- Wave 1 — Vocabulary + check script:
Disposition: header, check-disposition.sh with the fail-open default and the override path. Validate: artifact with no header → exit 0 (actionable); unknown value → exit 0 with a warning, never a hard fail; non-actionable without a citation → treated as actionable; override flag → exit 0 and prints what was overridden.
- Wave 2 — Research refutation step + plan-side consumption. Validate: a request already pinned by an existing test lands
not-actionable with the test cited; a vague request lands insufficient-context listing the missing items; /rad-plan on a non-actionable artifact refuses with the citation and the override instruction; every existing artifact in .agents/research/ still plans cleanly.
Acceptance criteria
Related
Context
Source: Cloudflare/Astro issue-triage post +
withastro/triagebot-action./rad-researchis a straight line: load the spec → confirm the read → ask clarifying questions → derive a slug → write the artifact → summarize. There is no step that can conclude the request should not be worked on. Every intake is presumed to be real, actionable work, so the cheapest possible refutation ("this is intended behavior", "there isn't enough here to act on") can only happen after the two most expensive steps: writing a plan and occupying the architect's approval gate.Astro spends its cheapest states on refutation. Of their 11-label state machine, four exist purely to exit early:
triage: not actionable— not a bug report (terminal)triage: needs reproduction— incomplete details (re-enterable)triage: unable to reproduce— agent could not reproduce (re-enterable)triage: skipped— environment/version unsupported (terminal)And their four-phase skill (
reproduce → diagnose → verify → fix) isolates verify — "how to distinguish bugs from intended behavior" — as its own subagent, for an explicitly stated reason: itThat bias is not specific to triage. A planning agent handed a request will produce a plan; nothing in RAD's intake is structurally positioned to say "no plan is warranted here."
This also gives #92 the consumer it says is missing. #92 observes that the research artifact's
Status:header has no consumer. A disposition vocabulary is exactly that consumer.Proposal
Give the research artifact an enumerated
Disposition:header written by/rad-research, and a deterministic downstream check that honors it.Vocabulary (small, frozen, RAD-flavored — not a copy of Astro's triage labels):
actionable/rad-planproceeds (today's only behavior)not-actionable/rad-planrefuses; artifact records the evidenceinsufficient-context/rad-planrefuses; artifact lists exactly what is missingsuperseded/rad-planrefuses; artifact names the covering feature/rad-researchgains a refutation step before writing the artifact whose only job is to try to establish a non-actionabledisposition — citing evidence from the codebase (a test pinning the behavior, a doc stating it, an existing plan). Absence of evidence yieldsactionable: the check is fail-open toward doing the work, because refusing real work is the worse error at intake.The enforcement is a deterministic script (
scripts/check-disposition.sh), not prose in the command file, so/rad-plancannot be talked past it.Hard constraints
actionable. A missing, malformed, or absentDisposition:header meansactionable— this is additive and must not break existing artifacts or block any workflow that runs today.actionableis a refusal to auto-proceed, never a lock. An explicit operator override (documented flag) always exists; RAD does not let an agent's judgment veto a human's intent. Overrides are recorded.actionabledisposition. An uncited refusal is invalid and degrades toactionable.Files in scope
.claude/commands/team/rad-research.md(refutation step +Disposition:in the artifact template)scripts/check-disposition.sh+scripts/test-check-disposition.sh(new).claude/commands/team/rad-plan.md,.claude/commands/team/rad-adopt.md(consume the check)docs/daily-workflow.mdSuggested wave structure
Disposition:header,check-disposition.shwith the fail-open default and the override path. Validate: artifact with no header → exit 0 (actionable); unknown value → exit 0 with a warning, never a hard fail; non-actionable without a citation → treated asactionable; override flag → exit 0 and prints what was overridden.not-actionablewith the test cited; a vague request landsinsufficient-contextlisting the missing items;/rad-planon a non-actionable artifact refuses with the citation and the override instruction; every existing artifact in.agents/research/still plans cleanly.Acceptance criteria
/rad-researchcan conclude a request is not worth planning, with cited evidencescripts/check-disposition.shis deterministic, fail-open toactionable, and independently invocable/rad-planand/rad-adopthonor it, with a recorded human override always availableDisposition:is the documented consumer that Research artifacts are invisible to /kickoff and rad-status.sh — and their Status: header has no consumer #92 says the header layer lacksRelated
Status:header has no consumer; this supplies one[NEEDS CLARIFICATION]markers in plans;insufficient-contextis the intake-level sibling, one stage earlier and cheaper--light: no plan at all