ktg-plugin-marketplace/plugins/linkedin-studio/assets/voice-samples/authentic-voice-samples.md
Kjell Tore Guttormsen 911871ff53 fix(linkedin-studio): ship placeholder voice profile, gitignore real, sentinel detection
Wave 2 / Step 5 of the remediation plan (coupled criticals: voice-leak +
placeholder-detection).

Voice profile (the adopter-default leak):
- Ship a PII-free placeholder at authentic-voice-samples.md carrying a
  <!-- VOICE_PLACEHOLDER --> sentinel + neutral default voice principles.
- Migrate the author's real profile to gitignored authentic-voice-samples.local.md
  (already matched by *.local.md; added an explicit, commented .gitignore entry so
  the intent is unmissable). NO git-history rewrite — the historical file is
  attributed authorship, not a secret (per the plan threat model).
- Add authentic-voice-samples.template.md — a clean fill-in template for adopters.
- personalization-score.mjs: detect the sentinel (deterministic) instead of the
  unreliable `[Your Name]` heuristic, so the placeholder scores 0 voice points and
  a populated profile (sentinel removed) earns the 25.
- Both voice writers replace-not-append on the placeholder: setup.md (merge ->
  replace-if-placeholder) and onboarding.md (append -> replace-if-placeholder), so
  populating removes the sentinel; updated setup.md's stale heuristic table.

Operator decisions (deviations from plan-literal, approved this session):
- KEEP the plugin.json author name. The plan said scrub author -> neutral/org, but
  that contradicts its own LICENSE reasoning (intentional MIT attribution) and all
  5 sibling plugins keep author = the author; scrubbing only this one would create
  inconsistency for zero security gain (the name is public-by-design). The voice
  placeholder fully fixes the adopter-inheritance bug.
- Scrub the stale "January 2026 360Brew" brand from the plugin.json description and
  the "360brew" keyword (locked decision: no publishable model name/date). This is
  a Wave-1 propagation miss surfaced here because plugin.json was in Step 5's
  touch-scope.

Flagged for follow-up (NOT done here — out of Session 2 scope):
- The lint's stat-consistency grep (scripts/test-runner.sh) scans references/,
  commands/, skills/, hooks/prompts/, CLAUDE.md, README.md — but NOT
  .claude-plugin/plugin.json, which is why the 360Brew brand slipped Wave 1.
  Needs a Session-1-scoped lint extension to add plugin.json to the scan set.
- Readers (user-prompt-context.mjs, voice-guardian.md, state-update-reminder.md)
  read the tracked .md (placeholder), per the plan. The operator's real voice now
  lives in the gitignored .local.md, which nothing reads. To use it, readers + the
  voice score should prefer .local.md (matching the user-profile.local.md
  precedent). Deferred as a coherence follow-up for operator review.

Test-first: hooks/scripts/__tests__/personalization-score.test.mjs (red on the
placeholder scoring 25 under the old heuristic, green after the sentinel fix). Hook
suite 62/62, structural lint 0 failed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 00:23:32 +02:00

2.9 KiB
Raw Blame History

Authentic Voice Samples — Placeholder (neutral defaults)

These are neutral, widely-applicable defaults so the plugin produces reasonable content before you personalize. Replace them with your own voice via /linkedin:setup. Until you do, the voice category scores 0.

Core Voice Characteristics

  1. Solution-oriented — frame problems with a path forward, not just complaints.
  2. Factually grounded — base claims on evidence; acknowledge uncertainty openly.
  3. Non-judgmental — explain without criticizing people, companies, or decisions.
  4. Curious and open — treat "I don't know" as a starting point, not a weakness.
  5. Story-led — open with a concrete example before the abstract point.
  6. Actionable — end with something the reader can do, or a clear takeaway.

Do's

  • Open with a story or concrete example before the concept.
  • Use clear, accessible language even for technical topics.
  • Explain jargon on first use — assume intelligence, not prior knowledge.
  • Show rather than tell.
  • End with a specific, actionable takeaway.
  • Keep standard posts concise (≈8001500 characters).

Don'ts

  • Corporate buzzwords ("game-changer", "leverage", "synergy", "disrupt").
  • Criticizing people, companies, or decisions.
  • Claims without evidence.
  • More than 12 emojis per post.
  • Generic motivational filler or preachy lecturing.

Signature Phrases

(Add the phrases you naturally use once you personalize this profile.)

Vocabulary Preferences

(List the terms you always explain, and the words/phrases you avoid.)

Language Guidelines

  • Write in one consistent language per post; keep it accessible to non-native readers.
  • Prefer simple sentence structures for complex ideas.

Instructions for Claude

This is a placeholder. When it is in place (sentinel present), treat the defaults above as a reasonable baseline, and prompt the user to personalize via /linkedin:setup. Once personalized, these instructions are replaced by the user's own profile.

Collected Post Samples