Lesson 241: Construct Playtest Analytics Event Receipt on BUILD_RECEIPT (2026)

Direct answer: Before facilitators export GA4 playtest funnels from Construct → itch HTML5, file construct_playtest_analytics_receipt_v1.json proving an event allowlist, property denylist scan, DebugView screenshot, and surface: playtest_invite—then promote BUILD_RECEIPT construct_playtest_analytics. Distinct from Lesson 213 telemetry session receipt (first session only) and Construct analytics preflight (ninety-second checklist).

Lesson hero for Construct playtest analytics event receipt

Why this matters now (June 2027 HTML5 playtest funnels)

June 2027 teams pass Lesson 222 CORP/COEP and open itch playtest cohorts the same week. Construct event sheets fire Button clicked forty times into GA4 while privacy reviewers ask for build_label proof without steam_id. Lesson 213 files telemetry_session_receipt_v1 for session_startthis lesson files construct_playtest_analytics_receipt_v1 for funnel events on BUILD_RECEIPT.

The Construct playtest analytics preflight is the editor gate—241 is the course milestone. Pair Lesson 239 tag analytics_pii → this row.

Beginner path (GA4 allowlist)

Step Action Success check
1 Confirm fest smoke or subdomain wasm GREEN A1 shell pass
2 Commit events/playtest_allowlist.json A2 pass
3 Wire Analytics_SendPlaytestEvent wrapper No raw gtag in sheets
4 Run denylist scan on sample payloads A3 pass
5 GA4 DebugView on itch Play URL A4 screenshot
6 File receipt + BUILD_RECEIPT playtest_analytics_ok: true

Time: ~58 minutes first GA4 property wire; ~20 minutes when allowlist exists.

Developer path (gates A1–A6)

Gate Check Fail when
A1 HTML5 shell loads on itch Play Black canvas / COEP block
A2 playtest_allowlist.json committed Ad-hoc event names
A3 Denylist scan on payloads user_id, email, tokenized URLs
A4 DebugView shows allowlist events PII properties visible
A5 surface: playtest_invite on events fest_public on playtest depot
A6 Receipt + BUILD_RECEIPT column Export before A3 GREEN

A2 — Allowlist (reference)

{
  "schema": "playtest_allowlist_v1",
  "build_label": "summer-playtest-2027-rc1",
  "allowed_events": [
    "playtest_session_start",
    "playtest_tutorial_complete",
    "playtest_level_1_complete",
    "playtest_death",
    "playtest_survey_prompt_shown"
  ],
  "allowed_properties": ["build_label", "surface", "funnel_step"]
}

construct_playtest_analytics_receipt_v1.json

{
  "schema": "construct_playtest_analytics_receipt_v1",
  "build_label": "summer-playtest-2027-rc1",
  "export_target": "html5_itch_playtest",
  "allowlist_path": "events/playtest_allowlist.json",
  "allowed_event_count": 5,
  "denylist_scan": "pass",
  "ga4_property_id": "G-XXXXXXXX",
  "debugview_proof": "release-evidence/html5/PLAYTEST_GA4_DEBUGVIEW_2027-06-12.png",
  "surface_playtest": "playtest_invite",
  "paired_receipts": {
    "telemetry_session": "release-evidence/privacy/TELEMETRY_SESSION_RECEIPT.json",
    "corp_coep_fest": "release-evidence/html5/CORP_COEP_FEST_RECEIPT.json"
  },
  "gates": {
    "A1_html5_shell": "pass",
    "A2_allowlist": "pass",
    "A3_denylist": "pass",
    "A4_debugview": "pass",
    "A5_surface": "pass",
    "A6_build_receipt": "pass"
  },
  "playtest_analytics_ok": true,
  "promotion_allowed": true
}

Pin under release-evidence/html5/CONSTRUCT_PLAYTEST_ANALYTICS_RECEIPT.json.

BUILD_RECEIPT row (A6)

Column Pass when
construct_playtest_analytics playtest_analytics_ok: true
telemetry_session Lesson 213 GREEN (cousin)
corp_coep_fest Lesson 222 independent
playtest_feedback_tag_ok Lesson 239 routes analytics_pii
ALTER TABLE release_publish_gate ADD COLUMN IF NOT EXISTS
  construct_playtest_analytics_blocked BOOLEAN NOT NULL DEFAULT false;

Relationship to guide vs Lesson 213

Artifact Role
Construct analytics preflight A1–A6 checklist
Lesson 213 Session-level no-PII
Lesson 222 Wasm shell before analytics
This lesson BUILD_RECEIPT construct_playtest_analytics
PostHog beginner blog Wire-up cousin—not receipt authority

Run A1 only after players reach first interactive frame—DebugView on a black canvas is invalid proof.

Key takeaways

  1. Session receipt ≠ funnel events—213 first, 241 second on BUILD_RECEIPT.
  2. construct_playtest_analytics_receipt_v1 is Q3 playtest-wave specific.
  3. One wrapper function in Construct—designers cannot typo GA4 names.
  4. Lesson 239 — tag analytics_pii maps here.
  5. Q3 capstone 244 requires this column GREEN.
  6. Thursday reviewAnalytics / PII line.
  7. Denylist includes itch URLs with tokens in page_location.
  8. Do not merge into telemetry_session_receipt—separate schemas.

Common mistakes

  • Fifty Button clicked events from event sheets.
  • DebugView on press landing, not Play URL.
  • surface: fest_public on playtest_invite build.
  • Skipping Lesson 222—zero events because shell failed.
  • Exporting GA4 to facilitators before A3 denylist pass.

Troubleshooting

Symptom Lane
Zero events A1 shell + gtag load
PII in DebugView A3 denylist + strip properties
COEP blocks gtag Lesson 222 + fest smoke
Wrong funnel counts A2 allowlist orphan events
Session without build_label Lesson 213 T1

Mini exercise (60 minutes)

  1. List ten raw Construct events—collapse to five allowlist names.
  2. Implement wrapper—fire on tutorial complete.
  3. Denylist scan sample JSON exports.
  4. Screenshot DebugView on itch Play.
  5. File receipt; BUILD_RECEIPT GREEN.

Continuity — Q3 2027 summer playtest wave (236–244)

Lesson Receipt focus
236–240 Art → Sentis batch
241 (this) Construct playtest analytics
242–244 WASM heap → capstone

Previous: Lesson 240 — Unity Sentis NPC inference batch.
Next: Lesson 242 — itch WASM heap cap playtest receipt.

FAQ

Same as Construct analytics guide?
Guide = checklist; 241 = BUILD_RECEIPT column.

Same as Lesson 213?
213 = game_session_started; 241 = funnel allowlist.

Phaser HTML5 playtest?
Use Phaser heap cap preflight + Lesson 242—different receipt schema.

Need 222 GREEN?
Yes when playtest uses custom domain or workers—shell must load before A4.


GA4 playtest exports fail privacy review when event names are ad-hoc—allowlist, denylist, DebugView proof, then promote construct_playtest_analytics on BUILD_RECEIPT.