@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,333 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<title>Sovereign · v0.10 · Start Here</title>
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
--parchment: #F0E6CD;
|
|
10
|
+
--parchment-2: #E6DABC;
|
|
11
|
+
--ink: #1A1612;
|
|
12
|
+
--navy: #1F2D52;
|
|
13
|
+
--gold: #C28A28;
|
|
14
|
+
--crimson: #C8392E;
|
|
15
|
+
--rule: rgba(26,22,18,0.55);
|
|
16
|
+
--rule-soft: rgba(26,22,18,0.22);
|
|
17
|
+
--display: "Baskerville","Big Caslon","Hoefler Text","Garamond","Times New Roman",serif;
|
|
18
|
+
--body: "Iowan Old Style","Georgia","Cambria","Times New Roman",serif;
|
|
19
|
+
--ui: -apple-system,"Segoe UI","Helvetica Neue","Arial",system-ui,sans-serif;
|
|
20
|
+
--mono: "SF Mono","Menlo","Consolas","Courier New",monospace;
|
|
21
|
+
}
|
|
22
|
+
* { box-sizing: border-box; }
|
|
23
|
+
html, body {
|
|
24
|
+
margin: 0; padding: 0;
|
|
25
|
+
font-family: var(--body);
|
|
26
|
+
color: var(--ink);
|
|
27
|
+
background: #2A2622;
|
|
28
|
+
line-height: 1.55;
|
|
29
|
+
}
|
|
30
|
+
.page {
|
|
31
|
+
max-width: 920px;
|
|
32
|
+
margin: 32px auto;
|
|
33
|
+
background: var(--parchment);
|
|
34
|
+
padding: 56px 64px 80px;
|
|
35
|
+
box-shadow: 0 12px 40px rgba(0,0,0,.5), 0 2px 4px rgba(0,0,0,.4);
|
|
36
|
+
position: relative;
|
|
37
|
+
}
|
|
38
|
+
.page::before {
|
|
39
|
+
content: ""; position: absolute; inset: 14px;
|
|
40
|
+
border: 1px solid var(--rule-soft); pointer-events: none;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* HERO */
|
|
44
|
+
.hero { text-align: center; padding: 24px 0 32px; border-bottom: 1px solid var(--rule); margin-bottom: 36px; }
|
|
45
|
+
.hero .eyebrow {
|
|
46
|
+
font-family: var(--ui); font-size: 10px; letter-spacing: .38em; text-transform: uppercase;
|
|
47
|
+
color: var(--navy); margin-bottom: 18px;
|
|
48
|
+
}
|
|
49
|
+
.hero .sigil { margin: 0 auto 18px; display: block; }
|
|
50
|
+
.hero h1 {
|
|
51
|
+
font-family: var(--display); font-size: 64px; line-height: 1; margin: 0 0 6px;
|
|
52
|
+
letter-spacing: .02em; color: var(--ink);
|
|
53
|
+
}
|
|
54
|
+
.hero .lockup {
|
|
55
|
+
font-family: var(--display); font-style: italic; font-size: 20px; letter-spacing: 0;
|
|
56
|
+
color: var(--navy); margin-bottom: 14px;
|
|
57
|
+
}
|
|
58
|
+
.hero .tagline {
|
|
59
|
+
font-family: var(--display); font-style: italic; font-size: 14px; color: var(--ink);
|
|
60
|
+
opacity: .85; max-width: 540px; margin: 0 auto 22px;
|
|
61
|
+
}
|
|
62
|
+
.hero .freeze {
|
|
63
|
+
display: inline-block;
|
|
64
|
+
background: var(--navy); color: var(--parchment);
|
|
65
|
+
font-family: var(--ui); font-size: 10px; letter-spacing: .26em; text-transform: uppercase;
|
|
66
|
+
padding: 7px 14px; border-radius: 2px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
h2 {
|
|
70
|
+
font-family: var(--display); font-size: 22px; letter-spacing: 0;
|
|
71
|
+
margin: 36px 0 14px; padding-bottom: 6px; border-bottom: 1px solid var(--rule);
|
|
72
|
+
color: var(--ink);
|
|
73
|
+
}
|
|
74
|
+
h3 {
|
|
75
|
+
font-family: var(--ui); font-size: 11px; letter-spacing: .22em; text-transform: uppercase;
|
|
76
|
+
color: var(--navy); margin: 22px 0 10px;
|
|
77
|
+
}
|
|
78
|
+
p { margin: 0 0 12px; }
|
|
79
|
+
p.lead { font-size: 16px; line-height: 1.6; }
|
|
80
|
+
|
|
81
|
+
/* AUDIENCE GRID */
|
|
82
|
+
.audiences {
|
|
83
|
+
display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; margin: 18px 0;
|
|
84
|
+
}
|
|
85
|
+
.audience {
|
|
86
|
+
border: 1px solid var(--rule-soft);
|
|
87
|
+
padding: 18px 20px;
|
|
88
|
+
background: rgba(255,255,255,.18);
|
|
89
|
+
transition: background .12s, border-color .12s;
|
|
90
|
+
}
|
|
91
|
+
.audience:hover { background: rgba(255,255,255,.32); border-color: var(--rule); }
|
|
92
|
+
.audience .tag {
|
|
93
|
+
font-family: var(--ui); font-size: 9px; letter-spacing: .26em; text-transform: uppercase;
|
|
94
|
+
color: var(--crimson); display: block; margin-bottom: 6px;
|
|
95
|
+
}
|
|
96
|
+
.audience .name {
|
|
97
|
+
font-family: var(--display); font-size: 19px; margin-bottom: 4px; color: var(--ink);
|
|
98
|
+
}
|
|
99
|
+
.audience .desc { font-size: 13px; color: var(--ink); opacity: .85; margin-bottom: 10px; }
|
|
100
|
+
.audience a {
|
|
101
|
+
font-family: var(--ui); font-size: 11px; letter-spacing: .12em; text-transform: uppercase;
|
|
102
|
+
color: var(--navy); text-decoration: none; border-bottom: 1px solid var(--navy);
|
|
103
|
+
}
|
|
104
|
+
.audience a:hover { color: var(--crimson); border-color: var(--crimson); }
|
|
105
|
+
|
|
106
|
+
/* TABLES */
|
|
107
|
+
table {
|
|
108
|
+
width: 100%; border-collapse: collapse;
|
|
109
|
+
font-family: var(--body); font-size: 13px;
|
|
110
|
+
margin: 8px 0 18px;
|
|
111
|
+
}
|
|
112
|
+
th {
|
|
113
|
+
text-align: left; padding: 8px 10px 6px; border-bottom: 1px solid var(--rule);
|
|
114
|
+
font-family: var(--ui); font-size: 9.5px; letter-spacing: .18em; text-transform: uppercase;
|
|
115
|
+
color: var(--navy); font-weight: 700;
|
|
116
|
+
}
|
|
117
|
+
td {
|
|
118
|
+
padding: 7px 10px; border-bottom: 1px solid var(--rule-soft); vertical-align: top;
|
|
119
|
+
}
|
|
120
|
+
td.n { font-family: var(--mono); text-align: right; font-size: 12px; }
|
|
121
|
+
td.v { font-family: var(--ui); font-size: 10.5px; letter-spacing: .04em; }
|
|
122
|
+
.pass { color: #2C6E2C; font-weight: 700; }
|
|
123
|
+
|
|
124
|
+
/* FILE LIST */
|
|
125
|
+
.files {
|
|
126
|
+
display: grid; grid-template-columns: max-content 1fr; gap: 6px 14px;
|
|
127
|
+
font-family: var(--mono); font-size: 12px; margin: 8px 0 18px;
|
|
128
|
+
}
|
|
129
|
+
.files a {
|
|
130
|
+
color: var(--navy); text-decoration: none; border-bottom: 1px dotted var(--rule-soft);
|
|
131
|
+
}
|
|
132
|
+
.files a:hover { color: var(--crimson); border-color: var(--crimson); }
|
|
133
|
+
.files .dir { color: var(--ink); opacity: .6; font-style: italic; }
|
|
134
|
+
.files .desc { font-family: var(--body); font-size: 12.5px; color: var(--ink); opacity: .82; }
|
|
135
|
+
|
|
136
|
+
/* VERSION TRACE */
|
|
137
|
+
.vtrace {
|
|
138
|
+
font-family: var(--mono); font-size: 12px; line-height: 1.6;
|
|
139
|
+
background: rgba(255,255,255,.18); padding: 14px 18px; border-left: 3px solid var(--navy);
|
|
140
|
+
margin: 8px 0 18px;
|
|
141
|
+
}
|
|
142
|
+
.vtrace .v { color: var(--navy); font-weight: 700; display: inline-block; min-width: 60px; }
|
|
143
|
+
.vtrace .frozen { color: var(--crimson); font-weight: 700; }
|
|
144
|
+
|
|
145
|
+
/* CAVEATS */
|
|
146
|
+
.caveats { font-size: 13px; }
|
|
147
|
+
.caveats li { margin: 6px 0; }
|
|
148
|
+
|
|
149
|
+
/* FOOTER */
|
|
150
|
+
footer {
|
|
151
|
+
margin-top: 48px; padding-top: 18px; border-top: 1px solid var(--rule);
|
|
152
|
+
font-family: var(--ui); font-size: 10px; letter-spacing: .14em; text-transform: uppercase;
|
|
153
|
+
color: var(--ink); opacity: .7; display: flex; justify-content: space-between;
|
|
154
|
+
}
|
|
155
|
+
</style>
|
|
156
|
+
</head>
|
|
157
|
+
<body>
|
|
158
|
+
|
|
159
|
+
<div class="page">
|
|
160
|
+
|
|
161
|
+
<section class="hero">
|
|
162
|
+
<div class="eyebrow">A Hamiltonian economic strategy game</div>
|
|
163
|
+
|
|
164
|
+
<svg class="sigil" width="84" height="84" viewBox="0 0 84 84" aria-hidden="true">
|
|
165
|
+
<circle cx="42" cy="42" r="40" fill="none" stroke="#1F2D52" stroke-width="1.5"/>
|
|
166
|
+
<circle cx="42" cy="42" r="34" fill="none" stroke="#C28A28" stroke-width="0.8"/>
|
|
167
|
+
<path d="M42 12 L42 72 M12 42 L72 42" stroke="#1F2D52" stroke-width="0.6" opacity="0.4"/>
|
|
168
|
+
<text x="42" y="48" text-anchor="middle" font-family="Baskerville, Georgia, serif" font-size="22" fill="#1F2D52" font-style="italic">S</text>
|
|
169
|
+
<circle cx="42" cy="42" r="2" fill="#C28A28"/>
|
|
170
|
+
</svg>
|
|
171
|
+
|
|
172
|
+
<h1>SOVEREIGN</h1>
|
|
173
|
+
<div class="lockup">The Hamilton System Board Game</div>
|
|
174
|
+
<div class="tagline">Founding Credit · Fund the debt. Build the bank. Industrialize the republic.</div>
|
|
175
|
+
<span class="freeze">v0.10 Balance Baseline · Frozen 2026-05-19</span>
|
|
176
|
+
</section>
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
<p class="lead">
|
|
180
|
+
Sovereign is two artifacts and one design thesis. A printable 34-sheet
|
|
181
|
+
<strong>board game</strong> about the founding of US public credit, and a
|
|
182
|
+
self-contained <strong>solo / digital adaptation</strong> that plays the same game
|
|
183
|
+
locally in a browser against two deterministic scripted opponents. Both
|
|
184
|
+
are frozen at the v0.10 balance baseline, after a nine-version balance arc
|
|
185
|
+
driven by simulation evidence rather than guesswork.
|
|
186
|
+
</p>
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
<h2>Pick your path</h2>
|
|
190
|
+
|
|
191
|
+
<div class="audiences">
|
|
192
|
+
|
|
193
|
+
<div class="audience">
|
|
194
|
+
<span class="tag">Player</span>
|
|
195
|
+
<div class="name">Play the game</div>
|
|
196
|
+
<div class="desc">Open the digital simulator and play a 7-lap solo game against Hamilton (Treasury) and Morris (Merchant). No installer, no internet, no account.</div>
|
|
197
|
+
<a href="digital-mode/sovereign-solo.html">Open the game →</a>
|
|
198
|
+
</div>
|
|
199
|
+
|
|
200
|
+
<div class="audience">
|
|
201
|
+
<span class="tag">Designer</span>
|
|
202
|
+
<div class="name">Read the design</div>
|
|
203
|
+
<div class="desc">Start with the printable board game, then the solo / digital concept document that defined the digital adaptation before any code was written.</div>
|
|
204
|
+
<a href="board-game/sovereign-prototype.html">Board game →</a>
|
|
205
|
+
·
|
|
206
|
+
<a href="design-history/01-phase1-concept.html">Concept →</a>
|
|
207
|
+
</div>
|
|
208
|
+
|
|
209
|
+
<div class="audience">
|
|
210
|
+
<span class="tag">Balance Analyst</span>
|
|
211
|
+
<div class="name">Read the evidence</div>
|
|
212
|
+
<div class="desc">Five batch reports (CANONICAL × 100, CANONICAL × 400 reinforcement, three mirror matchups, and a slot-swap diagnostic) plus a cross-config summary.</div>
|
|
213
|
+
<a href="balance-evidence/sovereign-batch-v0.10-summary.html">Cross-config summary →</a>
|
|
214
|
+
·
|
|
215
|
+
<a href="balance-evidence/sovereign-batch-v0.10-canonical.html">CANONICAL →</a>
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<div class="audience">
|
|
219
|
+
<span class="tag">Auditor</span>
|
|
220
|
+
<div class="name">Verify the freeze</div>
|
|
221
|
+
<div class="desc">38-check freeze audit plus historical Phase 3–5 audits showing the layered build was clean at every gate.</div>
|
|
222
|
+
<a href="digital-mode/sovereign-v0.10-freeze-audit.html">Freeze audit →</a>
|
|
223
|
+
·
|
|
224
|
+
<a href="board-game/sovereign-economy-audit.html">Economy audit →</a>
|
|
225
|
+
</div>
|
|
226
|
+
|
|
227
|
+
</div>
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
<h2>Headline numbers</h2>
|
|
231
|
+
|
|
232
|
+
<p>CANONICAL configuration (1 human + 2 scripted opponents), 100 deterministic games, seeds 2026–2125. Reinforced by a CANONICAL × 400 pass.</p>
|
|
233
|
+
|
|
234
|
+
<table>
|
|
235
|
+
<thead>
|
|
236
|
+
<tr><th>Metric</th><th>Target</th><th>v0.10</th><th>Verdict</th></tr>
|
|
237
|
+
</thead>
|
|
238
|
+
<tbody>
|
|
239
|
+
<tr><td>Treasury / Finance wins</td><td class="v">45–65%</td><td class="n">59 / 100</td><td><span class="pass">PASS</span></td></tr>
|
|
240
|
+
<tr><td>Merchant / Infrastructure wins</td><td class="v">15–35%</td><td class="n">25 / 100</td><td><span class="pass">PASS</span></td></tr>
|
|
241
|
+
<tr><td>Manufacturer / Industry wins</td><td class="v">10–25%</td><td class="n">16 / 100</td><td><span class="pass">PASS</span></td></tr>
|
|
242
|
+
<tr><td>Median winning margin</td><td class="v">≥ 2 IP</td><td class="n">3 IP</td><td><span class="pass">PASS</span></td></tr>
|
|
243
|
+
<tr><td>Route 4+ frequency</td><td class="v">low</td><td class="n">8 / 100</td><td><span class="pass">PASS</span></td></tr>
|
|
244
|
+
<tr><td>Determinism (byte-identical re-run)</td><td class="v">PASS</td><td class="n">PASS</td><td><span class="pass">PASS</span></td></tr>
|
|
245
|
+
<tr><td>CANONICAL × 400 reinforcement</td><td class="v">—</td><td class="n">Treasury 244 / 400 = 61.0%</td><td><span class="pass">in band</span></td></tr>
|
|
246
|
+
</tbody>
|
|
247
|
+
</table>
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
<h2>Version trace</h2>
|
|
251
|
+
|
|
252
|
+
<div class="vtrace">
|
|
253
|
+
<div><span class="v">v0.2</span>Board-game balance baseline (Hamilton thesis intact)</div>
|
|
254
|
+
<div><span class="v">v0.3</span>NF Credit nerf · Manufactures capital event · Capacity boost</div>
|
|
255
|
+
<div><span class="v">v0.4</span>Capacity ≥ 10 milestone · industrial set bonuses</div>
|
|
256
|
+
<div><span class="v">v0.5</span>Capacity +1 on industrial purchase</div>
|
|
257
|
+
<div><span class="v">v0.6</span>Manufacturer set-completion gate relaxed</div>
|
|
258
|
+
<div><span class="v">v0.7</span>Acquisition funnel telemetry (diagnostic, no game change)</div>
|
|
259
|
+
<div><span class="v">v0.8</span>Manufacturer starting Industrial Charter</div>
|
|
260
|
+
<div><span class="v">v0.9</span>Scoring decomposition telemetry (diagnostic, no game change)</div>
|
|
261
|
+
<div><span class="v">v0.10</span>Cash scoring 1 IP per 200 TN → 1 IP per 400 TN <span class="frozen">← FROZEN</span></div>
|
|
262
|
+
</div>
|
|
263
|
+
|
|
264
|
+
<p>See <a href="CHANGELOG.md" style="color:var(--navy);">CHANGELOG.md</a> for the full narrative — what each balance change attempted, what the evidence showed, and why the next lever was chosen.</p>
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
<h2>Bundle layout</h2>
|
|
268
|
+
|
|
269
|
+
<h3>Top level</h3>
|
|
270
|
+
<div class="files">
|
|
271
|
+
<a href="00-START-HERE.html">00-START-HERE.html</a><span class="desc">This file. Hyperlinked entry point.</span>
|
|
272
|
+
<a href="README.txt">README.txt</a><span class="desc">Plain-text version for terminal / grep users.</span>
|
|
273
|
+
<a href="CHANGELOG.md">CHANGELOG.md</a><span class="desc">Full v0.2 → v0.10 balance evolution.</span>
|
|
274
|
+
</div>
|
|
275
|
+
|
|
276
|
+
<h3>Board game</h3>
|
|
277
|
+
<div class="files">
|
|
278
|
+
<a href="board-game/sovereign-prototype.html">sovereign-prototype.html</a><span class="desc">The printable 34-sheet board game. Open in browser, then print to PDF.</span>
|
|
279
|
+
<a href="board-game/sovereign-economy-audit.html">sovereign-economy-audit.html</a><span class="desc">FC-EM-002 corrected expected-value economy audit.</span>
|
|
280
|
+
<a href="board-game/sovereign-print-audit.html">sovereign-print-audit.html</a><span class="desc">Print / digital usability audit.</span>
|
|
281
|
+
</div>
|
|
282
|
+
|
|
283
|
+
<h3>Digital mode</h3>
|
|
284
|
+
<div class="files">
|
|
285
|
+
<a href="digital-mode/sovereign-solo.html">sovereign-solo.html</a><span class="desc">The v0.10 frozen solo simulator. The game.</span>
|
|
286
|
+
<a href="digital-mode/sovereign-v0.10-freeze-audit.html">sovereign-v0.10-freeze-audit.html</a><span class="desc">38-check freeze audit report.</span>
|
|
287
|
+
</div>
|
|
288
|
+
|
|
289
|
+
<h3>Balance evidence</h3>
|
|
290
|
+
<div class="files">
|
|
291
|
+
<a href="balance-evidence/sovereign-batch-v0.10-summary.html">summary.html</a><span class="desc">Cross-config aggregate.</span>
|
|
292
|
+
<a href="balance-evidence/sovereign-batch-v0.10-canonical.html">canonical.html</a><span class="desc">T × Mc × Mfg, 100 games.</span>
|
|
293
|
+
<a href="balance-evidence/sovereign-batch-v0.10-canonical-400.html">canonical-400.html</a><span class="desc">T × Mc × Mfg, 400-game reinforcement.</span>
|
|
294
|
+
<a href="balance-evidence/sovereign-batch-v0.10-tf-mirror.html">tf-mirror.html</a><span class="desc">3 × Treasury / Finance mirror.</span>
|
|
295
|
+
<a href="balance-evidence/sovereign-batch-v0.10-mc-mirror.html">mc-mirror.html</a><span class="desc">3 × Merchant / Infrastructure mirror.</span>
|
|
296
|
+
<a href="balance-evidence/sovereign-batch-v0.10-mfg-mirror.html">mfg-mirror.html</a><span class="desc">3 × Manufacturer / Industry mirror.</span>
|
|
297
|
+
<a href="balance-evidence/sovereign-batch-v0.10-canonical-slot-swap.html">slot-swap.html</a><span class="desc">Charter-vs-slot diagnostic control.</span>
|
|
298
|
+
<span class="dir">raw-data/</span><span class="desc">Per-game JSON exports for every batch.</span>
|
|
299
|
+
</div>
|
|
300
|
+
|
|
301
|
+
<h3>Design history</h3>
|
|
302
|
+
<div class="files">
|
|
303
|
+
<a href="design-history/01-phase1-concept.html">01-phase1-concept.html</a><span class="desc">Solo / Digital Mode concept document.</span>
|
|
304
|
+
<a href="design-history/02-phase2-prototype.html">02-phase2-prototype.html</a><span class="desc">Static clickable prototype (8 surfaces, 11-step walkthrough).</span>
|
|
305
|
+
<a href="design-history/03-phase3-audit.html">03-phase3-audit.html</a><span class="desc">Local state machine freeze audit.</span>
|
|
306
|
+
<a href="design-history/04-phase4-audit.html">04-phase4-audit.html</a><span class="desc">Scripted opponents freeze audit.</span>
|
|
307
|
+
<a href="design-history/05-phase5-audit.html">05-phase5-audit.html</a><span class="desc">Narration / replay / save freeze audit.</span>
|
|
308
|
+
</div>
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
<h2>Operating model</h2>
|
|
312
|
+
<p>Local-only. No network calls. No accounts. No cloud sync. No LLM opponents. Single RNG: <span style="font-family:var(--mono);font-size:12.5px;">mulberry32(state.rngSeed)</span>. Telemetry is reporting-side and never mutates game state. The full game, all profiles, all telemetry, and all batch infrastructure live in one self-contained HTML file.</p>
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
<h2>Known caveats</h2>
|
|
316
|
+
<ul class="caveats">
|
|
317
|
+
<li><strong>Capacity thresholds remain rare in canonical play.</strong> Avg final Capacity is 3.49; ≥ 6 reached in only 4 / 100 games. The endgame industrial scoring exists as a ceiling, not a regular path.</li>
|
|
318
|
+
<li><strong>Treasury / Finance remains intentionally strongest</strong>, within the target band. This matches the historical thesis: public credit and federal finance were Hamilton's dominant economic lever.</li>
|
|
319
|
+
<li><strong>Failure events fired 0 / 400 times</strong> in the v0.10 evidence pass. Default / Rebellion / Bankruptcy threats are currently decorative; a future version may revisit fail-state pressure.</li>
|
|
320
|
+
<li><strong>Simulation-tested only.</strong> Over 1,000 deterministic games across the v0.3 → v0.10 arc. Not yet human-playtested; strategic deviation may shift these rates.</li>
|
|
321
|
+
<li><strong>Three-profile competitive set.</strong> The Opportunist / Cash profile from the concept document is deferred. The locked v0.10 lineup is Treasury / Merchant / Manufacturer.</li>
|
|
322
|
+
</ul>
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
<footer>
|
|
326
|
+
<span>Sovereign · v0.10 Balance Baseline</span>
|
|
327
|
+
<span>FROZEN · 2026-05-19</span>
|
|
328
|
+
</footer>
|
|
329
|
+
|
|
330
|
+
</div>
|
|
331
|
+
|
|
332
|
+
</body>
|
|
333
|
+
</html>
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Sovereign — Changelog
|
|
2
|
+
|
|
3
|
+
> A Hamilton-system Monopoly-grammar board game and its solo / digital adaptation.
|
|
4
|
+
> Two artifact streams, one design thesis: **debt → credit → bank → industry**.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Board Game
|
|
9
|
+
|
|
10
|
+
### v0.2 balance candidate — FROZEN 2026-05-18
|
|
11
|
+
|
|
12
|
+
The printable board-game artifact. 34 US Letter sheets, 40-space board, 22 properties + 4 routes + 2 institutions, 8 color systems, 7 Acts of Congress in fixed historical order, 4 player roles, 3 shared tracks (Public Credit · Public Resistance · Industrial Capacity), 12+12 event cards, 5 distinct card backs.
|
|
13
|
+
|
|
14
|
+
**Balance levers (v0.2 changes from v0.1):**
|
|
15
|
+
|
|
16
|
+
| Change | Effect |
|
|
17
|
+
|---|---|
|
|
18
|
+
| Route ladder | 25 / 50 / 100 / 200 → **25 / 50 / 100 / 150** (4-route reduced) |
|
|
19
|
+
| Coinage Act | 25 TN per player → **50 TN from each other player + Credit +1 + Capacity +1** |
|
|
20
|
+
| Industrial Capacity thresholds | ≥ 8 and ≥ 10 → **≥ 6 and ≥ 8** (lowered) |
|
|
21
|
+
| Revolutionary Debt bases | Continental 2 / Soldier Pay 4 → **Continental 4 / Soldier Pay 6** |
|
|
22
|
+
|
|
23
|
+
Supported by:
|
|
24
|
+
- **FC-EM-002 economy audit** — corrected expected-value math after the original audit was rejected for double-counting and total-rent attribution errors.
|
|
25
|
+
- **Print / Digital audit** — usability and accessibility verification for the printable artifact.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Solo / Digital Mode
|
|
30
|
+
|
|
31
|
+
Layered, fully additive build over the v0.2 balance candidate. Every phase preserves all prior phases byte-identical. Determinism is enforced by `mulberry32(state.rngSeed)` as the sole RNG; opponent decisions are pure functions of visible state.
|
|
32
|
+
|
|
33
|
+
### Phase 1 — Concept · FROZEN
|
|
34
|
+
Design contract: state model, 8 surfaces, 3 solo modes, 4 opponent profiles spec, acceptance criteria.
|
|
35
|
+
|
|
36
|
+
### Phase 2 — Static clickable prototype · FROZEN
|
|
37
|
+
8 surfaces rendered with placeholder state, 11-step walkthrough, accessibility floor.
|
|
38
|
+
|
|
39
|
+
### Phase 3 — Local state machine · FROZEN
|
|
40
|
+
Real reducer / dispatch pattern, seeded determinism, full 7-lap game loop, all 40 spaces, all 24 cards, all 7 Acts, scoring from rules.
|
|
41
|
+
|
|
42
|
+
### Phase 4 — Scripted opponents · FROZEN
|
|
43
|
+
Migration to `players[]`, two MVP profiles (Treasury / Finance, Merchant / Infrastructure), auction mechanic, multiplayer rent. Plus the Act-vote orchestration maintenance patch.
|
|
44
|
+
|
|
45
|
+
### Phase 5 — Narration · Replay · Save / Load · FROZEN
|
|
46
|
+
25-entry narration library derived from ledger (does not mutate state). Save / load with hash integrity. Replay scrubber reconstructs from `initialState(seed) + decisionLog`.
|
|
47
|
+
|
|
48
|
+
### Phase 6 — Local balance telemetry · FROZEN
|
|
49
|
+
Post-game balance report, batch simulation (10 / 50 / 100 games per config), exportable JSON + HTML, Manufacturer / Industry profile (3rd of the 4-profile concept doc roster).
|
|
50
|
+
|
|
51
|
+
### Phase 6.1 — Telemetry hygiene · FROZEN
|
|
52
|
+
Fixed name-keyed attribution → slot-indexed, split rentNet from netCashFlow, broke out routes / institutions buckets, mirror-batch slot identity preserved.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Balance Evolution (post Phase 6.1)
|
|
57
|
+
|
|
58
|
+
All driven by deterministic 400-game evidence passes (4 configs × 100 seeds 2026–2125, sometimes also CANONICAL × 400).
|
|
59
|
+
|
|
60
|
+
### v0.3 — Diagnostic balance attempt
|
|
61
|
+
- NF Credit endgame bonus: `5 IP split among NF owners if Credit ≥ 8` → **`+1 per qualifying NF owner at Credit ≥ 8; +2 at Credit = 12`**.
|
|
62
|
+
- Report on Manufactures: added **`50 TN per Mfg / Strategic owned`** capital event.
|
|
63
|
+
- Capacity ≥ 8 payment boost: +25% → **+50%**.
|
|
64
|
+
|
|
65
|
+
**Result:** Treasury 76% / Merchant 22% / Manufacturer 2%. Manufacturer cash-starved.
|
|
66
|
+
|
|
67
|
+
### v0.4 — Industrial scoring layer
|
|
68
|
+
- Industrial Capacity ≥ 10 milestone: **+2 IP per qualifying industrial system, stacking with the ≥ 8 bonus (max +8)**.
|
|
69
|
+
- Industrial set completion bonuses: **full Mfg +3 IP, full Strategic +2 IP**.
|
|
70
|
+
|
|
71
|
+
**Result:** Treasury 73% / Merchant 21% / Manufacturer 6%. Scoring buffs firing but Capacity track stays cold.
|
|
72
|
+
|
|
73
|
+
### v0.5 — Capacity dynamics
|
|
74
|
+
- **Industrial Capacity +1** on first acquisition of any Manufactures or Strategic Industry property from unowned state.
|
|
75
|
+
|
|
76
|
+
**Result:** Treasury 73% / Merchant 21% / Manufacturer 6%. Track moves in MFG-MIRROR but not in CANONICAL.
|
|
77
|
+
|
|
78
|
+
### v0.6 — Manufacturer policy relax
|
|
79
|
+
- Removed the set-completion gate from Manufacturer / Industry profile decisions. Set completion becomes a tie-break preference, not a buy gate.
|
|
80
|
+
|
|
81
|
+
**Result:** Treasury 73% / Merchant 22% / Manufacturer 5%. Profile change didn't move the needle.
|
|
82
|
+
|
|
83
|
+
### v0.7 — Acquisition funnel telemetry (no game change)
|
|
84
|
+
Diagnostic instrumentation: landing opportunities, buy outcomes, cash-at-opportunity, auction access, turn-order geometry, five-hypothesis classifier.
|
|
85
|
+
|
|
86
|
+
**Finding:** H1 confirmed — slot 2 (where Manufacturer was seated) gets fewer industrial landings (0.45) than slot 0 (0.68) or slot 1 (0.64) due to dice geometry, regardless of profile.
|
|
87
|
+
|
|
88
|
+
### v0.8 — Manufacturer Industrial Charter
|
|
89
|
+
- At game setup, the first Manufacturer / Industry slot receives **Textile Works** as a starting Industrial Charter (0 TN, Capacity +1). Property counts normally for rent, set completion, Report on Manufactures payouts, and scoring.
|
|
90
|
+
- Diagnostic CANONICAL-SLOT-SWAP control batch (Manufacturer in slot 0, charter disabled) confirms slot and charter effects are approximately interchangeable.
|
|
91
|
+
|
|
92
|
+
**Result:** Treasury 68% / Merchant 21% / Manufacturer 11%. **Manufacturer enters the 10–25% target band for the first time.**
|
|
93
|
+
|
|
94
|
+
### v0.9 — Treasury scoring decomposition (no game change)
|
|
95
|
+
Counterfactual analysis per Treasury win: zero out each scoring category, re-rank, count Treasury-still-wins. Thesis-damage ranking selects the cleanest nerf candidate.
|
|
96
|
+
|
|
97
|
+
**Finding:** `cashIP` is the load-bearing source. Treasury wins drop from 269 / 400 to 71 / 400 when `cashIP` is removed. `cashIP` appears in 93.7% of Treasury wins. NF Credit bonus is decorative; cash hoarding is the load.
|
|
98
|
+
|
|
99
|
+
### v0.10 — Cash scoring nerf · FROZEN
|
|
100
|
+
- Cash Influence: **1 IP per 200 TN → 1 IP per 400 TN** (floor).
|
|
101
|
+
|
|
102
|
+
**Result (CANONICAL × 100):** Treasury 59% / Merchant 25% / Manufacturer 16%. **All six balance targets PASS.** CANONICAL × 400 reinforcement: Treasury 61.0%.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Determinism guarantee
|
|
107
|
+
|
|
108
|
+
Same seed + same human decisions = byte-identical ledger across runs, browsers, and time.
|
|
109
|
+
- Single RNG: `mulberry32(state.rngSeed)`.
|
|
110
|
+
- Opponent decisions: pure functions of visible state.
|
|
111
|
+
- Save / load roundtrip preserves state hash.
|
|
112
|
+
- Replay reconstructs from `initialState(seed) + decisionLog`.
|
|
113
|
+
- Verified across 1,000+ deterministic games during the v0.2 → v0.10 balance arc.
|
|
114
|
+
|
|
115
|
+
## Operating model
|
|
116
|
+
|
|
117
|
+
Local-only. No network calls. No accounts. No cloud sync. No LLM opponents.
|
|
118
|
+
The full game, all profiles, all telemetry, and all batch infrastructure live in one self-contained HTML file.
|
|
119
|
+
|
|
120
|
+
## Known caveats
|
|
121
|
+
|
|
122
|
+
- Capacity thresholds (≥ 6, ≥ 8, ≥ 10) remain rare in canonical play (≥ 6 reached in only 4 / 100 games). The endgame industrial scoring exists as a ceiling, not a regular path.
|
|
123
|
+
- Treasury remains intentionally the strongest profile, in line with the historical thesis.
|
|
124
|
+
- Failure events (Default / Rebellion / Bankruptcy) fired 0 / 400 times in the v0.10 evidence pass. Their threat is currently decorative.
|
|
125
|
+
- Balance is simulation-tested only. Not yet human-playtested.
|
|
126
|
+
- The Opportunist / Cash profile (4th profile in the concept document) is deferred. The locked v0.10 competitive set is Treasury / Merchant / Manufacturer.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
SOVEREIGN
|
|
2
|
+
The Hamilton System Board Game
|
|
3
|
+
v0.10 Release · FROZEN 2026-05-19
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
WHAT THIS IS
|
|
7
|
+
============
|
|
8
|
+
|
|
9
|
+
Sovereign is a Hamilton-system board game and its solo / digital adaptation.
|
|
10
|
+
|
|
11
|
+
The board game is a 40-space Monopoly-grammar prototype about the founding of
|
|
12
|
+
US public credit. Three Hamiltonian profiles - Treasury / Finance, Merchant /
|
|
13
|
+
Infrastructure, and Manufacturer / Industry - compete on an Influence scoring
|
|
14
|
+
track across 7 laps. Acts of Congress pass in their historical order. Public
|
|
15
|
+
Credit, Public Resistance, and Industrial Capacity move as shared tracks.
|
|
16
|
+
|
|
17
|
+
The digital mode runs the full game locally in a browser. It plays solo
|
|
18
|
+
against two deterministic scripted opponents. There is no network, no account,
|
|
19
|
+
no cloud, no LLM. The only RNG is mulberry32(state.rngSeed); every game is
|
|
20
|
+
reproducible from its seed.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
WHERE TO START
|
|
24
|
+
==============
|
|
25
|
+
|
|
26
|
+
Open 00-START-HERE.html in any modern browser.
|
|
27
|
+
|
|
28
|
+
That page hyperlinks every artifact in this release and routes you by audience:
|
|
29
|
+
|
|
30
|
+
- Player : open the digital simulator and play.
|
|
31
|
+
- Designer : read the board-game prototype and the concept document.
|
|
32
|
+
- Balance : open the v0.10 batch reports and the freeze audit.
|
|
33
|
+
- Auditor : open the freeze audit and the design-history audits.
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
BUNDLE LAYOUT
|
|
37
|
+
=============
|
|
38
|
+
|
|
39
|
+
00-START-HERE.html Hyperlinked entry. Open this first.
|
|
40
|
+
README.txt This file.
|
|
41
|
+
CHANGELOG.md Full v0.2 -> v0.10 evolution.
|
|
42
|
+
|
|
43
|
+
/board-game/
|
|
44
|
+
sovereign-prototype.html The printable 34-sheet board game (v0.2).
|
|
45
|
+
sovereign-economy-audit.html FC-EM-002 corrected economy audit.
|
|
46
|
+
sovereign-print-audit.html Print / digital usability audit.
|
|
47
|
+
|
|
48
|
+
/digital-mode/
|
|
49
|
+
sovereign-solo.html The v0.10 frozen solo simulator. The game.
|
|
50
|
+
sovereign-v0.10-freeze-audit.html 38-check freeze audit report.
|
|
51
|
+
|
|
52
|
+
/balance-evidence/
|
|
53
|
+
sovereign-batch-v0.10-canonical.html Treasury x Merchant x Mfg.
|
|
54
|
+
sovereign-batch-v0.10-canonical-400.html 400-game reinforcement.
|
|
55
|
+
sovereign-batch-v0.10-tf-mirror.html 3 x Treasury / Finance.
|
|
56
|
+
sovereign-batch-v0.10-mc-mirror.html 3 x Merchant / Infrastructure.
|
|
57
|
+
sovereign-batch-v0.10-mfg-mirror.html 3 x Manufacturer / Industry.
|
|
58
|
+
sovereign-batch-v0.10-canonical-slot-swap.html Charter-vs-slot control.
|
|
59
|
+
sovereign-batch-v0.10-summary.html Cross-config summary.
|
|
60
|
+
/raw-data/ Per-game JSON exports.
|
|
61
|
+
|
|
62
|
+
/design-history/
|
|
63
|
+
01-phase1-concept.html Solo / Digital Mode concept document.
|
|
64
|
+
02-phase2-prototype.html Clickable static prototype (8 surfaces).
|
|
65
|
+
03-phase3-audit.html State machine freeze audit.
|
|
66
|
+
04-phase4-audit.html Scripted opponents freeze audit.
|
|
67
|
+
05-phase5-audit.html Narration / replay / save freeze audit.
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
HEADLINE NUMBERS
|
|
71
|
+
================
|
|
72
|
+
|
|
73
|
+
CANONICAL configuration (1 human + 2 scripted opponents), 100 deterministic
|
|
74
|
+
games, seeds 2026-2125, reinforced by a CANONICAL x 400 pass:
|
|
75
|
+
|
|
76
|
+
Treasury / Finance wins 59 / 100 target 45-65 PASS
|
|
77
|
+
Merchant / Infrastructure wins 25 / 100 target 15-35 PASS
|
|
78
|
+
Manufacturer / Industry wins 16 / 100 target 10-25 PASS
|
|
79
|
+
Median winning margin 3 IP target >= 2 PASS
|
|
80
|
+
Route 4+ frequency 8 / 100 target low PASS
|
|
81
|
+
Determinism byte-identical run-to-run PASS
|
|
82
|
+
|
|
83
|
+
CANONICAL x 400 reinforcement: Treasury 244 / 400 = 61.0%.
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
HOW TO RUN THE GAME
|
|
87
|
+
===================
|
|
88
|
+
|
|
89
|
+
Double-click digital-mode/sovereign-solo.html or drag it into a browser.
|
|
90
|
+
No installer, no dependencies, no internet required.
|
|
91
|
+
|
|
92
|
+
The header shows "v0.10 balance candidate" - that label is now the frozen
|
|
93
|
+
baseline.
|
|
94
|
+
|
|
95
|
+
Inside the simulator:
|
|
96
|
+
- Solo mode plays you against Hamilton (Treasury / Finance) and Morris
|
|
97
|
+
(Merchant / Infrastructure) on seed 2026 by default.
|
|
98
|
+
- "New seed" reseeds the game.
|
|
99
|
+
- "Batch" runs a deterministic batch simulation (10, 50, or 100 games)
|
|
100
|
+
against any profile triplet, producing JSON + HTML reports.
|
|
101
|
+
- "Save" and "Load" autosave to localStorage and / or export to JSON.
|
|
102
|
+
- "Replay" scrubs through any completed game with hash integrity.
|
|
103
|
+
- All narration is derived from the ledger and never mutates state.
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
KNOWN CAVEATS
|
|
107
|
+
=============
|
|
108
|
+
|
|
109
|
+
* Capacity thresholds (>=6, >=8, >=10) remain rare in canonical play.
|
|
110
|
+
Avg final Capacity is 3.49; >=6 reached in only 4 / 100 games.
|
|
111
|
+
The endgame industrial bonuses exist as a ceiling, not a regular path.
|
|
112
|
+
|
|
113
|
+
* Treasury / Finance remains intentionally the strongest profile, within
|
|
114
|
+
the target band. This matches the historical thesis: public credit and
|
|
115
|
+
federal finance were Hamilton's dominant economic lever.
|
|
116
|
+
|
|
117
|
+
* Failure events (Default / Rebellion / Bankruptcy) fired 0 / 400 times
|
|
118
|
+
in the v0.10 evidence pass. Their threat is decorative in current play.
|
|
119
|
+
A future version may revisit fail-state pressure.
|
|
120
|
+
|
|
121
|
+
* Balance is simulation-tested only (>1,000 deterministic games across
|
|
122
|
+
v0.3-v0.10). Human play with strategic deviation may shift these rates.
|
|
123
|
+
|
|
124
|
+
* The Opportunist / Cash profile from the concept document is deferred.
|
|
125
|
+
The locked v0.10 competitive set is Treasury / Merchant / Manufacturer.
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
OPERATING MODEL
|
|
129
|
+
===============
|
|
130
|
+
|
|
131
|
+
Local-only. No network calls. No accounts. No cloud sync. No LLM opponents.
|
|
132
|
+
Single RNG: mulberry32(state.rngSeed). Telemetry is reporting-only and
|
|
133
|
+
never mutates game state. Saves are version-gated localStorage + downloadable
|
|
134
|
+
JSON. The full game, all profiles, all telemetry, and all batch infrastructure
|
|
135
|
+
live in one self-contained HTML file.
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
CREDITS
|
|
139
|
+
=======
|
|
140
|
+
|
|
141
|
+
Design, balance, and implementation: Mike (mcp-tool-shop).
|
|
142
|
+
Built across the v0.2 -> v0.10 arc on 2026-05-18 / 2026-05-19.
|
|
143
|
+
|
|
144
|
+
See CHANGELOG.md for the full version-by-version balance evolution.
|