Cut Implementation -> Handoff: promote Handoff::Content to HandoffContent #1172

Closed
opened 2026-10-19 20:13:18 +00:00 by jared · 2 comments
Owner

Problem

The Implementation concept calls into the Handoff concept in three places. CompletionIntake (line 68), MutationCheck (line 28) and RerouteIntake (line 69) all use Handoff::Content. Handoff::Content is a YAML value object. It refers only to Verdict and Psych. The edge Implementation -> Handoff lies on 20 concept cycles. A top-level OsSdlc::HandoffContent removes the edge.

This ticket lands before S7 and S4. All three share lib/os_sdlc/handoff.rb, tests/handoff_test.rb or lib/os_sdlc/dispatch/settlement.rb.

Reproduce

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

Approach

Required work:

  1. Move plugins/os-sdlc/lib/os_sdlc/handoff/content.rb to plugins/os-sdlc/lib/os_sdlc/handoff_content.rb and rename the class to OsSdlc::HandoffContent.
  2. Move plugins/os-sdlc/lib/os_sdlc/handoff/content/malformed_error.rb to plugins/os-sdlc/lib/os_sdlc/handoff_content/malformed_error.rb (OsSdlc::HandoffContent::MalformedError) and plugins/os-sdlc/lib/os_sdlc/handoff/content/mutation.rb to plugins/os-sdlc/lib/os_sdlc/handoff_content/mutation.rb (OsSdlc::HandoffContent::Mutation).
  3. Update every holder to the new name: plugins/os-sdlc/lib/os_sdlc/handoff.rb (lines 21, 25, 36), plugins/os-sdlc/lib/os_sdlc/dispatch/settlement.rb (line 22), plugins/os-sdlc/lib/os_sdlc/implementation/completion_intake.rb, plugins/os-sdlc/lib/os_sdlc/implementation/mutation_check.rb, plugins/os-sdlc/lib/os_sdlc/implementation/reroute_intake.rb — check: absent Handoff::Content in plugins/os-sdlc/lib/**/*.rb
  4. Move plugins/os-sdlc/tests/handoff/content_test.rb to plugins/os-sdlc/tests/handoff_content_test.rb and plugins/os-sdlc/tests/handoff/content_reroute_test.rb to plugins/os-sdlc/tests/handoff_content/reroute_test.rb. Update the constants. Update the other test users: plugins/os-sdlc/tests/handoff_test.rb, plugins/os-sdlc/tests/handoff_latest_test.rb, plugins/os-sdlc/tests/implementation/report_test.rb, plugins/os-sdlc/tests/support/objection_intake_scenario.rb.

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 Implementation -> Handoff lists implementation/completion_intake.rb:68. The same holds for implementation/mutation_check.rb:28 and implementation/reroute_intake.rb:69.
  3. Given malformed handoff YAML, when HandoffContent.parse! runs, then it raises HandoffContent::MalformedError with the same message as before.

Owner sketch

class OsSdlc::HandoffContent
  def self.parse!(yaml, verdict_required:)
  class MalformedError < StandardError
  Mutation = Data.define(...)
end

