collaborator-pass: prescribe per concept with an owners-that-exist list #1094

Closed
opened 2026-10-17 17:57:40 +00:00 by jared · 3 comments
Owner

Problem

prescribe-brief hands the prescriber one finding.
It asks who should own that finding's attributes.
The prescriber cannot see that Project already owns root, lib_root, and test_root.
It also cannot see that three sibling clumps share the same sites.
In run 20261017T165147Z, the loop would have filed three tickets for one refactor.
It would never have named Project as the owner.
The measure is fine.
The brief lacks the perspective.

Reproduce

n/a: design ticket

Approach

Measure stays whole-tree.
Prescription takes one top-level concept at a time.
Concepts are taken in order of summed finding score per concept.
The brief for a concept carries every finding whose sites sit in that concept, side by side.
It also carries an owners_that_exist list.
That list holds Project and its attributes, the concept's own objects, and the shared objects the sites already receive as parameters.
The prescriber answers two questions.
Which findings vanish if the sites take an existing owner?
Which findings need a new owner?
The recipe may name several findings as subjects.
record-ruling writes one row per named subject, so skip logic still keys on exact subjects.
This replaces the open sub-clump grouping question.

Required work:

  1. prescribe-brief --concept NAME builds the per-concept brief. check: present --concept in plugins/os-sdlc/lib/os_sdlc/collaborator_pass/**/*.rb
  2. The brief has an owners_that_exist section listing Project attributes, concept objects, and shared parameters. check: present owners_that_exist in plugins/os-sdlc/lib/os_sdlc/collaborator_pass/**/*.rb
  3. A recipe may list several subjects. validate-recipe accepts it. record-ruling writes one row per subject. check: present subjects in plugins/os-sdlc/lib/os_sdlc/collaborator_pass/**/*.rb
  4. The skill's prescribe step iterates concepts, not findings. check: present concept in plugins/os-sdlc/skills/collaborator-pass/SKILL.md

Acceptance criteria

  1. Given run 20261017T165147Z, when prescribe-brief runs for concept crc_census, then the brief lists root+test_root, lib_root+test_root, and lib_root+root together with their shared sites.
  2. Given that brief, then owners_that_exist names Project with root, target.path, and target.test.path.
  3. Given a recipe with three subjects, when record-ruling accepts it, then the rulings TSV gains three rows with the same verdict and recipe.
  4. Given stop-check after that ruling, then all three subjects count as ruled.

Owner sketch

class OsSdlc::CollaboratorPass::ConceptBrief
  def initialize(run, concept, project)
  def findings
  def owners_that_exist
end

Non-goals

  • A new measure shape.
  • Grouping in findings.yml.

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: three tickets for one refactor ← brief shows one finding ← no owners-that-exist list ← DESIGN (plugins/os-sdlc/skills/collaborator-pass/SKILL.md)
  • Root candidate: this ticket
  • Where: plugins/os-sdlc/lib/os_sdlc/collaborator_pass
  • Session: 909d1bcd-dd81-408f-8581-5c682b1a742d
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/909d1bcd-dd81-408f-8581-5c682b1a742d.jsonl
## Problem `prescribe-brief` hands the prescriber one finding. It asks who should own that finding's attributes. The prescriber cannot see that `Project` already owns `root`, `lib_root`, and `test_root`. It also cannot see that three sibling clumps share the same sites. In run 20261017T165147Z, the loop would have filed three tickets for one refactor. It would never have named `Project` as the owner. The measure is fine. The brief lacks the perspective. ## Reproduce n/a: design ticket ## Approach Measure stays whole-tree. Prescription takes one top-level concept at a time. Concepts are taken in order of summed finding score per concept. The brief for a concept carries every finding whose sites sit in that concept, side by side. It also carries an `owners_that_exist` list. That list holds Project and its attributes, the concept's own objects, and the shared objects the sites already receive as parameters. The prescriber answers two questions. Which findings vanish if the sites take an existing owner? Which findings need a new owner? The recipe may name several findings as subjects. record-ruling writes one row per named subject, so skip logic still keys on exact subjects. This replaces the open sub-clump grouping question. Required work: 1. `prescribe-brief --concept NAME` builds the per-concept brief. check: present `--concept` in `plugins/os-sdlc/lib/os_sdlc/collaborator_pass/**/*.rb` 2. The brief has an `owners_that_exist` section listing Project attributes, concept objects, and shared parameters. check: present `owners_that_exist` in `plugins/os-sdlc/lib/os_sdlc/collaborator_pass/**/*.rb` 3. A recipe may list several `subjects`. validate-recipe accepts it. record-ruling writes one row per subject. check: present `subjects` in `plugins/os-sdlc/lib/os_sdlc/collaborator_pass/**/*.rb` 4. The skill's prescribe step iterates concepts, not findings. check: present `concept` in `plugins/os-sdlc/skills/collaborator-pass/SKILL.md` ## Acceptance criteria 1. Given run 20261017T165147Z, when prescribe-brief runs for concept `crc_census`, then the brief lists root+test_root, lib_root+test_root, and lib_root+root together with their shared sites. 2. Given that brief, then `owners_that_exist` names Project with `root`, `target.path`, and `target.test.path`. 3. Given a recipe with three subjects, when record-ruling accepts it, then the rulings TSV gains three rows with the same verdict and recipe. 4. Given stop-check after that ruling, then all three subjects count as ruled. ## Owner sketch ```ruby class OsSdlc::CollaboratorPass::ConceptBrief def initialize(run, concept, project) def findings def owners_that_exist end ``` ## Non-goals - A new measure shape. - Grouping in findings.yml. ## 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: three tickets for one refactor ← brief shows one finding ← no owners-that-exist list ← DESIGN (`plugins/os-sdlc/skills/collaborator-pass/SKILL.md`) - Root candidate: this ticket - Where: plugins/os-sdlc/lib/os_sdlc/collaborator_pass - Session: 909d1bcd-dd81-408f-8581-5c682b1a742d - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/909d1bcd-dd81-408f-8581-5c682b1a742d.jsonl
Author
Owner

