project.rb batch 4/3: Project::Yaml::Document owns the project.yaml document shape #585
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#585
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: #586
Batch 4 of the project.rb responsibility refactor, ticket 3 of 3. Follows ticket 2.
Audit: tuning/responsibility-audit/runs/16-project-rb-batch3-reaudit/report.md.
Capability: project-yaml-document-shape. Owner: missing. Proposed
OsSdlc::Project::Yaml::Documentat plugins/os-sdlc/lib/os_sdlc/project/yaml/document.rb (confidence 0.82).Map: maps/poodr-ticket-implementation.yaml.
Cases (one red round, all listed)
Project.load_shared(root)on a project.yaml without anamekey raisesHarnessErrorwhose message names the missing key and the file path. Today: bareKeyError(project.rb:31).Project.load(root, target: "x")on the same file raises the sameHarnessError(project.rb:36).Project.load_shared(root)on a targets-shaped file where exactly one target setstracker:and the top level does not returns a project whosetrackeris that value. Today: nil, whileRunner::TeaTracker#project_tracker_present?(tea_tracker.rb:117) says a tracker is configured, soresolve_slug(tea_tracker.rb:144) runs with nil. When more than one target sets a differenttracker:,load_sharedreturns nil tracker (ambiguous is not shared).Runner::TeaTracker#tracker_configured?gives the same answer asProject.load_shared(root).tracker.nil?negated, for the three file shapes: top-level tracker, single per-target tracker, no tracker.Owner sketch (from the audit, verbatim intent)
Project::Yaml#readreturns aDocument.ProjectTargetsstays as the target-selection validator behind it.Callers that delegate
load_sharedfrom_dataproject_tracker_present?,top_level_tracker?,per_target_tracker?,readable_project_yamlcollapse to one Document callTests that touch the old behavior
ADR
Amends ADR-0177 (Yaml#read returns a Document), ADR-0186 (load_shared tracker rule), ADR-0056 (tracker precedence source). Create the amending ADR when the ticket lands.
Structural follow-through (after implementation_complete, subagent applies)
Project::Source(project.rb:84-100) to lib/os_sdlc/project/source.rb withrequire_relative "project/source"in project.rb; callers lib/os_sdlc/runner/brief_facts.rb:40 and gate_commands.rb:34 unchanged.rg "class Source" plugins/os-sdlc/lib/os_sdlc/project.rbreturns nothing.rg 'data\["tracker"\]|data.fetch\("name"\)' plugins/os-sdlc/libreturns nothing outside project/yaml/document.rb.Work started on branch ticket-585 via os-sdlc pipeline (map poodr-ticket-implementation.yaml, batch 4 map #586).
Resolution
Done: Batch 4/3 merged to main
39dd336, ADR-0189. Project::Yaml::Document owns the project.yaml document shape (name guard, tracker resolution incl. single per-target tracker, targets delegation); Yaml#document returns it; Project.load/load_shared and Runner::TeaTracker delegate; TeaTracker's private yaml reading deleted; Project::Source moved to project/source.rb.Evidence: Suite 1190 runs 0 failures; rubocop clean; rg for hash indexing of name/tracker under lib returns only document.rb; pre-boot require check loads Source and Document. Pipeline impl 16: 18 dispatches, implementation_complete after contract-auditor pass. Deviations: (1) test-writer needed 3 rounds. (2) suite-check failed twice on a pre-existing cli_test fixture that omitted name and expected the unreadable-yaml message; sonnet changed the fixture to genuinely malformed YAML. (3) structural follow-through was applied before the terminal state; the diff-test gate could not map the new lib files and programmer-repair reverted them (one 94-tool-call round). Reapplied after implementation_complete by haiku. (4) contract-auditor dispatch 219 idled 27960 s before settling. (5) ADR skill wrote to the main checkout again; moved by hand.
Follow-ups: none