ADR-0167 cites handoff/content.rb (domain objects are Sequel::Model, Data or a plain class). The rule stays true. The path in the ADR becomes stale.

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.
Do not simplify mutation_check.rb:28 to handoff&.content_object&.mutation. Another ticket may do it.

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 Implementation -> Handoff (cycles_through 20) ← implementation/completion_intake.rb:68, implementation/mutation_check.rb:28, implementation/reroute_intake.rb:69 ← DESIGN (docs/crc/os-sdlc/wave0/structure-rulings.tsv S8)
  • Root candidate: none found; searched Handoff::Content, HandoffContent, Implementation
  • Where: plugins/os-sdlc/lib/os_sdlc/implementation/completion_intake.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 Implementation concept calls into the Handoff concept in three places. `CompletionIntake` (line 68), `MutationCheck` (line 28) and `RerouteIntake` (line 69) all use `Handoff::Content`. `Handoff::Content` is a YAML value object. It refers only to `Verdict` and `Psych`. The edge Implementation -> Handoff lies on 20 concept cycles. A top-level `OsSdlc::HandoffContent` removes the edge. This ticket lands before S7 and S4. All three share `lib/os_sdlc/handoff.rb`, `tests/handoff_test.rb` or `lib/os_sdlc/dispatch/settlement.rb`. ## Reproduce n/a: structure-wave cut, nothing to reproduce ## Approach Required work: 1. Move `plugins/os-sdlc/lib/os_sdlc/handoff/content.rb` to `plugins/os-sdlc/lib/os_sdlc/handoff_content.rb` and rename the class to `OsSdlc::HandoffContent`. 2. Move `plugins/os-sdlc/lib/os_sdlc/handoff/content/malformed_error.rb` to `plugins/os-sdlc/lib/os_sdlc/handoff_content/malformed_error.rb` (`OsSdlc::HandoffContent::MalformedError`) and `plugins/os-sdlc/lib/os_sdlc/handoff/content/mutation.rb` to `plugins/os-sdlc/lib/os_sdlc/handoff_content/mutation.rb` (`OsSdlc::HandoffContent::Mutation`). 3. Update every holder to the new name: `plugins/os-sdlc/lib/os_sdlc/handoff.rb` (lines 21, 25, 36), `plugins/os-sdlc/lib/os_sdlc/dispatch/settlement.rb` (line 22), `plugins/os-sdlc/lib/os_sdlc/implementation/completion_intake.rb`, `plugins/os-sdlc/lib/os_sdlc/implementation/mutation_check.rb`, `plugins/os-sdlc/lib/os_sdlc/implementation/reroute_intake.rb` — check: absent `Handoff::Content` in `plugins/os-sdlc/lib/**/*.rb` 4. Move `plugins/os-sdlc/tests/handoff/content_test.rb` to `plugins/os-sdlc/tests/handoff_content_test.rb` and `plugins/os-sdlc/tests/handoff/content_reroute_test.rb` to `plugins/os-sdlc/tests/handoff_content/reroute_test.rb`. Update the constants. Update the other test users: `plugins/os-sdlc/tests/handoff_test.rb`, `plugins/os-sdlc/tests/handoff_latest_test.rb`, `plugins/os-sdlc/tests/implementation/report_test.rb`, `plugins/os-sdlc/tests/support/objection_intake_scenario.rb`. ## 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 Implementation -> Handoff lists `implementation/completion_intake.rb:68`. The same holds for `implementation/mutation_check.rb:28` and `implementation/reroute_intake.rb:69`. 3. Given malformed handoff YAML, when `HandoffContent.parse!` runs, then it raises `HandoffContent::MalformedError` with the same message as before. ## Owner sketch ```ruby class OsSdlc::HandoffContent def self.parse!(yaml, verdict_required:) class MalformedError < StandardError Mutation = Data.define(...) end ``` ADR-0167 cites `handoff/content.rb` (domain objects are Sequel::Model, Data or a plain class). The rule stays true. The path in the ADR becomes stale. ## 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. Do not simplify `mutation_check.rb:28` to `handoff&.content_object&.mutation`. Another ticket may do it. ## 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 Implementation -> Handoff (cycles_through 20) ← implementation/completion_intake.rb:68, implementation/mutation_check.rb:28, implementation/reroute_intake.rb:69 ← DESIGN (docs/crc/os-sdlc/wave0/structure-rulings.tsv S8) - Root candidate: none found; searched Handoff::Content, HandoffContent, Implementation - Where: plugins/os-sdlc/lib/os_sdlc/implementation/completion_intake.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

Work started on branch crc-os-sdlc-run-3 (os-sdlc CRC run 3, structure wave step 1).

Work started on branch crc-os-sdlc-run-3 (os-sdlc CRC run 3, structure wave step 1).
Author
Owner

Resolution

Done: Promoted Handoff::Content (with MalformedError, Mutation) to top-level OsSdlc::HandoffContent; holders, tests, and handoff-artifact-format.md updated; ledger rows 482-484 record the S8 move.

Evidence: f5fcc5d1 (runner), 1630ac1d (staged deletions), 073fbfff (ledger); suite 2248 runs 0 failures; rubocop 86 files no offenses; cycle edges 14 -> 11; inward delta 242 -> 242, its 4 new and 4 gone offenses differ only in the constant name (#1174); crc-ledger-check 0 problems

Follow-ups: #1174 (crc-inward-delta does not map renamed constants in offense subjects)

## Resolution **Done:** Promoted Handoff::Content (with MalformedError, Mutation) to top-level OsSdlc::HandoffContent; holders, tests, and handoff-artifact-format.md updated; ledger rows 482-484 record the S8 move. **Evidence:** f5fcc5d1 (runner), 1630ac1d (staged deletions), 073fbfff (ledger); suite 2248 runs 0 failures; rubocop 86 files no offenses; cycle edges 14 -> 11; inward delta 242 -> 242, its 4 new and 4 gone offenses differ only in the constant name (#1174); crc-ledger-check 0 problems **Follow-ups:** #1174 (crc-inward-delta does not map renamed constants in offense subjects)
jared closed this issue 2026-10-19 21:12:19 +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#1172
No description provided.