Delete the duplicate nested project.yaml files #1519
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
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
rule-proposal
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#1519
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?
Problem
Two nested
.sdlc/project.yamlfiles duplicate the root file.plugins/os-backlog/.sdlc/project.yamlandplugins/os-sdlc/.sdlc/project.yamldescribe targets that/home/jared/dev/cc-os/.sdlc/project.yamlalready lists undertargets:with the same paths and test commands.Project::RootSearch.outermostpicks the cc-os root, so neither nested file is read from inside cc-os.A dead second copy of a config can drift and mislead.
Observed
Key comparison (nested vs root target of the same name):
libplugins/os-backlogplugins/os-sdlctestsplugins/os-backlog/teststestsplugins/os-sdlc/testsruby tests/all.rbruby plugins/os-backlog/tests/all.rbruby tests/all.rbruby plugins/os-sdlc/tests/all.rbplugins/os-backlog/.rubocop.ymlplugins/os-sdlc/.rubocop.ymlforgejo:jared/cc-osforgejo:jared/cc-osThe nested paths are plugin-relative; the root paths are repo-relative.
The nested os-backlog
path: libdiffers from the rootpath: plugins/os-backlog.Last change to both files:
b875b231(#832).Risk check (done before filing):
RootSearchinplugins/os-sdlc/lib(boot.rb:57,boot/project_bind.rb,project/config.rb,daemon/navigation.rb,lint/sweeping.rb) all take a cwd fromDir.pwdor a hook event cwd.Dir.pwdis the real path, even when the shell entered through the symlink~/.claude/plugins/os-sdlc. A check from that symlink gives/home/jared/dev/cc-os/plugins/os-sdlc, inside the cc-os tree, sooutermostfinds the cc-os root.os-sdlc/hooks/hooks.jsonoros-backlog/hooks/hooks.jsonpassesCLAUDE_PLUGIN_ROOTas a project dir.RootSearch.outermost("~/.claude/plugins/os-sdlc")with the symlink path string returns/home/jared/.claude/plugins/os-sdlc. No caller passes that string. After the deletion, that call returns nil and the caller refuses loudly, which is correct.~/.claude/plugins/cache/local-plugins/os-sdlc/0.1.0/.sdlc/project.yamland.../os-backlog/0.3.0/.sdlc/project.yaml), outside the cc-os git tree.outermostwould find them from a cwd inside the cache. No hook, skill or bin script sets its cwd to the plugin root or the cache (grep ofplugins/*/hooks,skills,binfound none), so only a manualcdreaches them.bin/refresh-pluginsremoves them from the cache after the deletion.plugins/os-sdlc/.sdlc/also holds untrackedpipeline.db,pipeline.db.stale,tickets,tmp. This ticket does not touch them.Reproduce
n/a: cleanup of duplicate config, no failing behavior.
Approach
Delete both nested files.
Required work:
Acceptance criteria
os-sdlccommand binds a project, then it binds the root.sdlc/project.yamlas before.plugins/os-sdlc/.sdlc/project.yamlandplugins/os-backlog/.sdlc/project.yaml, then no code reads those paths. Doc and ledger-fixture mentions (docs/os-sdlc-rebuild/interface-sketches.md:2176,plugins/os-sdlc/tests/fixtures/crc/os-sdlc-ledger-88a6bd35.tsv,plugins/os-sdlc/tests/fixtures/crc_shares/run2/ledger-pre-wave2.tsv) are historical text, not reads.Orchestrator work: run
bin/refresh-pluginsafter the deletion.Owner sketch
No new objects. Two files are deleted.
Non-goals
The untracked
pipeline.dbfiles underplugins/os-sdlc/.sdlc/.Origin
Project::RootSearch.outermostwhile checking which project.yaml binds.b875b231, #832)VERDICT: CREATE
Work started on branch
ticket-1519through /os-sdlc:implement.Ticket defect corrected: the two required-work checks were
absent ... in <deleted file>. After the deletion the glob matches no file, so they could never pass (implementation 227, structure-changer dispatch 2078 escalated). Checks removed; the acceptance criteria (suites green, root project binds, no code reads the paths) prove the work.Blocked: deleting the nested files breaks behavior. Project::RootSearch (project/root_search.rb:15) returns the nearest .sdlc/project.yaml, so from plugins/os-sdlc the lint sweep (lint/sweeping.rb:40) reports plugin-relative paths and uses the plugin config; LintSweepTest#test_sweep_reports_the_same_inward_dependency_offenses_from_the_repo_root_and_the_plugin_directory fails after deletion. Target-less Config.load from a plugin dir would raise TargetSelectionError against the targets-shaped root file. Recommendation: keep the files and close this ticket. Implementation 227 abandoned; awaiting Jared's ruling.