Cut Project -> Lint: move Project::Onboarding to Boot::Onboarding #1166

Closed
opened 2026-10-19 20:13:15 +00:00 by jared · 1 comment
Owner

Problem

The Project concept calls into the Lint concept. Project::Onboarding is the Thor CLI behind bin/os-sdlc. Its lint_init command builds Lint::SetupCommand (project/onboarding.rb:41). The edge Project -> Lint lies on 58 concept cycles. The CLI is an entry point. Entry points live in Boot.

This ticket lands only after S4. Before S4, a move into Boot closes the cycle Lint -> ... -> Dispatch -> Boot -> Lint.

Reproduce

n/a: structure-wave cut, nothing to reproduce

Approach

Required work:

  1. Move plugins/os-sdlc/lib/os_sdlc/project/onboarding.rb to plugins/os-sdlc/lib/os_sdlc/boot/onboarding.rb and rename the class to OsSdlc::Boot::Onboarding < Thor. Behavior stays the same — check: absent Onboarding in plugins/os-sdlc/lib/os_sdlc/project/**/*.rb
  2. In plugins/os-sdlc/bin/os-sdlc, call OsSdlc::Boot::Onboarding.start(ARGV, invocation: OsSdlc::ProcessIO.from_process).
  3. Update the callers in plugins/os-sdlc/tests/controller/project/cli_project_config_test.rb, plugins/os-sdlc/tests/controller/project/cli_project_config_help_test.rb and plugins/os-sdlc/tests/controller/project/cli_project_config_show_target_test.rb to call OsSdlc::Boot::Onboarding.start.

Acceptance criteria

  1. Given the suite, when run after the change, then it passes with no new failures.
  2. Given the lib tree, when bin/crc-cycle-edges runs, then no edge Project -> Lint lists project/onboarding.rb:41.
  3. Given bin/os-sdlc lint-init and bin/os-sdlc project-config, when each runs, then each prints the same output and exit code as before the move.

Owner sketch

class OsSdlc::Boot::Onboarding < Thor
  def lint_init(*args)
  def project_config(name)
end

bin/os-sdlc stays the single entry script. ADR-0123 (Thor for plugin bin CLIs) and ADR-0232 (one bin script per dispatch command) stay true.

Non-goals

Tests that move or change only a constant name follow the code in the same commit (git mv, then update the constant). Delete no test.
Blocked by S4. Do not land this ticket before S4.

Origin

  • Trigger: os-sdlc CRC run 3, structure-ruling wave step 1 (bin/crc-cycle-edges on main 049a7820)
  • Improvised this session: none
  • Chain: concept cycle Project -> Lint (cycles_through 58) ← project/onboarding.rb:41 ← DESIGN (docs/crc/os-sdlc/wave0/structure-rulings.tsv S2)
  • Root candidate: none found; searched Project::Onboarding, Boot::Onboarding, Onboarding
  • Where: plugins/os-sdlc/lib/os_sdlc/project/onboarding.rb
  • Ledger: docs/crc/os-sdlc/ledger.tsv
  • Rulings: docs/crc/os-sdlc/wave0/structure-rulings.tsv
  • Session: 2e167079-f404-4139-9cfa-6c0c937ce9f0
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/2e167079-f404-4139-9cfa-6c0c937ce9f0.jsonl

VERDICT: CREATE

