symfonic.devtools.archgate.reachability¶
reachability ¶
RCH-1 — a capability or service package nothing imports is not shipped.
The gate this repository most needed and did not have.
The full-framework refactor completed all 72 of its ledger tasks and produced
~48,000 lines of new architecture that serves no request, because every task
verified its own contracts and none asked "does anything call this?". The
same defect appeared at four smaller scales in a single review session: an
exported max_calls_per_invocation with no reader, a CapabilityConfig
protocol with no implementation, a delete_subtree implemented on three
backends with no caller, and 15 modules of effect fence with no importer.
A green suite cannot catch this. Every one of those had passing tests — tests written against the thing itself, which is exactly the blind spot. Reachability is a property of the graph, so it needs a check that reads the graph.
Scope, deliberately narrow:
- Only
symfonic.capabilities.*andsymfonic.services.*. Those are internal wiring by construction — something insrc/is supposed to compose them. - Entry-point packages are exempt because "no importer in
src" is their correct state:agent.fastapiis imported by an adopter's app,agent.clianddevtools.*by a console script,tools.mcpby adopter code. Judging them by this rule would train people to ignore it. - A package importing only its own submodules does not count as reached. That is what makes an orphan island of eleven packages an orphan island rather than eleven mutual endorsements.
The rule is not "delete this". It is "wire it, or say in the exception registry why it ships unreached, with an expiry". An unreachable package is either debt with a date or a deletion nobody has performed.
check_reachability ¶
Gated packages that no module outside themselves imports.