Work started via /os-sdlc:implement (map poodr-ticket-implementation, target os-sdlc). Branch: ticket-1094.

Work started via /os-sdlc:implement (map poodr-ticket-implementation, target os-sdlc). Branch: ticket-1094.
Author
Owner

Skeptic dropped the Project-lists-its-own-attributes part of the inflection follow-up (speculative hardening: Owners works today). Re-file only when a second project shape breaks it.

Skeptic dropped the Project-lists-its-own-attributes part of the inflection follow-up (speculative hardening: Owners works today). Re-file only when a second project shape breaks it.
Author
Owner

Resolution

Done: prescribe-brief --concept NAME builds ConceptBrief: every finding of one top-level concept side by side, with owners_that_exist (Project attributes, concept objects, shared parameter objects). Recipes may list several subjects; validate-recipe checks each; record-ruling takes repeated --subject and writes one row per subject. Skill loop and prescribe prompt iterate concepts. AC 3 wording corrected from 'verdict and ticket' to 'verdict and recipe' (the rulings TSV has no ticket column). Hand-finished after implementation 63 escalated (bound_exhausted:test-reviewer/fail).

Evidence: main 17d4c688. Full suite: 2094 runs, 4720 assertions, 0 failures, 0 errors (39.5s, budget 47s). rubocop: 16 changed files, no offenses. One opus design audit (12 findings): F1-F4, F6, F8-F12 fixed; F7 answered (spec-owned literal check is acceptable); F5 filed/dropped below. prescribe-brief --concept crc_census on run 20261017T165147Z lists root+test_root, lib_root+test_root, lib_root+root and names OsSdlc::Project with root, target.path, target.test.path.

Follow-ups: #1100 verifier-fail routing to red-first test-writer (map defect; skeptic CREATE). #1101 multi-subject recipes checked only against main finding (CREATE). #1102 two Sdlc cops crash on destructured params (CREATE). #1103 one owner for underscore/camelize (skeptic SPLIT; part 2 'Project lists its own brief attributes' dropped as speculative, reason commented on #1094). Dropped: findings spanning two concepts appear in both briefs — per-subject rulings make the second brief skip them; no observed defect.

## Resolution **Done:** prescribe-brief --concept NAME builds ConceptBrief: every finding of one top-level concept side by side, with owners_that_exist (Project attributes, concept objects, shared parameter objects). Recipes may list several subjects; validate-recipe checks each; record-ruling takes repeated --subject and writes one row per subject. Skill loop and prescribe prompt iterate concepts. AC 3 wording corrected from 'verdict and ticket' to 'verdict and recipe' (the rulings TSV has no ticket column). Hand-finished after implementation 63 escalated (bound_exhausted:test-reviewer/fail). **Evidence:** main 17d4c688. Full suite: 2094 runs, 4720 assertions, 0 failures, 0 errors (39.5s, budget 47s). rubocop: 16 changed files, no offenses. One opus design audit (12 findings): F1-F4, F6, F8-F12 fixed; F7 answered (spec-owned literal check is acceptable); F5 filed/dropped below. prescribe-brief --concept crc_census on run 20261017T165147Z lists root+test_root, lib_root+test_root, lib_root+root and names OsSdlc::Project with root, target.path, target.test.path. **Follow-ups:** #1100 verifier-fail routing to red-first test-writer (map defect; skeptic CREATE). #1101 multi-subject recipes checked only against main finding (CREATE). #1102 two Sdlc cops crash on destructured params (CREATE). #1103 one owner for underscore/camelize (skeptic SPLIT; part 2 'Project lists its own brief attributes' dropped as speculative, reason commented on #1094). Dropped: findings spanning two concepts appear in both briefs — per-subject rulings make the second brief skip them; no observed defect.
jared closed this issue 2026-10-18 14:54: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#1094
No description provided.