PROBLEM
After stage 1 (dual labels, graph schema 1.1.0), the graph still carries the bare specific labels and unprefixed relationship types. The breaking completion must land exactly once, inside the in-flight v2/CanNode contract (the fix/issue-46-bolt-symbol-labels line), so consumers absorb a single 2.0.0 instead of two consecutive majors.
SCOPE BOUNDARY
This is a change to the v2 contract line, not main's v1 emitter. CanNode stays unprefixed by design: it merges on can:// ids, which embed the language, so cross-language collision is impossible at the merge layer — do not prefix it. analysis.json untouched.
GOALS
- Drop the bare specific labels: nodes carry only the
TS* twin (plus CanNode).
- Rename every relationship type to
TS_* (TS_HAS_MODULE, TS_DECLARES, TS_HAS_METHOD, TS_HAS_FIELD, TS_HAS_BODY_NODE, TS_RESOLVES_TO, TS_CALLS, TS_CFG_NEXT, TS_CDG, TS_DDG, TS_SUMMARY, TS_PARAM_IN, TS_PARAM_OUT, TS_EXTENDS, TS_IMPLEMENTS).
SCHEMA_VERSION → 2.0.0; conformance test asserts no undeclared (and no bare) label or rel type is emitted.
- Regenerate
schema.neo4j.json; release notes flag the breaking rename with the one-line migration (re-analyze; update queries Callable→TSCallable, CALLS→TS_CALLS).
CAVEATS AND KNOWN RISKS
- The v2 line also changes the merge key (
Symbol{signature} → CanNode{id}); sequencing inside that branch matters — land the prefix after the CanNode merge-label switch so the conformance test churns once.
- python-sdk's TS Neo4j backend breaks on this release by design; the SDK child must merge and release before the pin moves (lockstep rule in the epic).
DEFINITION OF DONE
- On the fixture app: zero nodes match any bare specific label; zero rels match any unprefixed type;
CanNode count unchanged from pre-change v2 output.
- Conformance test green;
schema_version = "2.0.0" stamped.
Absorbs #9 and #10.
Part of #64
PROBLEM
After stage 1 (dual labels, graph schema 1.1.0), the graph still carries the bare specific labels and unprefixed relationship types. The breaking completion must land exactly once, inside the in-flight v2/CanNode contract (the
fix/issue-46-bolt-symbol-labelsline), so consumers absorb a single 2.0.0 instead of two consecutive majors.SCOPE BOUNDARY
This is a change to the v2 contract line, not main's v1 emitter.
CanNodestays unprefixed by design: it merges oncan://ids, which embed the language, so cross-language collision is impossible at the merge layer — do not prefix it.analysis.jsonuntouched.GOALS
TS*twin (plusCanNode).TS_*(TS_HAS_MODULE,TS_DECLARES,TS_HAS_METHOD,TS_HAS_FIELD,TS_HAS_BODY_NODE,TS_RESOLVES_TO,TS_CALLS,TS_CFG_NEXT,TS_CDG,TS_DDG,TS_SUMMARY,TS_PARAM_IN,TS_PARAM_OUT,TS_EXTENDS,TS_IMPLEMENTS).SCHEMA_VERSION→2.0.0; conformance test asserts no undeclared (and no bare) label or rel type is emitted.schema.neo4j.json; release notes flag the breaking rename with the one-line migration (re-analyze; update queries Callable→TSCallable, CALLS→TS_CALLS).CAVEATS AND KNOWN RISKS
Symbol{signature}→CanNode{id}); sequencing inside that branch matters — land the prefix after the CanNode merge-label switch so the conformance test churns once.DEFINITION OF DONE
CanNodecount unchanged from pre-change v2 output.schema_version = "2.0.0"stamped.Absorbs #9 and #10.
Part of #64