issue-create: refuse bodies that skip the capture template #765
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
rule-proposal
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#765
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
On 2026-09-27 agents filed #753-#764 with os-backlog issue-create using an ad hoc Problem/Evidence/Fix/Origin body and no skeptic verdict. The CLI accepted every one of them. issue-create checks only for a ## Origin heading, a scope label, and one filed-by/* label. The capture SKILL.md's steps 1-3 (fill in the template, run the STE pass, pass the skeptic gate) are prose instructions only, so a subagent handed the command shape bypasses them.
This ticket absorbs #739: six tickets (#710 #711 #720-#723) reached the tracker with title "T" and body "## Origin\nB".
Reproduce
os-backlog issue-create --title "x" --body "## Problem\nx\n## Origin\nnone" --label plugin/os-backlog --label filed-by/agent
Today this creates an issue, though the body skips the template, the STE pass, and the skeptic gate.
Approach
issue-create refuses a body unless:
Origin contains Session:, Transcript:, and Where: lines;
Print which check failed, in the style of the existing scope-label refusal.
All checks, old and new, move into one Backlog::IssueCreate validator so one place names the failed check.
Required work:
Acceptance criteria
Owner sketch
class Backlog::IssueCreate
def validate_body!(body, labels:, user_approved:)
end
end
Origin
• Trigger: retrofit pass on #753-#764, 2026-09-27, coordinator-directed
• Improvised this session: none
• Chain: #753-#764 skip the capture template ← IMPROVISATION (a subagent filed issues directly with issue-create, bypassing the skill's prose-only template/STE/skeptic steps)
• Root candidate: this ticket
• Where: plugins/os-backlog/bin/os-backlog issue-create; plugins/os-backlog/skills/capture/SKILL.md
• Session: 8e4aac4f-9878-45da-ac68-c7d55261a73f
• Transcript: /tmp/claude-1000/-home-jared-dev-cc-os--claude-worktrees-crc-pass-os-sdlc/8e4aac4f-9878-45da-ac68-c7d55261a73f
Work started 2026-09-27 on branch ticket-765 via /os-sdlc:implement; absorbs #739.
Resolution
Done: Backlog::IssueCreate owns every issue-create gate: scope label, filed-by label, ## Problem first heading, ## Origin with Session:/Transcript:/Where: lines, 8-character title minimum, and VERDICT: CREATE or --user-approved for filed-by/agent bodies; each refusal names the failed check in the issue-create: style; capture SKILL.md step 4 describes the new refusals; ADR-0234 records the decision and amends ADR-0161.
Evidence: Implementation 53 on branch ticket-765, 20 dispatches, all gates green at close; tests issue_create_template_gate_cli_test.rb and issue_create_origin_lines_gate_cli_test.rb; os-backlog suite 266 runs 0 failures; this very ticket #777 was filed through the new gates with --body-file. Deviation: three inherited fixtures from #658/#728 (one-character titles, bare bodies) were hand-fixed by the orchestrator after three programmer-repair rounds could not edit tests, then the run re-entered at the repair node.
Follow-ups: #777 IssueCreate drops its svc dependency (lens challenge: A11 holds, code defect) VERDICT: CREATE.