Verify combined expansion game continuation

This commit is contained in:
Quintine committed 2026-09-27 22:30:49 +10:00
1 parent 2183376edc
commit b7da1389da
2 files changed
+25

No files matched your search

+4
View File
@@ -1,5 +1,9 @@
# Dune implementation status
## 27 September 2026 — Combined expansion game continuation
The original six [faction samples](VERIFICATION_WORKFLOW.md#reusable-base-and-faction-sample-games) now complete at seed 20260927, including the six-expansion-faction Basic and Advanced games. Those two combined games reached turn ten and turn nine respectively, with 4,396 accepted actions, 118 periodic JSON restores and no rejected actions. The Advanced trace includes nine explicit Ixian declines on Richese lots, ten Ecaz Ambassador decisions and fifteen Face Dancer decisions; it no longer stops at the historical movement-arrival guard for this seed. The source-bound report is `/tmp/dune-combined-checkpoint-20260927-2183376/report.json`. One seeded roster is not every valid combination, and the Richese Technology exchange remains unresolved; expansion/publication gates stay closed.
## 27 September 2026 — Ixian/Tleilaxu standalone roster samples
The [expansion sample runner](VERIFICATION_WORKFLOW.md#reusable-base-and-faction-sample-games) now exercises the Ixian/Tleilaxu pair with two through six seats under Basic and Advanced rules. At seed 20260927 all ten genuine setup/play games completed: 6,365 accepted actions, 169 JSON restores and no rejected actions. The six-seat Advanced trace reaches both Ixian Technology and Tleilaxu Face Dancer decisions, along with battle, revival and shipment paths. An interrupted four-seat Advanced run also resumes to completion. The source-bound report is `/tmp/dune-ix-roster-checkpoint-20260927-final/report.json`. This is bounded playable coverage, not full E1 rules certification or public expansion-start authorization.
+21
View File
@@ -291,6 +291,27 @@ void test('six-seat Advanced Ixian/Tleilaxu game resolves Technology and Face Da
assert.ok(evidence.restores > 0);
});
void test('combined-expansion Advanced sample completes with Richese Technology declines and saved continuation', (t) => {
const out = join(temporary(t), 'combined-complete');
const result = run(out, '--profile', 'combined', '--rules', 'advanced', '--seed', '20260927');
assert.equal(result.status, 0, result.stderr);
const report = json<CliReport>(join(out, 'report.json'));
const game = json<{ results: (CliResult & {
used: Record<string, number>;
rejected: Record<string, number>;
restores: number;
})[] }>(join(out, 'results.json')).results[0];
assert.equal(report.status, 'passed');
assert.equal(report.sourceUnchanged, true);
assert.equal(game.name, 'combined-advanced');
assert.equal(game.outcome, 'complete');
assert.ok(game.used['decision:ixRicheseTechnology'] > 0);
assert.ok(game.used['decision:ecazAmbassador'] > 0);
assert.ok(game.used['decision:faceDance'] > 0);
assert.deepEqual(game.rejected, {});
assert.ok(game.restores > 0);
});
void test('three-seat Nexus samples preserve their module and roster across saved continuation', (t) => {
const area = temporary(t);
for (const [rules, ordinal] of [['basic', 42], ['advanced', 43]] as const) {