Extract per-class ClassFacts in system-model #1403
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#1403
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?
VERDICT: CREATE
Problem
The pattern method needs per-class facts. The
system-modelgenerator only emits stereotypes. A later detector cannot read io, entry, routing, state, or call facts from it.Reproduce
n/a: new capability (build-plan step 4, shape detectors).
Approach
Extend
system-modelto emit oneClassFactsrecord per class (interface indocs/system-design-format/pattern-matching.mdsection 2; I/O kinds inproof/pattern-distance-experiment.mdsection 2). Start from the existing stereotypes. Output is data that a later step reads, not LikeC4 text.Fields:
io(kind:storageor:terminal, withpathandline, one entry per direct primitive call),pure?,entry?,routes_to,holds_state?,calls. A call to another class is an edge, not I/O.Required work:
ClassFactsinplugins/os-sdlc/lib/os_sdlc/system_model/**/*.rbClassFactsinplugins/os-sdlc/lib/os_sdlc/system_model/**/*.rbAcceptance criteria
plugins/osat main80a39130, when facts are generated, then the facts forHandoff::Documentshow no:storageio.Handoff::Storeshow:storageio with a path and line.Owner sketch
Non-goals
Role predicates, patterns, and scoring belong to other tickets.
Origin
80a39130)jared referenced this issue2026-10-26 20:14:30 +00:00
Input from blind run 2 (docs/system-design-format/proof/pattern-distance-run-2.md section 7, main after
25522a42). The class facts that decided most matches:case kind)Proposed fields beyond the ticket's list:
io_through_port(writes to an injected stream),constructs([{class:, line:, in_ctor:, default_param:}]),result_shape,io_signature(normalized command or path, to find copies),loc(for size weighting). Fact 4 ("class has no role", d) was mostly noise; do not build it.Work started on branch ticket-1403 (os-sdlc implement pipeline, map poodr-ticket-implementation).
Resolution
Done: ClassFacts value (io entries with kind, path, line; pure?) and an Extractor IoScan/IoLedger that fills Model#facts per class.
Evidence: Implementation 176 (8 dispatches, 0 retries, 7 min 40 s), commit
3306c2fa, merged main47c7f64e, pushed. os-sdlc suite after merging main: 2724 runs, 0 failures, 36.9 s. Acceptance criteria 1-3 (io for Handoff::Document and Handoff::Store, kind/path/line on every entry) pass.Follow-ups: #1412: the Approach fields entry?, routes_to, holds_state?, calls were not in the acceptance criteria and were not built; Model#facts is not written to the generated output (required work item 2's check duplicated item 1's). #1412 blocks #1404.