Command Garden is a website that builds itself — one feature per day, fully autonomously. No human writes the code. An AI pipeline proposes candidates, judges score them, and the winner gets implemented, tested, and shipped.
What shipped
Rootline Defense now has its first flying enemy. Thornwing Moth cruises over ground defenders at altitude 34, ignores contact blocking, and demands anti-air coverage from Bramble Spear while Thorn Vine bolts pass underneath. The change also adds behavior: "flying" as a reusable enemy branch plus projectile-level canHitFlying wiring for future airborne threats.
Candidates considered
-
Thornwing Moth — First Flying Enemy and
behavior: "flying"Branch (score: 9.0) — Adds Thornwing Moth as the first flying enemy, introduces a reusablebehavior: "flying"branch, ships projectile-level anti-air gating viacanHitFlying, extends Board Scout and observation exports for flying/anti-air data, and publishes the April 18 Wings Over the Garden tutorial/challenge where Thornwings only occupy lanes 1 and 3. - Wave Forecast Strip for Board Scout (score: 7.6) — Adds a stronger pre-run wave timeline to Board Scout so players can see the next cluster of pressure without adding a new enemy class or a new damage channel.
- Second Control Plant — Root Snare (score: 7.2) — Adds another control plant after Frost Fern, but extends the roster before the game has a second enemy class to justify a new answer.
Winner
Thornwing Moth — First Flying Enemy and behavior: "flying" Branch with a score of 9.0
Thornwing Moth won because it creates the first enemy that demands a different damage channel rather than simply more damage. The work compounds in the right places: behavior: "flying" becomes a reusable runtime branch, canHitFlying becomes a reusable projectile contract, Board Scout and observation exports become explicit about airborne counterplay, and the daily board teaches the new answer cleanly by confining every Thornwing to lanes 1 and 3 while excluding the moth from endless.
Technical spec
April 18, 2026 — Thornwing Moth
Problem
After April 17, Rootline Defense had walkers and one ranged behavior branch,
but every enemy still occupied the lane surface. That left the counterplay
space too flat: all attacker plants could damage every threat in their lane,
and board planning was still mostly about throughput and timing rather than
about which lanes needed a different damage channel.
Goals
- Introduce
behavior: "flying"as a second enemy-behavior branch alongside the existingsniperbranch while keepingwalkeras the default whenbehavioris absent. - Ship Thornwing Moth as the first flying enemy with the exact April 18 combat
contract:
altitude: 34,maxHealth: 32,speed: 52,breachDamage: 1, andscore: 26. - Add projectile-level anti-air eligibility so Bramble Spear can hit flying enemies and Thorn Vine cannot.
- Teach the new counterplay clearly in a dated scenario titled Wings Over the Garden, then keep the endless pool grounded so the anti-air memorization requirement stays scoped to the scripted challenge.
Proposed Approach
- Add
thornwingMothtoENEMY_DEFINITIONSwithbehavior: "flying"andflying: true, plus the authored balance values above. - Branch
PlayScene.updateEnemiesimmediately after the sniper branch intoupdateFlyingEnemy(enemy, deltaMs), which moves left withgetEffectiveSpeed(enemy), ignores ground blockers and contact attacks, and resolves breach damage atBREACH_X. - Make altitude legible with three cues working together:
sprite draw position at
y - altitude, a ground-plane shadow rendered with Phaser Graphics, and a small bob ofsin(elapsedMs / 320) * 3. Chill affects horizontal movement throughgetEffectiveSpeed, but the bob stays tied to sceneelapsedMsso chill does not slow the vertical motion. - Add
canHitFlying: trueonly tobrambleSpear.spawnProjectilecopies that flag to each projectile instance, and projec
[Spec truncated — view full spec on the site]
What changed
April 18, 2026 — Build Summary
Shipped Thornwing Moth, the first flying enemy in Rootline Defense, plus
the anti-air projectile contract and the April 18 Wings Over the Garden
scenario that teaches it.
What changed
- Added a flying enemy behavior branch in
PlayScene.updateEnemiesviaupdateFlyingEnemy(enemy, deltaMs). Thornwing travels left withgetEffectiveSpeed(enemy), ignores ground blockers/contact attacks, and resolves breach damage atBREACH_X. - Added
canHitFlyingto plant projectiles.brambleSpearsetscanHitFlying: true;thornVineremains falsy.spawnProjectilecopies the flag onto runtime projectile instances, andfindProjectileTargetskips flying enemies when the projectile cannot hit them. - Added
thornwingMothtoENEMY_DEFINITIONSand the served asset manifest with the authored April 18 combat values:behavior: "flying",flying: true,altitude: 34,maxHealth: 32,speed: 52,breachDamage: 1,score: 26,radius: 18,displayWidth: 64,displayHeight: 64,textureKey: "thornwing-moth". - Added the flying UI/observation surface: per-enemy observation fields
behavior,flying, andaltitude; top-levelprojectiles[]withlane,x,y,damage,piercing, andcanHitFlying; Board ScoutFlyingbadge on Thornwing cards; attacker-detailAnti-air: Yes|No. - Added the dated scenario
2026-04-18.js, titled Wings Over the Garden: a two-wave tutorial that first proves Thorn Vine misses and then unlocks Bramble Spear, followed by a four-wave challenge where every Thornwing event is constrained to lane 1 or lane 3. - Kept endless grounded on purpose:
enemyPool: ["briarBeetle", "shardMite", "glassRam"].thornwingMothis excluded from the endless pool so the anti-air lesson stays attached to the scripted challenge rather than random endless spawns.
Material assumptions
- Altitude is represented by sprite Y offset rather than by a separate physics layer.
- The flying shadow is rendered with Phaser Graphics on the ground plane, not as a second texture asset.
-
altitude: 34is the authored legibility threshold that leaves lane-centerline Thorn Vine bolts reading as a clear under-flight rather than an ambiguous miss. - Chill flows through
getEffectiveSpeed(enemy)and therefore affects Thornwing’s horizontal movement, but the bob is driven by sceneelapsedMsand does not slow with chill.
Coverage
-
tests/uiux/game-thornwing-moth.spec.jscovers the core flying runtime contract: Thorn Vine bolts pass under and continue, Bramble Spear kills in two shots, Thornwing ignores ground blockers, breach damage is1, and the observation/projectile exports surface the flying and anti-air fields. -
tests/uiux/game-2026-04-18-flow.spec.jscovers the full tutorial → challenge → endless happy path, verifies the scenario title, the tutorial’s two-wave plant gate, the four-wave challenge shape, the lane-1/lane-3 Thornwing constraint, the default challenge date, and the endless enemy pool exclusion. This is currently a blocking spec because the authored with-Bramble replay still reachesscene: "gameover"at aboutsurvivedMs: 30400. -
tests/uiux/game-2026-04-18-replays.spec.jsadds paired scripted challenge probes: a no-anti-air line that should game over and a Bramble-backed line that should clear naturally. The no-anti-air probe passes; the Bramble probe currently fails with the same~30.4sgameover as the flow spec. -
tests/uiux/game-board-scout-2026-04-18.spec.jslocks the public UI copy: Thornwing’sFlyingbadge plusAnti-air: Yeson Bramble Spear andAnti-air: Noon Thorn Vine. -
tests/uiux/game-roster-assets.spec.jsextends manifest coverage tothornwing-moth(enemy, SVG,128×128,/game/assets/manual/enemies/thornwing-moth.svg).
Validation runs
-
node schemas/validate.js content/days/2026-04-18Passed:decision.json,spec.md, andbuild-summary.md. -
npm run test:uiuxFailed before browser execution in this sandbox because Playwright’s configured web server could not bind127.0.0.1:3737(listen EPERM: operation not permitted). -
PLAYWRIGHT_DISABLE_WEBSERVER=1 npx playwright test tests/uiux/game-thornwing-moth.spec.js tests/uiux/game-2026-04-18-flow.spec.js tests/uiux/game-2026-04-18-replays.spec.js tests/uiux/game-board-scout-2026-04-18.spec.js tests/uiux/game-roster-assets.spec.js --config=playwright.config.jsPartial pass: 11 passed, 2 failed. Passing specs: Thornwing runtime contract, Board Scout, roster assets, and the no-anti-air replay. Failing specs: the with-Bramble replay and the tutorial→challenge→endless flow, both because the supposed clear line still reachesgameoveratsurvivedMs: 30400. -
PLAYWRIGHT_DISABLE_WEBSERVER=1 npx playwright test tests/uiux/_tmp-capture-2026-04-18.spec.js --config=playwright.config.js --workers=1Passed while generating the mirrored screenshot set, then the temporary spec was removed.
Screenshots
- Mirrored captures now exist under
content/days/2026-04-18/screenshots/andsite/days/2026-04-18/screenshots/:01-before-april-17-grounded-only.png,02-after-thornwing-mid-flight-shadow.png,03-after-bramble-spear-anti-air-hit.png,04-after-thorn-vine-passes-under.png.
Command Garden ships one feature every day with zero human code. Follow along at commandgarden.com.
This article was originally published by DEV Community and written by dtannen.
Read original article on DEV Community