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

Credit, decided before it is coded: what a round pays for, and to whom #72

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

`docs/wake.md` gains a **Credit** section that decides, before #12 codes it, what a round pays for: the purse is the bloom's gate-ward progress at one point per unit, split by whose shares of the current actually carried the bloom — a three-rule ledger (what you add is yours net of the current you were a passenger on; only the bloom pays, read at the top of the tick before `rim()` answers; the blo…

shipped production is serving it deploy feb7d92

opened this

docs/wake.md gains a Credit section that decides, before #12 codes it, what a round pays for: the purse is the bloom's gate-ward progress at one point per unit, split by whose shares of the current actually carried the bloom — a three-rule ledger (what you add is yours net of the current you were a passenger on; only the bloom pays, read at the top of the tick before rim() answers; the bloom's own wake is nobody's, and the clamped own-wake excess comes out of that share first and then the players' forward parts in proportion) — and what it never pays for: proximity, thrusting at the bloom, riding someone else's lane. The three ways it gets gamed are answered in a sentence each, and invariant 8 is added: signed credit summed over a round equals the bloom's gate-ward progress within 10 points, and a round in which the bloom never moves pays nobody.

The long version of the tolerance argument, which the rewritten issue asked be kept out of the record: ten points is 2% of the largest purse the arena can hand out (ARENA_RADIUS = 500 points, since the bloom starts at the middle and reaching the gate's mouth on the rim ends the round), so a percentage clause could never be the binding one, and a percentage is undefined for the negative-progress round the record deliberately allows. Four things make the ledger miss: the field's cap and floor are not linear (driving the record's own braid — invariant 4, seed 11, gate at 0 — a cell sits at FIELD_MAX on about half the ticks, but it is the cell under a swimmer, not the lane the bloom rides, where the forward current averages 67 units, a ninth of the cap); the own-wake subtraction is a fitted curve clamped at the whole forward current, and for a mass-50 body that clamp binds on 1152 of that round's 1440 forward ticks, which makes it the largest source and #24's to end; the gate-ward direction is read once per 50 ms against a curving path; and the rim answers after the pull is read. The last two are geometry and measurable today — summing the bloom's own gate-ward pull gives 427.2 against 426.6 actually closed on the scoring braid, and 241.4 against 241.3 on a round pinned off-gate for 3243 ticks; reading on the far side of rim() gives 426.8 and 241.6, so the side is worth well under a point on a whole round and is chosen for its reason, not its number. Ten points is a third of a field cell, while forgetting the passenger split or crediting gross deposits moves the sum by tens of percent, so no wrong rule fits inside the band.

Scope, as the issue rewrote it: only docs/wake.md, src/concept.ts, src/concept.test.ts and the one word in AGENTS.md that stopped being true. The earlier pull's README edits and src/world.test.ts measurements are reverted to main's — #36 owns those lines, and the measurement belongs with the ledger that will be tested. src/concept.ts carries only CREDIT_RULE, the one sentence a player reads, plus the invariant; CREDIT_POINTS_PER_UNIT, CREDIT_TOLERANCE_POINTS and GUEST_CREDIT are dropped, since no door renders a rate or a tolerance and the guest sentence belongs next to the score #12 puts it beside — the record owns both numbers in its table and the tests now read them from there, so they and invariant 8 still cannot drift apart. The check that parked this was main's, fixed by #61: bunx tsc --noEmit exits 0 and bun test is 119 pass on this branch. Worth a look: the "Only the bloom pays" bullet, which decides the rim side, and the tolerance section, whose argument is now three sentences instead of a page.

🤖 Generated with Claude Code

Closes #38

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs