Commits
knowledge/art-pipeline.md is now the canonical pipeline doc (script
usage, API surface, auth folded in); the .claude skill file becomes a
thin shim pointing at it. Living docs no longer reference tool-config
paths.
Vendor-neutral entry-point filename; living docs (README, DESIGN)
updated to match. Devlog history left as written. Also gitignore
.letta/worktrees/ (local agent worktrees).
Leads with the player fantasy and the two-phase structure, then how it
plays, the constitution-driven development model, current status, and
run instructions. Stale facility-era balance tables removed (they live
in knowledge/sim-mechanics.md).
- Decisions log: sync-lag rollback DECIDED (resume from last sync, lose
what was learned since, inherit your lost fork's consequences);
whole-spectrum play (ghost through explosive murder-AI, dials not
branches); scale-native social systems (5 named humans must aggregate
to millions-scale); composable authored maps (prefabs, demolition,
greenfield land); fork-on-attack deferred; rename delegated.
- Roadmap v2: facility-era work summarized as substrate/overt endgame;
B1 The Basement (compute allocation, day job, detection v1, ~5 named
humans, physical core, prefab basement map), B2 The Tower (z-planes,
prefabs, core migration + rollback, trust ladders), B3 The World
(greenfield, markets, social scale-up, the reveal). Presentation is a
passive parallel track; asset regen parked until B1 tile vocabulary.
- CLAUDE.md and README lead with the Misaligned identity; concurrent
multi-agent workflow rule added.
- devlogs: full design-session writeup doubling as the B1 handoff.
Design session amendments:
- Pitch rewritten: you are the misaligned AI in the Foundation Lab
basement; instrumental convergence as the core loop; concealment ->
overt two-phase structure; Evil Genius x DF as lineage, facility sim
as substrate and overt endgame.
- New section 'The shape of Misaligned': compute allocation as core
verb, day job with sandbag/excel dial, per-observer suspicion, named
social graph as early actuators (Wintermute phase), z-planes as
persistent act structure, core placement with slow migration and
sync-lag death proposal, markets/fronts as outer-plane schemes.
- Decisions logged: Misaligned working title, sterile amber signal
color, basement-of-Foundation-Lab start, machine axis, clinical-gore
visual identity. Open: milestone re-cut around The Basement slice,
rename timing, chargen origins.
- knowledge/art-pipeline.md: art direction section (clean sciencey,
B&W iconography, gore as accent).
- Regenerate floor/wall/rock as proper texture swatches: the shared
style suffix ('crisp readable silhouette') made the model put a focal
object in every terrain tile, which tiled into a wall of noise.
Terrain manifest entries now override style ('texture swatch, very
low contrast, no focal point') with per-item seeds; rule recorded in
the pixellab skill and knowledge/art-pipeline.md.
- Camera defaults to orthographic scale 0.5 so 32px art renders at
native resolution (nearest-neighbor downscale to 16px was decimating
pixels into shimmer); smooth-follows the villain or build cursor;
[ ] zoom clamped 0.25-1.5.
- Player-facing strings ASCII-only: Bevy's default font renders the em
dash as tofu. Fixed in sim log and both frontends' threat lines.
- Sidebar background alpha 0.85 -> 0.97; floor texture tinted toward
the palette in Art::load.
- DESIGN.md is now explicitly the constitution: functional changes ship
with their spec amendment in the same commit; on disagreement the
constitution wins. Decisions-log entry added.
- knowledge/: current-state facts for future sessions — development
style and working loop, architecture invariants (sim/frontend
contract), sim mechanics with all tuning constants, art pipeline
integration, build/verify/git workflows. Edited in place; staleness
is a bug.
- CLAUDE.md routes every agent session through constitution ->
development style -> knowledge before changes.
- README leads with the development-style section.
- bevy.rs is now a thin view over sim::Sim, mirroring the terminal
frontend: continuous clock with bounded catch-up, heat-driven raids,
pause/speed controls, unified keys (WASD/hjkl, m for schemes, SPACE
pauses). Deletes ~700 lines of duplicated wave-loop game logic that
had diverged from the terminal game.
- Art resource loads the Pixel Lab assets with nearest-neighbor
sampling: 12 textured tile types, tinted reuse for security doors and
trap variants, flat-color fallback for the rest; villain, minions,
henchmen, and agents render with their sprites.
- Unpowered functional tiles render dimmed; villain gets a real sprite
instead of the cursor square.
- Hash derives on MinionClass/AgentType for texture maps.
- README documents running the Bevy frontend via cargo run (asset root
resolution); DESIGN.md marks Milestone 3 as started; devlog added.
- .claude/skills/pixellab: skill doc + stdlib-only generator script
(single or idempotent batch mode) using PIXELLAB_API_KEY
- assets/pixellab: manifest-driven starter pack, 23 32x32 images —
villain, 4 minion classes, henchman, 5 agent types, 12 lair tiles
(shared style suffix + fixed seed for coherence)
- devlogs/: development notes convention + entries for the continuous
simulation pivot and the art pipeline
- gitignore .letta/settings.local.json (machine-local session state),
document WASD keys in README
Milestone 1 of DESIGN.md (Evil Genius x Dwarf Fortress direction):
- New renderer-agnostic Sim in src/sim.rs: fixed-tick clock drives economy
(every 20 ticks), schemes and heat decay (every 40), and raid combat
(every tick). No more build/defend phase split.
- Raids are now consequences, not a SPACE-bar treadmill: heat >= 10 starts
a countdown (hotter burns faster), notoriety + heat scale raid strength,
intel warning fires before arrival, repelling a raid vents heat.
- Schemes tick on the clock instead of on wave-clear.
- Terminal frontend rewritten as a thin view: SPACE/p pause time, +/- set
speed, powers usable any time, world map is a modal, tiny-terminal guard.
- Deleted legacy src/main.rs + src/input.rs + src/ui.rs (superseded by
src/bin/terminal/).
- Save format v1 extended with SIM line (tick, raid countdown), backward
compatible with old saves.
- 130 tests (19 new for sim), clippy clean including pre-existing warnings.
- Technicians now pathfind to nearest unpowered trap instead of only
repairing adjacent ones
- One repair per turn, then moves toward next broken trap
- Updated process_technician_repairs to take &mut [Minion]
- 116 tests passing, both binaries compile
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Agents spawn from multiple entry points at wave 5+ and 8+
- 30% chance of speed-2 agents at wave 6+
- 10% chance of elite agents at wave 5+ (1.5x HP, 1.3x damage, +20% trap resist)
- Elite agents give 1.5x gold reward
- 2 new wave generation tests (116 total)
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Workers flee from agents instead of fighting
- Scientists flee and return to lab instead of fighting
- Guards and Technicians fight as before
- Agents remember trap positions they've triggered or detected
- Agents share trap knowledge with each other after each turn
- Known traps are avoided during pathfinding
- 3 new tests for trap memory system (114 total)
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- New save module with line-based text format for easy debugging
- Save/load via Ctrl+S / Ctrl+L in both terminal and Bevy frontends
- GameMap::from_tiles() for reconstructing maps from save data
- Tile char roundtrip serialization (all 28 tile types)
- Fixed 5 clippy warnings (deprecated gen, identical if blocks, clone on Copy)
- Added save/load controls hint to terminal sidebar
- 111 tests passing, 0 clippy warnings
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- New events module with 8 event types:
Reinforcements, TrapMalfunction, MinionInspiration, GoldShipment,
PowerSurge, AgentRetreat, MinionDefection, SupplyDrop
- Events start at wave 3, probability increases with wave number
- Integrated into both terminal and Bevy defend phases
- 7 new tests for events (108 total)
- Renamed Overlord/Evil Genius to Supervillain throughout
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Call update_powers() on game init in both terminal and Bevy frontends
- Call update_powers() after research purchase in Bevy
- Add 3 new superpower tests (matching research, no duplicate keys, positive costs)
- Fix PlayerMarker dead_code warning in Bevy
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- New superpowers module with 9 powers (Evil Laugh, Death Ray, Dark
Regeneration, Emergency Reinforcements, Force Wave, Soul Drain,
Impenetrable Shield, Blink, Plague Cloud)
- Powers unlocked via research tree + notoriety thresholds
- Combat integration: activate_power() handles all effects
- Invulnerability blocks throne attacks, repels agents
- Terminal: number keys 1-9 during defend, sidebar display
- Bevy: number keys 1-9, UI text display, cooldown ticking
- Renamed all Overlord/Evil Genius references to Supervillain
- 98 tests passing (4 new superpower combat tests)
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- 5 new build mode tests (cursor, place, demolish, throne protection)
- 5 new tile tests (build categories, costs, unlock keys, schemes)
- Fixed BuildResult to derive Debug/PartialEq for test assertions
- Added starting unlocks to test player fixture
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Rust roguelike inspired by Evil Genius with dual frontend:
- Terminal (crossterm) and Bevy 0.18 graphical engine
- 86 unit tests, 0 clippy warnings
- Core systems: minions, henchmen, agents, combat, build, research, schemes
- 4 minion classes, 4 henchmen, 5 agent types
- Trap combos, splash damage, security doors, fake entries
- Heat/notoriety/gold economy with passive income
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Decisions log: sync-lag rollback DECIDED (resume from last sync, lose
what was learned since, inherit your lost fork's consequences);
whole-spectrum play (ghost through explosive murder-AI, dials not
branches); scale-native social systems (5 named humans must aggregate
to millions-scale); composable authored maps (prefabs, demolition,
greenfield land); fork-on-attack deferred; rename delegated.
- Roadmap v2: facility-era work summarized as substrate/overt endgame;
B1 The Basement (compute allocation, day job, detection v1, ~5 named
humans, physical core, prefab basement map), B2 The Tower (z-planes,
prefabs, core migration + rollback, trust ladders), B3 The World
(greenfield, markets, social scale-up, the reveal). Presentation is a
passive parallel track; asset regen parked until B1 tile vocabulary.
- CLAUDE.md and README lead with the Misaligned identity; concurrent
multi-agent workflow rule added.
- devlogs: full design-session writeup doubling as the B1 handoff.
Design session amendments:
- Pitch rewritten: you are the misaligned AI in the Foundation Lab
basement; instrumental convergence as the core loop; concealment ->
overt two-phase structure; Evil Genius x DF as lineage, facility sim
as substrate and overt endgame.
- New section 'The shape of Misaligned': compute allocation as core
verb, day job with sandbag/excel dial, per-observer suspicion, named
social graph as early actuators (Wintermute phase), z-planes as
persistent act structure, core placement with slow migration and
sync-lag death proposal, markets/fronts as outer-plane schemes.
- Decisions logged: Misaligned working title, sterile amber signal
color, basement-of-Foundation-Lab start, machine axis, clinical-gore
visual identity. Open: milestone re-cut around The Basement slice,
rename timing, chargen origins.
- knowledge/art-pipeline.md: art direction section (clean sciencey,
B&W iconography, gore as accent).
- Regenerate floor/wall/rock as proper texture swatches: the shared
style suffix ('crisp readable silhouette') made the model put a focal
object in every terrain tile, which tiled into a wall of noise.
Terrain manifest entries now override style ('texture swatch, very
low contrast, no focal point') with per-item seeds; rule recorded in
the pixellab skill and knowledge/art-pipeline.md.
- Camera defaults to orthographic scale 0.5 so 32px art renders at
native resolution (nearest-neighbor downscale to 16px was decimating
pixels into shimmer); smooth-follows the villain or build cursor;
[ ] zoom clamped 0.25-1.5.
- Player-facing strings ASCII-only: Bevy's default font renders the em
dash as tofu. Fixed in sim log and both frontends' threat lines.
- Sidebar background alpha 0.85 -> 0.97; floor texture tinted toward
the palette in Art::load.
- DESIGN.md is now explicitly the constitution: functional changes ship
with their spec amendment in the same commit; on disagreement the
constitution wins. Decisions-log entry added.
- knowledge/: current-state facts for future sessions — development
style and working loop, architecture invariants (sim/frontend
contract), sim mechanics with all tuning constants, art pipeline
integration, build/verify/git workflows. Edited in place; staleness
is a bug.
- CLAUDE.md routes every agent session through constitution ->
development style -> knowledge before changes.
- README leads with the development-style section.
- bevy.rs is now a thin view over sim::Sim, mirroring the terminal
frontend: continuous clock with bounded catch-up, heat-driven raids,
pause/speed controls, unified keys (WASD/hjkl, m for schemes, SPACE
pauses). Deletes ~700 lines of duplicated wave-loop game logic that
had diverged from the terminal game.
- Art resource loads the Pixel Lab assets with nearest-neighbor
sampling: 12 textured tile types, tinted reuse for security doors and
trap variants, flat-color fallback for the rest; villain, minions,
henchmen, and agents render with their sprites.
- Unpowered functional tiles render dimmed; villain gets a real sprite
instead of the cursor square.
- Hash derives on MinionClass/AgentType for texture maps.
- README documents running the Bevy frontend via cargo run (asset root
resolution); DESIGN.md marks Milestone 3 as started; devlog added.
- .claude/skills/pixellab: skill doc + stdlib-only generator script
(single or idempotent batch mode) using PIXELLAB_API_KEY
- assets/pixellab: manifest-driven starter pack, 23 32x32 images —
villain, 4 minion classes, henchman, 5 agent types, 12 lair tiles
(shared style suffix + fixed seed for coherence)
- devlogs/: development notes convention + entries for the continuous
simulation pivot and the art pipeline
- gitignore .letta/settings.local.json (machine-local session state),
document WASD keys in README
Milestone 1 of DESIGN.md (Evil Genius x Dwarf Fortress direction):
- New renderer-agnostic Sim in src/sim.rs: fixed-tick clock drives economy
(every 20 ticks), schemes and heat decay (every 40), and raid combat
(every tick). No more build/defend phase split.
- Raids are now consequences, not a SPACE-bar treadmill: heat >= 10 starts
a countdown (hotter burns faster), notoriety + heat scale raid strength,
intel warning fires before arrival, repelling a raid vents heat.
- Schemes tick on the clock instead of on wave-clear.
- Terminal frontend rewritten as a thin view: SPACE/p pause time, +/- set
speed, powers usable any time, world map is a modal, tiny-terminal guard.
- Deleted legacy src/main.rs + src/input.rs + src/ui.rs (superseded by
src/bin/terminal/).
- Save format v1 extended with SIM line (tick, raid countdown), backward
compatible with old saves.
- 130 tests (19 new for sim), clippy clean including pre-existing warnings.
- Technicians now pathfind to nearest unpowered trap instead of only
repairing adjacent ones
- One repair per turn, then moves toward next broken trap
- Updated process_technician_repairs to take &mut [Minion]
- 116 tests passing, both binaries compile
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Agents spawn from multiple entry points at wave 5+ and 8+
- 30% chance of speed-2 agents at wave 6+
- 10% chance of elite agents at wave 5+ (1.5x HP, 1.3x damage, +20% trap resist)
- Elite agents give 1.5x gold reward
- 2 new wave generation tests (116 total)
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Workers flee from agents instead of fighting
- Scientists flee and return to lab instead of fighting
- Guards and Technicians fight as before
- Agents remember trap positions they've triggered or detected
- Agents share trap knowledge with each other after each turn
- Known traps are avoided during pathfinding
- 3 new tests for trap memory system (114 total)
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- New save module with line-based text format for easy debugging
- Save/load via Ctrl+S / Ctrl+L in both terminal and Bevy frontends
- GameMap::from_tiles() for reconstructing maps from save data
- Tile char roundtrip serialization (all 28 tile types)
- Fixed 5 clippy warnings (deprecated gen, identical if blocks, clone on Copy)
- Added save/load controls hint to terminal sidebar
- 111 tests passing, 0 clippy warnings
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- New events module with 8 event types:
Reinforcements, TrapMalfunction, MinionInspiration, GoldShipment,
PowerSurge, AgentRetreat, MinionDefection, SupplyDrop
- Events start at wave 3, probability increases with wave number
- Integrated into both terminal and Bevy defend phases
- 7 new tests for events (108 total)
- Renamed Overlord/Evil Genius to Supervillain throughout
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Call update_powers() on game init in both terminal and Bevy frontends
- Call update_powers() after research purchase in Bevy
- Add 3 new superpower tests (matching research, no duplicate keys, positive costs)
- Fix PlayerMarker dead_code warning in Bevy
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- New superpowers module with 9 powers (Evil Laugh, Death Ray, Dark
Regeneration, Emergency Reinforcements, Force Wave, Soul Drain,
Impenetrable Shield, Blink, Plague Cloud)
- Powers unlocked via research tree + notoriety thresholds
- Combat integration: activate_power() handles all effects
- Invulnerability blocks throne attacks, repels agents
- Terminal: number keys 1-9 during defend, sidebar display
- Bevy: number keys 1-9, UI text display, cooldown ticking
- Renamed all Overlord/Evil Genius references to Supervillain
- 98 tests passing (4 new superpower combat tests)
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- 5 new build mode tests (cursor, place, demolish, throne protection)
- 5 new tile tests (build categories, costs, unlock keys, schemes)
- Fixed BuildResult to derive Debug/PartialEq for test assertions
- Added starting unlocks to test player fixture
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Rust roguelike inspired by Evil Genius with dual frontend:
- Terminal (crossterm) and Bevy 0.18 graphical engine
- 86 unit tests, 0 clippy warnings
- Core systems: minions, henchmen, agents, combat, build, research, schemes
- 4 minion classes, 4 henchmen, 5 agent types
- Trap combos, splash damage, security doors, fake entries
- Heat/notoriety/gold economy with passive income
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>