Pastebin

Untitled

text 5 views Created: October 30, 2026 at 13:29:51 EDT
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
VOIDERATION: CONSOLIDATED PRE-IMPLEMENTATION AUDIT
Date: 2026-10-30
Baseline: V22 + Stage 0; evidence reused from V15-V21 and local source.
Scope: Read-only. No dashboard, production API, deployment, code or revision changes.

EXECUTIVE STATUS

Overall: NOT READY for security implementation or production. READY only for
owner decisions and authorized read-only dashboard inventory. Most key risks
are confirmed in local code, but production deployment/settings are not verified.
The systems fit together only conditionally: the Photon custom-auth adapter,
PlayFab/Meta verification contracts, owner authorization and D1 persistence are
not implemented or proven. V22 is a target design, not a deployed control plane.

Status meanings: CONFIRMED = seen in local source/reports; CONDITIONAL = design
works if stated prerequisites pass; UNVERIFIED = dashboard, provider, or runtime
fact not observed; READY = safe to proceed with specified research/staging step,
not production release.

SYSTEM STATUS / GAPS

1. Identity, PlayFab roles, economy and CloudScript
- CONFIRMED: `Oculus_Login` uses Meta user ID as PlayFab Custom ID without Meta
  server proof; obtains a PlayFab Photon token separately. UserData `Moderator`
  is read by client and missing value is client-written FALSE. Client code has
  direct `AddUserVirtualCurrency` callers. V08 is explicitly a draft and includes
  weak caller/price assumptions; deployed revision is unknown. Client PlayFab
  `PurchaseItem` and custom V08 `OnPurchaseItem` are distinct paths.
- CONDITIONAL: Server-owned roles, rewards and catalog purchases are feasible
  only after every existing reward/purchase caller and product is migrated and
  idempotency/restore are tested. Disabling old client paths early breaks features.
- UNVERIFIED: PlayFab API policies, live CloudScript/Azure functions and event
  rules, moderator data source, catalog/store/currency setup, live purchase
  validation, and PlayFab account history. No dashboard read.
- Gate: inspect policies/revisions/data permissions read-only; stage role and
  economy migration before changing client permissions. Do not promote users
  from client-writable Moderator values.

2. Photon auth, RPCs, reconnects
- CONFIRMED: Unity uses PlayFabId as Photon `username` and PlayFab-issued Photon
  token as `token`. That token is NOT a PlayFab SessionTicket. The manager has a
  20-second path that clears AuthValues and connects unauthenticated. Several
  Tag/Infection RPCs lack sender checks; PUN owner/MasterClient does not make
  gameplay authoritative. A normal Worker request cannot reliably kick a live
  PUN Cloud actor.
- CONDITIONAL: Every-reconnect restriction check requires a supported Worker
  custom-auth adapter that validates the Photon token using the documented
  Photon/PlayFab contract, derives identity from validated response, and checks
  D1. PlayFab `/Server/AuthenticateSessionTicket` validates a SessionTicket, not
  the Photon token. Exact adapter wire format/provider support is not proven;
  do not implement a guessed proxy. If unsupported, defer D1 login restrictions.
- UNVERIFIED: Photon Custom Server URL/provider, anonymous admission/failure
  behavior, Realtime and Voice app association, reconnect/room-rejoin behavior,
  targeted disconnect capability. No dashboard read.
- Gate: staging app must demonstrate auth failure never downgrades to anonymous,
  normal reconnect/Voice/server-switch work, restricted new auth is rejected,
  and existing session limitation is documented. RPC checks can reduce spoofing
  but cannot prove an owner’s pose/hit/collision claim.

3. Meta User Verification, App Attestation and IAP
- CONFIRMED: No Meta proof validation or App Attestation implementation found.
  Existing client IAP handlers grant rewards from callbacks; `OWNED_IAP` is
  client-writable; reviewed paths have restore/transaction gaps. Actual product
  fulfillment/replay behavior needs staging confirmation.
