crc-refactor domain census: deterministic placement candidates from the top-level listing #1092

Closed
opened 2026-10-17 17:57:36 +00:00 by jared · 1 comment
Owner

Problem

The top level of plugins/os-sdlc/lib/os_sdlc holds 35 directories and 60 files.
Two-word names hide domains.
Seven entries start with crc_.
Three entries start with command_.
Two entries start with loud_.
Six two-word files have a first word that already names a top-level concept: project_shell, lint_output, agent_type, verdict_outcome, design_placement, handoff_content.
Three files share a subject with no home: test_output, retired_test, diff_test_plan.
Project::Test and Project::Test::Candidates form a Suite domain with them.
The CRC ledger rules one file at a time against a job sentence.
It never reads the listing as a whole, so it did not emit these moves.
The collaborator pass then measured eleven root-family data clumps.
Those clumps are symptoms of the missing Crc:: namespace.

Reproduce

n/a: design ticket

Approach

A deterministic script reads the top-level listing and emits placement candidates.
The script uses no model.
It never moves a file.
Rule (a): two or more entries share a first word. That is a candidate namespace.
Rule (b): a two-word entry whose first word is an existing one-word top-level concept. That is a candidate move under that concept.
Rule (c): entries share a last word and no matching concept exists. That is a candidate new domain.
The ledger agent confirms or refuses each candidate with a job sentence. The verdict is the existing move verdict.
The census runs after every batch of moves.
It also runs as a gate at the start of /os-sdlc:crc-refactor and /os-sdlc:collaborator-pass.
Candidates present means placement goes first.

Required work:

  1. bin/crc-census (or a census subcommand of the crc bins) emits candidates as TSV: rule, entries, proposed namespace. check: present candidate in plugins/os-sdlc/lib/os_sdlc/crc_census/**/*.rb
  2. The three rules live in one object with one method per rule.
  3. crc-refactor SKILL.md runs the census before the ledger and after each applied batch. check: present census in plugins/os-sdlc/skills/crc-refactor/SKILL.md
  4. collaborator-pass SKILL.md runs the census as a gate before measure. check: present census in plugins/os-sdlc/skills/collaborator-pass/SKILL.md

Orchestrator work: apply the confirmed moves through /os-sdlc:crc-refactor in green batches.
Batch order: Crc::, Command::, Loud::, Suite::{Config,Candidates,Command,Output,Retired}, then the six singleton moves.

Acceptance criteria

  1. Given today's lib/os_sdlc, when the census runs, then it emits crc (7 entries), command (3), and loud (2) as namespace candidates.
  2. Given today's lib/os_sdlc, when the census runs, then it emits project_shell, lint_output, agent_type, verdict_outcome, design_placement, and handoff_content as move candidates under their existing concept.
  3. Given today's lib/os_sdlc, when the census runs, then it emits test_output, retired_test, and diff_test_plan as a shared-subject candidate.
  4. Given a tree with no two-word top-level names, when the census runs, then it emits nothing and exits 0.
  5. Given the census runs, then no file on disk changes.

Owner sketch

class OsSdlc::CrcCensus::Placement
  def initialize(listing)
  def candidates  # => [[rule, entries, namespace]]
end

Non-goals

  • Applying moves.
  • Naming beyond the candidate namespace.

