Overnight feature loop 2026-10-07 — task queue
Overnight feature loop 2026-10-07 — task queue
Section titled “Overnight feature loop 2026-10-07 — task queue”Chris, 2026-10-06 23:45: bosses ramped up, overall slightly too easy; more varied enemy attacks; an EVE-style interceptor / assault-frigate elite (tackles: web + scram, boost in, orbit, retreats to heal when damaged, packs coordinate, countered by a player web / web drone); an enemy that suppresses health regen to counter heavy lifesteal; camera zooms out with player speed, when a boss is present, and while an interceptor is attacking; continue multiplayer from other devices (local + internet).
Mechanics. A 10-minute cron loop runs one task per cycle through a Workflow: implementer
(own worktree, TDD, scripts/gate.sh) → adversarial reviewer → one fix round if needed → merge into
the integration branch overnight-2026-10-07 (pushed to origin). Nothing merges to main
overnight: another session is live on main, and balance/feel changes are Chris’s call. Every feel
change is behind a DevFlags toggle (default OFF) or a registered remote tunable, so the morning
Dev build can A/B it. Report: docs/research/2026-10-07-overnight-feature-loop.md.
Naming. Drone class interceptor already exists (drone_state.gd), so the enemy’s internal id
must differ (e.g. tackler); player-facing name “Interceptor” is fine.
Queue (status updated by the loop)
Section titled “Queue (status updated by the loop)”| # | Task | Status |
|---|---|---|
| T1 | Dynamic camera zoom | ✅ MERGED 649e5848 |
| T2 | Interceptor elite — sim + render | ✅ MERGED 35a01b99 |
| T3 | Interceptor packs + boost + zoom hook | ✅ MERGED 523eedaa |
| T4 | Player counters: web drone + stasis web | ✅ MERGED 5987f80d |
| T5 | Regen-suppressor enemy | ✅ MERGED 57c0ead4 |
| T6 | Boss ramp + overall difficulty | ✅ MERGED a6aff662 |
| T7 | Networked co-op design spec (LAN + internet) | ✅ MERGED 702a3d01 |
| T8 | LAN lockstep transport + loopback sync test | ✅ MERGED e3042beb |
| T9 | Dev-only host/join flow for LAN co-op | ✅ MERGED e3148943 |
| T10 | Morning handoff: Mac dev build + testing notes | ✅ MERGED b077ed36 |
Task specs
Section titled “Task specs”T1 — Dynamic camera zoom
Section titled “T1 — Dynamic camera zoom”Render-only (main.gd camera; /sim untouched). Camera zoom target eases smoothly (no snapping,
critically-damped or exponential lerp) from a base value toward a zoomed-OUT value driven by:
(a) player speed above base move speed (faster ship → wider view, capped), (b) a boss alive,
(c) a hook extra_zoom_out other systems can raise (T3 uses it for interceptors). Combine as the MAX of
the contributions, not the sum. Total zoom-out cap 1.5–2.0x world shown (Chris: “50 to 100%”),
tunable. Respect the touch readability zoom already applied (main.gd ~line 324) and everything that
reads camera.zoom (threat radar, offscreen indicators, world-size calc ~line 2401) — check every
consumer still behaves. DevFlags toggle dynamic_zoom (default off) + Debug Settings row + Remote
Console parity (memory: every Debug Settings row must reach the console). Tunables for the caps
registered via the tunables registry. Test: a headless/GUT test of the pure zoom-target function
(speed, boss, extra inputs → target), not just the node.
T2 — Interceptor elite (sim + render)
Section titled “T2 — Interceptor elite (sim + render)”Read docs/architecture/enemies-bosses-survival.md, sim/elite_kit.gd, skill bh-add-content.
New enemy type (internal id NOT interceptor; e.g. tackler), spawned as an elite-tier threat in
survival (behind DevFlags tackler_spawns, default OFF so the seed-1234 baselines are untouched —
verify they are). Behaviour state machine (pure sim, SeededRng only):
APPROACH (fast) → ORBIT at close range (~120–180 px) around the nearest pilot (_nearest_pilot),
while tackling: web (strong pilot move-speed slow, e.g. −50–60%) and scramble (warp blocked —
reuse the existing warp_scramble_timer / dash_cd mechanism EliteKit ATK_WARP uses) →
when HP drops below a threshold (e.g. 40%) DISENGAGE: flee at high speed away from the pilot, regen HP
over time while out of range → RE-ENGAGE when healed. Tough but killable; worth real XP (pass
biomass_v explicitly; assert XP via the real spawn→kill→_sweep_dead path). Render consumer in the
SAME chunk: distinct ship sprite/look, a visible web tether + scram indicator on the player while
tackled, and a visible retreat/regen state. Add a VFX library manifest entry + score. Tunables for all
numbers. Bestiary/codex entry if the codex lists enemies.
T3 — Interceptor packs + speed boost + zoom hook
Section titled “T3 — Interceptor packs + speed boost + zoom hook”Builds on T2. (a) Speed-boost burst (“MWD”): a short big speed burst used to close in, to settle into
orbit, and to escape when disengaging, with a visible boost trail and a cooldown. (b) Packs: when
2+ tacklers are alive they coordinate — share the target, spread orbit angles evenly around it, stagger
so one tackles while others hold just outside, and a damaged one retreats while a healthy one swaps in.
Spawn them in groups of 2–3 later in the run. (c) While any tackler is engaged with a pilot, raise the
T1 camera extra_zoom_out so the whole pack and its orbit are visible (Chris: zoom out 50–100% while
it attacks). Tests for coordination invariants (angle spread, one-tackler-at-a-time if that rule is
chosen).
T4 — Player counters: web drone + stasis web
Section titled “T4 — Player counters: web drone + stasis web”Chris: “the player needs to counter by having a web or a web drone”. Add a web drone class (the
drone system: sim/drone_director.gd, docs/architecture/coop-and-pilots.md, shop drone trees) that
locks the nearest elite/tackler and heavily slows it (and cancels its boost) — making orbiting/escape
hard. And/or a player upgrade “Stasis Web” (level-up card) that webs the nearest fast elite on a
cooldown. Both must visibly render. Unlockable/obtainable in a normal run when tackler_spawns is on
(or a dev-grant path) so it can be tested tomorrow. Drone uses drone_rng only. Shop prices: propose,
mark as Chris’s call.
T5 — Regen-suppressor enemy
Section titled “T5 — Regen-suppressor enemy”Counter to high lifesteal/regen builds. New enemy (e.g. “Nullifier”/“Blight”): projects an aura;
while a pilot is inside, that pilot’s passive regen AND lifesteal/leech healing are reduced (e.g.
−75%), stacking sensibly with multiple. Visible aura ring on the enemy and a HUD/ship indicator on the
player when suppressed (render consumer same chunk). Spawn behind DevFlags suppressor_spawns
(default off). Find EVERY heal path (regen, still-regen ramp, lifesteal via lifesteal_dealt in
_sweep_dead, Leech-related, pickups) and decide which are suppressed — document it. Tests through
the real heal paths.
T6 — Boss ramp + overall difficulty
Section titled “T6 — Boss ramp + overall difficulty”Chris: bosses need ramping up more; overall slightly too easy. Investigate current boss HP/damage/
attack cadence and run-difficulty curves (exponential scaling b258-dev-003 exists — read memory
notes in docs; check docs/architecture/enemies-bosses-survival.md and remote-config tunables). Use the
headless soak / autopilot / economy-careers tools to MEASURE before and after (e.g. boss time-to-kill,
damage taken per boss, run survival time). Implement as a DevFlags hard_tuning toggle (or tunables
overlay) applying: boss HP/damage multipliers, faster boss attack cadence or extra attack patterns,
and a modest global difficulty bump. Do NOT change defaults; Chris decides after playing. Record
measurements in the report.
T7 — Networked co-op design spec
Section titled “T7 — Networked co-op design spec”Design doc only: docs/superpowers/specs/2026-10-07-networked-coop-design.md. Read
coop-and-pilots.md, determinism rules, net/. Recommend architecture: deterministic input-lockstep
(the sim is deterministic + seeded, so exchange per-tick InputState only) vs host-authoritative
snapshots; input delay / rollback trade-offs; checksum desync detection (state hash per N ticks);
LAN discovery (UDP broadcast) + ENet; internet via a relay (Cloudflare Durable Object WebSocket relay
fits the existing CF stack) or WebRTC with STUN/TURN; tvOS/iOS networking constraints (local network
permission prompt, Bonjour NSBonjourServices/NSLocalNetworkUsageDescription plist keys); how many
pilots tick() supports today. Search the web for current Godot 4.x multiplayer state — don’t trust
training data. Break into phases. Verify claims against code.
T8 — LAN lockstep transport + loopback sync test
Section titled “T8 — LAN lockstep transport + loopback sync test”Per T7’s recommendation (lockstep unless T7 found a blocker). A net/-side (NOT /sim) lockstep
session: transport abstraction (ENet in prod, in-memory loopback for tests), per-tick input exchange
with a fixed input delay, stall when inputs missing, periodic state checksum compare with desync
report. GUT test: two Sim instances driven through the loopback transport with scripted inputs
for both pilots stay checksum-identical for N thousand ticks; a deliberately-perturbed one is detected.
Headless ENet localhost test if feasible.
T9 — Dev-only host/join flow for LAN co-op
Section titled “T9 — Dev-only host/join flow for LAN co-op”Debug Settings (dev builds only): “Host LAN co-op” / “Join LAN co-op” (UDP broadcast discovery, manual IP fallback). Hosting starts a run once a peer joins; each device controls its own pilot via the T8 session. Add the iOS/tvOS local-network plist keys to the platform presets ONLY if safe — otherwise document exactly what is needed (platform/tvos is guarded; note it for Chris). Goal: Chris can try two devices on the same Wi-Fi tomorrow, or at least two Mac instances.
T10 — Morning handoff
Section titled “T10 — Morning handoff”Merge origin/main into overnight-2026-10-07, gate green, push. Build a Mac dev build if the
bh-deploy-mac-dev path works from a worktree; otherwise write the exact device-install steps
(skill bh-worktree-device-install). Write a “How to test tomorrow” section in the report: every
DevFlag added, where the toggles are, what to look for, and the open Chris calls.