fix: version monerogue direct-only disclosure

This commit is contained in:
jwinterm
2026-07-23 15:12:46 -04:00
parent 14c8014dc4
commit 05197925d9
6 changed files with 22 additions and 4 deletions
+2
View File
@@ -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
+2
View File
@@ -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
+2 -2
View File
@@ -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.
+8
View File
@@ -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),
+6
View File
@@ -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'),
+2 -2
View File
@@ -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',