25 September 2026 - Implementation Session
Took over the "Session Hand-Over: Tech Outline Normalization" task, confirmed the Dialog Manager section of
outline/tech/index.page read correctly, then implemented all three Tech Areas from that outline: Game State Management, Dialog Management, and Simulation Management. Code lives under Assets/Scripts/Rokojori/GameState/, Dialog/, and Simulation/ (about 28 files). Removed the stale "Get Initial Picture" board task (its description no longer matched what had actually happened) and closed out the hand-over task.
Compile Toolchain
Set up a way to verify C# compiles without opening the Unity Editor - see
guides/compiling-without-unity/index.page. Two things were needed: a
global.json pinning the SDK to 8.0.417 (the default .NET 10.0.401 SDK crashes compiling Unity's generated csproj on this machine - a Windows/CET incompatibility, not a project issue), and a hand-written
CompileCheck.csproj that globs Assets/Scripts/Rokojori and Assets/Scripts/Project directly, since Unity's own generated Assembly-CSharp.csproj only lists files present at its last sync and won't pick up files written outside the Editor. All new code compiles clean against this (2 pre-existing, harmless serialization-analyzer warnings on EventSlot fields, unrelated to this session's code). This has only been compile-checked, never run in Unity - see the new "Verify in Unity Editor" board task.
Coding Convention Correction
Wrote the first pass without noticing
guides/Writing-C#/index.page - it exists but wasn't linked from guides/index.page (now fixed, and linked here alongside the new compiling guide). Had to go back and fix: no bare
private fields (use public with an underscore prefix, or protected), no parameterized constructors (DialogProcessor changed to a static
Create() factory), switch statements replaced with if/else-if chains (CompareInt, ListCondition), and explicit initial values added to all fields that lacked them.
Decisions
Kept GameStateManager's per-type value dictionaries as the runtime source of truth (marked [NonSerialized]), with GameStateVariable ScriptableObjects only holding the initial value and a stable key field for JSON save/load - editor-facing "name" (inherited from UnityEngine.Object) stays separate from save identity.
DialogManager.Show() throws NotImplementedException rather than faking a response - there is no UI to wire it to yet (Assets/UI is empty). SimulationRenderer.Enqueue() is a similar placeholder that completes instantly. Both are flagged as open To Do items rather than silently pretending to work.
Assumptions Needing Sign-off
The tech outline left several implementation details unspecified. Filled them in with the simplest defensible choice and flagged all five in outline/tech/index.page under "Implementation Status" rather than guessing silently: DialogList's flow semantics (flat sequence, ignores children's own "next"), PlayerChoice options gaining an optional GameStateAction, HasObject modelled as a bool flag (no inventory system exists), SimulationManager.playerCount as a plain int (no Player type is defined anywhere), and GameStateVariable.key replacing the outline's literal (but already-inherited) "name" field. See the new "Sign Off Implementation Assumptions" board task.
Not Done
SimulateWorld and ShowTurnStartConditions (the example GamePhase subclasses) were described only narratively in the outline with no code contract, so they weren't written - see the "Example Simulation Phases" board task. DialogPhase was written since GamePhase now exists, closing a gap from last session.