Scope Advanced Kull to the attempted Karama effect

Adopt the supplied Advanced specific-effect wording, preserving Basic and legacy phase-wide semantics. Bind signed semantic purposes through ordinary/special activations, counters, feasibility and settlement; retain unrelated human controls and minimal bot actions. Phase expiry remains provisional; prior counter, BG and deferred-overbid choices stay.

Validation: frozen12-file111/111, types/lint/build and two original-action/rendered-table programmes. Explicit unopened deal/auction/spice order supports real paid Baliset and shipments; Advanced retains Karama for Baliset cancellation while Basic stays blocked. Four minimal policies remain legal. Correct stale exchange/phase-market/Fremen fixture assumptions. Recovery schema expectations maintained without running deferred SQL assurance. No full modes, browser/deployed acceptance, saved-game/reset/restart or deployment operation.
This commit is contained in:
Quintine committed 2026-10-18 12:49:23 +11:00
1 parent b82441c834
commit 884a09fa92
24 files changed
+951 -64

No files matched your search

+59 -1
View File
@@ -2,6 +2,64 @@
Source audit: 2026-09-06; opt-in preview contract updated 30 September 2026. This is an engineering and product-policy record, not a rules-completion claim. The source audit in [CHOAM_REMAINING_RULES.md](CHOAM_REMAINING_RULES.md) remains applicable. The user-approved counter and BG choices supersede the original proposal; publisher-source uncertainty and full expansion gates remain.
## Advanced effect scope — 18 October 2026
New Advanced attempts use the supplied rulebook’s specific-effect scope;
[exact source and duration interpretation](CHOAM_KULL_SOURCE_UPDATE.md#advanced-specific-effect-scope--18-october-2026).
Basic and previously unstamped pending/settled frames retain all-purpose phase
scope. The older phase-wide descriptions below apply to that path.
`game/kull-purpose.ts` defines finite semantic keys and readable labels.
`KullPhaseRestriction.purpose` and the signed pending frame’s optional `purpose`
select the new scope. Omission retains the original meaning. Four-argument
`kullBlocksKarama` asks only about an all-purpose ban; a fifth key checks that
ban or the matching effect. Active restriction copies retain keys and exact
same-effect duplicates reject. Source feasibility and final settlement use the
same restriction factory; all committed activations check the intended effect.
`GameView.karamaBlocked` remains only the all-purpose message. Its own
`karamaPurposeBlocks` lists `{purpose,label,message}` for active scoped effects.
`kullReaction` adds public `scope: effect | phase` and a readable effect name,
without exposing the private intent payload. Response controls, auction payment,
shipment pricing and faction specials consult the same scope. No restriction
removes physical ownership or legal nonactivation transfers/discards.
Genuine-action fixtures select the unopened original deal and unopened Baliset/
Spice positions explicitly, then use real setup, normal1 purchase, CHOAM1
shipment, Kull, normal desert shipment and ground movement. No postdeal hand,
wallet, force or clock is installed. Advanced can use the retained original to
cancel native Baliset in the same phase; Basic keeps its broad ban. Separate
controlled intent tests check Emperor variants, purchase/payment and original
unstamped semantics. These are not full combinations or persistence assurance.
Frozen **12 files111/111**, types/lint/build and two original-action/rendered-table
programmes pass. Basic uses62 source+8 continuation actions; Advanced70+14.
Actual Baliset1 purchase, CHOAM1 city shipment and normal desert2 shipment lead
to the real Baliset response. Advanced’s retained original cancels it, while
Basic’s unavailable control stays disabled. All four minimal policies legally
pass that response; no strategy calibration. Controlled intent tests also prove
shared purchase/payment and Emperor variants, different special/cancellation
use, and the original unstamped frame behavior.
The source-bound aggregate is outside Git at
`~/.local/share/dune/checkpoints/20261018-kull-purpose/frozen-integrated-final/report.json`:
base `b82441c834ebf6c59a3b09a22a4e8821f4b7ccf8`, source tree
`7624106ac78c036d15c74ef3a226b4dfea52e51cfebe7b36f378c10736fea177`.
All passed checks bind that exact source. The first union exposed two fixture
expectations (forced Harkonnen return and an obsolete Fremen Cunning fence);
those repaired cases passed before the frozen union. The initial native case
also corrected a final active-seat assumption at CHOAM’s real phase-end market.
Types caught one nullable fixture guard. The external table smoke’s Basic
expectation and enabled-button matcher were then corrected; only that smoke was
rerun on the unchanged tree, preserving the earlier successful check reports.
Only checkpoint prose/reference evidence changed afterward.
Recovery schema expectations were maintained but SQL assurance was not run.
Runtime table rendering uses framework aliases/CSS stubs and does not establish
visual/browser/deployed behavior. Original Nexus/alias programmes, wider
combinations, full modes and comprehensive assurance remain due. No saved-game/
database/reset/restart or deployment operation occurred.
## Authoritative boundary
[GF9 CHOAM & Richese rulebook](https://www.gf9games.com/dune/wp-content/uploads/2021/11/CHOAM-Rulebook-low-res.pdf), printed p. 7: Kull reacts to an attempted Karama play and prevents that player from playing Karama for the phase. Printed p. 12 permits Karama to prevent CHOAM's special-effect discard of a Worthless card during that phase. These clauses establish both directions of interaction, but do not specify a nested-response protocol.
@@ -65,7 +123,7 @@ The pure [Kull module](../game/choam-kull.ts) owns `KullPhaseRestriction`, `acti
The original and counter cards have different obligations. The original stays reserved until Kull settles; ordinary counter eligibility excludes that exact physical ID. A different printed Karama or eligible BG substitution may counter while Kull is pending. A BG counter's own conversion response must not overwrite the original intent or its suspended response.
The consumer interface is `GameView.kullReaction`: `null` or `{ event, player, target, intent, plays, canDecline, blocked }`. The old `cards` array is removed. Each private play is `{ source: 'printed' | 'nexus', effect: 'kull', card: Card, event: string, blocked: string | null }`, separating the real selected fuel from the effect and source. It is present during the offer stage; the counter stage uses existing `responseControls`. `player` is the public CHOAM reactor, `target` the attempted activating player, and `intent` the ordinary purpose kind or generic `special` label, never a special selection. All viewers see the same event/actors/intent; only CHOAM receives its plays and `canDecline: true`; others get empty plays. The offer remains declinable with no legal cost. Countering reuses ordinary `card/mode: cancel` or `passResponse`. Never project special choices, saved secrets, signatures, funding or hidden hands, and never derive public opportunity timing from a secret Nexus or cost.
The consumer interface is `GameView.kullReaction`: `null` or `{ event, player, target, intent, scope, effect, plays, canDecline, blocked }`. The old `cards` array is removed. Each private play is `{ source: 'printed' | 'nexus', effect: 'kull', card: Card, event: string, blocked: string | null }`, separating the real selected fuel from the effect and source. It is present during the offer stage; the counter stage uses existing `responseControls`. `player` is the public CHOAM reactor, `target` the attempted activating player, and `intent` the ordinary purpose kind or generic `special` label, never a special selection. All viewers see the same event/actors/intent; only CHOAM receives its plays and `canDecline: true`; others get empty plays. The offer remains declinable with no legal cost. Countering reuses ordinary `card/mode: cancel` or `passResponse`. Never project special choices, saved secrets, signatures, funding or hidden hands, and never derive public opportunity timing from a secret Nexus or cost.
`GameView.kullCounterEvent` is `null` or the same opaque public attempt event while the distinct-counter stage owns control, including a BG `worthlessKarama` overlay. Controls and bots use it only for precedence; legal physical choices still come from native `responseControls`. It reveals no original card, Kull cost or saved response payload. `GameView.karamaBlocked` is the current viewer's stamped activation-block reason or `null`, separate from a pending declaration; `kullPreview` supplies the shared interception warning and `nexusKullPreview` identifies the new source capability.
+41
View File
@@ -2,6 +2,47 @@
Checked 2026-09-07 for classic GF9 Dune and CHOAM & Richese; preview policy and source-aware Nexus cost boundary updated 30 September 2026. This supplements [CHOAM_KULL_DESIGN.md](CHOAM_KULL_DESIGN.md), [native CHOAM Cunning](NEXUS_CHOAM_RULES.md) and the Kull section of [CHOAM_REMAINING_RULES.md](CHOAM_REMAINING_RULES.md). The source audit itself did not change runtime behavior; later opt-in development implementations follow the explicit selections below. This update does not claim a newly fetched publisher ruling.
## Advanced specific-effect scope — 18 October 2026
The authorized supplied Advanced rulebook, physical29/logical27, describes
preventing the attempted Karama for a **specific effect**, with a reference to
physical16/logical14. It omits the publisher CHOAM rule’s phase-wide wording.
The referenced Karama rules distinguish advantage cancellation, shipment pricing,
free Treachery purchase and a faction special. This is a supplied-source cutover,
not a newly located GF9 clarification. Basic retains the publisher-wide scope.
New Advanced Kull attempts bind the interrupted semantic purpose. Successful
settlement restricts that purpose for the remainder of the turn/phase; another
Karama purpose remains usable. **Effect-specific scope is sourced; phase expiry
is provisional**, composed with the publisher duration under the 14 October
choose-recommended policy. No text was found that specifies a replacement expiry.
| Attempt | Bound effect |
| --- | --- |
| Guild-price shipment | `shipment-price`, independent of beneficiary, amount and route |
| Immediate free purchase / winning Karama payment | Shared `auction-free-purchase` |
| Faction special | `special:<actual faction>`; Emperor force/leader and Guild route variants share one key |
| Cancel a native ability | Canonical response power; native/enhanced Prescience and advisor conversion share keys |
| Cancel a CHOAM Worthless ability | The actual effect, so Baliset and Kull are distinct |
| Cancel special-force strength | The affected faction’s strength advantage |
Guild price and cross/return permission remain distinct powers; so do advisor
accompaniment/conversion and own/allied worm protection. No key contains a
physical card, hidden plan, price, force quantity, route or recipient. Substituted
and printed Karama for the same effect share the restriction.
Each new Advanced pending frame signs its purpose before costs; original CHOAM
parents are derived through the saved original context, not the temporary Kull
counter declaration. Existing unstamped pending frames and restrictions retain
the original all-purpose scope. No played save is rewritten. Own table guidance
names scoped restrictions; unrelated controls and legal minimal policies remain
available. Neutral offers still appear without an eligible Kull cost.
The explicit distinct-counter, BG-before-conversion and **Defer interaction**
overbid selections remain. This does not open any profile, module, full-faction
or publication gate. [Current implementation/proof boundary](CHOAM_KULL_DESIGN.md#advanced-effect-scope--18-october-2026)
tracks the connected function separately from historical broad assurance.
## Native fixture integration maintenance — 16 October 2026
The BG Semuta-cost integration selection exposed three stale Nexus Kull
+26
View File
@@ -16,6 +16,32 @@ open mode gates.
## Current checkpoint and work
**Advanced Kull effect scope — 18 October. Prototyped / Partial.** New
Advanced attempts adopt the supplied specific-effect wording. Basic and
unstamped older pending/settled restrictions remain all-purpose. Semantic keys
keep another effect available, normalize purchase/payment and native variants,
and bind the original CHOAM parent rather than its temporary Kull counter.
Retaining phase expiry is explicitly provisional; prior counter/BG/deferred
winning-overbid choices remain.
Two disjoint implementation lanes, bounded source review and owner integration
pass **12 files111/111**, types/lint/build and two original-action/rendered-table
programmes. Selected unopened deal/auction/Spice positions use62 Basic/70
Advanced source actions plus8/14 continuations: actual Baliset1 purchase,
CHOAM1 city shipment, Kull, normal desert2 shipment and real movement. Advanced
cancels Baliset with the retained original; Basic keeps it unavailable. Four
minimal policies legally pass the different-effect response; no tuning.
Feedback corrected fixture assumptions about automatic Harkonnen return,
CHOAM’s phase-end market and already-supported Fremen Cunning, plus one nullable
fixture guard. The external smoke was repaired to distinguish disabled actions
from enabled ones and CSS classes from actual attributes; only that smoke was
rerun after types/lint/build, against identical source. Recovery expectations
were updated without running deferred SQL assurance. Original Nexus/alias/wider
combinations, full modes, final assurance and browser/deployed acceptance remain
open. No saved-room/database/reset/restart/deployment operation.
[Source cutover and exact proof](CHOAM_KULL_DESIGN.md#advanced-effect-scope--18-october-2026).
**Recovered Hajr replay — 18 October. Prototyped / Partial.** The deck contains
one Hajr. Real paid Box recovery now permits playing that same held card again,
counting one extra allowance per accepted use. Advanced needs a fresh completed
+23
View File
@@ -1,5 +1,28 @@
# Dune implementation status
## 18 October 2026 — Advanced Kull specific-effect scope
New Advanced attempts now restrict the semantic Karama effect named by the
supplied source; Basic/unstamped frames retain their original broad phase scope.
Other effects remain usable through connected engine validation, counters,
feasibility, own guidance, human controls and legal bots. Purpose keys normalize
purchase/payment and native variants without binding private card/route/amount
choices. Phase expiry remains an explicit provisional composition; previous
counter/BG/deferred-overbid selections and preview/publication gates stay.
Two disjoint lanes plus bounded source review and owner integration pass12-file
111/111, types/lint/build and two real-action/rendered-table programmes.
Selected unopened deal/auction/Spice order uses62 Basic/70 Advanced source plus
8/14 continuation actions, with actual Baliset1 purchase and paid shipments.
Advanced’s retained original cancels Baliset; Basic keeps cancellation blocked.
Four minimal policies legally pass. Feedback corrected stale/automatic fixture
expectations and nullable typing; the external enabled-control matcher was
repaired and rerun alone on the same verified source. No code changed afterward.
[Canonical source, exact proof and limits](CHOAM_KULL_DESIGN.md#advanced-effect-scope--18-october-2026).
Recovery schema assertions were maintained without running deferred SQL audits.
Original Nexus/alias programmes, wider combinations, full modes/assurance and
browser/deployed acceptance stay open. No saved-room/reset/restart/deployment.
## 18 October 2026 — Recovered physical Hajr replay
The original inventory has one Hajr; genuine paid Box retrieval now allows that
+6 -1
View File
@@ -76,7 +76,12 @@ The API uses `kullReaction.plays`, not a bare `cards` list. Each private choice
**Source is required on every Use, including printed Kull.** There is no omitted-source fallback and no client-selected effect, target, price or Nexus ID. The generic any-time Nexus action does not play Kull: the validated pending Karama opportunity is required. Reject stale/foreign events, malformed costs or broken saved ownership before costs or writes.
The accepted-declaration Nexus spend and retained pending fuel reuse the existing native Cunning application convention. E3 establishes that a played Nexus is discarded; it does not prescribe this internal transaction boundary or a Kull nested-response priority. A distinct eligible counter acts before the stamped phase ban; the original remains reserved. Success discards fuel once, keeps the original printed/BG card unplayed and special once-use unspent, and restricts its activating player for the current turn and phase. Prevention retains fuel under the existing exact-cost phase policy, leaves Nexus spent and resumes the saved original once. Decline spends neither cost and resumes it once. BG interception is before conversion; the original ordinary conversion and its FAQ disposal rules resume only after decline or prevention.
New Advanced Kull attempts adopt the supplied specific-effect scope with
provisional phase expiry. Basic and unstamped older attempts/restrictions retain
phase-wide scope. Cunning changes fuel, not the selected effect’s scope. See the
[18 October source cutover](CHOAM_KULL_SOURCE_UPDATE.md#advanced-specific-effect-scope--18-october-2026).
The accepted-declaration Nexus spend and retained pending fuel reuse the existing native Cunning application convention. E3 establishes that a played Nexus is discarded; it does not prescribe this internal transaction boundary or a Kull nested-response priority. A distinct eligible counter acts before the stamped phase ban; the original remains reserved. Success discards fuel once, keeps the original printed/BG card unplayed and special once-use unspent, and restricts its activating player for the current turn and phase using the Basic/legacy broad or new Advanced effect scope above. Prevention retains fuel under the existing exact-cost phase policy, leaves Nexus spent and resumes the saved original once. Decline spends neither cost and resumes it once. BG interception is before conversion; the original ordinary conversion and its FAQ disposal rules resume only after decline or prevention.
## Pure saved receipt and integration contract
+1
View File
@@ -843,6 +843,7 @@ dedicated retrieved worked FAQs. [Contract and remaining limits](HOMEWORLD_OCCUP
| Homeworld effects | Keep original payment/revival/placement identities and qualification observations; observations alone do not choose an occupied-benefit owner. | [Payments](HOMEWORLD_PAYMENT_INCOME_RULES.md), [card economy](HOMEWORLD_CARD_ECONOMY_RULES.md), [Collection](HOMEWORLD_COLLECTION_RULES.md), [revival deployment](HOMEWORLD_REVIVAL_DEPLOYMENT_RULES.md), [victory reinforcement](HOMEWORLD_VICTORY_REINFORCEMENT_RULES.md), [replacement](HOMEWORLD_REPLACEMENT_RULES.md), [Tupile](HOMEWORLD_TUPILE_INTELLIGENCE_RULES.md) |
| Duke Vidal revival custody | The user selected living set-aside custody after Ecaz revives Duke; a separate Ambassador/Nexus acquisition grants battle control. Only Ecaz may revive him, including Ghola. Native repeated returns now use the separately labelled provisional identity-cohort policy, not a new publisher example or user number. Captured scope and broad combinations remain separately bounded. | [Selected custody](ECAZ_REVIVAL_RULES.md#selected-product-interpretation-28-september-2026), [current cohort policy](ECAZ_REVIVAL_RULES.md#identity-tracked-repeated-cohorts--14-october-2026) |
| Mirror Weapon copied-card cleanup | The user selected ordinary winner retention for the physical Mirror even if its effective copy activates Tooth or Artillery. The original Tooth/Artillery cards retain their named mandatory-discard exceptions. This is a product interpretation, **not** a located publisher ruling. Independent copy-first Tooth/Stone choices and physical cleanup now have a bounded CHOAM/Richese-deck battle runtime; combined modules and full Richese games remain gated. | [Printed Mirror face and source audit](MIRROR_WEAPON_ENGINE_AUDIT.md#user-selected-cleanup-interpretation-28-september-2026) |
| Advanced Kull specific effect | Supplied physical29/logical27 restricts the attempted Karama for a specific effect, unlike publisher Basic phase-wide wording. New signed Advanced attempts bind semantic purpose; purchase/payment and native special variants normalize, as do enhanced Prescience/advisor conversion. CHOAM effects and special-force faction powers stay distinct. Retaining turn/phase expiry is explicit provisional composition under the 14 October policy, not supplied wording. Legacy unstamped pending/restriction frames retain broad scope. Prior distinct counter, BG-before-conversion and deferred overbid selections stay. | [Source cutover and keys](CHOAM_KULL_SOURCE_UPDATE.md#advanced-specific-effect-scope--18-october-2026), [connected implementation and limits](CHOAM_KULL_DESIGN.md#advanced-effect-scope--18-october-2026) |
| Kull Wahad preview timing | User selected a **distinct eligible counter** while the interrupted physical card stays reserved, and BG Worthless interception **before conversion/discard**. Pending declaration is not a ban; only success stamps turn/phase and retains original/special once-use. Decline or prevention resumes the original once. Old `kull` stays printed-only; fresh `nexus-kull` admits native CHOAM plus classic Basic/Advanced seats, CHOAM/Ix Treachery and Nexus alone, without physical Sandtrout. Nexus Use needs actual unallied CHOAM Nexus and canonical eligible own fuel: accepted declaration spends Nexus even if prevented, fuel stays held until success. Use requires source/event/card, with no old-source action shim or proactive Kull. Verified prior printed counter saves migrate only their selection binding; no new-choice retrofit. Reservations, promises and remaining winning-payment coverage constrain fuel/counters; ordinary retained Karama payment is not a canceled Cunning effect. Priority/custody/overbid are user policy; neutral timing/spend conventions are application policy. Bounded checks/CLI/runtime/phone cases pass; broader verification is Partial and no full/public/deployed gate opens. | [Selected preview policy](CHOAM_KULL_SOURCE_UPDATE.md#user-selected-preview-timing--30-september-2026), [source/cost boundary](NEXUS_CHOAM_RULES.md#kull-source-cost-and-action-boundary), [runtime and remaining limits](CHOAM_KULL_DESIGN.md), [new evidence](NEXUS_CHOAM_RUNTIME.md#five-part-status-for-the-new-interaction) |
| Semuta full-hand exchange | User selected **Allow exchange**: acquisition followed by Semuta disposal is an atomic net-zero hand exchange at the faction limit. Existing incoming reservations still consume capacity; this does not permit an already overfull hand or settle Box/Richese purchase timing. | [Selected capacity policy](SEMUTA_SOURCE_UPDATE_20260907.md#user-selected-full-hand-exchange--30-september-2026) |
| Semuta / native Basic Terror | Fresh local `semuta` additionally admits Basic Richese/Moritani plus classics, CHOAM/Ecaz decks and no optional modules. Private Sabotage/Robbery overflow after clean ordinary shipment/movement arrivals uses the existing neutral all-seat response and committed-only face access. Original victim/draw, removed token, payment, forces and optional gift remain original. Other arrival parents, Advanced Moritani and wider family mixtures remain implementation boundaries, not printed Semuta prohibitions. | [Source and bounded evidence](SEMUTA_SOURCE_UPDATE_20260907.md), [native suffix](TERROR_DISCARD_CONTINUATIONS.md) |