Files
Dune/docs/TRUTHTRANCE_MIXED_MOVEMENT.md

127 lines
7.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Truthtrance current facts and future ground movement
The [mixed ordinary-payment follow-up](TRUTHTRANCE_MIXED_BRIBES.md) reuses
this compiler and extracts the editor into `components/mixed-action-fields.tsx`.
The movement wrapper retains its public API, IDs, callbacks and native behavior.
## Mixed aggregate prototype — 26 October 2026
**Prototyped / Partial.** The packet is
`{kind:'mixedMovement',target,turn,mixed}`. The raw tree combines current
`{kind:'fact',fact}` leaves, future `{kind:'action',action:{territory,minimum}}`
leaves and full AND/OR. It uses the existing native Basic/Advanced phases0–5
[ground-movement opportunity](TRUTHTRANCE_MOVEMENT_EXPRESSIONS.md), with no new
mode/start permission. Both clause families are required in a mixed question.
## Authority and conservative snapshot meaning
Reuse the recorded [nonbattle source audit](TRUTHTRANCE_NONBATTLE_READINESS_20260907.md#source-basis),
[November2020 FAQp8](https://www.gf9games.com/dune/wp-content/uploads/2020/11/Dune-FAQ-Nov-2020.pdf)
current-turn/AND/OR authority and supplied Advanced physical39/printed37 public
answer/compliance/release/unknown text. These sources do not prescribe an
online solver. The existing [mixed-shipment model](COMPOUND_SHIPMENT_PROMISES.md)
provides the current-fact snapshot/aggregate precedent. This conservative
composition remains explicit provisional software interpretation under
standing14October choose-recommended priority.
Facts freeze at actual answer time. A fact about holding Hajr stays the
answer-time fact after the same physical card is played and discarded. Later
spending/forces/custody do not create a promise to preserve the earlier state.
Only the complete yes/no answer is public. Individual fact answers and privately
reduced branches are not separately published.
For a definite Yes, unknown facts take the worst case false; for No, the worst
case true. The remaining owned-action completion must guarantee that entire selected
answer. The formula is positive AND/OR, so the conservative case guarantees the
aggregate for all unresolved fact values. This does not infer correlations
between unknown predicates. If neither definite answer has a known completion,
unknown/save/change-question remains available. No negates the whole question,
not each fact or action leaf.
True Hajr OR move can settle Yes immediately. False Hajr AND move can settle No
immediately. True Hajr AND move retains its future movement requirement;
unknown forecast OR move Yes must actually move, while unknown forecast AND
move No must avoid the qualifying group. Ordinary per-destination maximum
progress, not summed smaller moves, remains.
## Native integration and controls
`game/mixed-action-question.ts` validates the full public tree before any
short-circuit, with one16-leaf/depth4 budget including nested fact groups. The
server's existing fact decoder and exact movement-leaf decoder remain authority.
Public constants, targets, turns and other metadata cannot be forged inside
clauses. The reusable compiler evaluates all fact leaves before folding known
constants/identity children/singletons into an action-only residual.
The engine converts that residual into the existing movement-expression ledger;
there is one physical fulfillment ledger, not a second set of movement/payment
rules. Raw `mixedMovementQuestions` metadata links the original question to its
binding event. A constant aggregate needs no native binding. Existing owned
search, card preservation, preparations, funding, range responses and actual
owner finish retain their original behavior. Early readiness resets uniformly
for definite mixed answers; no public branch-specific readiness cue is added.
New mixed discard signatures include its metadata/binding while older record
signatures keep their original shape.
Only own raw question, aggregate answer/status and recorded native movement
maxima are projected. Compiled residuals are filtered out of the public pure
movement ledger, and raw internal metadata/frozen fact answers are not exposed.
The native guide is still entitled only to its owner and exact live event.
No separate public movement-fulfillment message reveals whether a private fact
created a residual. Required whole-answer release and public physical actions
retain their original aggregate information.
The full controlled editor reuses current-fact and nested-fact fields, supports
add/wrap/nest/switch/remove/collapse and preserves repairable invalid drafts.
Preview/Ask retain the whole raw tree. The aggregate panel and pure/scalar
movement panels show one shared exact guide. Four minimal policies answer and
follow that native guide; strategy/calibration remain deferred.
## Evidence and remaining gates
Generic cases: `tests/mixed-action-question.test.ts`.
Controlled cases: `tests/truth-mixed-movement-controls.test.tsx`.
Original sources/cases: `tests/fixture-truth-mixed-movement.ts` and
`tests/truth-mixed-movement-runtime.test.ts`. Twelve generic,eight controlled
and16 native cases are included in the frozen **19-file,172/172** union.
Types/lint, production build and nine native paths pass on the same unchanged
source. Actual GameTable SSR renders29 times;16 actual guide callbacks submit
native packets. One actual mixed editor meaning callback retains the complete
raw tree through native Ask. Four minimal profiles actually answer and complete
the native Hajr path on both Basic/Advanced original sources.
| Original base33 source | Prefix actions | Further actions | Actual result |
| --- | ---: | ---: | --- |
| Basic frozen Hajr AND | 20 | 8 | Held-Hajr fact survives real disposal and two future groups |
| Advanced frozen Hajr AND | 23 | 8 | Same snapshot with native post-movement Hajr timing |
| Basic edited true OR | 20 | 5 | Actual AND→OR edit/Ask; immediate Yes, no native binding |
| Basic false AND | 20 | 6 | Immediate No; a real named move remains legal |
| Basic false OR | 20 | 6 | Yes requires the actual future group |
| Basic true AND No | 20 | 6 | Qualifying group rejects; nonmatching group/real finish allowed |
| Basic unknown OR Yes | 20 | 6 | Native unknown forecast cannot substitute for real movement |
| Basic unknown AND No | 20 | 5 | Qualifying movement forbidden until actual owner finish |
| Basic early Charity | 13 | 14 | Real later readiness/auction/shipment/movement path |
Initial type feedback repairs a nested generic test union and explicit status
fields on a controlled view; no production rule repair is needed for that
feedback. The passing v2 source snapshot is
`557dd5178963e1a868be972d1f44da91d4522d874fa38147970c8a106e9aad3a`
(3153 files). Final evidence prose is a separate three-document overlay.
Frozen proof/report/manifest:
`/home/quintine/.local/share/dune/checkpoints/20261026-truth-mixed-movement-proof-v2/`;
journeys/HTML: adjacent `20261026-truth-mixed-movement-runtime/`.
SSR/editor/guide callbacks are local engine/control evidence, not DOM,
hydration, browser/mobile or deployed acceptance.
Sources inherit the original base33 Basic20/Advanced23 Hajr/Truthtrance setup
and paid Polar shipment, plus Charity13. Native non-Fremen forecast supplies an
actual unknown without installed knowledge. No extra clock, purse, hand, army,
fact answer, promise or progress is installed. Controlled projections retain
those labels rather than claiming original acquisition histories.
Other action families, correlated-unknown reasoning, optional modules, broader
faction/card/funding compositions, final rules/recovery/privacy/custody review
and browser/mobile/deployed acceptance remain required. No complete mode is
certified. No saved-game/database/server/reset/restart/deployment operation is
performed by this batch.