Lesson 239: Steam Playtest Feedback Tag Taxonomy Receipt on BUILD_RECEIPT (2026)
Direct answer: Before hotfix week merges Discord screenshots and Steam survey exports, file playtest_feedback_tag_receipt_v1.json proving a single canonical tag list, alias map (Discord emoji ↔ survey dropdown), and tag → owner → BUILD_RECEIPT row crosswalk—then promote BUILD_RECEIPT playtest_feedback_tag_ok. Distinct from Lesson 221 facilitator amendment (version pin / scope) and 18 playtest feedback tools (tool list, not taxonomy governance).

Why this matters now (June 2027 hotfix week)
June 2027 facilitators post #combat-bug in Discord while Steam surveys capture Combat / Balance and ops tracks combat_balance in BUILD_RECEIPT—three strings, one crash. Hotfix triage burns Tuesday arguing labels instead of shipping Lesson 238 save isolation fixes. Lesson 221 updates version pins when depots change; this lesson updates feedback vocabulary when playtest scale starts.
The GameMaker feedback tag preflight is the ninety-second editor checklist (Included Files + alias map)—239 is the BUILD_RECEIPT milestone.
Beginner path (taxonomy in one sitting)
| Step | Action | Success check |
|---|---|---|
| 1 | Export Discord #playtest pins + survey fields |
Raw lists captured |
| 2 | Draft ≤12 canonical tags | No duplicate intent |
| 3 | Write tag_alias_map_v1.json |
Every alias resolves |
| 4 | Map each tag → owner + BUILD_RECEIPT row | No orphan tags |
| 5 | Facilitator posts pinned taxonomy message | Dated screenshot |
| 6 | File receipt + BUILD_RECEIPT | taxonomy_ok: true |
Time: ~62 minutes first wave; ~15 minutes when alias file is committed.
Developer path (gates F1–F6)
| Gate | Check | Fail when |
|---|---|---|
| F1 | build_label on taxonomy doc |
Hand-wavy “June playtest” |
| F2 | ≤12 canonical tags | Tag sprawl (>15) |
| F3 | tag_alias_map covers Discord + survey |
Unmapped alias |
| F4 | Each tag → owner + build_receipt_row |
Orphan audio tag |
| F5 | Facilitator ack + pin message ID | Slack-only verbal agreement |
| F6 | Receipt + BUILD_RECEIPT column | Promote before F3 GREEN |
Canonical tag table (example — customize)
| Canonical tag | Discord aliases | Steam survey label | BUILD_RECEIPT row |
|---|---|---|---|
save_isolation |
#saves, save bleed |
Saves / Progress | playtest_save_isolation |
audio_init |
#no-sound, wwise |
Audio / Music | wwise_dsp_init_receipt |
npc_inference |
#tavern-crash, OOM dialogue |
Performance | sentis_npc_batch_receipt |
html5_shell |
#black-screen, wasm |
Cannot launch | corp_coep_fest |
analytics_pii |
#ga4, telemetry |
Privacy concern | construct_playtest_analytics |
wasm_heap_cap |
#oom, tab crash 20min |
Performance | wasm_heap_cap_playtest |
facilitator_scope |
#wrong-build |
Wrong version | facilitator_amendment_pass |
Pair GameMaker taxonomy preflight when shipping Included Files alias map on GM HTML5 builds.
tag_alias_map_v1.json
{
"schema": "tag_alias_map_v1",
"build_label": "summer-playtest-2027-rc1",
"canonical_tags": [
"save_isolation",
"audio_init",
"npc_inference",
"html5_shell",
"analytics_pii",
"facilitator_scope"
],
"aliases": {
"#saves": "save_isolation",
"save bleed": "save_isolation",
"#no-sound": "audio_init",
"#tavern-crash": "npc_inference",
"#black-screen": "html5_shell",
"#ga4": "analytics_pii",
"#wrong-build": "facilitator_scope"
}
}
Pin under release-evidence/playtest/TAG_ALIAS_MAP.json.
playtest_feedback_tag_receipt_v1.json
{
"schema": "playtest_feedback_tag_receipt_v1",
"build_label": "summer-playtest-2027-rc1",
"taxonomy_version": "2027-06-tags-v1",
"canonical_tag_count": 6,
"alias_map_path": "release-evidence/playtest/TAG_ALIAS_MAP.json",
"facilitator_pin_message_id": "discord:1234567890123456789",
"owner_map": {
"save_isolation": { "owner": "gameplay@studio", "build_receipt_row": "playtest_save_isolation" },
"audio_init": { "owner": "audio@studio", "build_receipt_row": "wwise_dsp_init_receipt" },
"npc_inference": { "owner": "ai@studio", "build_receipt_row": "sentis_npc_batch_receipt" },
"html5_shell": { "owner": "web@studio", "build_receipt_row": "corp_coep_fest" },
"analytics_pii": { "owner": "privacy@studio", "build_receipt_row": "construct_playtest_analytics" },
"facilitator_scope": { "owner": "ops@studio", "build_receipt_row": "facilitator_amendment_pass" }
},
"gates": {
"F1_build_label": "pass",
"F2_canonical_cap": "pass",
"F3_alias_map": "pass",
"F4_owner_crosswalk": "pass",
"F5_facilitator_pin": "pass",
"F6_build_receipt": "pass"
},
"taxonomy_ok": true,
"promotion_allowed": true,
"cousin_receipts": {
"facilitator_amendment": "release-evidence/ops/FACILITATOR_AMENDMENT_RECEIPT.json"
}
}
Pin under release-evidence/playtest/PLAYTEST_FEEDBACK_TAG_RECEIPT.json.
BUILD_RECEIPT row (F6)
| Column | Pass when |
|---|---|
playtest_feedback_tag_ok |
taxonomy_ok: true |
facilitator_amendment_pass |
Lesson 221 GREEN when scope changed |
playtest_save_isolation |
Lesson 238 independent |
Relationship to guide vs Lesson 221
| Artifact | Role |
|---|---|
| 18 playtest feedback tools | Intake tooling |
| Lesson 221 | Version pin / scope amendment |
| GameMaker tag preflight | Editor checklist (queued) |
| This lesson | BUILD_RECEIPT playtest_feedback_tag_ok |
When version_pin_after changes mid-week, run 221 first—then bump taxonomy_version if facilitator channels add new aliases.
Key takeaways
- One canonical tag list—Discord, survey, and BUILD_RECEIPT use the same vocabulary.
tag_alias_mapabsorbs emoji shorthand—do not rename BUILD_RECEIPT rows per message.- Pair 221 (scope) with 239 (labels)—amendment without taxonomy still confuses triage.
- Lesson 240 — map
npc_inferencetag to Sentis row. - Q3 capstone 244 requires
playtest_feedback_tag_okGREEN. - Thursday review — one Tags / triage line.
- ≤12 tags—sprawl defeats hotfix week.
- Community playtest resources — paste taxonomy block into facilitator README.
Common mistakes
- New Discord emoji every day without updating
tag_alias_map. - Steam survey free-text only—no dropdown aligned to canonical tags.
- Tag
audiomaps to three different BUILD_RECEIPT rows—pick one owner. - Paying facilitators before 221 + 239 GREEN on new pin.
- Conflating with Lesson 220 VOD batch—Whisper tags ≠ player feedback tags.
Troubleshooting
| Symptom | Lane |
|---|---|
| Duplicate tickets same bug | F3 alias map |
| Owner disputes scope | Lesson 221 amendment |
| Tag points to missing row | F4 crosswalk audit |
| Survey export mismatch | Re-export after F2 cap |
AI dialogue reports flood npc_inference |
Split content_policy tag (Lesson 216) |
Mini exercise (60 minutes)
- Collect ten real Discord messages—list unique strings.
- Collapse to six canonical tags—write alias map.
- Assign owners + BUILD_RECEIPT rows.
- Facilitator pins taxonomy—capture message ID (F5).
- File receipt; run Thursday row review.
Continuity — Q3 2027 summer playtest wave (236–244)
| Lesson | Receipt focus |
|---|---|
| 236–238 | Art, audio, saves |
| 239 (this) | Feedback tag taxonomy |
| 240 | Sentis NPC batch |
| 241–244 | Analytics → capstone |
Previous: Lesson 238 — Godot playtest save isolation.
Next: Lesson 240 — Unity Sentis NPC inference batch.
FAQ
Same as 18 playtest tools blog?
Blog lists tools; 239 owns taxonomy + BUILD_RECEIPT wiring.
Same as Lesson 221?
221 = version/scope amendment; 239 = feedback label governance.
Need taxonomy before Lesson 240?
Recommended—npc_inference tag routes OOM reports to Sentis row.
GameMaker guide required?
Guide is preflight cousin; 239 is course milestone.
Hotfix week fails when every channel uses different words for the same bug—canonical tags, alias map, owner crosswalk, then promote playtest_feedback_tag_ok on BUILD_RECEIPT.