Preserve whole object: Implementation for implementation+project #1200

Open
opened 2026-10-20 02:11:13 +00:00 by jared · 3 comments
Owner

Problem

implementation+project (data_clump, score 20) spans 5 classes in concepts Brief, Dispatch, Gate, Implementation.

  • OsSdlc::Brief::Facts (/home/jared/dev/cc-os/.claude/worktrees/crc-os-sdlc-run-3/plugins/os-sdlc/lib/os_sdlc/brief/facts.rb:22)
  • OsSdlc::Dispatch::ComposedBrief (/home/jared/dev/cc-os/.claude/worktrees/crc-os-sdlc-run-3/plugins/os-sdlc/lib/os_sdlc/dispatch/composed_brief.rb:6)
  • OsSdlc::Gate::Commands (/home/jared/dev/cc-os/.claude/worktrees/crc-os-sdlc-run-3/plugins/os-sdlc/lib/os_sdlc/gate/commands.rb:6)
  • OsSdlc::Implementation::MutationCheck (/home/jared/dev/cc-os/.claude/worktrees/crc-os-sdlc-run-3/plugins/os-sdlc/lib/os_sdlc/implementation/mutation_check.rb:10)
  • OsSdlc::Implementation::StateDump (/home/jared/dev/cc-os/.claude/worktrees/crc-os-sdlc-run-3/plugins/os-sdlc/lib/os_sdlc/implementation/state_dump.rb:8)

support 5; maximal

  • retired-tests-check born at plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21 as implementation.project(root)
  • required-work-check born at plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21 as implementation.project(root)
  • mutation-check born at plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21 as implementation.project(root)
  • unchanged-check born at plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21 as implementation.project(root)

Approach

The clump's names are members of one object that already exists or is built upstream; pass the object. Object: OsSdlc::Implementation (built at plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21). Implementation already derives the project through project(root), so every site can take the implementation and the root and ask it for the project. Gate::Commands belongs too, because both production callers (Gate::Run and MutationCheck) pass a non-nil implementation and bind it as implementation.project(root).bound_to(implementation.target); only tests use the nil default, so Commands can own that binding and the finding drops to zero in one ticket.

Required work:

  1. OsSdlc::Brief::Facts takes implementation, tracker, root — check: absent project: in plugins/os-sdlc/lib/os_sdlc/brief/facts.rb
  2. OsSdlc::Dispatch::ComposedBrief takes implementation, tracker, root — check: absent project: in plugins/os-sdlc/lib/os_sdlc/dispatch/composed_brief.rb
  3. OsSdlc::Gate::Commands takes implementation, root, dispatch_id — check: absent project: in plugins/os-sdlc/lib/os_sdlc/gate/commands.rb
  4. OsSdlc::Implementation::MutationCheck takes implementation, root — check: absent project: in plugins/os-sdlc/lib/os_sdlc/implementation/mutation_check.rb
  5. OsSdlc::Implementation::StateDump takes implementation, root — check: absent project: in plugins/os-sdlc/lib/os_sdlc/implementation/state_dump.rb

Orchestrator work: re-measure with bin/collaborator-pass measure --runs docs/crc/os-sdlc/collaborator-runs, then stop-check.

Rejected: build_once_at_entry — Implementation already derives the project through project(root), so every site can take the implementation and the root and ask it for the project. Gate::Commands belongs too, because both production callers (Gate::Run and MutationCheck) pass a non-nil implementation and bind it as implementation.project(root).bound_to(implementation.target); only tests use the nil default, so Commands can own that binding and the finding drops to zero in one ticket.

Acceptance criteria

  1. Given today's lib, when bin/collaborator-pass measure --sources params,inward,flay runs after the change, then the data_clump finding implementation+project scores at most 0 (was 20) and none of project appears in its names.
  2. Given an implementation and a root, when the brief, mutation check, or state dump is built, then its output is identical to the output built from implementation.project(root).
  3. Given an implementation, a root and a dispatch id, when Gate::Commands builds its step commands, then each command equals the one built today from implementation.project(root).bound_to(implementation.target).
  4. Given the existing tests of Facts, ComposedBrief, Commands, MutationCheck, StateDump and Gate::Run, when they run with fixtures updated to pass an implementation and a root, then they pass.

