Commit graph

3399 commits

Author SHA1 Message Date
autocommit
be7c824275 refactor(ecology): ♻️ Improve ecology state serialization to enable full continuation state persistence for save functionality
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 16:21:16 -07:00
autocommit
061b6f0f7b feat(api-gdext): Introduce worldsim dynamics traits, structs, and functions for Godot engine extension API
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 16:03:19 -07:00
autocommit
8bc770d8a0 feat(worldsim): Add core event dispatch and simulation loop for Minecraft-like world simulator
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 16:03:19 -07:00
autocommit
1d9e77be52 feat(chronicle): Add support for recording and processing turn-based world simulation steps in the Chronicle system
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 16:03:19 -07:00
autocommit
e8e4d5c7f7 feat(simulator): Introduce dynamic world simulation tracking in GameState with state transitions and interaction methods
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 16:03:19 -07:00
autocommit
4008e56643 feat(simulator): Introduce EventDispatcher infrastructure for dynamic world state updates with event types in event_dispatch.rs
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 16:03:19 -07:00
autocommit
36893f5e45 feat(mc-save): Add worldsim dynamics serialization and round-trip validation for new save format
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 16:03:19 -07:00
autocommit
77316f105d feat(simulator): Implement carrying capacity migration logic for ecology simulation engine
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 16:03:19 -07:00
autocommit
a8aa0847ad feat(mc-core): Introduce deterministic ecology simulation logic with a new Seed domain and seed generation system
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 16:03:19 -07:00
autocommit
715c73243e deps-upgrade(simulator): ⬆️ Update simulator dependencies to latest stable versions in Cargo.toml and regenerate Cargo.lock
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 16:03:19 -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
Natalie
26bf44f077 feat(designs): sprite showcase /sprites route + standalone scoped gallery
Lands remaining bridge-cse worktree WIP onto main:
- SpriteShowcase.tsx React page + wired /sprites route (App.tsx) + Index nav link
- standalone scoped sprite-gallery.html (160 units / 165 buildings, 0 missing)
- p2-74 cluster-3 HUD/minimap proof screenshot

SpriteShowcase typechecks clean (@game-assets glob + theme, no WASM dep).
Excluded tsconfig.tsbuildinfo (build cache); tile_info_panel.gd kept main's
global-theme version. User-authorized override of autocommit (daemon idle).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 02:11:21 -07:00
Natalie
5953f4f465 merge(magic): integrate bridge-cse branch into main — p2-74 design tokens + p2-65 mc-state crate + sprites/gallery
Full integration of worktree-bridge-cse_01Nnt (54 commits) into main.
Conflicts (17) resolved: adopt branch's p2-65 GameState->mc-state crate move
across mc-ai/mc-core/mc-player-api/mc-turn; keep main's design-token theme
system (build-ui-theme.py, tile_info_panel.gd) and main's newer p0-26b evidence.

Workspace: 2624 tests pass; 5 pre-existing/environmental failures inherited from
main (constructor_smoke capping test, five_players_overflow, 3x gpu_rollout_parity)
— zero regressions introduced by the merge. api-gdext (GDExtension) compiles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 01:04:16 -07:00
Natalie
413f6ea828 docs(@projects): 📝 update research port objective status details
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-06 00:07:32 -07:00
autocommit
1336dc73d0 deps-upgrade(bridge-cse): ⬆️ Update bridge-cse submodule to latest commit for improved tooling stability
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 22:02:06 -07:00
autocommit
ca8cb6c6cb ux(world-map-hud): 🚸 Improve world map HUD layout and interactions for better usability and visual clarity
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 21:45:41 -07:00
autocommit
f12c2f3b4e ui(world-map): 💄 Add distinct terrain colors and overlay styles (arena, courier routes, tile info) to world map and minimap scenes
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 21:45:40 -07:00
autocommit
3c07f0680c refactor(ui): tokenize world-map HUD + minimap colors (p2-74 cluster 3b)
Route inline Color() in the world-map HUD banners and minimap onto ThemeAssets
design tokens. Visual-only (Rail 3), no logic change:

