Node order, edge order and display names do not enter the canonical candidate bytes.
6 node permutations x 6 edge orders -> one IDIdentity before interpretation
Names and input order are accidental. Direction, declared roles and structural attributes are not. Canonicalization turns that policy into a deterministic content identity.
ID(G) = ID(P(G))
Interactive invariant check
IDs shown here are frozen outputs of the repository kernel and independently replayed by tests.
Supplied representation
Kernel result
Identity stableBaseline
Current
The undirected triangle skeleton stays fixed even when direction or edge role changes candidate identity.
Identity policy
Node order, edge order and display names do not enter the canonical candidate bytes.
6 node permutations x 6 edge orders -> one IDReversing one arrow changes the directed isomorphism class from feed-forward loop to cycle.
0f578d7e... -> 913c5005...Roles are declared semantics. Changing one role produces a new candidate even on the same skeleton.
0f578d7e... -> 2a7015ba...Why this matters
If the same structure acquired a new identity whenever a caller reordered JSON, censuses, cohorts, rankings and later-depth closure would depend on serialization accidents. Canonical identity removes that degree of freedom before scientific interpretation begins.
Frozen permutation audit
36 / 36representations reproduce one candidate ID