Lesson 93: External Escalation Messaging Packet - Cite Lesson 92 Dry-Run Verdict Rows and Block Failed-Rehearsal Claims in RPG Live-Ops
Direct answer: An external escalation messaging packet is the signed, channel-specific copy you release after a passing Lesson 92 dry-run. Every paragraph must cite the dry_run_verdict, dry_run_id, and rollup_packet_id_ref it depends on, and must omit any promise, metric, or timeline that would have violated W1–W4 deck gates during rehearsal.

What this lesson solves
Stakeholder-facing language is where governance evidence dies. This lesson turns escalation copy into a hashable artifact that cannot outrun the Lesson 91 rollup row or the Lesson 92 rehearsal verdict.
Prerequisites: Lesson 92 row with dry_run_verdict in {pass} or an explicit defer decision that still blocks external sends until a subsequent pass row exists. Expected time: about eighty-five minutes including a tabletop on a marketing rewrite that smuggles optimism.
What you will build
lesson78_external_escalation_messaging_packet_policy.md(contract below)lesson78_external_escalation_messaging_packet.csv(one row per channel bundle you might ship)- A message body template with mandatory footer lines for ids + hashes
Step 1 - Define external gate classes
| gate | fail signal | owner action |
|---|---|---|
| E1 – Verdict orphan | copy references “confidence” or “stable” without dry_run_id_ref + verdict line |
rewrite or attach appendix row |
| E2 – Rollup drift | any numeric claim not present in cited rollup_packet_id_ref columns |
delete number or cite appendix hash |
| E3 – Rehearsal contradiction | sentence would have failed W1 or W2 in Lesson 92 | strike sentence |
| E4 – Channel scope creep | social copy promises store-only embargo facts | split bundle or gate channel |
Step 2 - Author lesson78_external_escalation_messaging_packet_policy.md
Minimum sections:
- Purpose – ship escalation language that survives adversarial reading after dry-run truth.
- Eligibility – external send allowed only when Lesson 92
dry_run_verdictispass, unless policy explicitly allowsdeferwithout external channels (default: no). - Citation grammar – every public paragraph ends with a bracketed triple:
[dry_run_id=dry_run_id_ref; verdict=dry_run_verdict; rollup=rollup_packet_id_ref]shortened in player-facing copy to a footer block, not inline spam. - Forbidden lexicon – list marketing phrases that imply metrics absent from rollup columns (treat as E2).
- Localization – translations must preserve numeric parity; otherwise separate row with its own hash.
- Retention – store outgoing HTML + plaintext plus
signed_message_body_hashfor regulator replay.
Step 3 - Author lesson78_external_escalation_messaging_packet.csv
| column | purpose |
|---|---|
external_message_id |
stable identifier |
train_cycle_id |
matches Lessons 89 / 91 / 92 |
dry_run_id_ref |
Lesson 92 lesson78_mid_train_escalation_dry_run_war_room.csv row |
rollup_packet_id_ref |
Lesson 91 packet row cited on this bundle |
channel_bundle |
store_card / status_blog / email / social / partner_api |
dry_run_verdict_cited |
must echo Lesson 92 dry_run_verdict |
forbidden_claims_checksum |
sha256 over sorted list of strike phrases removed during edit |
signed_message_body_hash |
over canonical UTF-8 body + footer ids |
external_evidence_hash |
sha256 over dry_run_evidence_hash + signed_message_body_hash + channel list |
Step 4 - Draft the message bundle (40 minutes)
- Lift facts only from Lesson 91 columns already footered in Lesson 92 deck export.
- Map sentences to
source_drift_row_idssubsets; if a sentence cannot map, it does not ship. - Write the footer block for each artifact:
dry_run_id,rollup_packet_id,dry_run_verdict,dry_run_evidence_hashtruncated to 12 chars for human spot checks. - Run lexicon scan for E3 optimism words that imply closure without
intervention_bundle_idssupport.
Step 5 - Tabletop - marketing adds a “players love it” line
A stakeholder inserts a qualitative claim with no survey id in the rollup packet. Outcome: E2 failure; remove line or open a new evidence row in the Lesson 91 chain before any resend—never “just softening” language.
Pro tips
- Footer before flair – designers will ask for hero art revisions first; refuse until the footer ids and hashes are stable, because art swaps tempt copy edits that bypass the lexicon scan.
- One bundle per embargo class – store cards with time-locked facts get their own
external_message_id; do not mix with social snippets that can be screenshot early. - Plain-language parity – if you simplify sentences for players, run the simplification through the same mapping table you used for the internal version so numbers cannot drift during “helpful” editing.
Troubleshooting
| symptom | likely cause | fix |
|---|---|---|
| Legal rejects for “unsupported optimism” | copy cites verdict but not the rollup_packet_id_ref columns tied to that optimism |
attach the governing column names in the footer block |
| Store submission bounces after dry-run pass | bundle references an intervention promise without intervention_bundle_ids |
align copy to Lesson 91 row or remove promise |
| Two teams publish conflicting timelines | duplicate external_message_id reused across regions |
split rows; never fork copy from chat without a new hash |
Common mistakes
- Treating the footer block as optional on short social posts—short posts still need a link to the canonical bundle page that carries the hash footer.
- Letting localization vendors paraphrase numbers “for idiom” without a secondary hash review.
- Using defer as a “soft launch” when the policy default is no external send until
pass.
FAQ
Can we ship if Lesson 92 was defer?
Default no. defer means rehearsal did not produce a sendable verdict. Write internal notes only until a new dry-run row reaches pass.
Does this replace the Lesson 85 bridge packet?
No. Lesson 85 is live incident bridging. This packet is curated outbound language after rehearsal.
Where do FAQs for players go?
Inside the same bundle row if they share hashes; otherwise split rows so each signed_message_body_hash stays single-audience.
Lesson recap
External escalation is not tone; it is evidence routing with nicer fonts. If the footer block looks ugly, your claims are still too long.
Next lesson teaser
Next: Lesson 94: Escalation Send Kill-Switch wires publish-time holds when Lesson 90 ingestion or governance hashes drift after a Lesson 92 pass but before send.
Related learning
- Lesson 92: Mid-Train Escalation Dry-Run
- Lesson 91: Days 8–14 Cumulative Drift Rollup Escalation Packet
- How to Score Forecast Calibration Drift Before Release Gates for Live-Ops Teams (2026)
Treat public copy as signed code, not story.