Correct the residual Sdlc/Structural/ConceptCycle message and lesson #1752
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#1752
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
The residual message of
Sdlc/Structural/ConceptCycleis for a loop reference of no proven kind.In round 1 it gave a correct fix in only 6 of 15 runs. This is below the 90% target.
The message stays open against that target until real corrections test it.
Ticket 1 supplies the facts. This ticket is blocked by ticket 1.
The base branch is
ticket-1742. It is not merged. Its worktree is/home/jared/dev/cc-os/.claude/worktrees/ticket-1742. It holds the copSdlc/Structural/ConceptCycleand the classOsSdlc::Lint::ConceptCycleCheck.maindoes not have them.The research source is
docs/research/lint-lessons/2026-11-13-concept-cycle-kinds/onmain(commits5465548a7,9bb6a9845,58ee53c). It holdssimulation/kinds.rb,simulation/facts-os-sdlc.yml,simulation/package/(lessons, message forms,render.rb), andsimulation/round-1/grades/*.yml.A "loop reference" is a reference from one concept to another concept when the two concepts are in a dependency loop. A "concept" is a top-level namespace of the library with its directory. The cop reports 93 loop references in 58 files of os-sdlc.
Work: correct the message and the lesson of the
ConceptCyclecop onticket-1742.The source text is
simulation/package/sdlc-structural-concept-cycle.yml, plus the round 1 corrections below.Corrections:
const_getexample with a move to an owner.ADR-0082 says that
Sdlc/*cops apply to each target project.Before any change to the cop name, search the target projects for a
.rubocop.ymlthat namesSdlc/Structural/ConceptCycle.Constraints:
plugins/os-sdlc/.rubocop.ymlonly (ADR-0298).lib/os_sdlc/cops/structural/agrees with its constant (ADR-0090).Excludelist and no allowlist.Observed
On five held-out references (
round-1/grades/unseen-1.ymltounseen-5.yml), 6 of 15 runs made a correct fix.9 of 15 runs named the correct fault and made no edit.
0 of 15 runs made a wrong change.
In the two-member loops (2 cases), 6 of 6 runs fixed the fault.
In the nine-member loop (3 cases), 0 of 9 runs fixed the fault.
The cause: the message names a proven fault only when one fix alone removes the report. When it named one, all three runs went to it.
Reproduce
n/a: feature ticket.
Origin
docs/research/lint-lessons/2026-11-13-concept-cycle-kinds/onmain)simulation/package/sdlc-structural-concept-cycle.ymlandsimulation/round-1/grades/unseen-*.yml)ConceptCyclecop and lesson (branchticket-1742)Blocked by #1748: this ticket uses the classification that it builds.
Resolution
Done: The residual Sdlc/Structural/ConceptCycle message lists each proven fault on a return route with its line and its cop, says how many routes exist, gives the lines of each edge of one route, lists the users of the class of the line, and ends with 'Do not change this line' only when the Facts prove it. The lesson has the step for a line with no direct line back, the corrected sentence on a two-concept loop, and a move-to-owner example. README explains that the four cops work together. One History row is in docs/implementation-status/os-sdlc.md.
Evidence: Branch ticket-1742, commits
cd772150fee1167980700513058(22 files, +578/-65). Suite: 5541 runs, 0 failures, 0 errors. Rubocop on the 19 changed Ruby files: no offenses. Cop counts on os-sdlc lib did not change: ConceptCycle 62 in 36 files, ClassInWrongConcept 1, StartingCodeInSharedConcept 19, ConceptCallsItsCaller 11. ADR-0082 check by the build agent: no other project config names the cop. The messages at the three unseen os-sdlc lines of round 1 now give the Facts that the agents lacked.Follow-ups: The 90% target is not measured for the residual message: no second simulation round was run (ruling 160). #1746 stays open (a superclass reference of a concept root class gets the wrong source). Dropped: Kinds::Sites sorts lines as text, a display order defect only.