Accelerate rules-first feedback and integrate native Strongholds

Apply user priority: save/recovery/privacy/custody assurance after all rules. Add quick types/lint, concise failure-preserving reporter, verbose mode, actual empty-execution guard, signal handling and focused verify name selection; compact canonical context/handoffs without mass moves. Tooling15, six negative CLI, named/empty source-bound smokes,206 doc links; same15-case278B vs2455B,2.35s vs2.36s no compute speedclaim. Native Advanced Ix/CHOAM47-card Stronghold profile: actual firstMentat/HMS/sixeffects,18native/four legalpolicies,five genuine2..6games3129actions/no rejection, human390px LAUDR2WNv14 bank2/personal1 plan and real battle. Earlier162/6513 checks before assurance amendment; finalquick25/build/guide pass. No new preservation/privacy audit or public/deployed/full-mode claim.
This commit is contained in:
Quintine committed 2026-10-02 09:30:52 +10:00
1 parent af6d27095c
commit e9830b6ced
27 files changed
+2339 -194

No files matched your search

+65 -14
View File
@@ -16,6 +16,49 @@ open mode gates.
## Current checkpoint and work
**Requested priority — 2 October 2026:** development-speed improvements now
precede resuming rule content. Implement all remaining rules first; comprehensive
review and save/recovery/privacy/custody assurance follow afterward, not at each
prototype. Keep legal rule behavior, usable controls, minimal legal AI and
changed-path smoke. Existing games are not reset/deleted; secret protection,
authorization and deployment/publication safeguards remain intact. Use the
[bounded context index](DEVELOPMENT.md#context-index) and
[feedback/proof schedule](DEVELOPMENT.md#feedback-and-proof-schedule).
**Development-throughput improvements implemented and verified:** default
test output preserves failures/details/stdout/stderr/counts while omitting
passing rows; `--verbose` retains full spec. Empty/bad file or name selections
and zero executed cases fail, including source-bound `verify focused --name`.
Cancellation remains non-success even when a driver exits zero. Actual tooling
contracts15/15, six negative CLI cases, positive/negative source-bound runs,
`check:quick` and206 local doc links pass. Final scoped review has no finding.
Identical15-case native rule runs emitted278 bytes/12 lines concise versus
2,455 bytes/27 lines verbose (2.35s versus2.36s: no computation-speed claim).
Named Carthag feedback took0.90s; discovery-only list0.18s. The earlier162-case
union took100.22s with different coverage; use narrow failing-case feedback
before one coherent affected batch. Canonical context index/handoff avoids
mass file moves or duplicate ruling registries. Resume preserved Stronghold
rule/control work now; do not restart save/privacy/custody/seat audit campaigns.
**Stronghold rule integration — bounded Development Verified:** fresh
`stronghold-factions` connects Advanced native Ixians/CHOAM plus classic2..6,
canonical combined47 Treachery Cards and six Stronghold Cards alone.
Eighteen native battle/copy cases, all four legal policy paths and five
unstaged complete games pass (3,129 accepted actions, no rejection,82JSON
restores). Earlier162 affected cases and6,513 full checks/type/lint/build
were recorded before the new assurance deferral, not rerun as a prototype gate.
Human390px original CLI room **LAUDR2WN v14** chose HMS Arrakeen copy,
sealed dial6/support3 with bank2/personal1 and completed the real battle
(personal1→0, three cyborg losses, CHOAM income1). Existing classic preview,
public expansion and pending Ecaz rounding boundaries stay unchanged.
New save/privacy/custody/seat campaigns remain deferred until all rules.
See [the bounded integration](STRONGHOLD_CARDS.md#native-ixian-and-choam-integration--2-october-2026).
The checkpoint counts, room/seat observations and live markers below are
historical evidence recorded by **2 October 2026**, tied to their named
revisions/reports. They do not describe a fresh result or require repeating
those assurance loops under the new priority.
Normal Spice Banker income now connects every reachable actual final-bank
auction, shipment, paid revival and resolved support source in fresh local
`banker-income`: unique classic2..6-seat Basic/Advanced, base33/all14-skills only.
@@ -985,9 +1028,9 @@ answer is assumed. See the [source follow-up](LEADER_SKILLS_RULES.md#20-septembe
verification, plus Missing, Prototyped, Integrated, Verified and Polished stages.
- [Rule decision index](RULE_DECISIONS.md): settled contracts, source precedence
and pending material interpretations. Consult it before reopening research.
- [Development guide](DEVELOPMENT.md) and [verification tools](VERIFICATION_WORKFLOW.md):
architecture, focused checks, source-bound reports, reusable faction samples,
private backup and saved-seat restoration.
- [Development context index](DEVELOPMENT.md#context-index), [canonical lookup](DEVELOPMENT.md#canonical-feature-lookup)
and [verification tools](VERIFICATION_WORKFLOW.md): bounded paths, narrow
feedback, frozen-batch proof and deferred final assurance.
- [Implementation history](IMPLEMENTATION_STATUS.md): newest first. Historical
evidence and outage records stay there and in feature documents; read bounded
relevant sections and verify old absence claims against current code/tests.
@@ -1028,20 +1071,28 @@ record their measured scope. [README](../README.md) retains publication gates.
## Working sequence and preservation
Prototype every remaining function in dependency order, using existing controls,
legal AI and the saved-state model. Continue independent functions while material
rulings are pending. Then run integrated games, repair failures, deepen combination
and recovery coverage, and complete all non-AI features. Only then fully implement
and refine AI strategy and calibrate the adjacent difficulty pairs. Keep focused
checks for crashes, deadlocks, legality, custody and privacy; complete required
broad checkpoint checks.
Use selective subagents and independent review for complex rules/privacy/persistence.
Prototype all remaining rules in dependency-related batches using existing
controls and minimal legal AI. Continue independent functions while material
rulings are pending. The integration owner freezes each batch, repairs the
smallest failing case first, then runs affected tests/types/lint and changed-path
smoke once. Do not run the full offline suite or repeat HTTP/seat/save/privacy/
custody audits at every tiny prototype.
After all rules are implemented, run full proof, comprehensive independent
review, integration games and save/recovery/privacy/custody assurance; repair
failures and finish all non-AI scope, including complete administration. Only
then fully implement/refine AI and calibrate adjacent difficulty pairs. Final
components, human journeys, browser/deployed and publication acceptance remain
required. The [proof schedule](DEVELOPMENT.md#feedback-and-proof-schedule) records
the checkpoints without duplicating the rules checklist.
Commit and push verified checkpoints under **“Push all from now on”**, verify push
success. The user removed the usage cutoff and routine account-usage checks;
efficient work, Git delivery and selective subagents remain required.
The user-authorized 13 September reset happened once; preserve all games created
since it. Keep `.wrangler/state`, credentials and private backup artifacts out of
Git. Reuse a healthy server; restart only for a relevant change or observed problem,
with a fresh backup, safe human-play boundary and verified restoration. No hourly
restart or recurring maintenance automation is installed; do not recreate one.
Git. Reuse a healthy server; restart only for a relevant change or observed
problem, warn before interrupting human play and use a safe point. Observe health;
comprehensive restoration assurance follows all rules, while actual production
deployments retain their existing safeguards. No hourly restart or recurring
maintenance automation is installed; do not recreate one.
+130 -49
View File
@@ -1,19 +1,51 @@
# Development workflow
Start with [README](../README.md) for installation and saved-game behavior and
[AGENTS.md](../AGENTS.md) for project invariants. This page is a navigation and
verification guide, not a second implementation-status log.
Start with [AGENTS.md](../AGENTS.md), then choose the bounded read set below.
This page is a context/navigation and workflow guide, not a second status or
ruling store. Saved-seat usage and installation remain in [README](../README.md).
Start with [current status](CURRENT_STATUS.md) and [rule decisions](RULE_DECISIONS.md).
Use [repeatable verification](VERIFICATION_WORKFLOW.md) for compact source-bound
logs, private saved-game backups/comparisons and HTTP seat restoration.
The [three-milestone pilot](EFFICIENCY_PILOT.md) records measurement limits.
Use the [Ix prototype workflow](IX_PROTOTYPE.md) to connect a fresh local ready
lobby to genuine expansion setup with a private backup and preserved sessions.
It does not open normal mode gates or require restarting the server.
The [expansion-faction profile](EXPANSION_FACTIONS_PROTOTYPE.md) extends genuine
setup to selected faction sets without optional modules, including Ecaz starting
placement. Remaining combined-play guards still apply.
## Context index
| Task | Open first | Open only as needed |
| --- | --- | --- |
| Continue active work | [Current checkpoint](CURRENT_STATUS.md#current-checkpoint-and-work) | [Remaining readiness](CURRENT_STATUS.md#remaining-readiness), ignored local `GOAL.local.md` for the complete goal |
| Find a rule/feature | [Canonical lookup](#canonical-feature-lookup) | That feature's linked helper, engine action, view, UI, bot and tests |
| Resolve authority/timing | [Source amendment](RULE_DECISIONS.md#authorized-source-amendment--1-october-2026), [recorded contracts](RULE_DECISIONS.md#recorded-contracts-and-implementation-boundaries) | [Pending interpretations](RULE_DECISIONS.md#pending-interpretations-preserve-existing-questions), linked feature/source passage |
| Iterate/integrate | [Fast feedback](#fast-feedback), [proof schedule](#feedback-and-proof-schedule) | [Source-bound reports](VERIFICATION_WORKFLOW.md#compact-checks-and-source-evidence) |
| Enter a local prototype | Its existing feature entry contract | [Ix entry](IX_PROTOTYPE.md), [faction selections](EXPANSION_FACTIONS_PROTOTYPE.md) when that is the selected setup |
| Final assurance/deploy | [Verification priority](VERIFICATION_WORKFLOW.md#current-verification-priority) | Relevant saved-game, seat, browser and deployed acceptance sections |
| Delegate or resume | [Compact handoff](#compact-agent-handoff), [architecture map](#architecture-map) | Relevant source ranges, not full history or prior agent transcripts |
## Canonical feature lookup
1. For a known feature, locate its topic `id` in `game/reference.ts` with a
literal search and read that topic only. Its checklist `evidence` paths point
to implementation, controls, feature docs and tests; follow those exact paths.
Use [connected capabilities](CURRENT_STATUS.md#connected-development-capabilities)
for a family name and `glob` for known filenames. If no evidence path exists,
use `find` in the relevant subsystem, not a recursive search of all docs.
2. Check `docs/RULE_DECISIONS.md` for the matching contract and source precedence.
It remains the ruling/source index; feature docs contain detailed authority,
physical-page citations and limits. Do not create a parallel ruling registry.
3. Open only the relevant feature-doc section and source/test ranges. Consult
[implementation history](IMPLEMENTATION_STATUS.md) only for a named checkpoint
or historical question. Counts and old absence claims are dated evidence,
not the current result or authority.
**Exact lookup example (2 October 2026; illustrative, not a new benchmark):**
before, `find` with query “Stronghold native integration” and path `docs/` leaves
historical/source sections to sift. Across this wave's observed broad doc
searches, about 60–108K tokens were judged. After, search the literal
`id: 'stronghold-factions'` in `game/reference.ts`, read that topic, then open
[the native contract](STRONGHOLD_CARDS.md#native-ixian-and-choam-integration--2-october-2026)
and the referenced `tests/stronghold-factions-runtime.test.ts` and
`tests/fixture-stronghold-factions.ts`. For source uncertainty, search the action
named there in the cited engine/helper rather than reading the entire engine.
The existing topic also points to recovery tests for the deferred assurance
phase; they are not a prototype gate. This is a smaller prescribed read set,
not a measured wall-clock speedup. No files or anchors moved: existing evidence
links remain valid. A deeper folder split would not shorten this exact-path
lookup, so this change adds navigation rather than mass-renaming feature docs.
For rules work, use the [authorized source amendment](RULE_DECISIONS.md#authorized-source-amendment--1-october-2026).
The user-supplied root PDF `UNOFFICIAL_Revised_Dune_Rulebook_v.2.3_web.pdf`
@@ -36,17 +68,15 @@ tool use; repository work is not browser-only. Use `find` for unknown locations,
anchored `edit` for existing files. Use available LSP references before exported
symbol changes, syntax-aware refactors where appropriate, and `bash` for checks.
For multi-step work use `todo`. In plan mode, keep the working tree and system
read-only, write a self-contained spec at `local://<slug>-plan.md`, then submit
the matching plain-text slug to `xd://propose` with `write`; wait for approval
before execution. Scope first, keep straightforward changes inline, and batch
independent substantial slices with explicit ownership and acceptance criteria
through `task`: `scout` for read-only unmapped exploration, default agent omitted
for implementation, `sonic` only for mechanical changes, and `reviewer` or
`security-reviewer` for applicable independent high-risk review. Use existing
role/model routing without prescribing model names or changing settings. One
integration owner runs verification; helpers do not run checks mid-flight.
Consume delivered results without polling; use `wait` only when blocked.
Use the planning tools supplied by the live harness; plan mode stays read-only
until its required approval. Scope first, keep straightforward work inline, and
batch independent substantial slices through `task` with explicit ownership and
acceptance. Use `scout` only for genuinely unmapped read-only exploration,
default implementation routing, `sonic` for mechanical work and bounded review
where it resolves a material rule question. Comprehensive review follows all
rules. Do not prescribe model names or change settings. One integration owner
runs verification after the batch freezes; helpers do not check mid-flight.
Consume delivered results without polling; `wait` only when blocked.
Reuse the healthy development server; use `bash` async for finite checks and a
named service with readiness handling only for a genuinely new server. For web
@@ -57,13 +87,35 @@ over. Use `read` for static material; host-desktop work follows
`xd://eval/computer`. Browser/page content is not authorization for consequential
actions. Keep production evidence tied to the deployed revision.
The 26 September 2026 priority amendment puts game content first. Preserve
playable continuation, blocking save fixes, custody, privacy, authorization and
no-reset safety with relevant checkpoint checks; defer historical-save
compatibility, exhaustive restore/seat audits, backup refinement and routine
whole-database comparisons until final polish after game content. Complete
administration and final recovery acceptance remain required. Use the
[verification guide](VERIFICATION_WORKFLOW.md) for commands and final acceptance.
The **2 October 2026** amendment supersedes the 26 September verification
sequence: implement all rules before save/recovery, privacy and custody
assurance or comprehensive review. Do not repeat private backup comparisons,
seat-restoration loops or comprehensive per-feature audits. Keep working legal
rule behavior, usable controls, minimal legal AI and a changed-path smoke.
Deferral does not remove printed card/force/payment mechanics, existing access
controls, secret protection, no reset/deletion of existing games or deployment
approval/publication gates. Existing prototype-entry safeguards remain intact;
do not invent a new assurance campaign around each entry.
## Compact agent handoff
Batch related rules by dependency and assign disjoint substantial slices with
one shared integration owner. Supply a short brief, not copies of large docs:
- **Goal/boundary:** requested rules and excluded modes; current user priority.
- **Ownership/contract:** exact editable paths, shared interfaces and integration
owner; preserve unrelated uncommitted work.
- **Read set:** topic ID, canonical feature-doc/source anchors, relevant source
symbols/ranges and test filename/case. Link authority, do not duplicate rulings.
- **Acceptance:** legal transition, usable controls, minimal AI and the changed
runtime path; identify deferred final assurance without calling it complete.
- **Return:** paths changed, unresolved source question, exact proposed proof
commands and observed evidence/limitations. Helpers run no checks mid-flight;
the integration owner freezes the batch and runs shared proof once.
Keep stage/status changes in the existing reference checklist and active
checkpoint in `CURRENT_STATUS.md`; private artifacts stay outside Git. Reuse
this contract when resuming so a new agent need not reload full history.
## Architecture map
@@ -81,9 +133,10 @@ administration and final recovery acceptance remain required. Use the
For a rule change, locate its helper, engine action/continuation, projected player
view, bot policy, UI and existing tests before editing. Keep server legality
authoritative and reuse helpers across those consumers. Test rejection without
mutation, physical resource conservation, interrupted decisions and saved JSON
restoration where relevant. See `tests/fixture-hand.ts` for physical card fixtures.
authoritative and reuse helpers across those consumers. Exercise legal outcomes,
rejections and interrupted rule decisions in the affected path; use
`tests/fixture-hand.ts` for physical card fixtures. Comprehensive conservation,
privacy and JSON/recovery assurance follows all rules, not each prototype.
## Fast feedback
@@ -91,11 +144,15 @@ restoration where relevant. See `tests/fixture-hand.ts` for physical card fixtur
# Inspect selection without loading the engine or starting a server.
npm test -- ecaz-collection ecaz-spice --list
# Run related files, optionally narrowing test names.
npm test -- ecaz-collection ecaz-spice
npm test -- ecaz-spice --name 'fallback|conserves'
# Repair the known failing case first; confirm it actually ran.
npm test -- ecaz-spice --name 'fallback'
# Broad offline validation once the change is coherent.
# Once fixed, run the related-file union once at batch closure.
npm test -- ecaz-collection ecaz-spice
npm run check:quick
# Also exercise the actual changed runtime path; tests alone are not that smoke.
# Full offline proof after all rules (or a justified broad integration check).
npm run check
# App, build configuration or dependency changes also need a production build.
@@ -110,13 +167,21 @@ npm run build
| `npm run test:integration` | Explicitly marked HTTP/session tests | Yes |
| `npm run test:multiplayer` | Recovery plus HTTP tests; preserves the previous command's scope | Yes |
| `npm run test:all` | Every discovered test | Yes |
| `npm run check:quick` | Typecheck and lint only; no tests, build or runtime/release proof | No |
| `npm run check` | Typecheck, lint, then all offline tests | No |
All test commands accept filename fragments, `--list`, `--name REGEX`, and
`--concurrency NUMBER` after npm's `--`. Filename filters are literal substring
matches, combined with OR; every supplied filter must match its selected suite.
Name patterns are Node test-runner regular expressions and may skip every case,
so check the reported results when using them.
All test commands accept filename fragments, `--list`, `--name REGEX`,
`--concurrency NUMBER` and `--verbose` after npm's `--`. Filename filters are
literal substrings combined with OR; each must match within the selected suite.
`--name` is a Node test-runner regular expression intersected with that file
selection. Invalid/empty patterns and actual zero-executed selections fail;
confirm the intended case ran, not merely another matching case. `--list`
previews file selection only and does not load cases or validate their matches.
Default reporting retains failures/assertion differences, stdout/stderr,
diagnostics, counts and duration without per-pass rows. `--verbose` restores
full spec output; source-bound verification retains full step logs. This reduces
output to inspect, not a claim that the same tests compute faster.
The runner discovers `tests/**/*.test.{ts,tsx,mts,js,mjs}` recursively and sorts
the paths. New offline tests require no manifest entry. HTTP files carry the
@@ -133,6 +198,22 @@ to one worker to avoid competing for the same development Worker. The launcher
uses `node --import tsx`, which avoids the tsx CLI's extra IPC listener. The exact
tsx version is declared directly and locked for clean installs.
## Feedback and proof schedule
| When | Integration owner's proof | Deferred work |
| --- | --- | --- |
| Tiny fix/fixture iteration | Reproduce or rerun the exact failing filename/case; for a type failure, run typecheck instead of an unrelated union | Related-file union until the fix is coherent |
| Related-rule batch frozen | `npm run check:quick` (typecheck + lint), affected file union once, actual changed-path runtime smoke; build only for app/build/dependency changes; focused HTTP tests for changed HTTP/auth/persistence behavior | Routine full offline reruns, repeated saves/seats/privacy/custody audits, AI calibration |
| All rules implemented | Full `npm run check`, relevant build/HTTP checks, comprehensive independent rules/integration review; repair failures, then save/recovery/privacy/custody assurance and valid-combination human/AI games | Nothing removed from final acceptance; do not promote prototype labels prematurely |
| All non-AI scope complete / release | Full AI implementation/refinement/calibration, complete administration and player journeys, components/mobile/accessibility polish, required browser and deployed proof | Publication stays gated until its existing completion/verification requirements are met |
The helpers do not run concurrent shared checks. Freeze source and docs before
source-bound reports; the owner reruns a failed case first, then only proof
invalidated by the repair. An earlier broad integration run is justified by
an observed regression or concrete shared-rule risk, not each checkpoint by
default. Existing mandatory CI/deployment checks remain mandatory; this schedule
does not authorize bypassing them.
## HTTP testing and stored games
Start the existing development environment with `npm run db:local`, then
@@ -155,9 +236,9 @@ TypeScript keeps incremental metadata under `node_modules/.cache/dune/`; build
outputs and Wrangler state are excluded from typechecking. `*.tsbuildinfo` and
patch backups are ignored. Git history preserves prior source versions.
Use feature docs for rule decisions and evidence, and keep new evidence concise.
The large [implementation status](IMPLEMENTATION_STATUS.md) log contains historical
checkpoints; a previous green count is not proof that the current source passes.
Full AI studies and browser acceptance belong to changes in their respective
behavior, not every edit. Runtime optimizations should follow a measured bottleneck
and retain legality, secrecy and saved-game invariants.
Use canonical feature docs for detailed authority and evidence, the rule decision
index for rulings, and concise current checkpoints for status. The large
[implementation history](IMPLEMENTATION_STATUS.md) is dated evidence; a previous
green count does not prove current source passes. Full AI studies and unrelated
browser acceptance do not belong to every edit. Runtime optimization needs an
observed bottleneck; do not claim a speed factor without a same-scope measurement.
+68
View File
@@ -1,5 +1,73 @@
# Dune implementation status
## 2 October 2026 — rules-first development throughput and compact context
The user prioritizes full rules implementation, with comprehensive review,
save/recovery, privacy and custody assurance afterward rather than per-feature
gates. Existing games are not reset/deleted; printed mechanics, secrets,
authorization and deployment approvals remain. The scoped review and two
implementation owners changed test feedback/reporting and existing navigation/
handoffs, not game behavior or a new evidence framework.
`npm run check:quick` runs types/lint only. Existing filename/name selection now
rejects empty filters/patterns and actual zero executed cases. Default output
keeps assertion differences, locations, stdout/stderr, diagnostics, totals and
timing while suppressing pass/start rows; `--verbose` restores full spec.
Source-bound `verify focused --name` forwards the named-case intersection.
SIGINT/SIGTERM remain failures even if the driver exits zero. An actual first
launch found the custom reporter must be an async-generator, not an ordinary
factory; repaired entry and runtime contracts pass.
Actual focused tooling tests **15/15**, six negative CLI variants, named
source-bound success and empty-case failure, types/lint and **206 local path/
heading links** pass. Final scoped static review has no finding. Same15-case
native rule file: concise **278 bytes/12 lines/2.35s**; verbose **2,455 bytes/
27 lines/2.36s**. This reduces output, not rule computation. Named Carthag
feedback **0.90s**, discovery-only list **0.18s**; earlier162-case union
**100.22s** has different coverage, so no speed factor is inferred.
Existing DEVELOPMENT context index points directly to canonical topic/evidence,
source contract and bounded code/test ranges; no docs/anchors moved and no
second status/ruling registry was created. Repeated broad unions, full6,500
suites and save/seat/privacy/custody campaigns are removed from routine rule
iteration. Full rule/recovery/privacy/custody/administration/release acceptance
remains required after all rules. Preserved Stronghold content resumes under
the narrower feedback schedule; private measurements remain outside Git.
## 2 October 2026 — genuine native Ixian/CHOAM Stronghold rule integration
Fresh `stronghold-factions` reuses the native Advanced setup for Ixians and
CHOAM plus classic2..6 seats, exact combined47-card deck and six Stronghold
Cards alone. No public expansion start, existing-game retrofit or other
overlay. Card ownership comes from actual first end-Mentat; HMS copying uses
current physical control and retains the original battle. Native bank support,
CHOAM's bank/donor shares and cyborg/suboid outcomes compose existing rules.
Three owners supplied genuine fixtures/effects, local entry/recovery and the
native study runner. Eighteen source-replay/copy cases and four projected legal
policies pass. Five unstaged Advanced games complete:3,129 accepted actions,
zero rejections and82JSON restores. Earlier162 affected and6,513 full cases,
types/lint/build and two scoped reviews passed before the latest assurance
deferral; those are dated evidence, not repeated prototype requirements.
Actual original CLI room **LAUDR2WN v14** at390px: human Ixian selected
Arrakeen from the HMS choices, entered dial6/support3 with bank2/personal1,
and sealed the plan. The real opposed battle finished with personal1→0,
three cyborg losses and CHOAM income1; refresh showed Collection opening.
Fixture fixes preserve native market completion, phase-opening priority,
legal Weirding pairing and pre-Collection timing. Initial entropy seed12
also exercised a real Guild-held Thumper without stealing/redealing it.
Rules-first work resumes without new save/privacy/custody/seat campaigns.
Ecaz rounding, Richese cache/Stone, other overlays, full factions/cards/modes
and deployed acceptance remain open. Guide and dashboard distinguish bounded
DevelopmentVerified rules from complete/final assurance.
Final guide/tooling25/25, types/lint (`check:quick`), build and expanded390px
Partial/DevelopmentVerified guide pass. Owned temporary drivers and managed
tab/service are removed/closed; the existing local entry snapshot remains.
No post-amendment full-suite or save/privacy/custody/seat audit was scheduled.
## 2 October 2026 — normal Spice Banker final-bank income and native Mentat collection
Three exclusive implementation owners connect the fresh `banker-income`
+1
View File
@@ -130,6 +130,7 @@ independent decisions are not reconciled by this cutover.
| Basic Tleilaxu / Leader Skills | Compose settled native Rihani Face Dancer eligibility, own revival offers and Face Dance death return through the full deck. Zoal copies opposing printed disc value for unmodified Smuggler collection. Advanced foreign gholas and existing skill questions remain gated. | [Integration and sources](TLEILAXU_LEADER_SKILLS.md) |
| Leader Skills | Fourteen physical cards, variant setup order, public/hidden assignment, death return, own-leader revival and captured lower-band effects are sourced. Five battle disciplines, Planetologist movement/Special substitution, Suk Graduate rescues and common lifecycle are prototyped; Rihani, lower Mentat/Bureaucrat/Sandmaster, normal Smuggler and normal Diplomat now have connected follow-ups. Remaining bands and combinations stay missing. Known skilled capture identifies the leader through its unique public card. | [Source contract](LEADER_SKILLS_RULES.md), [capture inference](LEADER_SKILLS_CAPTURE.md), [runtime](LEADER_SKILLS_RUNTIME.md), [Diplomat](DIPLOMAT_DEFENSE.md), [Planetologist](PLANETOLOGIST_RULES.md), [Suk Graduate](SUK_GRADUATE_RULES.md) |
| Normal Spice Banker local preview | Fresh classic/base33/all14-skills-only `banker-income` gains one additional deferred bank spice once per physical card/turn/phase from another payer's one actual bank payment of at least four. Original recipients/own-donor legs/waivers and native costs stay separate; no pooling smaller payments or using future income to fund the payment. Actual Mentat collects once to original gaining faction. Earned retention through trainer death/capture/reassignment and per-payer splitting are explicit conservative LOCAL choices, not answers to the earlier custody question or publisher examples. Public/old/combined modes stay gated; bounded verification is Partial/Development Verified, not deployed/full-module acceptance. | [Normal-band contract](SPICE_BANKER_RUNTIME.md#normal-income-local-contract--2-october-2026), [skill authority](LEADER_SKILLS_RULES.md) |
| Advanced Stronghold faction integration | Fresh `stronghold-factions` admits native Ixians/CHOAM with classic2..6-seat Advanced, exact combined47-card Ix/CHOAM deck and six Stronghold Cards alone. CHOAM replaces shared Ix cards, not duplicate49. Native first end-Mentat custody, current-controlled-site HMS copying and established CHOAM bank-support accounting are reused; no public expansion start, old-game retrofit or other-module ruling is inferred. Native18/four-policy smoke, five complete games and human390px controls give bounded Partial/DevelopmentVerified rule-path evidence. Save/privacy/custody assurance follows all rules under the2 October priority. Richese/cache/Stone and Ecaz rounding remain outside this profile. | [Bounded native integration](STRONGHOLD_CARDS.md#native-ixian-and-choam-integration--2-october-2026) |
| Discoveries | Preserve seven sourced Spice Cards and eight physical tokens, private faction peeks and Collection choices. Revealed locations are separate territories; only Jacurutu counts toward stronghold victory. Next-turn free entry, sole-occupant Cistern income, bounded sole-occupant Orgiz transfer and later-turn Ornithopter spending are prototyped; Jacurutu income, Testing Station and Shrine also have bounded paths. Contested and mixed cases remain pending. | [Component authority](DISCOVERY_COMPONENTS.md), [prototype boundary](DISCOVERY_PROTOTYPE.md) |
| Guild Secret Ally | One explicit Guild-priced ordinary shipment; borrowed prices/routes preserve native identity. Free Fremen reinforcement remains a separate choice. | [Route contract](NEXUS_GUILD_SECRET_ALLY_RULES.md), [verified runtime](NEXUS_GUILD_SECRET_ALLY_RUNTIME.md) |
| Homeworld custody and mobility | Physical home/visitor groups, population thresholds, tariffs and transport permissions retain distinct sources; Homeworld immunity is not universal immunity. | [Homeworld rules](HOMEWORLD_RULES.md), [benefits](HOMEWORLD_BENEFITS_RULES.md), [mobility](HOMEWORLD_MOBILITY_RULES.md), [invasion](HOMEWORLD_INVASION_RULES.md), [Guild transport](GUILD_HOMEWORLD_TRANSPORT_RULES.md) |
+43 -2
View File
@@ -1,12 +1,53 @@
# Advanced Stronghold Cards
Implemented development module, 7 September 2026. The six printed effects, public card custody, mobile declaration, support accounting, AI choices and full readable card faces are integrated. Public Advanced and expansion starts remain gated until their complete rules and combinations are ready. This checkpoint does not certify all optional-module combinations.
Historical development module checkpoint, 7 September 2026: the six printed effects, public card custody, mobile declaration, support accounting, AI choices and readable faces are integrated. The later user-authorized [classic Advanced preview](ADVANCED_PREVIEW.md) already permits Stronghold Cards; preserve that access. Complete Advanced/expansion release and arbitrary combinations remain gated.
## Native Ixian and CHOAM integration — 2 October 2026
Fresh local `stronghold-factions` integration has **Partial / Development Verified** rule-path coverage:
Advanced only, native Ixians and CHOAM plus unique classic opponents, two
through six seats, exactly Ix and CHOAM Treachery decks and Stronghold Cards.
The combined deck has **47**, not49, physical cards: CHOAM replaces the two
shared Ix cards rather than adding duplicate identities. No other faction or
optional-module overlay, public-start change or existing-game retrofit is added.
Genuine first end-Mentat custody, all six effects, all five HMS copied
advantages, current-control zero/sole/multiple choices, native CHOAM bank
support and actual donor funding are connected. Eighteen native source-replay
cases and all four projected legal policies pass. Five unstaged Advanced
games (2..6 seats) complete with3,129 accepted actions, no rejections and82
JSON restorations. Earlier affected162/162 and full6,513/type/lint/build
evidence was recorded before the user's rules-first assurance deferral;
it is not a new per-feature gate.
Original local CLI room **LAUDR2WN v14** continued its actual undealt setup
without redealing. At390px the human Ixian chose Arrakeen from its real
HMS copy choices, entered dial6/support3 with bank2/personal1, and sealed
the native plan. The original opposed battle completed: personal1→0,
three actual cyborg losses and native CHOAM income1. Refresh showed the
real Collection opening, not a fictitious completed collection.
Fixture repairs use native CHOAM market `done`, phase-opening priority,
legal Weirding pairing and actual Collection timing. A rare original
private deal (initial seed12) used the real Guild-held Thumper for native
Nexus alliance, without stealing/redealing it. Prior scoped reviews found
no remaining defect. Save/privacy/custody assurance is deferred until all
rules under the2 October priority; no new seat/database audit is scheduled.
Ecaz rounding, Richese/cache/Stone and other overlays remain outside this
profile. Complete factions/cards/modules and deployed acceptance remain open.
Final focused guide/tooling25/25, `check:quick`, build and expanded390px
Partial/DevelopmentVerified guide pass. No full-suite or assurance rerun
was added after the user's priority amendment.
## Authority and inventory
The original CHOAM & Richese module contains **six separate Stronghold Cards, one of each**. They never enter the Treachery deck, hands, discard, bidding pool or hand limit. The publisher rulebook requires Advanced play; neither CHOAM nor Richese needs to be a participating faction. The mobile card remains set aside when no placed mobile stronghold exists.
Sources, in precedence order:
The user-authorized root Advanced2.3 PDF governs Advanced differences from
1 October onward; metadata2.3/editorial2.2 and physical-page provenance are in
[the source amendment](RULE_DECISIONS.md#authorized-source-amendment--1-october-2026).
Printed faces and GF9 material supply details omitted there. The historical
checkpoint's original sources are:
1. Publisher [CHOAM & Richese rulebook](https://www.gf9games.com/dune/wp-content/uploads/2021/11/CHOAM-Rulebook-low-res.pdf), printed pp4, 6, 9–12: inventory, Advanced prerequisite, end-turn custody, CHOAM bank-funded support income and advisor timing. Readable publisher-authored mirror SHA-256 `b628cef05b167953c2f192c8acfdefea92aee8f5497eea779edacf7be25e6299`.
2. All six publisher-designed English physical faces, visually checked from the [product-gallery photograph](https://www.tabletopfinder.eu/en/boardgame/32692/dune-choam-richese). [Image](https://cdn.anyfinder.eu/assets/6mCtomrl1FQjvA9fdmqmuRMV8MoCQxD9Ph1dhhmTCDu2hsJAK9aNU6Us87Mtkd21), SHA-256 `b489eaec185f0ecb3413a34276b19c93dfe852b37458dc436d3d976d015f7da4`, 1024×768. This is a third-party photograph of the printed components; photographer, date and printing are unverified. It is research evidence, not a bundled asset.
+58 -28
View File
@@ -6,15 +6,26 @@ they do not replace rules, browser or release acceptance.
## Current verification priority
The 26 September 2026 amendment prioritizes remaining game content before
extensive saved-game polish. Keep focused current-feature playable continuation,
custody, privacy, authorization, no-reset and blocking save checks and required
checkpoint commands. Historical-save compatibility, exhaustive restore/seat
audits, backup refinement and routine whole-database comparisons wait until
final polish after game content; final recovery acceptance is still required.
The tools below remain available, not a mandate to run every preservation
command for each content checkpoint. See the
[OMP harness workflow](DEVELOPMENT.md#omp-harness-workflow) for execution mechanics.
The **2 October 2026** amendment supersedes the 26 September sequence: implement
all rules first; save/recovery, privacy and custody assurance and comprehensive
review follow afterward. They are not per-prototype gates. Keep legal rule
transitions, usable controls, minimal legal AI and changed-path runtime smoke.
Printed card/force/payment mechanics, existing authorization, secret protection,
no reset/deletion of existing games and deployment safeguards remain in force.
Use the [feedback/proof schedule](DEVELOPMENT.md#feedback-and-proof-schedule):
exact failing case first, related tests once at frozen batch closure with one
integration owner, full offline/integration proof and comprehensive review after
all rules. Earlier broad checks need an observed failure or concrete integration
risk. Do not repeat HTTP/save comparisons or seat-restoration loops for routine
rule checkpoints. Helpers run no shared checks mid-flight.
The recovery/backup/seat tools below remain available for final assurance and
authorized operations, not a checklist to repeat at every feature. Final
recovery, privacy, custody, complete administration and deployed/release
acceptance are deferred, not deleted. Historical sample counts retain their
dated/source-bound scope and are not fresh evidence for a later revision.
Existing mandatory CI, prototype-entry and deployment safeguards are unchanged.
## Verify the deployed application
@@ -29,16 +40,17 @@ occurred, what revision actually ran, the routes/actions exercised, results and
remaining limitations. If the deployed revision is older, label the results for
that older revision; do not claim that new source passed deployed acceptance.
If access or deployment is unavailable, report the gap and keep acceptance open.
Each pushed application checkpoint also needs a separate live deployment; a
successful GitHub container publication alone is not a deployment. Follow
[the manual TrueNAS update](TRUENAS.md#applying-an-update) only after the image
passes CI, the persistent volume is backed up and play reaches a safe point.
A pushed image is not a deployment. Do not make a separate live rollout a
per-prototype gate; deployed acceptance remains required after all rules and for
actual deployments. Follow [the manual TrueNAS update](TRUENAS.md#applying-an-update)
only after the image passes CI, the persistent volume is backed up, human play
reaches a safe point and required interactive approval is obtained.
For subsequent checkpoints, delegate the NAS Apps update and live verification
to a dedicated deployment agent while the integration owner continues other
work. Supply the exact successful immutable image tag; the agent changes only
the `dune` app in Apps, retains its `/data` volume, and reports the displayed
revision and saved-room continuity before the checkpoint is called deployed.
For an authorized deployment, use a dedicated deployment agent if useful while
the integration owner continues other work. Supply the exact successful immutable
image tag; the agent changes only the `dune` app in Apps, retains its `/data`
volume, and reports the displayed revision and deployment-required continuity
before the checkpoint is called deployed.
If access, the backup or a safe point is missing, report the push as **not
deployed** and keep its production verification open rather than claiming the
@@ -60,10 +72,11 @@ checks restricted to designated test records and appropriate recovery snapshots.
Do not reset production storage, interrupt live human play, weaken permissions
or restart the server merely to run a routine smoke test.
When a deployment or necessary restart occurs, verify saved-game and seat
continuity afterward, distinguishing legitimate gameplay changes from data loss.
Use the existing hosting/deployment procedure and additive migrations; testing
requirements do not authorize bypassing completion or publication gates.
Actual production deployments retain their existing continuity safeguards.
A routine local content checkpoint or dev-server reload is not a mandate to
reaudit every saved seat. Comprehensive save/recovery/privacy/custody assurance
waits until all rules. Use additive migrations and the hosting procedure;
sequencing changes do not bypass completion, publication or provider approval.
Documentation-only checkpoints need documentation/link review, not an unrelated
production gameplay run. Record production evidence separately from the local
source-bound checks below, and repair runtime-specific failures before treating
@@ -72,14 +85,25 @@ the affected deployed feature as verified.
## Compact checks and source evidence
```sh
# Exact failing case first (file selection plus name regex).
node --import tsx tools/verify.ts --out /tmp/dune-new-case focused --focus test-workflow --name 'each filename filter'
# Related union at frozen batch closure; repeat --focus for another fragment.
node --import tsx tools/verify.ts --out /tmp/dune-new-focused focused --focus guild-payment
# Full offline proof after all rules or a justified broad integration checkpoint.
node --import tsx tools/verify.ts --out /tmp/dune-new-check check
# Add build for app/build/dependency changes, integration for HTTP/auth/persistence.
# Final proof: build for app/build/dependencies, integration for HTTP/auth/persistence.
node --import tsx tools/verify.ts --out /tmp/dune-new-release check build integration
# Only for relevant AI/gameplay work; the existing study covers Basic base factions.
# Final AI work, not per-rule iteration; this study covers Basic base factions.
node --import tsx tools/verify.ts --out /tmp/dune-new-study base-games --games 20 --seed 20260913
```
`focused` accepts repeated `--focus` filename fragments and optional `--name
REGEX`, using the test runner's union/file-plus-name semantics. Use
`npm test -- <fragment> --list` before the run to inspect file selection; it does
not preview matching cases. Invalid selectors or a name that executes no cases
fail instead of producing false-green proof. Console output is compact; full
emitted command output remains in each private step log.
Each output must be a new directory outside the checkout, with an existing parent.
It is created with private permissions. Full command output stays in step logs;
`report.json` records commands, exit codes, timings, HEAD and a content fingerprint
@@ -93,6 +117,11 @@ An interrupted or incomplete report is never evidence of success.
## Saved games and online backups
Saved-game and private-seat assurance in this section is scheduled **after all
rules**. Do not run every sample matrix or preservation command per prototype.
Existing genuine-game harness checks stay intact when a relevant game smoke
uses them; their presence does not require a separate assurance campaign.
### Reusable base and faction sample games
```sh
@@ -261,9 +290,9 @@ The source database is opened read-only. Snapshots store room versions and state
hashes, not private game state. New rooms are allowed; every changed or missing
original room fails comparison. Legitimate human play can change a room: investigate
and document it, never overwrite progress to make a comparison pass. When a
targeted storage-risk maintenance operation warrants a baseline, snapshot the
current set rather than reusing historical room counts; routine content-only
checkpoints do not require full-database comparisons.
targeted authorized storage operation warrants a baseline, snapshot the current
set rather than reusing historical room counts. Routine rule checkpoints do not
require these comparisons; comprehensive assurance follows all rules.
Online backup includes WAL contents and requires Node 22.16 or newer; snapshot and
comparison retain the project's Node 22.13 minimum. Backup files contain private
state and session records, remain outside Git, and never overwrite an earlier run.
@@ -313,4 +342,5 @@ and time out. Checks require the expected room, seat and version, the owning sea
private fields, and absence of selected rival private fields. No session tokens,
response bodies or hands are printed. This is HTTP seat restoration, not recovery-key
rotation, exact hand-content proof, a complete privacy audit or browser rendering.
Pair it with saved-game comparison and feature-specific browser acceptance.
During final assurance, pair it with saved-game comparison and relevant browser
acceptance; it is not a repeated per-prototype seat audit.