* Introduce the GradientRamp exchange struct as the serialized TaggedValue::Gradient payload
* Unify FillChoice and FillChoiceUI into one enum generic over color format, carrying GradientRamp stops
* Rename the TaggedValue::Gradient variant to GradientRamp to match its payload
* Move the Color variant into the tagged_value macro list since its stored and wire forms match
* Rework Gradient into a newtype of List<Color> with optional position and midpoint attributes
* Fix Vello stopless-gradient fallback coverage, empty legacy gradient tables, the node docs gradient swatch, NaN position elision, and wired setter input overwrites
* Remove the dead InputAccessor traits and the uncallable test helper built on them
* Replace raw node input indices with macro-generated parameter symbols across the editor
* Audit dynamic input index usage, converting to parameter symbols and named input position constants
* Abstract the remaining input index plumbing behind ParameterRef APIs and accessors
* Build SetInputValue messages as struct literals to keep message enums impl-free
* Delete the typed parameter markers in favor of explicit-output test introspection
* Wire the interpolation control path input per chain node type
* Return no input when a parameter symbol is read against the wrong node's parameter view
* Fix parsing regressions, make parsing 2.5x faster than the old pest parser, and clean up the math-parser rewrite
* Fix review findings: whitespace-juxtaposed numbers, mixed real/complex logic, correctly rounded literals, unified NaN truthiness, and gcd/lcm range checks
* Box the `value` field of `NodeGraphMessage::SetInputValue`
* Box the `ExecutionResponse` variant of `NodeGraphUpdate`
* Box the `Layer` variant of `NodeTypeClickTargets`
* Box the `Scope` variant of `ParsedValueSource`
* Route the remaining view queries through the logging query helper
* Name the cache readers by their loading contract and stop cloning the owned nodes per collision check
* Deduplicate the port center, output count, and upstream connector helpers and drop dead accessors
* Collapse the TransientMetadata enum into the Option inside TransientCache
* Extract the shared history snapshot install from undo and redo
* Remove commented-out code and fix stale names and doc comments
* Validate that the pinned node order only references existing nodes
* Abort remove_import before any mutation when the import's wires cannot be resolved
* Purge the deleted nodes' cached wire paths in delete_nodes
* Disconnect a deleted node's inputs by position so hidden inputs cannot mask a later exposed wire
* Gather the delete_nodes layer sweep only when deleting children needs it
* Move drag offsets out of the stack dependents cache into dedicated drag session state
* Replace the move_layer_to_stack selection hijack with a seeded stack dependents load
* Move text measurement into a neutral utility module out of the overlays layer
* Deduplicate the document bounds queries and name the artboard clip input index
* Replace the remove_references_from_network selection hijack with an explicit shift set
* Extract shared import and export wire disconnection used by the expose handlers
* Extract the shared epilogue of the import and export removal operations
* Move the post node lookup into the network interface to fix the layering inversion
* Clear drag offsets when the stack dependents cache unloads so programmatic shifts cannot replay them
* Use the thread-local text context for text measurement instead of a process-global mutex
* Resolve the post node lookup within the network being edited instead of the document root
* Back the outward wires cache with an interior-mutability cell readable through &self
* Convert the remaining network-level caches to interior-mutability TransientCache cells
* Move the owned nodes cache out of persistent layer metadata into a transient cell
* Flatten the transient node type enum into a layer width cell with &self loading
* Back the per-node click targets cache with a TransientCache cell
* Unify the per-input and per-export wire caches into one connector-keyed map
* Flip the click target, position, and stack dependent load chains to &self
* Flip the bounding box, import export position, and port load chains to &self
* Flip the wire geometry and resolved type query families to &self
* Flip the hit testing and frontend click target surface to &self
* Flip the frontend assembly, clipboard copy, and chain validation queries to &self
* Load stack dependents before filtering layer-owned nodes out of a selected-nodes shift
* Unify NodeTemplate into a single flat recursive shape with from_parts/into_parts as the storage split points
* Unify the three sole-dependent traversals onto one is_sole_dependent kernel
* Scan network exports for resource values when collecting used resources
* Introduce a NetworkView cursor with typed errors and convert the primitive queries to it
* Convert the composite name, selection, and eligibility queries onto NetworkView
* Add a network interface invariant validator and characterization tests as a refactor safety net
* Characterize stack, chain, layer move, signature edit, and preview behaviors in tests
* Sweep network interface invariants after every message in editor tests
* Deselect deleted layer children by pruning the expanded deletion set from the selection
* Rebuild the document structure on redo to match undo
* Check for cycles in set_input before applying layout side effects rather than reverting after
* Correct the swapped old/new exposure binding names in set_input
* Reload the document structure when an import or export is appended into the first two slots
* Treat toggling preview on a disconnected export as a preview with nothing to restore
* Replace panics on malformed networks with logged errors in the network interface
* Make is_artboard an identity check independent of scene connectivity
* Stop serializing the selection undo and redo history into saved documents
* Run the set_input cycle check before the node-to-node disconnect so a rejected wire swap leaves the graph unchanged
* Add Vec2 support to the scalar math operator nodes
* Support the scalar-with-Vec2 operand order in the Exponent, Root, Logarithm, Min, Max, and Clamp nodes
* Detect an f32 base of e in the Logarithm node despite inexact widening to f64
* Make wasm wrapper not depend on editor on native
* Introduce pkg-native
* Fix tests
* Fix fmt
* Correct span and make cargo fmt work inside editor_commands block
* Review
* Fix lint
* Rename the node 'Length' -> 'Magnitude'
* Rename the node 'Flatten Path' -> 'Combine Paths'
* Replace the node 'Vec2 Value' with 'Combine Vec2' and add a new 'Vec2 Value' that's actually a vec2
* Update demo artwork