Owner sketch

class OsSdlc::Implementation
end

class OsSdlc::Brief::Facts
  def initialize(implementation, tracker, root)
  end
end

class OsSdlc::Dispatch::ComposedBrief
  def initialize(implementation, tracker, root)
  end
end

class OsSdlc::Gate::Commands
  def initialize(implementation, root, dispatch_id)
  end
end

class OsSdlc::Implementation::MutationCheck
  def initialize(implementation, root)
  end
end

class OsSdlc::Implementation::StateDump
  def initialize(implementation, root)
  end
end

Origin

  • Trigger: bin/collaborator-pass run 20261020T020325Z
  • Improvised this session: none
  • Chain: implementation+project across 5 classes ← plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21 ← DESIGN (plugins/os-sdlc/lib/os_sdlc/brief/facts.rb)
  • Root candidate: none found; searched implementation+project, data_clump, preserve whole object, Facts, ComposedBrief, Gate::Commands, MutationCheck, StateDump
  • Where: plugins/os-sdlc/lib/os_sdlc/brief/facts.rb
  • Session: 2e167079-f404-4139-9cfa-6c0c937ce9f0
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os--claude-worktrees-crc-os-sdlc-run-3/2e167079-f404-4139-9cfa-6c0c937ce9f0.jsonl

VERDICT: CREATE

## Problem implementation+project (data_clump, score 20) spans 5 classes in concepts Brief, Dispatch, Gate, Implementation. - `OsSdlc::Brief::Facts` (`/home/jared/dev/cc-os/.claude/worktrees/crc-os-sdlc-run-3/plugins/os-sdlc/lib/os_sdlc/brief/facts.rb:22`) - `OsSdlc::Dispatch::ComposedBrief` (`/home/jared/dev/cc-os/.claude/worktrees/crc-os-sdlc-run-3/plugins/os-sdlc/lib/os_sdlc/dispatch/composed_brief.rb:6`) - `OsSdlc::Gate::Commands` (`/home/jared/dev/cc-os/.claude/worktrees/crc-os-sdlc-run-3/plugins/os-sdlc/lib/os_sdlc/gate/commands.rb:6`) - `OsSdlc::Implementation::MutationCheck` (`/home/jared/dev/cc-os/.claude/worktrees/crc-os-sdlc-run-3/plugins/os-sdlc/lib/os_sdlc/implementation/mutation_check.rb:10`) - `OsSdlc::Implementation::StateDump` (`/home/jared/dev/cc-os/.claude/worktrees/crc-os-sdlc-run-3/plugins/os-sdlc/lib/os_sdlc/implementation/state_dump.rb:8`) support 5; maximal - retired-tests-check born at plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21 as implementation.project(root) - required-work-check born at plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21 as implementation.project(root) - mutation-check born at plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21 as implementation.project(root) - unchanged-check born at plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21 as implementation.project(root) ## Approach The clump's names are members of one object that already exists or is built upstream; pass the object. Object: `OsSdlc::Implementation` (built at plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21). Implementation already derives the project through project(root), so every site can take the implementation and the root and ask it for the project. Gate::Commands belongs too, because both production callers (Gate::Run and MutationCheck) pass a non-nil implementation and bind it as implementation.project(root).bound_to(implementation.target); only tests use the nil default, so Commands can own that binding and the finding drops to zero in one ticket. Required work: 1. `OsSdlc::Brief::Facts` takes `implementation, tracker, root` — check: absent `project:` in `plugins/os-sdlc/lib/os_sdlc/brief/facts.rb` 2. `OsSdlc::Dispatch::ComposedBrief` takes `implementation, tracker, root` — check: absent `project:` in `plugins/os-sdlc/lib/os_sdlc/dispatch/composed_brief.rb` 3. `OsSdlc::Gate::Commands` takes `implementation, root, dispatch_id` — check: absent `project:` in `plugins/os-sdlc/lib/os_sdlc/gate/commands.rb` 4. `OsSdlc::Implementation::MutationCheck` takes `implementation, root` — check: absent `project:` in `plugins/os-sdlc/lib/os_sdlc/implementation/mutation_check.rb` 5. `OsSdlc::Implementation::StateDump` takes `implementation, root` — check: absent `project:` in `plugins/os-sdlc/lib/os_sdlc/implementation/state_dump.rb` Orchestrator work: re-measure with bin/collaborator-pass measure --runs docs/crc/os-sdlc/collaborator-runs, then stop-check. Rejected: build_once_at_entry — Implementation already derives the project through project(root), so every site can take the implementation and the root and ask it for the project. Gate::Commands belongs too, because both production callers (Gate::Run and MutationCheck) pass a non-nil implementation and bind it as implementation.project(root).bound_to(implementation.target); only tests use the nil default, so Commands can own that binding and the finding drops to zero in one ticket. ## Acceptance criteria 1. Given today's lib, when bin/collaborator-pass measure --sources params,inward,flay runs after the change, then the data_clump finding implementation+project scores at most 0 (was 20) and none of project appears in its names. 2. Given an implementation and a root, when the brief, mutation check, or state dump is built, then its output is identical to the output built from implementation.project(root). 3. Given an implementation, a root and a dispatch id, when Gate::Commands builds its step commands, then each command equals the one built today from implementation.project(root).bound_to(implementation.target). 4. Given the existing tests of Facts, ComposedBrief, Commands, MutationCheck, StateDump and Gate::Run, when they run with fixtures updated to pass an implementation and a root, then they pass. ## Owner sketch ```ruby class OsSdlc::Implementation end class OsSdlc::Brief::Facts def initialize(implementation, tracker, root) end end class OsSdlc::Dispatch::ComposedBrief def initialize(implementation, tracker, root) end end class OsSdlc::Gate::Commands def initialize(implementation, root, dispatch_id) end end class OsSdlc::Implementation::MutationCheck def initialize(implementation, root) end end class OsSdlc::Implementation::StateDump def initialize(implementation, root) end end ``` ## Origin - Trigger: bin/collaborator-pass run 20261020T020325Z - Improvised this session: none - Chain: implementation+project across 5 classes ← plugins/os-sdlc/lib/os_sdlc/implementation/acceptance.rb:21 ← DESIGN (`plugins/os-sdlc/lib/os_sdlc/brief/facts.rb`) - Root candidate: none found; searched implementation+project, data_clump, preserve whole object, Facts, ComposedBrief, Gate::Commands, MutationCheck, StateDump - Where: plugins/os-sdlc/lib/os_sdlc/brief/facts.rb - Session: 2e167079-f404-4139-9cfa-6c0c937ce9f0 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os--claude-worktrees-crc-os-sdlc-run-3/2e167079-f404-4139-9cfa-6c0c937ce9f0.jsonl VERDICT: CREATE
Author
Owner