- CONDITIONAL: User Verification needs app permission/eligibility, supported SDK,
  server-side nonce verification and account-link plan. App Attestation is an
  optional integrity signal, not identity or proof of cheating. IAP requires
  server entitlement verification, SKU mapping, idempotent durable fulfillment,
  restore, and consume-after-success for consumables.
- UNVERIFIED: Meta DUC permissions/eligibility, SDK/API compatibility, signing,
  product setup and current SKU/entitlement mapping. No dashboard read.
- Gate: preserve existing PlayFab identities, purchases and entitlements; stage
  migration before enabling mandatory checks or disabling current fulfillment.

4. Cloudflare Worker, D1, heartbeat/replay and capacity
- CONFIRMED: local Worker has existing `/redeem`, `/motd`, Photon webhook,
  Discord interactions, export/setup/health and `/updateplayers` no-op. `/redeem`
  validates SessionTicket only for linking. No D1 binding, incident/restriction
  routes, general session auth or heartbeat was found. Existing logging helper
  swallows Discord errors; query-string secrets exist in some routes.
- CONDITIONAL: D1 incident, restriction, audit, outbox and heartbeat fit if
  atomic/idempotent updates, route compatibility, session expiry, schema limits
  and retry behavior are implemented. Heartbeat is liveness, not anti-cheat.
  Missed beats/backend outage must not punish players. Existing routes/consumers
  must be preserved; migrate URL secrets separately.
- UNVERIFIED: Deployed Worker version/routes/bindings/secrets (names only), D1
  existence, plan and aggregate usage. Never request or record secret values.
- 100 CCU: five-minute heartbeat alone is ~28,800 Worker requests and ~28,800
  D1 updates/day, before auth, incidents, reads and other Worker traffic. Free
  plan fit is CONDITIONAL on shared account quotas/actual row accounting. €0
  recurring is plausible, not established. Need staging load at 20/50/100 CCU,
  inspect Worker requests and D1 rows_read/rows_written and set alert thresholds.

5. Discord alerts and incident review
- CONFIRMED: `ADMIN_CHANNEL_ID` points to `admin-logs` in local config/notes;
  this does not prove privacy. Existing Discord logging is not a durable incident
  outbox. Prior channel audit can be stale.
- CONDITIONAL: Worker -> D1 persist -> outbox -> Discord can provide durable,
  deduplicated alerts. A private channel/bot with least privilege and retries
  must be tested. Do not put tokens, receipts, raw IPs, proof nonce or unnecessary
  evidence in alerts.
- UNVERIFIED: current destination, effective overwrites, webhook/bot mechanism,
  credential owner and successful delivery. No Discord API/dashboard read.
- Gate: verify effective private permissions and test staging delivery, dedupe,
  bounded retries and Discord outage. Alert failure must not lose incident or
  change player access.

6. Incident status, restriction and rejoin policy
- CONFIRMED: no incident or restriction implementation exists. V21/V22 proposal
  separates incident review (`PendingReview`, `Approved`, `Rejected`) from player
  access state and ban. PUN connection auth is admission-time; already connected
  restricted players may remain until disconnect.
- CONDITIONAL: rejoin enforcement works only with verified identity on every
  Photon auth, D1 check, anonymous bypass closed, and fail-closed/retryable
  behavior. Cannot reliably kick existing sessions through ordinary Worker call.
- Recommended default: all detections persist incident + owner alert. Movement,
  latency, tracking loss, hand reach, client Tag overlap and single replay-like
  noise: log/alert only, rejoin allowed. Candidate temporary PendingReview hold
  only after repeated, authenticated, server-verifiable protocol abuse; never on
  backend errors or one timeout. Owner `Approve/Clear` releases; `Reject/Confirm`
  keeps `ConfirmedRestricted` until explicit owner release or separate ban.
  Permanent ban is a distinct audited decision, never automatic from weak signal.
- Gate: owner selects per-rule restriction setting, expiry, review SLA, appeal
  and retention. D1 outage means retryable denial for new auth only if the
  restriction gate is enabled; never anonymous fallback. Existing sessions are
  not mass-kicked.

7. Local owner dashboard
- CONFIRMED: no dashboard, D1 owner API or review workflow exists. Existing
  Worker Discord interactions have signature/owner checks, but this is not a
  dashboard authorization system.
