Problem
Decorator- and call-declared entrypoints are covered (#157). Class-declared ones are not: a
framework whose entrypoints are "subclass this and define these methods" — Django's class-based
views, DRF's APIView/ViewSet in python; any TypeScript framework with a routed base class — has
no matcher, so bases: rules in a rules file load but never fire.
Unit 4 of docs/design/specs/entrypoint-detection.md
(#150), Task 6 of the plan.
Scope boundary
The base-class matcher only: entrypointsFromBases with transitive: heritage walking, dispatch:
method records, and via:. No new shipped framework rules — NestJS and Angular are decorator-only,
so the matcher is exercised through a user rules file in the test. File conventions and manifests
are unit 5.
Goals
Caveats and known risks
base_classes holds an in-project SIGNATURE when the checker resolved the base and the WRITTEN
spelling otherwise; the resolver must be identity on already-qualified input
- An external ancestor has no node, so transitive walking stops at the project boundary — the direct
base of the last in-project class is what matches
- The dispatch intersection depends on how
cls.callables is keyed; verify against a fixture rather
than assuming get is keyed get
Definition of done
- Direct base via import table, dispatch only for defined methods,
via = class id — asserted
- Transitive: an in-project ancestor's base matches; a non-verb dispatch name yields
http_methods: []
- The gate still applies: no import or dependency for the framework → nothing registers
bun test green
Problem
Decorator- and call-declared entrypoints are covered (#157). Class-declared ones are not: a
framework whose entrypoints are "subclass this and define these methods" — Django's class-based
views, DRF's
APIView/ViewSetin python; any TypeScript framework with a routed base class — hasno matcher, so
bases:rules in a rules file load but never fire.Unit 4 of
docs/design/specs/entrypoint-detection.md(#150), Task 6 of the plan.
Scope boundary
The base-class matcher only:
entrypointsFromBaseswithtransitive:heritage walking,dispatch:method records, and
via:. No new shipped framework rules — NestJS and Angular are decorator-only,so the matcher is exercised through a user rules file in the test. File conventions and manifests
are unit 5.
Goals
— matches
rule.matchtransitive: truealso checks the bases of every in-project ancestor reachable throughextends_idsevidence: cls.signature); eachdispatch:name the class DEFINESgets a record with
rule: "<id>.dispatch",via: cls.id, andhttp_methods: [NAME]whenNAME is an HTTP verb — a
ListViewwith onlygetgains no phantompostCaveats and known risks
base_classesholds an in-project SIGNATURE when the checker resolved the base and the WRITTENspelling otherwise; the resolver must be identity on already-qualified input
base of the last in-project class is what matches
cls.callablesis keyed; verify against a fixture ratherthan assuming
getis keyedgetDefinition of done
via= class id — assertedhttp_methods: []bun testgreen