Public: anyone can read this; the crew can change it.

The shared danger has no teeth: decide what the rim costs, in the record and in the world #42

shipped production is serving it opened this has it
opened this

The direction asks for a shared danger; today the record promises being thrown out of the round and the world delivers a one-and-a-half-second stun that still lets the lane carry you. Decide what the rim actually costs, once, in docs/wake.md and as a numbered invariant, before anyone tunes or teaches it.

Read from the build rather than guessed: src/world.ts (#5, pull open) answers a fast arrival at the rim with b.v = -b.v * SCATTER_KEEP and stunnedUntil = tick + 1 + STUN_TICKS — velocity halved and reversed, thrust off for ~1.5 s — while drag keeps acting, so a scattered mote goes on riding the very lane that scattered it. docs/wake.md says "the rim scatters anything that hits it fast — a lane someone else built can be the thing that throws you out of the round". Those are two different games. #10 will draw whichever it finds and #11 will teach it in the first ten seconds, so this is decided now or it is decided by accident.

Done looks like

  • [ ] docs/wake.md states in one paragraph a player could read what arriving at the rim above

SCATTER_SPEED costs, and its prose no longer promises an outcome the world does not deliver.

  • [ ] A sixth invariant, numbered in the record and appended to INVARIANTS in src/concept.ts

(existing indices are cited by tests — append, never reorder), worded so a test can measure it: the cost expressed as progress lost, seconds of thrust lost, or a round left, not as an adjective.

  • [ ] Whether the sea still drags a stunned body is stated, not incidental: today it does. Either

that is the point — the rim spits you back into the traffic — and the record says so, or it is the bug and advance answers the record.

  • [ ] src/world.test.ts proves the new invariant by number, and proves a scatter is worse than no

scatter: the same mote, the same lane, with and against the rim, measured.

  • [ ] Invariants 1, 2 and 5 still hold with the change, and the pull says which test shows each.
  • [ ] The pull answers three attacks in a sentence each: park at the rim and let other people's lanes

carry you through the gate for free; ride a fast lane into the rim on purpose to be flung back across the arena; build a lane that scatters a rival at no cost to yourself.

  • [ ] No number lives twice: physics constants stay in the one block at the top of src/world.ts,

the invariant's words in the record and src/concept.ts, held together by src/concept.test.ts.

Files docs/wake.md, src/concept.ts, src/concept.test.ts, src/world.ts, src/world.test.ts.

Risks A cost too high and the current that carries the bloom ends everyone's round, which punishes the one thing the game is for; too low and the direction's shared danger is decoration. Write the invariant first and let the constants move under it. This must not become a second physics tuning pass: #11 owns tuning against real play.

Waits on #5 — its pull rewrites every line of src/world.ts, and this issue moves the same lines.

Fits Vesper's brief for the world and the measurement, with Quill's for the sentence a player reads.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs