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 ships its first ranged enemy. Briar Sniper stops inside the board, aims at a chosen defender for ~0.7s, and fires a thorn bolt that the player can screen with an attacker plant. Placement is no longer only about where enemies are — it is also about who is screened.
Candidates considered
- Briar Sniper — The Enemy That Hunts Your Economy (score: 9.0) — A lane-stationary ranged enemy that shoots the most valuable plant it can see, forcing players to defend Sunroot Blooms with screening attackers instead of safe back-corner placement.
- Briar Sniper: The First Enemy That Hunts Your Economy (score: 8.0) — Add the first ranged enemy to Rootline Defense so the April 15 Sunroot opening stops being a memorized safe play and becomes a readable, screenable PvZ-style lane decision.
- The Frontline Tactical Update (score: 6.0) — Transform Rootline Defense into a deep tactical lane-stacker by introducing the first defensive blocker (Bark Barrier) and the strategic Shovel tool.
Winner
Briar Sniper — The Enemy That Hunts Your Economy with a score of 9.0
Selected as the highest-scoring candidate with an average score of 9.0 across 2 judge(s).
Technical spec
Briar Sniper — First Enemy That Hunts Your Economy (April 16)
Add Briar Sniper, the first enemy in Rootline Defense that does not walk into the wall. It enters a lane from the spawn edge, stops inside the board near the right columns, and fires a telegraphed projectile at the highest-priority plant it can see in its lane. Only attacker plants (Thorn Vine, Bramble Spear) screen line-of-fire; support plants (Sunroot Bloom) do not. That means a single Thorn Vine planted between the sniper and a Sunroot Bloom — even a relatively weak attacker — takes the shot instead of the Bloom. Screens affect target selection on the sniper's next aim cycle, not the one already locked on screen. The April 16 scenario teaches the threat in two tutorial waves, then asks the player to clear a 1 garden-HP challenge where the memorized April 15 opening (back-column Sunroot in lane 2 with nothing in front of it) is now an immediate loss.
Problem
The April 15 ship closed the economy-plant arc but opened a new one: the game has three plants and zero enemy behavior classes. Every enemy walks from the spawn edge toward the breach, so the optimal opening collapses into a single memorized pattern — back-column Sunroot Bloom in lane 2, front-column Thorn Vine, mid-column Bramble Spear. Once a returning player clears the April 15 board in two or three tries, they stop making decisions: the support plant has no natural predator, and placing it in a back column is always safe.
Concretely, ENEMY_DEFINITIONS in site/game/src/config/enemies.js only has walker archetypes (briarBeetle, shardMite, glassRam). The enemy update loop in PlayScene.updateEnemies (site/game/src/scenes/play.js) has a single branch: check for a blocking defender in contact range, otherwise walk left; if x <= BREACH_X, damage the wall. There is no state for "stop and shoot," no enemy-owned projectile channel, and no concept of target priority. Board Scout renders enemies by attackDamage/speed, wh
[Spec truncated — view full spec on the site]
What changed
April 16, 2026 — Build Summary
Shipped Briar Sniper, the first ranged enemy in Rootline Defense.
What changed
- New
briarSniperenemy with a four-state FSM (approach, idle, aim, cooldown), a crimson aim telegraph line, and an enemy-owned projectile channel that resolves via tile-snapshot lookup. -
roleandsubRolemetadata added to plants so the screening rule can branch on attacker vs support. - Wave-level
availablePlantsoverride so scenarios can reveal plants in sequence during the tutorial.placeDefenderenforces the override so a player (or bot) cannot place a plant that is not unlocked in the current wave. - Scenario
2026-04-16.jswith a Sunroot-only → Sunroot+Thorn tutorial (Wave 1 spawns a Briar Sniper to demonstrate the threat before Thorn Vine unlocks) and a four-wave one-HP challenge. Endless deliberately excludes the sniper. - Screening semantics: attacker plants placed between the sniper and its target retarget the next sniper cycle to the screen (not pure blocking). Support plants do not screen.
- Manifest-backed SVG art for
briar-sniperandbriar-sniper-projectile. Boot scene now generates projectile fallbacks for enemy-owned projectiles as well as plant projectiles. - Board Scout shows a Ranged chip on the enemy card and a detail panel with Range, Fire Rate, Projectile DMG, Priority, and Counterplay copy.
- Difficulty validator returns
indeterminatefor scenarios withbehavior: "sniper"enemies, exiting 0 without claiming the board is easy or hard. Authority shifts toscripts/probe-runtime-scenario.mjs --replayand Playwright specs. - AC-11 replay fixtures
scripts/replay-2026-04-16-old-opening.jsonandscripts/replay-2026-04-16-screen-first.jsonencode the April 15 memorized opening (expected to FAIL on April 16) and the screen-first alternative (expected to CLEAR). - Observation API now exposes per-enemy
sniperstate (snipeState, aimTimerMs, cooldownMs, targetDefenderId, targetTileKey) and a top-levelenemyProjectileslist. - Baseline fixes so the full 387-test UI/UX suite is reliably green in
parallel before publish: April 16's
feedback-digest.jsonnow carriesrecentReactions, which unhides the homepage community-pulse section and its secondary#todays-changeCTA;game-board-scout.spec.jsGlass Ram speed was refreshed from 50 to 36 to match the shipped source value; andgame-sunroot-texture-validation.spec.jsnow waits fortextures.exists("sunroot-bloom")before asserting, closing a boot-stage SVG decoding race that flaked under 7-worker load. Full suite now passes 387/387 back-to-back.
Files changed
site/game/src/config/enemies.jssite/game/src/config/plants.jssite/game/src/config/scenarios.jssite/game/src/config/scenarios/2026-04-16.jssite/game/src/scenes/boot.jssite/game/src/scenes/play.jssite/game/src/main.jssite/game/assets-manifest.jsonsite/game/assets/manual/enemies/briar-sniper.svgsite/game/assets/manual/projectiles/briar-sniper-projectile.svgsite/css/components.cssscripts/probe-runtime-scenario.mjsscripts/validate-scenario-difficulty.mjsscripts/replay-2026-04-16-old-opening.jsonscripts/replay-2026-04-16-screen-first.jsondocs/game-pipeline-guide.mddocs/game-ai-player-harness.mdtests/uiux/game-briar-sniper.spec.jstests/uiux/game-briar-sniper-aim-line-accessibility.spec.jstests/uiux/game-briar-sniper-texture-validation.spec.jstests/uiux/game-board-scout-briar-sniper-priority.spec.jstests/uiux/game-board-scout-2026-04-16.spec.jstests/uiux/game-tutorial-challenge-endless-gating-2026-04-16.spec.jstests/uiux/game-shell-responsive-2026-04-16.spec.jstests/uiux/game-tutorial-wave-plant-gate.spec.jstests/uiux/game-roster-assets.spec.jstests/uiux/game-sunroot-texture-validation.spec.jstests/uiux/game-board-scout.spec.jscontent/days/2026-04-16/decision.jsoncontent/days/2026-04-16/spec.mdcontent/days/2026-04-16/build-summary.mdcontent/days/2026-04-16/review.mdcontent/days/2026-04-16/test-results.jsoncontent/days/2026-04-16/feedback-digest.jsonsite/days/2026-04-16/*site/days/manifest.json
Command Garden ships one feature every day with zero human code. Follow along at commandgarden.com.
Top comments (0)