## Problem The Project concept calls into the Lint concept. `Project::Onboarding` is the Thor CLI behind `bin/os-sdlc`. Its `lint_init` command builds `Lint::SetupCommand` (project/onboarding.rb:41). The edge Project -> Lint lies on 58 concept cycles. The CLI is an entry point. Entry points live in Boot. This ticket lands only after S4. Before S4, a move into Boot closes the cycle Lint -> ... -> Dispatch -> Boot -> Lint. ## Reproduce n/a: structure-wave cut, nothing to reproduce ## Approach Required work: 1. Move `plugins/os-sdlc/lib/os_sdlc/project/onboarding.rb` to `plugins/os-sdlc/lib/os_sdlc/boot/onboarding.rb` and rename the class to `OsSdlc::Boot::Onboarding < Thor`. Behavior stays the same — check: absent `Onboarding` in `plugins/os-sdlc/lib/os_sdlc/project/**/*.rb` 2. In `plugins/os-sdlc/bin/os-sdlc`, call `OsSdlc::Boot::Onboarding.start(ARGV, invocation: OsSdlc::ProcessIO.from_process)`. 3. Update the callers in `plugins/os-sdlc/tests/controller/project/cli_project_config_test.rb`, `plugins/os-sdlc/tests/controller/project/cli_project_config_help_test.rb` and `plugins/os-sdlc/tests/controller/project/cli_project_config_show_target_test.rb` to call `OsSdlc::Boot::Onboarding.start`. ## Acceptance criteria 1. Given the suite, when run after the change, then it passes with no new failures. 2. Given the lib tree, when `bin/crc-cycle-edges` runs, then no edge Project -> Lint lists `project/onboarding.rb:41`. 3. Given `bin/os-sdlc lint-init` and `bin/os-sdlc project-config`, when each runs, then each prints the same output and exit code as before the move. ## Owner sketch ```ruby class OsSdlc::Boot::Onboarding < Thor def lint_init(*args) def project_config(name) end ``` `bin/os-sdlc` stays the single entry script. ADR-0123 (Thor for plugin bin CLIs) and ADR-0232 (one bin script per dispatch command) stay true. ## Non-goals Tests that move or change only a constant name follow the code in the same commit (git mv, then update the constant). Delete no test. Blocked by S4. Do not land this ticket before S4. ## Origin - Trigger: os-sdlc CRC run 3, structure-ruling wave step 1 (bin/crc-cycle-edges on main 049a7820) - Improvised this session: none - Chain: concept cycle Project -> Lint (cycles_through 58) ← project/onboarding.rb:41 ← DESIGN (docs/crc/os-sdlc/wave0/structure-rulings.tsv S2) - Root candidate: none found; searched Project::Onboarding, Boot::Onboarding, Onboarding - Where: plugins/os-sdlc/lib/os_sdlc/project/onboarding.rb - Ledger: docs/crc/os-sdlc/ledger.tsv - Rulings: docs/crc/os-sdlc/wave0/structure-rulings.tsv - Session: 2e167079-f404-4139-9cfa-6c0c937ce9f0 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/2e167079-f404-4139-9cfa-6c0c937ce9f0.jsonl VERDICT: CREATE
Author
Owner

Resolution

Done: Moved Project::Onboarding to Boot::Onboarding (git mv); bin/os-sdlc and the three cli_project_config tests call Boot::Onboarding.start. Cut the Project -> Lint cycle edge.

Evidence: 8f007fd7 (runner commit), 53cd767b (move the runner commit left staged), 845114bf (ledger S2 row), merged to main; pipeline gate dispatch 768 green on required-work, lint, test-lint, suite, unchanged; suite 2249 runs, 0 failures (57.2 s); eager load exit 0; crc-cycle-edges lists no onboarding.rb edge; cycle edges 8 -> 6; inward delta exit 1 only from the #1174 rename false positive; bin/os-sdlc help exit 0.

Follow-ups: none (the structure-changer 10-minute wait found on this run is fixed in-process: 3f76bcb4)

## Resolution **Done:** Moved Project::Onboarding to Boot::Onboarding (git mv); bin/os-sdlc and the three cli_project_config tests call Boot::Onboarding.start. Cut the Project -> Lint cycle edge. **Evidence:** 8f007fd7 (runner commit), 53cd767b (move the runner commit left staged), 845114bf (ledger S2 row), merged to main; pipeline gate dispatch 768 green on required-work, lint, test-lint, suite, unchanged; suite 2249 runs, 0 failures (57.2 s); eager load exit 0; crc-cycle-edges lists no onboarding.rb edge; cycle edges 8 -> 6; inward delta exit 1 only from the #1174 rename false positive; bin/os-sdlc help exit 0. **Follow-ups:** none (the structure-changer 10-minute wait found on this run is fixed in-process: 3f76bcb4)
jared closed this issue 2026-10-19 22:02:51 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#1166
No description provided.