collaborator-pass: owners_that_exist shows entry callers, not only receivers #1104
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
rule-proposal
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#1104
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
ConceptBrief::Owners(plugins/os-sdlc/lib/os_sdlc/collaborator_pass/concept_brief/owners.rb:13) builds three groups. Project attributes come from reflection over Data members. Concept objects are join rows whose top namespace segment equals the concept. Shared parameters come from theparamssignals of the sites' constructors. All three groups answer one question: what does the concept receive.An entry object relates to the concept by calling its constructors.
Signal(plugins/os-sdlc/lib/os_sdlc/collaborator_pass/signal.rb:5) has the members source, kind, path, line, constant, names, group, weight.ConstructorGraph(constructor_graph.rb) already walks every.newcall in lib/ and bin/ and yieldsConstructorEdge(from, to, path, line, args).EntryPoints(entry_points.rb) already lists the bins and theBoot::Commandstable.ClumpTraceuses both to writetrace.yml. The edges are not persisted in the run directory andConceptBrief::Ownersdoes not read the edges or the traces.EntryPoints#resolvesteps overBootto the first constant the command lambda names, soBootandBoot::Inputsnever appear as an entry constant. Theparamssource records constructor parameter names. Theinwardsource records layer-violating edges only. Theflaysource records duplication.JoinRow(join_row.rb:5) drops the ledger'sjob_category. The ledger names callers only as free text in itsevidencecolumn.CollaboratorPass::EntryPoint(entry_point.rb) exists. Nothing uses it.In iterations 2 and 3 (#1088, #1090), the prescriber built
CommandLineandCommandControllerto own whatBootalready owned. The brief never showedBoot. #1094 (commit17d4c688) added owners_that_exist and left this blind spot.Observed
The command prints owners_that_exist with these parts.
root, target.name, target.path, target.test.path, target.test.command, target.test.framework, target.lint.config, target.tracker. It has nocodebase.lib_root.OsSdlc::Crc::*join row.projectandrun_path.The output has no
Boot, noBoot::Inputs::CrcArgv, and noProcessIO.Reproduce
Measure a fresh run with
collaborator-pass measure --runs docs/crc/os-sdlc/collaborator-runs, then use that run directory.Approach
Persist the constructor edges in the run directory (edges.tsv or a
callssection of signals.tsv). Build theentry_callersgroup from the edges whosetois a finding site in the concept, grouped byfrom, with the join row'srole, plus thetrace.ymlentries for the concept's findings. RecordBootand theBoot::Inputs::*object as the entry hop before the action constant.Add a fourth group
entry_callersin Owners. Each entry gives the calling constant, its join-rowrole, and the sites it calls.Trim the Project group to attributes that some site receives, plus
codebase.lib_root.Reduce concept_objects to objects that share a site with a finding.
Required work:
edgesinplugins/os-sdlc/lib/os_sdlc/collaborator_pass/run_directory.rbentry_callersgroup — check: presententry_callersinplugins/os-sdlc/lib/os_sdlc/collaborator_pass/concept_brief/**/*.rbcodebase.lib_root— check: presentlib_rootinplugins/os-sdlc/lib/os_sdlc/collaborator_pass/concept_brief/**/*.rbhopsinplugins/os-sdlc/lib/os_sdlc/collaborator_pass/entry_points.rbAcceptance criteria
Boot::Commandsentry whose input methodInputs.method(:crc_census)callsBoot::Inputs::CrcArgvand whose action lambda buildsCrc::Census::Run, when collaborator-pass measures, then each trace intrace.ymlrecordshops[OsSdlc::Boot, OsSdlc::Boot::Inputs, OsSdlc::Boot::Inputs::CrcArgv]beforeentry_constant; and when prescribe-brief runs on that run,entry_callershas an entry forOsSdlc::Boot::Inputs::CrcArgvwith its join-row role (empty when the row isno_row) and the concept sites the action constant reaches. Test throughEntryPointswith a commands-table fixture, not a hand-builtEntryTrace.codebase.lib_rootand does not listtarget.test.command.lib/orbin/, when prescribe-brief runs, then entry_callers is empty for that site and the command exits 0.Owner sketch
RunDirectory#edgesreads the persisted ConstructorEdge rows;ConceptBrief::Owners#entry_callersjoins edges, traces, and join rows.Owners#entry_callersgroups the edges by calling constant.Non-goals
Origin
17d4c688, 2026-10-18.plugins/os-sdlc/lib/os_sdlc/collaborator_pass/signal.rb)plugins/os-sdlc/lib/os_sdlc/collaborator_pass/concept_brief/owners.rbVERDICT: CREATE
REASON: Observed, reproducible pain. The brief omits entry callers and produced two wrong owners (#1088, #1090). The chain ends in DESIGN, so this ticket is the root. It blocks collaborator-pass iteration 4.
Work started on branch
ticket-1104via /os-sdlc:implement (map poodr-ticket-implementation, target os-sdlc).Escalation 37 (implementation 64): AC1 was bound to frozen run 20261017T223555Z, which has no stored edges, so no code change could satisfy it. Restated AC1 in fixture terms and added a required-work check for the Boot entry hop. Rerouting the same implementation.
Skeptic DROP (no ticket): orphan dispatch 590 came from a manual hand-finish design audit outside the pipeline; SubagentStart cannot tell it apart and no recurring pain is recorded.
Skeptic DROP (no ticket): EntryTrace#calls pairing callers with family was found by code reading only; no failing case, may be intended design. File only if entry_callers over-reports in a real run.
Resolution
Done: prescribe-brief owners_that_exist gains entry_callers (Boot::Inputs::* input object or action constant, join-row role, concept sites); measure persists ConstructorGraph edges as calls rows and records Boot hops in trace.yml; Project group trimmed to received attributes plus codebase.lib_root; concept_objects limited to finding sites; prescribe.md explains entry_callers. Hand-finished after behavior-verifier bound escalations 37 and 39 (implementation 64); AC1 restated off the frozen run.
Evidence: main
9f00eeae(merge),14fde3e3(prescribe.md); full suite 2106 runs 0 failures 40.3s; rubocop 135 files no offenses; design audit 11 findings, 10 fixed, 1 answered (root->target.path line has effect, pinned by prescribe_brief_concept_test.rb:66); fresh run 20261018T170349Z: entry_callers names OsSdlc::Boot::Inputs::CrcArgv role parser, 11 sites.Follow-ups: #1112 reroute resets edge spend; #1113 test-reviewer GAP blocks round; #1114 behavior-verifier brief carries test_changes; EntryTrace family over-report dropped by skeptic (no failing case); hook recording hand-finish audit as dispatch 590 dropped by skeptic.