Work started on branch crc-os-sdlc-run-3 (os-sdlc CRC run 3 collaborator round).

Work started on branch crc-os-sdlc-run-3 (os-sdlc CRC run 3 collaborator round).
Author
Owner

Delta-check failed. The recipe (preserve_whole_object) cleared implementation+project (score 20 -> 0), but implementation+root rose 6 -> 44 and root+tracker rose 12 -> 24. The data_clump total rose 266 -> 276 against baseline 20261020T020325Z. Commit 87dff86f is reverted in c060c7e9 and is not merged. Implementation 106 is abandoned. Ruling row: data_clump implementation+project reject by unattended. The opus alternative recipe was build_once_at_entry; a new ruling row needs Jared. The ticket stays open for that ruling.

Delta-check failed. The recipe (preserve_whole_object) cleared implementation+project (score 20 -> 0), but implementation+root rose 6 -> 44 and root+tracker rose 12 -> 24. The data_clump total rose 266 -> 276 against baseline 20261020T020325Z. Commit 87dff86f is reverted in c060c7e9 and is not merged. Implementation 106 is abandoned. Ruling row: data_clump implementation+project reject by unattended. The opus alternative recipe was build_once_at_entry; a new ruling row needs Jared. The ticket stays open for that ruling.
Author
Owner

Follow-up dropped (skeptic, run 3 close-out): "Facts test helper". The 2026-10-16 fixture-standard ticket already covers it.

Follow-up dropped (skeptic, run 3 close-out): "Facts test helper". The 2026-10-16 fixture-standard ticket already covers it.
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#1200
No description provided.