@mcptoolshop/sovereign 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +126 -0
- package/LICENSE +21 -0
- package/README.es.md +158 -0
- package/README.fr.md +158 -0
- package/README.hi.md +158 -0
- package/README.it.md +158 -0
- package/README.ja.md +158 -0
- package/README.md +158 -0
- package/README.pt-BR.md +158 -0
- package/README.zh.md +158 -0
- package/SECURITY.md +61 -0
- package/bin/sovereign.js +167 -0
- package/package.json +56 -0
- package/release/00-START-HERE.html +333 -0
- package/release/CHANGELOG.md +126 -0
- package/release/README.txt +144 -0
- package/release/balance-evidence/README.txt +81 -0
- package/release/balance-evidence/raw-data/sovereign-batch-v0.10-canonical-400.json +72134 -0
- package/release/balance-evidence/raw-data/sovereign-batch-v0.10-canonical-slot-swap.json +18137 -0
- package/release/balance-evidence/raw-data/sovereign-batch-v0.10-canonical.json +18137 -0
- package/release/balance-evidence/raw-data/sovereign-batch-v0.10-mc-mirror.json +18089 -0
- package/release/balance-evidence/raw-data/sovereign-batch-v0.10-mfg-mirror.json +18089 -0
- package/release/balance-evidence/raw-data/sovereign-batch-v0.10-tf-mirror.json +18089 -0
- package/release/balance-evidence/sovereign-batch-v0.10-canonical-400.html +1 -0
- package/release/balance-evidence/sovereign-batch-v0.10-canonical-slot-swap.html +1 -0
- package/release/balance-evidence/sovereign-batch-v0.10-canonical.html +1 -0
- package/release/balance-evidence/sovereign-batch-v0.10-mc-mirror.html +1 -0
- package/release/balance-evidence/sovereign-batch-v0.10-mfg-mirror.html +1 -0
- package/release/balance-evidence/sovereign-batch-v0.10-summary.html +2 -0
- package/release/balance-evidence/sovereign-batch-v0.10-tf-mirror.html +1 -0
- package/release/board-game/README.txt +48 -0
- package/release/board-game/sovereign-economy-audit.html +501 -0
- package/release/board-game/sovereign-print-audit.html +479 -0
- package/release/board-game/sovereign-prototype.html +1939 -0
- package/release/design-history/01-phase1-concept.html +632 -0
- package/release/design-history/02-phase2-prototype.html +1026 -0
- package/release/design-history/03-phase3-audit.html +268 -0
- package/release/design-history/04-phase4-audit.html +274 -0
- package/release/design-history/05-phase5-audit.html +305 -0
- package/release/design-history/README.txt +66 -0
- package/release/digital-mode/README.txt +89 -0
- package/release/digital-mode/sovereign-solo.html +3884 -0
- package/release/digital-mode/sovereign-v0.10-freeze-audit.html +67 -0
|
@@ -0,0 +1,632 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<title>Sovereign · Solo / Digital Mode Concept</title>
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
--revolutionary-debt:#6E1F1E; --state-debt:#4A6B8A; --revenue-system:#C28A28;
|
|
10
|
+
--commercial-infrastructure:#2E7A6B; --national-finance:#1F2D52;
|
|
11
|
+
--internal-improvements:#B85A28; --manufactures:#8C8A2E; --strategic-industry:#3A3A3A;
|
|
12
|
+
--parchment:#F0E6CD; --parchment-2:#E6DABC; --ink:#1A1612; --highlight:#C8392E;
|
|
13
|
+
--rule:rgba(26,22,18,0.55); --rule-soft:rgba(26,22,18,0.22);
|
|
14
|
+
--display: "Baskerville","Big Caslon","Hoefler Text","Garamond","Times New Roman",serif;
|
|
15
|
+
--body: "Iowan Old Style","Georgia","Cambria","Times New Roman",serif;
|
|
16
|
+
--ui: -apple-system,"Segoe UI","Helvetica Neue","Arial",system-ui,sans-serif;
|
|
17
|
+
--mono: "SF Mono","Menlo","Consolas","Courier New",monospace;
|
|
18
|
+
}
|
|
19
|
+
@page { size: 8.5in 11in; margin: 0.55in 0.65in; }
|
|
20
|
+
* { box-sizing: border-box; }
|
|
21
|
+
html, body { margin:0; padding:0; font-family: var(--body); color: var(--ink); background:#2A2622; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
|
|
22
|
+
.viewport { display:flex; flex-direction:column; align-items:center; gap:22px; padding:28px 16px 80px; }
|
|
23
|
+
.page { width:8.5in; min-height:11in; background: var(--parchment); position:relative; box-shadow:0 10px 40px rgba(0,0,0,.55), 0 2px 4px rgba(0,0,0,.4); padding: 0.55in 0.65in 0.5in; }
|
|
24
|
+
@media print {
|
|
25
|
+
html, body { background:#fff !important; }
|
|
26
|
+
.viewport { padding:0; gap:0; }
|
|
27
|
+
.page { box-shadow:none; padding:0; min-height:auto; width:100%; page-break-after: always; break-after: page; }
|
|
28
|
+
.page:last-child { page-break-after: auto; break-after: auto; }
|
|
29
|
+
.toolbar { display:none !important; }
|
|
30
|
+
}
|
|
31
|
+
.toolbar { position: fixed; top:16px; right:16px; z-index:30; }
|
|
32
|
+
.toolbar button { background:var(--parchment); color:var(--ink); border:1px solid var(--ink); padding:8px 14px; font-family:var(--ui); font-size:12px; letter-spacing:.08em; text-transform:uppercase; cursor:pointer; }
|
|
33
|
+
.doc-head { display:flex; justify-content:space-between; align-items:baseline; padding-bottom:6px; border-bottom:1px solid var(--ink); font-family:var(--ui); font-size:9.5px; letter-spacing:.22em; text-transform:uppercase; margin-bottom:16px; }
|
|
34
|
+
.doc-head .brand-mark { font-weight:700; letter-spacing:.32em; }
|
|
35
|
+
.doc-head .sigil { font-family:var(--display); font-style:italic; letter-spacing:0; text-transform:none; font-size:12px; }
|
|
36
|
+
h1.title { font-family:var(--display); font-weight:400; font-size:44px; line-height:1; margin:0 0 4px; letter-spacing:-.01em; }
|
|
37
|
+
.subtitle { font-family:var(--display); font-style:italic; font-size:14px; margin-bottom:12px; }
|
|
38
|
+
.lede { font-family:var(--display); font-style:italic; font-size:13px; line-height:1.45; max-width:64ch; margin:0 0 14px; }
|
|
39
|
+
h2 { font-family:var(--display); font-weight:400; font-size:20px; margin:18px 0 6px; border-bottom:1px solid var(--ink); padding-bottom:3px; }
|
|
40
|
+
h2 .ord { font-family:var(--mono); font-size:10.5px; letter-spacing:.12em; opacity:.65; margin-right:8px; }
|
|
41
|
+
h3 { font-family:var(--ui); font-size:10px; font-weight:700; letter-spacing:.18em; text-transform:uppercase; margin:10px 0 4px; }
|
|
42
|
+
h4 { font-family:var(--display); font-weight:700; font-size:12px; margin:6px 0 3px; }
|
|
43
|
+
p, li { font-family:var(--body); font-size:10.5px; line-height:1.5; margin:0 0 5px; }
|
|
44
|
+
ul, ol { padding-left:16px; margin:0 0 6px; }
|
|
45
|
+
strong { font-family:var(--display); font-weight:700; }
|
|
46
|
+
em { font-style:italic; }
|
|
47
|
+
.mono { font-family:var(--mono); font-size:10px; }
|
|
48
|
+
.formula, pre.code { font-family:var(--mono); font-size:9.5px; background:rgba(26,22,18,0.04); padding:6px 9px; border-left:2px solid var(--ink); margin:4px 0 8px; line-height:1.55; white-space:pre-wrap; overflow-wrap:break-word; }
|
|
49
|
+
table { width:100%; border-collapse:collapse; margin:5px 0 10px; font-size:9.5px; }
|
|
50
|
+
th, td { text-align:left; vertical-align:top; padding:3px 6px; line-height:1.35; border-bottom:0.5px solid var(--rule-soft); }
|
|
51
|
+
th { font-family:var(--ui); font-weight:700; letter-spacing:.12em; text-transform:uppercase; font-size:8.5px; background:var(--ink); color:var(--parchment); border-bottom:1px solid var(--ink); }
|
|
52
|
+
td.n { font-family:var(--mono); font-size:9.5px; text-align:right; font-variant-numeric:tabular-nums; }
|
|
53
|
+
.callout { border-left:2px solid var(--national-finance); padding:5px 10px; background:rgba(31,45,82,0.04); margin:5px 0; font-size:10px; }
|
|
54
|
+
.callout.warn { border-left-color:var(--highlight); background:rgba(200,57,46,0.04); }
|
|
55
|
+
.callout.warn strong { color:var(--highlight); }
|
|
56
|
+
.callout strong { color:var(--national-finance); }
|
|
57
|
+
.signature { margin-top:14px; padding-top:8px; border-top:1px solid var(--ink); display:flex; justify-content:space-between; font-family:var(--ui); font-size:8.5px; letter-spacing:.16em; text-transform:uppercase; }
|
|
58
|
+
.split-2 { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
|
|
59
|
+
.split-3 { display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px; }
|
|
60
|
+
.box { border:1px solid var(--rule-soft); padding:8px 10px; background:rgba(26,22,18,0.025); }
|
|
61
|
+
.box h4 { margin:0 0 3px; }
|
|
62
|
+
.box p { margin:0 0 3px; font-size:10px; }
|
|
63
|
+
.diagram { font-family:var(--mono); font-size:10px; line-height:1.55; white-space:pre; padding:8px 10px; border:1px solid var(--rule-soft); background:var(--parchment-2); margin:6px 0; overflow:auto; }
|
|
64
|
+
.surface { display:grid; grid-template-columns:140px 1fr; gap:8px 14px; margin:4px 0 8px; align-items:start; padding:6px 10px; border:1px dashed var(--ink); }
|
|
65
|
+
.surface .name { font-family:var(--display); font-weight:700; font-size:13px; }
|
|
66
|
+
.surface .desc { font-family:var(--body); font-size:10px; line-height:1.4; }
|
|
67
|
+
.tag-mvp { background:rgba(46,122,107,0.18); padding:1px 6px; font-family:var(--ui); font-size:8px; letter-spacing:.12em; text-transform:uppercase; font-weight:700; color:var(--commercial-infrastructure); }
|
|
68
|
+
.tag-v2 { background:rgba(31,45,82,0.12); padding:1px 6px; font-family:var(--ui); font-size:8px; letter-spacing:.12em; text-transform:uppercase; font-weight:700; color:var(--national-finance); }
|
|
69
|
+
.tag-out { background:rgba(200,57,46,0.15); padding:1px 6px; font-family:var(--ui); font-size:8px; letter-spacing:.12em; text-transform:uppercase; font-weight:700; color:var(--highlight); }
|
|
70
|
+
.narration { border:1px solid var(--ink); padding:8px 12px; background:var(--parchment-2); margin:5px 0; }
|
|
71
|
+
.narration h4 { margin:0 0 4px; font-family:var(--display); font-weight:400; font-size:13px; font-style:italic; }
|
|
72
|
+
.narration .snip { font-family:var(--body); font-size:10.5px; line-height:1.45; }
|
|
73
|
+
.narration .expand { font-family:var(--mono); font-size:8.5px; opacity:.7; text-transform:uppercase; letter-spacing:.18em; margin-top:4px; }
|
|
74
|
+
</style>
|
|
75
|
+
</head>
|
|
76
|
+
<body>
|
|
77
|
+
|
|
78
|
+
<div class="toolbar"><button onclick="window.print()">Print / Save PDF</button></div>
|
|
79
|
+
|
|
80
|
+
<div class="viewport">
|
|
81
|
+
|
|
82
|
+
<!-- ============================================================
|
|
83
|
+
PAGE 1 — TITLE + INTENT + LOOP
|
|
84
|
+
============================================================ -->
|
|
85
|
+
<section class="page">
|
|
86
|
+
<header class="doc-head">
|
|
87
|
+
<span class="brand-mark">SOVEREIGN</span>
|
|
88
|
+
<span class="sigil">Solo / Digital Mode Concept · v0.1</span>
|
|
89
|
+
<span>1 / 8</span>
|
|
90
|
+
</header>
|
|
91
|
+
|
|
92
|
+
<h1 class="title">Solo / Digital Mode</h1>
|
|
93
|
+
<div class="subtitle">Making the Hamilton System playable alone · concept, not implementation</div>
|
|
94
|
+
|
|
95
|
+
<p class="lede">Sovereign is a board game about building economic sovereignty through public credit, federal revenue, institutions, infrastructure, and industry. This document specifies a browser-based companion that makes the system playable solo while preserving the board-game soul: movement, assets, Acts, tracks, cards, economic tension, and historical causality.</p>
|
|
96
|
+
|
|
97
|
+
<h2><span class="ord">§ 01</span>Product Intent</h2>
|
|
98
|
+
<p>The printable board game (v0.2 balance candidate) is the canonical object. The digital mode is its companion, not its replacement. It exists to:</p>
|
|
99
|
+
<ul>
|
|
100
|
+
<li>Make the system <strong>accessible</strong> when no table, no print, or no opponents are available.</li>
|
|
101
|
+
<li>Automate <strong>state memory</strong> — track values, owned assets, lap count, cash, ledger — so a solo player can focus on decisions, not bookkeeping.</li>
|
|
102
|
+
<li>Provide <strong>scripted opponents</strong> with deterministic, traceable behavior, so a single player faces real economic pressure.</li>
|
|
103
|
+
<li>Surface <strong>historical causality</strong> inline as short, optional narration — never as a lecture.</li>
|
|
104
|
+
<li>Enable <strong>replay and simulation</strong> for balance inspection and learning the system.</li>
|
|
105
|
+
</ul>
|
|
106
|
+
<p><strong>What it is not.</strong> It is not a generic educational app, a trivia game, a passive simulation, or a spreadsheet front-end. The board game's grammar — square loop, dice, cards, votes, tracks — is preserved in the digital interface.</p>
|
|
107
|
+
|
|
108
|
+
<h2><span class="ord">§ 02</span>Core Loop</h2>
|
|
109
|
+
|
|
110
|
+
<h3>Plain-language loop</h3>
|
|
111
|
+
<ol>
|
|
112
|
+
<li>Choose Role (Treasury Architect · State Broker · Merchant Financier · Manufacturer).</li>
|
|
113
|
+
<li>Choose solo mode (Guided · Competitive · Replay).</li>
|
|
114
|
+
<li>Initialize board state. Tracks: Credit 5, Resistance 2, Capacity 1.</li>
|
|
115
|
+
<li>On each player's turn: roll dice → animate move → resolve space → make decisions → end turn.</li>
|
|
116
|
+
<li>At the start of each lap: reveal next Act of Congress → all players vote → resolve effect if passed → adjust tracks → place Act face-up in tray.</li>
|
|
117
|
+
<li>Card spaces: draw → read → resolve → adjust tracks → log.</li>
|
|
118
|
+
<li>Tax / corner spaces: auto-resolve with player confirmation.</li>
|
|
119
|
+
<li>End of lap 7: finish the round, compute Influence, present Endgame Report.</li>
|
|
120
|
+
</ol>
|
|
121
|
+
|
|
122
|
+
<h3>State-transition diagram</h3>
|
|
123
|
+
<div class="diagram">
|
|
124
|
+
SETUP → [LAP_START → ACT_VOTE → ACT_RESOLVE] → TURN_LOOP[N]
|
|
125
|
+
↓
|
|
126
|
+
TURN_LOOP : ROLL → MOVE → RESOLVE_SPACE → DECISIONS → END_TURN
|
|
127
|
+
RESOLVE : asset | route | institution | tax | card | corner
|
|
128
|
+
DECISIONS : human paused · scripted opponents deterministic
|
|
129
|
+
↓
|
|
130
|
+
(lap ≤ 7) → next LAP_START
|
|
131
|
+
(lap = 7) → SCORE → REPORT</div>
|
|
132
|
+
|
|
133
|
+
<h3>What the player sees at each step</h3>
|
|
134
|
+
<table>
|
|
135
|
+
<thead><tr><th>Step</th><th>Surface in focus</th><th>Player input</th><th>Automated</th></tr></thead>
|
|
136
|
+
<tbody>
|
|
137
|
+
<tr><td>Roll</td><td>Board View</td><td>Press Roll (Space)</td><td>2d6 result, animation</td></tr>
|
|
138
|
+
<tr><td>Move</td><td>Board View</td><td>—</td><td>Token slides along route</td></tr>
|
|
139
|
+
<tr><td>Resolve space</td><td>Asset Inspector OR Card Drawer</td><td>Buy / Decline / Upgrade / Pay (where applicable)</td><td>Rent calc, tax payment, track delta</td></tr>
|
|
140
|
+
<tr><td>Act vote</td><td>Acts of Congress Panel</td><td>Yes / No (or pay 100 TN to force)</td><td>Opponent votes traceable to holdings</td></tr>
|
|
141
|
+
<tr><td>Lap end</td><td>Ledger / Tracks</td><td>—</td><td>Threshold checks, Default / Rebellion firing</td></tr>
|
|
142
|
+
<tr><td>Score</td><td>Endgame Report</td><td>Review / export</td><td>Influence computation, system summary, narration</td></tr>
|
|
143
|
+
</tbody>
|
|
144
|
+
</table>
|
|
145
|
+
|
|
146
|
+
<div class="signature"><span>Sovereign · Solo / Digital Concept</span><span>v0.1 · 1 / 8</span></div>
|
|
147
|
+
</section>
|
|
148
|
+
|
|
149
|
+
<!-- ============================================================
|
|
150
|
+
PAGE 2 — SURFACES
|
|
151
|
+
============================================================ -->
|
|
152
|
+
<section class="page">
|
|
153
|
+
<header class="doc-head"><span class="brand-mark">SOVEREIGN</span><span class="sigil">Surfaces · Screens · Panels</span><span>2 / 8</span></header>
|
|
154
|
+
|
|
155
|
+
<h2><span class="ord">§ 03</span>Digital Mode Surfaces</h2>
|
|
156
|
+
|
|
157
|
+
<p>Eight surfaces, organised as one persistent center (Board View) and seven sidebars / drawers that the player can open as needed. Surfaces are not modal pages — they coexist in a single viewport, with the Board View always visible.</p>
|
|
158
|
+
|
|
159
|
+
<div class="surface">
|
|
160
|
+
<div class="name">A · Board View</div>
|
|
161
|
+
<div class="desc">The full 17 × 17 board rendered via the same SVG pipeline as the print tiles. Player tokens, owned assets marked with their owner's color, current lap, an Acts lane showing passed Acts face-up beside the board, and the three shared-track markers along the bottom.</div>
|
|
162
|
+
</div>
|
|
163
|
+
|
|
164
|
+
<div class="surface">
|
|
165
|
+
<div class="name">B · Player Treasury Panel</div>
|
|
166
|
+
<div class="desc">Per-player: cash on hand, role, list of owned assets grouped by system, upgrade tokens placed, current Influence estimate (live), liabilities (mortgaged properties, owed rent), and Crisis status if applicable. The human player's panel is anchored bottom-left; opponents are collapsible cards.</div>
|
|
167
|
+
</div>
|
|
168
|
+
|
|
169
|
+
<div class="surface">
|
|
170
|
+
<div class="name">C · Asset Inspector</div>
|
|
171
|
+
<div class="desc">Click an asset to open: full card detail, computed payment table (Base / Full Set / Tier I / II / III), upgrade options with cost and incremental income, Act modifiers in force, and a short historical note (40–60 words, expandable).</div>
|
|
172
|
+
</div>
|
|
173
|
+
|
|
174
|
+
<div class="surface">
|
|
175
|
+
<div class="name">D · Event / Card Drawer</div>
|
|
176
|
+
<div class="desc">When a Market Shock or Republic Debate card is drawn: card fronted full-size, effect resolution buttons, track-delta preview, optional historical narration. Card stays visible until the player presses "Resolve." Discard pile inspectable.</div>
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
<div class="surface">
|
|
180
|
+
<div class="name">E · Acts of Congress Panel</div>
|
|
181
|
+
<div class="desc">At lap start: top card revealed face-up. Vote tiles for each player. Human votes by click or keyboard (Y / N). Scripted opponents vote with a visible reason in the ledger ("State Broker votes YES — holds 2 State Debt"). Passed Acts move to the tray with their effects summarized.</div>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
<div class="surface">
|
|
185
|
+
<div class="name">F · Shared Tracks Panel</div>
|
|
186
|
+
<div class="desc">Public Credit, Public Resistance, Industrial Capacity — each shown as a 0–12 scale with marker, threshold flags (v0.2: Capacity ≥ 6 / ≥ 8), and a tooltip on each movement: "Capacity +2 · Report on Manufactures passed."</div>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
<div class="surface">
|
|
190
|
+
<div class="name">G · Turn Log / Ledger</div>
|
|
191
|
+
<div class="desc">Right-side scrollback of every event: cash movement, track movement, Act resolution, card draw, opponent decision with reason. Searchable, exportable, used for debugging the AI and for player learning. Lines are time-stamped to lap and turn.</div>
|
|
192
|
+
</div>
|
|
193
|
+
|
|
194
|
+
<div class="surface">
|
|
195
|
+
<div class="name">H · Endgame Report</div>
|
|
196
|
+
<div class="desc">After lap 7 scoring: final Influence breakdown by source (matching the audit's scoring table), economic system the player built (which Acts they passed, which sets they completed, which tracks they pushed), strongest and weakest holding, and a 300–500 word historical narration scoped to the actual game played.</div>
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<div class="callout"><strong>Visual style.</strong> All surfaces inherit the prototype's Federalist Treasury aesthetic: parchment + ink + system color bands + locked icon set. The same SVG symbols (debt certificate, customs house, harbor, manufactory, etc.) render at every size.</div>
|
|
200
|
+
|
|
201
|
+
<div class="signature"><span>Sovereign · Solo / Digital Concept</span><span>v0.1 · 2 / 8</span></div>
|
|
202
|
+
</section>
|
|
203
|
+
|
|
204
|
+
<!-- ============================================================
|
|
205
|
+
PAGE 3 — MODES + OPPONENTS
|
|
206
|
+
============================================================ -->
|
|
207
|
+
<section class="page">
|
|
208
|
+
<header class="doc-head"><span class="brand-mark">SOVEREIGN</span><span class="sigil">Solo modes · Scripted opponents</span><span>3 / 8</span></header>
|
|
209
|
+
|
|
210
|
+
<h2><span class="ord">§ 04</span>Solo Modes</h2>
|
|
211
|
+
|
|
212
|
+
<div class="split-3">
|
|
213
|
+
<div class="box">
|
|
214
|
+
<h4>A · Guided Treasury Secretary</h4>
|
|
215
|
+
<p><strong>Goal:</strong> build a stable Hamiltonian economy against scripted political and market pressure.</p>
|
|
216
|
+
<p><strong>Agency:</strong> human plays a single role and makes all asset and vote decisions. Opponents are minimal — a scripted "Opposition" votes on every Act based on shared-track state.</p>
|
|
217
|
+
<p><strong>Opponents:</strong> 1 scripted Opposition (votes NO on Acts that raise Resistance).</p>
|
|
218
|
+
<p><strong>Win:</strong> finish 7 laps with Credit ≥ 8 and Capacity ≥ 6.</p>
|
|
219
|
+
<p><strong>Loss:</strong> Default fires.</p>
|
|
220
|
+
<p><strong>Teaches:</strong> what each Act does, how tracks couple, how upgrades pay back.</p>
|
|
221
|
+
</div>
|
|
222
|
+
|
|
223
|
+
<div class="box">
|
|
224
|
+
<h4>B · Competitive Solo Table</h4>
|
|
225
|
+
<p><strong>Goal:</strong> beat 2 scripted opponents on Influence at lap 7.</p>
|
|
226
|
+
<p><strong>Agency:</strong> human plays a role of their choosing.</p>
|
|
227
|
+
<p><strong>Opponents:</strong> 2 scripted profiles. MVP pairs <em>Treasury / Finance</em> + <em>Merchant / Infrastructure</em>.</p>
|
|
228
|
+
<p><strong>Win:</strong> highest Influence at game end.</p>
|
|
229
|
+
<p><strong>Loss:</strong> finish below both opponents.</p>
|
|
230
|
+
<p><strong>Teaches:</strong> board-game strategy, route ladder pressure, the Bank Charter tipping point.</p>
|
|
231
|
+
</div>
|
|
232
|
+
|
|
233
|
+
<div class="box">
|
|
234
|
+
<h4>C · Simulation Replay</h4>
|
|
235
|
+
<p><strong>Goal:</strong> watch or step through an AI-only game.</p>
|
|
236
|
+
<p><strong>Agency:</strong> none in-game. Player picks the seed, profiles, and speed.</p>
|
|
237
|
+
<p><strong>Opponents:</strong> 3–4 scripted profiles, all AI.</p>
|
|
238
|
+
<p><strong>Win:</strong> n/a.</p>
|
|
239
|
+
<p><strong>Loss:</strong> n/a.</p>
|
|
240
|
+
<p><strong>Teaches:</strong> economy inspection. Used by the designer for balance work and by the player to study system interactions.</p>
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
|
|
244
|
+
<h2><span class="ord">§ 05</span>Scripted Opponent Profiles</h2>
|
|
245
|
+
<p>Four deterministic profiles. No LLM. Behavior is rules-based and shown in the ledger so the human can predict opponent votes from visible holdings.</p>
|
|
246
|
+
|
|
247
|
+
<table>
|
|
248
|
+
<thead><tr><th>Profile</th><th>Asset priorities</th><th>Upgrade behavior</th><th>YES Acts</th><th>NO Acts</th><th>State-gated Acts</th><th>100 TN fee?</th><th>Auctions</th><th>Tracks favored</th><th>Risk · Weakness</th></tr></thead>
|
|
249
|
+
<tbody>
|
|
250
|
+
<tr>
|
|
251
|
+
<td><strong>Treasury / Finance</strong></td>
|
|
252
|
+
<td>Rev Debt → State Debt → Nat'l Finance → Bank → Mint</td>
|
|
253
|
+
<td>Tier II on cheapest set when owns set + 250 TN spare</td>
|
|
254
|
+
<td>Funding, Assumption, Bank Charter, Coinage</td>
|
|
255
|
+
<td>Excise Enforcement (if owns Whiskey)</td>
|
|
256
|
+
<td>Tariff: YES if owns Revenue, NO otherwise</td>
|
|
257
|
+
<td>Yes, on Bank Charter only</td>
|
|
258
|
+
<td>Bids up to 80 % of list cost on Nat'l Finance / Bank / Mint</td>
|
|
259
|
+
<td>Credit ↑</td>
|
|
260
|
+
<td>Low risk · weak vs runaway Routes</td>
|
|
261
|
+
</tr>
|
|
262
|
+
<tr>
|
|
263
|
+
<td><strong>Merchant / Infrastructure</strong></td>
|
|
264
|
+
<td>Routes 1 → 2 → 3 → 4 before any system set</td>
|
|
265
|
+
<td>Tier I on Revenue or Commerce when owns set</td>
|
|
266
|
+
<td>Tariff Schedule, Coinage</td>
|
|
267
|
+
<td>Assumption (raises Resistance)</td>
|
|
268
|
+
<td>Funding: YES if cash < 800; NO if cash > 1 200</td>
|
|
269
|
+
<td>Yes, on Tariff Schedule only</td>
|
|
270
|
+
<td>Bids aggressively on Routes (up to 1.5× cost)</td>
|
|
271
|
+
<td>Capacity ↓ (less competition)</td>
|
|
272
|
+
<td>Medium risk · weak if denied a 3rd route</td>
|
|
273
|
+
</tr>
|
|
274
|
+
<tr>
|
|
275
|
+
<td><strong>Manufacturer / Industry</strong></td>
|
|
276
|
+
<td>Mfg → Strategic → Improvements (partial)</td>
|
|
277
|
+
<td>Tier I as soon as Mfg or Strategic set; Tier II if Report on Mfg passed</td>
|
|
278
|
+
<td>Report on Manufactures, Coinage (Capacity +1)</td>
|
|
279
|
+
<td>Excise Enforcement (Resistance +2)</td>
|
|
280
|
+
<td>Bank Charter: YES if owns 0 Institutions, NO if owns 1+</td>
|
|
281
|
+
<td>Yes, on Report on Manufactures only</td>
|
|
282
|
+
<td>Bids on Mfg / Strategic up to list cost</td>
|
|
283
|
+
<td>Capacity ↑</td>
|
|
284
|
+
<td>Medium risk · slow start, late payoff</td>
|
|
285
|
+
</tr>
|
|
286
|
+
<tr>
|
|
287
|
+
<td><strong>Opportunist / Cash</strong></td>
|
|
288
|
+
<td>Any unowned asset under 200 TN; one cheap full set max</td>
|
|
289
|
+
<td>Tier I on the one set owned; never beyond</td>
|
|
290
|
+
<td>None reliably</td>
|
|
291
|
+
<td>Acts that cost cash (Whiskey Rebellion via Resistance)</td>
|
|
292
|
+
<td>All Acts: YES if NF or Treasury holds tracks, NO otherwise</td>
|
|
293
|
+
<td>No</td>
|
|
294
|
+
<td>Snipes auctions at 30–50 % of list cost</td>
|
|
295
|
+
<td>None — neutral</td>
|
|
296
|
+
<td>High risk · cash converts to Influence at worst rate (200:1)</td>
|
|
297
|
+
</tr>
|
|
298
|
+
</tbody>
|
|
299
|
+
</table>
|
|
300
|
+
|
|
301
|
+
<div class="callout"><strong>Implementability rule.</strong> Every vote, bid, and upgrade decision must be derivable from the visible state (cash + assets + tracks + role). No hidden information. The ledger shows the rule that fired ("Manufacturer votes NO on Bank Charter — owns 1 Institution"). This makes the AI playtestable and the experience legible.</div>
|
|
302
|
+
|
|
303
|
+
<div class="signature"><span>Sovereign · Solo / Digital Concept</span><span>v0.1 · 3 / 8</span></div>
|
|
304
|
+
</section>
|
|
305
|
+
|
|
306
|
+
<!-- ============================================================
|
|
307
|
+
PAGE 4 — STATE MODEL + AUTOMATION
|
|
308
|
+
============================================================ -->
|
|
309
|
+
<section class="page">
|
|
310
|
+
<header class="doc-head"><span class="brand-mark">SOVEREIGN</span><span class="sigil">State model · Automation</span><span>4 / 8</span></header>
|
|
311
|
+
|
|
312
|
+
<h2><span class="ord">§ 06</span>State Model</h2>
|
|
313
|
+
|
|
314
|
+
<p>Conceptual pseudo-schema. Not implementation code. The state model is the contract between game logic, opponent AI, ledger, and save/load.</p>
|
|
315
|
+
|
|
316
|
+
<pre class="code">GameState = {
|
|
317
|
+
rngSeed: integer, // deterministic replay
|
|
318
|
+
lap: 1..7,
|
|
319
|
+
turn: 1..players.length,
|
|
320
|
+
phase: 'lap-start' | 'turn' | 'act-vote' | 'scoring' | 'over',
|
|
321
|
+
players: [
|
|
322
|
+
{
|
|
323
|
+
id, name, role: 'treasury-architect' | 'state-broker' |
|
|
324
|
+
'merchant-financier' | 'manufacturer',
|
|
325
|
+
profile: 'human' | 'treasury' | 'merchant' | 'manufacturer' | 'opportunist',
|
|
326
|
+
position: 0..39,
|
|
327
|
+
cash: integer,
|
|
328
|
+
assets: [ { kind: 'property'|'route'|'institution', id, tier: 0..3,
|
|
329
|
+
mortgaged: boolean } ],
|
|
330
|
+
influencePoints: integer, // accumulated game-end-only at score
|
|
331
|
+
crisis: { active: boolean, turnsRemaining: integer },
|
|
332
|
+
bankruptLaps: integer,
|
|
333
|
+
keptCards: [ cardId ] // "You Are Hamilton"
|
|
334
|
+
}
|
|
335
|
+
],
|
|
336
|
+
decks: {
|
|
337
|
+
marketShock: { draw: [cardId], discard: [cardId] },
|
|
338
|
+
republicDebate: { draw: [cardId], discard: [cardId] }
|
|
339
|
+
},
|
|
340
|
+
acts: {
|
|
341
|
+
sequence: [ act1..act7 ], // current pending order
|
|
342
|
+
pending: actId | null,
|
|
343
|
+
passed: [ { actId, lap, effectsInForce: [...] } ],
|
|
344
|
+
failed: [ { actId, lap } ] // moved to bottom of sequence
|
|
345
|
+
},
|
|
346
|
+
tracks: {
|
|
347
|
+
credit: { value: 0..12, lastDelta: { source, delta, lap } },
|
|
348
|
+
resistance:{ value: 0..12, lastDelta: { ... } },
|
|
349
|
+
capacity: { value: 0..12, lastDelta: { ... } }
|
|
350
|
+
},
|
|
351
|
+
ledger: [
|
|
352
|
+
{ lap, turn, actor, event, detail, cashDelta?, trackDelta? }
|
|
353
|
+
]
|
|
354
|
+
}</pre>
|
|
355
|
+
|
|
356
|
+
<h2><span class="ord">§ 07</span>Automation Rules</h2>
|
|
357
|
+
|
|
358
|
+
<div class="split-2">
|
|
359
|
+
<div class="box">
|
|
360
|
+
<h4>Automated (no human input)</h4>
|
|
361
|
+
<ul>
|
|
362
|
+
<li>Dice roll · 2d6, RNG-seeded for replay.</li>
|
|
363
|
+
<li>Movement · token slides along board path.</li>
|
|
364
|
+
<li>Rent calculation · base × tier × act multipliers.</li>
|
|
365
|
+
<li>Tax space payments (Federal Excise, Speculation Scandal).</li>
|
|
366
|
+
<li>Route ladder lookup (v0.2: 25 / 50 / 100 / 150).</li>
|
|
367
|
+
<li>Institution dice payments (Bank pre/post-charter, Mint state machine).</li>
|
|
368
|
+
<li>Card effect resolution where unambiguous.</li>
|
|
369
|
+
<li>Act timing · revealed at lap start.</li>
|
|
370
|
+
<li>Scripted opponent votes, bids, upgrades.</li>
|
|
371
|
+
<li>Track threshold firings (Default, Rebellion, Capacity bonuses).</li>
|
|
372
|
+
<li>Bankruptcy bookkeeping.</li>
|
|
373
|
+
<li>Influence scoring at game end.</li>
|
|
374
|
+
<li>Ledger writes for every state transition.</li>
|
|
375
|
+
</ul>
|
|
376
|
+
</div>
|
|
377
|
+
<div class="box">
|
|
378
|
+
<h4>Player choice (no automation)</h4>
|
|
379
|
+
<ul>
|
|
380
|
+
<li>Role selection at game start.</li>
|
|
381
|
+
<li>Solo mode selection.</li>
|
|
382
|
+
<li>Buy / decline an unowned asset on landing.</li>
|
|
383
|
+
<li>Bid in auctions (snap-bid UI: pass · +10 · +50 · +100 · custom).</li>
|
|
384
|
+
<li>Upgrade decisions: which property, which tier, when.</li>
|
|
385
|
+
<li>Mortgage decisions.</li>
|
|
386
|
+
<li>Vote on Acts of Congress (Yes / No / Pay 100 TN to force).</li>
|
|
387
|
+
<li>Card-driven choices ("Strict Construction Objection" → Crisis OR pay 50).</li>
|
|
388
|
+
<li>Crisis exit choice (pay 50 · roll doubles · skip turn).</li>
|
|
389
|
+
<li>End of turn confirmation.</li>
|
|
390
|
+
<li><em>v2:</em> trades with opponents.</li>
|
|
391
|
+
</ul>
|
|
392
|
+
</div>
|
|
393
|
+
</div>
|
|
394
|
+
|
|
395
|
+
<div class="callout warn"><strong>Anti-drift rule.</strong> Automation must never make a decision the board game would force a player to make. If the rule book gives the player a choice, the digital mode pauses for it — even if the "obviously correct" answer exists. Automation is for bookkeeping, not strategy.</div>
|
|
396
|
+
|
|
397
|
+
<div class="signature"><span>Sovereign · Solo / Digital Concept</span><span>v0.1 · 4 / 8</span></div>
|
|
398
|
+
</section>
|
|
399
|
+
|
|
400
|
+
<!-- ============================================================
|
|
401
|
+
PAGE 5 — NARRATION LAYER
|
|
402
|
+
============================================================ -->
|
|
403
|
+
<section class="page">
|
|
404
|
+
<header class="doc-head"><span class="brand-mark">SOVEREIGN</span><span class="sigil">Historical narration layer</span><span>5 / 8</span></header>
|
|
405
|
+
|
|
406
|
+
<h2><span class="ord">§ 08</span>Historical Narration Layer</h2>
|
|
407
|
+
|
|
408
|
+
<p>Narration teaches Hamilton's system without becoming a lecture. <strong>Default snippet: 40 – 60 words.</strong> One paragraph, renders inline. An <em>Expand</em> button reveals 150 – 200 words of deeper context. Endgame report is a single 300 – 500 word section scoped to the player's actual game.</p>
|
|
409
|
+
|
|
410
|
+
<h3>Triggers</h3>
|
|
411
|
+
<ul>
|
|
412
|
+
<li>First purchase of each system (one-shot per game, per player).</li>
|
|
413
|
+
<li>Each Act of Congress when it passes.</li>
|
|
414
|
+
<li>Each shared-track threshold first reached.</li>
|
|
415
|
+
<li>Default · Rebellion · Bank Charter · Coinage Act · Report on Manufactures (special-cased).</li>
|
|
416
|
+
<li>Endgame report (always).</li>
|
|
417
|
+
</ul>
|
|
418
|
+
|
|
419
|
+
<h3>Sample Snippets</h3>
|
|
420
|
+
|
|
421
|
+
<div class="narration">
|
|
422
|
+
<h4>Revolutionary Debt · first purchase</h4>
|
|
423
|
+
<div class="snip">In 1789 Continental Certificates and Soldier Pay Notes traded at five to twenty cents on the dollar. Hamilton's First Report proposed honoring them all at par. Speculators ran ahead of post riders; veterans cried betrayal; the federal Treasury bought its first political ally.</div>
|
|
424
|
+
<div class="expand">▸ Expand (160 words)</div>
|
|
425
|
+
</div>
|
|
426
|
+
|
|
427
|
+
<div class="narration">
|
|
428
|
+
<h4>Assumption Act passes</h4>
|
|
429
|
+
<div class="snip">The federal government has assumed the war debts of every state. Massachusetts and South Carolina creditors are now federal creditors. The compromise that passed it moved the capital to the Potomac — Virginia's price for the deal.</div>
|
|
430
|
+
<div class="expand">▸ Expand (185 words)</div>
|
|
431
|
+
</div>
|
|
432
|
+
|
|
433
|
+
<div class="narration">
|
|
434
|
+
<h4>Bank Charter passes</h4>
|
|
435
|
+
<div class="snip">The Bank of the United States is open. Federally chartered, partly federally owned, operated as a commercial bank. It will hold Treasury deposits, discount merchant bills, and issue banknotes that circulate at par. Jefferson called it unconstitutional. Washington signed it anyway.</div>
|
|
436
|
+
<div class="expand">▸ Expand (200 words on implied powers)</div>
|
|
437
|
+
</div>
|
|
438
|
+
|
|
439
|
+
<div class="narration">
|
|
440
|
+
<h4>Tariff Schedule passes</h4>
|
|
441
|
+
<div class="snip">A duty on every imported barrel, yard of British cloth, and cask of West India rum. The federal Treasury now has a dependable revenue stream. Merchants pass the cost to consumers; importers grumble; the Treasury's books begin to balance.</div>
|
|
442
|
+
<div class="expand">▸ Expand (170 words)</div>
|
|
443
|
+
</div>
|
|
444
|
+
|
|
445
|
+
<div class="narration">
|
|
446
|
+
<h4>Report on Manufactures passes</h4>
|
|
447
|
+
<div class="snip">Hamilton's Report on Manufactures argues that strategic industry — armories, foundries, shipyards, textile works — is a national-security project, not a private affair. Congress shelved most of it. The framework outlived the politics.</div>
|
|
448
|
+
<div class="expand">▸ Expand (190 words on infant-industry protection)</div>
|
|
449
|
+
</div>
|
|
450
|
+
|
|
451
|
+
<div class="narration">
|
|
452
|
+
<h4>Whiskey Rebellion / Resistance ≥ 8</h4>
|
|
453
|
+
<div class="snip">The Whiskey Excise of 1791 has provoked the frontier. Western Pennsylvania farmers refuse to pay; tax collectors are tarred; federal authority is tested for the first time. Hamilton will ride west with the militia.</div>
|
|
454
|
+
<div class="expand">▸ Expand (175 words)</div>
|
|
455
|
+
</div>
|
|
456
|
+
|
|
457
|
+
<div class="narration">
|
|
458
|
+
<h4>Industrial Capacity threshold ≥ 6</h4>
|
|
459
|
+
<div class="snip">The young republic's textile mills, iron foundries, and glassworks have reached a productive threshold. Carded cotton replaces British imports; ironmongers cast plows and cannon; the country's manufactures clear a quarter of the federal market.</div>
|
|
460
|
+
<div class="expand">▸ Expand (160 words)</div>
|
|
461
|
+
</div>
|
|
462
|
+
|
|
463
|
+
<h3>Tone & Length Discipline</h3>
|
|
464
|
+
<ul>
|
|
465
|
+
<li>Active voice. Specific dates and names where they ground the moment.</li>
|
|
466
|
+
<li>No "the player" framing. The narration speaks to the republic, not to the user.</li>
|
|
467
|
+
<li>No multi-paragraph snippets in the default state.</li>
|
|
468
|
+
<li>Expand is one click; never auto-opens.</li>
|
|
469
|
+
<li>Endgame report can be longer but is single-section, scoped to the game just finished.</li>
|
|
470
|
+
</ul>
|
|
471
|
+
|
|
472
|
+
<div class="signature"><span>Sovereign · Solo / Digital Concept</span><span>v0.1 · 5 / 8</span></div>
|
|
473
|
+
</section>
|
|
474
|
+
|
|
475
|
+
<!-- ============================================================
|
|
476
|
+
PAGE 6 — SAVE / LOAD + OUT-OF-SCOPE + MVP
|
|
477
|
+
============================================================ -->
|
|
478
|
+
<section class="page">
|
|
479
|
+
<header class="doc-head"><span class="brand-mark">SOVEREIGN</span><span class="sigil">Save · Out of scope · MVP</span><span>6 / 8</span></header>
|
|
480
|
+
|
|
481
|
+
<h2><span class="ord">§ 09</span>Save / Load · Replay</h2>
|
|
482
|
+
|
|
483
|
+
<ul>
|
|
484
|
+
<li><strong>Local browser save</strong> — autosave to <span class="mono">localStorage</span> after every turn. One slot per browser by default; named slots in v2.</li>
|
|
485
|
+
<li><strong>Export JSON</strong> — full GameState including <span class="mono">rngSeed</span> and <span class="mono">ledger</span>. Downloadable as <span class="mono">sovereign-game-{seed}.json</span>.</li>
|
|
486
|
+
<li><strong>Import JSON</strong> — drag & drop or file picker. Resumes from any saved state.</li>
|
|
487
|
+
<li><strong>Replay ledger</strong> — re-runs the game deterministically from <span class="mono">rngSeed</span> + decision log. Lets the designer step through any past play to inspect AI behavior.</li>
|
|
488
|
+
<li><strong>Rewind one turn</strong> — v2 only. Reverts the last <span class="mono">ledger</span> block. Used for misclicks, not for cheating.</li>
|
|
489
|
+
<li><strong>Deterministic seed</strong> — for the simulation mode and for shared scenario challenges later.</li>
|
|
490
|
+
</ul>
|
|
491
|
+
|
|
492
|
+
<h2><span class="ord">§ 10</span>What NOT to Build Yet</h2>
|
|
493
|
+
<table>
|
|
494
|
+
<thead><tr><th>Out of scope</th><th>Why excluded · drift risk</th></tr></thead>
|
|
495
|
+
<tbody>
|
|
496
|
+
<tr><td><span class="tag-out">Online multiplayer</span></td><td>Adds backend, accounts, sync, anti-cheat. Solo mode must work first.</td></tr>
|
|
497
|
+
<tr><td><span class="tag-out">User accounts</span></td><td>No auth. Local state is sufficient until proven otherwise.</td></tr>
|
|
498
|
+
<tr><td><span class="tag-out">Monetization</span></td><td>The artifact is free. Solo digital should match.</td></tr>
|
|
499
|
+
<tr><td><span class="tag-out">Custom backend</span></td><td>Everything runs client-side. Static hosting only.</td></tr>
|
|
500
|
+
<tr><td><span class="tag-out">LLM opponents</span></td><td>Opacity destroys the legibility goal. Scripted profiles only.</td></tr>
|
|
501
|
+
<tr><td><span class="tag-out">3D animated board</span></td><td>Spectacle vs. clarity. The 2D SVG board is canonical.</td></tr>
|
|
502
|
+
<tr><td><span class="tag-out">Marketplace · collectibles</span></td><td>Wrong category of product.</td></tr>
|
|
503
|
+
<tr><td><span class="tag-out">Card expansion</span></td><td>Mechanic change. Out of scope until v0.2 plays clean.</td></tr>
|
|
504
|
+
<tr><td><span class="tag-out">Rewriting the board game rules</span></td><td>The artifact is canon. Digital mode follows.</td></tr>
|
|
505
|
+
<tr><td><span class="tag-out">Spreadsheet UI</span></td><td>The board IS the interface. Tables are reference, not gameplay.</td></tr>
|
|
506
|
+
</tbody>
|
|
507
|
+
</table>
|
|
508
|
+
|
|
509
|
+
<h2><span class="ord">§ 11</span>MVP — Smallest Version That Preserves the Soul</h2>
|
|
510
|
+
<p><strong>Player configuration:</strong> 1 human + 2 scripted opponents = 3-player game (matches the prototype's lower player bound). MVP opponent pairing: <em>Treasury / Finance</em> + <em>Merchant / Infrastructure</em> — the two strongest profiles from FC-EM-002. v2 expands to 4 players with all four profiles selectable.</p>
|
|
511
|
+
|
|
512
|
+
<h3>MVP must include</h3>
|
|
513
|
+
<ul>
|
|
514
|
+
<li>Automated board movement, dice, and rent calculation.</li>
|
|
515
|
+
<li>Automated Acts of Congress (reveal, vote, resolve, place in tray).</li>
|
|
516
|
+
<li>Automated shared tracks (Credit · Resistance · Capacity), including v0.2 thresholds.</li>
|
|
517
|
+
<li>Card draw and effect resolution for both decks.</li>
|
|
518
|
+
<li>Asset purchase, decline, auction, and upgrade decisions exposed as human choices.</li>
|
|
519
|
+
<li>The two scripted opponent profiles with deterministic, traceable behavior.</li>
|
|
520
|
+
<li>Endgame Influence report.</li>
|
|
521
|
+
<li>Turn log / ledger surface visible at all times.</li>
|
|
522
|
+
<li>The accessibility floor described in § 15.</li>
|
|
523
|
+
</ul>
|
|
524
|
+
|
|
525
|
+
<h3>MVP must prove</h3>
|
|
526
|
+
<ul>
|
|
527
|
+
<li>Solo play is possible — a player can complete a 7-lap game with no physical components.</li>
|
|
528
|
+
<li>Hamilton's economic system is legible — the player can answer "what did each Act do?" by playing.</li>
|
|
529
|
+
<li>Shared tracks influence decisions — the player can see why they shift and respond to thresholds.</li>
|
|
530
|
+
<li>Scripted opponents create pressure — the route-runaway and the Treasury-stack profiles both feel real.</li>
|
|
531
|
+
</ul>
|
|
532
|
+
|
|
533
|
+
<div class="signature"><span>Sovereign · Solo / Digital Concept</span><span>v0.1 · 6 / 8</span></div>
|
|
534
|
+
</section>
|
|
535
|
+
|
|
536
|
+
<!-- ============================================================
|
|
537
|
+
PAGE 7 — v2 + RISKS + SEQUENCING
|
|
538
|
+
============================================================ -->
|
|
539
|
+
<section class="page">
|
|
540
|
+
<header class="doc-head"><span class="brand-mark">SOVEREIGN</span><span class="sigil">v2 · Risks · Sequencing</span><span>7 / 8</span></header>
|
|
541
|
+
|
|
542
|
+
<h2><span class="ord">§ 12</span>Ideal v2</h2>
|
|
543
|
+
<ul>
|
|
544
|
+
<li>All four scripted profiles available; player picks the table composition.</li>
|
|
545
|
+
<li>Scenario modes (e.g. "Bank Charter Fails," "Whiskey Frontier," "Tariff Repealed at Lap 4").</li>
|
|
546
|
+
<li>Simulation Replay mode (AI vs. AI, configurable seed and profiles).</li>
|
|
547
|
+
<li>Historical narration library — full library of 30+ snippets, expand-on-demand.</li>
|
|
548
|
+
<li>Balance telemetry — opt-in anonymous outcome export for design iteration.</li>
|
|
549
|
+
<li>Save / load with named slots and JSON export.</li>
|
|
550
|
+
<li>Turn log export (CSV / Markdown).</li>
|
|
551
|
+
<li>Printable artifact viewer — embed the v0.2 prototype HTML inside the app so a player can flip to a card or sheet without leaving.</li>
|
|
552
|
+
<li>Guided tutorial — 5-minute first run that walks a new player through a single turn.</li>
|
|
553
|
+
<li>Optional <em>Why this happened?</em> explainer on any ledger line.</li>
|
|
554
|
+
</ul>
|
|
555
|
+
|
|
556
|
+
<h2><span class="ord">§ 13</span>Risks & Mitigations</h2>
|
|
557
|
+
<table>
|
|
558
|
+
<thead><tr><th>Risk</th><th>Mitigation</th></tr></thead>
|
|
559
|
+
<tbody>
|
|
560
|
+
<tr><td>Becoming a spreadsheet</td><td>Board View is the persistent surface. All decisions originate from a board interaction. Tables are reference, not the interface.</td></tr>
|
|
561
|
+
<tr><td>Over-automating player agency</td><td>Anti-drift rule (§ 07): if the board game asks for a choice, the digital mode pauses for it. No "auto-buy" toggle in MVP.</td></tr>
|
|
562
|
+
<tr><td>Lecture-mode narration</td><td>40 – 60 word default. Expand is a click. No multi-paragraph snippets in default state. Endgame report scoped to the actual game played.</td></tr>
|
|
563
|
+
<tr><td>Opaque AI</td><td>Every opponent decision writes its reason to the ledger ("State Broker votes YES — owns Massachusetts Debt, South Carolina Debt"). Decisions are derivable from visible state.</td></tr>
|
|
564
|
+
<tr><td>Routes dominate again</td><td>v0.2 ladder is canon (25 / 50 / 100 / 150). MVP includes Merchant / Infrastructure opponent specifically to keep the route line legible to the human.</td></tr>
|
|
565
|
+
<tr><td>Losing the Hamilton thesis</td><td>Endgame report names the actual moves the player made (Funding passed? Bank chartered? Capacity ≥ 6?) and ties them to the historical record. The thesis is the report, not a side panel.</td></tr>
|
|
566
|
+
<tr><td>App complexity before loop is proven</td><td>Phase 2 is a static clickable prototype with no state, only screens. The loop is validated before any state machine is built.</td></tr>
|
|
567
|
+
</tbody>
|
|
568
|
+
</table>
|
|
569
|
+
|
|
570
|
+
<h2><span class="ord">§ 14</span>Build Sequencing</h2>
|
|
571
|
+
<table>
|
|
572
|
+
<thead><tr><th>Phase</th><th>Deliverable</th><th>Power gained</th></tr></thead>
|
|
573
|
+
<tbody>
|
|
574
|
+
<tr><td><strong>1 · Solo loop spec</strong></td><td>This document.</td><td>Shared vocabulary, scope.</td></tr>
|
|
575
|
+
<tr><td><strong>2 · Static clickable prototype</strong></td><td>Eight surfaces wired up as click-through pages with fake state.</td><td>Validate the screen flow without committing to logic.</td></tr>
|
|
576
|
+
<tr><td><strong>3 · Local state machine</strong></td><td>GameState + reducer-style transitions for human-only play (no opponents).</td><td>A working solo loop, even if the table is empty.</td></tr>
|
|
577
|
+
<tr><td><strong>4 · Scripted opponents</strong></td><td>Treasury / Finance + Merchant / Infrastructure profiles implemented with traceable rules.</td><td>The MVP. Solo competitive play possible.</td></tr>
|
|
578
|
+
<tr><td><strong>5 · Narration and replay</strong></td><td>Narration library, expand affordance, deterministic replay from seed + ledger.</td><td>The Hamilton thesis becomes visible in the experience.</td></tr>
|
|
579
|
+
<tr><td><strong>6 · Balance telemetry</strong></td><td>Opt-in JSON export of game outcomes. Designer-side dashboard.</td><td>Data-driven balance for v0.3 and beyond.</td></tr>
|
|
580
|
+
</tbody>
|
|
581
|
+
</table>
|
|
582
|
+
|
|
583
|
+
<div class="callout"><strong>Phase rule.</strong> Each phase must add playable power, not polish. Phase 2 is not a UI library; it is a click-through validation of the loop. Phase 4 is not an "AI engine"; it is two opponents, fully traceable.</div>
|
|
584
|
+
|
|
585
|
+
<div class="signature"><span>Sovereign · Solo / Digital Concept</span><span>v0.1 · 7 / 8</span></div>
|
|
586
|
+
</section>
|
|
587
|
+
|
|
588
|
+
<!-- ============================================================
|
|
589
|
+
PAGE 8 — ACCESSIBILITY + ACCEPTANCE
|
|
590
|
+
============================================================ -->
|
|
591
|
+
<section class="page">
|
|
592
|
+
<header class="doc-head"><span class="brand-mark">SOVEREIGN</span><span class="sigil">Accessibility · Acceptance</span><span>8 / 8</span></header>
|
|
593
|
+
|
|
594
|
+
<h2><span class="ord">§ 15</span>Accessibility</h2>
|
|
595
|
+
<p>The digital mode inherits the prototype's color-blind and grayscale fallbacks (every system carries a unique pattern + icon + label, not color alone). Additional requirements <em>at MVP</em>, not v2:</p>
|
|
596
|
+
<ul>
|
|
597
|
+
<li><strong>Keyboard navigation</strong> for the core loop: Roll (Space) · Buy / Decline (Y / N) · Vote (Y / N) · Pay-to-force (F) · End Turn (Enter) · Open inspector (I) · Open ledger (L). Tab cycles through interactive elements in DOM order.</li>
|
|
598
|
+
<li><strong>Focus indicators</strong> on every interactive element. 2 px outline, ink color, no opacity tricks.</li>
|
|
599
|
+
<li><strong>Screen-reader meaningful labels</strong> on board spaces ("Space 14 · Whiskey Excise · Revenue System · cost 160 TN · base rent 12"), cards (full effect text), tracks (current value as text, threshold proximity), and opponent decisions (full ledger line read aloud on focus).</li>
|
|
600
|
+
<li><strong>Track values readable as text</strong>, not only as marker position. "Public Credit: 7 of 12. Threshold ≥ 8 not yet reached."</li>
|
|
601
|
+
<li><strong>Minimum 14 px body type</strong> at default zoom. Numbers and labels remain readable at 200 % browser zoom without horizontal scroll.</li>
|
|
602
|
+
<li><strong>No flashing or rapid animation</strong> on track or event transitions. Movement uses 200 – 400 ms ease-out.</li>
|
|
603
|
+
<li><strong>Reduce Motion toggle</strong> in the toolbar. Honors <span class="mono">prefers-reduced-motion</span> media query by default.</li>
|
|
604
|
+
<li><strong>Color contrast</strong> meets WCAG AA at all surfaces. Ink #1A1612 on parchment #F0E6CD measures ~ 14:1; white text on saturated band colors also high-contrast.</li>
|
|
605
|
+
</ul>
|
|
606
|
+
|
|
607
|
+
<h2><span class="ord">§ 16</span>Acceptance Criteria</h2>
|
|
608
|
+
<p>The concept is successful if a future builder can answer each of the following from this document alone:</p>
|
|
609
|
+
<ol>
|
|
610
|
+
<li><strong>What state exists?</strong> § 06 GameState pseudo-schema.</li>
|
|
611
|
+
<li><strong>What happens on a turn?</strong> § 02 Plain-language loop + state-transition diagram.</li>
|
|
612
|
+
<li><strong>What does the player choose?</strong> § 07 right-hand column.</li>
|
|
613
|
+
<li><strong>What is automated?</strong> § 07 left-hand column.</li>
|
|
614
|
+
<li><strong>How do opponents act?</strong> § 05 profile table.</li>
|
|
615
|
+
<li><strong>How do opponents vote?</strong> § 05 "YES Acts," "NO Acts," "State-gated Acts," "100 TN fee?" columns.</li>
|
|
616
|
+
<li><strong>How do Acts and tracks resolve?</strong> § 02 LAP_START sequence + § 06 GameState.tracks + § 08 narration triggers.</li>
|
|
617
|
+
<li><strong>How does the game end?</strong> § 02 step 8 + § 03 Endgame Report.</li>
|
|
618
|
+
<li><strong>How does the digital version teach Hamilton's system?</strong> § 08 narration triggers + Endgame Report scoped to the actual game.</li>
|
|
619
|
+
<li><strong>What accessibility affordances are required at MVP?</strong> § 15 bullet list.</li>
|
|
620
|
+
<li><strong>What is explicitly out of scope?</strong> § 10 out-of-scope table.</li>
|
|
621
|
+
</ol>
|
|
622
|
+
|
|
623
|
+
<h2><span class="ord">§ 17</span>Sign-off</h2>
|
|
624
|
+
<p>This concept is the working contract between design and implementation for Sovereign's solo / digital mode. It assumes Sovereign v0.2 balance candidate as the source of truth. Any future change to the board-game artifact must update this document before code begins; any future change to the digital mode that contradicts this document must update the document or be reviewed against the anti-drift rule (§ 07).</p>
|
|
625
|
+
<p>Next deliverable: <strong>Phase 2 · static clickable prototype</strong> — eight surfaces wired up as click-through pages with placeholder state, validating the screen flow before any state machine is built.</p>
|
|
626
|
+
|
|
627
|
+
<div class="signature"><span>Sovereign · Solo / Digital Concept · v0.1</span><span>End of Document · 8 / 8</span></div>
|
|
628
|
+
</section>
|
|
629
|
+
|
|
630
|
+
</div>
|
|
631
|
+
</body>
|
|
632
|
+
</html>
|