Move all os-backlog callers to the new command names #1623
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#1623
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
Code, skills, prompts, and the session note call the old command names. Two callers load os-backlog classes directly, which ties them to internals that the port deletes.
Approach
Use the consumer table in section 4 of the design record, and
docs/system-design-format/proof/2026-11-06-os-backlog-consumer-sweep.md.Required work:
plugins/os/lib/handoff/backlog.rb— check: absentissue-showinplugins/os/lib/handoff/backlog.rbtracker/backlog/ticket_fetch.rb,tracker/backlog/comments_fetch.rb, andcrc/filing/backlog_client.rbunderplugins/os-sdlc/lib/os_sdlc— check: absent"issue-inplugins/os-sdlc/lib/os_sdlc/**/*.rblib/takedown/adapter/issue_source.rb— check: absent"issue-show"inplugins/os-sdlc/eval/ticket-takedown/lib/**/*.rbticket label NUMBER LABELtoplugins/os-backlog/lib/backlog/cli/ticket_group.rb. It adds one label and keeps the others. The takedown adapter needs it, because no current name adds a label — check: presentdesc "label NUMBER LABEL"inplugins/os-backlog/lib/backlog/cli/ticket_group.rblib/takedown/adapter/backlog_tracker.rbto the CLI:ticket commentandticket labelthroughTakedown::ProcessRunner. Replacetest/adapter/backlog_tracker_test.rb, which asserts thatBacklog::Projectloads — check: absentBacklog::inplugins/os-sdlc/eval/ticket-takedown/lib/**/*.rbplugins/os-sdlc/tests/crc/tickets_bin_test.rbto the CLI.test_generated_tickets_pass_the_os_backlog_issue_create_gatebuildsBacklog::Ticket::Draftin process; file the tickets withticket createon arepo:tracker in the temporary root instead — check: absentBacklog::inplugins/os-sdlc/tests/crc/tickets_bin_test.rbBUNDLE_GEMFILE(os-sdlcGemfile) andRUBYOPT=-rbundler/setup, sobin/os-backlogloads under the os-sdlc bundle. Measured 2026-11-07: withactivemodelremoved from that bundle,os-backlog ticket showexits 1 withcannot load such file -- active_model. ChangeTracker::IssueSource::ShellandCrc::Filing::BacklogClient— check: presentwith_unbundled_envinplugins/os-sdlc/lib/os_sdlc/**/*.rbactivemodelfromplugins/os-sdlc/Gemfile, with its comment line, and fromplugins/os-sdlc/Gemfile.lock(activemodel,activesupport, and the dependencies that only they use) — check: absentactivemodelinplugins/os-sdlc/Gemfile*project showtoplugins/os-backlog/lib/backlog/cli/project_group.rb. It prints{"root", "tracker"}JSON fromProject.current(Dir.pwd)and makes no host call.project inspectalso givestracker_configured, but it lists all open issues (4.3 s on cc-os), andproject routereads the config text from stdin — check: presentdesc "show"inplugins/os-backlog/lib/backlog/cli/project_group.rb.cc-os/configreads intracker/backlog.rbandtracker/issue_source/tracker_lookup.rbthroughos-backlog project show. Today they read<root>/.cc-os/configonly, so they skip the lookup ofBacklog::ConfigLocator(the directory's own file, then the main checkout of a linked worktree), and os-sdlc and os-backlog can resolve different trackers in one directory. Ruling 78: Project in os-backlog owns the reader; no shared gem. No separate ticket exists (comment on #1621) — check: absent".cc-os", "config"inplugins/os-sdlc/lib/os_sdlc/tracker/**/*.rbdocs/triage/2026-10-10-backfill-ticket-categories.rb. It is a one-time script, and theBacklog::ForgejoBackendit uses no longer exists — check: absentBacklog::ForgejoBackendindocs/triage/*plugins/*/{skills,agents,references}that name an old command (recount 2026-11-07: afteros-backlog,${CLAUDE_PLUGIN_ROOT}/bin/os-backlog, or{{OS_BACKLOG}}, or as a bare hyphenated name such asconfig-write). No prompt or hook file names one. Design notes underplugins/os-sdlc/reference/, the takedownREADME.md, anddesign/output are not callers — check: absentos-backlog issue-inplugins/*/{skills,agents,references}/**/*.mdSessionNotetext inplugins/os-backlog/lib/backlog/project/session_note.rb(close,close --needs-review,occurrence,projects) — check: absentos-backlog occurrenceinplugins/os-backlog/lib/backlog/project/session_note.rbOrchestrator work: run
bin/refresh-pluginsafter the merge.Acceptance criteria
Handoff::Backlog,TicketFetch,CommentsFetch,Crc::Filing::BacklogClient,Takedown::IssueSource), when it runs, then it calls the new name and gets the same result.plugins/os-backlogand the skill, agent, and reference text, when the 18 old names are searched as os-backlog subcommands, then no line matches. OnlyBacklog::CLI,Backlog::CLI::OldNames, and their tests keep the old names.repo:tracker with the labelnext, whenos-backlog ticket label NUMBER waitingruns, thenos-backlog ticket show NUMBERlists bothnextandwaiting, and the alias log gains no line.needs_ruling, whenTakedown::BacklogTrackerposts it, then its runner getsos-backlog ticket comment NUMBER --body-file FILEand thenos-backlog ticket label NUMBER waiting, and the takedown process defines noBacklogconstant.crc-ticketsmakes in the temporary project, when the test files each one withos-backlog ticket createon arepo:tracker, then each create exits 0.Tracker::IssueSource::ShellorCrc::Filing::BacklogClientstarts a child process, then the child sees neither the os-sdlcBUNDLE_GEMFILEnor thebundler/setupRUBYOPT.plugins/os-sdlc/Gemfile.lockwith noactivemodel, when the os-sdlc and takedown suites run, then they pass..cc-os/config, and a main checkout whose.cc-os/configholdstracker=repo:issues, whenos-backlog project showruns in the worktree, then it printsrepo:issues. Given a subdirectory with its own.cc-os/config, then it prints the tracker of that subdirectory..cc-os/configfor whichos-backlog project showprints the trackerforgejo:owner/repo, when os-sdlc runsTracker::Backlog.forandTracker::IssueSource::TrackerLookup#callthere, then the first gives aTracker::Backlog, notTracker::Null, and the second returnsforgejo:owner/repo.Owner sketch
Each caller keeps its runner.
Takedown::ProcessRunneralready runs inBundler.with_unbundled_env, so the takedown needs no environment change. In os-sdlc,Tracker::IssueSource::Shellbecomes the one runner that starts os-backlog:BacklogClientuses it instead of its ownOpen3call, and itsFailurenames the command withargs.take(2).join(" ").ProjectShowuses the same runner andTracker::ExecutableSearch.os_backloglocator asTicketFetch, and raisesHarnessErrorwhen os-backlog fails.ConfiguredChecktakes the address, not the file lines.TrackerLookupkeeps theproject.yamltracker first and the git remote last; only the file read moves.Backlog::ConfigLocatorstays the one owner of the lookup (ruling 78).BacklogTrackerkeepsDir.pwdas its directory, as today. The newtickets_bin_test.rbtest writestracker=repo:issuesto.cc-os/configin its temporary root and files each ticket throughBacklogClient#create, withCC_OS_HOMEin the temporary root.Non-goals
Do not remove the aliases. Slice 11 removes them.
Blocking edges
Blocked by #1622
Origin
docs/system-design-format/proof/2026-11-06-os-backlog-domain-objects.md, slice 10plugins/os-backlog/CONTEXT.md)VERDICT: CREATE
From #857: plugins/os-sdlc/Gemfile gained activemodel, because tests/crc/tickets_bin_test.rb and the takedown backlog_tracker.rb load lib/backlog under that bundle. Move both to the CLI here, then remove the gem. Slice 3 onward: run the os-sdlc and takedown suites before each merge while this holds.
Work started on branch ticket-1623. Ruling 79 (predicted): add
ticket labelandproject show; the #1621 config-read item is part of this ticket.Resolution
Done: Callers in os, os-sdlc, and the takedown eval use the new names. ticket label and project show added (ruling 79). os-sdlc reads the tracker through project show and starts os-backlog unbundled. The takedown BacklogTracker and crc filing tests use the CLI; activemodel left the os-sdlc bundle. The session note and skill, agent, and reference text name only new commands.
Evidence: Commit
66818d26on main. os-backlog 532, os-sdlc 3510, takedown 626, os 241 runs, 0 failures. Rubocop clean on 44 changed .rb files. All 13 Required work checks met. One design audit: 2 must-fix and 1 should-fix fixed, notes answered. Implementation 260 escalated (bound_exhausted:test-reviewer/fail) and was hand-finished; occurrence on #1109.Follow-ups: none; #1624 removes the aliases and runs the second sweep