- CONDITIONAL: local-only requires loopback bind (`127.0.0.1`), owner auth,
  CSRF-safe mutations, short sessions and Worker-side authorization on every
  action; browser must not connect directly to D1 or contain backend secrets.
- UNVERIFIED: owner identity/recovery, host machine, secure credential storage,
  privacy/retention and approval policy. No existing dashboard settings to inspect.
- Gate: choose owner auth and recovery method; audit successes and denials.

8. Movement, behavior and gameplay authority
- CONFIRMED: V20 and source show client-influenced movement and PUN gameplay;
  there are no validated numeric thresholds. Identified values (arm length 1.5,
  Tag touchRadius 0.15, boost speeds 6.5/15) are implementation parameters, not
  universal cheat thresholds.
- CONDITIONAL: calibrated telemetry can flag anomalies, with confidence reduced
  for lag, frame spikes, tracking loss, stale samples, boosts and transitions.
  PUN RPC sender/ownership/state/rate/sequence checks can reject invalid messages,
  not make malicious owner state authoritative. Authoritative simulation requires
  separate server architecture/cost.
- Gate: baseline clean play per mode/scene/boost and test false positives before
  any restriction policy; no numeric enforcement threshold is READY today.

9. Feature preservation / regression surface
- CONFIRMED: existing features include PlayFab identity/economy, Meta checkout,
  Photon rooms and Voice, reconnect/server switching, Tag/Infection, PVP,
  movement, welding/Sandbox, horror hub and LVL1-7, items/cosmetics, `/link`,
  MOTD and CCU. Worker and Unity changes cross multiple callers.
- READY: define release matrix now; no feature is approved for removal. Run
  two-account and late-join tests, master/owner migration, room switching, Voice,
  purchase/recovery and backend outage tests. Include duplicate manager/session
  and retry/idempotency checks.
- Gate: staging feature parity and rollback plan before production rollout.

REMAINING DASHBOARD QUESTIONS (READ-ONLY INVENTORY)

1. PlayFab: deployed CloudScript/Azure Functions and PlayStream rules; Client API
   policies; UserData/InternalData permissions; currencies/catalog/stores and
   purchase/receipt controls.
2. Photon: Realtime Custom Server/provider URL, anonymous-client setting, auth
   failure policy, PlayFab association, app IDs; Voice app/auth and reconnect.
3. Meta: User ID DUC/verification eligibility, attestation availability and
   current product/SKU eligibility.
4. Cloudflare: deployed Worker/version/routes, binding names, D1 binding/schema,
   plan and aggregate requests/rows. Do not expose secret values.
5. Discord: private channel effective permissions, bot/webhook identity and
   delivery path; never reveal webhook URL/token.

IMPLEMENTATION DEPENDENCIES AND ORDER

0. Owner approves staging scope and read-only inventory; record redacted
   settings, live revisions, app association and product mappings. Resolve
   policies before touching behavior.
1. Identity/auth proof: decide Meta proof scope and account preservation; prove
   Photon -> Worker -> PlayFab custom-auth contract in a staging app, including
   Voice/reconnect and anonymous rejection. If proxy cannot be proven, defer
   D1-gated Photon restrictions rather than guess.
2. Economy/moderation: server-owned roles, secure report/moderator operations,
   currency rewards, PlayFab purchases and Meta IAP. Migrate all callers and
   restore paths; verify grants exactly once before disabling client routes.
3. Worker/D1 foundation: schema, owner API, audit, durable alert outbox, limits,
   secrets and route-compatibility tests. Preserve `/redeem`, `/motd`, Photon
   webhooks, Discord commands, `/export`, `/setup`, `/health`; plan old query
   secret migration separately.
4. Incident/manual review: trusted identity/provenance, every detection persisted
   and alerted, owner-only audited transitions, loopback dashboard, per-rule
   policy. Movement heuristics default non-restricting.
5. Heartbeat/replay and rejoin: five-minute challenge/sequence/expiry; no per-beat
   KV; D1 restriction lookup at every auth; remove anonymous fallback only after
   staging proves all login/reconnect/Voice paths. No reliable existing-session
   kick claim.
