Lesson 243: OBS Playtest Clip Consent Receipt on BUILD_RECEIPT (2026)
Direct answer: Before June playtest highlight reels post to Discord or marketing, file playtest_clip_consent_receipt_v1.json proving consent_log.csv covers every clip_id, concat_manifest_v1.json excludes opt-outs, ffmpeg concat duration matches manifest sum, and mkv_gap_reencode cousin is GREEN when clips needed gap recovery—then promote BUILD_RECEIPT playtest_clip_consent_ok. Distinct from Lesson 224 MKV gap (timestamp recovery) and Lesson 220 VOD batch (Whisper triage).

Why this matters now (June 2027 playtest highlight reels)
June 2027 facilitators cut Tuesday Replay Buffer clips into a Discord highlight reel the same week legal reviews face/voice consent for marketing. Lesson 224 fixes duration gaps; this lesson fixes permission—each public clip needs consent_record_id, opt-outs stay out of concat_manifest, and BUILD_RECEIPT records highlight_concat_ok.
The OBS highlight clip consent preflight is the ninety-second gate—243 is the course milestone. Run Lesson 251 handoff_map_v1.json first when highlights are cut from a Resolve master. Pair Lesson 239 when triage tags vod_consent issues.
Beginner path (consent + concat)
| Step | Action | Success check |
|---|---|---|
| 1 | Pin consent_form_version |
C1 pass |
| 2 | Complete consent_log.csv |
One row per playtester |
| 3 | Build concat_manifest_v1.json from GREEN clips only |
C4 opt-outs excluded |
| 4 | Run MKV gap lane if duration delta | Lesson 224 cousin |
| 5 | ffmpeg concat from manifest filelist.txt |
C5 duration ±1s |
| 6 | File receipt + BUILD_RECEIPT | highlight_concat_ok: true |
Time: ~64 minutes first facilitator wave; ~15 minutes when templates exist.
Developer path (gates C1–C6)
| Gate | Check | Fail when |
|---|---|---|
| C1 | consent_form_version on signed form |
Hand-wavy verbal OK |
| C2 | consent_log.csv complete |
Missing playtester row |
| C3 | Every manifest clip has consent_record_id |
Orphan clip_id |
| C4 | opt_out: true rows excluded |
Opt-out in reel |
| C5 | ffprobe concat output duration | Delta > 1s vs manifest sum |
| C6 | Receipt + BUILD_RECEIPT | Promote before C3 GREEN |
C2 — consent_log.csv (reference)
consent_record_id,playtester_alias,session_id,consent_scope,consent_expires,opt_out,signed_at
a1b2c3d4-0001-4000-8000-000000000001,player_07,session-2027-06-12-01,highlight_reel,2027-12-31,false,2027-06-12T18:00:00Z
C3 — concat_manifest_v1.json
{
"schema": "concat_manifest_v1",
"build_label": "summer-playtest-2027-rc1",
"reel_id": "highlights-2027-06-12-discord",
"clips": [
{
"clip_id": "clip01",
"path": "playtest-vod/highlights/inbox/clip01.mkv",
"consent_record_id": "a1b2c3d4-0001-4000-8000-000000000001",
"duration_seconds": 42.3,
"mkv_gap_recovery": false
}
],
"excluded_opt_out_count": 1,
"concat_output": "playtest-vod/highlights/out/highlights_2027-06-12.mp4"
}
Never glob inbox/*.mkv—manifest-only concat.
playtest_clip_consent_receipt_v1.json
{
"schema": "playtest_clip_consent_receipt_v1",
"build_label": "summer-playtest-2027-rc1",
"consent_form_version": "playtest-consent-2027-06-v1",
"consent_log_path": "playtest-vod/highlights/consent_log.csv",
"concat_manifest_path": "playtest-vod/highlights/concat_manifest_v1.json",
"clips_in_manifest": 4,
"opt_out_excluded": 1,
"concat_duration_delta_seconds": 0.2,
"facilitator_pin_message_id": "discord:9876543210987654321",
"paired_receipts": {
"mkv_gap_reencode": "release-evidence/playtest/vod/MKV_GAP_REENCODE_RECEIPT.json",
"playtest_vod_triage": "release-evidence/playtest/vod/PLAYTEST_VOD_TRIAGE_RECEIPT.json"
},
"gates": {
"C1_form_version": "pass",
"C2_consent_log": "pass",
"C3_clip_consent_map": "pass",
"C4_opt_out_excluded": "pass",
"C5_concat_duration": "pass",
"C6_build_receipt": "pass"
},
"highlight_concat_ok": true,
"promotion_allowed": true
}
Pin under release-evidence/playtest/vod/PLAYTEST_CLIP_CONSENT_RECEIPT.json.
BUILD_RECEIPT row (C6)
| Column | Pass when |
|---|---|
playtest_clip_consent_ok |
highlight_concat_ok: true |
playtest_vod_gap_recovery |
Lesson 224 GREEN or n/a |
facilitator_vod_batch |
Lesson 220 independent |
ALTER TABLE release_publish_gate ADD COLUMN IF NOT EXISTS
playtest_clip_consent_blocked BOOLEAN NOT NULL DEFAULT false;
Relationship to guide vs Lesson 224
| Artifact | Role |
|---|---|
| Highlight clip consent preflight | C1–C6 checklist |
| MKV gap preflight | Duration recovery on clips |
| Lesson 224 | BUILD_RECEIPT gap column |
| This lesson | BUILD_RECEIPT playtest_clip_consent_ok |
| Audacity VO consent preflight | WAV-level consent metadata cousin (guide row #14) |
| VO waveform consent metadata tutorial | Beginner evening LIST/iXML + mux survival |
| Lesson 250 | BUILD_RECEIPT vo_consent_metadata_ok |
| Lesson 251 | BUILD_RECEIPT trailer_handoff_ok — run before consent concat |
| Lesson 220 | Whisper batch—not marketing reel |
Triage merged_playtest.wav and public highlight .mp4 are different lanes—do not reuse Whisper manifest for Discord marketing.
Key takeaways
- Gap-free ≠ consent-clear—224 cousin + 243 consent.
- Manifest-driven concat—never glob
inbox/. - Lesson 239 — tag routing for consent issues.
- Q3 capstone 244 requires
playtest_clip_consent_ok. - 16 OBS/ffmpeg tools — capture stack only.
- Thursday review — VOD / consent line.
- Do not merge into
mkv_gap_reencode_receipt—separate schemas.
Common mistakes
- Publishing reel before C3 map audit.
- Opt-out clip in manifest.
- Skipping C5 after ffmpeg “success”.
- Using Whisper triage WAV for marketing reel.
- Consent form version not bumped mid-wave.
Troubleshooting
| Symptom | Lane |
|---|---|
| Clip in reel, no consent row | C3 audit |
| OBS GREEN, legal blocks VO lane | Missing iXML recovery case study + Lesson 250 |
| Concat short vs sum | C5 + Lesson 224 |
| Legal block (clip manifest) | C1 form version |
| Internal clip in public reel | consent_scope filter |
| Batch Whisper blocked | Lesson 220 separate |
Mini exercise (60 minutes)
- Collect five Replay Buffer clips + consent rows.
- Exclude one opt-out—verify manifest.
- Concat from
filelist.txt; ffprobe duration. - File receipt; BUILD_RECEIPT GREEN.
- Pin facilitator taxonomy message (link Lesson 239).
Continuity — Q3 2027 summer playtest wave (236–244)
| Lesson | Receipt focus |
|---|---|
| 236–242 | Art → WASM heap |
| 243 (this) | OBS clip consent |
| 244 | Q3 capstone — arc 236–244 closed |
Previous: Lesson 242 — itch WASM heap cap.
Next: Lesson 244 — Q3 summer playtest capstone — Q3 arc 236–244 closed.
FAQ
Same as highlight clip consent guide?
Guide = checklist; 243 = BUILD_RECEIPT column.
Same as Lesson 224?
224 = MKV timestamp gaps; 243 = consent + highlight manifest.
Need 224 before 243?
Run gap recovery on clips that need it; consent receipt can file with mkv_gap_reencode: n/a per clip.
Whisper batch same pass?
No—Lesson 220 is triage audio; 243 is marketing reel.
Public highlight reels fail legal review when concat skips the consent log—map clips, exclude opt-outs, prove duration, promote playtest_clip_consent_ok on BUILD_RECEIPT.