The 50 tickets
One line per ticket, in plain words. Tap a line for what it does and how it is checked. Tell Claude anything to change, or "checkpoint 1 OK".
Design first, then spells
1 DES-01 Design: the spell tree's final numbers, icons and descriptions (3 schools x 18 slots) opus · 1 run
Turn the approved draft (`docs/design/spell-tree-draft.html`) into the one document every spell ticket builds from: `docs/design/SPELL-TREE.md`. For each of the 54 slots (3 schools x 12 spells + 3 forks of two): id, name, school, slot, prerequisite, what it does in numbers (damage, radius in cells, duration, cooldown), its counter role (if any), an icon prompt for `request_asset.py`, and a one-to-two line description written to make a player WANT it (the operator: "players should be getting excited thinking about what the spells are going to do"). No code.
- T0 `docs/design/SPELL-TREE.md` exists with 54 slot rows and 9 spellbook rows; a script count says so
- T0 every row has id, name, school, slot, prerequisite, numbers, icon prompt, description
- T0 the points table sums: 3 x 15 = 45 slots buyable, 27 points available, respec price stated
- T2 the operator reads the descriptions and says they sound exciting (PLAYTEST-QUEUE row)
27 SPELL-04 The spell tree engine: points, slots in order, forks, equipping, respec - and no free spells but the frog's Lightning opus · 1 run
"You should not unlock a spell automatically... an unlock tree... like an RPG where you're choosing which spells you're unlocking." Today the save starts with `unlockedAbilities = ["lightning", "thunderclap"]` and FIRE / TORNADO are SHOP items. After this ticket a pure `SpellTree` model holds the 54 slots from DES-01: points earned (from the Rain Dance's stars, RHYTHM-04), slots bought in order, forks (one of two), an equipped set (4 actives on the arc + the spellbook slots), and respec (refund all points, for the wizard's fee). New saves start with nothing; TUT-04 grants Lightning. FIRE and TORNADO leave the SHOP; owners of either keep it (migration) and get its slot.
- T0 unit: a slot cannot be bought before its prerequisite; a fork's second option is locked once one is bought
- T0 unit: 27 points buy one school (15) and 12 more; respec refunds all 27
- T0 unit: an old save with fire+tornado loads owning both slots; a new save owns nothing
- T0 unit: the SHOP has no spell rows
- T1 device, fresh install after tutorial 2: vision on the ability arc - 'Does the ability arc at the bottom-right show exactly one spell button, a lightning bolt?'
28 SPELL-05 The spell tree screen: three glowing columns, a generated icon per spell, descriptions that make you want it sonnet · 2 runs
"Make sure the research tree looks cool, the icons look cool, and the descriptions sound cool... some players love the menus. These menus matter." After this ticket the frog's SPELL TREE button opens a full-screen tree: three columns (Storm yellow, Rain blue, Fire red), each slot a 64-px generated icon in a frame, owned slots lit, the next buyable ones glowing, locked ones dim; forks drawn side by side with OR; finales framed in gold. Tapping a slot shows its name, description and numbers with BUY (points) or EQUIP. The points counter sits at the top.
- T0 unit: buyable slots = prerequisites met & points >= 1; the screen marks exactly those
- T0 54 icon files exist (a script counts them)
- T1 vision: 'Is a spell tree shown with three coloured columns of illustrated spell icons, some glowing, and a points counter at the top?'
- T2 the operator: the tree looks exciting
29 SPELL-06 The Storm school: all 12 spells and 3 forks working in the game, numbers from DES-01 sonnet · 2 runs
Build every slot of the Storm school (kills bugs early - the frog's school) exactly as `docs/design/SPELL-TREE.md` gives it: Lightning, Quick Charge, Thunderclap, Forked Bolt, the Chain Lightning / Lightning Rod fork, Static Fence, Big Clap, Charged Air, Tornado, the Twin Tornadoes / Eye of the Storm fork, Storm Cloud, Overcharge, Ball Lightning, Grounding, and the Thunderstorm / Hurricane finale. Each active spell gets its effect, its FX and a sound; each passive changes the numbers it names; each fork's two options are both built (the player picks one). The counter spells (Static Fence vs chewers, Storm Cloud vs flyers) must visibly answer their bug.
- T0 unit: each Storm spell's effect matches its SPELL-TREE.md row (damage, radius, duration, cooldown)
- T0 capture_burst per active spell: the FX region changes over the burst
- T1 vision on the strongest finale spell's frame: 'Is a big storm effect covering much of the farm?'
30 SPELL-07 The Rain school: all 12 spells and 3 forks working in the game, numbers from DES-01 sonnet · 2 runs
Build every slot of the Rain school (farms early, kills bugs late) exactly as `docs/design/SPELL-TREE.md` gives it: Growth Rain, Soft Rain, Mist, Puddles, the Monsoon / Morning Dew fork, Hail, Moat, Rainbow, Flash Flood, the Healing Rain / Acid Rain fork, Ice Storm, Downpour, Whirlpool, Tidal Pull, and the Tsunami / Eternal Spring finale. Each active spell gets its effect, its FX and a sound; each passive changes the numbers it names; each fork's two options are both built (the player picks one). The counter spells (Moat vs jumpers) must visibly answer their bug.
- T0 unit: each Rain spell's effect matches its SPELL-TREE.md row (damage, radius, duration, cooldown)
- T0 capture_burst per active spell: the FX region changes over the burst
- T1 vision on the strongest finale spell's frame: 'Is a big rain effect covering much of the farm?'
31 SPELL-08 The Fire school: all 12 spells and 3 forks working in the game, numbers from DES-01 sonnet · 2 runs
Build every slot of the Fire school (aimed damage, strongest mid-game) exactly as `docs/design/SPELL-TREE.md` gives it: Fire Stream, Hotter Flame, Smoke, Burning Ground, the Flamethrower / Fireball fork, Fire Wall, Ember Mines, Kindle, Heat Shimmer, the Inferno Ring / Scorched Earth fork, Bonfire, Meteor, Blaze Speed, Cinder Coins, and the Phoenix / Volcano finale. Each active spell gets its effect, its FX and a sound; each passive changes the numbers it names; each fork's two options are both built (the player picks one). The counter spells (Smoke vs flyers, Heat Shimmer vs jumpers) must visibly answer their bug.
- T0 unit: each Fire spell's effect matches its SPELL-TREE.md row (damage, radius, duration, cooldown)
- T0 capture_burst per active spell: the FX region changes over the burst
- T1 vision on the strongest finale spell's frame: 'Is a big fire effect covering much of the farm?'
32 SPELL-09 Lightning feels powerful (flat + % health), makes a quiet zap, and the frog teaches every new spell first sonnet · 1 run
"In the player's first guess the lightning spell should feel powerful... start off one-shotting the bugs... then weaker over time but never too weak... a flat damage plus a percent health." And "when the user unlocks the lightning, they're excited about it. They know what it's going to do... it could make some audio when lightning strikes... a quieter sound effect." After this ticket Lightning uses DES-02's formula, each strike plays a quiet zap (rate-limited), and the first time the player can buy or receives any spell, the frog shows a 3-beat lesson: what it does, a short demo on a dummy bug, "try it" - so the effect is expected before it happens.
- T0 unit: Lightning one-shots an aphid at wave 1, needs two at wave 4, deals >= the floor to a Queen
- T0 unit: the zap sound is rate-limited to 4/s
- T1 vision mid-lesson: 'Is the frog showing a speech box about a spell, with a small demonstration on screen?'
33 WIZ-01 The wizard at the rune stone: 9 spellbooks for coins, the respec, and the 3rd-slot SHOP item sonnet · 2 runs
"A wizard that's just hanging out near a runic, almost Stonehenge style... a rock pillar with some moss at the bottom and runes inscribed in a circle around the main rune in the middle, and it glows... sky blue... he's able to sell you, for a pretty hefty fee, special spells." And: "If they talk to the wizard, they should be able to pay him to reset their points... pretty affordable." After this ticket the wizard stands at the glowing rune stone on the left plains; his TALK screen sells the 9 spellbooks from DES-01 (3 early, 3 mid, 3 late; late locked until wave 15 or at a fortune), each a quirky, strong, separate-from-the-tree spell carried in a book slot (2, +1 with an expensive SHOP item added here); RESET POINTS refunds the tree for DES-03's fee.
- T0 unit: each book's effect per its DES-01 row; a late book cannot be bought before wave 15 at the normal price
- T0 unit: respec costs the fee and refunds all points
- T1 vision: 'Is there an old wizard standing in front of a mossy standing stone with glowing sky-blue runes?'
- T1 vision on SPELLBOOKS: 'Is a shop of spellbooks shown with illustrated covers and coin prices?'
Bugs and invasions
2 DES-02 Design: the bug roster's numbers, breach routes, crop eat-time, lightning's formula, and the wave-curve simulation opus · 1 run
Write `docs/design/BUGS.md` and a runnable simulation, `core/src/test/.../waves/WaveCurveSim.kt` (a test that PRINTS, asserts the few hard rules). The document fixes, for all 11 bug types of SPEC-DELTA s5: health, speed, damage to fences, what it eats, its first wave, how many per wave as the wave rises, its counter. It also fixes the breach-route curve (routes per wave), crop eat time as a function of crop value, and Lightning's damage formula. The operator: "on wave 100 it would be reasonable for there to be five or more pathways... maybe at most six... maybe at most ten on the absolute"; "make sure it scales properly... spend some time thinking about it. Do the math."
- T0 `docs/design/BUGS.md` has 11 bug rows with health, speed, fence damage, diet, first wave, count curve, counter
- T0 WaveCurveSim passes: starter farm reaches wave 12 in 30-40 simulated minutes; health per wave never drops; routes never exceed the cap
- T0 the simulation's printed table is pasted into this ticket's References.md (today's curve AND the proposed one)
- T2 the operator reads the bug table and the route curve (a one-screen summary in PLAYTEST-QUEUE) and says it feels right
34 BUG-04 Bugs spread out (never stacked), pricier crops take longer to eat and lose growth instead of dying, eating makes a sound, a real aphid sprite sonnet · 2 runs
Four of the operator's notes on how bugs behave. (1) "The bugs are maybe stacked up on top of each other... make sure they all are pretty much in their own spot... a randomised offset of the centre point of the grid." (2) "The more expensive the crops are, the longer it should take the bugs to eat them... maybe they don't destroy it right away, they just take off twenty minutes of work." (3) "Some kind of an audio cue for the bugs eating your plants... not spammed out in a very annoying fashion." (4) The base bug becomes a proper generated aphid with a walk cycle.
- T0 unit: 10 bugs spawned at one edge end with pairwise distance >= 0.5 cell
- T0 unit: a crop worth 100x wheat loses growth while eaten and survives the first bite
- T0 unit: two bugs eating at once start the sound once within 1.5 s
- T1 vision during a wave: 'Are the bugs spread out across the field (not piled on the same spot), and do they look like little green aphids?'
35 ENEMY-02 The grasshopper (jumps one fence, wave 12) and the moth (flies over fences to your best crop, wave 16) sonnet · 2 runs
The first two bugs that beat a plain fence, ending the single-gap trick from wave 12 (the operator: "standing in the gap trick will simply be allowed until wave twelve... that actually might teach the player about the tower defence aspects"). **Grasshopper**: walks like an aphid; at a fence it jumps it once (a 0.6-s arc), then walks; a water trench or sticky trap stops the jump. **Moth**: flies straight over everything to the most valuable crop on the farm, ignores fences; scarecrows within 2 cells turn it away; bees and the bird house catch it. The frog warns one wave before each first appears.
- T0 unit: a grasshopper crosses a single fence line; cannot cross a trench
- T0 unit: a moth reaches the highest-value crop over a closed fence ring; turns away inside a scarecrow's radius
- T0 capture_burst on a jump: the grasshopper's position arcs over the fence across frames
- T1 vision: 'Is there a green grasshopper and a brown moth among the bugs, each clearly a different insect?'
36 ENEMY-03 The termite crew: it plans ONE breach path to your best crops, breaks every fence on it, then goes eating (wave 20) opus · 2 runs
"Termites should be a huge problem... they break your fences... they should actually be using logic to determine: we should make a pathway here so we get access to the more valuable crops." And: "It's not one fence. It's one path... regardless of how many fences there are, they're breaking whatever's there... once the path is confirmed open, they go start eating crops and forget about the path." After this ticket a termite crew (4-6 termites) picks an entry point and target, runs a weighted pathfinding where a fence costs its health and a wall/building is impassable, commits to that route, and chews every fence on it in order; they eat crops on the route, leave hives, dogs and buildings alone, and once the route is open they scatter to eat. Routes per wave follow DES-02 (1 at wave 20 ... 6 max).
- T0 unit: BreachPlanner on a fenced farm with one valuable corner picks a route ending there and crossing the fewest fence-health
- T0 unit: a crew breaks only the fences on its route; untouched fences keep full health
- T0 unit: with the route open the crew stops targeting fences
- T1 vision mid-breach: 'Are several pale termites chewing through one section of fence while the rest of the fence is intact?'
37 ENEMY-04 The Weevil Queen: a boss every 10th wave that lays aphids as she walks and drops gems sonnet · 1 run
"The Weevil Queen comes every ten rounds. Wait, that's so cool... that is awesome." After this ticket every 10th wave (10, 20, 30 ...) brings one Weevil Queen: big (64-px sprite drawn across 2x2 cells), slow, lays an aphid every few seconds as she walks, has a health bar over her, roars on arrival (the swarm warning gets a boss variant), and drops a burst of gems (DES-02 / DES-03 amounts) when killed. A Queen wave may add one breach route (DES-02).
- T0 unit: wave 10 contains exactly one Queen; she lays aphids at the interval; her death drops gems
- T1 vision: 'Is there one very large long-snouted weevil with a health bar above it among smaller bugs?'
38 ENEMY-05 The locust swarm (25), the stinkbug (30), and the stone- and brick-breakers (~40 / ~60) sonnet · 2 runs
**Locust swarm** (wave 25): many tiny fast flyers that arrive together and strip crops; the bird house and Storm Cloud answer them. **Stinkbug** (wave 30): when squashed it leaves a green cloud that slows the farmer for 3 s - kill it from range (dog, turrets, spells). **Stone-breaker** (~40): a rhino beetle that smashes cobblestone (and fences); **brick-breaker** (~60): a stag beetle that smashes brick and cobble. Breakers join termite routes (they open the walls the termites cannot). Each announced the wave before. Never overwhelming: DES-02's counts.
- T0 unit: a squashed stinkbug slows the farmer 3 s; one killed by a turret does not
- T0 unit: a stone-breaker damages cobble but not brick; a brick-breaker damages both
- T1 vision at wave 30: 'Is there a cloud of many tiny insects and a shield-shaped olive bug among the bugs?'
39 WAVE-03 The wave curve: harder as waves rise, sooner at the start, the attractor at least every 5 minutes, the blocker's trade-off told sonnet · 1 run
"Increase the frequency of the bugs earlier"; "make sure that as the waves increase the bugs do get stronger"; "if the player activates the extra-bugs item... a seriously solid amount... once every five minutes at least, if not more"; "by the end it should be a heavy, heavy Bloons-style tower defence... if they have the bug stopper it should be nothing... the player should be informed there is a trade-off." After this ticket the numbers follow DES-02's proposed curve (proven by WaveCurveSim), the attractor guarantees an invasion every <= 5 min, late attractor waves overlap into near-continuous pressure (with `maxActiveBugs` raised to what the device can draw at 60 fps), and buying / turning on the blocker shows one line: 'No invasions - but no bug drops either.'
- T0 WaveCurveSim (DES-02) passes with the shipped constants
- T0 unit: with the attractor on, no trough exceeds 300 s
- T0 device log: frame time stays < 16.7 ms average with maxActiveBugs bugs on screen (a TESTER-spawned wave)
- T1 vision on the blocker panel: 'Does the panel say invasions stop but bug drops stop too?'
40 TURRET-03 Hives make a little honey and run out if neglected; the apiary links for free (pink courier bees); no honey to tap by accident sonnet · 1 run
The operator's honey notes, in their final form: hives "should run out of bees if you let them go too long" but make a little honey themselves; connecting to the apiary is free ("you shouldn't have to pay for it, and it should just ask you to connect it - which one you want to connect to"); "the connection should be represented by red or pink bees flying between the hives, transporting the honey"; and "when the player is tapping around in circles trying to harvest... they're not having to be careful where they're tapping" - honey never needs collecting by tap.
- T0 unit: an unlinked hive with 0 honey regains enough for a sting in ~20 s; a hive stinging nonstop without a link runs dry
- T0 unit: CONNECT charges nothing; linking two hives makes both receive transfers
- T0 capture_burst between apiary and hive: a pink bee crosses the gap across frames
- T1 vision: 'Is each beehive showing a small honey level bar, with pink bees flying between the apiary and the hives?'
41 DROP-02 Bug drops pay properly: coins per kill grow with the wave on a curve that levels off (never runaway) local-qwen · 0.5 run
"The coins seem a little bit low... wheat gives me 100 coins just for harvesting it... the entire wave gives you less than one wheat crop... they should give you more... it should scale, but not too crazy out of control... an asymptotic scaling." Today `economy/DropTable.kt` pays a flat COINS_PER_KILL = 5 at every wave (a 16-bug wave = 80 coins). After this ticket coins per kill = base + rise x (1 - e^(-wave / k)), times the bug kind's health multiplier (a beetle pays more than an aphid, the Queen a lot): with DES-03's suggested base 20, rise 80, k 15 a wave-1 aphid pays ~25 (a first wave ~ two wheat harvests), wave 10 ~60, and it levels off toward 100. Gem rates stay as they are (the operator: "the gem rates might be good").
- T0 unit: wave 1 aphid ~25, wave 10 ~60, wave 100 < 101 per kill (with the suggested dials); a beetle pays its healthMul more
- T0 unit: the curve never exceeds base + rise x the biggest healthMul
- T1 device log after the first invasion: the summed `DROP pickup` coins exceed 100 (more than one wheat)
Prices
3 DES-03 Design: the economy pass - gems worth 4x coins, pack bonuses, auto-farm income, spellbook and gem prices opus · 1 run
Re-derive the money curve with the operator's 2026-10-04 decisions and write it into `docs/design/ECONOMY-2026-10.md`: coins per gem 10 -> 40 (one dial); +10 / +25 / +50% bonus gems on the three bigger packs; auto-farm income (a builder harvesting and replanting) added to the earn-rate contract; spellbook prices (early ~1 h, mid ~3 h, late ~8 h of farming); the 3rd-spellbook-slot SHOP item (expensive); the respec fee (~10 min); item gem prices re-checked (the operator found items "cost a lot of gems"); fences' Repair-all cost; the spells bucket re-cut now that FIRE and TORNADO move into the tree. The operator: "keep it cheap so people who actually want to spend money feel they're getting a lot of value... whales aren't going to be playing this... nor do I even want them to."
- T0 `docs/design/ECONOMY-2026-10.md` exists with the income table, every new price, the pack table and the what-changed list
- T0 the bucket invariants in Prices.kt still hold with the proposed numbers (a dry-run test prints PASS)
- T2 the operator reads the what-changed list and the pack table and okays the prices
50 ECON-03 Prices on a dial: gems worth 40 coins (was 10), bonus gems on bigger packs, shown in the SHOP local-qwen · 0.5 run
"Let's quadruple it for now, and keep that on a dial... a variable we can change and fine-tune." "Maybe we should just change [the gem-to-coin conversion] instead of giving them more gems." After this ticket `Prices.COINS_PER_GEM` = 40 (DES-03), every coin price derived from gems follows, the three bigger gem packs show +10% / +25% / +50% bonus gems ('+50% BONUS' ribbons), and the gems -> coins exchange row shows the new rate.
- T0 unit: a $50 pack grants 5,000 + 2,500 bonus gems and counts $49.99 toward the cap
- T0 unit: the gems -> coins exchange gives 40 coins per gem
- T1 vision on SHOP > Gems: 'Do the bigger gem packs show bonus ribbons like +25% or +50%?'
Tester tools
4 TEST-01 Tester panel: a hidden debug-build panel so the operator can reach every screen in round 2 sonnet · 1 run
23 of 44 round-1 tests went untested: the operator could not reach the screens ("I think I need debug tools to help test a lot of the rest of the stuff"). In DEBUG builds only, holding the gear for 3 seconds opens a TESTER panel: +100,000 coins, +10,000 gems, +100 honey, start an invasion now (pick the bug type), set the wave number, unlock everything (spells, Zen finds, nature turrets), skip the current tutorial step, give an apiary. Release builds have no panel and no code path to it.
- T0 unit test: with isDebugBuild=false the panel never opens; with true, a 3-s hold opens it
- T0 each action changes the save as named (unit tests on the action functions)
- T1 device: hold the gear 3 s -> vision: 'Is a panel titled TESTER open with buttons for coins, gems, honey, invasion, wave, unlock, tutorial, apiary?'
- T2 the operator uses it in manual review round 2 to reach the screens he could not
Farming
5 FARM-04 One tap harvests; the plot is left empty; you choose what to plant (seed bag + seed picker) sonnet · 1 run
Today a tap on a ripe crop harvests it and leaves the plot drawn with its old crop (`GrowthComponent.lastCrop`), and the next tap on it plants the selected crop at once - the operator read that as "bad wheat you have to tap again" and "you can't harvest without instantly planting". After this ticket: **one tap harvests and leaves clean tilled soil**; a tap on an empty tilled plot opens a small **seed picker** (wheat + every seed in the new seed bag, the last choice first, a price on each); picking plants it. Seeds bought in the Zen shop go to the seed bag (ZEN-03 uses it).
- T0 unit: harvest of a ripe plot pays and leaves cropType empty and the plot drawn as tilled (renderer state)
- T0 unit: a tap on an empty tilled plot opens the picker; picking wheat plants it and charges 10 coins
- T0 unit: seedBag round-trips through the save; an old save loads with an empty bag
- T1 device: harvest a ripe plot -> vision: 'Is this plot plain tilled soil with no crop or stubble on it?'
- T1 device: tap that plot -> vision: 'Is a small seed picker open above the plot listing Wheat with a price?'
6 CTRL-04 The farmer walks anywhere on the grass, and a tap walks him to exactly that spot sonnet · 1 run
Today `PlayerSystem` clamps the farmer to the farm's cells (0..cells-1), so he cannot step onto the grass, and a tap off the farm snaps him to the nearest farm cell ("kind of collapsing my character's movement... awkward"). After this ticket he walks anywhere walkable in the world - grass, the yard, the plains - and a tap anywhere walkable sends him to exactly that point. Water, buildings, placed objects and the forest beyond its edge stay blocked.
- T0 unit: the farmer can stand at a grass cell 3 cells left of the farm; cannot enter a water cell
- T0 unit: setTarget(float point) arrives within 0.1 cell of the point
- T1 device: push the stick left 3 s -> vision: 'Is the farmer standing on the grass outside the brown farm plots?'
7 CAM-01 The camera fits the whole farm (plus a ring of grass) and pinch zoom is smooth sonnet · 1 run
QA-01 F16: the default camera shows ~6 x 3 cells (336-px cells), so a 5x5 or 7x7 farm never fits - the operator noticed every screenshot looked 3x3. And pinch zoom "is janky as hell": `input/PinchZoom.kt` steps the scale in whole integers with a 24-px threshold. After this ticket the first launch fits the whole farm plus a 2-cell ring of grass (the yard) on the shorter screen side, re-fits when a ring is bought, and pinch zoom is continuous and eased, anchored between the two fingers. "You can zoom out really far... you can see this huge forest... I fuck with it" - keep the far zoom.
- T0 unit: fit for a 5x5 farm on 2400x1080 shows >= 9 cells vertically
- T0 unit: pinch from distance 400 to 420 px changes zoom by ~5% (continuous, no 24-px dead zone)
- T1 device: fresh launch after the tutorial ring -> vision: 'Can you see the whole farm of brown plots with grass all around it?'
- T2 the operator pinches on his phone in round 2: smooth, no steps (adb cannot pinch - one finger only)
8 FARM-05 Tilling is an animation: the farmer swings a hoe and the dirt darkens in steps local-qwen · 1 run
Today a standing farmer gets a floating hoe icon over his head for the 1.5-s till dwell - the operator read it as "a little sickle that looks like a question mark" and "the tilling animation leaves a lot to be desired". After this ticket the farmer swings a hoe (a 4-frame generated sheet at 8 fps) while the dirt under him darkens in three steps (0.5 s each) into tilled soil. The floating icon is gone.
- T0 unit: the renderer's farmer frame source is the swing sheet while TillingSystem.isTilling
- T0 capture_burst over the dwell: the farmer region changes frame to frame AND the cell darkens across the burst
- T1 vision on the middle frame: 'Is the farmer swinging a hoe at the ground (no floating icon above his head)?'
Looks
9 HUD-02 Coins, gems and honey become art: icon plates in the HUD, and every pickup flies to its own plate sonnet · 1 run
"The gems and the money and all that text is trash... it looks like it's on a notepad... it should look like an asset." Today `render/HudRenderer.kt` writes `COINS n GEMS n HONEY n BEST n KILLS n` and a `SEED wheat +100 10s` line in plain text. After this ticket coins, gems and honey each sit on a small wooden plate with a generated icon and the pixel font; BEST / KILLS / WAVE move to a compact right-side cluster; the SEED line goes (FARM-04's picker replaces it). Also: rare **items** currently fly to the bar's centre drawn with the gem icon (the operator: "the gems fly into the middle of the top bar") - items get their own bag icon and a bag plate, and every pickup lands on ITS plate.
- T0 unit: counterAnchor(ITEMS) is the bag plate's centre, not the screen centre
- T0 unit: an item drop spawns a flyer with the bag icon
- T1 vision: 'At the top-left, are coins and gems shown as small plates each with a coin or gem icon and a number (not words like COINS)?'
- T0 capture_burst on a gem pickup: the flyer ends at the gem plate's region
10 UI-02 Panels get the screen: taller, scrollable lists, no NEXT paging, and the top buttons hide while one is open sonnet · 1 run
"This next thing is bad UX... it should be scrollable... when you click build it should get rid of the build, shop and modes icon until that thing is gone... it's too smushed, you only fit like three items." After this ticket every list panel (BUILD, SHOP, MODES, Zen shop, refinery/machine lists) is ~80% of the screen height, its list scrolls with a drag (and a fling), there is no NEXT paging, and the BUILD / SHOP / MODES / gear row hides while any panel is open.
- T0 unit: a list of 12 rows in a panel scrolls; row 12 becomes hit-testable after a drag
- T0 unit: NavBar is not drawn / not hit-tested while a panel is open
- T1 vision with BUILD open: 'Is a tall panel open showing at least five rows, with no BUILD/SHOP/MODES buttons visible?'
11 ART-01 Rose gets her real sprite (it was approved and never copied in) - regenerate only if it still reads badly local-qwen · 0.5 run
"The pink haired girl asset looks like shit... like a South Park Canadian." Found today: Rose's approved F-002 sample `docs/style/f002-2026-09-26/villager_rose.png` was never copied to `android/assets/sprites/gen/`, so `render/VillagerSprite.kt` drew its 16-px code fallback every time. After this ticket the real sprite (48 px) is in the game, plus a cower pose and a 4-frame walk generated from it; the fallback logs a loud `ASSET MISSING` line (factory ticket F-048 makes that a failing check).
- T0 the three files exist in android/assets/sprites/gen/; a unit test with the real assets dir asserts VillagerSprite.isGenerated
- T0 logcat on device has no `ASSET MISSING sprites/gen/villager_rose` line
- T1 vision on the tutorial-3 screenshot: 'Is there a young woman with pink pigtails and striped overalls, drawn as a detailed sprite (not a blocky stick figure)?'
- T2 the operator approves her look
12 ART-02 New art for the lake house, the barn and the buildings local-qwen · 1 run
"The building asset doesn't look very good either. The building in the top of the map kind of looks like shit too." The barn is assembled from farm-atlas tiles (`HomesteadRenderer` draws roof / wall / door tiles) and the lake house is a 48-px generated sprite. After this ticket both are new generated sprites in the approved style, drawn whole; the machines and refineries (mill, juicer, popcorn machine, apiary, tractor assembly, compactor, claw rig) get a matching pass where the operator marks them as bad in CHECKPOINT 2.
- T0 the new files exist and HomesteadRenderer has no barn tile-assembly loop
- T1 vision zoomed on the homestead: 'Are there a cozy farmhouse and a barn, each drawn as one clear building (not a patchwork of tiles)?'
- T2 the operator approves them
13 ART-03 The forest uses whole trees only, and the flowers sway gently local-qwen · 1 run
"The forest looks a little bit AI sloppy... there are some half trees... it's okay for the forest to be a bit messy, but just make sure the trees are trees." The forest is drawn from 16-px town-atlas tiles (`CropSprites.PINES`, `ROUND_TREE`), which cut trees at tile edges. After this ticket the forest uses 4 generated whole-pine sprites (32 x 48) placed per forest cell with a little jitter and drawn y-sorted, never clipped. Flowers sway: a slow 2-frame breeze (the operator: "like Pokemon Blue... a slow, calm background animation, not too attention-grabbing").
- T0 unit: the forest pass never draws a town-atlas tree region
- T1 vision zoomed out: 'Does the forest show whole pine trees, none cut in half at an edge?'
- T0 capture_burst over a flower patch: the flower pixels change between frames
14 WALL-02 Fences join up and turn with the line (straights, corners, ends) instead of one sprite that reads as a chest local-qwen · 1 run
"The fence looks like shit. It always faces the same direction. Like it looks like a chest." Every fence is farm tile 102. After this ticket fences auto-tile from their 4 neighbours: horizontal and vertical straights, corners, T-joins, ends and a lone post, from a generated 16-px set; moving or removing one re-tiles its neighbours.
- T0 unit: FenceTiling maps all 16 masks; a corner gets the corner shape
- T1 vision on a placed L-shaped line: 'Do the fence pieces connect into one continuous fence that turns the corner?'
15 MAP-02 A readable minimap: a framed map plate with clear farm, fence and bug colours - no pink bar local-qwen · 0.5 run
"The minimap looks like shit in general... it's pink... it should be easier to read." After this ticket the minimap is a framed wooden map plate: farm cells tan, tilled soil brown, fences dark brown lines, the homestead grey, forest dark green; bugs as red dots with a gentle pulse, termite routes (when ENEMY-03 lands) as orange dashes, the player a white dot; the view rectangle a thin white outline (no filled pink bar).
- T0 unit: no filled rect in the minimap draw list other than terrain; the view rect is 4 lines
- T1 vision during an invasion: 'Is there a small framed map at the top-right showing the farm and red dots for bugs, easy to read, with no pink bar?'
Building
16 YARD-01 The yard: a 2-tile grass ring for defences and buildings; farmland is for crops only sonnet · 1 run
"It just feels kind of bad having to take up your own farmland for them." Today `build/Placement.kt` only lets BUILDING kinds (apiary, machines, refineries) go INSIDE the farm, and defences reach just 1 tile outside. After this ticket a **yard** - a 2-cell ring of grass around the farmland, growing with each land ring - holds defences and buildings; farmland holds crops, magic plants (they root in a plot) and scarecrows (between crops, DEF-03). The yard is drawn as slightly darker trimmed grass so the player sees where things can go.
- T0 unit: canPlace(BUILDING, inside farm) = false; canPlace(BUILDING, yard cell) = true; canPlace(DEFENCE, 3 cells out) = false
- T0 unit: an old save with a hive on farmland loads and keeps it
- T1 vision: 'Is there a band of slightly darker trimmed grass around the brown farm plots, with a beehive standing on it?'
17 BUILD-02 Tap previews, a shiny check button confirms; anything placed can be removed (sold back for half) sonnet · 1 run
"It actually just places instantly as soon as I tap my finger down... I should be able to tap just to preview and then there should be a check mark... a button with a gradient and a shiny white point... that goes pop when you click on it." And: "I don't see any way to remove it." After this ticket a tap in place mode moves the ghost there (green / red as today); a round shiny CHECK button beside the ghost confirms (pop sound, the existing placement pop); an X cancels. Long-press a placed thing opens a small MOVE / REMOVE menu; REMOVE sells it back for half its price (fences: their price, no refund beyond it).
- T0 unit: a tap in place mode moves the ghost and charges nothing; confirm charges and places
- T0 unit: remove refunds half and frees the cell
- T1 vision with a ghost armed: 'Next to a translucent fence ghost, is there a round shiny check-mark button and an X button?'
18 WORKER-02 Builders have jobs: they construct buildings (scaffolding animation), clear rocks and rubble, and idle ones can be moved sonnet · 2 runs
"The builders, I don't know how to use them. They just sit there idly." "There's no building animation for building building like the apiary." "It'd be nice if I could move the builders... there's actually wheat behind them... if they're actually building stuff, they should be stuck building it." After this ticket a building under construction shows scaffolding in 3 stages and a builder walking to it and hammering (a 2-frame work animation); builders also clear debris (rocks, stumps - the tutorial rock, WALL-03's rubble) for coins; an idle builder can be long-press-moved and never parks on a crop; tapping a builder shows a card with his job.
- T0 unit: placing an apiary with an idle builder sets him WALKING to it, then WORKING; done at buildSeconds
- T0 unit: an idle builder's resting cell is never a plot
- T0 capture_burst at the apiary during the build: the scaffold region changes (stage) and the builder region alternates (hammer)
- T1 vision mid-build: 'Is there scaffolding on a building site with a builder working next to it?'
19 WORKER-03 Auto-farm: put a builder on the farm and he harvests and replants by himself while the game runs sonnet · 1 run
"Maybe you should be able to set a farmer onto auto harvest and auto plant mode... if your game is running, they automatically harvest and plant back the same crops. That should be a status - you need a builder on that... and you should absolutely set one of your builders to do that in the tutorial." After this ticket a builder's card has an AUTO-FARM button: he walks plot to plot, harvests what is ripe and replants the same crop (paying the seed), at DES-03's efficiency; the job shows on him (a small straw-hat badge). Only while the app runs - no offline earnings.
- T0 unit: an auto-farm builder harvests a ripe plot and replants the same crop, paying the seed
- T0 unit: auto-farm income over 10 simulated minutes is within 10% of DES-03's number
- T0 device log: `WORKER autofarm harvest` lines appear with no player taps for 60 s
- T1 vision: 'Is a builder with a small straw-hat badge standing on a farm plot?'
20 WALL-03 Broken fences leave rubble, and one REPAIR ALL button rebuilds them local-qwen · 1 run
"When the fences get broken down, there should be maybe some rubble left in their place, so you can easily just have a repair all fences button... so you don't need to remember where they all were." After this ticket a destroyed fence (or wall) leaves a rubble entity on its cell (bugs walk over it); a REPAIR ALL chip appears top-left under the HUD while any rubble exists, showing the total cost; tapping it rebuilds every broken piece it can afford (instantly - fences are instant builds); long-press rubble offers CLEAR (a builder job, WORKER-02).
- T0 unit: a destroyed fence becomes rubble; repairAll rebuilds it and charges its price
- T0 unit: rubble round-trips through the save
- T1 vision after a wave broke fences: 'Is there broken fence rubble on the ground and a REPAIR ALL button near the top-left?'
21 WALL-04 Cobblestone and brick walls: termites cannot chew them (later breaker bugs can) local-qwen · 1 run
"Let's do stone walls and brick walls, and then in later waves have new bugs show up that can break those... make sure it never gets too overwhelming." After this ticket BUILD > Defences has Cobblestone wall and Brick wall: placed and auto-tiled like fences (WALL-02's mask), much stronger, and immune to termites (ENEMY-03) - only the stone-breaker (cobblestone) and brick-breaker (brick, which also breaks cobblestone) of ENEMY-05 can damage them. Prices from DES-03.
- T0 unit: a termite attack on a cobble wall does no damage; a stone-breaker's does
- T1 vision: 'Is there a short grey cobblestone wall and a red brick wall, each joined into a line?'
22 DEF-03 New defences: the scarecrow (between crops), the sticky trap and the water trench sonnet · 2 runs
Counters you build (the operator: "make sure a lot of these have counters that are like items"). **Scarecrow**: small, placed on the corner BETWEEN four crop cells (it takes no plot - "you shouldn't have to take up a whole slot with a scarecrow"), it scares moths and locusts away within 2 cells. **Sticky trap**: a yard cell; a grasshopper that lands on it (or any bug that walks over it) is stuck 3 s; 5 uses, then it needs replacing. **Water trench**: auto-tiled yard cells that jumpers cannot cross and walkers cross at half speed.
- T0 unit: a scarecrow occupies no plot; a moth targeting a crop within 2 cells re-targets
- T0 unit: a grasshopper cannot cross a trench; a sticky trap holds 3 s and counts down uses
- T1 vision: 'Is there a scarecrow standing between crop plots (not on a plot), and a water channel in the grass?'
23 DEF-04 New defences: the frog pond, the bird house and the free-running dog sonnet · 2 runs
**Frog pond** (yard, 1 cell): two small frogs tongue-snap any bug within 1.5 cells, one at a time, 1.2 s apart. **Bird house** (yard): a songbird swoops on aphids and locusts within 4 cells, kills one every 3 s - the wide-area answer to small bugs. **Free-running dog**: an upgrade of DOG-01's dog - unclipped, he roams the whole farm and yard (never beyond), catches jumpers mid-air (the operator: "maybe he could be good for catching the bugs that jump over the walls" - hint it in his description, don't explain it). Never sad (rule 26).
- T0 unit: a frog pond kills an aphid within 1.5 cells; a bird ignores a beetle
- T0 capture_burst during a wave: the frog's tongue frames and the bird's flight are visible (pixels change around them)
- T1 vision: 'Is there a small pond with frogs and a bird house on a pole on the grass beside the farm?'
24 BLDG-01 New buildings: sprinkler, compost bin, tool shed, market stall and the rain-dance shrine sonnet · 2 runs
The BUILD tab gets more to build (the operator: "it's very scant"). **Sprinkler**: crops in a 3x3 around it grow 25% faster (a spray animation). **Compost bin**: every crop bugs eat completely adds compost; 10 compost = 1 fertilizer. **Tool shed**: +1 builder slot (the next hire). **Market stall**: refined products sell for +20% when sold through it. **Rain-dance shrine**: 3 levels; each level gives the Rain Dance +10% score (stars come easier). All are yard buildings built by builders (WORKER-02) with DES-03 prices.
- T0 unit: a crop next to a sprinkler grows 25% faster; one two cells away does not
- T0 unit: the shed raises the builder cap; the market stall pays +20% on a refined sale
- T1 vision: 'Is there a garden sprinkler spraying water over crop plots?'
25 DECOR-01 Decorations: flower beds, path stones, lanterns, benches - each with a tiny bonus local-qwen · 1 run
A Decor tab in BUILD with 6 pieces to start: flower bed, path stone, lantern, bench, bird bath, hay bale. Each sits in the yard (path stones also on farm walkways), sways or glows gently, and gives a tiny bonus so it is never only for looks (the operator agreed): e.g. +1% coins per flower bed within 3 cells of crops, capped at +5%. Priced from DES-03's decor bucket ($100 total, SPEC s8).
- T0 unit: bonuses apply and cap; Prices' decor ledger sums to the bucket
- T1 vision: 'Is there a flower bed and a lantern on the grass beside the farm?'
Tutorials and characters
26 TALK-01 Talk screens: tap the frog, Rose or the wizard for an RPG-style scene - big portrait, their place, a speech box, buttons sonnet · 1 run
"When you tap on him it should bring you to... a more high res version of their face where you're just talking to them... their face and their shop behind them... that whole scene is itself kind of like a piece of the menu." After this ticket tapping the frog (at the rain circle), Rose (in the Zen Garden) or the wizard (at the rune stone) opens a TALK screen: a 256-px portrait, their place as the background, a speech box with their line, 2-3 buttons (the frog: SPELL TREE; Rose: ZEN SHOP, TOUR; the wizard: SPELLBOOKS, RESET POINTS). Long lists open full-screen with the portrait shrunk to a corner (the operator: "you can decide which screen needs more real estate").
- T0 unit: tapping the frog's cell opens TALK with frog data; X closes
- T1 vision: 'Is a large painted portrait of a frog shown with a scenic background, a speech box and buttons?'
- T2 the operator likes the portraits
46 ZEN-03 Rose keeps the Zen Garden: her talk screen, an optional tour, seeds go to the seed bag, tending is a small mini-action sonnet · 1 run
"Maybe the pink hair girl can be the Zen shop... shopkeeper and maintainer... she just loves nature." "An optional tutorial for the Zen Garden... 'Would you like me to give you a tour?' If no: 'I see you're an expert.'... don't make players spend resources during a tutorial, and don't give them too much free stuff." "You can't buy a seed from the Zen shop without instantly planting it." "When it says 'needs a song' you just tap it and it's done - kind of lame." After this ticket Rose stands behind a counter in the Zen Garden (tap -> her talk screen: ZEN SHOP, TOUR); bought seeds go to the seed bag (FARM-04) and are planted by tapping a pot; a 'needs a song' bubble opens a 5-second mini-action (tap 4 notes in time) and the summary (MODE-02) shows the result.
- T0 unit: buying a seed adds it to the bag and plants nothing; tapping an empty pot with a bag seed plants it
- T0 unit: skipping the tour changes nothing in the save but a 'tourOffered' flag
- T1 vision: 'Is a young woman with pink pigtails standing behind a shop counter in a greenhouse?'
47 TUT-04 Tutorial 2 reworked: follow the frog to the rain circle and PLAY the Rain Dance over the farm; Lightning is your only free spell opus · 1 run
"You should follow the frog... walk over to a rain dance area on the map... this little shaman-looking patch up in the top left... you and the frog stand there and do your rain dance... while you're doing the rain dance the lightning strikes, and that looks awesome." After this ticket tutorial 2's dance beats (TutorialScript beats 12-14 today: a locked-input cutscene) become: the frog walks to the rain circle (new art, top-left of the world); a pointer has the player walk there; the player plays a short Rain Dance (20 s, easy pattern, the overlay of RHYTHM-04); rain falls and lightning strikes on the farm; the frog grants LIGHTNING with SPELL-09's lesson. The forced part still fits SPEC's 60-second rule (beats 1-5) - the dance is the one stretch allowed to run longer if the player is slow, never the rest.
- T0 unit: simulateOptimalRun of beats 1-5 + the dance stays within the SPEC limit
- T0 unit: after tutorial 2 the save owns exactly one spell: lightning
- T1 vision mid-dance: 'Is the farmer standing with a frog at a stone circle while rain falls and rhythm lanes show over the screen?'
48 TUT-05 Tutorial 3 reworked: the rock was always there, Rose's new lines, she teaches building and gives a free beehive and the first apiary opus · 1 run
"A rock spawned in for her to be hiding behind. Wherever the rock was, it should have been there the whole time... the user can remove the rock later using a builder and get some money for it." Rose's lines: "that's why dad gives me this - it keeps the bugs away... but if you would rather attract more of them, you can use this"; tease the never-ending swarm item: "I hear people use it to make lots and lots of money, but I think it's dangerous and scary." "The third tutorial should be that the girl helps you set up a couple fences and a beehive... here's incense, here's how building works since you have to place it." "It should tell you what the apiary is and how to use it... give you a free apiary." And by now the player has heard bugs eating. After this ticket tutorial 3 does all of that, short.
- T0 unit: a fresh world has the rock at Rose's spot from launch
- T0 unit: after tutorial 3 the save has the gifts, the apiary linked, and `freeApiaryGiven` true; a second apiary costs full price
- T1 vision during the build lesson: 'Is the young woman with pink pigtails on screen with a speech box, and a translucent incense ghost with a check button?'
49 TUT-06 Tutorial 1 sets up auto-farm; a new tutorial 4 teaches walls, breaches and REPAIR ALL before the first termites sonnet · 1 run
"You should absolutely set one of your builders to [auto-farm] in the tutorial... maybe in the first tutorial." "Probably a level four tutorial will be necessary... the answer is definitely. We need more tutorials. I love the tutorials we have so far. They're fast. They're sweet. They're to the point. And there's breaks between them." After this ticket tutorial 1 ends with one beat: tap a builder -> AUTO-FARM. And a new tutorial 4 fires the wave before the first termite wave (wave 19): the frog warns about termites, shows a breach route on the minimap, has the player tap REPAIR ALL after the wave, and points at cobblestone in BUILD (no free walls).
- T0 unit: after tutorial 1 one builder is on auto-farm
- T0 unit: tutorial 4 triggers once at wave 19 and never again
- T1 vision during tutorial 4: 'Is the frog explaining something while the minimap shows a dashed route toward the farm?'
Mini-games
42 MODE-02 Every mini-game ends on one summary screen: score, win or lose, what you got, how far to the next goal sonnet · 1 run
"It just ends abruptly. There's no victory. There's no defeat. There's no post game... a summary screen... here's your score, did you win, did you lose, what did you get for it, how close are you to getting your next objective... you need 800 to get this objective done and you only have 100." After this ticket the Rain Dance, Harvest Kitchen, the Chili Cookoff and the Zen Garden's tending mini-action all end on one SUMMARY screen in the UI kit: the result (WIN / LOSE / a score with stars), the rewards with their icons, and one progress line toward the mode's next goal; OK returns to where the mode was opened from.
- T0 unit: each mode's end produces a SummaryData with a goal line
- T1 vision after a Rain Dance: 'Is a summary screen shown with a score or stars, the rewards earned, and a progress bar toward a next goal?'
43 MUSIC-01 Nine Rain Dance songs, generated with ACE-Step in the farm theme's feel, ~100 to 140 BPM, each with its beat map local-qwen · 1 run
"Is it the same song every single time?" Yes - one track. "However many games it would take to unlock the full spell tree is how many different songs we need." 9 songs x 3 stars = 27 spell points. After this ticket nine 60-90-s songs are generated with ACE-Step 1.5 (Apache 2.0, already in the asset pipeline), in the farm theme's warm feel with a clear beat for tapping, rising from ~100 to ~140 BPM; each song's BPM and first-beat offset are MEASURED (not assumed) and stored with a generated beat map the rhythm engine reads.
- T0 9 files exist; songs.json has 9 rows with measured BPM within 3 of the target and an offset
- T0 each beat map's notes land within 30 ms of a detected beat
- T2 the operator likes at least 7 of 9 (PLAYTEST-QUEUE)
44 RHYTHM-04 The Rain Dance plays see-through over the farm: your farmer dances, every hit brings rain and lightning; a count-in; stars earn spell points sonnet · 2 runs
"While you and him are doing the rain dance, the Tap Tap Revolution knockoff game is actually being played, on a translucent layer, with your game still visible in the background... you can see me tapping is correlating to the lightning strikes and the rain really happening... maybe that can be how the rain dance looks in general." And: "it starts a bit too soon. It literally starts with you missing a note." After this ticket the Rain Dance is an overlay on the FARM (the black RhythmScreen goes): lanes and notes drawn semi-transparent over the farm, the farmer dancing in the middle, each hit a raindrop burst and every combo of 10 a lightning strike on the farm; a 2-s count-in (3, 2, 1) before the first note; 9 songs (MUSIC-01) in a song picker with stars per song; stars convert to spell points (1 per new star) and the summary (MODE-02) shows them.
- T0 unit: no note before 2.5 s; a new 2nd star adds exactly 1 spell point
- T0 capture_burst during play: rain FX changes frame to frame over the visible farm
- T1 vision mid-song: 'Can you see the farm behind semi-transparent rhythm lanes with falling notes, and the farmer dancing?'
45 CHEF-02 Kitchen and Cookoff: a move always exists, bombs and colour blasts, hundreds of recipes, spells you can see hit the chef, PEEK explained sonnet · 2 runs
"Make sure there's enough patterns so people can really win... power-ups... bombs... if you make a score you get a bomb to blow up the field." "Wait, there's only five recipes... we can have a database of a thousand recipes." "I don't really know what the Thunderclap or Lightning does to the enemy's board." "What is the PEEK button supposed to do?" After this ticket: the board reshuffles when no move exists; match 4 makes a bomb (clears 3x3 when matched), match 5 a colour blast (clears every piece of one kind); Harvest Kitchen draws its recipe cards from a table of 300+ real dishes using the farm's crops (own words); in the Cookoff each spell shows a visible strike on the chef's board (a bolt, scorched tiles) with a one-line caption; PEEK becomes 'Next Cook-off' with a one-line explanation.
- T0 unit: a board with no move reshuffles to one with >= 1 move; match-4 creates a bomb
- T0 unit: recipes.json has >= 300 entries, each using at least one farm crop
- T1 vision after a Cookoff LIGHTNING: 'Is there a visible lightning strike or scorched tiles on the opponent's board with a short caption?'