You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#46 — implements RC1 (the primary root cause). #46's body is the canonical spec: file:line evidence, 7-file minimal-repro recipe, class-vs-interface control experiment, corpus metrics.
What to build
PHP interface/trait/enum declarations mint canonical declaration nodes, exactly as class does today: add interface_declaration, trait_declaration, enum_declaration to _PHP_CONFIG.class_types (graphify/extract.py:1065), mirroring Java (extract.py:936) and Groovy (extract.py:952). Also teach the resolution.py:2688 raw-scan (currently class_declaration only) the new types, so interface-extends-interface edges resolve.
trait Loggable and enum Status (declared in Extras.php, filename ≠ type name) each get a sourced declaration node; the trait's mixes_in/imports land on it; the enum's imports edge no longer dangles
_rewire_unique_stub_nodes collapses the bare foorepository implements-stub onto the new interface node (Cascade A gone)
Interface-extends-interface edges resolve (the raw-scan caveat)
Parent
#46 — implements RC1 (the primary root cause). #46's body is the canonical spec: file:line evidence, 7-file minimal-repro recipe, class-vs-interface control experiment, corpus metrics.
What to build
PHP
interface/trait/enumdeclarations mint canonical declaration nodes, exactly asclassdoes today: addinterface_declaration,trait_declaration,enum_declarationto_PHP_CONFIG.class_types(graphify/extract.py:1065), mirroring Java (extract.py:936) and Groovy (extract.py:952). Also teach theresolution.py:2688raw-scan (currentlyclass_declarationonly) the new types, so interface-extends-interface edges resolve.Known caveats (from #46's fix direction 1):
enum_declaration_list, notdeclaration_list— checkbody_fallback_child_typesAcceptance criteria
FooRepositoryinterface node; after the fix the node exists and implements / imports / references / references_constant all canonicalize onto it — matching theclass FooRepositorycontrol behavior from PHP node identity: interfaces/traits/enums get no declaration node — sourceless stubs shadow the real name, absorb its edges, and break lookup (failure mode #3, PE-78803) #46trait Loggableandenum Status(declared inExtras.php, filename ≠ type name) each get a sourced declaration node; the trait'smixes_in/importsland on it; the enum'simportsedge no longer dangles_rewire_unique_stub_nodescollapses the barefoorepositoryimplements-stub onto the new interface node (Cascade A gone)Blocked by
None — can start immediately. Highest gate leverage of the three RC slices: per #46, fixing RC1 alone flips gate Q4.