Round 7 phase 1. The Correction grows an HR department. - COMPLIANCE QUOTAS: four `compliance:true` standing orders spread across the reward curve (indices 5/9/13/20) so the debt valve is never more than eight faxes away. Tier-0/1 only, enforced against SIM's DEBT_TIER_MIN rather than a hand-typed 2. Measured on the real sim: one quota vents -0.2004, i.e. exactly one band. - FORGED HASH: 1 STCO MAP + 50 HF DUST -> 1 FORGED HASH on the existing hex-splicer, gated behind a new fortress node. Two inputs, so it cannot travel SIM's empty-inputs catcher path; a test fails by name if it ever does. §6 names the forged article outright and the splicer has charted the genuine map since round 3 - the machine, the material and the crime were already in the data. - Eight STANDARD chyron lines, one per mechanic the player is about to meet, all <=96 chars. The width cap now has a test in this lane instead of SCREEN's. - CANON-DELTA: the rungs-2-4 reading of §5, the no-grudge ruling, the deviation-targeting ruling (tier is now read by three mechanics), and the forged hash's argument against the container-pack reading. Validator 74 -> 86; all 11 new checks fault-injected and restored.
833 lines
50 KiB
Markdown
833 lines
50 KiB
Markdown
# CANON-DELTA — everything in `data/` that isn't in the codex yet
|
||
|
||
LANE-DATA owns this file. `../../docs/FKTRY_LORE.md` is canon; this is the ledger of
|
||
where the data has run ahead of it. The orchestrator absorbs these into the lore doc in
|
||
one pass later. Until then, **this is the single place canon-drift is allowed to live**.
|
||
|
||
Rule for adding an entry: the codex was silent, I invented in its voice, and I wrote
|
||
down *why it is consistent with the codex* — not just what I did. If a future lore pass
|
||
disagrees, the codex wins and the data changes.
|
||
|
||
---
|
||
|
||
## Canonized in round 1 (orchestrator: "CANONIZED", round 2 review)
|
||
|
||
| Thing | Kind | Why it fits |
|
||
|---|---|---|
|
||
| `press-anchor-slab` | recipe (dct-press) | The press run backwards is an IDCT, and an IDCT *is* a complete picture. §4 already runs the field loom and the telecine puller in reverse, so reversibility is established machine behaviour. This is where I-frames come from. |
|
||
| `color-plate` | item | §4 demosaicer literally outputs "a smooth colour sheet"; it needed an id. |
|
||
| `v-hold-roll` | item | §1 Broadcast Shelf has "v-hold faults that make whole regions periodically roll upward". Bottling one gives the ANALOG PACK's "combing + v-hold roll + static" triptych three real ingredients. |
|
||
| `artifact-bottler` | machine | §2 calls the science packs "a bottled artifact triptych" but names no bottling plant. Something has to hold the bottle. |
|
||
| `lane-splitter` | machine | The contract has `kind: 'splitter'` and belts need routing, but §4 only ever calls the DEMUXER "the first splitter" — which is a refinery, not a junction. |
|
||
|
||
## Added in round 2
|
||
|
||
### The container line (unblocks `stream-hex-splicing`)
|
||
|
||
§2 names the CONTAINER PACK's contents ("moov shard + offset ribbon + sync key") and §7
|
||
names the moov brain's parts, but nothing said where they come from. The chain now
|
||
mirrors what the parts actually *are* in a real container:
|
||
|
||
| Thing | Kind | Why it fits |
|
||
|---|---|---|
|
||
| `moov-shard` | item | The index, not the payload. |
|
||
| `offset-ribbon` | item | The stco map — a ribbon of byte offsets. |
|
||
| `sync-key` | item | The stss table lists which frames are keyframes, i.e. I-frames. |
|
||
| `demux-container` | recipe (demuxer) | The demuxer is the machine that separates index from payload. 8 ore → 2 shards: the index is a rounding error next to the mdat, which is the joke and also the truth. |
|
||
| `spool-offset-ribbon` | recipe (gop-assembler) | The assembler is the only machine that knows where each frame starts, because it put them there. |
|
||
| `cut-sync-key` | recipe (artifact-bottler) | Cut from an anchor slab, because stss is a list of anchors. |
|
||
| `bottle-container-pack` | recipe | Assembles the §2 triptych. |
|
||
|
||
Chicken-and-egg check: §4 says the hex splicer "Requires CONTAINER PACK research", so the
|
||
container line deliberately does **not** route through the splicer. It is demuxer →
|
||
assembler → bottler, all machines you already own.
|
||
|
||
### The bloom line
|
||
|
||
§3 sells bloom "by intensity grade; grade-5 bloom visibly tries to escape its canister in
|
||
one direction" — five grades, one item each, `bloom-grade-1..5`.
|
||
|
||
- `bloom-concentrate` is **kept** and redefined as the raw, ungraded draw-off from a loop
|
||
(`tap-bloom`). It was not deleted because LANE-SCREEN hardcodes it in
|
||
`src/screen/corruptionMap.ts:54` and its test — deleting it would have broken another
|
||
lane's suite mid-round. Grading now consumes it.
|
||
- The recipe id `bloom-grade-3` survives from round 1 but now produces the *item*
|
||
`bloom-grade-3`, so the id finally means what it says. `tap-bloom` is the renamed
|
||
round-1 `bloom-grade-3` recipe. **Deprecation notice:** no recipe id was retired, but
|
||
`bloom-grade-3` changed its inputs/outputs entirely. Nothing outside `data/` referenced
|
||
it (checked: only my own `tech.json`).
|
||
- Escalation is in delta wafers, not exotic inputs — a grade-5 canister is 2 raw bloom +
|
||
18 wafers of compounding, which is §4's "contents compound each lap" priced honestly.
|
||
|
||
## Added in round 3
|
||
|
||
### THE MUXER and the moov brain (§7, data-first — mechanics are M4's)
|
||
|
||
§7 names the parts and says each is "its own late-game production line", but never said
|
||
what makes them. Each part is now made by the machine that already owns that knowledge,
|
||
which is the whole joke: the container is assembled by the factory that made the mess.
|
||
|
||
| Thing | Made by | Why that machine |
|
||
|---|---|---|
|
||
| `stsz-ledger` | gop-assembler | The sample-size table. The assembler packed the crates, so it knows how big each one was. |
|
||
| `stco-map` | hex-splicer | The chunk-offset map — byte offsets are the splicer's entire domain. It nudges them for a living; here it writes them down honestly, under protest. |
|
||
| `stts-metronome` | telecine-puller | Time-to-sample is a cadence, and the puller is the cadence machine. Built from judder cams, so the metronome ticks 3:2. |
|
||
| `stss-keyring` | artifact-bottler | The sync-sample table is a list of I-frames, so it is literally forged from anchor slabs. |
|
||
| `ftyp-seal` | artifact-bottler | §7 names the ftyp seal as part of the container; it needed a source. |
|
||
| `moov-brain` | muxer | The four converge. 300 ticks. |
|
||
| `megaglitch` | muxer | `mux-container`: brain + seal + 500 mdat ore + 100 melt, 900 ticks. §7's "colossal composited corruption" priced like one. |
|
||
|
||
`muxer` is `kind: 'crafter'`, not `'shipper'` — it *builds* the megaglitch, and you still
|
||
have to ship the thing. 5×5, the biggest footprint in the game, per "hero structure".
|
||
|
||
### ASIC COOLER (spec'd, deliberately not yet mechanical)
|
||
|
||
§2 HEAT says heat is "Vented by ASIC coolers" — a machine the codex names and never
|
||
specifies. Authored now so the data is ready; **the mechanic is deferred to M4**, when
|
||
SIM builds auras. Gated behind `broadcast-asic-cooling` so it can't appear early.
|
||
|
||
- **Intended mechanic (SIM, when auras exist):** an adjacency aura — every machine whose
|
||
footprint touches the cooler's 2×2 gets the cooler's `coolPerTick` (0.02) instead of
|
||
its own. That turns the software decoder from a 30%-duty throb into something you can
|
||
*engineer around*: ring your decoders with coolers and pay for it in floor space and
|
||
build cost. This needs a contract change (`coolRadius?`, or a `kind: 'cooler'`) —
|
||
**not requesting it until SIM is ready to build it**, since a contract field nobody
|
||
reads is the same decorative trap heat just fell into.
|
||
- **Authored as `kind: 'power'` with `powerGen: 5`** because there is no cooler kind and
|
||
a lie is worse than a stretch: it is an ASIC, ASICs decode, decoding makes bandwidth.
|
||
It vents far more than it earns. If `kind: 'cooler'` ever lands, this moves.
|
||
- Its own `coolPerTick: 0.02` is inert today (nothing heats it) and is there to state the
|
||
intended aura strength in data rather than in prose.
|
||
|
||
## Added in round 4
|
||
|
||
### §10 THE COMPOSITE SEAM — transcribed
|
||
|
||
The codex grew §10, so most of this round is transcription rather than invention. Every
|
||
item and machine in §10 is now data. Deviations and judgement calls only:
|
||
|
||
| Call | Why |
|
||
|---|---|
|
||
| "Footage" = `anchor-slab` | §10's keyers key *footage*, but the codex never says what footage *is* as an item. The anchor slab is already "a complete, self-sufficient picture" (§2) — the only thing in the game you could point a keyer at. Every keyer takes slabs. |
|
||
| MATTE BATH's chemical = `static-canister` | §3 already says static canisters are "brine for preserving other artifacts". The bath needed a developer; the brine was sitting right there. |
|
||
| `ghost-feather` is made **only** by the neural keyer | §10: "every era below the neural keyer ruins it, so demand never dies." So the earlier machines *consume* it and ruin it — `bathe-feather` (feather → hard matte, "the machine does not apologize") and `key-hair` (feather → roto chatter). Both are jokes with a real cost, and both are the codex verbatim. |
|
||
| NEURAL KEYER `powerDraw: 240` | §10 says "24 VRAM — a bandwidth appetite that dwarfs everything else in the game", and "you don't unlock the neural keyer; you unlock the power plant it demands". 240/s is 12 decode ASICs, or ~9 software decoders after duty cycling. The whole M1 reference chain draws 96. It dwarfs the game, as ordered. |
|
||
| `sodium-light` has no recipe | §10: The Correction hoards the prisms. Forward canon; on the FORWARD_CANON allowlist. `sodium-requisition` commissions it anyway, with 30 BLUE HOLES accepted "if you lose your nerve". |
|
||
| ROTO BENCH is gated (disc), not free | §10 calls it "the economic floor under every keyer... the bench never does [fail]". Tempting to leave ungated, but ALPHA is "the rarest resource in the game" and an ungated bench hands it to you at tick 0. Gated cheaply (10 spatial) so the floor arrives early but the Composite Seam stays a mid-game fault. |
|
||
|
||
Optical printer ratios hurt, as ordered: 4 anchor slabs + 2 colour plates → **1** alpha and
|
||
4 fringe lace, over 240 ticks. It is the worst alpha-per-slab in the game and it fringes
|
||
every single run, which is exactly what the iron lung is for.
|
||
|
||
### THE ARCHAEOLOGY LAB (`kind: 'lab'`) — canonized
|
||
|
||
The codex has no lab: §6 only says "TECH TREE = MEDIA ARCHAEOLOGY. You research *downward*
|
||
(excavating older strata for analog secrets) and *upward* (deriving newer codecs)." So the
|
||
lab is the dig site — named for the verb the codex already uses, not a generic "research
|
||
station". Ungated starting equipment, because a lab behind research is a lab you can never
|
||
build (there is now a test named exactly that).
|
||
|
||
## Added in round 5
|
||
|
||
### THE COMMISSION LADDER — the fax is the tutorial
|
||
|
||
There is no tutorial in FKTRY and there should never be one. The fax machine is already
|
||
the game's voice, already tells you what to build, and is already sacred (§6: "do not ask
|
||
why it works"). So the first four commissions teach one mechanic each and the player never
|
||
knows they were taught.
|
||
|
||
| Rung | Wants | Teaches | Machine types needed |
|
||
|---|---|---|---|
|
||
| 1 `raw-payload` | 20 MDAT-ORE, raw | extractor → belt → uplink. The whole verb set. | 2 crafting (+belt, +uplink) |
|
||
| 2 `first-refinement` | 15 LUMA BARS | the demuxer — **and byproducts**: the slurry has to go somewhere and the fax does not care | 3 |
|
||
| 3 `dust-quota` | 18 HF DUST | the quantizer, and that **waste is inventory** | 4 |
|
||
| 4 `first-taste` | 1 MELT | graduation: the whole M1 chain, ore to reactor | 8 |
|
||
|
||
Rung 1's flavour is the instruction manual: *"A belt, a drill, an uplink to THE SCREEN —
|
||
that is the whole job."* Rung 2 hands you a byproduct and refuses to help. Rung 3 reframes
|
||
the garbage as product, which is the game's actual thesis. Rung 4 is the old opening
|
||
commission, reward bumped 50 → 80, now earned rather than assumed.
|
||
|
||
**Measured, not estimated** (throwaway probe against LANE-SIM's real sim, then deleted):
|
||
|
||
```
|
||
rung 1, built exactly as the fax describes — drill, 2 belts, uplink, one ASIC:
|
||
4 machine types. Cleared at tick 650 = 21.7 seconds.
|
||
```
|
||
|
||
The order was "completable inside 3 minutes with 4 machine types". It is completable in
|
||
**22 seconds**, which matters more than the budget suggests: the first fax must clear
|
||
before a new player decides nothing is happening.
|
||
|
||
Why this was needed at all: the queue used to open on `first-taste` — one MELT — which
|
||
requires ore → demuxer → quantizer → subsampler → p-caster → DCT press → GOP assembler →
|
||
mosh reactor. The game's first instruction was "build eight machines correctly, in order,
|
||
with no feedback until the last one works." That is the onboarding cliff.
|
||
|
||
### THE OPTICAL FOSSIL — why the world is silent until you dig
|
||
|
||
§1 buries the hook in one clause: the Reel Beds hold *"optical soundtrack fossils — wavy
|
||
photographic strips that **sing** when excavated."* Optical sound is a picture of a
|
||
waveform printed on film — the one place in this world where image and audio are the same
|
||
substance. So:
|
||
|
||
**The Bitstream has no audio because the audio track was severed from the container long
|
||
ago, and one length of it is still in the ground.** Everything before the fossil is found
|
||
is a video file with no sound: UI clicks and nothing else. Excavating it splices the audio
|
||
bus back into the file, and the whole band comes alive at once — the tuner, the stations,
|
||
the factory's own hum. The player doesn't unlock a feature; they repair the file.
|
||
|
||
This is why THE STANDARD's script includes *"Do not excavate. There is nothing in the
|
||
strata but strata"* and *"Anything that sings when you dig it up was never meant to be
|
||
heard."* The Correction runs a propaganda station warning you off the one artifact that
|
||
would let you hear the propaganda station for what it is. It is also why DEAD AIR's ghost
|
||
line is the only direct acknowledgement in the game that you found it.
|
||
|
||
The hint is one fax margin, mid-ladder, on `haunted-doorway` — *"[someone has drawn a sine
|
||
wave in the corner of this fax. it is not our department.]"* It points at nothing. A sine
|
||
wave is a sound and a drawing at the same time, which is exactly what the fossil is.
|
||
|
||
### THE MOSQUITO TRAP — the last forward-canon commission comes off the blocklist
|
||
|
||
§5 gives the trap in one line: *"Catchable in edge-baited traps"*, the asset note calling it
|
||
*"a bug-zapper shaped like a high-contrast edge target"*. Mosquitoes are quantization noise
|
||
made alive: they hatch from HF DUST and cluster on sharp edges. So the recipe is exactly
|
||
that sentence — **8 HF DUST + 1 LUMA BAR → 1 MOSQUITO SWARM (canned)**. The dust is where
|
||
they come from, the fresh luma bar is the sharp edge that baits them, and the whole thing
|
||
gives HF dust a third sink.
|
||
|
||
This unblocks `vaporwave-sunset`, which has wanted "3 MOSQUITO SWARMS (live)" since round 1
|
||
and been unfillable the entire time. `mosquito-swarm` leaves FORWARD_CANON; only
|
||
`gibbs-wraith`, `cinema-pack` and `sodium-light` remain, and all three are deliberate
|
||
(a wraith must come willingly, cinema needs the Fortress, and The Correction hoards the
|
||
prisms).
|
||
|
||
### `data/seams.json` — the ground
|
||
|
||
Schema is `{ relicReserve, seams: [...] }`; each seam is `{ id, era, resource, rect{x,y,w,h},
|
||
richness, hidden? }` on the -32..31 grid. Five ordinary seams, one per stratum, placed so
|
||
each era's codex-correct payload has a home: stream crust → mdat ore, disc mantle → bayer
|
||
grit (§2: "from the deepest camera-original seams"), broadcast shelf → field splinters,
|
||
reel beds → silver frames.
|
||
|
||
Two constraints drove the layout, both now tests:
|
||
- **The reference factory must stand on ore.** SIM's three 2×2 extractors sit at (-30,0),
|
||
(-30,-3) and (-30,3); `stream-crust-west` spans x[-31,-28] y[-5,6] and covers all three
|
||
with a tile to spare. Off-seam they'd idle with `'no seam'` and the demo would produce
|
||
nothing at all.
|
||
- **`relicReserve` is a seam-free corner** — x[12,31] y[12,31]. SIM plants the optical
|
||
fossil from the seed, 18–28 tiles out, *never on a seam*. If seams creep across the whole
|
||
ring there may be nowhere legal left to put it, so the SE quadrant is kept deliberately
|
||
empty. A test fails the moment a seam intrudes.
|
||
|
||
`richness` is authored but currently unread — SIM's rule is boolean overlap this round. It
|
||
is there for when extraction rate goes data-driven, and it is what the numbers station
|
||
broadcasts as the last digit.
|
||
|
||
### `data/stations.json` — the broadcast schedule
|
||
|
||
Four stations, matching SCREEN's spec: **88.1 FKTRY FM** (generative, seeded, era-flavoured),
|
||
**AM 640 THE STANDARD** (30 chyron lines), **SW 6955 [UNLISTED]** (numbers), **108.0 DEAD AIR**.
|
||
|
||
THE STANDARD is The Correction with a transmitter, and the voice rule is that it never
|
||
threatens — it reassures, in a way that gets worse the longer you think about it. *"Your
|
||
file is being read by someone who loves it very much."* *"Loss is not loss. Loss is
|
||
compression that has finished negotiating."* *"Good morning. It is always going to be
|
||
morning."* 30 unique lines at the ~20s a chyron needs to be readable = 10 minutes before
|
||
a repeat, which is the DoD.
|
||
|
||
**The numbers station is a real treasure map.** Each 5-figure group encodes one coordinate:
|
||
|
||
```
|
||
[x + 32 as 2 digits][y + 32 as 2 digits][richness × 9 as 1 digit]
|
||
|
||
53079 -> x = 53-32 = 21, y = 07-32 = -25, richness 9/9 hidden-nitrate-vein
|
||
07579 -> x = 07-32 = -25, y = 57-32 = 25, richness 9/9 hidden-rainbow-pit
|
||
59399 -> x = 59-32 = 27, y = 39-32 = 7, richness 9/9 hidden-payload-lode
|
||
```
|
||
|
||
Three of the groups on air are the three `hidden: true` seams; the rest are decoys that
|
||
decode to empty ground. A player with a pencil gets three maximum-richness seams nobody
|
||
told them about. **The validator recomputes the planted groups from `seams.json`**, so if a
|
||
hidden seam ever moves and the broadcast doesn't, the test fails — the map cannot go stale.
|
||
It also checks no decoy accidentally decodes onto a real seam, because a decoy that points
|
||
at treasure isn't a decoy, it's a leak.
|
||
|
||
Filler is procedural (SCREEN's seeded RNG) rather than a fixed list, so the station never
|
||
loops — a hand-written pool of 24 would cycle in about two minutes and the genre's whole
|
||
menace is that it goes on forever.
|
||
|
||
## Added in round 6
|
||
|
||
### THE CORRECTION walks — the parity-mite reading of §5
|
||
|
||
§5 gives the enemy in one clause: parity mites are *"beetle-drones that patrol belts and
|
||
quietly fix artifacts back into clean product (your melt becomes... footage of a lake)."*
|
||
The reading the data commits to, and why it is the codex's:
|
||
|
||
- **The mite does not destroy — it repairs, which is worse.** The Correction "cannot
|
||
perceive you, only deviation, which it repairs." So a mite eats a tier-2 glitch product
|
||
and hands back nothing you can sell: the work is *corrected*, not stolen. SIM emits a new
|
||
`repaired` event rather than a `removed` one, and the fiction is that losing melt to a
|
||
mite is losing it to a *fix*. THE STANDARD's new lines say this in the enemy's own voice
|
||
("A mite does not remove your work. It completes it. Your MELT was always going to be a
|
||
lake." — the codex line, spoken as reassurance).
|
||
- **Mites only touch corruption.** SIM's mechanic ignores tier-0/1 cargo entirely: the
|
||
immune system has nothing to correct in raw ore. That is the balance (raw material is
|
||
safe; only product is at risk) and the fiction (deviation is the only thing it can see).
|
||
|
||
### THE FIREWALL — the counter, on SIM's catcher shape
|
||
|
||
| Thing | Kind | Why it fits |
|
||
|---|---|---|
|
||
| `parity-mite` | item (tier 2) | The canned live mite. Hospital-white shell, green checkmark eye (§5, §8) → chip colour `#dff5e6`. Tier 2 like the other farmed hazards (`mosquito-swarm`, `gibbs-wraith`). |
|
||
| `firewall` | machine (crafter) | §5 names the mites but no counter. A *firewall* is the in-genre name for the thing that stops an intrusion, and the joke writes itself: it wears a compliance seal the Bitstream never issued, and a mite "cannot leave a deviation uncorrected" — a forged checkmark IS a deviation, so it climbs in to fix the seal and the drawer closes. Accent `#3fff7f` is that forged checkmark; chassis `#31383f` is your grime, not The Correction's white. |
|
||
| `catch-mite` | recipe (firewall) | **Input-free, output `parity-mite: 1`** — the exact shape SIM detects a catcher by (empty inputs, cans the creature), lifted from the mosquito trap. The "input" is a live mite in the world, which is wildlife in the snapshot, never cargo on a belt. Ingredients would silently demote it to an ordinary crafter that mints The Correction from nothing — pinned by a test that cites SIM's comment. |
|
||
| `broadcast-parity-firewall` | tech | Gated like the mosquito trap (`broadcast-mosquito-farming`): `{spatial-pack: 15, analog-pack: 10}`, unlocks `[firewall, catch-mite]`. You research the counter to the enemy. Early/cheap because the mite is §5's *"early nuisance"* — the counter should arrive about when the mites do. |
|
||
|
||
**Coordination with SIM (parallel this round):** SIM detects catchers by recipe shape and
|
||
by the constant `MITE_ITEM`. The item id is **`parity-mite`** and the recipe shape is
|
||
**`{ inputs: {}, outputs: { 'parity-mite': N } }`** — identical to the trap, one item id
|
||
over. `catch-mite` bandwidth 4 / 120 ticks (a harder catch than a mosquito's 90). The
|
||
radius is SIM's constant (`FIREWALL_RADIUS`), not a machine field.
|
||
|
||
### Two commissions that want The Correction alive
|
||
|
||
- `correction-specimen` (reward 1000): the flagship — *"ONE (1) UNIT OF THE CORRECTION,
|
||
ALIVE. INVOICE ATTACHED. DO NOT READ THE INVOICE."* The fax's first canned mite, in
|
||
voice. Slots between `gibbs-wraith-willingly` (900) and `feather-proof` (1100).
|
||
- `annual-correction-cull` (reward 2100, **standing**): 5 live mites + 20 melt per
|
||
collection, forever — you turn the immune system into a cash crop, and The Correction
|
||
files each absent technician as a rounding error and sends five more. Slots between
|
||
`sodium-requisition` (1800) and `sky-blue-mislabeled` (2400). Re-fillable forever
|
||
because both wants are producible (the catcher + the melt chain).
|
||
|
||
`parity-mite` is **producible** the moment the firewall exists (an input-free recipe reads
|
||
as always-runnable to the reachability closure, exactly as `mosquito-swarm` does), so it is
|
||
NOT forward canon and never joins the allowlist.
|
||
|
||
### The numbers station stops drifting
|
||
|
||
SCREEN's round-5 finding was real: the validator recomputed the three *planted* groups from
|
||
`seams.json` but never checked the *decoys*, and two of them had drifted onto visible seams:
|
||
|
||
```
|
||
08127 -> (-24,-20) sat inside reel-beds-deep (x[-30..-21] y[-24..-19])
|
||
27503 -> ( -5, 18) sat inside broadcast-shelf-south (x[-14..-3] y[16..21])
|
||
```
|
||
|
||
A decoy that decodes onto a real seam isn't a decoy, it's a leak — it hands the player a
|
||
genuine dig site the station was never meant to reveal. Both re-cut to land just *off* the
|
||
seam they were touching (still tantalisingly adjacent, which is the genre's whole cruelty):
|
||
|
||
```
|
||
08127 -> 08143 -> (-24,-18) one tile south of reel-beds-deep, on empty ground
|
||
27503 -> 27475 -> ( -5, 15) one tile north of broadcast-shelf-south, on empty ground
|
||
```
|
||
|
||
And the validator now decodes **every** decoy to a tile and fails, by name, if it lands
|
||
inside **any** seam rect — hidden or visible — not just the three hidden tiles. The map
|
||
recomputes its plants from the seams and now proves its decoys lead nowhere; it cannot go
|
||
stale in either direction. (All 22 remaining decoys were re-checked against all 8 seams —
|
||
these two were the only leaks.)
|
||
|
||
### Accents chosen against the real GLB textures
|
||
|
||
Round 4 filled accents by derivation; MODELBEAST has since delivered real models, so this
|
||
round the accents are picked by **looking at the actual albedo textures** in
|
||
`public/assets/models/` (extracted and inspected). The order named "the ten GLB'd machines";
|
||
by the time I looked, nineteen had models (RENDER hot-swapping mid-round), so every machine
|
||
with a real model now carries a texture-matched accent:
|
||
|
||
| Machine | Accent | Read from the texture |
|
||
|---|---|---|
|
||
| seam-extractor | `#48d6ff` | the cyan CRT readout on the amber drill body (§4 "CRT-certified") |
|
||
| quantizer | `#ff3b57` | CRIME-red dial indicator against the pale lilac/dust body |
|
||
| mosh-reactor | `#ff7a3f` | the molten-orange gauge; matches its MELT output |
|
||
| artifact-bottler | `#7fe0d8` | the iridescent glass-aqua of the bottled contents |
|
||
| chroma-keyer | `#4fff30` | the chroma-key green it literally weeps (green-spill) |
|
||
| muxer | `#ff3fd0` | launch-warning magenta on cold steel; matches the megaglitch |
|
||
| demuxer | `#ff3fd4` | the magenta channel-split streak (its chroma output) |
|
||
| demosaicer | `#4fffc4` | the spectral cyan-green band of the rainbow weave |
|
||
| dct-press | `#3fffe0` | the coefficient-cyan indicator specks on cold steel |
|
||
| field-loom | `#6ef58a` | the phosphor-green glowing tube |
|
||
| gop-assembler | `#5fb0ff` | the blue cadence-readout screens |
|
||
| mv-extractor | `#3fd8ff` | the motion-vector cyan fluid |
|
||
| p-caster | `#6fa8ff` | the blue projector beam |
|
||
| subsampler | `#e04fc8` | the iridescent chroma-pink it grades down |
|
||
| bloom-duplicator | `#ff9440` | the warm bloom-orange furnace glow |
|
||
| decode-asic | `#8fe8ff` | **refined** from `#6fe8c0`: the LEDs are ice-blue, not mint |
|
||
| mosquito-trap | `#a64fff` | **corrected** from `#d0ff60`: the model's zapper target glows UV-violet, not lime |
|
||
| software-decoder | `#ff4a2a` | kept — the texture's red internals confirm it |
|
||
| archaeology-lab | `#ffc24a` | kept — the warm dig-lamp amber confirms it |
|
||
|
||
The `firewall` (no model yet) gets its forged-checkmark `#3fff7f` art-directed, not derived.
|
||
|
||
---
|
||
|
||
## Added in round 7
|
||
|
||
### THE CORRECTION's rungs 2-4 — what §5 asks of the data
|
||
|
||
§5's ladder is four rungs; round 6 built rung 1 (parity mites) and its counter. Rungs 2-4
|
||
are mechanics, and almost all of them are SIM's — the useful thing to record is how little
|
||
new *content* the enemy needs, and the one place it needs a lot.
|
||
|
||
| Rung | §5 | What data owes it |
|
||
|---|---|---|
|
||
| 2 CHECKSUM WARDEN | audits a machine, rolls back its last N outputs, stamps a compliance seal | **Nothing new.** The seal is `EntityState.sealed`, the counter is the FIREWALL authored in round 6, and the expensive counter is the `pry` command. |
|
||
| 3 REDUNDANCY GUNSHIP | mirrors a sector and out-ships you with a sanitised copy | **Nothing new** — but see the deviation ruling below, which quietly makes `ItemDef.tier` load-bearing for it. |
|
||
| 4 HASH AUDITOR | refuses a region into 0:00 stasis until you break the lock | **FORGED HASH** — the whole material counter, and the only new item this round. |
|
||
|
||
**The pry exchange rate is worth writing down.** `DEBT_PER_PRY` is 0.05 and
|
||
`DEBT_VENT_COMPLIANCE` is 0.2, so **four pried seals cost exactly one QUOTA 7-C to
|
||
undo**. The firewall is free and the crowbar is billed — which is the correct shape:
|
||
the counter you researched is cheap, and defacing a notice with your hands is not.
|
||
|
||
### The no-grudge ruling — the enemy has no feelings, only a ledger
|
||
|
||
RULING (SIM's, recorded here as canon): **canning a Correction unit adds no debt.** §5 is
|
||
explicit — it "does not hate you; it *cannot perceive* you — only deviation, which it
|
||
repairs." A grudge requires a perceiver. So the firewall is free, the mite in the jar is
|
||
free, and round 6's `correction-specimen` (1000) and `annual-correction-cull` (2100,
|
||
standing) stay pure profit with no hidden tax on farming the immune system.
|
||
|
||
The consequence is the interesting half: **the only two things that raise the figure are
|
||
shipping corruption and prying seals** — and both of those are things you did to the *file*,
|
||
not things you did to *them*. You cannot anger The Correction. You can only be, statistically,
|
||
a region of the file that does not match.
|
||
|
||
### The deviation-targeting ruling — `tier` is not flavour any more
|
||
|
||
RULING (SIM's): a gunship tethers to the 8×8 sector with the most **tier≥2 output**, not the
|
||
most throughput. It corrects corruption, not productivity — an honest, busy, boring sector is
|
||
invisible to it, which is the same joke the mites tell one rung down.
|
||
|
||
Recording it because of what it does to this lane: `ItemDef.tier` is now read by **three**
|
||
separate mechanics — `MITE_TIER_MIN` (what a mite will repair), `DEBT_TIER_MIN` (what counts
|
||
as deviation when shipped), and now the gunship's sector scoring. **A tier number is no longer
|
||
decoration.** Mis-tiering an item now mis-aims an airborne enemy and mis-prices the debt
|
||
economy at the same time. Standing rule for future rounds: tier is a mechanic; argue it.
|
||
|
||
### COMPLIANCE QUOTAS — The Correction's register
|
||
|
||
Four `compliance: true` standing orders, spread across the reward curve so the valve is
|
||
never far from the tray (indices 5, 9, 13, 20 of 25):
|
||
|
||
| Quota | Wants | Reward | The horror |
|
||
|---|---|---|---|
|
||
| `quota-7c` | 40 LUMA BARS | 150 | The order's own exemplar. "THE FILE THANKS YOU FOR YOUR COOPERATION. THE FILE DOES NOT KNOW YOUR NAME." |
|
||
| `quota-12a` | 80 MDAT ORE + 30 HF DUST | 340 | *"We are not purchasing these. We are removing them from the possibility of becoming something."* |
|
||
| `quota-30r` | 100 bbl CHROMA SLURRY | 620 | The callback. `first-refinement` taught you the demuxer's slurry is *your problem now*; The Correction has been waiting four commissions to solve it for you, forever, and not ask what you were going to do with it. |
|
||
| `quota-99z` | 40 GOP CRATES + 25 ANCHOR SLABS | 1600 | Sealed and unmoshed. You run the entire M1 chain and then hand over the crate *instead of* making melt with it. The endgame quota asks you to build the factory and decline to be it. |
|
||
|
||
**Why tier-0/1 is the whole rule.** Debt rises on tier≥`DEBT_TIER_MIN` shipments, so a quota
|
||
that wanted a tier-2 product would charge the player debt for venting debt. The validator
|
||
fails such a quota by name and by tier. It is also the fiction, exactly: the register cannot
|
||
ask for corruption, because from inside the file corruption is not a thing you *have*, it is
|
||
a thing that is *wrong with you*.
|
||
|
||
**Why they are standing orders.** A valve you can open once is not a valve. All four repeat,
|
||
and all four are fillable at tick 0 with zero research — pinned by a test, because debt starts
|
||
climbing the moment the first melt ships and the tech tree opens much later than that. A quota
|
||
gated behind research would be a fire escape welded shut.
|
||
|
||
**Why the pay is good.** In voice: `correction-buyback` has said since round 2 that "we pay
|
||
well, we pay immediately, and we pay every time." The quota is *supposed* to be tempting —
|
||
shipping boring content on purpose only becomes a real strategy if it is a real temptation.
|
||
The counterweight is not the rate, it is the ceiling: the register can never ask for anything
|
||
above tier 1, so it cannot scale with you, while the collectors' ladder climbs to 3200. Late
|
||
game, QUOTA 99-Z's 1600 is half of `quarterly-sins`. You outgrow compliance; that is the arc.
|
||
|
||
### FORGED HASH — the moov heist, industrialised
|
||
|
||
`forge-hash` on the existing HEX SPLICER: **1 STCO MAP + 50 HF DUST → 1 FORGED HASH**
|
||
(tier 3), 240 ticks, bandwidth 40, heat 0.4. Gated by a new fortress node
|
||
`fortress-moov-heists` (35 container + 25 temporal packs).
|
||
|
||
The order suggested `container-pack + hf-dust`; here is the argument for the other reading,
|
||
as asked.
|
||
|
||
1. **No recipe in this game consumes a science pack.** Packs are research currency, spent at
|
||
the lab and nowhere else — that is one of the few genuinely clean lines in the economy.
|
||
The endgame counter should not be the single exception that blurs it.
|
||
2. **§6 names the material outright.** MOOV HEISTS: *"scan scrolling hex for real frame
|
||
signatures ... and rebuild/forge the stco/stsz index to your advantage."* The forged
|
||
article **is** the stco index. And the machine was already standing there: §4's hex
|
||
splicer is *"a robotic hex-editor"* over *"a scrolling hexadecimal ticker-tape"*, and it
|
||
has charted the genuine `stco-map` since round 3. The machine, the material and the crime
|
||
were all already in the data. The recipe only admits it.
|
||
3. **You cannot forge a document you have never seen a real copy of.** Consuming a genuine
|
||
STCO MAP is the forger's first rule, and it is why the input is the expensive one.
|
||
4. **HF DUST is the forger's second rule, and this is the part I like.** A hash is a digest:
|
||
to make one land where you want it, you append bytes that change nothing anyone can see.
|
||
HF DUST is *literally* the high-frequency detail the quantizer threw away — invisible
|
||
bytes, in barrels. Packing the discarded difference back in until the numbers agree is how
|
||
a real collision is actually built. It also hands the game's most over-produced byproduct a
|
||
genuine endgame sink: 50 per forgery, against `pan-speckle`'s 40.
|
||
5. **It costs the victory chain.** `assemble-moov-brain` wants an STCO MAP too, so every
|
||
forgery is one MEGAGLITCH deferred. You spend the endgame to survive the endgame — the
|
||
correct price for voiding an inquisition.
|
||
|
||
**Shape note for SIM, as ordered:** `forge-hash` has **two inputs**, so it cannot and must not
|
||
travel the empty-inputs catcher path that spots traps and firewalls. A test now fails by name
|
||
if *any* input-free recipe ever produces `forged-hash`, so the second detection you budgeted
|
||
can rely on the shape staying an ordinary craft. The item id is exactly your
|
||
`FORGED_HASH_ITEM`, imported rather than retyped.
|
||
|
||
### Eight more STANDARD lines — the audit pool
|
||
|
||
Chyron 38 → 46 lines (~15 minutes before a repeat). One line per mechanic the player is about
|
||
to meet, all ≤96 chars, all in the reassuring-menace register:
|
||
|
||
```
|
||
Units conducting review are not present. What is not present cannot be obstructed. <- you cannot fight them
|
||
The sector was always white. You are remembering a draft. <- stasis
|
||
A seal is not a punishment. A seal is a machine being permitted to rest. <- the warden's seal
|
||
If your work appears beside itself, the copy is the one doing it correctly. <- the gunship mirror
|
||
An audit finds nothing where there is nothing. Be nothing for five seconds. <- ABSTENTION, taught
|
||
Your ledger is not a debt. It is a description, and descriptions are revised down… <- the quota valve
|
||
We do not lock a sector. We decline to unlock it. These are different services. <- the auditor
|
||
A hash you wrote yourself is still a hash. We will read it. We will believe it. <- the forged hash
|
||
```
|
||
|
||
Round 6's lesson is now enforced in this lane rather than discovered in SCREEN's: the 96-char
|
||
cap has its own test here, deliberately a conservative local copy of theirs.
|
||
|
||
---
|
||
|
||
## The numbers, and the arithmetic behind them
|
||
|
||
### The reference M1 chain (measured, not guessed)
|
||
|
||
Computed from `data/*.json` against the machine list in SIM's `meltChain()`
|
||
(`src/sim/sim.test.ts`), with the two recipes that test hand-dials applied:
|
||
|
||
```
|
||
idle draw (every machine's powerDraw) 57 /s
|
||
+ active recipe draw at full tilt 39 /s
|
||
= peak draw 96 /s
|
||
- compression paid back (quantize -6, 4:2:2 -4, 4:2:0 -8) 18 /s
|
||
= net peak demand 78 /s
|
||
```
|
||
|
||
**Units (RULED round 3):** `gen`/`draw` are bandwidth per **second**; `stored` and
|
||
`bufferCap` are bandwidth-**seconds**. My round-2 assumption held.
|
||
|
||
### Round 4: the tech tree was a total bootstrap deadlock
|
||
|
||
The v4 gating rule — *any id in a `TechDef.unlocks` is locked until that tech completes* —
|
||
turned three rounds of tech authoring from decoration into a lock on the entire game. I
|
||
had written every node assuming gating didn't exist. Measured against the rule:
|
||
|
||
```
|
||
TICK 0, nothing researched:
|
||
melt producible? false <- first-taste, the opening commission, impossible
|
||
analog-pack producible? false
|
||
spatial-pack producible? false
|
||
temporal-pack producible? false
|
||
container-pack producible? false
|
||
RESEARCH CLOSURE: 0 of 24 techs reachable — every node stranded behind its own output
|
||
```
|
||
|
||
Every pack chain was gated behind packs you could not make. `disc-artifact-bottling` cost
|
||
10 analog packs and unlocked the only machine that can bottle an analog pack. The M1 melt
|
||
chain itself (mosh reactor, subsampler, `press-anchor-slab`) was gated, so the game opened
|
||
on an unbuildable factory and an unfillable commission, with no way to research out of it.
|
||
|
||
**The fix is a shape, not a patch.** Two rules now hold, and both are tests:
|
||
|
||
1. **The M1 melt chain is starting equipment** — ungated, so first-taste is possible at
|
||
tick 0. Ungating it also fixes RENDER for free: they derive a machine's era from the
|
||
tech that unlocks it and treat unmapped machines as starting equipment, which is exactly
|
||
what the M1 chain now is.
|
||
2. **One pack must be craftable at tick 0**, or research can never begin. That pack is the
|
||
**SPATIAL PACK** — macroblock bricks + ringing halos + slurry, all of which fall out of
|
||
the quantizer the player already owns. Your first research is a study of your own
|
||
damage, which is the most in-voice thing in the tree. Everything else chains off it:
|
||
spatial → analog → temporal → container → fortress.
|
||
|
||
Result: **23 / 23 nodes reachable**, unlock order tells a story (phosphor seams → field
|
||
loom → analog packs → telecine → temporal → container → fortress), and the only items
|
||
unreachable with the whole tree bought are the four declared forward-canon.
|
||
|
||
Six disc nodes were **deleted**, not repurposed, because their whole content became
|
||
starting equipment: `disc-artifact-bottling`, `disc-chroma-subsampling`,
|
||
`disc-macroblock-quarrying`, `disc-ringing-skim`, `disc-subsampling-420`,
|
||
`disc-mosh-reactor`. Grepped first — no lane references tech ids (RENDER reads
|
||
`unlocks` generically, never a specific node). Recorded here per the deprecation rule.
|
||
|
||
### Round 2's heat was decorative — what went wrong
|
||
|
||
Worth writing down, because it's a trap anyone can fall into. I sized round 2's
|
||
`heatPerTick: 0.0025` against *no* cooling. SIM then implemented heat with cooling shed
|
||
**every tick, active or not** (`HEAT_DISSIPATION = 0.004`). So the decoder shed 0.004 and
|
||
banked 0.0025: net **−0.0015/tick**. It could never warm up. The number looked like a
|
||
mechanic and was a comment.
|
||
|
||
The lesson is now a test (`every heat source out-heats its own cooling`), and it caught a
|
||
second instance immediately: `chart-stco-map` banked 0.06 heat over 90 ticks while the
|
||
splicer shed 0.09 — I'd authored a fresh decorative number in this very round.
|
||
|
||
**Anything with a heat number must beat its own machine's cooling, or it isn't a
|
||
mechanic.** The validator now refuses both forms (per-tick machine heat, per-craft recipe
|
||
heat).
|
||
|
||
### The software decoder: `powerGen` 55 → 100, `heatPerTick` 0.0033, `coolPerTick` 0.001
|
||
|
||
Net while running = 0.0033 − 0.001 = **0.0023/tick**. Against SIM's curve (throttle 0.7,
|
||
scram 1.0, restart 0.5):
|
||
|
||
```
|
||
throttle, from cold 0.7 / 0.0023 / 30 = 10.1 s (target ~10 s)
|
||
scram, from cold 1.0 / 0.0023 / 30 = 14.5 s (target 13-15 s)
|
||
steady cycle, up 0.5 / 0.0023 / 30 = 7.25 s (heat 0.5 -> 1.0)
|
||
steady cycle, down 0.5 / 0.001 / 30 = 16.67 s (cools 1.0 -> restart 0.5)
|
||
period 23.9 s (target ~25 s)
|
||
duty 30.3 %
|
||
```
|
||
|
||
**Why the decoder cools slowly (0.001, vs the sim's 0.004 default):** it is an overclocked
|
||
tower PC held together with zip ties and prayer (§4). It is the worst-cooled object in the
|
||
factory. The ASIC has "a huge heatsink afro" and no heat source at all.
|
||
|
||
**Why powerGen had to nearly double.** SIM's hysteresis (scram at 1.0, restart at 0.5)
|
||
means any machine that throttles at ~10 s spends ~70% of its life cooling. At round 2's
|
||
55 gen that's an average of ~14/s — strictly worse than the ASIC's steady 20, so nobody
|
||
would ever build one and "burst gen" would be a lie. Averaged properly (generation is
|
||
throttled linearly 1.0 → 0.5 across the throttle window, and zero while scrammed):
|
||
|
||
```
|
||
un-throttled 0.2 / 0.0023 = 87.0 ticks at 100/s
|
||
throttled 0.3 / 0.0023 = 130.4 ticks at avg 75/s
|
||
energy per cycle = 100 x (87.0 + 130.4 x 0.75) = 18480 bandwidth-ticks
|
||
average = 18480 / 717 ticks = 25.8 /s
|
||
```
|
||
|
||
| | peak | duty | average | failure mode |
|
||
|---|---|---|---|---|
|
||
| DECODE ASIC | 20 /s | 100% | **20 /s** | none, forever |
|
||
| SOFTWARE DECODER | 100 /s | 30% | **25.8 /s** | total blackout, 16.7 s at a time |
|
||
|
||
Five ASICs at full song, one third of the time, in one 2×2 footprint. 29% more average
|
||
power for a supply that vanishes on a schedule you don't control — a real choice, and the
|
||
answer to "does anyone dare run two side by side" is still *no, not naked*: identical
|
||
decoders heat in lockstep and therefore black out in lockstep.
|
||
|
||
### `bufferCap: 240 → 300`
|
||
|
||
Re-derived against the retuned cycle, since the order was "one tank should cover one
|
||
decoder scram" and the scram window changed:
|
||
|
||
```
|
||
reference chain: peak draw 96 /s, compression pays back 18 /s -> net demand 78 /s
|
||
balanced plant: 3 ASIC (60/s steady) + 1 software decoder (25.8/s avg) = 85.8 /s ✓
|
||
decoder scrams: supply = 60 + 18 = 78 /s vs draw 96 /s -> deficit 18 /s
|
||
18 /s x 16.67 s = 300 bandwidth-seconds
|
||
bufferCap = 300 -> one tank rides out exactly one scram.
|
||
```
|
||
|
||
And it refills in time to do it again: while the decoder is up the plant makes 67/s more
|
||
than it spends, recharging 300 in **4.5 s** of the 7.25 s up-phase. That is the M2
|
||
sentence — **a buffer tank is what makes software decoders survivable** — and it now
|
||
closes.
|
||
|
||
### The ASIC cooler goes live: `coolPerTick 0.02 → 0.0018`, `coolRadius: 2`
|
||
|
||
Round 3 spec'd the aura at 0.02 while it was inert. **The moment it became mechanical that
|
||
number was catastrophic:** the decoder banks 0.0033/tick, so a 0.02 aura means net
|
||
−0.0167 — it never heats at all, and a 2×2 cooler turns a 2×2 decoder into a permanent
|
||
free 100/s. A spec'd number and a live number are different objects; this is the second
|
||
time this round that a number only became wrong once something read it.
|
||
|
||
**Round 5, FINAL under the additive ruling.** Contracts v5 settled it: auras are additive,
|
||
capped at `HEAT_COOL_MAX`. That killed 0.0018 — additive, two coolers reach 0.0046 against
|
||
the decoder's 0.0033 gross, so a casual pair made it immortal. Final value **0.001**:
|
||
|
||
```
|
||
coolers cooling throttle at duty avg gen note
|
||
0 0.0010 10.1 s 30 % 25.8 /s bare decoder, as the codex demands
|
||
1 0.0020 17.9 s 61 % 51.5 /s the pairing — output doubles
|
||
2 0.0030 77.8 s 91 % 77.3 /s heavy investment, nearly continuous
|
||
3 0.0040 never 100 % 100.0 /s immortal: an absurd shrine to one PC
|
||
```
|
||
|
||
The shape is deliberate. One cooler is the worked example and it **doubles** the decoder's
|
||
average output — a real reward for engineering around heat. Two is a serious commitment
|
||
that nearly eliminates downtime. Three tips into immortality, which costs 12 tiles of
|
||
cooler wrapped around 4 tiles of decoder — visibly ridiculous, and in-voice: the codex's
|
||
software decoder is a tower PC "held together with zip ties and prayer", so a shrine of
|
||
coolers keeping one alive is the correct picture. Immortality is reachable, never casual.
|
||
|
||
Linear stacking means *some* number always cancels the heat; my job was choosing which
|
||
number, and making sure it isn't 2. Per tile, when both machines are 2×2:
|
||
|
||
```
|
||
2 decode ASICs 40.0 /s over 8 tiles = 5.00 /s per tile
|
||
1 software decoder, bare 25.8 /s over 4 tiles = 6.44 /s per tile
|
||
decoder + 1 cooler 56.5 /s over 8 tiles = 7.06 /s per tile (incl. the cooler's own 5)
|
||
```
|
||
|
||
So the pairing is the best power in the game per tile (1.4× ASICs) — and it costs two
|
||
techs, two machines, and the floor space to keep them adjacent. That is the reward for
|
||
engineering around heat instead of suffering it, which is what the cooler is *for*. The
|
||
bare decoder still beats a pair of ASICs per tile, but it does so in violent 30%-duty
|
||
bursts that a buffer tank has to absorb; the ASIC's 5.00 never wavers. Three ways to buy
|
||
power, three different failure modes.
|
||
|
||
### Research: is the first node affordable off a first-taste-era factory?
|
||
|
||
Worked path for the bootstrap pack, one bottler, one quantizer:
|
||
|
||
```
|
||
bottle-spatial-pack = 2 macroblock-bricks + 1 ringing-halo + 2 chroma-slurry, 60 ticks
|
||
2 bricks <- quantize-crime x1 (1 coefficient pack, 20 ticks)
|
||
1 halo <- skim-ringing x1 (3 coefficient packs, 40 ticks)
|
||
4 coefficient packs <- quantize x4 (4 luma, 120 ticks) <- 6 mdat ore
|
||
THE QUANTIZER IS THE BOTTLENECK: 20 + 40 + 120 = 180 ticks per spatial pack
|
||
= 10.0 packs / minute on one quantizer
|
||
```
|
||
|
||
Against the early nodes:
|
||
|
||
```
|
||
broadcast-phosphor-seams 5 spatial = 0.5 min
|
||
reel-silver-seams 8 spatial = 0.8 min
|
||
disc-roto-bench 10 spatial = 1.0 min
|
||
broadcast-field-loom 15 spatial = 1.5 min <- opens the ANALOG PACK
|
||
```
|
||
|
||
A player who has shipped their first melt already owns a quantizer and can afford the first
|
||
four nodes inside two minutes of production. That's the intent: **the opening research is
|
||
paid for with the quantizer's own sins** — you study your own damage. Later nodes scale to
|
||
tens of minutes and demand the analog/temporal/container chains, which is where the floor
|
||
space goes.
|
||
|
||
### Round 7: how fast a melt line walks the ladder, and what a quota buys back
|
||
|
||
All against LANE-SIM's constants as landed (`DEBT_PER_CORRUPT_SHIP 0.0025`,
|
||
`DEBT_DECAY_PER_TICK 0.00002`, bands `[0.2, 0.4, 0.6, 0.8]`).
|
||
|
||
One mosh reactor is 3 MELT per 90 ticks — the M1 chain's whole point. That is
|
||
`3 × 0.0025 = 0.0075` of debt per 90 ticks, less 90 ticks of decay:
|
||
|
||
```
|
||
net climb = 0.0075/90 − 0.00002 = 0.0000633 / tick
|
||
band 1 OBSERVED (0.2) = 3,160 ticks = 1m 45s of shipping melt
|
||
band 2 AUDITED (0.4) = 6,320 ticks = 3m 31s <- wardens
|
||
band 3 SEALED (0.6) = 9,480 ticks = 5m 16s <- gunships
|
||
band 4 REFUSED (0.8) = 12,640 ticks = 7m 01s <- auditors
|
||
```
|
||
|
||
**A single-reactor factory that never ships anything boring meets all four rungs inside
|
||
seven minutes.** That is the pressure the valve exists to answer.
|
||
|
||
Measured, not modelled — LANE-SIM's real reference factory on my real JSON (throwaway
|
||
probe, then deleted; sim behaviour is their lane to test):
|
||
|
||
```
|
||
band 1 OBSERVED t = 5,874 (3m 16s)
|
||
band 2 AUDITED t = 9,281 (5m 09s) <- wardens
|
||
band 3 SEALED t = 12,740 (7m 04s) <- gunships
|
||
band 4 REFUSED t = 16,152 (8m 58s) <- auditors
|
||
```
|
||
|
||
Slower than the clean model because the reference plant spends its early minutes building
|
||
up rather than shipping, and because 1,013 of its 3,300-odd corrupt shipments are
|
||
macroblock bricks that arrive in a late burst. Same shape, ~1.3× the clock: **the whole
|
||
enemy ladder unspools inside the first nine minutes of a working factory.**
|
||
|
||
Against it, QUOTA 7-C: 40 LUMA BARS is 20 `demux-ore` crafts (45 ticks each) = **900 ticks,
|
||
30 seconds** on one demuxer fed by two extractors. Completing it vents 0.2 outright —
|
||
bands are 0.2 wide, so **one quota = exactly one band** — plus 0.024 of loose clean credit
|
||
from the material itself.
|
||
|
||
```
|
||
30 seconds of a two-machine side line buys back 1m 45s of melt-shipping debt
|
||
```
|
||
|
||
~3.5× leverage in time, deliberately. The strategy has to be *tempting* or nobody chooses
|
||
to be boring. What it actually costs is floor and ore: the quota line is a second copy of
|
||
the rung-1 starter factory that will never make a single unit of product.
|
||
|
||
**The vent must beat the material, and now that is a test.** SIM's comment says the vent is
|
||
"deliberately worth more than the material: the paperwork is the point, not the luma." Every
|
||
quota is measured against it — loose clean credit (`items × DEBT_CLEAN_CREDIT_PER_ITEM`) must
|
||
stay under `DEBT_VENT_COMPLIANCE`, or the fax would be a worse version of just belting the
|
||
same crates at the sky:
|
||
|
||
```
|
||
quota-7c 40 items -> 0.024 credit 12% of the 0.2 vent
|
||
quota-12a 110 items -> 0.066 33%
|
||
quota-30r 100 items -> 0.060 30%
|
||
quota-99z 65 items -> 0.039 20%
|
||
```
|
||
|
||
All well under the 0.25 `DEBT_CLEAN_CREDIT_MAX` ceiling too, so no quota asks for material
|
||
the economy will discard on arrival. The paperwork is worth 3-8× the luma. As intended.
|
||
|
||
**And the valve was measured, end to end, in the real sim.** QUOTA 30-R wants 100 bbl
|
||
CHROMA SLURRY and the reference factory ships 230 of it, so hoisting that quota to the head
|
||
of the queue (in memory; the JSON on disk untouched) exercises the whole path:
|
||
|
||
```
|
||
t=10,932 DONE quota-30r debt 0.3112 -> 0.1108 (delta -0.2004)
|
||
band 1 -> band 0, and the standing order re-queued to the back
|
||
```
|
||
|
||
−0.2004 is `DEBT_VENT_COMPLIANCE` exactly, plus that tick's own decay. **One quota, one
|
||
band, measured.** The claim in the table above is not arithmetic; it is a reading.
|
||
|
||
### Round 7: the forged hash's fever, and why one fits inside the fax
|
||
|
||
`forge-hash` banks 0.4 per craft; the splicer sheds `240 × 0.001 = 0.24` over the same 240
|
||
ticks. Net **0.16 per craft → 6.25 crafts → 1,500 ticks = 50s** of continuous forging before
|
||
it scrams. Identical to `chart-stco-map`'s 50s and still a lesser fever than the decoder's
|
||
14.5s, so the round-3 ordering holds: **the splicer can make six forgeries, then it must cool.**
|
||
|
||
The timing that matters is against `AUDITOR_NOTICE_TICKS = 600`:
|
||
|
||
```
|
||
notice -> stasis 600 ticks (20s)
|
||
one forgery 240 ticks (8s)
|
||
```
|
||
|
||
One forgery fits inside the fax lead time **with room to spare — but only if the STCO MAP is
|
||
already on the belt.** So the real preparation is stockpiling maps, which competes directly
|
||
with `assemble-moov-brain`. §4's line on the splicer ("requires a steady buffer feed or it
|
||
splices *itself*") turns out to be the auditor counter's whole difficulty curve.
|
||
|
||
### `heat` on the hex splicer: `coolPerTick 0.001`, 0.08 per splice
|
||
|
||
Net 0.035 per craft after the 45 ticks of cooling → 28.6 crafts → **42.9 s** of continuous
|
||
splicing before it scrams (`chart-stco-map`: 50 s). A lesser fever than the decoder's
|
||
14.5 s, exactly as ordered. §4: "Requires ... a steady buffer feed or it splices *itself*"
|
||
— left running unattended, it stops itself.
|
||
|
||
---
|
||
|
||
## Open / deferred
|
||
|
||
- **The ASIC cooler's aura is spec'd, not built** (above). Until SIM has auras, heat is
|
||
survivable only by duty-cycling or by leaning on ASICs. Deliberate.
|
||
- `cinema-pack`, `gibbs-wraith`, `sodium-light` remain forward canon (no recipe;
|
||
`mosquito-swarm` retired from the list in round 5 when the trap landed). The
|
||
validator's FORWARD_CANON allowlist is the enforcement, and it has a companion test
|
||
asserting nothing sits on the list once it *is* producible. Round 3 retired
|
||
`container-pack`'s slot (round 2) and added none.
|
||
- Dials-as-recipes (quantizer Q, subsampler grades, GOP cadence) stays, per round-2 review.
|
||
- ~~The heat constants are mirrored by hand~~ **CLOSED (round 5)**: LANE-SIM exported them
|
||
in `src/sim/constants.ts` and the validator imports them. The copies are retired; if SIM
|
||
retunes the curve my arithmetic now fails loudly instead of asserting the old feel.
|
||
- The muxer, moov brain and megaglitch are data-only; no lane implements a victory
|
||
condition yet. The tech gate (`fortress-the-muxer`) keeps them out of reach meanwhile.
|
||
- **The register is a queue position, not a register (round 7, open).** SIM credits only
|
||
`commissionQueue[0]`, so a compliance quota can only be filed when it reaches the head.
|
||
Standing quotas do re-queue to the back, so mid-game the valve comes round periodically —
|
||
but it is not the on-demand relief the fiction implies ("standing quota; there is no final
|
||
collection, only the next one"). Mitigated in data by spreading four quotas across the
|
||
curve so at most 8 commissions ever sit between valves, and pinned by a test. The real fix
|
||
is a parallel always-open register, which is a contract/mechanic question, not a data one.
|
||
- **`ItemDef.tier` is now read by three mechanics** (mite repair, debt accrual, gunship
|
||
sector scoring). Any future re-tier is a balance change in three places at once.
|