The normative coherent noise of 18.7 (ordered gradients, a 255-sample Fisher-Yates permutation, octave normalization, and curl as the explicit perpendicular of the potential's gradient, with published tolerances), the nine distributions with their normative draw-order table, all seventeen behaviors with their field contracts and the accumulating-versus-fresh split, component expansion independent of group nesting depth, particles, emitters, repeaters, trails, and links. Traces 1 through 19 of 18.10 are automated. The renderer core this builds on is corrected here rather than separately, because 4e is what exercises it: the production render path now passes a real compositing surface factory, so a masked group or a non-opaque layer composites instead of throwing and permanently deactivating the visual subsystem; system-level `behaviors` arrays run `validateBehaviors` at import with field context, so the six classes of invalid document that used to fail at activation now fail where an author can see them; velocity-accumulating behaviors integrate on object and repeater hosts; `morph` guards both sides of the z delta rather than poisoning perspective projection with NaN; `face-motion` initializes its follow state lazily and holds the previous rotation at zero velocity; a `ring` with equal start and end angles draws nothing instead of a radial spoke; a resolved non-integer creation count raises ERR_TYPE_MISMATCH at the boundary instead of being rounded; boolean leaves are type-checked; per-type required fields and the static half of the unbounded-emission rule are enforced at import; and a repeater rejects the emitter-only fields 18.5 says it has none of. A duration is now the authored literal or a non-negative finite number already in milliseconds, resolving the one design question the review triage left open. Runtime, validator, and specification agree on it. A guard test asserts that no two bundled modules declare the same top-level identifier: the bundler concatenates into one scope, so a private helper name collision is a SyntaxError in the artifact while every unit test still passes. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01ShxxFqFmCUDQnQvFNm4TKy
1.3 KiB
Slice 4e: procedural execution
Implemented on September 6, 2026, extending the renderer and procedural changes already present in the workspace.
visual-systems.js, visual-distributions.js, visual-behaviors.js, visual-fields.js, visual-noise.js, and visual-motion.js implement components, particles, emitters, repeaters, placement, behavior motion, fields, trails/ribbons, and links. The production application advances them on logical ticks. Render frames do not advance simulation or consume procedural streams.
The nineteen section 18.10 tests in test/phase4-procedural.test.mjs pass. Added execution tests check graphic drift, repeated-object motion, morphing geometry, propagated channels, and rendering across different frame rates. This closes a gap in the original procedural work: behavior arithmetic alone did not prove that its results reached draw geometry. Scoped expressions inside component/repeater inputs and distribution configuration sampling now follow their owning instantiation boundary.
Initial resolved populations cannot exceed their system bounds; emission batches retain the newest capacity-sized population without an unbounded construction loop. Aggregate protection is recorded with 4f.
Run node --test --test-isolation=none test/phase4-*.test.mjs. Display judgment remains separate and unperformed by the agent.