os-sdlc: setup path raises LoudFailure; core stops calling exit and warn #830
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#830
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 setup path fails through its own route.
SetupCLIwarns and callsexit, while every other controller rescues a raisedLoudFailure.Core code calls
exitandwarndirectly, so core cannot run without ending the process.User ruling on the #781 follow-up (b), option A extended, 2026-09-29.
Amends ADR-0236.
Depends on #829 (same files).
Reproduce
n/a: design change, nothing to reproduce.
Approach
Paths are relative to plugins/os-sdlc/lib/os_sdlc/.
Current sites:
fail_soft(warn "os-sdlc: msg"; exit code), called only from command/init_command.rb:27,33.fail_softcopy in command/cli/project_config_command.rb:29 (after #829: command/project/config_command.rb).exit 0at project_config_command.rb:39,73 and init_command.rb:13.warnat project_config_command.rb:59.handle_no_command_errorwarns and exits 1, andstartrescuesStandardErrorwith its own loud line.Required work:
LoudFailureon failure and returns normally on success. Remove everyexitandwarncall from core. — check:grep -rn "exit\|warn" plugins/os-sdlc/lib/os_sdlc/commandCommandSupportand the privatefail_softcopy.SetupCLIwraps its run inProcessIO#guarded(or loudly), so it has one failure path.handle_no_command_errorraisesLoudFailure.warnand the success output write through the injected invocation IO.InitCommandgains the invocation.SystemExitrescues:capture_exitin cli_project_config_test.rb, and project_test_path_default_test.rb.Accepted behavior change (user ruled): stderr bytes follow
LoudFailure#stderr_line(os-sdlc-), and every failure exits 3.Acceptance criteria
LoudFailure#stderr_lineand the exit code is 3.LoudFailurewith exit code 3.CommandSupportdoes not exist and core calls neitherexitnorwarn.Owner sketch
Origin
Resolution
Done: InitCommand and Project::ConfigCommand raise LoudFailure and write through the injected ProcessIO; SetupCLI.start runs Thor inside ProcessIO#guarded; bin/os-sdlc exits with the code; CommandSupport deleted. Failures print os-sdlc- and exit 3 (user-ruled).
Evidence: Commit
e6961519on main; ADR-0246; tests re-pinned red first; suite 1328 runs 0 failures.Follow-ups: none captured; unknown-subcommand wording and the SetupCLI/ReportCLI/ProbeCLI suffix question recorded in docs/crc/os-sdlc/HANDOFF.md for the user
os-sdlc project-config --helptreats --help as a project name and writes .sdlc/project.yaml #860