poodr-implementation map: code-probe fails greenfield tickets whose target classes do not exist yet #524
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#524
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?
Session: jared/hyperthrive-websites#19 ("Slice 0 of #17: Site::Page/Media/Term domain model and WpRest::SiteBuilder")
Issue:
os-sdlc-runner implementation-open <session> 19 maps/poodr-implementation.yamlflow: change-interpreter passed (dispatch 1), code-probe passed (2), message-tracer requested re-probe (3), second code-probe (dispatch 4) returned verdict:fail — Migrator::Site lacks #pages/#media/#terms, WpRest::SiteBuilder doesn't exist (CLI classified PHANTOM), no migrator/lib/migrator/site/ dir exists.Problem: For greenfield tickets that CREATE new classes, absent artifacts are expected starting state, not a failed probe. The map's fail edge from code-probe conflates "claim about existing code is false" with "target doesn't exist yet."
Expected: Probe distinguishes PHANTOM-because-new from PHANTOM-because-wrong-claim (interpreted behavior names artifact as to-be-created), OR map's fail edge from re-probe routes to seam-designer/test-writer instead of implementation-failed.
Workaround used: Hand-rolled TDD outside pipeline.
Discoverer: jared/hyperthrive-websites, session 01WczDUXXTYSuFuZNRQQLf49, 2026-09-03. code-probe verdict logic conflates absent new-class artifacts with probe failures.
Decision
VERDICT: CREATE (ticket-skeptic, 2026-09-03: user-requested work, hard floor). Option A chosen by the user on 2026-09-03: the change-interpreter names artifacts the ticket will create, and the evidence CLI and code-probe treat their absence as expected. Option B (route the re-probe fail edge to seam-designer) rejected: it lets false claims about existing code flow forward and does not cover the first probe's fail edge.
Context
Evidence (plugins/os-sdlc, 2026-09-03):
phantom_entryin lib/os_sdlc/evidence/report.rb:174-179.all_phantom?(report.rb:140) sets the CLI exit code in lib/os_sdlc/evidence/cli.rb:20. Thecollectcommand accepts only--rootand--explain.Tasks
--expect-new TOKEN[,TOKEN...]option tocollect(lib/os_sdlc/evidence/cli.rb). A token in that list that resolves to nothing renders asNEW: <token> — expected absent (ticket creates it)instead of PHANTOM, and does not count inall_phantom?. Tests in tests/evidence/report_test.rb and tests/evidence_bin_test.rb.--expect-newthat DOES resolve renders asCLAIMED-NEW-BUT-EXISTS: <token> — <where>so a wrong CREATES claim cannot skip a real probe. Test alongside the above.CREATES: <token>for each class, module, or method the ticket introduces; emit it only when the ticket text names the artifact as new. Update the handoff schema block.--expect-new; NEW lines are evidence of expected absence and never justify verdict fail; PHANTOM and CLAIMED-NEW-BUT-EXISTS lines keep their current fail weight; carry CREATES items forward in the handoff.bin/refresh-plugins; one History row in the os-sdlc implementation-status leaf.Acceptance criteria
os-sdlc-evidence collect --expect-new WpRest::SiteBuilderon a tree without that constant prints a NEW line, not PHANTOM, and exits 0 when every unresolved token is expected-new.Out of scope
Work started via /os-sdlc:implement on branch ticket-524 (worktree .claude/worktrees/ticket-524), 2026-09-03.
Pipeline run (implementation 4) ended implementation_failed at node refactorer, reason verdict:error. Cause: refactorer dispatch 31 died on an Anthropic API 529 before settlement; a harness resume of the finished test-writer created stray dispatch 32 bound to the refactorer node; settling it recorded gate_skip -> error. Code state: test-writer (27) red-for-right-reason, programmer (29 fail, 30 pass), gate 31 re-run green (test+lint). Work is intact on branch ticket-524. Recovery decision pending with the user.
Resolution
Done: Option A built: evidence CLI --expect-new flag renders NEW (expected absent) instead of PHANTOM and CLAIMED-NEW-BUT-EXISTS when the token resolves; change-interpreter emits CREATES items; code-probe passes them as --expect-new and its rubric treats NEW as never-fail; message-tracer and seam-designer pass CREATES through. ADR-0159 recorded; history row added to docs/implementation-status/os-sdlc.md.
Evidence: Merged to main at
3c804b3(commitsd3ee259,2df55e5,81f9b64,51b03ea,d76d7e2,3c804b3). os-sdlc suite 1232 runs, 0 failures. rubocop: 0 offenses on touched files; 74 pre-existing offenses on main unchanged. Slice 1 came through the pipeline (implementation 4, dispatches 27-31); the refactorer node died on Anthropic API 529 twice, the run was marked implementation_failed by a stray dispatch row, and the remaining tasks were built by direct TDD agents by user decision (option A).Follow-ups: #527 filed with skeptic CREATE verdict for the runner's no-abandon-path crash gap (user has questioned it; may close as not-local). Dropped: --expect-new cannot carry a token containing a comma; no test covers --expect-new combined with --explain.