diff --git a/docs/DEPLOY_INSTANCES.md b/docs/DEPLOY_INSTANCES.md index 7e4ca6d..2ae5d65 100644 --- a/docs/DEPLOY_INSTANCES.md +++ b/docs/DEPLOY_INSTANCES.md @@ -139,6 +139,8 @@ OPERATED_PRODUCT_PROFILE=such-monerogue-stagenet OPERATOR_NAME=Such Software OPERATOR_CONTACT_URL=mailto:apps@such.software OPERATOR_CONTACT_LABEL=apps@such.software +LEGAL_POLICY_VERSION=2026-07-23-v2 +TERMS_EFFECTIVE_DATE=2026-07-23 CRYPTO_TYPE=XMR MONERO_NETWORK=stagenet HOSTED_BY=https://monerogue.app diff --git a/docs/PRODUCTION_DISCLOSURES.md b/docs/PRODUCTION_DISCLOSURES.md index f33103f..51fc37e 100644 --- a/docs/PRODUCTION_DISCLOSURES.md +++ b/docs/PRODUCTION_DISCLOSURES.md @@ -17,6 +17,8 @@ The corresponding `.env.mainnet.example` and `.env.stagenet.example` files opt i startup contract with `OPERATED_PRODUCT_PROFILE`. Preflight and normal startup reject any drift in host, operator identity, chain/network, paid modes, multipliers, or payout gates. Independent MIT self-hosts leave this setting unset and configure a truthful operator identity of their own. +The operated Wownero disclosure is version `2026-07-22-v1`; Monerogue's direct-only scope is a +material change and therefore uses version `2026-07-23-v2`, effective 2026-07-23. ## Open-source and operator disclaimer diff --git a/src/.env.stagenet.example b/src/.env.stagenet.example index 65fabfd..3baa5a4 100644 --- a/src/.env.stagenet.example +++ b/src/.env.stagenet.example @@ -29,8 +29,8 @@ ADMIN_API_KEY=CHANGE_ME_WITH_OPENSSL_RAND_HEX_32 OPERATOR_NAME=Such Software OPERATOR_CONTACT_URL=mailto:apps@such.software OPERATOR_CONTACT_LABEL=apps@such.software -LEGAL_POLICY_VERSION=2026-07-22-v1 -TERMS_EFFECTIVE_DATE=2026-07-22 +LEGAL_POLICY_VERSION=2026-07-23-v2 +TERMS_EFFECTIVE_DATE=2026-07-23 MINIMUM_AGE=18 PAID_ACKNOWLEDGEMENT_REQUIRED=true # Optional plain-language notice supplied after jurisdiction-specific legal review. diff --git a/src/config/operatedProductProfiles.js b/src/config/operatedProductProfiles.js index 24a94ab..91ab0cd 100644 --- a/src/config/operatedProductProfiles.js +++ b/src/config/operatedProductProfiles.js @@ -33,6 +33,8 @@ const PROFILES = Object.freeze({ operatorName: 'Such Software', operatorContactUrl: SOURCE_SOFTWARE.contactUrl, operatorContactLabel: SOURCE_SOFTWARE.contactLabel, + legalPolicyVersion: '2026-07-22-v1', + termsEffectiveDate: '2026-07-22', scopeNotice: 'Such Software operates play.wowne.ro only as Wownero mainnet free play and pay-for-credits leaderboard/prestige play. Credits are non-redeemable service entitlements. The service offers no prizes, winnings, cash-out, or payouts and is not offered or marketed as gambling; legal classification depends on applicable law.', commerceSummary: 'This purchase grants non-redeemable service credits for leaderboard/prestige play only. play.wowne.ro offers no prize, payout, or cash-out and is not marketed as gambling.', noRealValueNotice: null @@ -44,6 +46,8 @@ const PROFILES = Object.freeze({ operatorName: 'Such Software', operatorContactUrl: SOURCE_SOFTWARE.contactUrl, operatorContactLabel: SOURCE_SOFTWARE.contactLabel, + legalPolicyVersion: '2026-07-23-v2', + termsEffectiveDate: '2026-07-23', scopeNotice: 'Such Software operates monerogue.app only with direct-entry Monero stagenet test coins. Its single-player 2×/3× outcomes are test gambling mechanics; purchased-credit entry is disabled, and no real-money or mainnet gambling is offered.', commerceSummary: 'NO REAL VALUE — monerogue.app uses direct-entry Monero stagenet test coins only. Single-player qualifying outcomes pay 2× or 3× in test coins. Purchased-credit entry is off. Never send mainnet XMR.', noRealValueNotice: 'NO REAL VALUE — Monero stagenet coins are test data, not money, deposits, redeemable prizes, or a promise of value. Never send mainnet XMR to this service.' @@ -124,6 +128,10 @@ function validateOperatedProductProfile(env = process.env, config = {}) { `OPERATOR_CONTACT_URL=${profile.operatorContactUrl}`); requireContract(String(env.OPERATOR_CONTACT_LABEL || '').trim() === profile.operatorContactLabel, `OPERATOR_CONTACT_LABEL=${profile.operatorContactLabel}`); + requireContract(String(env.LEGAL_POLICY_VERSION || '').trim() === profile.legalPolicyVersion, + `LEGAL_POLICY_VERSION=${profile.legalPolicyVersion}`); + requireContract(String(env.TERMS_EFFECTIVE_DATE || '').trim() === profile.termsEffectiveDate, + `TERMS_EFFECTIVE_DATE=${profile.termsEffectiveDate}`); requireContract(isExplicitTrue(env.PAYMENTS_ENABLED) && config?.paymentsEnabled === true, 'PAYMENTS_ENABLED=true'); requireContract(isExplicitTrue(env.PAID_ACKNOWLEDGEMENT_REQUIRED), diff --git a/test/environmentValidator.test.js b/test/environmentValidator.test.js index f258a23..8371eea 100644 --- a/test/environmentValidator.test.js +++ b/test/environmentValidator.test.js @@ -187,6 +187,8 @@ describe('EnvironmentValidator production launch gate', () => { OPERATOR_NAME: 'Such Software', OPERATOR_CONTACT_URL: 'mailto:apps@such.software', OPERATOR_CONTACT_LABEL: 'apps@such.software', + LEGAL_POLICY_VERSION: '2026-07-22-v1', + TERMS_EFFECTIVE_DATE: '2026-07-22', CRYPTO_TYPE: 'WOW', MONERO_NETWORK: 'mainnet', FREE_PLAY_ENABLED: 'true', @@ -232,6 +234,8 @@ describe('EnvironmentValidator production launch gate', () => { OPERATOR_NAME: 'Such Software', OPERATOR_CONTACT_URL: 'mailto:apps@such.software', OPERATOR_CONTACT_LABEL: 'apps@such.software', + LEGAL_POLICY_VERSION: '2026-07-23-v2', + TERMS_EFFECTIVE_DATE: '2026-07-23', FREE_PLAY_ENABLED: 'true', PAYMENT_MODES: 'direct', DIRECT_PAYMENT_ENABLED: 'true', @@ -369,6 +373,8 @@ describe('EnvironmentValidator production launch gate', () => { expect.stringContaining('requires HOSTED_BY=https://monerogue.app'), expect.stringContaining('requires OPERATOR_NAME=Such Software'), expect.stringContaining('requires OPERATOR_CONTACT_URL=mailto:apps@such.software'), + expect.stringContaining('requires LEGAL_POLICY_VERSION=2026-07-23-v2'), + expect.stringContaining('requires TERMS_EFFECTIVE_DATE=2026-07-23'), expect.stringContaining('requires MONERO_NETWORK=stagenet'), expect.stringContaining('requires PAYMENT_MODES=direct'), expect.stringContaining('requires CREDITS_ENABLED=false'), diff --git a/test/operatedProductTemplates.test.js b/test/operatedProductTemplates.test.js index e1046c1..29e9de8 100644 --- a/test/operatedProductTemplates.test.js +++ b/test/operatedProductTemplates.test.js @@ -71,8 +71,8 @@ describe('operated product environment templates', () => { OPERATOR_NAME: 'Such Software', OPERATOR_CONTACT_URL: 'mailto:apps@such.software', OPERATOR_CONTACT_LABEL: 'apps@such.software', - LEGAL_POLICY_VERSION: '2026-07-22-v1', - TERMS_EFFECTIVE_DATE: '2026-07-22', + LEGAL_POLICY_VERSION: '2026-07-23-v2', + TERMS_EFFECTIVE_DATE: '2026-07-23', MINIMUM_AGE: '18', PAID_ACKNOWLEDGEMENT_REQUIRED: 'true', CRYPTO_TYPE: 'XMR',