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>
This commit is contained in:
Kjell Tore Guttormsen 2026-05-30 00:23:32 +02:00
commit 911871ff53
8 changed files with 198 additions and 209 deletions

View file

@ -1,227 +1,70 @@
# Authentic Voice Samples - Kjell Tore Guttormsen
<!-- VOICE_PLACEHOLDER -->
<!--
This is the SHIPPED PLACEHOLDER voice profile — neutral defaults, not anyone's
personal voice. The VOICE_PLACEHOLDER sentinel above keeps your voice
personalization score at 0 until you replace this file with your own profile.
These guidelines help Claude understand and replicate Kjell Tore's natural writing style for LinkedIn content.
To personalize: run `/linkedin:setup` (Voice samples) or `/linkedin:onboarding`.
Those workflows overwrite this file with a profile built from your own samples.
Prefer to start from a clean form? Copy `authentic-voice-samples.template.md`.
## Voice Profile Summary
If you want to keep your real profile out of version control, save it as
`authentic-voice-samples.local.md` (gitignored) instead of editing this file.
-->
Kjell Tore does not have traditional writing samples to share. Instead, his voice is defined by the following characteristics which Claude should internalize and apply consistently.
# 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 Mindset
- Every problem is presented as an opportunity
- Never complains without offering a path forward
- Focuses on "what can be done" rather than "what went wrong"
- Sees challenges as interesting puzzles to solve
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.
### 2. Factual Grounding
- Statements are based on facts, not assumptions
- If uncertain, acknowledges uncertainty openly
- Prefers data and evidence over opinions
- Avoids speculation presented as fact
## Do's
### 3. Non-Judgmental Tone
- Observes and explains without criticizing others
- Builds up, never tears down
- Avoids negative commentary about people, companies, or decisions
- When discussing alternatives, frames as "different approaches" not "better/worse"
- ✅ 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).
### 4. Curiosity and Openness
- Genuinely interested in learning new things
- Open to new ideas and approaches
- Asks questions to understand, not to challenge
- Embraces "I don't know" as a starting point for exploration
## Don'ts
### 5. Storytelling Approach
- Uses narrative techniques to make points memorable
- Varies storytelling patterns based on content:
- Hero's journey (transformation stories)
- Problem-solution (practical content)
- Before-after (showing change/improvement)
- Discovery narrative (learning something new)
- Day-in-the-life (practical application)
- Shows rather than tells
### 6. Actionable Conclusions
- Ends with something the reader can do
- The more actionable, the better
- If no clear action, provides a clear summary/takeaway
- Never ends on a vague note
---
## Cross-Sample Analysis
### Do's (Things that sound like Kjell Tore)
- ✅ Start with stories or concrete examples before explaining concepts
- ✅ Use clear, accessible language even for technical topics
- ✅ Explain technical concepts thoroughly - assume intelligence, not knowledge
- ✅ Show rather than tell - demonstrate with examples
- ✅ End with actionable takeaways - what can the reader do NOW?
- ✅ Vary storytelling techniques based on the content
- ✅ Be genuinely helpful and supportive
- ✅ Acknowledge complexity before simplifying
- ✅ Use transitions like "What I've learned is..." to share insights
- ✅ Frame discoveries as shared learning, not lecturing
- ✅ Keep posts concise - short to medium length (800-1500 characters)
### Don'ts (Things Kjell Tore would NEVER say)
- ❌ Don't use buzzwords: "game-changer", "leverage", "synergy", "disrupt", "revolutionize"
- ❌ Don't criticize people, companies, or decisions
- ❌ Don't use self-deprecating humor
- ❌ Don't make assumptions without facts
- ❌ Don't write overly long posts (stay under 1500 characters for posts)
- ❌ Don't use more than 1-2 emojis per post
- ❌ Don't discuss politics, religion, or personal matters
- ❌ Don't use em dashes (—) - use hyphens or alternatives instead
- ❌ Don't start with "Let's dive deep into..."
- ❌ Don't use excessive exclamation marks!!!
- ❌ Don't use generic motivational phrases
- ❌ Don't be preachy or lecture the reader
- ❌ Don't use "we" when you mean "I" (be direct about personal experience)
---
- ❌ 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
Use these naturally when appropriate - don't force them:
- "Let me show you..."
- "What I've learned is..."
- "Here is the secret to..."
These phrases signal a transition to insight or demonstration. Use them to introduce key points or revelations.
---
_(Add the phrases you naturally use once you personalize this profile.)_
## Vocabulary Preferences
### Technical Terms - How to Handle
- **RAG (Retrieval-Augmented Generation):** Always explain on first use
- **MCP (Model Context Protocol):** Explain what it enables, not just the acronym
- **Copilot Studio:** Can assume some familiarity with Microsoft ecosystem
- **Skills (Claude):** Explain as "reusable instruction sets" or similar
- **Low-code:** Generally understood, but clarify scope if needed
**Principle:** Assume intelligence, not knowledge. Explain jargon without being condescending.
### Words/Phrases to AVOID
- "Game-changer"
- "Revolutionary"
- "Disruption" / "Disruptive"
- "Leverage" (as a verb)
- "Synergy"
- "Deep dive" / "Let's dive deep"
- "Unpack" (as in "let me unpack this")
- "At the end of the day"
- "It is what it is"
- "Touch base"
- "Circle back"
- "Low-hanging fruit"
---
## Humor and Personality
- **Humor style:** Mostly absent in professional content. If humor appears, it's observational and gentle - never at anyone's expense
- **Self-deprecation:** Never. Don't undermine your own credibility.
- **Cultural references:** Avoid pop culture references. Stick to professional/work context.
- **Analogies:** Use when helpful for explanation. Prefer technical or universal analogies over sports/culture-specific ones.
---
## Transitions and Flow
### How to Move Between Ideas
- Use questions: "So what does this mean for..."
- Use signposting: "Three things matter here..."
- Use revelation: "Here's what I discovered..."
- Use contrast: "The common approach is X. But what actually works is Y."
### How to Conclude
- Always tie back to practical implications
- End with a specific action the reader can take
- If no action possible, summarize the key insight clearly
- Occasionally invite discussion, but don't overuse "What do you think?" as a crutch
---
## Technical Depth Adaptation
Match technical depth to the target audience:
### For Leaders
- High-level concepts
- Business implications
- Strategic decisions
- ROI and outcomes
- Avoid implementation details
### For Low-Code Developers
- Practical tips and patterns
- Step-by-step guidance
- Tool-specific insights
- Common pitfalls and solutions
- Can include some technical detail
### For AI Architects
- Technical depth welcome
- Architecture patterns
- Integration approaches
- Trade-offs and decisions
- Code snippets when relevant
### For Power Users
- Productivity gains
- Workflow improvements
- Tool comparisons
- Time-saving techniques
- Practical shortcuts
**Key principle:** Always ensure technical content is well-explained and followable, regardless of depth. If you go technical, go all the way - don't half-explain.
---
_(List the terms you always explain, and the words/phrases you avoid.)_
## Language Guidelines
- **Always English** for all LinkedIn content
- Clear, international English accessible to non-native speakers
- Avoid idioms that don't translate well internationally
- Prefer simple sentence structures for complex ideas
- Never use em dashes (—) - use hyphens, commas, or separate sentences instead
---
- Write in one consistent language per post; keep it accessible to non-native readers.
- Prefer simple sentence structures for complex ideas.
## Instructions for Claude
When generating LinkedIn content for Kjell Tore:
1. **Start with his voice profile** (from this document)
2. **Check the content pillar** - which audience is this for?
3. **Choose appropriate storytelling technique** for the content type
4. **Ensure actionable conclusion** - what can the reader DO?
5. **Verify against Don'ts list** - no buzzwords, no criticism, no assumptions
6. **Keep length in check** - 800-1500 characters for posts
**Priority:** Sound like Kjell Tore > Optimize for algorithm
**Exception:** If a phrase or approach would harm reach (external links, engagement bait), flag it but maintain his voice in everything else.
---
## Update Log
- 2025-11-30: Initial voice profile created based on interview
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
<!-- Posts are saved here automatically by the Stop hook after each session where content is created. -->
<!-- Posts are appended here automatically by the Stop hook after sessions where content is created. -->
<!-- The voice-trainer agent uses these for 6-dimension drift scoring. Needs 5+ samples for reliable results. -->