6. RPC hardening + movement calibration; then staged rollout with rollback,
   alert/quota monitoring and owner runbook. A dedicated authoritative game server
   is a separate architecture and cost decision.

OWNER DECISIONS / RECOMMENDED DEFAULTS

- Approve staging-only implementation after redacted settings inventory; approve
  production separately. Recommended: no production changes in Stage 1.
- Meta User Verification: optional until eligibility and existing-account binding
  work; then decide whether to require. App Attestation: optional signal only.
- Confirmed moderator/role source: server-only. Do not trust existing UserData.
- Preserve every product/entitlement and current game mode; migrate before cutoff.
- Incident defaults: every signal gets incident + alert; movement/latency/tracking
  never auto-restrict; only repeated verified protocol abuse may request temporary
  hold; no automatic permanent ban.
- Review semantics: Approve/Clear releases; Reject/Confirm leaves confirmed
  restriction until explicit release or separate ban. Require owner reason and
  audit. Choose hold expiry, review SLA, appeal and evidence-retention period.
- Auth outage: retryable denial for new sessions if restriction enforcement is
  enabled; never anonymous. Heartbeat outage is telemetry unavailable, not guilt.
- Discord: dedicated private owner/staff channel, least-privilege bot, bounded
  retries and deduplicated alerts.
- Dashboard: owner-only local loopback, CSRF-safe server actions, no public host.
- Costs: target €0 additional recurring, but approve a quota threshold/traffic
  alert and accept that capacity or authoritative-server needs may change cost.

TEST / RELEASE GATES

- Auth: valid/invalid/expired credentials; exact Photon token vs SessionTicket
  separation; proxy contract; no anonymous downgrade; room rejoin, fresh login,
  Voice, server switch, restricted denial and owner release. Simulate Worker,
  PlayFab and D1 timeouts.
- Permissions/economy: forged moderator/target IDs denied; client cannot grant
  currency or set role; every legacy reward and purchase maps correctly; duplicate
  callbacks/retries grant once; catalog prices, Meta entitlement, consume/restore
  and existing balances/items preserved.
- Incidents: every test detection persisted once with provenance/time/rule; alert
  sent privately; Discord outage retries without loss/duplicate; non-owner/forged
  dashboard actions denied; approve/reject/release/ban separately audited.
- Replay: duplicate/stale heartbeat, challenge reuse, sequence rollback, expiry,
  lost response and retry; no restriction from missed beat or service outage.
- Gameplay: RPC sender/ownership/legal state/rate tests; Tag/Infection,
  movement/boosts, PVP, welding/Sandbox, horror LVL1-7, levels/transitions, late
  join, owner/master migration, items, room/Voice and duplicate manager checks.
- False positives/privacy: lag, tracking loss, frame spikes, normal movement and
  tag proximity do not restrict; alert/logs exclude credentials and unnecessary
  sensitive data; verify retention/deletion.
- Capacity: 20/50/100 CCU heartbeat plus expected incident/auth traffic; measure
  actual Worker request and D1 row/read limits with existing routes. Set rollback
  thresholds and confirm feature parity before rollout.

READINESS CONCLUSION

READY: owner review of this checklist and read-only dashboard inventory.
CONDITIONAL: staging implementation after decisions and provider/auth prerequisites.
UNVERIFIED: all production dashboard settings, deployments, quotas, alert privacy,
Meta eligibility and Photon proxy support.
NOT READY: production changes, D1-enforced Photon admission, automatic movement
restrictions, or any claim that existing PUN sessions can be reliably kicked.

Evidence reused: V15-V21 reports, V22, Stage 0, local `Oculus_Login.cs`,
`PhotonVRManager.cs`, IAP/economy scripts, `discord-bot/worker.js`, and V08 draft.
No dashboard access or production calls were made.

END OF REPORT

Embed this paste

Install this app

  1. Tap the Share button
  2. Scroll down and tap "Add to Home Screen"
  3. Tap "Add" in the top right

Please confirm