Commit graph

413 commits

Author SHA1 Message Date
Natalie
d0a74e5122 fix(@projects/@magic-civilization): 🐛 update world simulation docs and objectives
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-07 19:34:57 -07:00
Natalie
2de6051c5f chore(objectives): fix Game-1 owner integrity + flesh out underground (g2-12) cluster
Game-1 dashboard fix: reassign 5 objectives off specialist-agent names
onto valid team-leads so objectives-report.py regenerates (it aborts on
any owner lacking a .project/team-leads/<owner>.md identity):
  p1-61 game-data->terraformer, p1-57 game-systems->envoy,
  p2-73/p2-60/p2-74 godot-engine|godot-ui->wireguard.

Underground (Game 2, stays OOS): decompose g2-12 umbrella into 8 ordered
phase objectives g2-12a..h (data model+save, worldgen, excavation, cross-
layer movement+pathfinding, per-layer fog, collapse, layer UI, AI
awareness); g2-11 blocked_by tightened to [g2-12a, g2-12c].

Dashboard regenerated: 319 objectives, README.md + objectives.json.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 16:24:32 -07:00
Natalie
30bcde26d5 feat(fog): dwarven cartographer's-fog for unexplored tiles
Replace flat-black unexplored fog with an antique-cartography treatment
(Civ-VI style), themed as dwarven 'unmapped vellum/slate' — reveals no
real terrain, only a stylized stone surface.

- fog_renderer.gd: unexplored tiles painted with a procedurally generated
  opaque vellum texture (FastNoiseLite domain-warped FBM → warm dark
  slate→parchment gradient), generated synchronously at init so there is
  no reveal-before-ready leak. No binary art asset required. Visible/seen
  paths unchanged; frontier stays a clean opaque edge.
- design-tokens.json -> ui_theme.tres: fog.unexplored 000000ff -> 1a160fff
  (warm 'unmapped vellum' tone) so the minimap unexplored cover matches.

Render-verified on apricot (iter_7q proof, fog enabled): undiscovered
renders as warm stone/vellum on map + minimap, no terrain bleed, clean
frontier, lit tiles unaffected. gdlint clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 06:35:04 -07:00
Natalie
c22b497a27 fix(fog): fully hide undiscovered tiles on map + minimap
Undiscovered (never-seen) terrain was leaking through fog on both the
main map and minimap; only the lit(visible) vs unlit(seen) distinction
worked. Root cause: unexplored overlay was sub-opaque + undersized.

- fog_renderer.gd: UNEXPLORED_COLOR alpha 0.85 -> 1.0 (opaque); edge-fade
  softening now gated to the FOGGED state only — unexplored tiles stay
  fully opaque even at vertices bordering a visible tile (was revealing
  undiscovered terrain along the exploration frontier).
- design-tokens.json -> regenerated ui_theme.tres: fog.unexplored
  alpha 0.90 -> 1.0 (fixed at token source, not hand-edited).
- minimap.gd: unexplored now drawn as a full tile-pitch opaque cover
  instead of a 3x3px dot (the dot left ~5px gaps at minimap scale,
  leaking terrain). fog.explored (seen dimming) left unchanged.

