main
1
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
1bc49018f4 |
docs(visual): apply the sections 17-19 review triage in full at revision 0.8
Format Specification revision 0.8 closes the thirty repair packages (V1-V30) and three additional defects (A1-A3) of reviews/01-triage.md before slice 4d writes any renderer code. Every Tier-1/2/3 design decision adopts the triage's own recommended fix; reviews/05-visual-fix-log.md records each choice, its reason, and the sections it touched. Contradictory surfaces first. `visuals.automation` is added to the 17.3 allowed-field table that previously rejected it. Trace 17.16.14 is rewritten around the four target families that now exist rather than asserting a table that changed. `fill` and `stroke` accept ValueSpec<color>, which is what makes 18.1's own component example legal, with three limits stated so a ValueSpec can never return a paint object. The repeater automation registry loses its nonexistent `step` block. An infinite loop is legal in every scope, bounded by whatever owns the track. Spawned-instance lifecycle moves into a `spawn` container. A top-level `lifetime` is now unambiguously per item and `spawn.lifetime` per instance, so a spawned emitter expresses both and a spawned repeater takes an instance lifetime without contradicting 18.5. Component inputs get one canonical location, the `component` object's own `inputs`, and the system-level `inputs` on emitters and repeaters is removed. The composition chain is written out in named spaces. The fit matrix carries the contain and cover centering offsets it was missing, the camera center is mapped into CSS coordinates before the translation is formed, and the chain B x P x V x F x M applies the device-pixel multiplier exactly once. Local extents and anchors are fixed for all fourteen primitives, arc sweep is directed with its bound checked before normalization, catmull-rom is a uniform cardinal spline with its equation given, and a closed bezier spline closes with a line. Compositing gets a normative eight-stage order. Layer opacity applies once, at the layer, not a second time per object, and a separate release factor initialized to 1 means release never rewrites an authored opacity. The sixteen offscreen buffers are one pool shared by layers and objects, with allocation order, reuse, and farthest-first shedding stated, and buffer refusal named as a diagnosed exception to 17.1. Sorting units are defined for emitters and repeaters, not only particles: a procedural system is atomic, with a representative depth and internal ordinal ordering. Depth fog fixes its blend space and fogs gradient stops before the paint is built. Coherent noise becomes an algorithm - ordered gradients, a 255-sample Fisher-Yates shuffle, the full lattice hash, octave normalization, and curl as the explicit perpendicular of the potential's gradient - with published tolerances. Distributions get their equations and an explicit per-distribution draw list, replacing "field order". All seventeen behaviors get complete field contracts, waveform equations, an accumulating-versus-fresh rule, and channel write sets. Live automation totals separate from authoring bounds: a spawn that would cross the live budget is refused atomically, consuming no ordinal, rather than being admitted with tracks dropped. One diagnostic cadence covers every ceiling and every shed. The centralized table gains the ceilings it was missing and two new authoring bounds - 64 declared systems and 16384 expanded static objects - that close the unbounded static draw load. `focalLength` gains a real lower bound of 1 so the clamp has a value to clamp to. The backing store cap wins over the multiplier floor on displays wider than 4096. Parallax 0 is pinned against camera translation, not exempt from zoom and rotation. tools/verify-spec-contract.py commits the contract harness that was previously run ad hoc. Its post-edit run reports 46 diagnostic codes declared, 107 distinct cross-references all resolving, zero unresolved references, 170 balanced fence markers, and 112 well-formed tables. Documentation only: no runtime, schema, fixture, or test file was touched, and npm test still passes 102 tests with zero failures. Every 19.5 value, including the two new static bounds, remains provisional pending the slice 4h GC6 measurement. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_0162Jb1J36judZNT8fHabGVt |