Require exactly one category per ticket at capture and refuse non-code-change in implement #973
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#973
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
Tickets have no category, so a non-code ticket (prose, owner ruling, spike, eval run) can enter an implement map and fail there. The owner ruled on 2026-10-09 (handoff
docs/handoffs/2026-10-09-takedown-implement-path.md, ruling 4) that capture requires exactly one category and that both implement maps accept onlycode-change.Reproduce
n/a: feature ticket.
Approach
Handoff build-order step 7. Categories (one per ticket):
code-change,prose-artifact,owner-ruling,investigation,eval-run,no-test-target,cross-repo,umbrella,recurring-chore. A ticket that fits two is anumbrella: split it. Run/os-adr:findand the lens-taxonomy-decisions test to decide whether the rule needs an ADR.Required work:
issue-createrefuses a ticket without exactly one category label — check: presentumbrellainplugins/os-backlog/**/*.rb/os-backlog:captureskill text lists the nine categories.{number, category, target, failing_behavior, reason}).implementation-openforpoodr-ticket-implementationandtakedown-implementrefuses a ticket whose category is notcode-change.Orchestrator work: the backfill touches about 181 tracker labels; run it through a script, not by hand.
Acceptance criteria
issue-createwith no category label, when it runs, then it refuses and names the nine categories.issue-createwith two category labels, when it runs, then it refuses.prose-artifact, whenimplementation-openruns on either map, then it refuses with the category named.code-changeticket, whenimplementation-openruns, then it proceeds.Owner sketch
Origin
docs/handoffs/2026-10-09-takedown-implement-path.md.docs/adr/0276-ticket-takedown-runs-one-pipeline-the-eval-harness-flow-is-the-production-pipeline-live-mode.md)plugins/os-sdlc/eval/ticket-takedown/,plugins/os-sdlc/maps/,plugins/os-sdlc/skills/implement/SKILL.mdVERDICT: CREATE
Work started on branch ticket-973 (worktree .claude/worktrees/ticket-973, from main
03a44f31). ADR-0287 amends ADR-0234.Rulings binding this work:
Resolution
Done: Every open ticket carries one category/* label (190 of 191; #982 is new and uncategorized); implementation-open refuses a non-code-change ticket on all three implementation maps; 30 more categories recorded in docs/triage/2026-10-09-ticket-categories.json.
Evidence: main
0e281f66: os-sdlc 1524 runs 0 failures, os-backlog 302 runs 0 failures, ticket-takedown 480 runs 0 failures; label counts verified through Backlog::ForgejoBackend.list.Follow-ups: none