feat(linkedin): progressive onboarding — hide score until 3+ posts, suppress voice guardian noise

- session-start.mjs: count published posts, gate personalization score
  display and reminder behind >= 3 published posts
- voice-guardian.md: suppress LOW CONFIDENCE messages, silently skip
  drift scoring when < 5 samples
- state-file.template.md: add "general" default for expertise_areas
- onboarding.md: show friendly defaults message for new users, move
  score dashboard to returning-user flow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-04-11 00:50:18 +02:00
commit 8606abf5ee
4 changed files with 44 additions and 6 deletions

View file

@ -162,6 +162,13 @@ if (existsSync(STATE_FILE)) {
// Non-critical: don't block session start on pruning failure
}
// Count published posts for progressive onboarding
const recentPostsSection = stateContent.match(/^## Recent Posts\n([\s\S]*?)(?=\n## [^R]|\n## $|$)/m);
let publishedPostCount = 0;
if (recentPostsSection) {
publishedPostCount = (recentPostsSection[1].match(/^\s*[-\[]/gm) || []).length;
}
// Build status line
let statusLine = `LinkedIn: ${postsThisWeek}/${weeklyGoal} posts this week | Streak: ${currentStreak} days`;
if (lastPostDate && lastPostDate !== 'null') {
@ -177,12 +184,14 @@ if (existsSync(STATE_FILE)) {
statusLine += ` | ${followerCount}/${followerTarget} followers (${milestonePhase})`;
}
// Personalization score
// Personalization score (only show after 3+ published posts — progressive onboarding)
let pScore = null;
try {
const { score } = calculateScore(PLUGIN_ROOT);
pScore = score;
statusLine += ` | Personalization: ${score}%`;
if (publishedPostCount >= 3) {
statusLine += ` | Personalization: ${score}%`;
}
} catch { /* ignore */ }
// New creator window
@ -272,8 +281,8 @@ if (existsSync(STATE_FILE)) {
reminders += `- ${weekRemaining} posts remaining to hit weekly goal of ${weeklyGoal}. It's late in the week.\\n`;
}
// Personalization score check
if (pScore !== null && pScore < 50) {
// Personalization score check (only after 3+ posts — progressive onboarding)
if (pScore !== null && pScore < 50 && publishedPostCount >= 3) {
reminders += `- Personalization score is ${pScore}%. Run /linkedin:setup to improve content quality with your real voice, case studies, and audience data.\\n`;
}