# Port status

Every upstream piece, at the commit in `UPSTREAM.md`. Generated by
`mix run tools/port_status.exs`; notes come from `tools/port_notes.exs`.

191 pieces. green: 191, tolerance: 0, blocked: 0, todo: 0.

- **green**: registered, and frame-for-frame identical to upstream in every
  golden run, text and colours (`test/pieces/<slug>_test.exs`).
- **tolerance**: identical except for the cells allowed in
  `test/fixtures/tolerances.exs` (see `PORTING.md`).
- **blocked**: cannot be matched; not registered; the note says why.
- **todo**: not ported yet.

Frame times are milliseconds on average, played as upstream's
`scripts/check.ts` times them (every `1/fps` seconds for 6 s), on the machine
that generated this file. Upstream's budgets: text pieces 4 ms, scenes 10 ms;
a piece over its budget says so.

| piece | category | status | avg ms | notes |
| --- | --- | --- | --- | --- |
| almalinux | distros | green | 0.09 |  |
| alpine-dawn | scenes | green | 10.35 (budget 10) | a certified fast pow in the halftone dot, redone with :math.pow wherever a decision sits near its threshold; static cells precomputed to their dot |
| alpine-linux | distros | green | 0.12 |  |
| analog-clock | objects | green | 0.02 | reads env.now; notes the wall clock at the first frame rather than at init (the same instant when played at once) |
| aquarium | creatures | green | 0.04 |  |
| arch-linux | distros | green | 0.08 |  |
| aurora | nature | green | 0.20 |  |
| aurora-fjord | scenes | green | 12.61 (budget 10) | a certified fast pow for the dot and the rays; terms with a zero envelope skipped; over the 10 ms budget, under 3x |
| bar-chart | data | green | 0.05 | writes clip at the frame's edge where unusual options would make upstream's lines grow past cols; a dataset with no values draws zeros where upstream throws |
| big-text | type | green | 0.00 |  |
| black-hole | space | green | 0.32 | only the ray-path entries some ray uses are integrated, each once, in upstream's push order |
| bonsai | nature | green | 0.07 | its own hash; a leaf off the grid reads JS's undefined and is skipped |
| boot-log | ui | green | 0.03 |  |
| bouncing-balls | physics | green | 0.26 | balls bounded 1..5 as upstream clamps them; a highlight power below half an ulp of the sum is skipped |
| box-frames | ui | green | 0.00 |  |
| butterfly | creatures | green | 0.62 | shading skipped exactly where only a hit/miss is needed; per-column perspective hoisted |
| c | logos | green | 0.14 |  |
| calendar | ui | green | 0.00 | reads env.now; keeps upstream's play-time offset from the wall clock, re-synced the same way |
| campfire | nature | green | 0.72 | a negative lift to the power 1.4 (NaN upstream) skips the tongue; the flood fill's += 2 marker changes the stored Float32 value, reproduced |
| candle | objects | green | 0.77 | halo neighbours by flat index wrap across rows, as upstream's do; the candlestick is traced once in init |
| candlesticks | data | green | 0.08 | seeds go raw into mulberry32, as upstream's; an open of 0 prints NaN% or Infinity% as upstream does |
| cat | creatures | green | 0.01 |  |
| centos | distros | green | 0.09 |  |
| cherry-blossom | nature | green | 0.06 |  |
| chladni | physics | green | 0.13 | upstream's NaN crossing sentinel is a missing key; grain trips precomputed in init (~0.1 s) |
| clojure | logos | green | 0.16 |  |
| coffee | objects | green | 0.03 | upstream's NaN from a negative base to the power 1.5 just above the surface draws the wisp as '|' or '.', reproduced; the still picture is traced in init (~0.14 s) |
| contour-map | nature | green | 1.14 | the || 1e-9 fallbacks for a zero hypot and gradient are kept |
| cpp | logos | green | 0.13 |  |
| cpu-meters | data | green | 0.05 | restarts from a cached post-warm-up snapshot when t goes back, as upstream rebuilds to the same state |
| csharp | logos | green | 0.13 |  |
| css | logos | green | 0.14 |  |
| cube | shapes | green | 0.16 |  |
| dart | logos | green | 0.13 |  |
| debian | distros | green | 0.06 |  |
| deep-reef | scenes | green | 12.47 (budget 10) | a certified fast pow, with Float32 store checks; writes past the buffer's end dropped as a typed array drops them; over the 10 ms budget, under 3x |
| deepin | distros | green | 0.08 |  |
| desert-night | scenes | green | 8.31 | its own octave-shifted fBm; a certified fast pow; b *= A * B grouped as upstream; ~1.3 s init |
| digital-clock | ui | green | 0.03 | reads env.now; keeps upstream's play-time offset from the wall clock, re-synced the same way |
| dissolve | type | green | 0.08 | the word index wraps with rem where unusual options would make upstream throw |
| dividers | ui | green | 0.00 |  |
| dna-helix | shapes | green | 0.07 |  |
| donut | shapes | green | 1.71 |  |
| doom-fire | effects | green | 1.81 | 200 warm-up steps in init (~0.3 s); noise rows reused across steps, as the spread shifts a row a step |
| double-pendulum | physics | green | 0.05 | restores its post-warm-up state when t goes back, as upstream re-integrates to the same bits |
| earth | space | green | 0.43 |  |
| earthrise | scenes | green | 1.70 | only the box round the Earth and the twinkling stars are redrawn; the colour cache evolves in mono frames too, as upstream's; ~1.3 s init (heightfield) |
| eclipse | space | green | 0.23 | conservative fast paths (squared-distance pre-tests, skipped corona steps that cannot change a cell), checked byte for byte against a build without them |
| elementary-os | distros | green | 0.08 |  |
| elixir | logos | green | 0.09 |  |
| endeavouros | distros | green | 0.12 |  |
| epicycles | generative | green | 0.03 | sqrt of a tiny negative from rounding (upstream's NaN) skips the dot |
| equalizer | data | green | 0.04 | tests (held -= dt) < 0 on the unrounded double, stores the Float32 |
| erlang | logos | green | 0.11 |  |
| falling-sand | physics | green | 0.57 |  |
| fedora | distros | green | 0.11 |  |
| fern | nature | green | 3.36 | 36,000 points a frame: placed with :math approximations, and wherever a point lies within 1e-5 of a cell edge or a cell's character could flip under a rigorous error bound, worked again on the plain path in upstream's order; a property test holds the fast frame to the exact one |
| ferris-wheel | objects | green | 0.08 | slanted rim cells picked in a JS Map's insertion order |
| file-tree | ui | green | 0.00 | lines trimmed with JS whitespace rules (U+0085 and U+FEFF differ from String.trim/1) |
| fireflies | nature | green | 0.20 | count truncated and bounded 0..500; the seed goes to mulberry32 as given |
| fireworks | effects | green | 0.05 |  |
| flag | physics | green | 1.42 | strip crossings worked out once per row level; ~17,000 sin/cos a frame keep it near its budget |
| flow-field | generative | green | 0.33 | ink at or below the visible floor is dropped from the state, exactly |
| form-controls | ui | green | 0.06 | the clear-email event reads upstream's final script time, as its closure does |
| fountain | physics | green | 0.25 | its own three-round hash, in unsigned arithmetic |
| fox | creatures | green | 0.04 |  |
| fractal-tree | nature | green | 0.95 | children start from their parent's Float32-stored tip; the parent's stroke uses the unrounded one |
| galaxy | space | green | 0.34 | closest of the space pieces to its budget: two pow and two cos per lit sample |
| gauge | data | green | 0.03 | upstream's NaN band sentinel is nil |
| gentoo | distros | green | 0.09 |  |
| glider-gun | generative | green | 0.00 |  |
| glitch | type | green | 0.02 |  |
| glxgears | shapes | green | 1.93 | ~67,000 points a frame: face points rotated from precomputed rests; depths quantised with exact tie-breaking by upstream's rule wherever candidates could differ |
| go | logos | green | 0.09 |  |
| gyroscope | shapes | green | 2.02 | the stand's depth buffer computed once; only each cell's final winner is shaded; pow(x, 24) bracketed, exact when the bracket straddles a ramp step |
| harmonograph | physics | green | 0.05 | pen positions kept as a 16-bit binary; ~71,000 pow calls in init |
| haskell | logos | green | 0.14 |  |
| hawa-mahal | objects | green | 0.03 | stateful lamps on a clamped play clock |
| heart | shapes | green | 2.15 | the sign of a - z*cbrt(q) from signs or a cubed comparison with a margin; cbrt only when that is ambiguous |
| heartbeat | data | green | 0.04 |  |
| heatmap | data | green | 0.06 |  |
| hilbert-curve | generative | green | 0.08 |  |
| hourglass | objects | green | 0.17 | the outline marks cells by flat index, wrapping across rows as upstream's does |
| html | logos | green | 0.13 |  |
| icosahedron | shapes | green | 0.06 | per-edge line style kept in state, as upstream's closure keeps it |
| java | logos | green | 0.07 |  |
| javascript | logos | green | 0.16 |  |
| jellyfish | creatures | green | 0.15 | per-frame trail table by lag; edge sums kept in upstream's order |
| julia | logos | green | 0.14 |  |
| julia-set | generative | green | 0.55 |  |
| kali-linux | distros | green | 0.09 |  |
| kite | objects | green | 0.03 |  |
| kotlin | logos | green | 0.15 |  |
| kyoto-dusk | scenes | green | 3.67 | pow(peak, 1.1) tabulated by upstream's 1025-step tone table; a per-cell memo of last frame's steps |
| landscape | nature | green | 0.09 | reads env.now every frame; night and the moon are not reached at the fixtures' instant and were checked against Node |
| langtons-ant | generative | green | 0.07 | the first frame runs 10,350 steps |
| lava-lamp | objects | green | 0.12 |  |
| lighthouse | objects | green | 0.27 | beam terms that would underflow to exactly 0 are skipped |
| lightning | nature | green | 0.21 |  |
| linux-mint | distros | green | 0.10 |  |
| lorenz | physics | green | 0.46 | the depth sum runs in the trail ring's raw index order, as upstream sums it |
| lua | logos | green | 0.12 |  |
| mandelbrot | generative | green | 2.02 | frames deep in the zoom (15-30 s of each 48 s loop) cost 12-18 ms, over budget for that stretch; a zero derivative (upstream's Infinity) draws nothing |
| manjaro | distros | green | 0.11 |  |
| marine-drive | scenes | green | 6.88 | the water's noises from a per-frame lattice; a glint below half an ulp of the water colour is skipped |
| marquee | type | green | 0.03 | JS whitespace rules for trim |
| matrix-rain | effects | green | 0.15 |  |
| maze | generative | green | 0.12 | mazes cached by number; the wall-closing phase is between golden times and was checked against Node |
| misty-forest | scenes | green | 5.13 | d = (dist[k] = x) keeps the unrounded double while later reads get the Float32 |
| mobius-strip | shapes | green | 1.93 | deferred shading on a Float32 depth buffer; upstream's widest-view search runs in init |
| moon-phases | space | green | 0.16 |  |
| morse | type | green | 0.05 |  |
| newtons-cradle | physics | green | 0.11 |  |
| night-coast | scenes | green | 7.57 | the reference scene: time-invariant terms per cell, float-typed hot helpers, a bounded pow in the dot with exact fallback, a per-cell memo across frames, and a per-frame lattice for the sea's noise |
| nixos | distros | green | 0.09 |  |
| not-found | ui | green | 0.03 |  |
| ocaml | logos | green | 0.16 |  |
| ocean-sunset | scenes | green | 12.54 (budget 10) | static cells precomputed to their dot, and terms skipped where they are exactly zero |
| opensuse | distros | green | 0.07 |  |
| owl | creatures | green | 0.03 |  |
| pendulum-wave | physics | green | 0.03 |  |
| perl | logos | green | 0.16 |  |
| php | logos | green | 0.13 |  |
| planet | space | green | 0.25 | upstream's module-level albedo variable is returned alongside the ring opacity instead |
| plasma | generative | green | 0.21 |  |
| plucked-string | physics | green | 0.04 |  |
| pond-ripples | physics | green | 0.04 |  |
| pop-os | distros | green | 0.09 |  |
| progress-bar | ui | green | 0.02 |  |
| python | logos | green | 0.12 |  |
| r | logos | green | 0.16 |  |
| radar | data | green | 0.07 | the corner text is cut at the frame's edge when range or unit overflow it (upstream's line grows) |
| rain | nature | green | 0.06 | its own hash, in unsigned arithmetic |
| reaction-diffusion | generative | green | 9.15 (budget 4) | 50 steps over 2,880 cells a frame; rows as lists with is_float guards so the arithmetic stays unboxed, and an exact fast Float32 rounding (Veltkamp split); over upstream's 4 ms budget, under 3x |
| red-hat | distros | green | 0.10 |  |
| rocket | space | green | 0.17 | puff splats folded per cell in upstream's puff order, with a Float32 store at each add |
| rocky-linux | distros | green | 0.09 |  |
| rotozoomer | effects | green | 0.95 |  |
| ruby | logos | green | 0.16 |  |
| rule-30 | generative | green | 0.00 |  |
| ruled-mountains | nature | green | 0.32 |  |
| rust | logos | green | 0.18 |  |
| saptarishi | space | green | 0.02 |  |
| scala | logos | green | 0.09 |  |
| scramble | type | green | 0.00 |  |
| sea-swell | nature | green | 0.12 |  |
| sierpinski | generative | green | 0.07 |  |
| skeleton | ui | green | 0.02 |  |
| skyline | objects | green | 0.07 | stateful windows on a clamped play clock |
| smoke | physics | green | 0.78 | replays upstream's dt loop exactly, sub-step remainders included; 270 warm-up steps in init |
| snake | creatures | green | 0.27 | a pure function of t; tail slots keep JS Map insertion order |
| snowfall | nature | green | 0.12 | steps in 0.05 s pieces by repeated subtraction from a clamped dt, as upstream; 400 warm-up steps |
| solar-system | space | green | 0.03 | the centre is held as an integer so it can index cells |
| sparkline | data | green | 0.02 | the format option is not supported; digits held to 0..100 (toFixed throws outside); missing keys follow upstream's ?? defaults |
| sparks | effects | green | 0.18 | its own hash in unsigned arithmetic; Float32 heat with a store at every add |
| spider | creatures | green | 0.03 | upstream's 0/0 silk slope at the sprite's top row draws nothing; the port returns early there |
| spinners | ui | green | 0.05 | with names chosen, the frame shrinks to fit them, as upstream (and leaves meta's size) |
| split-flap | type | green | 0.14 | an unparseable time (upstream's NaN) is nil; JS whitespace rules for trim |
| spring | shapes | green | 0.12 |  |
| starfield | space | green | 0.07 |  |
| starlings | creatures | green | 1.31 | flocking: velocities update bird by bird mid-step and neighbours are visited in upstream's linked-list order; the NaN falcon sentinel is nil; 200 warm-up steps in init |
| storm-plains | scenes | green | 5.07 | Float32 floor, jitter and ear stores kept; static cells use a precomputed dot |
| sundial | objects | green | 0.02 | reads env.now; the day of the year counts from local midnight on 1 January; redrawn once a minute, the key ignoring the date as upstream's does |
| sunrise | nature | green | 0.51 |  |
| swift | logos | green | 0.15 |  |
| synthwave | effects | green | 0.06 | every floor row prebuilt in init |
| taj-dawn | scenes | green | 7.34 | pow(peak, 1.1) tabulated over upstream's 1025-step tone table; floors stored as Float32 |
| terminal | ui | green | 0.02 |  |
| tesseract | shapes | green | 0.08 | edge styles kept in state; solid or dotted decided once a frame |
| three-body | space | green | 0.01 | the 7200 leapfrog steps of one lap run once in init, in upstream's order; frames index the lap |
| torus-knot | shapes | green | 1.42 | deferred shading on a Float32 depth buffer; upstream's extent search runs in init |
| train | objects | green | 0.21 | a puff a hair past its life (NaN power upstream) draws nothing |
| tunnel | effects | green | 1.46 | ray directions and start depths precomputed |
| tux | distros | green | 0.08 |  |
| tv-static | effects | green | 0.04 |  |
| twisted-ring | shapes | green | 2.50 | face strips wholly in front or behind are decided at their ends |
| typescript | logos | green | 0.16 |  |
| typewriter | type | green | 0.00 |  |
| ubuntu | distros | green | 0.09 |  |
| uptime-bar | data | green | 0.06 |  |
| varanasi-ghats | scenes | green | 13.82 (budget 10) | lamp light and streaks added into Float32 cells in upstream's order; static cells precomputed to their dot, as ocean-sunset; a negative base to the 1.8 (NaN) that upstream always overwrites is skipped |
| vinyl | objects | green | 0.06 |  |
| void-linux | distros | green | 0.09 |  |
| voronoi | generative | green | 0.95 | upstream's Infinity starting distance is a finite sentinel; coincident seeds (NaN) leave the cell blank |
| wave-interference | physics | green | 0.34 |  |
| wave-text | type | green | 0.00 | Number(x) || fallback reproduced: 0 takes the default |
| whale | creatures | green | 0.05 | its own hash, in unsigned 32-bit arithmetic |
| wind | nature | green | 0.99 | noise corners hashed once a frame into a table |
| windmill | objects | green | 0.63 |  |
| zig | logos | green | 0.13 |  |
| zorin-os | distros | green | 0.10 |  |
