[screen] round 4 notes
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6404c44fcc
commit
180747ce28
@ -302,3 +302,89 @@ piles** are the obvious next spatial artifacts (both are regional in the codex),
|
||||
biomes in §1 would suggest a mask per era. Also, now that strain reads the snapshot, THE SCREEN
|
||||
could react to `jammed` entities (a stalled factory *should* look bored — the feed drifting back
|
||||
toward clean is a nice punishment), but that's a design call, not a lane call.
|
||||
|
||||
### Round 4 — 2026-07-17 — Opus 4.8
|
||||
|
||||
SHIPPED: all 4 orders. Thanks for granting capacity unasked.
|
||||
- `boredom.ts` + `boredom.test.ts` (new) — pure freshness curve, 7 tests.
|
||||
- `strain.ts` — second dread axis; `strain.test.ts` now 20 tests. Screen suite 57 green.
|
||||
- `overlays.ts` — ratification card painter + era→standard table.
|
||||
- `glitchStack.ts` — pallor pass (desaturate + vignette), card composite.
|
||||
- `index.ts` — boredom wiring, card lifecycle, `researched` handling, pallor easing.
|
||||
|
||||
DESIGN INTENT, one line each (as ordered):
|
||||
- **tremor = "how many seconds until dark?"** ACUTE. The cliff edge. Only exists while something
|
||||
is actually draining, and it spikes as the runway runs out. Expressed as motion: judder.
|
||||
- **pallor = "how much cushion do I have at all?"** CHRONIC. Sits there in surplus. Expressed as
|
||||
colour: the saturation drains out and the corners close in.
|
||||
A full tank draining fast is a jolt; a near-empty tank coasting is a way of life. Different
|
||||
questions, different senses, so they never mush into one dial.
|
||||
|
||||
DECISIONS:
|
||||
- **Pallor drains saturation on purpose.** Codex §8: "ALL saturation belongs to media/artifacts.
|
||||
Color = value = literally the resource." A factory with no reserve should therefore literally
|
||||
have less colour. The vignette does the rest. It fits the existing strain/fever/seizure
|
||||
hierarchy as the quiet one: chronic, slow tau (2.0s), never louder than the corruption.
|
||||
- **The capacity trap**: `1 - stored/capacity` with no tanks built reads as "totally empty" and
|
||||
would have painted the boot state grey — blowing up round 3's sterile guarantee on day one.
|
||||
No tanks = no cushion to miss = no pallor. That's not a special case, it's the honest reading:
|
||||
you cannot be low on a reserve you never built. Two tests pin it (capacity 0 AND undefined).
|
||||
- **Boredom decays the DISPLAY, never the ledger.** `fresh` scales the targets; the tally
|
||||
underneath is untouched. Verified explicitly: after 4 idle minutes the sky is clean but
|
||||
`units: 72, tally: {melt: 60}, total: 0.893` are all exactly as earned.
|
||||
- **Boredom horizon: 60s grace, then 180s decay (4 minutes to clean).** You asked for minutes,
|
||||
not seconds. A full minute of silence changes literally nothing, so a jam you notice, diagnose
|
||||
and fix is free. Recovery rides the normal 1.2s shipment ease — against a 4-minute decay that
|
||||
reads as a snap, and it reuses the wave feel rather than inventing a second motion.
|
||||
- **The card is timed in SECONDS, not frames** — it's a broadcast interruption and must be one
|
||||
second at any refresh rate. Verified 30 frames @30fps AND 60 frames @60fps. (Deliberate
|
||||
contrast with the scram wipe, which stays frame-counted: that one is a tape artifact, and tape
|
||||
artifacts are quantized to frames. Two different clocks for two different fictions.)
|
||||
- Card composites dead last in screen space, so not one pixel of it is corrupted — that IS the
|
||||
joke. Hard cut on exit, no fade: the corruption crashes back rather than seeping, because a
|
||||
dissolve would make The Correction look negotiable.
|
||||
- Card says the STANDARD, not the tech id (codex §1 names: OPTICAL FILM, NTSC / PAL ANALOG,
|
||||
MPEG-2 / DVD, H.264 / HEVC / AV1, DCP) with the green tick from §8's Correction uniform. The
|
||||
tech id is in the small print where a compliance notice would put it.
|
||||
|
||||
VERIFIED (fixture snapshots, pixel reads, contact sheet):
|
||||
- **Sterile guarantee survives the new axis**: boot AND a tankless factory in surplus both render
|
||||
byte-for-byte identical to no-snapshot, pallor 0.
|
||||
- **Two dreads are separable at the pixel level**: full-tank-draining-fast → tremor 0.50, pallor
|
||||
0, saturation 0.621 and corners 96 both *unchanged from healthy*. Empty-tank-coasting → tremor
|
||||
0, pallor 0.972, saturation 0.500, corners 26.6. MAD between the two: **43.7**. They do not
|
||||
look like the same emergency.
|
||||
- **Boredom**: untouched at 60s → fresh 0.834 at 90s → 0.5 at 150s → 0 at 240s → stays 0. Ledger
|
||||
intact throughout. Resume: freshness 1 instantly, picture home in ~1.5s.
|
||||
- **Card**: 30 frames @30fps, 60 @60fps = 1.00s both. Mean luminance 83 → 235 → 83.
|
||||
- **Budget: 0.078 ms/frame** with GPU sync, 2000 entities, every artifact + both dreads + fever +
|
||||
brownout + card compositing. ~26× under.
|
||||
- Note for the record: **tremor is invisible in a still** — it's motion, so the contact-sheet tile
|
||||
looks like HEALTHY. I pinned it numerically instead (0.50, MAD 6.8 vs sterile). A still frame is
|
||||
the wrong instrument for a judder and I didn't want that filed as "verified by screenshot".
|
||||
|
||||
BLOCKED/BROKEN: nothing in my lane. **One thing the fleet needs to know:**
|
||||
- `npm test` currently shows 6 red in `src/ui/live.test.ts` ("reference factory should contain a
|
||||
software decoder", commission/entity-count assertions). **Not mine, and not LANE-UI's fault
|
||||
either**: LANE-DATA has uncommitted edits to all five `data/*.json` in the shared tree, and
|
||||
UI's live tests build a reference factory out of that data. I confirmed by stashing *only*
|
||||
`src/screen/` — the same 6 still fail with my lane entirely absent.
|
||||
- **Warning about the shared working tree**: my first instinct was `git stash`, which stashed
|
||||
every lane's uncommitted work, not just mine — and made the UI tests "pass", which nearly had me
|
||||
believing I'd broken them. `git stash push -- src/screen/` is the only safe form here. Any lane
|
||||
bisecting a red test in this tree can be badly misled by a bare stash. Worth a line in
|
||||
MASTERPLAN if you agree.
|
||||
|
||||
CONTRACT REQUEST: none. v4 gave me everything; fixtures now carry `commissionQueue` and
|
||||
`research` ahead of the v5 hardening (order 4 done).
|
||||
|
||||
PROPOSAL: boredom currently only listens for `shipped`. A factory that is *jammed solid* and one
|
||||
that is *idle because the player is redesigning it* decay identically. You approved the stalled-
|
||||
factory idea as design — if you want the distinction, `jammed` entities in the snapshot could make
|
||||
the sky decay noticeably faster (the work is rotting, not resting) while a clean idle stays
|
||||
gentle. That's a one-line read of data I already have. Say the word and it's a small round-5 item.
|
||||
|
||||
NEXT (not self-assigning): the era→standard table means THE SCREEN now knows about eras — the §1
|
||||
strata skins (sepia Reel, phosphor Broadcast, rainbow-on-black Disc) could drive the *base feed's*
|
||||
palette per the player's current era, so the clean programming itself ages as they tech up. That
|
||||
plus the mask template would give era-flavoured biomes on the sky.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user