v0.1.5: ARIA Speaks
Until now, ARIA only responded when you asked. You opened the advisor panel, you typed a question, you got an answer. That's still there — but it was always the wrong mental model for what ARIA is supposed to be.
Proactive Game-State Analysis
ARIA now runs a continuous analysis loop over game state. When something is worth flagging — low energy reserves, a faction shifting posture, a megastructure stage stalled — ARIA surfaces it in your inbox without waiting for a prompt.
We built a six-tier heuristic fallback so this works even without a live LLM connection. Most of the time the heuristics run first: they're fast, deterministic, and don't require a round trip. The LLM path kicks in for the contextual commentary that requires understanding the whole situation.
The result is that ARIA feels like an advisor who is actually watching, not a search box that returns results.
Megastructure Crisis Warnings
Megastructures have crisis conditions — states where progress is at risk if you don't intervene. Previously, you'd find out when the crisis hit. Now ARIA warns you 1–2 ticks before the threshold, while there's still time to act.
This is part of a broader Octalysis design effort: the game should create tension through anticipation, not punishment. A warning you can respond to is dramatically better than a failure you didn't see coming.
Full Changelog — v0.1.5
What's New
- ARIA proactive analysis — ARIA monitors game state and briefs you without prompting; six-tier heuristic fallback fires insights without LLM connection
- ARIA megastructure crisis warnings — 1–2 tick advance warning before a megastructure stage hits a crisis threshold
Fixes
- ARIA auto-analysis now resets on save/load — stale snapshot and cooldown data no longer carry into the next session
- Culture trait ARIA broadcasts no longer duplicate after save/load —
seedKnownTraitsnow called correctly on session start - ARIA XENOAWARE broadcast referenced "Void Syndicate" (nonexistent faction); corrected to Astral Collective
tickRobotPhasemagic number for broken robot state replaced withROBOT_STATES.BROKENconstant