feat/62-ideology
master
Add a per-nation free-form ideology (form of government) field and a TurnResult.ideology lever (coups / revolutions / reforms / constitutional changes) with a deterministic -5 stability dip and political narration. - shared/types.ts: Nation.ideology?: string (optional/additive) - shared/protocol.ts: IdeologyChange / IdeologyOps, IDEOLOGY_STABILITY_EFFECT = -5, TurnResult.ideology (required, between leaders and markers), nationForPrompt now carries ideology - server/engine.ts: validateIdeologyOps (exported, never throws), applyIdeologyChange (resolve -> set field -> -5 dip mirrored to regions + re-derived -> political event), ideology block in applyTurnResult after leaders / before markers, isMeaningful + validateTurnResult + system prompt + runTurn unclear fallback - server/stub.ts: StubPayload gains ideology; deterministicTurn returns ideology: { changes: [] } (never changes one, e2e unaffected) - Tests: engine.test.ts (validate / isMeaningful / applyTurnResult / buildUserPrompt), protocol.test.ts (constant + nationForPrompt), db.test.ts (legacy load + round-trip); every TurnResult fixture updated - package.json -> 0.39.0; CHANGELOG v0.39.0 entry