Problem
Two extensions can both declare the same node prefix (e.g., both declare task:) with no warning or error. This creates silent ambiguity — the second registration's view definitions silently win.
Work
In registerExtension() in src/extension.js:
- Build an index of which extension owns which prefix
- On registration, check the incoming extension's
domain.prefixes against already-registered prefixes
- If collision: throw (strict mode) or warn (lenient mode) with message identifying which extension already owns the prefix
Also: edge type collisions.
Ref: #252