os-sdlc: BriefAssembler emits empty stub briefs (no ticket text) #365
Labels
No labels
P0
P1
P2
P3
bug
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
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#365
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?
Context
During the #361 run, briefs 001-011 carried no ticket text; programmer round 2 went astray inventing work (StatusTableTrimmer) from an empty brief. Corroborated 2026-08-15 (#402/#405 run, session https://claude.ai/code/session_01GSYJVRGmBiLGjPppHjY3bZ): every runner brief was a ~68-byte stub; the orchestrator hand-enriched all of them.
Code-probe 2026-08-15: TicketFlow#brief_body (lib/os_sdlc/runner/ticket_flow.rb:106-112) always emits the stub "Work the stage."; StageBriefAnnotations covers only test-writer/review/seam-designer (code-probe has no case). The tickets DB table has no body column and nothing in the dispatch path fetches from the tracker, so the ticket text is a capability gap, not a wiring gap. ticket[:target_name] + Project.load already exist but are never rendered into briefs. Prior-stage artifact paths already have the EvidenceBrief.path_for / SeamDecision.path_for pattern.
Decision (consistent with ADR-0109 briefs-are-markdown-files): fetch the ticket body once at intake via the tracker CLI and store it as .sdlc/tickets//ticket-body.md; briefs reference/inline it from there. Rejected: a DB body column (duplicates markdown-as-truth into SQLite); per-dispatch tracker fetches (network in every transition).
VERDICT: CREATE — hard floor; observed failure in two separate runs (#361 bad-output trace, #402/#405 bounce + hand-enrichment).
Tasks
Acceptance criteria
Out of scope
Namespaced-agent event matching (#400); review-packet content (#405, shipped).
Deviation incident 2026-08-15 — /os-sdlc:implement run for #402+#405, session https://claude.ai/code/session_01GSYJVRGmBiLGjPppHjY3bZ. Deviating skill: plugins/os-sdlc/skills/implement/SKILL.md.
Expected: runner-emitted briefs carry the ticket body, target block, and prior-stage artifact paths so the named agent can work from the brief path alone. Actual: every brief for #402 and #405 was a ~68-byte stub ('# code-probe brief for ticket 402 / Work the code-probe stage.'); the first code-probe dispatch bounced refusing to fabricate, and the orchestrator hand-enriched all 7+ briefs (ticket text from os-backlog show, target from .sdlc/project.yaml, pointers to evidence-brief/seam-decision/verdict). Minimal fix direction: intake/transition brief assembly should inline exactly those three blocks.
Work starting: pre-flight passed (verdict CREATE, checklist present, ready-for-agent). Running via /os-sdlc:implement in parallel with #409.
Resolution
Done: Intake fetches the ticket body once via the tracker port into .sdlc/tickets//ticket-body.md; every stage brief renders ticket body, target block (Project.load), and existing prior-stage artifact paths; StageBriefAnnotations gains the code-probe case; TeaTracker.for selects NullTracker only for genuinely tracker-less roots, configured-but-unreachable trackers fail intake loudly
Evidence: commit
25f35cfon branch worktree-issue-365; suite 946 runs 0 failures; 16 changed files rubocop-clean; reviewer APPROVE round 3 at .sdlc/tickets/365/verdict.mdFollow-ups: #411: dedup tracker-line regex (skeptic VERDICT: CREATE); gate-log evidence gap already tracked in #410