fix(linkedin-studio): S6 harden video — caption buzzword gate + voice-samples graceful degradation

S6 close-out (2 edits / 1 file · lint 81/0 · counts 29/19/26/6):
- video.md:129 Step-5 De-AI gate: add content rule #4 buzzword strip to the post-caption gate (only buzzword line was :106 under "Natural Speech Test" = script not caption; caption is post-emitting feed text)
- video.md:42/:45 Step-0: soften "(REQUIRED before scripting)" → "(read before scripting)" + add fresh-adopter graceful-degradation fallback (empty/absent voice-samples → SKILL.md/defaults, no dead-end)

Axis-c (buzzword on caption) + axis-d (voice-samples dead-end) closed; axes a/b PASS. Class: hybrid guided/stateful + post-emitting on the caption (hook 110-140 deliberately not imposed on the accompanying caption — operator-agreed). video-scripter + differentiation-checker wiring verified; 2.5-wps budgets exact. 2 deferrals (caption-hook class boundary + :69 "zero distribution" inter-reference honesty). Local-only per push policy.
This commit is contained in:
Kjell Tore Guttormsen 2026-06-18 15:20:05 +02:00
commit 1524b8438f
2 changed files with 94 additions and 2 deletions

View file

@ -39,9 +39,11 @@ Load video-specific references:
- Read `references/linkedin-formats.md` (Video Content Deep Dive section) for algorithm data and technical specs
Check for existing assets:
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/` — Match the user's natural voice (REQUIRED before scripting)
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/` — Match the user's natural voice (read before scripting)
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/examples/high-engagement-posts.md` — Study successful patterns
**Graceful degradation (fresh adopter):** if `voice-samples/` is empty or absent, don't block — fall back to the voice settings in `skills/linkedin-studio/SKILL.md` (or neutral defaults), note that the script uses a default voice, and proceed. The voice-guardian is suppressed under 5 samples, so there is no hard gate to satisfy.
## Step 1: Choose Video Type
Use AskUserQuestion:
@ -124,7 +126,7 @@ Before presenting, verify the script passes the video quality gate:
### De-AI / Differentiation Gate
The post caption rides the same low-substance down-rank LinkedIn confirmed for text. Confirm the script's core idea and caption carry the signals LinkedIn named — **personal substance, original thinking, concrete specifics, genuine voice** — and use no mechanical-response engagement bait ("Comment YES", "Like for Part 2"); a genuine question is fine. (The voice-guardian hook scores the caption on save.)
The post caption rides the same low-substance down-rank LinkedIn confirmed for text. Confirm the script's core idea and caption carry the signals LinkedIn named — **personal substance, original thinking, concrete specifics, genuine voice** — and use no mechanical-response engagement bait ("Comment YES", "Like for Part 2"); a genuine question is fine. (The voice-guardian hook scores the caption on save.) **Strip corporate buzzwords** from the post caption (Content Quality Rule #4: leverage, synergy, paradigm shift, thought leader, disruptive, value proposition, ecosystem, holistic approach) — re-shaping a text idea into a video caption can slip them in, and they trip the same low-substance signal.
If the idea is a take the audience has seen many times — commodity content — delegate an originality pass to the `differentiation-checker` agent: invoke it via `Task` with `subagent_type: linkedin-studio:differentiation-checker` (foreground, from this command layer), then sharpen the angle before presenting.