Preview review notes · 3 October 2026
FRESHET sales page: what needs Tim before it goes public
An unattended session built this page. It's a noindexed preview on a
pages.dev address: no domain, no DNS, no production routes.
Every number on it was checked against the game's code or produced by a
script in pages/freshet/build/ or the probes listed in
07-evidence/output/evidence-report.md. Nobody has approved
it for publishing.
Blockers
- PAR IS WRONG ON RISES 1, 2, 4 The game's par search (
solver.js) only tries tiles in the idle flood's footprint plus one ring, and it misses flat tiles the water crosses. Searching every tile (build/probe-par.mjs): rise 1 has two 1-hour clean saves, a berm at (5,7) or (6,7), against par 2; rise 2 has four 2-hour saves against par 3. Rises 3, 5 and 6 hold (build/probe-par3.mjs). On rise 4 the reactive ditcher bot beats par 3 with 2 hours by digging mid-flood (build/probe-ditcher-r4.mjs).npm run simstill passes because it checks par against the same narrow search. Decision needed: the page currently keeps the game as is and turns this into a dare (the "Three stars, and a par you can beat" section, the gripe, and the P.S.). If you fix the solver and retune rises 1, 2 and 4 instead, those three passages and the "That's two shovel-hours, the warden's par" line must be rewritten, anddist/play/recopied. -
STAGE FRESHET is at internal on the
arcade, so
/play/freshet/404s for the public. This preview serves its own copy of the game at/play/(copied from commit56df11c). To publish, either promote the game (games-portal/tools/stage.mjs freshet beta, your call) and point the CTAs at the arcade, or keep the copy and accept that it will drift from the repo. -
YOUR VOICE The page speaks as you in four
places: "That's the moment I like best in the game", "I checked all
268 legal ones", "I'd like it to carry over", and "What I think it
gets right". The 268 check was run by this session
(
build/probe-singles.mjs, reproduced in the evidence report), not by you. Own them or cut them. - NOBODY HAS PLAYED IT Zero players outside the build, so the page has no testimonials, no play time, and no player counts. The only proof is the demo, the code, and the game's bots (labelled as bots). Your own playthrough of rises 1 to 6 is the missing piece.
-
DEMO COACH The hero's coach lines are written
for the page, not OLD MERTEN's words, and they aren't attributed to
him. The game's own lines contain em dashes and assume keyboard keys.
Check the four demo lines in
demo.jssound right to you. - NAME FRESHET was picked to dodge an itch.io match on "Spillway". This session didn't re-check FRESHET itself for collisions.
Test-reader gauntlet: escalated, not passed
Three cycles (the cap): 3.39 → 3.81 → 3.88 overall, against a 4.0 bar. Every other threshold passes: no section under 3.5, skimmer audit 7/7, zero open criticals, 9 of 10 would play, primary audience 70%. The remaining gap is the phone skimmer and the parent persona scoring the bot and par sections, which are written for tactics players. Accept it, or ask for a simpler proof section. Details in 08-test-readers/output/feedback-synthesis.md.
Repo findings (the game's own docs are wrong)
-
THE HARVEST.
GDD.mdsays "at least half the fields dry". The code (tuning.jsHARVEST_FRACTION: 1.0,grade.js) demands every field. The page follows the code. -
Water flow.
GDD.mdand theflood.jsheader say a droplet moves to its lowest lower neighbor. The code moves to the first lower neighbor in N, W, E, S order. The page says exactly that and never says "steepest" or "lowest". If you change the engine to match the doc, every par and the page's numbers need rechecking. -
Entering at rise 2. The demo's finish line links to
/play/?rise=2. The season report then counts five rises (15 stars max), since rise 1 was played on this page, not in the game. Fine for now; worth knowing.
Review items (not blocking)
- The full game has no touch input. The page says so twice and offers "Copy the link for your laptop" on narrow screens.
-
Stars don't persist; only the coach's lessons do
(
freshet-coach-v1). The FAQ says so. -
Bot numbers are
runSeason(hand, 1)fromsrc/sim/hands.js. The ditcher and engineer are deterministic; the seed only moves the masher.
How to refresh
From pages/freshet/: copy the game (cp -R
~/Programming/games/strategy/freshet/{index.html,styles.css,src}
dist/play/), serve dist/ on 8794, run
node build/check-page.mjs, then
npx wrangler pages deploy dist --project-name freshet-draft --branch
main --commit-dirty=true.