Add reusable base game samples across player counts
The existing offline faction runner now selects genuine Basic and Advanced base games with two through six players. Original six expansion defaults and seed offsets remain stable; player-count filters require the explicit base profile. Saved AI profiles choose every setup and game action. This replaces repeated private harness copies while preserving source-bound private reports, failed traces and explicit snapshot resume. Shared custody checks include every physical Treachery zone, nonnegative integer resources, twenty-force totals, the distinct Emperor/Fremen/Ixian elite totals and subsets, and canonical base Traitor identities after dealing. Rejected actions must leave their input unchanged; periodic JSON restoration compares all private views and excludes rival private hand/spice/Traitor/Face Dancer fields. Optional modules and separate private previews cannot be resumed as ordinary fixed scenarios. Resume still requires checking original setup provenance and intentionally restarts the selected random stream. Independent review caught and corrected seven-cyborg accounting, save-derived Traitor expectations, missing elite records and private-preview classification. Meaningful regressions cover those failures plus strict filters, original names/seeds, failed subprocess reporting, source stability and resume. Types, lint and 4823 offline tests pass. No application, dependency, HTTP or database code changed, so build/HTTP suites were not repeated. All ten base and six existing expansion samples completed on the final unchanged source: 6746 accepted actions, 175 periodic restores, 82 rejected candidates retained in traces. The expansion guarded-arrival fallbacks remain visible; these samples do not certify every faction, optional module, player-count rule or difficulty ordering. Exact expansion Traitor/Face Dancer custody still needs its own adapter. The earlier pilot/source-changed report remains private; the required check was repeated after the late review correction rather than accepting results from changing source. All 1038 opening games and original seat/recovery records are unchanged; 1038 rooms remain. SQLite integrity and foreign keys pass. The existing QA table restored its saved seat and fulfilled shipment after browser refresh. The healthy server was reused without reset or restart. The rules register now explicitly records the Moritani Secret Ally after-loss privacy blocker. A holder-only pause exposes its hidden Nexus; the existing alliance-retention helper does not resolve the shared pending response UX decision. No duplicate user question, new house rule or mode/publication gate change was introduced. Verified source tree: 85d5a53fa72efb9704c1828526aaccba1554670307ce476f729eae9c5c4abff9
This commit is contained in:
1 parent
9f4de647ce
commit
368a7a5144
10 files changed
+755
-84
No files matched your search
+14
-12
@@ -6,14 +6,14 @@ gated.** Prototypes do not open completion or publication gates.
|
||||
|
||||
## Current checkpoint and work
|
||||
|
||||
Latest verified checkpoint: `cb691e1`, [Sapho Battle-phase order](SAPHO_BATTLE_ORDER.md).
|
||||
Types, lint, **4,792 offline tests**, build and **43 HTTP tests** passed.
|
||||
Six fixed genuine Basic/Advanced faction samples finished in 3,672 accepted actions
|
||||
with 97 periodic save/restore checks. They retained 82 rejected candidates at
|
||||
existing guarded arrival combinations and completed through legal fallbacks.
|
||||
Browser battle ordering, tie preservation and private refresh/replay passed.
|
||||
All 970 opening games and their original seat/recovery records were preserved,
|
||||
with 1,004 rooms after checks.
|
||||
Latest verified checkpoint: `9f4de64`, [compound shipment promises](COMPOUND_SHIPMENT_PROMISES.md).
|
||||
Types, lint, **4,815 offline tests**, build and **43 HTTP tests** passed.
|
||||
Genuine Basic/Advanced samples finished in 1,534 accepted actions, with 41
|
||||
periodic save/restore checks and no rejected candidates. Each used one actual
|
||||
held Truthtrance at a legal opportunity for a scenario-directed compound question.
|
||||
Browser second-OR-branch fulfillment and private refresh/replay passed.
|
||||
All 1,004 opening games and original seat/recovery records were preserved,
|
||||
with 1,038 rooms after checks.
|
||||
Earlier evidence remains in the [implementation history](IMPLEMENTATION_STATUS.md).
|
||||
|
||||
The connected [Harass & Withdraw prototype](HARASS_WITHDRAW_RUNTIME.md) supports either
|
||||
@@ -31,10 +31,12 @@ and foreign-key checks passed, and refresh restored the test seat. No restart,
|
||||
database reset or recurring automation was needed. Exact verification, source
|
||||
fingerprints and delivery are recorded in the private report and Git message.
|
||||
|
||||
Current work: [compound shipment promises](COMPOUND_SHIPMENT_PROMISES.md) connects
|
||||
shipment-only AND/OR questions, whole-expression enforcement, usable controls,
|
||||
legal AI answers and saved continuation. Reinforcements and the other recorded
|
||||
material rule questions remain pending.
|
||||
Current work: [reusable base samples](VERIFICATION_WORKFLOW.md#reusable-base-and-faction-sample-games)
|
||||
connect genuine two-through-six-player Basic/Advanced verification to the existing
|
||||
source-bound runner. Fixed seeds, exact card/force/elite custody, private JSON
|
||||
restoration and retained failure snapshots replace repeated private harness copies.
|
||||
The Moritani Secret Ally audit identified the same pending hidden-reaction UX
|
||||
boundary as CHOAM inspection; the physical retention helper does not resolve it.
|
||||
|
||||
## Authoritative navigation
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ complete games with every printed effect or public mode acceptance.
|
||||
|
||||
The following historical `cab2f1c` samples predate the
|
||||
[deferred movement repair](DEFERRED_MOVEMENT_ARRIVAL.md). New source-bound
|
||||
samples use [the reusable harness](VERIFICATION_WORKFLOW.md#reusable-faction-sample-games).
|
||||
samples use [the reusable harness](VERIFICATION_WORKFLOW.md#reusable-base-and-faction-sample-games).
|
||||
|
||||
Six deterministic samples used genuine faction setup, all four AI levels,
|
||||
unchanged physical inventories and JSON continuations every 37 accepted actions.
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
# Dune implementation status
|
||||
|
||||
|
||||
## 14 September — reusable base player-count samples
|
||||
|
||||
The faction sample runner now also selects genuine base Basic/Advanced games
|
||||
at every player count from two through six. Original expansion defaults and
|
||||
seed offsets remain stable. A shared inventory check includes unsold auctions,
|
||||
nonnegative force/spice values, exact elite totals and subsets, and post-setup
|
||||
base Traitor custody. Rejected-action immutability and restored private rival
|
||||
boundaries are checked. Failed traces and snapshots remain replayable through
|
||||
explicit resume. This consolidates the repeated private harness corrections;
|
||||
it does not certify complete player-count rules or open any mode gate.
|
||||
|
||||
The Moritani Secret Ally source audit also records why a holder-only retention
|
||||
pause would leak its hidden Nexus. The existing shared UX question remains
|
||||
pending; no duplicate question or new timing policy was introduced. Focused
|
||||
and full-run results, source identity and delivery are recorded in the private
|
||||
checkpoint report and Git message.
|
||||
|
||||
## 14 September 2026 — Compound shipment promises
|
||||
|
||||
[Shipment-only AND/OR](COMPOUND_SHIPMENT_PROMISES.md) extends the existing Truthtrance
|
||||
|
||||
@@ -77,3 +77,19 @@ Later focused source contracts cover [Emperor strength, purchases and revival](N
|
||||
- A complete twelve-card reference/inventory and common lifecycle are substantial first work, but do not alone make all thirty-six panels playable. Keep the public module release gated until every face's supported timing, secrecy, custody, bots, UI, rejection, multiplayer CAS and saved continuation paths are verified. If development supports only Atreides' family first, other faces must remain accurately represented and explicitly unavailable in the audit mode; they must not silently act as blanks in a released module.
|
||||
|
||||
No user question was sent during this audit. No tournament rule, fan effect, public predeal reveal, extra Nexus identity or Discoveries prerequisite has been adopted.
|
||||
|
||||
## Moritani Secret Ally retention timing
|
||||
|
||||
14 September follow-up. The recorded physical card permits retaining one
|
||||
otherwise retainable played Treachery Card after losing a battle with a winner;
|
||||
mandatory discards stay excluded. The existing Moritani alliance retention
|
||||
quote, card selection and saved discard continuation can supply the physical
|
||||
operation, but do not supply a private opportunity to use a hidden Nexus card.
|
||||
|
||||
Automatically continuing a loser without the card while pausing a holder
|
||||
reveals custody through the table's progress. Calling both paths the same
|
||||
cleanup boundary does not hide that difference. Committing before the result
|
||||
moves the printed after-loss choice earlier. A universal loser confirmation
|
||||
requires the same pending product exception as other hidden optional reactions.
|
||||
Keep this effect unavailable until that shared response policy is resolved;
|
||||
no new outcome ruling or duplicate user question is introduced by this audit.
|
||||
@@ -67,6 +67,7 @@ These are unresolved in the cited records. Do not infer an answer from elapsed t
|
||||
| Jacurutu physical dial | The user question asks whether the losing player should choose the physical normal/elite forces represented by its dial. When legal Advanced allocations produce different rewards, income remains explicitly unpaid; numeric wheel subtraction is not a ruling. | [Discovery interpretations](DISCOVERY_PROTOTYPE.md#interpretations-retained-for-refinement) |
|
||||
| Testing Station contest/timing | Only sole non-advisor occupation is prototyped. Two-occupant priority/stacking remains unresolved; opening after the ordinary storm-card window is an explicit source-timing inference. Weather Control is excluded by the printed text. | [Discovery interpretations](DISCOVERY_PROTOTYPE.md#interpretations-retained-for-refinement) |
|
||||
| CHOAM Secret Ally battle timing | The printed after-victory inspection is optional and the Nexus identity stays secret. No existing postbattle choice covers every winner: a pause only for a holder leaks ownership, precommitment removes the after-win choice, and a universal window makes nonholders pass. The product-exception question has been sent; no timing policy is implemented pending the answer. Ordinary Karama cancellation is also not established by the retrieved sources. | [After-victory inspection audit](NEXUS_CHOAM_SECRET_ALLY.md#after-victory-inspection-audit) |
|
||||
| Moritani Secret Ally battle timing | The optional retention choice follows a battle loss while the Nexus remains secret until use. Automatically continuing nonholders but pausing holders exposes custody; earlier precommitment removes the after-loss choice. A universal loser confirmation needs the same pending UX exception as other hidden reactive cards. The existing alliance retention/cleanup code does not resolve this timing problem; no duplicate user question has been sent. | [Nexus retention boundary](NEXUS_CARD_RULES.md#moritani-secret-ally-retention-timing) |
|
||||
| Emperor Secret Ally purchase timing | The purchase choice follows winning the bid. A holder-only payment pause exposes concealed card eligibility, while per-bid preauthorization moves the choice earlier. The user has been asked whether to permit a uniform winner payment confirmation, including sole spice payments, or retain the purchase gate. No answer is assumed; the independent three-force revival grant can proceed. | [Purchase source contract](NEXUS_EMPEROR_RULES.md#secret-ally-retain-the-actual-purchase-price) |
|
||||
| Discovery prototype inferences | Free entry uses storm order and ordinary source-storm restrictions; these are general-rule inferences. Great Maker currently follows ordinary first-turn worm skipping and Sandtrout suppression; an exhausted token type creates no replacement token. These preserve current source interpretation and physical inventory but are not separately confirmed rulings or complete combined-module certification. | [Interpretations for refinement](DISCOVERY_PROTOTYPE.md#interpretations-retained-for-refinement) |
|
||||
| Other Homeworld combinations | Population/force splitting, removal custody, replacement shortages, income accounting and placement ordering remain local to their detailed contracts. | [Homeworld rules](HOMEWORLD_RULES.md), [occupation](HOMEWORLD_OCCUPATION_RULES.md) and the effect documents above |
|
||||
|
||||
@@ -28,28 +28,46 @@ An interrupted or incomplete report is never evidence of success.
|
||||
|
||||
## Saved games and online backups
|
||||
|
||||
### Reusable faction sample games
|
||||
### Reusable base and faction sample games
|
||||
|
||||
```sh
|
||||
node --import tsx tools/faction-games.ts --out /tmp/dune-new-faction-games
|
||||
# Ten genuine base samples: Basic and Advanced at each player count.
|
||||
node --import tsx tools/faction-games.ts --out /tmp/dune-new-base-games --profile base
|
||||
node --import tsx tools/faction-games.ts --out /tmp/dune-new-base-three --profile base --players 3 --rules advanced
|
||||
node --import tsx tools/faction-games.ts --out /tmp/dune-new-combined --profile combined --rules advanced --seed 20260926
|
||||
node --import tsx tools/faction-games.ts --out /tmp/dune-new-resume --resume /private/failed-combined-advanced.json
|
||||
```
|
||||
|
||||
This offline tool runs six fixed CHOAM/Richese, Ecaz/Moritani and combined
|
||||
Basic/Advanced samples from genuine setup, using all four AI profiles. Filters
|
||||
retain each scenario's seed offset. `--seed` defaults to 20260926;
|
||||
Default and `--profile all` retain the original six fixed CHOAM/Richese,
|
||||
Ecaz/Moritani and combined Basic/Advanced samples. `--profile base` selects ten
|
||||
additional samples: Basic and Advanced with two through six players.
|
||||
`--players 2..6` narrows only that base profile; omission or `all` retains all
|
||||
five counts. The fixed base roster adds Atreides, Harkonnen, Fremen, Emperor,
|
||||
Guild and Bene Gesserit in that order. These are sample rosters, not an assertion
|
||||
that these are the only rules-permitted player-count configurations.
|
||||
|
||||
All samples use genuine setup and saved AI profiles, cycling Easy, Medium,
|
||||
Hard and Brutal by seat. Smaller games necessarily contain fewer profiles;
|
||||
the matrix collectively exercises all four. Filters retain each scenario's
|
||||
seed offset: the original six use 0–5; base uses
|
||||
`6 + 2 × (players − 2) + Advanced`, where Advanced is 0 or 1. `--seed` defaults to 20260926;
|
||||
`--max-actions` defaults to 3500 accepted actions per game. Every action checks
|
||||
physical card and force custody; every 37 actions checks all private views after
|
||||
JSON restoration. Rejected candidates remain visible in private traces even when
|
||||
physical card custody (including unsold auction cards), nonnegative integer
|
||||
forces/spice, twenty-force totals and the distinct Fremen/Emperor/Ixian elite totals
|
||||
and subsets. Base samples also check the exact Traitor inventory after dealing
|
||||
has finished; expansion Traitor/Face Dancer zones are not certified by this
|
||||
check. Every rejected candidate must leave its input unchanged. Every 37 actions
|
||||
checks all private views after JSON restoration and absence of rival hand,
|
||||
spice, Traitor and Face Dancer fields. Rejected candidates remain visible in private traces even when
|
||||
a later candidate succeeds. Samples are development evidence, not calibration or
|
||||
complete rules certification.
|
||||
|
||||
The output is a new private directory outside the checkout. It contains private
|
||||
traces, incomplete-game snapshots, `results.json` and a source-bound `report.json`.
|
||||
An incomplete game or changed source exits nonzero. Resume requires a matching
|
||||
fixed-scenario snapshot with saved AI profiles and records its SHA-256; it cannot
|
||||
be combined with profile/rules filters. Its action budget starts at the snapshot,
|
||||
fixed base or expansion scenario snapshot with saved AI profiles and records its
|
||||
SHA-256; it cannot be combined with profile/rules/player-count filters. Its action budget starts at the snapshot,
|
||||
and its random stream restarts from the supplied seed plus scenario offset.
|
||||
Check setup provenance against the original report: accepting a supplied snapshot
|
||||
does not prove it came from genuine setup. No live room or database is accessed.
|
||||
|
||||
Reference in new issue
Block a user