Add one-use consent for a named player to start seat AI

Let a human owner authorize another human in the started room to start a fixed difficulty once within 24 hours. The owner retains the seat, cookie, private hand, recovery setup and takeback control. Consent is explicit even while online; neither host status nor inactivity authorizes a takeover. Activation enters the existing paced private-view AI path without strategic changes.

Add additive migration 0006, both exact session fences, owner/delegate-only metadata in the authenticated room snapshot, atomic CAS activation and consumption, expiry and terminal retry receipts. Replacement hides older consent; own AI changes invalidate unused consent. Recovery or handover of either bound seat invalidates the grant. Future-version guards prevent stale computed state from overwriting a racing action. Exact browser retry records retain the original operation/version across refresh and cannot rearm old consent. Shared HTTP continuation preserves coalescing across ordinary and control routes.

Independent review found no material remaining issue. Revoke messaging accurately handles activation winning the race. Browser QA exercised grant/revoke, preserved consent after refresh, reciprocal fixed-profile activation, consumed receipts, keyboard takeback and private ownership. The panel now remains expanded after success and action buttons are at least 44px. Responsive screenshot acceptance remains open because the browser viewport override targeted a failed secondary-origin tab; desktop controls and no-overflow width were verified. The QA room is stopped at a genuine human setup decision with both seats taken back.

Types, lint, all 4906 offline tests, production build and all 45 HTTP tests pass on the stable source fingerprint. Seven new offline cases cover client consent/retry validation and real SQLite privacy, restart, one-use races, future versions, takeback, expiry and both-seat recovery/handover; two new HTTP cases cover authentication, injection, fixed-profile continuation and takeback. The first broad run exposed 68 legacy VM fixtures missing the new production dependency; their mappings were updated and the real shared continuation remains exercised. The historical 0005 migration test verifies backfill before applying 0006 for current code.

All 1174 original rooms, 2456 seats and every prior recovery/entry/handover/migration row remain unchanged. SQLite integrity and foreign keys pass; migration and QA added 88 rooms and 188 seats. No reset, server restart, usage check or automation was performed.

The current Sites integration has no supported durable Cron/DO provisioning path. Document this platform blocker rather than adding an inert scheduled export; unattended resumption and broader network-failure acceptance remain unfinished. Full rules, component, AI strength and publication gates remain closed.

Verified source tree: 2d86fc611e9ef4f5a10db10f96687a31db1ec238908ecf1e9333c50fac9ccaa8
This commit is contained in:
Quintine committed 2026-09-20 16:30:37 +10:00
1 parent e13ad454e2
commit b21b2bc378
93 files changed
+2996 -72

No files matched your search

+17 -14
View File
@@ -6,26 +6,29 @@ gated.** Prototypes do not open completion or publication gates.
## Current checkpoint and work
Latest delivered gameplay checkpoint: `54c8030`, [Sandmaster worm rides](SANDMASTER_WORM.md).
Types, lint, **4,894 offline tests**, production build and **43 HTTP tests** passed.
Optional native Fremen destination collection connects multi-sector forces,
controls, minimal legal AI and saved Bene Gesserit arrival continuation. All 1,140
baseline rooms and 2,385 seats stayed unchanged; isolated checks added 34 rooms
and 71 seats. No restart was needed. The `8f7a62c` policy checkpoint removed the
Latest delivered checkpoint: `e13ad45`, [movement and Traitor practice](INTERACTIVE_INTRODUCTION.md).
Types, lint, **4,899 offline tests** and production build passed. Seven lessons
and five exercises connect shared rules and migrated browser-local saves. All
1,174 baseline rooms and 2,456 seats stayed unchanged; no restart was needed.
The preceding `54c8030` connects [Sandmaster worm rides](SANDMASTER_WORM.md).
The `8f7a62c` policy checkpoint removed the
usage cutoff and deferred AI refinement until feature completion, with three
adjacent 75% win-rate targets. Earlier evidence remains in the
[implementation history](IMPLEMENTATION_STATUS.md).
Current work: the [interactive introduction](INTERACTIVE_INTRODUCTION.md) adds
movement and Traitor practice through shared rules, legal controls and migrated
browser-local saves. Broader curriculum remains unfinished. Final verification
and delivery belong to the source-bound private report and Git message.
Current work: [one-use AI permission](SEAT_AI_PERMISSION.md) connects optional
named-player activation at the owner's chosen difficulty, retained ownership,
both session fences and saved exact retries. Final independent review,
verification and delivery belong to the source-bound private report and Git
message. Broader disconnected-seat acceptance remains unfinished.
A bounded remaining-effect audit found that the reviewed faction/Nexus candidates
still cross recorded pending rulings. Continue independent features rather than
inventing answers. Durable unattended bot resumption is the next clear backend
capability: it needs a platform scheduler and saved due-work metadata; current
request/reconnect continuation does not establish it.
inventing answers. The [platform audit](AUTOPILOT.md#platform-audit-20-september-2026)
found no supported Sites scheduler or Durable Object provisioning contract.
Durable unattended bot resumption remains blocked on that capability; current
request/reconnect continuation does not establish it. Continue independent
player-facing features and integration while preserving pending rules questions.
The connected [Harass & Withdraw prototype](HARASS_WITHDRAW_RUNTIME.md) supports either
battle-card slot, private category inspections, exact undialed normal/elite
@@ -87,7 +90,7 @@ These links define bounded working behavior, not complete module certification.
| Nexus/Homeworlds | [Decision index](RULE_DECISIONS.md) links each integrated faction family, native/borrowed effects, physical custody, private choices, payments and transport. [CHOAM Collection trade](NEXUS_CHOAM_SECRET_ALLY.md) and [Emperor extra revival](NEXUS_EMPEROR_SECRET_ALLY_RUNTIME.md) are connected; CHOAM inspection and Emperor purchase remain pending. A source audit or helper alone is not a completed effect. |
| Truthtrance | [Spice facts](TRUTHTRANCE_SPICE_FACTS.md), [card counts](TRUTHTRANCE_CARD_COUNT.md), [hand inventory](TRUTHTRANCE_HAND_INVENTORY.md), [recorded knowledge](TRUTHTRANCE_KNOWLEDGE.md), and [Basic/no-Guild Advanced reserve-shipment promises](TRUTHTRANCE_SHIPMENT_PROMISES.md) use authoritative private state. Earlier readiness audits do not supersede these follow-ups. |
| Other cards | [Sapho runtime](JUICE_OF_SAPHO_RUNTIME.md) includes first among remaining unstarted movement turns after Advanced Guild has finished. [Recruits](RECRUITS_RUNTIME.md) connects clean Revival play; [Harass & Withdraw](HARASS_WITHDRAW_RUNTIME.md) connects the bounded battle return in the same independent three-card preview. Richese card contracts and the checklist identify other connected effects and explicit gaps. |
| Multiplayer | Saved rooms/seats, [recovery](../README.md#saved-seats-and-reconnecting), uncertain-request retry, [own-seat AI](AUTOPILOT.md), and [voluntary seat handover](SEAT_HANDOVER.md) have connected controls and recovery evidence. |
| Multiplayer | Saved rooms/seats, [recovery](../README.md#saved-seats-and-reconnecting), uncertain-request retry, [own-seat AI](AUTOPILOT.md), [named-player AI permission](SEAT_AI_PERMISSION.md) and [voluntary seat handover](SEAT_HANDOVER.md) have connected controls and recovery evidence. |
## Remaining readiness