Ticket sections have no shared model, and pipeline roles work from silos of the ticket #643
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#643
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
brief_facts.rb:62ticket_brief = implementations.ticket_body), but each charter narrows attention or disclaims ownership, so the union leaves gaps. On #638 three required Approach-only items stayed undone and every role passed.Decided (user, 2026-09-23)
Blast radius
ticket_body_checker.rb:5,70-74(check_cases_listed,@name == "Cases") and os-sdlcticket_shape.rb:6,16,39-41; ADR-0190 records the duplication as deliberate. Must change in lockstep.## Cases: #643, #642, #641, #640, #639, #637, #629, #628, #626, #625, #604, #597, #593. In-flight implementations keep their snapshot body (ADR-0146).plugins/os-sdlc/maps/poodr-ticket-implementation.yaml) must be checked with the charters.Observed (original, #638 impl 13)
On ticket #638 (implementation 13, 2026-09-23), the
## Approachsection required three things: rewritetests/support/in_process_runner_cli.rbto callPipeline::CLI.startinstead of its own command table; convert four forking test files to in-process; pass theInvocationthrough the Thorstartconfig, not a global. None of the three was done. The programmer instead set a class-level global,OsSdlc::Pipeline::CLI.default_invocation, inbin/os-sdlc-runner. test-writer, test-reviewer, programmer, and behavior-verifier all passed the round. The run then escalated on ticket #629 (the verifier cannot seebin/) before contract-auditor ran, so no gate ever compared the diff to Approach.Related
New Ticket #645 (code roots), new Ticket #646 (validator gap), #644 (test-writer/test-reviewer loop), #629, #638, #639-#642.
Origin
Required work written only in ## Approach passes every pipeline gate undoneto Ticket sections have no shared model, and pipeline roles work from silos of the ticketRewritten 2026-09-23 after root-cause analysis in session d1aa78d1: the Approach gap is one symptom of missing ticket model + instruction silos. Original body preserved in the session scratchpad.
Decision memo: open questions in #643 (design review claude-opus-5-5, 2026-09-23)
Facts found:
REQUIRED_SECTIONS = ["Slice", "Acceptance criteria", "Non-goals"](template_validator.rb:13) makes any body with## Acceptance criteriaa ticket attempt, which then demands Slice and Non-goals (#628 hits this today). All 13 open tickets use## Context, not## Problem; #639 and #641 are ready-for-agent.(a) Headings: one template (
capture.md);ticket.mdretiredB: keep two templates sharing only the four model names. A, 85%: the ticket decided one template; two templates keep the Slice/Non-goals tier trap.
(b) Problem mandatory from capture (template rule); Approach mandatory only at ready-for-agent
B: both mandatory at every tier. A, 70%: ADR-0092 keeps capture cheap; Approach stays malleable until an agent runs the ticket.
(c) Dual-accept: one alias table in both parsers, removed as the last unit of #643
B: keep aliases, file a removal follow-up. A, 70%: removal is two lines with a clear condition (no open body matches
^## (Cases|Context)$). TheContext → Problemalias is needed or #639/#641 failimplementation-openbefore migration.(d) Work list travels by the existing enrich-by-agent-type mechanism (ADR-0169)
B: a new named fact
work_listin brief_facts.rb. A, 80%: map-only change;Map::Validatoralready checks enrich names.Item format:
WORK: R<n> <item>; proof: AC <k> | check; owner: <role>,CONFLICT: ...,UNMAPPED: ....(e) Silo lines: each charter gets the shared goal sentence and keeps one owned part; gaps outside it are reported as
GAP:items(f) #646 is absorbed
B: separate one-line fix first. A, 85%: same method is rewritten here; the #646 repro becomes the first failing test.
Taking all recommendations. ADR amends 0092, 0093, 0161, 0170, 0190, 0202.
Decision memo: migration scope (2026-09-23)
A scan of all 167 open issues found 102 bodies with a legacy heading: 9 with
## Cases(#597 #604 #625 #626 #637 #639 #640 #641 #642) and 93 with only## Context(#133–#649, most from the old capture template, many in the frozen backlog).A (chosen): migrate the 13 named tickets and the tickets filed after this redesign (#644–#649):
## Cases→## Acceptance criteria,## Context→## Problem. Remove theCasesalias from both parsers. KeepLEGACY_NAMES = { "Problem" => ["Context"] }in both parsers.B: rename headings in all 102 bodies and remove both aliases.
Recommendation: A, 70%. The authorization covered the 13 tickets, not a 100-ticket sweep of the frozen backlog. The Context alias costs one table entry. A capture-tier body is not required to have Problem, so the only effect of the alias is that a legacy ticket passes implementation-open once it gains Approach, Acceptance criteria and Owner sketch. Removing the Context alias becomes a follow-up, done when the frozen backlog is closed or migrated.
Resolution
Done: Shared ticket model shipped in both parsers (Problem, Approach, Acceptance criteria, Owner sketch); change-auditor aligns Approach Required work to acceptance criteria and emits the work list (ADR-0209). Review fixes 2026-09-23: Cases and Context aliases removed with a re-decompose message, sections end only at ## in all three parsers, stale Cases sentence removed from six charters, Required work list enforced by both parsers and change-auditor. #646 absorbed.
Evidence: main commits 7f056949..f375143b (build),
51ddc591(Cases alias drop),c57f4e497157c5ce3e6204a9a88ae085e9a872fd7e4207a1(review fixes); os-sdlc suite 1430 runs 0 failures, os-backlog 244 runs 0 failures on7e4207a1; #639-#642 migrated with Required work lists and pass both parsers.Follow-ups: none