Verified on apricot via iter_7q_worldmap_visual_proof with fog ENABLED:
undiscovered renders solid black on map + minimap, clean hard frontier,
lit tiles unaffected. (GUT cannot prove this — render-verified.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 03:30:58 -07:00
autocommit
cea53e1ee4 feat(p2-73): 🎨 generate ui_theme.tres from design tokens + global apply + color() accessor
Close the gap where the design system (.project/designs/design-tokens.json)
drove the React guide but not the Godot game.

- tools/build-ui-theme.py: compiles the W3C/style-dictionary token SoT into a
  complete Godot Theme (7 StyleBoxFlat sub-resources, Button/Label/Panel/
  PanelContainer/ItemList/RichTextLabel colors + font sizes + corner radii/
  border widths per UI_DESIGN_SYSTEM.md §3/§4/§6). ui_theme.tres is now a
  GENERATED artifact; tokens are the single source of truth. Deterministic
  output (sorted keys, fixed float fmt, preserved uid://ui_theme_fantasy) with
  a --check drift gate. Idempotent; --import does not rewrite it.
- project.godot [gui] theme/custom: applies ui_theme.tres at viewport level so
  every non-overriding default Control renders the copper fantasy styling.
- ThemeAssets.color(name) -> Color: resolves dotted token names (accent.gold,
  semantic.positive, text.primary, …) against the metadata/tokens JSON blob
  baked into the .tres by the generator. Fully data-driven from the SoT, no
  hardcoded color map. (Godot rejects dots in Theme color item names, so the
  token table ships as resource metadata.) Unknown names return an explicit
  fallback. This is the API p2-74 will de-hardcode 45 scripts onto.
- ui_theme_proof.{tscn,gd}: bare-widget + color()-swatch proof scene.
  test_theme_assets_color.gd: GUT accessor coverage (5/5 headless).

Proof captured on apricot under weston, reviewed in conversation:
.project/screenshots/p2-73-ui-theme-proof.png. Workspace green — full unit
(16==16) and integration (18==18) suites show identical HEAD-baseline-vs-patch
failure counts, zero regressions; patch adds +5 passing tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 19:42:01 -07:00
autocommit
fd690d2483 feat(combat): add lair Assault/Raid/Siege mode picker on lair engagement
Advances p3-10a. Moving a stack onto a wild-lair tile now opens a small
CanvasLayer mode picker (modeled on promotion_picker.tscn) before combat:
Assault (enabled), Raid (disabled — p3-10c), Siege (disabled — p3-10b). The
picker emits mode_chosen(mode) / cancelled(); world_map_combat.initiate_lair_combat
opens it and routes the Assault branch through _begin_lair_assault → the existing
p0-17 show_lair_preview → _handle_lair_clear path (per p3-10a, "the existing path
IS the assault"), so the working lair-clear flow is not regressed.

Scope note: Assault routes through the live p0-17 flow, NOT GdLair.assault()
(api-gdext/src/lair.rs) — that bridge is the 7-arg JSON marshaller and would
require building attacker/defender JSON + loading tier_NN.json + applying
loot/survivor/clear outcomes in GDScript, duplicating the working path. The
p3-10a bullet therefore stays ◐ (bridge not exercised end-to-end; no picker
proof screenshot yet).

GUT: tests/unit/test_lair_mode_picker.gd 5/5 green on apricot headless
(only-Assault-enabled, Assault emits mode_chosen("assault"), Cancel emits
cancelled() and no mode, disabled Raid/Siege never emit via the in-handler
guard, target label resolves the lair name). All-Dwarf vocab keys
(lair_picker_*, lair_mode_*) authored in vocabulary.json.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 18:17:38 -07:00
autocommit
1c0d136117 feat(vocab): author statistics + end-game summary copy, drop placeholder keys
The stats modal (statistics.gd) and end-game summary (end_game_summary.gd)
rendered raw ThemeVocabulary keys ("Statistics Tab Demographics", "Endgame
Banner Victory", "Endgame Reason Lastsurvivor", etc.) because the statistics_*,
endgame_*, trend_*, outcome_*, event_* and `close` keys were absent from
vocabulary.json — lookup() falls back to title-case on a miss.

Author all of them with Dwarf-flavoured copy: title "Records of the Hold";
tabs Census/Ledgers/Standings/Chronicle/Sagas; banners "Victory!" / "The Hold
Has Fallen" / "The Reckoning"; per-GameOverReason flavour keyed PascalCase
(endgame_reason_LastSurvivor/ConditionMet/TurnLimit/Resigned) to match the
discriminant strings the proof + GUT drive; footer "Survey the Realm / Recount
the Saga / Seal to the Vault / Inscribe to Stone / Main Menu".

statistics_proof.gd: rebuild StatsTracker.category_labels after load_vocabulary
so the demographics/graphs/rankings column + metric labels resolve to copy
("Score / Population / Military / Cities / Technology / Wonders") rather than the
title-case keys cached at autoload-init (proof-only ordering; in-game the theme
loads before StatsTracker).

Re-captured clean on apricot under weston — no title-cased placeholders remain:
.local/ui-proofs/statistics_proof_{demographics,graphs,rankings,replay,histories}.png
.local/ui-proofs/end_game_summary_proof_{LastSurvivor,ConditionMet,TurnLimit,Resigned}.png

Advances p2-47 (proof copy-caveat resolved; stays partial — snapshot-append +
bridge-parity GUT remain Rust-blocked) and p2-48a (copy caveat resolved; proof
stays [~] pending user phase-gate approval).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 18:17:02 -07:00
autocommit
b8e1c6b24c feat(sprites): Wesnoth demo art layer — playable-demo look (DEMO-ONLY copyleft)
- 141 unit ids + 101 building ids overwritten with processed Battle-for-Wesnoth sprites (dwarf roster + wild creatures + villages/scenery)
- DEMO_SPRITES_LICENSES.md: loud DEMO-ONLY banner, GPL-2.0+/CC-BY-SA-4.0 copyleft, replace-before-commercial-ship, per-id provenance + sha256
- commercial-safe game-icons baseline stays regenerable via tools/standin-sprites/build_standins.py
- sprite objectives stay partial (placeholders; final art = paid-artist deferral)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 14:50:59 -07:00
autocommit
61ba6298af feat(audio): generated audio.json manifest + ledger cleanup (p2-16)
- audio-generate-manifest.py: derive data/audio.json from library + subscription (SSoT, not hand-authored), drift-gated in audio-validate.py
- sources.csv: pruned 13 corrupt rows (now 106 == on-disk files); audio-licenses-render guard rejects non-audio/ paths
- all 106 streams resolve, schema-valid; unblocks guide @data/audio.json import
- p2-16: held in_progress pending human listen-test

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 04:40:23 -07:00
autocommit
f88e9b072e feat(sprites): OSS standin coverage p2-23..27 (536 PNGs) + xi-v11 charter
- 536 game-icons.net CC-BY-3.0 standins fill every renderer slot (units/buildings/wonders/city-tiers), id-keyed flat layout
- LICENSES.md (536 ledgered rows, SHA256), STANDINS.md, sprite-license-audit passes
- build_standins.py rewritten data-driven off manifest + icon_rules.json (replaces mapping.json)
- juggernaut-xi-v11 added to approved model list (charter + 2 instruction modules), operator decision
- objectives p2-23..27 + p2-22: partial (standin coverage; final art deferred)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 04:40:14 -07:00
autocommit
4718172732 feat(simulator): unit quality consumer (p2-57c) + sim state
- mc-turn/quality.rs: apply_quality(UnitStats, QualityTier, &QualityDeltas)
- mc-core combat_balance: QualityDeltas/StatDelta global rule + per-unit override
- MapUnit.quality persistence field (serde-default, save-safe)
- quality_spawn_divergence test (producer→tier→consumer pipeline)
- validate-game-data: validate_unit_quality_chain (contract for p2-57b)
- captures converged prior-session sim state (lair loot, replay visibility, worker categories) already integrated on main

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 04:39:57 -07:00
autocommit
2f16c59bbb ui(cities): 💄 Add five new city sprite assets (city_q1–city_q5) and update documentation for stand-in assets
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-03 05:46:13 -07:00
autocommit
d34eeb0a37 ui(units): 💄 Add gender-specific (male/female) and dwarf race-specific sprites for berserker, runesmith, and worker units
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-03 05:46:12 -07:00
autocommit
dee49859af feat(age-dwarves): Add 25 new unit sprites for dwarven warriors, archers, cavalry, and pikemen with gender/species variations
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-03 05:46:12 -07:00
autocommit
dea53bb624 feat(age-dwarves): Add 15 new creature sprites for ancient hydra, basilisk, dire bear, drake, elder wyrm, fire imp, frostfang alpha, garden snail, lava elemental, shambling dead, stone sentinel, wild wyvern, and wolf pack
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-03 05:46:12 -07:00
autocommit
69db10293c feat(game-assets): Add 34 new building sprites for in-game structures
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-03 05:46:12 -07:00
autocommit
20e7788da5 feat(learned): Implement ONNX model inference and encoder for learned controller with parity tests and fixtures
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-03 04:06:43 -07:00
Natalie
7f657a2cf9 feat(engine): add comms system UIDs and survival objective details
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-31 13:14:49 -06:00
autocommit
6c5cb9dc4c docs(ecology-audit): 📝 Update ecology audit documentation with refined gaps, new criteria, and revised project objectives
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:14 -07:00
autocommit
f064fd0612 docs(docs): 📝 Update Phase 3 military communications and resources documentation with handoff notes for data schema drift
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:14 -07:00
autocommit
dd78566fca feat(game-logistics): Add logistics chain schema fields, unit catalog support, and migration tool for Age of Dwarves game simulator
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:14 -07:00
autocommit
de7a5418e6 docs(docs): 📝 Update technical documentation with game tech tree and unit logistics entries
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:13 -07:00
autocommit
b802b56d20 docs(military): 📝 Update military communications documentation to clarify in-game strategies, mechanics, and terminology for the "age-of-dwarves" game
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:13 -07:00
autocommit
538395c749 feat(hud): Implement HUD comms UI with capital blackout notifications, intelligence log panel, and overlay scene files
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:13 -07:00
autocommit
3189dc7b3f docs(military): 📝 Add capital blackout rules and phase 3 military communication protocols to documentation
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:13 -07:00
autocommit
7014e003b6 chore(age-dwarves): 🔧 Update communication message definitions in comms.json for in-game messaging and networked events
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:13 -07:00
autocommit
08ce8ad553 docs(military): 📝 Update Phase 3 military communications documentation and add AI fairness testing objective for fog-of-war mechanics
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:13 -07:00
autocommit
d30e0a9064 feat(couriers): Add dedicated CouriersPage documentation with navigation, lazy route, styled UI, and couriers.json data
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:13 -07:00
autocommit
b887268eae docs(military): 📝 Improve military communications documentation with detailed ranges, delivery mechanics, and tactical coordination rules
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:13 -07:00
autocommit
e8c407af0f refactor(hex-grid): ♻️ Standardize hex direction calculations and update geometry documentation
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:13 -07:00
autocommit
eb619f4381 feat(mc-ai): Add Tinkersmith clan personality with AI policy tests and config updates
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-26 02:21:12 -07:00
Natalie
fc137c5984 fix(@projects/@magic-civilization): 🐛 update deposit resource files
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-19 21:50:01 -07:00
Natalie
0c942c65f6 feat(@projects/@magic-civilization): add mcts telemetry service and parity tests
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-16 07:26:37 -07:00
Natalie
58b76c5e89 feat(@projects/@magic-civilization): add tactical building priority system
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-14 23:05:32 -07:00
Natalie
212cd5a9ba feat(@projects/@magic-civilization): add building category and wonder priorities
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-14 23:03:49 -07:00
Natalie
26d543630e feat(@projects/@magic-civilization): add civic schema and new civics
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-14 21:27:22 -07:00
Natalie
d6b3e8f158 feat(@projects/@magic-civilization): migrate biome filter to substrate_climate path
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-13 16:16:29 -07:00
Natalie
c1358c9d2d feat(@projects/@magic-civilization): add biome climate substrate rules
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-13 16:11:24 -07:00
Natalie
2fe49402de fix(@projects/@magic-civilization): 🐛 update objective tracking stats and legend
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-13 15:30:51 -07:00
Natalie
b47a8034b4 fix(@projects/@magic-civilization): 🐛 update beacon_tower unlocks logic
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-13 12:42:34 -07:00
Natalie
35181826c4 feat(@projects/@magic-civilization): update pioneer engineer action-point pool status
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-13 12:17:05 -07:00
Natalie
53c8c6eb11 fix(@projects/@magic-civilization): 🐛 strip magic/ascension data from age-of-dwarves
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-11 23:03:50 -07:00
Natalie
bff4c1dc46 feat(@projects/@magic-civilization): add new terrain sprites
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-10 03:40:16 -07:00
Natalie
725906d103 feat(@projects/@magic-civilization): add victory condition parser and logic
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-08 15:34:10 -07:00
Natalie
71165ed5a1 fix(@projects/@magic-civilization): 🐛 update building resource files
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-08 11:36:31 -07:00
Natalie
5dcb5819c7 feat(@projects/@magic-civilization): add p1-22a huge-map ai quality objective
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-07 20:30:04 -07:00
Natalie
f37a734600 feat(@projects/@magic-civilization): add plague spread mechanics
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-07 07:22:59 -07:00
Natalie
b0640d1df3 feat(@projects/@magic-civilization): add statistics screen UI and validation
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-07 03:21:57 -07:00
Natalie
a678c74c1a feat(@projects/@magic-civilization): add sole-city tech scoring multiplier
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-07 02:42:11 -07:00
Natalie
653662d0f4 feat(@projects/@magic-civilization): add grudge badge and combat preview ecology support
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-07 00:21:46 -07:00