os-sdlc: move the shared Thor base out of Crc to OsSdlc::CLI (structure only) #1681
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#1681
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
The commandless Thor base class of os-sdlc is
OsSdlc::Crc::CLI(plugins/os-sdlc/lib/os_sdlc/crc/cli.rb). Its helpers areOsSdlc::Crc::CLI::Shell,OsSdlc::Crc::CLI::Invocation, andOsSdlc::Crc::CommandResult. None of the four holds crc-specific code. The next tickets movefast-gate,detector,collaborator-pass,system-model, and the mutation commands onto Thor. A class such asOsSdlc::Detector::CLImust not inherit from a class in theCrcnamespace. Ruling 126 (docs/decisions/rulings.tsv) places the base in a neutral namespace before those tickets.Reproduce
n/a: structure ticket. No behavior changes.
Approach
The language is Ruby. The suite command is
ruby test/all.rb, run fromplugins/os-sdlc. This is a structure change: rename and move only. Behavior stays byte-identical.OsSdlc::Crc::CLI(the commandless base) becomesOsSdlc::CLIinlib/os_sdlc/cli.rb.OsSdlc::Crc::CLI::ShellbecomesOsSdlc::CLI::Shellinlib/os_sdlc/cli/shell.rb.OsSdlc::Crc::CLI::InvocationbecomesOsSdlc::CLI::Invocationinlib/os_sdlc/cli/invocation.rb.OsSdlc::Crc::CommandResultbecomesOsSdlc::CommandResultinlib/os_sdlc/command_result.rb.OsSdlc::Gate::CommandResultis a different class and keeps its name; code insidemodule Gatecontinues to resolveCommandResulttoGate::CommandResult.OsSdlc::Crc::LedgerGatestays inCrc: it is crc-specific.Crc::<Concept>::CLIclass inherits fromOsSdlc::CLI. Every reference inlib/,bin/, andtest/follows the new names. Test files that are named for the moved classes move with them (for exampletest/crc/cli_survivor_test.rb,test/crc/command_result_test.rb) when their subject is one of the four classes."cli" => "CLI"already exists and covers the new path.Required work:
class CLI < Thorinplugins/os-sdlc/lib/os_sdlc/cli.rbclass Shellinplugins/os-sdlc/lib/os_sdlc/cli/shell.rbclass Invocationinplugins/os-sdlc/lib/os_sdlc/cli/invocation.rbCommandResult = Data.defineinplugins/os-sdlc/lib/os_sdlc/command_result.rbclass CLI < Thorinplugins/os-sdlc/lib/os_sdlc/crc/cli.rbCrc::CommandResultinplugins/os-sdlc/lib/os_sdlc/**/*.rbCrc::CLI::Invocationinplugins/os-sdlc/lib/os_sdlc/**/*.rbOut of scope
Any new Thor command, any change to
Project, and any change to error text or exit codes.Origin
Trigger: n/a: design ticket from ruling 126, not a run that showed a fault
Improvised this session: none
Chain:
Detector::CLIwould inherit fromCrc::CLI← the shared Thor base was built insideCrcfor the crc commands only (ruling 121) ← non-crc commands now move to Thor (owner ruling of 2026-11-10)Session: a48658d5-b566-40ce-8257-ebeabf56f7e1
Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os--claude-worktrees-ticket-1677/a48658d5-b566-40ce-8257-ebeabf56f7e1.jsonl
Where: plugins/os-sdlc/lib/os_sdlc/crc/cli.rb (OsSdlc::Crc::CLI), plugins/os-sdlc/lib/os_sdlc/crc/cli/invocation.rb, plugins/os-sdlc/lib/os_sdlc/crc/cli/shell.rb, plugins/os-sdlc/lib/os_sdlc/crc/command_result.rb
Root candidate: none found; parent decision ticket #1646
Approved by: predicted ruling 126 (confidence 85), part of the Thor-entry change that Jared ordered on 2026-11-10 ("List the changes we are making. Then implement them.").
VERDICT: CREATE
REASON: The slice follows from ruling 126, inside the Thor-entry change the owner ordered on 2026-11-10. The move is structural and needed before the other commands can inherit from the base. No open ticket covers the same mechanism.
Work started on branch ticket-1681 through the fast path (batch fast-batch-24).
Resolution
Done: The commandless Thor base, its Shell, its Invocation and CommandResult moved from OsSdlc::Crc to OsSdlc (lib/os_sdlc/cli.rb, cli/shell.rb, cli/invocation.rb, command_result.rb). The eleven crc concept CLIs inherit from OsSdlc::CLI. No behavior change.
Evidence: fast-batch-24, commit
34aa6a53d, merged into main. fast-gate PASS; full suite 4066 runs, 0 failures; spec review found nothing missing, added, or wrong; standards review gave two items, both ruled no-change in docs/crc/os-sdlc/fast-batch-24/rulings.tsv.Follow-ups: none