Detect reachable route conflicts in an assembled tool set and report each one.
This is the wiring findConflicts spent its first life without: the kit
could detect the one class of genuine routing ambiguity it has and never
looked. Call it once wherever a tool set is assembled (useTools does),
behind a process.env.NODE_ENV !== 'production' guard.
Warn, never throw. A conflict between a consumer's tool and a kit tool
is a design question — sometimes deliberate, since the loser can still take
the gesture by declining through enabled() — and exploding in a running
app is the wrong way to raise it. A conflict between two kit tools is
always a bug, but the place to fail on that is the kit's own test suite
(canvas/SceneCanvas.routeConflicts.test.tsx), not a consumer's console.
Detect reachable route conflicts in an assembled tool set and report each one.
This is the wiring
findConflictsspent its first life without: the kit could detect the one class of genuine routing ambiguity it has and never looked. Call it once wherever a tool set is assembled (useToolsdoes), behind aprocess.env.NODE_ENV !== 'production'guard.Warn, never throw. A conflict between a consumer's tool and a kit tool is a design question — sometimes deliberate, since the loser can still take the gesture by declining through
enabled()— and exploding in a running app is the wrong way to raise it. A conflict between two kit tools is always a bug, but the place to fail on that is the kit's own test suite (canvas/SceneCanvas.routeConflicts.test.tsx), not a consumer's console.