* Simplify and linearize StructuredInputGraph state management
Fix shallow copy bugs in AlloyInstance mutation functions that caused
data corruption through shared references, and replace the event-driven
rerender system with a direct linear flow (mutate → rerender → dispatch).
Key changes:
- Fix all 4 AlloyInstance mutation functions to create new inner objects
instead of mutating originals through shallow-copied references
- Remove _suppressDataChangeRerender flag and event-driven rerender
- Every mutation follows: mutate() → enforceConstraintsAndRegenerate()
- Fix deleteRelation bug: was passing relation ID where global tuple
index was expected, causing UI deletions to silently fail
- Remove ~9 no-op methods and ~30 verbose console.log statements
- Update tests to match new linear flow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix CI test failures: preserve empty relations on atom removal, update tests
- removeInstanceAtom now keeps relations with 0 tuples (only
removeInstanceRelationTuple deletes empty relations) — matches
existing test expectations and JSONDataInstance behavior
- Update deletion-constraint-validation tests to use graph methods
(deleteAtom, deleteRelationTuple) instead of direct data instance
mutations, matching the new linear flow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Another beta
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>