Give a superclass reference its class as the source in ConceptCycleCheck::References #1746
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#1746
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
Lint::ConceptCycleCheck::Referencesgives the wrong source to a superclass reference. It records the reference with the scope outside the class as its source. When the class is the root of a concept, that scope is the library root, so the edge has no source concept and the check drops it. The copSdlc/Structural/ConceptCyclegives the class as the source of the same reference. Thus the cop and the index disagree: the cop can report a loop edge that is not in the graph it reads the route from, andbin/lint-concept-cyclesdoes not print that loop.Observed
lib/os_sdlc/lint/concept_cycle_check/references.rb:149-150visitsnode.superclasswith the outer@scope, andlocatedandresolveduse that scope as the source.lib/os_sdlc/cops/structural/concept_cycle/reference.rb(owner) gives the class that contains the reference.test/os_sdlc/lint/concept_cycle_check/references_test.rb:9-12expects["Zed", "Zed::Beta"]for a superclass reference, so the suite keeps the current answer.LENS: A12 broken at lib/os_sdlc/cops/structural/concept_cycle/reference.rb:38.Reproduce
a.rbwithmodule CycleFx; class A < B; end; endandb.rbwithmodule CycleFx; class B; A; end; endin one library directory.OsSdlc::Lint::ConceptCycleCheck::References.new(dir).resolved.[["CycleFx", "CycleFx::B"], ["CycleFx::B", "CycleFx::A"]]. Expected: the first pair has the sourceCycleFx::A.Origin
plugins/os-sdlc/lib/os_sdlc/lint/concept_cycle_check/references.rb:149-150)VERDICT: CREATE (ticket-skeptic, 2026-11-12, full gauntlet): References gives a superclass reference the outer scope as its source, so the batch check misses a loop that the cop reports; no open ticket owns this fault.
Resolution
Done: References records a superclass reference with the class as its source; the index and the cop agree. StartingCode::Evidence#inherited workaround removed.
Evidence:
362618281merged to main51a5613db; references_test CycleFx case; suite 5567 runs 0 failures; ConceptCallsItsCaller 7 to 9: the two new reports (dispatch/settlement.rb:10, implementation/completion_intake/unknown_dispatch_error.rb:6) are a true loop the index did not see beforeFollow-ups: none: the cop now reports the UnknownDispatchError loop; it is one of the open concept-loop offenses