diff --git a/CHANGELOG.md b/CHANGELOG.md
index 303cef82..c7758c92 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,15 @@ full engineering record.
## [Unreleased]
+- Drafted the next Alpha Terms, Hegemony Social Contract, and Privacy Notice
+ for a future persistent Realm Chat, including explicit conduct, reporting,
+ moderation, history, and privacy boundaries. Chat remains disabled pending
+ owner and qualified legal review, server authority, release gates, and a
+ separate activation record; this draft collects no chat data.
+- Blocked independent production deployment of the review-only agreement on
+ both Pages and SpacetimeDB, pinned the proposed Privacy Notice text digest,
+ and removed duplicated agreement-version literals from migration and local
+ full-stack QA so rollout drift fails closed.
- Prepared an optional **Enable Admission Alerts** step after a confirmed access
request. It remains fail-closed behind a default-off release gate until the
owner-controlled signed notification canary is complete, and never affects
diff --git a/docs/design/realm-chat-v1-contract.md b/docs/design/realm-chat-v1-contract.md
new file mode 100644
index 00000000..53d8df52
--- /dev/null
+++ b/docs/design/realm-chat-v1-contract.md
@@ -0,0 +1,163 @@
+# Realm Chat V1 contract
+
+Status: **proposal only; disabled**
+
+Policy version: `2026-08-03-realm-chat-policy-v1`
+
+Realm channel: `realm:genesis-001`
+
+This document fixes the product, authority, privacy, and moderation boundaries
+for the first Warpkeep chat implementation. It does not activate chat, publish a
+database, seed a channel, or authorize a client entry point.
+
+## Release gates
+
+Realm Chat must remain unavailable until all of these are complete:
+
+1. The project owner and a qualified legal reviewer approve the proposed Terms,
+ Social Contract, Privacy Notice, persistence language, moderation process,
+ and an explicit age/minor-participation policy.
+2. A later additive SpacetimeDB PR implements and verifies the private archive,
+ caller-bounded views, reducers, indexes, and report records.
+3. A later client PR implements the portrait and desktop experiences without
+ creating browser-side identity, sequence, or time authority.
+4. Operator moderation procedures, evidence handling, release checks, and a
+ tested kill switch exist.
+5. A separate activation record names the reviewed versions, exact deployment,
+ seeded channel, canary evidence, rollback owner, and timestamp.
+
+Merging this contract alone must not make a chat control visible or callable.
+The client-side `false` constant is documentary defense in depth, not an
+activation mechanism. Server channel state remains authoritative.
+
+The proposed V5 agreement is also marked `review-only-rollout-blocked`.
+Warpkeep's production Pages validator and canonical SpacetimeDB publisher must
+reject deployment/publication under that status. Read-only publisher dry runs
+remain available for compatibility evidence. A later reviewed rollout may change it to
+`production-approved` only when the exact legal approval and a coordinated
+browser/module compatibility proof are recorded. This prevents an automatic
+V5 Pages deployment from meeting a still-V4 production module and failing every
+player's entry-agreement handshake.
+
+## V1 product boundary
+
+- One admitted-Realm channel only: `realm:genesis-001`.
+- No direct messages, guild channels, trading chat, links with rich previews,
+ attachments, voice, or cross-Realm federation.
+- Mobile uses a full-screen portrait surface. Desktop uses a bounded dock.
+- Recent messages are live; older retained messages are paginated.
+- A player can locally mute another sender for the current browser session.
+ Local mute is not a server punishment and does not alter other players' view.
+- A report attaches to one exact message and preserves its relevant context for
+ private review. A report never triggers automatic punishment.
+
+Comparable games commonly separate world/guild audiences and provide reporting
+from the relevant player or message surface. See the official
+[Forge of Empires chat overview](https://support.innogames.com/kb/ForgeOfEmpires/en_DK/963),
+[Forge of Empires reporting flow](https://support.innogames.com/kb/ForgeOfEmpires/en_DK/964),
+[Travian messaging overview](https://support.travian.com/en/articles/11-interacting-with-other-players),
+and [Travian report guidance](https://support.travian.com/en/articles/121-i-think-a-player-is-violating-game-rules-what-can-i-do).
+Warpkeep V1 deliberately starts with fewer channel types.
+
+## Server authority and visibility
+
+The browser supplies only intended message text and an operation request. The
+server derives the admitted sender FID, public-profile reference, channel,
+sequence, authoritative time, and any visibility state. It validates the exact
+current entry agreement and active channel before accepting a message.
+
+The future permanent message archive must be private. Clients must not be able
+to subscribe to or enumerate the full archive, report records, moderator notes,
+or internal enforcement state. A bounded recent projection may expose up to 128
+permitted messages. A caller-specific paginated history view may expose at most
+50 permitted messages per request and must use indexed lookups. SpacetimeDB
+documents that private tables are unavailable to clients and that views can
+filter private rows by caller; that is the required later authority pattern:
+[table access permissions](https://spacetimedb.com/docs/tables/access-permissions/)
+and [views](https://spacetimedb.com/docs/functions/views/).
+
+Messages form persistent Realm history and have no routine gameplay expiry.
+That is not a promise of immutable public display or universal physical
+retention. Authorized moderation, safety, privacy, legal, service-integrity, or
+Realm-reset work may restrict, tombstone, anonymise, or erase a record. Provider
+backup lifecycles may differ from active database state.
+
+## Candidate limits requiring owner review
+
+The following are implementation candidates, not approved live limits:
+
+- 500 Unicode scalar values;
+- 2,048 UTF-8 bytes;
+- 8 lines;
+- 2 seconds between accepted messages;
+- 10 accepted messages per rolling minute;
+- 60 accepted messages per rolling hour; and
+- rejection of the same normalized body from one sender within 60 seconds.
+
+The authority PR must define normalization, Unicode handling, counting windows,
+retry responses, and adversarial tests before these numbers become enforceable.
+
+## Conduct and moderation
+
+Good-faith criticism of Warpkeep, its maintainer, rules, or features is allowed.
+The project may still restrict disruptive conduct contextually, including
+political or controversial discussion that overwhelms the game's shared space.
+The maintainer exercises broad good-faith judgment but does not claim to make a
+definitive legal determination.
+
+High-risk categories include credible threats or incitement; doxxing, stalking,
+or targeted harassment; sexual exploitation or child sexual abuse material;
+terrorism or instructions for serious harm; fraud, phishing, malware, account
+compromise, or illegal trade; non-consensual intimate content; unlawful hate or
+discriminatory abuse; and attempts to obtain or publish non-public personal or
+authentication data.
+
+A warning is not required or guaranteed. Internal reasons remain private. Where
+safe and applicable, the affected player should receive a brief understandable
+notice that does not expose reporters, personal data, security methods, or an
+active investigation. The Alpha does not promise a formal appeal system; it
+offers a private reconsideration/legal-contact route without limiting rights
+available under applicable law. Knowingly false, retaliatory, or abusive reports
+may themselves affect access. Security research reported through the repository
+[Security Policy](https://github.com/ael-dev3/Warpkeep/security/policy) remains
+protected and distinct from ordinary chat moderation.
+
+## Privacy boundary
+
+If activated, the feature processes message body, verified FID, public profile
+link, server time and sequence, recipients or visibility scope, report data, and
+private moderator decisions. It uses these records to deliver shared Realm
+communication, prevent abuse, investigate reports, protect the service, enforce
+the agreement, and meet applicable legal obligations. It does not sell them or
+use them for advertising.
+
+The Privacy Notice must identify providers and processing locations, retention
+and exceptions, lawful bases where applicable, and available access,
+rectification, erasure, restriction, objection, portability, and complaint
+rights. The EDPB's small-business guidance emphasizes an identified legal basis,
+data minimisation, transparent purposes, security, storage limits, and procedures
+for individual rights: [data protection basics](https://www.edpb.europa.eu/sme/learn-the-basics/data-protection-basics_en),
+[lawful processing](https://www.edpb.europa.eu/sme/be-compliant/process-personal-data-lawfully_en),
+and [individual rights](https://www.edpb.europa.eu/sme/be-compliant/respect-individuals-rights_ga).
+
+The exact normalized visible Privacy Notice text is integrity-pinned alongside
+the Terms and Social Contract even though the notice is not treated as blanket
+consent.
+
+The age/minor-participation policy is intentionally unresolved. This contract
+sets no age threshold. Activation is blocked until the owner and qualified legal
+reviewer approve the applicable policy and any required parent/guardian, notice,
+consent, or access measures.
+
+## Planned PR sequence
+
+1. Legal/product contract (this PR; disabled).
+2. Additive SpacetimeDB authority and generated bindings.
+3. Client portrait/mobile and desktop-dock experience.
+4. Desktop/accessibility/abuse QA.
+5. Operator moderation and release integration.
+6. Separate, evidence-backed activation record.
+
+Each PR must remain independently reviewable. No implementation PR may weaken
+the legal gate, expose the permanent archive, or collapse private moderation
+records into public game state.
diff --git a/docs/legal/2026-08-03-realm-chat-entry-agreement-v5.md b/docs/legal/2026-08-03-realm-chat-entry-agreement-v5.md
new file mode 100644
index 00000000..23637f6c
--- /dev/null
+++ b/docs/legal/2026-08-03-realm-chat-entry-agreement-v5.md
@@ -0,0 +1,63 @@
+# Proposed Realm Chat entry-agreement V5
+
+Status: **owner and qualified legal review required; do not activate chat**
+
+Entry-agreement bundle `2026-08-03-hegemony-entry-agreement-v5` proposes these
+exact public documents:
+
+- Alpha Terms revision `2026-08-03-v5`;
+- Hegemony Social Contract version
+ `2026-08-03-HEGEMONY-SOCIAL-CONTRACT-V4`; and
+- Privacy Notice revision `2026-08-03-v6` (notice only, not blanket consent).
+
+Normalized visible `Privacy Notice
why it is used, where it goes, and the limits of retention and deletion.
- Alpha Privacy Notice revision 2026-08-02-v5 · Last updated 2 August 2026 + Alpha Privacy Notice revision 2026-08-03-v6 · Last updated 3 August 2026
This is a factual, project-authored Alpha notice, not a legal-compliance certification @@ -97,8 +97,8 @@
2026-07-19-HEGEMONY-SOCIAL-CONTRACT-V3 in entry-agreement bundle
- 2026-07-31-hegemony-entry-agreement-v4; the published browser policy
+ 2026-08-03-HEGEMONY-SOCIAL-CONTRACT-V4 in entry-agreement bundle
+ 2026-08-03-hegemony-entry-agreement-v5; the published browser policy
cryptographically binds the exact visible Terms and Social Contract texts to their
reviewed hashes. This evidence is used to enforce the current entry agreement and
preserve an audit trail. It is not a public projection and does not contain the
@@ -184,6 +184,20 @@ + If Realm Chat is activated, admitted recipients receive the permitted live and + historical message views described above, and authorized moderators may receive the + exact reported message, report context, and related private records. Reporters do not + receive another player's private moderation outcome. Warpkeep does not sell chat or + report data and does not use it for advertising. +
These are global online services, so information may be processed in multiple countries, including outside the country where you live or access the Alpha. The @@ -338,6 +363,12 @@
+ Realm Chat's age and minor-participation policy is unresolved. The project must not + activate it until the owner and qualified legal reviewer approve an age policy and + any required parental, guardian, notice, consent, or access measures. No age threshold + is asserted by this draft. +
The gates do not open for the many. They open for the sworn.
- Social Contract version 2026-07-19-HEGEMONY-SOCIAL-CONTRACT-V3 · Entry-agreement - bundle 2026-07-31-hegemony-entry-agreement-v4 · Bundle reference updated 31 July 2026 + Social Contract version 2026-08-03-HEGEMONY-SOCIAL-CONTRACT-V4 · Entry-agreement + bundle 2026-08-03-hegemony-entry-agreement-v5 · Last updated 3 August 2026
The Hegemony is game fiction. Nothing in this Charter creates real-world political, @@ -55,19 +55,26 @@
Rivalry and hard strategy belong to the fiction. The person behind every keep does - not. Threats, doxxing, stalking, fraud, malware, account compromise, targeted - harassment, abusive automation, and attempts to obtain another person's non-public - data are forbidden. Follow applicable law and respect boundaries outside the game. + not. Do not post or facilitate credible threats or incitement, doxxing, stalking, + targeted harassment, sexual exploitation or child sexual abuse material, terrorism + or instructions for serious harm, fraud, phishing, malware, account compromise, + illegal trade, non-consensual intimate content, unlawful hate or discriminatory + abuse, or attempts to obtain or publish non-public personal or authentication data. + Follow applicable law and respect boundaries outside the game.
- Warpkeep may warn, limit, suspend, or revoke official Alpha access when observable - conduct violates this Charter, the Alpha Terms, applicable law, or the safety and - integrity of the service. Context and severity matter. This standard does not police - lawful opinions, identities, beliefs, or life outside Warpkeep. + Warpkeep may warn, remove or restrict content, limit chat, suspend, or revoke official + Alpha access when conduct violates this Charter, the Alpha Terms, applicable law, or + the safety and integrity of the service. A warning is not required or guaranteed. + The maintainer may exercise broad, good-faith, contextual judgment; this is not a + claim that the maintainer makes definitive legal determinations. Context, severity, + repetition, and credible risk matter. Politics and other controversial subjects may + be restricted when they become disruptive even if the underlying viewpoint is not + clearly unlawful. This standard does not target lawful identities or beliefs.
The current Alpha has no complete core strategy loop, alliance system, combat system, - or in-game chat. Lore and design drafts are direction, not hidden mechanics, paid - power, rewards, punishments, or future entitlements. A gameplay system becomes real - only when its rules and server authority are implemented and published. + or active in-game chat. Realm Chat is a disabled proposal pending owner and legal + review. If later activated, one Realm channel will let admitted Keepers speak in the + shared world. Messages may persist as Realm history; local muting affects only the + muting player's current session. Reporting must preserve the exact reported message + and context for private review. Reports do not automatically punish anyone, and + knowingly false, retaliatory, or abusive reports may themselves affect access. + Lore and design drafts are direction, not hidden mechanics, paid power, rewards, + punishments, or future entitlements. A gameplay system becomes real only when its + rules, privacy notice, server authority, and activation state are implemented and + published. +
+ + ++ Moderation decisions and internal reasons are private. Where safe and applicable, + an affected player should receive a brief, understandable notice, but Warpkeep does + not promise disclosure that would expose reporters, security methods, personal data, + or an active safety investigation. The Alpha does not promise a formal appeal system. + A player may request reconsideration through the project's private contact route and + keeps any rights available under applicable law.
This exact Charter is incorporated into entry-agreement bundle - 2026-07-31-hegemony-entry-agreement-v4. Material changes require a + 2026-08-03-hegemony-entry-agreement-v5. Material changes require a later visible version and a new unchecked acceptance; earlier evidence never authorizes a later bundle. Public questions may be raised through the Warpkeep repository - without posting private account, authentication, wallet, or moderation evidence. + without posting private account, authentication, wallet, report, or moderation + evidence. For a private reconsideration or legal-contact request, open a + content-free issue asking for a private contact channel; do not place evidence in + the issue. Security concerns belong in the repository's Security Policy.
diff --git a/public/terms/index.html b/public/terms/index.html index 4cd992e5..59e711ff 100644 --- a/public/terms/index.html +++ b/public/terms/index.html @@ -29,8 +29,8 @@- Alpha Terms revision 2026-07-31-v4 · Entry-agreement bundle - 2026-07-31-hegemony-entry-agreement-v4 · Last updated 31 July 2026 + Alpha Terms revision 2026-08-03-v5 · Entry-agreement bundle + 2026-08-03-hegemony-entry-agreement-v5 · Last updated 3 August 2026
This project-authored Alpha notice is not legal, tax, investment, or financial advice. @@ -78,8 +78,8 @@
@@ -105,6 +105,19 @@
+ If Realm Chat is later activated, your messages may be visible to other admitted + players and retained as Realm history. Chat access is conditional on the Social + Contract and may be restricted or revoked to protect people, the service, or the + shared Realm. A warning is not required or guaranteed before action. Good-faith + criticism of Warpkeep, its maintainer, or its rules is permitted. +
++ The Alpha's age and minor-participation policy is not final. Realm Chat must remain + unavailable until the project owner and qualified legal reviewer approve that policy + and the related conduct, privacy, persistence, and moderation terms. Do not enter or + use a social feature if applicable law or a parent or guardian does not permit it. +
The Privacy Notice describes authentication,
public game projections, private authority data, providers, retention limits, and
- privacy choices. Some public Realm state intentionally links an admitted FID and
+ privacy choices, including the additional records that a future Realm Chat would
+ create. Some public Realm state intentionally links an admitted FID and
trusted public Farcaster presentation to a castle. Private balances, daily-grant
receipts, and ownership authority remain private; an aggregate Mark balance may be
included in the player's enabled public community projection.
diff --git a/scripts/entry-agreement-policy.d.mts b/scripts/entry-agreement-policy.d.mts
index d47c5fbf..f2d904ea 100644
--- a/scripts/entry-agreement-policy.d.mts
+++ b/scripts/entry-agreement-policy.d.mts
@@ -1,16 +1,20 @@
export const WARPKEEP_ENTRY_AGREEMENT_VERSION:
- '2026-07-31-hegemony-entry-agreement-v4';
+ '2026-08-03-hegemony-entry-agreement-v5';
+export const WARPKEEP_ENTRY_AGREEMENT_RELEASE_STATUS:
+ 'review-only-rollout-blocked';
export const WARPKEEP_HISTORICAL_ENTRY_AGREEMENT_VERSIONS: readonly [
+ '2026-07-31-hegemony-entry-agreement-v4',
'2026-07-19-hegemony-entry-agreement-v3',
'2026-07-19-hegemony-entry-agreement-v2',
'2026-07-18-hegemony-entry-agreement-v1',
'2026-07-14',
];
export const WARPKEEP_ENTRY_AGREEMENT_EVIDENCE_VERSIONS: readonly [
+ '2026-08-03-hegemony-entry-agreement-v5',
'2026-07-31-hegemony-entry-agreement-v4',
'2026-07-19-hegemony-entry-agreement-v3',
'2026-07-19-hegemony-entry-agreement-v2',
'2026-07-18-hegemony-entry-agreement-v1',
'2026-07-14',
];
-export const WARPKEEP_ENTRY_AGREEMENT_ACCEPTANCE_RECORDS_PER_FID_MAXIMUM: 5;
+export const WARPKEEP_ENTRY_AGREEMENT_ACCEPTANCE_RECORDS_PER_FID_MAXIMUM: 6;
diff --git a/scripts/entry-agreement-policy.mjs b/scripts/entry-agreement-policy.mjs
index fb98351b..680b450b 100644
--- a/scripts/entry-agreement-policy.mjs
+++ b/scripts/entry-agreement-policy.mjs
@@ -4,9 +4,13 @@
* policy because Node cannot import the SpacetimeDB TypeScript module directly.
*/
export const WARPKEEP_ENTRY_AGREEMENT_VERSION =
- '2026-07-31-hegemony-entry-agreement-v4';
+ '2026-08-03-hegemony-entry-agreement-v5';
+
+export const WARPKEEP_ENTRY_AGREEMENT_RELEASE_STATUS =
+ 'review-only-rollout-blocked';
export const WARPKEEP_HISTORICAL_ENTRY_AGREEMENT_VERSIONS = Object.freeze([
+ '2026-07-31-hegemony-entry-agreement-v4',
'2026-07-19-hegemony-entry-agreement-v3',
'2026-07-19-hegemony-entry-agreement-v2',
'2026-07-18-hegemony-entry-agreement-v1',
diff --git a/scripts/publish-spacetime-dev.d.mts b/scripts/publish-spacetime-dev.d.mts
index 11cdac56..5b5438f4 100644
--- a/scripts/publish-spacetime-dev.d.mts
+++ b/scripts/publish-spacetime-dev.d.mts
@@ -53,6 +53,10 @@ export function readFoundedPublishExpectations(
source?: Record