- world_map_hud: patrol banner box -> background.panel/accent.science + label
  accent.science; rally picker box -> background.panel/accent.sage + title
  accent.science; notification toast box -> background.panel/accent.gold +
  label text.primary
- minimap: const FOG_COLOR/UNEXPLORED_COLOR/PING_RING_COLOR -> _ready()-populated
  vars from fog.explored/fog.unexplored/accent.ping; border stylebox border ->
  border.panel; backdrop fill -> background.deepest

Minimap TERRAIN_COLORS biome palette stays hardcoded with an explicit comment:
it is game-content color (no UI token applies) and a deliberately distinct muted
minimap rendering, not a terrain.json mirror (the arrays diverge). Re-sourcing it
is a Rail-2 data follow-up, out of scope for this visual-only token pass.

DataLoader RGB conversion, env-var viewport color, transparent structural fills,
and the neutral gray default left as-is.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:36:41 -07:00
autocommit
d721d58d04 refactor(ui): tokenize world_map scene colors (p2-74 cluster 3a)
Route inline Color() in world_map/** scene scripts onto ThemeAssets design
tokens. Visual-only (Rail 3), no logic change:

- arena_overlay: const P0/P1_COLOR -> build()-populated vars from player.blue/
  player.orange; title -> accent.gold; turn label -> accent.science
- courier_route_overlay: const COLOR_IN_TRANSIT/DELIVERED -> _ready()-populated
  vars from accent.sage (alpha preserved per state)
- tile_info_panel: panel stylebox bg/border -> background.overlay/border.panel;
  invalid-yield modulate -> semantic.negative; pop count -> accent.sage
- world_map: placement-area highlight -> accent.science (alpha preserved)
- world_map_units: patrol line + flag labels -> accent.science

Computed player-color overlays (arena_playback combat flash) and neutral
white fallbacks/resets left as-is — genuinely dynamic, no token applies.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:34:07 -07:00
autocommit
eb25722298 style(hud): 🎨 Refactor HUD components to enforce theme color consistency by replacing hardcoded styles
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 21:29:15 -07:00
autocommit
1d2334f24c remove(game): 🔥 Remove unused parsecheck scene file
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 21:29:15 -07:00
autocommit
ef3c494002 chore(index): regen (3 missing units authored, p0-26b re-scored, de-hardcode clusters 1-2)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:25:02 -07:00
autocommit
9a5cd16fd4 fix(ui): end_turn_button brightens on hover, deepens on press
Follow-up to 268b85c92. The first tokenization mapped the per-state button
styleboxes such that the warm-token luma ordering inverted the interaction: the
button darkened on hover instead of brightening. Reorder by luma so hover is the
lightest warm token (button.bgPressed #472f0f), pressed the darkest
(button.bgHover #331a0d), and normal in between (background.listSelected
#3f2d0d) — restoring the original gold-emphasis brighten-on-hover feel. Token
names read awkwardly because the button.* set targets the indigo-idle inherited
button, not a gold emphasis button; the comment documents the luma intent.
Visual-only; compiles with autoloads (GATE_OK).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:24:33 -07:00
autocommit
d1b7ff8efc docs(p0-26b): record post-port tier_peak batch; bullet 5 stays open (no baseline)
Ran the 10-seed T300 autoplay smoke batch on apricot against the committed
build (origin/main @ f5c4ee9c3, the live pick_research_via_bridge dispatch).
Recorded the per-seed tier_peak table as cited evidence: all 5 clans present,
all games resolved to victory with both sides active (seed5's 37-turn win is a
legitimate tinkersmith domination rush), tier_peak spans T1-T6 with no
collapse — a healthy, clan-diverse post-port distribution.

Bullet 5 remains [ ] / status partial: the acceptance is comparative
("unchanged-or-better vs the pre-port baseline") and no recorded pre-port
baseline exists. The nearest pre-port SHA is confounded by ~3 weeks of
unrelated changes; the only confound-free before/after (port commits reverted)
isn't reachable by the apricot launcher (forge-fetch only, revert branch is
ACS-unpushed). Decision-correctness is already pinned by the bullet-4 parity
test (8/8). tier_peak extracted directly from player_stats[].tier_peak because
autoplay-report.py aborted on a pre-existing autoplay-validate.py bug
(unhashable type: list) — left unfixed (out of fence).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:23:20 -07:00
autocommit
4b0b661907 docs(p2-74): record cluster-2 (HUD panels + notifications) progress
Log the 17 tokenized HUD/notification scripts, the three landing commits, the
const-Color-trap conversions, GUT baseline parity (16 pre-existing failures,
zero new), proof paths, and the held-for-world_map remainder (world_map_hud,
weather_visualizer, minimap, encyclopedia). Status stays stub — clusters for
world_map / encyclopedia / minimap remain.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:20:52 -07:00
autocommit
db309a4236 refactor(ui): tokenize HUD overlay colors off raw Color() literals
p2-74 cluster 2 (HUD panels + notifications), overlays sub-cluster. Final 6 HUD
scripts onto ThemeAssets.color() tokens; completes the cluster-2 fence.

- hotkey_sheet: dim → background.overlay; panel → background.panel/border.panel;
  title/key labels → text.title; group headers → accent.gold; descriptions →
  text.primary; footer → text.muted; empty rows → text.disabled.
- overlay_panel: panel → background.panel/border.divider; active-lens font →
  semantic.positive; view-center label → text.muted.
- chronicle_panel: backdrop scrim → background.overlay.
- comms_renderer: dev heartbeat strip → background.hud/border.divider; per-event
  toast accents → accent.gold/goldResource, semantic.positive/negative/warning,
  player.purple (first-contact, sighting, blackout, new-capital, vision share,
  heartbeat sent/missed, envelope tap) — semantic, not inline RGB.
- debug_menu: dev panel → background.panel/semantic.diplomacy; button styleboxes
  → button.bgHover/bgPressed/background.raised + border.panel/focus; font →
  text.button/buttonHover; find label → text.secondary.
- tutorial_overlay: dim → background.overlay; panel → background.panel/border.panel;
  title → text.title; counter → text.muted; body → text.primary; action badge →
  semantic.positive (done) / semantic.warning (required).

Visual-only; no logic change (Rail 3). 0 inline Color() remain across the entire
cluster-2 fence (named hud panels + notifications). All edited scripts compile
with autoloads present (GATE_OK).

Proof: hotkey_sheet_proof.tscn captured on apricot (headless weston) shows the
themed purple panel, gold border/title, gold group headers, primary-text
descriptions, and the muted "(no bindings yet)" empty row.
.project/screenshots/p2-74-cluster2-hotkey-sheet.png

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:18:44 -07:00
autocommit
d2ebec0eba feat(units): author 3 missing specialist units referenced by building produces[]
p2-57b gap analysis flagged dangling produces[] refs: adamantine_press /
gravity_press → dwarf_master_engineer, royal_infirmary / field_hospital_corps
→ master_surgeon, grand_chronicle → saga_writer named units that had no JSON.

Authored all three in public/resources/units/ matching the unit schema and the
shape of their nearest siblings (dwarf_grand_engineer, field_surgeon,
loremaster): Great-Person-tier support specialists with logistics blocks, real
tech gates (deep_engineering / surgical_practice / rune_archives), upgrade
chains, and GP actions consistent with their class. validate-game-data.py
PASSes all three (the 90 unrelated failures pre-exist on main).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:17:53 -07:00
autocommit
268b85c92d refactor(ui): tokenize HUD panel colors off raw Color() literals
p2-74 cluster 2 (HUD panels + notifications), panels sub-cluster. Route inline
Color() literals across 8 HUD-panel scripts onto ThemeAssets.color() tokens.

- top_bar: panel chrome → background.panel/border.divider; happiness signed
  value → semantic.positive/negative/text.secondary.
- climate_indicator: const GAUGE_*_COLOR trap → vars resolved in _ready() from
  climate.cold/warm/hot; gauge gradient lerps those endpoints; discrete phase
  text → climate.textWarming/textCold/textNeutral.
- unit_panel: const DISABLED_OUTLINE_COLOR trap → var from semantic.negative; HP
  ratio gradient → semantic.positive/warning/negative; item slot tag →
  accent.gold; charges → text.muted.
- end_turn_button: panel + per-state button styleboxes onto warm tokens
  (button.bgPressed/Hover normal/hover, background.listSelected pressed) +
  border.panel/border.focus; font states → text.button/buttonHover/buttonPressed.
- happiness_breakdown_panel: panel → background.happiness/border.happiness; title
  → text.title; rows → text.secondary; signed value → semantic.positive/negative.
- diplomacy_panel: header → text.title; action-button + relation colors →
  semantic.negative/positive/trade, player.blue/cyan; agreement labels →
  player.blue / semantic.positive; _relation_color match → tokens.
- intelligence_log_panel: purple-themed intel panel → background.panel /
  player.purple border+header; rows → text.primary; empty → text.muted.
- ai_turn_overlay: scrim → background.hud; thinking label → text.primary.
- capital_blackout_overlay: scrim alpha now assigned via a whole-Color local
  (Godot-4 property-getter returns a copy; `node.color.a = x` would no-op).

Visual-only; no logic change (Rail 3). 0 inline Color() remain across the 8
scripts; the Color.WHITE placeholders in climate/unit panels are const defaults
overwritten in _ready(). Verified: all edited scripts compile with autoloads
present (ephemeral main-scene gate — load(.gd)==null catches compile failures
that load(.tscn) silently masks); GATE_OK across the sub-cluster.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:14:27 -07:00
autocommit
21f37721f5 chore(game): 🔧 Update main parsecheck scene configuration in .parsecheck_main.tscn
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 21:12:33 -07:00
autocommit
5407989139 style(notifications): 🎨 Apply theme color styling to capital blackout overlay and comms toast notifications
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 21:12:33 -07:00
autocommit
65046a032a style(hud): 🎨 Refactor HUD components to apply theme colors consistently across all visual elements
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 21:12:33 -07:00
autocommit
d6c84e4b4f refactor(ui): tokenize HUD notification colors off raw Color() literals
p2-74 cluster 2 (HUD panels + notifications), notifications sub-cluster.
Route turn_notification.gd / comms_toast.gd / capital_blackout_overlay.gd
inline Color() literals onto ThemeAssets.color() design tokens.

- turn_notification: const CATEGORY_COLORS dict (a const trap — token lookups
  can't sit in a const initializer) converted to var _category_colors populated
  in _ready(); category palette → semantic.negative/positive, accent.science,
  accent.goldResource, player.purple, semantic.diplomacy, text.primary. Panel
  bg/border → background.panel/border.panel; title/header → text.title; scrim
  dims → background.hud/overlay; muted hints → text.muted.
- comms_toast: panel bg/border → background.panel/border.panel; accent strip →
  accent.gold; title → text.title; body → text.primary. The configure() accent
  default Color literal (param defaults can't call the autoload) becomes a null
  sentinel resolved to accent.gold in the body.
- capital_blackout_overlay: dim/glitch scrims sourced from background.deepest /
  semantic.negative with explicit .a; title → semantic.negative; subtitle →
  text.title.

Adds tools/capture-proof.sh: reusable single-proof-scene capture under a private
headless weston on the RUN host, pulling the PNG back. Visual-only; no logic
change (Rail 3). 0 Color() remain in the three scripts.

Proof: hud_proof.tscn captured on apricot (headless weston) shows the themed
purple Turn Summary panel, gold border/title, copper filter checkboxes, and
semantic per-category entry coloring (red combat, green founding, blue tech,
gold economy, violet magic).
.project/screenshots/p2-74-cluster2-hud-notifications.png

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 20:57:41 -07:00
autocommit
3a04052385 docs(objectives): revise p2-65 bullet-9 + p2-72a array-removal resume notes (stale-premise audit)
p2-65 (stays partial K=8/9): rewrite Phase-7 resume note. The 'no-persistent-
GdGameState / discards combat_balance' premise is STALE — game_state.gd:269
loads combat_balance.json into the persistent _gd_state singleton via
GdGameState::set_combat_balance_json (api-gdext/src/lib.rs:3541), and the driver
objective p2-55f is already done with its bullet 2 marked [x]. Bullet 9 must NOT
be closed on that path (it bypasses mc-state entirely — would be an
objective-integrity reframe). Remaining work is architectural consolidation
(mc_state::SimConfig owning global config), now an owner decision, not a
mechanical close-out.

p2-72a (stays partial): array-removal increment re-checked and NOT executed.
All three gate-feasibility blockers reproduce — cold Godot import cache, no
mc-godot Docker image (freeze-safe path unbuilt), operator-gated visual proof
unavailable this session. game_state.gd UNTOUCHED (npc_buildings count = 33).
Clean stop re-confirmed; predecessor's execution recipe unchanged.

Regen objectives index. No status frontmatter changed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 20:55:08 -07:00
autocommit
f5c4ee9c30 chore(tooling): 🔧 Update Claude bridge submodule reference for development tooling
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 20:50:49 -07:00
autocommit
f80609097b chore(index): regen objectives.json (p2-73 done, p2-65 8/9, de-hardcode cluster 1)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 20:48:45 -07:00
autocommit
0d5f2ff00b ui(menus): 💄 Refactor menu screens with consistent theming, animations, and standardized vocabulary
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 20:30:32 -07:00
autocommit
416316a2e8 feat(combat): Introduce combat_preview.gd for rendering and managing combat scene previews
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 20:30:32 -07:00
autocommit
11ad9e3d5d refactor(city): ♻️ Replace hardcoded colors in BuildingPanel, CityBuildableHelper, and CityScreen with theme-aware dynamic color resolution
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 20:30:32 -07:00
autocommit
42cd08d8f3 refactor(ui): tokenize menus + city + combat scene colors off raw Color()
p2-74 cluster 1 (modals + menus), batch 2. Route inline Color() literals in
12 scene scripts onto ThemeAssets.color() design tokens by semantic role:
- end_game_summary: banner victory/defeat → accent.gold/semantic.negative,
  standings rank → semantic.positive, score → accent.goldResource, body roles.
- victory/defeat_screen: result + row colors → accent/semantic/text tokens.
- credits/how_to_play/throne_room_spoils/game_setup: titles → accent.goldResource
  /text.title, dividers → border.divider, body → text.primary/secondary/muted.
- loading_screen: PLAYER_COLORS const removed; player.color now routes through
  ThemeAssets.get_player_color() (palette-aware) with player.gray fallback.
- throne_room: placeholder label → text.primary@0.65; the 12 _layer_to_color
  decoration tints intentionally retained (categorical, no token home).
- city/building_panel: DISABLED_OUTLINE_COLOR const → @onready var off
  semantic.negative@0.85 (const can't call autoload).
- city_buildable_helper: built→positive, locked/blocked→negative, worked→
  text.title, unworked→text.muted.
- city_screen focus toggle: active→accent.gold, inactive→text.muted.
- combat_preview grudge badge → semantic.negative.

Visual-only; no logic change. Data-driven clan/player colors and Color.WHITE/
GRAY fallbacks left intact. gdlint HEAD-vs-now shows zero new violations per
file. Proofs on apricot (weston headless): statistics_proof (5 tabs) +
end_game_summary_proof (4 outcomes) compile-load and render the themed purple
panels / gold titles / semantic coloring with no magenta token fallbacks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 20:11:03 -07:00
autocommit
164fed22ae refactor(statistics): ♻️ Replace hardcoded rank badge colors with semantic design tokens for consistency
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 20:09:12 -07:00
autocommit
78dc200233 style(throne-room): 🎨 Update text color in throne_room.gd to enforce theme token consistency
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 20:09:12 -07:00
autocommit
5c578e0d01 docs(p2-72a): 📋 scope array-removal increment + correct the save-format coupling claim
Read-only analysis of the npc_buildings serialize chain (no code touched;
game_state.gd unchanged). Finding: the resume map's "array removal forces a
SaveManager rewrite, cannot land independent of save-format-migration" claim is
over-stated. `_serialize_npc_buildings` → `serialize_npc_buildings` calls
`b.to_dict()` on each `Building` view, and that view's `to_dict()` already
proxies to `_gd_state.npc_building_dict(_idx)` — serialized bytes are already
sourced from the Rust mirror. Re-pointing serialize at the mirror directly is
byte-identical; the save FORMAT does not change. This objective owns the whole
increment.

STOPPED this session deliberately (gate-feasibility, not coupling): the increment
edits the highest-regression live-world-map file and must land as one green commit
gated by GUT-headless + cargo + build:gdext + operator-gated world-map visual
proof. Godot import cache is cold (host-freeze risk per godot-docker.sh), no
mc-godot Docker image / warm volume exists, and the visual proof needs operator
sign-off — not completable safely without a runway session. Precise execution
recipe (serialize re-point + 6 reader retargets + array/spatial-index/view-fn
deletion + gate steps) recorded for the next session. Status stays partial.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 20:06:53 -07:00
autocommit
bbacf5ff8d docs(p2-65): 📊 Phase 4+5 landed — bullets 1/2/3/4/5/6/7/8 ✓, K=8/9 partial
Recount p2-65 acceptance after the Wave-D session-2 consumer sweep
(C1 1917c3db5 / C2 efbfa6ae3 / C3 0bdf7b57c):
- bullet 6 (grep mc_turn::game_state|mc_turn::GameState → 0): ✓ — both shims
  deleted, brace+inline+nested forms all swept.
- bullet 5 (consumer Cargo downgrades): ✓ — mc-state added to 6 crates;
  mc-turn dropped from mc-save/mc-vision/mc-mcts-service.
- bullets 1/2/3/4/7/8: ✓ with honest footnotes (combat_balance resolved via
  mc-core not mc-state; mc-ai dep on mc-turn retained = logic dispatch not a
  cycle; --features gpu has pre-existing unrelated CombatResult drift).
- bullet 9 (Phase 7 SimConfig wiring):  STILL OPEN — sole remaining item.

Status stays `partial` (objective-integrity K=N rule; K=8/9). Phase-7 resume
note appended (mc_state::SimConfig → api-gdext init, closes p2-55f bullet 2).
Index regenerated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 20:00:11 -07:00
autocommit
ba52171b70 refactor(ui): tokenize statistics modal colors off raw Color() literals
p2-74 cluster 1 (modals + menus). Route statistics.gd's 23 inline Color()
literals onto ThemeAssets.color() design tokens: panel bg/border →
background.panel/border.panel, title → text.title, body/muted/disabled text
roles, rank-badge gradient → semantic.positive/warning/diplomacy/negative,
score value → accent.goldResource, trend arrows → semantic.positive/negative,
backdrop → background.overlay. Converted const RANK_COLORS → var _rank_colors
populated in _ready() (token lookups can't sit in a const initializer).
Data-driven clan/player line colors left intact. Visual-only; no logic change.

Proof: statistics_proof.tscn captured on apricot (weston headless) shows the
themed purple panels, gold borders/title, and semantic rank coloring.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 19:58:12 -07:00
autocommit
2c19b6c193 test(combat): Update test UID and logic for lair mode picker functionality in combat scenes
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 19:52:32 -07:00
autocommit
11cb4729b6 chore(game): 🔧 Update project.godot config to enable theme system with default overrides and engine adjustments
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 19:52:32 -07:00
autocommit
d4d54dc56e test(scenes-component): Add test scenes with GDScript and UI theme files to validate theme application and rendering
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 19:52:32 -07:00
autocommit
df2356439a feat(lair-mode-picker): Introduce lair mode picker UI component and add test coverage with statistics proof scene and unit tests
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 19:52:32 -07:00
autocommit
cad2183c51 feat(themes): Introduce semantic design tokens system for UI theming with theme assets, resource files, build integration, and unit tests
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-04 19:52:32 -07:00