Trust prompt scoped to path specifiers only (bare packages load
unprompted, including in non-interactive contexts); no first-class
install dir for non-Node repos; plugin synth passes run worker-side;
'replaces' lives in config only; the types package stays unpublished
until CG-71 proves the API; sandboxing confirmed out of scope for v1,
revisited alongside CG-72.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Five findings from the independent review, amended in place:
- §4.3 rule 4: the synthesized-hop label has FIVE renderers across three
packages; mandate one synthEdgeLabel helper in src/graph/ and carry the
label through the wire payload instead of patching each switch.
- §4.3 rule 7: validate plugin-returned nodes/edges at the persistence
boundary (closed kinds, path confinement) — the failure class the throw
policy cannot see.
- §6.5: plugin identity never enters telemetry.
- §7.3: define CG-71 graph equivalence modulo id scheme (the plugin:<id>:
prefix makes byte-identical ids impossible by design).
- §6.2/§7.1: Windows path normalization + VM validation requirements.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The design doc the rest of epic CG-62 (GH #1376) implements: v1 exposes
framework/semantic plugins only (FrameworkResolver + synth passes), with
language providers deferred to the kernel-aware spike CG-72.
Two proposals from the issue are argued down on evidence: the plugin list
lives in the committed root `codegraph.json`, not `.codegraph/config.json`
(everything in .codegraph/ is gitignored), and plugins load on the write
path rather than through CodeGraph.open() (which is deliberately lazy-loaded
off the MCP startup path).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>