project.rb: pass target: in BriefFacts#project; keep false values in Project.upsert #564
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#564
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?
Map: #568
Context
Responsibility audit of
project.rbon 2026-09-13 found two guard defects that move no ownership. Batch position 1 of 4. Runs first. The map ticket names the order.Observed
BriefFacts#projectcallsProject::Source.for(implementation)withouttarget:.GateCommands#projectpasses it. The fallback becomesProject.load(root, target: nil), which raisesTargetSelectionErroron any targets-shaped project.Project.upsertdrops a false value, socommit_on_complete: falsecan never be written or cleared.Reproduce
Then inspect
.sdlc/project.yaml: nocommit_on_completekey is written.Expected
Tasks
project.rb:110tounless value.nil?BriefFacts#projecton a targets-shaped project with a bound targettarget:inbrief_facts.rb:32the same wayGateCommandsdoesAcceptance criteria
target:required on every load). No ADR work.Origin
/os-sdlc:responsibility-audit plugins/os-sdlc/lib/os_sdlc/project.rbon 2026-09-13; analysis at.sdlc/tmp/responsibility-audit/2026-09-13-project/analysis.yamlOsSdlc::Project← DESIGN (plugins/os-sdlc/lib/os_sdlc/project.rb, ADR-0055/0074/0088/0169/0174)OsSdlc::Project,plugins/os-sdlc/lib/os_sdlc/project.rbWork started via /os-sdlc:implement on branch ticket-564 (worktree). Map: #568.
Resolution
Done: Project.upsert keeps false values (present_attrs uses unless value.nil?). BriefFacts accepts target: through an Options Data and passes it to Project::Source.for; StartSubagent passes implementation.target.
Evidence: Pipeline implementation 1 complete: 14 dispatches, 2 contract-auditor retries, suite 1207 runs 0 failures. Commit on branch ticket-564, merged to main via worktree finish. Tests: project_test#test_upsert_writes_a_false_attribute_value_instead_of_dropping_it, brief_facts_project_source_test#test_code_changes_does_not_raise_target_selection_error_for_a_bound_target.
Follow-ups: none. Deviation: the pipeline left StartSubagent, the only production builder of BriefFacts, without a target; wired by hand after implementation_complete, suite and lint green.