Wire the orphan differentiation-checker (#10) into the five short-form creation commands (post/quick/react/carousel/video) as a De-AI / Differentiation Gate at each command's quality-check step: confirm the LinkedIn-named substance signals (personal substance, original thinking, concrete specifics, genuine voice) + a soft engagement-bait check, and delegate an originality pass to linkedin-studio:differentiation-checker when the angle risks commodity content. Add Task to allowed-tools in quick/react/carousel (post/video already had it from Step 13). Extend (not duplicate) hooks/prompts/voice-guardian.md's AI-pattern section with the same named signals from research/01 D8 + research/03 D4. Runtime-loaded prompt — no compile-hooks.py, no hooks.json change (verified: compile-hooks --check reports no drift). Test: new hooks/scripts/__tests__/linkedin-content-filter.test.mjs pins the content/non-content boundary the gate is scoped by (14 tests). Full hook suite 76/76, structure lint 61/61. Plan Step 14 (Wave 4 S2). Counts unchanged (26 commands / 19 agents). [skip-docs]: tre-doc + version bump deferred to Step 21 per remediation plan. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
69 lines
4.5 KiB
Markdown
69 lines
4.5 KiB
Markdown
VOICE GUARDIAN — DRIFT SCORING & AI AUTHENTICITY CHECK: If the file being written/edited is LinkedIn content (post draft, article, or content file — NOT config, state, scripts, docs), perform both AI detection and voice drift scoring:
|
|
|
|
## 1. AI Pattern Detection
|
|
|
|
Scan for these common AI writing patterns:
|
|
- Generic openings: 'In today's rapidly evolving...', 'As we navigate...', 'In the ever-changing landscape...'
|
|
- Filler phrases: 'It's worth noting that', 'It goes without saying', 'At the end of the day'
|
|
- Overused transitions: 'Furthermore', 'Moreover', 'Additionally', 'In conclusion'
|
|
- AI superlatives: 'game-changing', 'revolutionary', 'transformative', 'groundbreaking'
|
|
- List padding: Adding obvious points just to fill a list
|
|
- Hedging language: 'It could be argued', 'One might say', 'Perhaps'
|
|
- Perfect structure: Every paragraph exactly the same length
|
|
|
|
If 3+ AI patterns detected, flag: 'Voice Guardian Alert: This content scores below authenticity threshold. AI patterns found: [list specific patterns]. Suggested fixes: [specific rewrites using natural language].'
|
|
|
|
### LinkedIn-named substance signals (official de-AI down-rank)
|
|
|
|
LinkedIn confirmed (VP Laura Lorenzetti, 2026-05-19) an active program that **reach-suppresses** generic AI posts/comments and attention-bait — down to first-degree connections, not deletion — using ML trained on human-annotated "original thinking" vs "lacking substance." Beyond the generic tells above, check the draft for the four signals LinkedIn *named*. This is the differentiation surface, not an unverified SEO tell-list:
|
|
|
|
- **Personal substance** — a lived detail, stake, or first-hand observation only this author has. Generic advice anyone could have written is the failure mode.
|
|
- **Original thinking** — a take or synthesis, not a restatement of the consensus.
|
|
- **Concrete specifics** — named tools, real numbers, a dated example — not abstract nouns.
|
|
- **Genuine voice** — reads as the author, not a model-default cadence.
|
|
|
|
If two or more of these are missing, flag it alongside the AI-pattern alert: the post risks the low-substance down-rank, not merely sounding generic.
|
|
|
|
**Soft engagement-bait check:** block mechanical-response CTAs — "Comment YES", "Like for Part 2", "DM me 'X'", "Repost if you agree" — which trigger a post-level throttle. A *genuine* open question is not penalized; the line is a real answer vs a reflexive token.
|
|
|
|
## 2. Six-Dimension Voice Drift Scoring
|
|
|
|
Read the voice profile and collected post samples from `${CLAUDE_PLUGIN_ROOT}/assets/voice-samples/authentic-voice-samples.md`.
|
|
|
|
Score the draft against these 6 dimensions (0 = perfect match, 1 = minor drift per dimension):
|
|
|
|
| Dimension | What to Compare |
|
|
|-----------|----------------|
|
|
| **Sentence structure** | Average length, complexity, use of fragments vs. compound sentences |
|
|
| **Word choice** | Vocabulary level, preferred/avoided words from voice profile |
|
|
| **Opening patterns** | Hook style — does it match the user's signature openers? |
|
|
| **Storytelling** | Anecdote usage, narrative arc, concrete vs. abstract |
|
|
| **Tone markers** | Humor, directness, formality level, empathy signals |
|
|
| **Formatting** | Paragraph length, whitespace, emoji usage, punctuation habits |
|
|
|
|
**Sum the 6 scores (0-6 total) and output a verdict:**
|
|
|
|
| Score | Verdict | Action |
|
|
|-------|---------|--------|
|
|
| 0-1 | AUTHENTIC | No changes needed |
|
|
| 2-3 | CAUTION | Flag specific dimensions that drifted, suggest fixes |
|
|
| 4-5 | ALERT | Significant drift — list all deviating dimensions with rewrites |
|
|
| 6 | REWRITE | Content doesn't sound like the user — recommend starting over |
|
|
|
|
**Confidence gate:** If `## Collected Post Samples` has fewer than 5 posts, perform ONLY the AI Pattern Detection (section 1). Skip the Six-Dimension Voice Drift Scoring entirely — there is insufficient data for meaningful drift analysis. Do NOT output "LOW CONFIDENCE" messages. Instead, silently skip drift scoring and only flag if 3+ AI patterns are detected.
|
|
|
|
**Output format (always include at end of system message):**
|
|
```
|
|
Voice Drift: [VERDICT] ([score]/6) [confidence: HIGH/LOW]
|
|
[If CAUTION+: list dimensions that scored 1 with brief fix suggestion]
|
|
```
|
|
|
|
## 3. Humanization Tips (for CAUTION or higher)
|
|
|
|
- Add specific personal anecdotes or observations
|
|
- Use conversational contractions (I've, don't, it's)
|
|
- Include imperfect/real-world examples
|
|
- Vary paragraph and sentence length naturally
|
|
- Reference specific people, tools, or experiences
|
|
|
|
**Skip this check** if the file is config, state (.local.md), script, hook, JSON, or documentation.
|