Batch 3 defects: lint_config single resolver, keep save_tracker result, Config refuses nil name #578
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#578
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?
Summary
Batch 3 on project.rb, ticket 1 of 4 (defects that move no ownership). Audit run 15:
.sdlc/tmp/responsibility-audit/run-15/analysis.yaml.Three defect rows from the audit, each a sender that bypasses an owner the code already has.
Tasks
LintWorklistRubocopConfigstops resolvinglint_configitself. It receives the already-resolved absolute path fromProject#resolved_lint_config(the sole resolver, ADR-0179) and only inherits or refuses it. Todaylint_worklist_rubocop_config.rb:42tests the raw value withFile.exist?against the process cwd and:51re-resolves against@project_root.IssueSource::TrackerResolverkeeps theProjectthatProject#save_trackerreturns (issue_source.rb:47discards it), so the project handed onward carries the tracker it just persisted.Project::Config#projectrefuses a blob that has nonamewith aHarnessErrornaming the missing key (project/config.rb:24accepts nil;Project.from_datausesfetch("name")). Empty and nil blobs still return nil (ADR-0176).Acceptance criteria
lint_config: .rubocop.yml(relative) and the process cwd elsewhere, the generated rubocop config inherits<project root>/.rubocop.yml.lint_configwhose file is missing,LintWorklistRubocopConfigraisesHarnessErrorno matter the process cwd..cc-os/configtracker line, afterIssueSource.for(project)the resolver's project responds totrackerwith that value.{"root": "/x"}with no name,Project::Config.new(blob).projectraisesHarnessErrorwhose message namesname."{}"blob,Project::Config#projectreturns nil (unchanged).Structural follow-through
Applied by the orchestrator after
implementation_complete, before commit:Project.sdlc_dir(project.rb:103);Project::Yaml#path(yaml.rb:28) callsProject::ArtifactDir.new(root).pathdirectly. Grep after:rg "Project.sdlc_dir" plugins/os-sdlcreturns nothing.rg "File.exist\?\(@lint_config\)|LintConfig.new" plugins/os-sdlc/lib/os_sdlc/lint_worklist_rubocop_config.rbreturns nothing.tests/lint_worklist_rubocop_config_test.rb:46,tests/cops/query_method_reaches_write_test.rb:20(fixture string only),tests/project_test.rb:129-151.ADR case
Completes ADR-0056 (tracker persisted back through
save_tracker), ADR-0091 and ADR-0179 (single lint-config resolver). Amends ADR-0176 (a present blob withoutnameis a refusal, not an empty state); create the amending ADR when the ticket lands.Order
Position 1 of 4. Follows nothing. Next: ticket 2 (RootSearch owns the not-found message).
Origin
.sdlc/tmp/responsibility-audit/run-15/analysis.yamlMap: #582
Work started via /os-sdlc:responsibility-refactor batch 3 (map #582). Branch: ticket-578, map poodr-ticket-implementation.yaml, target os-sdlc.
Resolution
Done: Config refuses a non-empty blob without name; LintWorklistRubocopConfig resolves lint_config through Project::LintConfig#path; TrackerResolver keeps the Project save_tracker returns; Project.sdlc_dir deleted (Yaml#path uses ArtifactDir). Structural follow-through applied by hand.
Evidence: main
313b230, ADR-0183 (amends 0176/0091/0056), suite 1164 runs 0 failures, rubocop clean on changed files. Pipeline: 14 dispatches, 2 suite-check retries. Deviations: (1) existing fixture tests/runner/implementation_empty_project_config_test.rb built a blob without name; hand-fixed to carry one. (2) One behavior-verifier launch from the plugins/os-sdlc subdirectory produced no dispatch row (start hook found no implementation); relaunched from the worktree root. (3) LintWorklistRubocopConfig resolves via LintConfig#path against @project_root rather than receiving the resolved path from Project#resolved_lint_config; contract-auditor passed it.Follow-ups: none