Origin

  • Trigger: collaborator-pass run 20261017T165147Z; ruling 1 of handoff .cc-os/os/handoffs/2026-10-17-1526-collaborator-pass-stages-1-4-shipped.md, section "Back on track"
  • Improvised this session: none
  • Chain: eleven root-family clumps in run 165147Z ← no Crc:: namespace ← ledger rules per file ← DESIGN (plugins/os-sdlc/skills/collaborator-pass/SKILL.md)
  • Root candidate: this ticket
  • Where: plugins/os-sdlc/lib/os_sdlc/crc_census
  • Session: 909d1bcd-dd81-408f-8581-5c682b1a742d
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/909d1bcd-dd81-408f-8581-5c682b1a742d.jsonl
## Problem The top level of `plugins/os-sdlc/lib/os_sdlc` holds 35 directories and 60 files. Two-word names hide domains. Seven entries start with `crc_`. Three entries start with `command_`. Two entries start with `loud_`. Six two-word files have a first word that already names a top-level concept: `project_shell`, `lint_output`, `agent_type`, `verdict_outcome`, `design_placement`, `handoff_content`. Three files share a subject with no home: `test_output`, `retired_test`, `diff_test_plan`. `Project::Test` and `Project::Test::Candidates` form a Suite domain with them. The CRC ledger rules one file at a time against a job sentence. It never reads the listing as a whole, so it did not emit these moves. The collaborator pass then measured eleven root-family data clumps. Those clumps are symptoms of the missing `Crc::` namespace. ## Reproduce n/a: design ticket ## Approach A deterministic script reads the top-level listing and emits placement candidates. The script uses no model. It never moves a file. Rule (a): two or more entries share a first word. That is a candidate namespace. Rule (b): a two-word entry whose first word is an existing one-word top-level concept. That is a candidate move under that concept. Rule (c): entries share a last word and no matching concept exists. That is a candidate new domain. The ledger agent confirms or refuses each candidate with a job sentence. The verdict is the existing move verdict. The census runs after every batch of moves. It also runs as a gate at the start of `/os-sdlc:crc-refactor` and `/os-sdlc:collaborator-pass`. Candidates present means placement goes first. Required work: 1. `bin/crc-census` (or a `census` subcommand of the crc bins) emits candidates as TSV: rule, entries, proposed namespace. check: present `candidate` in `plugins/os-sdlc/lib/os_sdlc/crc_census/**/*.rb` 2. The three rules live in one object with one method per rule. 3. crc-refactor SKILL.md runs the census before the ledger and after each applied batch. check: present `census` in `plugins/os-sdlc/skills/crc-refactor/SKILL.md` 4. collaborator-pass SKILL.md runs the census as a gate before measure. check: present `census` in `plugins/os-sdlc/skills/collaborator-pass/SKILL.md` Orchestrator work: apply the confirmed moves through `/os-sdlc:crc-refactor` in green batches. Batch order: `Crc::`, `Command::`, `Loud::`, `Suite::{Config,Candidates,Command,Output,Retired}`, then the six singleton moves. ## Acceptance criteria 1. Given today's `lib/os_sdlc`, when the census runs, then it emits `crc` (7 entries), `command` (3), and `loud` (2) as namespace candidates. 2. Given today's `lib/os_sdlc`, when the census runs, then it emits `project_shell`, `lint_output`, `agent_type`, `verdict_outcome`, `design_placement`, and `handoff_content` as move candidates under their existing concept. 3. Given today's `lib/os_sdlc`, when the census runs, then it emits `test_output`, `retired_test`, and `diff_test_plan` as a shared-subject candidate. 4. Given a tree with no two-word top-level names, when the census runs, then it emits nothing and exits 0. 5. Given the census runs, then no file on disk changes. ## Owner sketch ```ruby class OsSdlc::CrcCensus::Placement def initialize(listing) def candidates # => [[rule, entries, namespace]] end ``` ## Non-goals - Applying moves. - Naming beyond the candidate namespace. ## Origin - Trigger: collaborator-pass run 20261017T165147Z; ruling 1 of handoff .cc-os/os/handoffs/2026-10-17-1526-collaborator-pass-stages-1-4-shipped.md, section "Back on track" - Improvised this session: none - Chain: eleven root-family clumps in run 165147Z ← no Crc:: namespace ← ledger rules per file ← DESIGN (`plugins/os-sdlc/skills/collaborator-pass/SKILL.md`) - Root candidate: this ticket - Where: plugins/os-sdlc/lib/os_sdlc/crc_census - Session: 909d1bcd-dd81-408f-8581-5c682b1a742d - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/909d1bcd-dd81-408f-8581-5c682b1a742d.jsonl
Author
Owner

Resolution

Done: crc-placement domain census wired as a gate into crc-refactor (Phase 0, after each Phase 5 wave 4 batch) and collaborator-pass (before measure)

Evidence: commits fb2be025, ceda461d, dacec83d, b3026679

Follow-ups: none

## Resolution **Done:** crc-placement domain census wired as a gate into crc-refactor (Phase 0, after each Phase 5 wave 4 batch) and collaborator-pass (before measure) **Evidence:** commits fb2be025, ceda461d, dacec83d, b3026679 **Follow-ups:** none
jared closed this issue 2026-10-17 23:01:07 +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#1092
No description provided.