Collaborator pass pilot: crc command family takes Project plus Run #1086
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#1086
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
root+run_dir (data_clump, score 54) spans 9 classes in concepts CrcCensus, CrcJobs, CrcRecords, CrcRunPath, CrcSweep, CrcTickets.
OsSdlc::CrcCensus::Settings(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_census/settings.rb:7)OsSdlc::CrcJobs(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_jobs.rb:7)OsSdlc::CrcJobs::JobFiles(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_jobs/job_files.rb:10)OsSdlc::CrcRecords(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_records.rb:7)OsSdlc::CrcRecords::AdrCitations(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_records/adr_citations.rb:10)OsSdlc::CrcRecords::RunFiles(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_records/run_files.rb:8)OsSdlc::CrcRunPath(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_run_path.rb:7)OsSdlc::CrcSweep::Settings(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_sweep/settings.rb:5)OsSdlc::CrcTickets(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_tickets.rb:7)support 9; maximal
copied:defs:16afa771 (copied_entry, score 36) spans 6 classes in concepts CrcCensus, CrcFile, CrcJobs, CrcRecords, CrcSweep, CrcTickets.
OsSdlc::CrcCensus::Command(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_census/command.rb:19)OsSdlc::CrcFile::Command(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_file/command.rb:13)OsSdlc::CrcJobs::Command(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_jobs/command.rb:13)OsSdlc::CrcRecords::Command(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_records/command.rb:9)OsSdlc::CrcSweep::Command(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_sweep/command.rb:14)OsSdlc::CrcTickets::Command(/home/jared/dev/cc-os/plugins/os-sdlc/lib/os_sdlc/crc_tickets/command.rb:24)IDENTICAL :defs mass 576; role controller
Approach
The clump's names are members of one object that already exists or is built upstream; pass the object. Object:
OsSdlc::CrcRunPath(built at plugins/os-sdlc/lib/os_sdlc/crc_jobs/command.rb:30). The jobs, records, sweep, and tickets commands already build CrcRunPath and then unpack it into root and run_dir for every class below, so passing the built object (with readers for root, relative, and joined file paths added to CrcRunPath, and CrcCensus::Settings.for building it) takes the pair out of all eight non-object sites, including CrcJobs whose own initialize takes the pair despite the Result excerpt; only CrcRunPath keeps both names, support falls to 1, and the clump stops being a finding. build_once_at_entry describes the same pass-down but its premise, that sites rebuild the object, is false here, since the object is already built once at each entry and is only unpacked. The sweep parser sets root before run_dir; the parser order changes so run_path is built once.The copied or misplaced behavior belongs to one owner; move it there, callers delegate. The honest fix needs no owner: the six identical self.run pass-throughs are deleted and each bin calls Command.new(ARGV, out:, err:, cwd:).run, as CollaboratorPass::Command does (lens A13: delete a pass-through).
Required work:
OsSdlc::CrcCensus::Settingstakesrun_path, lib_root, test_root, loader, exclude, paths, test_root_given— check: absentroot:inplugins/os-sdlc/lib/os_sdlc/crc_census/settings.rbOsSdlc::CrcCensus::Settingstakesrun_path, lib_root, test_root, loader, exclude, paths, test_root_given— check: absentrun_dir:inplugins/os-sdlc/lib/os_sdlc/crc_census/settings.rbOsSdlc::CrcJobstakesrun_path— check: absentroot:inplugins/os-sdlc/lib/os_sdlc/crc_jobs.rbOsSdlc::CrcJobstakesrun_path— check: absentrun_dir:inplugins/os-sdlc/lib/os_sdlc/crc_jobs.rbOsSdlc::CrcJobs::JobFilestakesrun_path— check: absentroot:inplugins/os-sdlc/lib/os_sdlc/crc_jobs/job_files.rbOsSdlc::CrcJobs::JobFilestakesrun_path— check: absentrun_dir:inplugins/os-sdlc/lib/os_sdlc/crc_jobs/job_files.rbOsSdlc::CrcRecordstakesrun_path, resolver, write— check: absentroot:inplugins/os-sdlc/lib/os_sdlc/crc_records.rbOsSdlc::CrcRecordstakesrun_path, resolver, write— check: absentrun_dir:inplugins/os-sdlc/lib/os_sdlc/crc_records.rbOsSdlc::CrcRecords::AdrCitationstakesrun_path— check: absentroot:inplugins/os-sdlc/lib/os_sdlc/crc_records/adr_citations.rbOsSdlc::CrcRecords::AdrCitationstakesrun_path— check: absentrun_dir:inplugins/os-sdlc/lib/os_sdlc/crc_records/adr_citations.rbOsSdlc::CrcRecords::RunFilestakesrun_path— check: absentroot:inplugins/os-sdlc/lib/os_sdlc/crc_records/run_files.rbOsSdlc::CrcRecords::RunFilestakesrun_path— check: absentrun_dir:inplugins/os-sdlc/lib/os_sdlc/crc_records/run_files.rbOsSdlc::CrcSweep::Settingstakesrun_path, lib_root, write, excludes, histories, test_root— check: absentroot:inplugins/os-sdlc/lib/os_sdlc/crc_sweep/settings.rbOsSdlc::CrcSweep::Settingstakesrun_path, lib_root, write, excludes, histories, test_root— check: absentrun_dir:inplugins/os-sdlc/lib/os_sdlc/crc_sweep/settings.rbOsSdlc::CrcTicketstakesrun_path, options— check: absentroot:inplugins/os-sdlc/lib/os_sdlc/crc_tickets.rbOsSdlc::CrcTicketstakesrun_path, options— check: absentrun_dir:inplugins/os-sdlc/lib/os_sdlc/crc_tickets.rbOsSdlc::CrcCensus::Commandtakesargv, out, err, cwd— check: absentdef self.runinplugins/os-sdlc/lib/os_sdlc/crc_census/command.rbOsSdlc::CrcFile::Commandtakesargv, out, err, cwd— check: absentdef self.runinplugins/os-sdlc/lib/os_sdlc/crc_file/command.rbOsSdlc::CrcJobs::Commandtakesargv, out, err, cwd— check: absentdef self.runinplugins/os-sdlc/lib/os_sdlc/crc_jobs/command.rbOsSdlc::CrcRecords::Commandtakesargv, out, err, cwd— check: absentdef self.runinplugins/os-sdlc/lib/os_sdlc/crc_records/command.rbOsSdlc::CrcSweep::Commandtakesargv, out, err, cwd— check: absentdef self.runinplugins/os-sdlc/lib/os_sdlc/crc_sweep/command.rbOsSdlc::CrcTickets::Commandtakesargv, out, err, cwd— check: absentdef self.runinplugins/os-sdlc/lib/os_sdlc/crc_tickets/command.rbOrchestrator work: re-measure with bin/collaborator-pass measure --runs docs/crc/os-sdlc/collaborator-runs, then stop-check.
Rejected: build_once_at_entry — The honest fix needs no owner: the six identical self.run pass-throughs are deleted and each bin calls Command.new(ARGV, out:, err:, cwd:).run, as CollaboratorPass::Command does (lens A13: delete a pass-through).
Acceptance criteria
Owner sketch
Origin
plugins/os-sdlc/lib/os_sdlc/crc_census/settings.rb)Body replaced by the collaborator pass loop run 20261017T154808Z: recipes root+run_dir (preserve_whole_object, CrcRunPath) and copied:defs:16afa771 (delete six self.run). Rulings predicted, recorded in docs/crc/os-sdlc/collaborator-rulings.tsv.
Work started 2026-10-17 on branch ticket-1086 via /os-sdlc:implement, dispatched by the collaborator pass loop (run 20261017T154808Z).
Implementation 58 escalated at test-writer round 2 (escalation 31, unexpected_pass): the ticket is a pure refactor guarded by the existing bin tests, so the red-first round had nothing to write. Hand-finishing per the escalation procedure. Required-work checks for the six self.run deletions added to the body.
Resolution
Done: Eight crc classes take OsSdlc::CrcRunPath as run_path instead of root and run_dir strings; CrcRunPath gains root, dir, file, relative_file, file?, ledger; the sweep builds it once before an immutable Settings; the six byte-identical Command.run pass-throughs are deleted and each bin/crc-* calls Command.new(...).run. Design-audit fixes applied (TicketDrafts takes run_path, AdrCitations uses run_path.file, ledger reader used by every caller).
Evidence: Commit
d55d8ab6merged to main. Suite 2027 runs, 0 failures; six bin tests unchanged and green. Rubocop: no offenses in touched files (25 pre-existing elsewhere). bin/collaborator-pass measure after the change: no data_clump holds root and run_dir; no copied_entry lists the six Command classes. Implementation 58 escalated at test-writer round 2 (unexpected_pass: pure refactor); hand-finished per the escalation procedure with suite, lint, and one opus design audit.Follow-ups: The six Command initialize and parse bodies are still SIMILAR per Flay (pairs at score 4); and a new clump file+root (score 6) across CrcCensus::RequiringFile, SourceRow, CrcRecords::AdrAffectedPaths suggests a repository-root value. Both are findings the next collaborator-pass measure surfaces and the loop prescribes; no hand-filed ticket.