From c78382cf6f96cea56f24fb5ec8a11f967d10ce7b Mon Sep 17 00:00:00 2001 From: Khiet Le Date: Mon, 9 Nov 2026 21:38:38 +0000 Subject: [PATCH 1/2] docs: rain keeps its starting grip and Dry stays the default Records the probe of 40 seeds of Ace bots, dry against rain on each seeded lap, and a lone bot's wet lap costs: rain's cost is nearly flat across tyre life, so the dry table still weighs a stop. Keeps ADR 0103's factors and RACE_END_CAP_S, keeps Dry the default, and leaves the keyboard feel for a later playtest. Closes #346 --- ...starting-grip-and-dry-stays-the-default.md | 72 +++++++++++++++++++ tools/repo-checks/test/adr.test.ts | 1 + 2 files changed, 73 insertions(+) create mode 100644 docs/adr/0104-rain-keeps-its-starting-grip-and-dry-stays-the-default.md diff --git a/docs/adr/0104-rain-keeps-its-starting-grip-and-dry-stays-the-default.md b/docs/adr/0104-rain-keeps-its-starting-grip-and-dry-stays-the-default.md new file mode 100644 index 0000000..c4263b4 --- /dev/null +++ b/docs/adr/0104-rain-keeps-its-starting-grip-and-dry-stays-the-default.md @@ -0,0 +1,72 @@ +# ADR 0104: Rain keeps its starting grip and Dry stays the default + +## Status + +Accepted (2026-11-09). The playtest and retune ADR 0103 left for after the +build. Changes no factor in `crates/sim/src/tuning.rs`. + +## Context + +ADR 0103 set one row of rain factors as a starting tune and left four +questions for a playtest: whether worn tyres in the wet read as rain or as a +broken kart on a keyboard, whose steering is all or nothing; how rain plays on +lap 3 of 3, where a stop cannot pay, and on the oval, whose 3-lap race ends +before the 20 s ramp does; whether an Ace bot's dry lap costs need a wet row; +and whether Rain can become the default pick. + +A throwaway probe raced eight Ace bots on Tyres On over 40 seeds, dry against +rain on the same seeds, on every course at 3 and 5 laps, split by the lap the +seed picked: 18 to 22 races a row at 3 laps, 12 to 14 at 5. Beside it, a lone +Ace bot held at each life of `BOT_TYRE_LOSS_S_PER_LAP` raced Bell Deer, +Goldstone and Monarch without their lanes or item boxes, on seeds whose rain +began on lap 2, and timed laps 4 and 5, which run fully wet. It is too small to +tune from, and it is the evidence below. + +- **Rain's cost is nearly flat across tyre life.** Against a dry lap at the same + life, a wet lap costs about 2 to 3 s from 100% down to 30%, and under 1 s at + 20% and 10%. What a stop wins is close to the dry table: from 30% to new + tyres, 10.8 s a lap wet against 9.6 s dry, measured; the table holds 10.2. + At 0% a wet lap is quicker than a dry one, 56.6 s against 96.9 s on the + mean, as ADR 0103 predicted from the slower steering loading the tyres less; + the mean is noisy across courses. +- **Lap 3 of 3 changes nobody's race but the winner's time.** Stops made from + the rain's lap on are 0.16 a kart wet against 0.15 dry on Bell Deer, 0.11 + against 0.12 on Goldstone and 0.26 against 0.26 on Monarch. The winner is 2 + to 3.5 s slower. +- **The oval barely gets wet.** Rain on lap 3 of 3 leaves the track 72% wet at + the winner's flag and costs the winner about 0.6 s; on lap 2 it is fully wet + and costs about 0.2 s. +- **Five laps add a few stops and some capped karts.** Rain adds 0.1 to 0.5 + stops a kart over five laps, most on Monarch. Goldstone sends more karts past + the end cap in rain, 18 against 16, 19 against 8 and 13 against 6 of about + 100 karts a row; the other courses move by noise either way, and the oval's + five laps overrun the cap in the dry as much as in rain. Karts on grass are 0 + or 1 in every row. + +The keyboard playtest was not held. The maintainer chose to record the probe +now and leave the feel for a later playtest. + +## Decision + +- **Rain keeps ADR 0103's starting factors**: steering rate and acceleration x + 0.92, braking x 0.80, wash-out + 0.05 rad to at most 0.18 rad. +- **An Ace bot's lap costs stay dry.** Rain adds about the same to every life, + and no stop takes it away, so the dry table weighs what a stop wins about as + well wet as dry. There is no wet row. +- **Lap 3 of 3 and the oval stay as they are.** A last-lap scramble with no stop + worth making, and an oval that only half gets wet, are what a seeded lap and + a 20 s ramp give, and neither breaks a race. +- **`RACE_END_CAP_S` stays.** Goldstone's five laps in rain are recorded here and + left alone. +- **Dry stays the default pick** until rooms have played Rain. + +## Consequences + +- Nothing in the sim, the protocol or the replay fixtures changes. +- Whether worn tyres in the wet read as rain or as a broken kart on a keyboard + is still open. A playtest that finds a broken kart softens the wash-out first, + since it is the one factor a keyboard's full lock feels, and gets its own ADR. +- Rain becoming the default is a later decision, with play in rooms as its + evidence. +- If Goldstone's five-lap rain races start ending at the cap in play, the + maintainer decides between the row and `RACE_END_CAP_S`, as ADR 0103 left it. diff --git a/tools/repo-checks/test/adr.test.ts b/tools/repo-checks/test/adr.test.ts index e968697..2beb018 100644 --- a/tools/repo-checks/test/adr.test.ts +++ b/tools/repo-checks/test/adr.test.ts @@ -108,6 +108,7 @@ const DECISION_SLUGS = [ "a-ramp-is-a-slope-across-part-of-the-road", "a-hop-on-the-lip-is-a-trick", "rain-changes-grip-on-a-lap-the-seed-picks", + "rain-keeps-its-starting-grip-and-dry-stays-the-default", ]; const expectedFiles = DECISION_SLUGS.map( From f8c17ed1436bfb4cd1b599dfe594219d274d2dbe Mon Sep 17 00:00:00 2001 From: Khiet Le Date: Mon, 9 Nov 2026 21:42:18 +0000 Subject: [PATCH 2/2] fix: ADR 0104 says no playtest was held and cites the stop's measured gain Names the gamepad alongside the keyboard as unplayed, leaves lap 3 of 3's feel open, labels Goldstone's capped counts by rain lap, avoids calling the wetting a ramp, and points FRESH_PICKS' Dry at ADR 0104. Closes #346 --- crates/sim/src/tuning.rs | 2 +- ...starting-grip-and-dry-stays-the-default.md | 71 ++++++++++--------- 2 files changed, 37 insertions(+), 36 deletions(-) diff --git a/crates/sim/src/tuning.rs b/crates/sim/src/tuning.rs index f403ce4..62a1b08 100644 --- a/crates/sim/src/tuning.rs +++ b/crates/sim/src/tuning.rs @@ -149,7 +149,7 @@ pub const FRESH_PICKS: Picks = Picks { level: BotLevel::Basic, tyres: Tyres::On, laps: DEFAULT_LAPS, - // Until rain has been played (ADR 0103). + // Until rooms have played Rain (ADR 0104). weather: Weather::Dry, }; /// Seconds the karts are held on the grid before Go: the start lights, one diff --git a/docs/adr/0104-rain-keeps-its-starting-grip-and-dry-stays-the-default.md b/docs/adr/0104-rain-keeps-its-starting-grip-and-dry-stays-the-default.md index c4263b4..bfa7e38 100644 --- a/docs/adr/0104-rain-keeps-its-starting-grip-and-dry-stays-the-default.md +++ b/docs/adr/0104-rain-keeps-its-starting-grip-and-dry-stays-the-default.md @@ -2,8 +2,9 @@ ## Status -Accepted (2026-11-09). The playtest and retune ADR 0103 left for after the -build. Changes no factor in `crates/sim/src/tuning.rs`. +Accepted (2026-11-09). Records a bot probe in place of the playtest and retune +ADR 0103 left for after the build; nobody has played rain yet. Changes no +factor in `crates/sim/src/tuning.rs`. ## Context @@ -11,61 +12,61 @@ ADR 0103 set one row of rain factors as a starting tune and left four questions for a playtest: whether worn tyres in the wet read as rain or as a broken kart on a keyboard, whose steering is all or nothing; how rain plays on lap 3 of 3, where a stop cannot pay, and on the oval, whose 3-lap race ends -before the 20 s ramp does; whether an Ace bot's dry lap costs need a wet row; -and whether Rain can become the default pick. +before the track has had its 20 s to wet; whether an Ace bot's dry lap costs +need a wet row; and whether Rain can become the default pick. A throwaway probe raced eight Ace bots on Tyres On over 40 seeds, dry against rain on the same seeds, on every course at 3 and 5 laps, split by the lap the seed picked: 18 to 22 races a row at 3 laps, 12 to 14 at 5. Beside it, a lone Ace bot held at each life of `BOT_TYRE_LOSS_S_PER_LAP` raced Bell Deer, -Goldstone and Monarch without their lanes or item boxes, on seeds whose rain -began on lap 2, and timed laps 4 and 5, which run fully wet. It is too small to -tune from, and it is the evidence below. +Goldstone and Monarch without their pit lanes or item boxes, on seeds whose +rain began on lap 2, and timed laps 4 and 5, which run fully wet. It is too +small to tune from, and it is the evidence below. -- **Rain's cost is nearly flat across tyre life.** Against a dry lap at the same - life, a wet lap costs about 2 to 3 s from 100% down to 30%, and under 1 s at - 20% and 10%. What a stop wins is close to the dry table: from 30% to new - tyres, 10.8 s a lap wet against 9.6 s dry, measured; the table holds 10.2. - At 0% a wet lap is quicker than a dry one, 56.6 s against 96.9 s on the - mean, as ADR 0103 predicted from the slower steering loading the tyres less; - the mean is noisy across courses. -- **Lap 3 of 3 changes nobody's race but the winner's time.** Stops made from - the rain's lap on are 0.16 a kart wet against 0.15 dry on Bell Deer, 0.11 - against 0.12 on Goldstone and 0.26 against 0.26 on Monarch. The winner is 2 - to 3.5 s slower. +- **What a stop wins is about what the dry table says.** Against a dry lap at + the same life, a wet lap costs about 2 to 3 s from 100% down to 30% and under + 1 s at 20% and 10%. Measured from new tyres in the same weather, going from + 30% to new wins 10.8 s a lap wet against 9.6 s dry; the table holds 10.2, and + its measuring test allows 1 s either way. At 0% the wet laps were quicker than + the dry ones on the mean, too noisy across courses to read further; ADR 0103 + expected a worn-out kart to slide less in the wet. +- **Lap 3 of 3 changes the bots' stops by nothing.** Stops made from the rain's + lap on are 0.16 a kart wet against 0.15 dry on Bell Deer, 0.11 against 0.12 on + Goldstone and 0.26 against 0.26 on Monarch. The winner is 2 to 3.5 s slower. + How a human's last lap feels is not something bots show. - **The oval barely gets wet.** Rain on lap 3 of 3 leaves the track 72% wet at the winner's flag and costs the winner about 0.6 s; on lap 2 it is fully wet and costs about 0.2 s. - **Five laps add a few stops and some capped karts.** Rain adds 0.1 to 0.5 stops a kart over five laps, most on Monarch. Goldstone sends more karts past - the end cap in rain, 18 against 16, 19 against 8 and 13 against 6 of about - 100 karts a row; the other courses move by noise either way, and the oval's - five laps overrun the cap in the dry as much as in rain. Karts on grass are 0 - or 1 in every row. + the end cap in rain, of about 100 karts a row: 18 against 16 with rain on lap + 2, 19 against 8 on lap 3 and 13 against 6 on lap 4. The other courses move by + noise either way, and the oval's five laps overrun the cap in the dry as much + as in rain. Karts on grass are 0 or 1 in every row. -The keyboard playtest was not held. The maintainer chose to record the probe -now and leave the feel for a later playtest. +Neither the keyboard nor the gamepad playtest was held. The maintainer chose to +record the probe now and leave play for later. ## Decision - **Rain keeps ADR 0103's starting factors**: steering rate and acceleration x 0.92, braking x 0.80, wash-out + 0.05 rad to at most 0.18 rad. -- **An Ace bot's lap costs stay dry.** Rain adds about the same to every life, - and no stop takes it away, so the dry table weighs what a stop wins about as - well wet as dry. There is no wet row. -- **Lap 3 of 3 and the oval stay as they are.** A last-lap scramble with no stop - worth making, and an oval that only half gets wet, are what a seeded lap and - a 20 s ramp give, and neither breaks a race. -- **`RACE_END_CAP_S` stays.** Goldstone's five laps in rain are recorded here and - left alone. +- **An Ace bot's lap costs stay dry.** The stop a bot weighs wins within the + table's own tolerance wet or dry, since no stop takes the rain away, and its + stops barely change. There is no wet row. +- **Lap 3 of 3 and the oval stay as they are.** A last lap with no stop worth + making, and an oval that only partly gets wet, are what a seeded lap and 20 s + of wetting give, and neither broke a bot race. +- **`RACE_END_CAP_S` stays**, the choice ADR 0103 left to the maintainer. + Goldstone's five laps in rain are recorded here and left alone. - **Dry stays the default pick** until rooms have played Rain. ## Consequences - Nothing in the sim, the protocol or the replay fixtures changes. -- Whether worn tyres in the wet read as rain or as a broken kart on a keyboard - is still open. A playtest that finds a broken kart softens the wash-out first, - since it is the one factor a keyboard's full lock feels, and gets its own ADR. +- Whether worn tyres in the wet read as rain or as a broken kart on a keyboard, + and how lap 3 of 3 in the rain feels to a human, are still open. A playtest + that answers them gets its own ADR. - Rain becoming the default is a later decision, with play in rooms as its evidence. - If Goldstone's five-lap rain races start ending at the cap in play, the