81 load-bearing stier i 16 kommandofiler pinnet til ${CLAUDE_PLUGIN_ROOT}/.
Rene prefikser: 81 inn / 81 ut, ingen linje lagt til eller fjernet.
FASIT-VERIFISERING (premiss-sjekk mot BASELINE, ikke bare HEAD): planens
68 linjer / 17 filer er RIKTIG mot sin egen baseline 882f6ee. HEAD ga 73/18 —
altså ekte kode-drift siden baseline (newsletter.md 11→15, calendar.md 0→1),
ikke en telle-feil som i N19.
SCOPE UTVIDET ETTER GO: planens grep (references|hooks/scripts|scripts) har en
blindsone — skills/ assets/ config/ render/ agents/ commands/ er samme defekt-
klasse og allerede anerkjent som pin-verdig av mønsteret (audit.md:24 og
competitive.md:22 pinner skills/, batch.md:214 og pipeline.md:211 pinner
assets/). Under planens scope kunne dens EGEN verifisering ikke passere:
quick.md:229-230 ville stått upinnet rett over en pinnet linje, og setup.md
(3 load-bearing Read, 0 pins) var ikke i settet i det hele tatt.
Full defektklasse: 117 linjer / 19 filer → 81 pinnet, 36 bevisst urørt.
KLASSIFISERINGSREGEL (utledet av mønsteret, ikke oppfunnet):
- PIN = stien skal åpnes/kjøres/skrives — Read/Reference/See-pekere,
ref-fil-lister, Bash/node/npm, edit-mål.
- PROSA = stien står som sitat bak en påstand, eller som beskrivelse av
oppførsel/plassering. Ingen inline «(see …)» er pinnet noe sted i repoet
(0 av 25 filer) — den grensen er arvet, ikke satt her.
36 BEVISST URØRTE, tre klasser:
1. Inline sitat/attribusjon (17): carousel.md:37 · pipeline.md:70,75 ·
newsletter.md:999,1082,1211,1433 · report.md:273 · video.md:69 ·
react.md:115 · calendar.md:87 · profile.md:28,34 · firsthour.md:112 ·
monetize.md:343,492 · outreach.md:922
2. Beskrivelse av oppførsel/plassering (10): newsletter.md:50,1097,1205,1694,
1744,1944 · report.md:45 · linkedin.md:218 · import.md:121,200
3. newsletter.md fase-tabellens Tooling-kolonne (9): :100,102,105,106,111,112,
113,115,116 — tabellen er et register, og hvert steg pinner sitt eget
faktiske kall i brødteksten.
S13-LINTEN (M0 data-dir): alle assets/-stiene som ble pinnet står eksplisitt i
lintens NEGATIVE13-unntaksliste, og lintens egen kommentar (test-runner.sh:552)
sier at shipped read-only assets SKAL bære ${CLAUDE_PLUGIN_ROOT}.
VERIFISERING: 76 unike pinnede stier hentet ut og resolvet med cwd=/tmp —
75 finnes. Den ene som ikke gjør det, config/personas.local.md, er en
gitignored valgfri fallback («else personas.template.md») som var pinnet på
newsletter.md:205 før denne endringen. Re-grep: gjenstående 36 er utelukkende
prosa, listet over.
Alle ti suiter grønne, alle floors uendret: test-runner 270/0 (269 assertions
>= floor 251) · trends 300/0 · analytics 202/0 · hooks 191/0 · brain 134/0 ·
editions 72/0 · render 63/0 · specifics-bank 45/0 · tests 35/0 ·
contract-gate 33/0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M31cw43gqiSSDrKzcwUi7L
Terminologi (memory no-thought-leadership-phrase, plugin-is-domain-general):
erstatter "thought leader(s)" med nøytral, kontekstvalgt ordbruk i de 8
load-bearing treffene — competitive.md:4,17,31,34 · monetize.md:4 ·
linkedin.md:145 · strategy.md:371 · outreach.md:229.
Fasit-korreksjon: planens "14 treff / 6 gjenværende" var en telle-feil.
`git grep` mot planens egen baseline 882f6ee gir 15 — settet er uendret
siden da, kun linkedin.md (118→145) og post.md (134→142) har flyttet seg.
Riktig regnestykke er 15 = 8 fiks + 7 urørte.
De 7 urørte er alle bevisste negative eksempler og står med vilje:
- pipeline.md:79, post.md:142, react.md:131 — buzzword-blocklisten i
pre-publish-sjekklisten (Content Quality Rule #4; frasen ER regelen)
- carousel.md:123, video.md:129 — samme blocklist sitert i caption-steget
- profile.md:79 — "thought leader"/"guru"/"ninja" som headline-antimønster
- profile.md:101 — en dårlig headline vist som avskrekkende eksempel
Monetize:
- Audience Size summerte 40 mot /25 (5+10+15+5+5). Follower-tiersene er nå
ett gjensidig utelukkende valg (pick ONE), så maks blir 15+5+5 = 25.
Alle fire dimensjoner summerer nå eksakt 25 → TOTAL /100 er ekte.
- Beskrivelsens "Works from 1K+ followers" motsa Stage 1 (0–1K, :92).
Staged formulering i stedet, konsistent med linkedin.md-gatingregelen
("work at any follower count, value compounds") og CLAUDE.md-tabellens
"unlocks at ~1K followers".
Verifisert: re-grep gir nøyaktig 7 gjenværende, alle på ikke-rør-lista.
ASCII-boksen måler 60 tegn på hver linje. Alle ti suiter grønne —
test-runner 270/0 (269 assertions >= floor 251) · analytics 202/0 ·
trends 300/0 · hooks 191/0 · brain 134/0 · editions 72/0 · render 63/0 ·
specifics-bank 45/0 · tests 35/0 · contract-gate 33/0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PbMAQ3MR3TvDtAznxRNbR8
First sub-pass of the S29 plugin-wide terminology scrub: the banned brand phrase
"thought leadership" (FORM A) removed from the user-facing command surface. 15 in-file
phrase occurrences across 9 commands re-sourced to neutral wording (post, video, strategy,
batch, setup, react, outreach, onboarding, monetize) — e.g. "thought leadership content
creator" → "content creator", "Select Thought Leadership Angle" → "Select Content Angle",
"Build thought leadership & authority" → "Build authority & influence", onboarding guide
→ "LinkedIn Studio onboarding guide".
Scope (operator-set): FORM A only. FORM B ("thought leader" as role, incl. the buzzword
denylist at post.md:134) left untouched. The 11 filename pointers to
references/thought-leadership-angles.md deferred to S29e (atomic rename + pointer update);
competitive.md/pipeline.md carry only pointers and are untouched here. Pure history
(CHANGELOG, docs/**) left intact per "history → git".
Verify: assertive non-filename FORM-A in commands/ = NONE; FORM B count unchanged (15);
diff +15/-15 across 9 files (1:1); gate 81/0/0; counts 29/19/26/6 + v0.5.0 unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qgzo6rxthw7KuxHjn5vyE
Resolves the orphan-agent audit finding by the locked default: wire all, no deletions, so the agent count stays 19. Per agent, added Task to the target command's allowed-tools and a coherent 'subagent_type: linkedin-studio:<name>' delegation at a real point in the command's flow (not a token grep-match).
Wired (agents 1-9 of 11): video-scripter -> video.md (Step 4); content-optimizer -> post.md (Step 7 refinement) + ab-test.md (2a.4 optimized challenger); analytics-interpreter -> report.md (Step 7, report mode) + analyze.md (Step 2, interpret mode); content-planner -> batch.md (Step 2) + pipeline.md (Step 1); trend-spotter -> batch.md (Step 1) + pipeline.md (Step 1); network-builder -> outreach.md (Step 3a); strategy-advisor -> strategy.md (Step 3); voice-trainer -> setup.md (Step 3a); post-feedback-monitor -> calendar.md (publish action, 48h monitor).
Deferred to their dedicated steps: #10 differentiation-checker -> Step 14 (short-form de-AI gate), #11 engagement-coach -> Step 16 (first-hour command). Namespaced subagent_type form requires a session reload before the wired agents are invokable.
Verify: each of the 9 has >=1 invocation in commands/; structural lint 61/61 (counts 19/26/25/6 intact); agent-fixtures 35/35; hook tests 62/62. Three-doc + version reconciliation deferred to Step 21 per the locked plan [skip-docs].
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Wave 2 / Step 7 of the remediation plan (research/02 D2/D4).
The tool parses the LinkedIn analytics CSV export, which has no saves/dwell — and
there is no self-serve API to pull them. Stop implying it tracks them:
- report.md: replace "Saves (10x weight) and expert comments (7-9x) are the
highest-impact signals" with honest wording — saves rank highest in the
engagement ORDER (cite references/algorithm-signals-reference.md, not a restated
coefficient), but are visible only in native LinkedIn post analytics (count-only,
~Sept 2025+) with no self-serve API, so this tool does not auto-track them; dwell
is internal to LinkedIn for organic posts.
- types.ts: document why PostMetrics intentionally omits saves/dwell (no ingest
source) so a future contributor does not "add the missing fields".
- strategy.md: reconcile two saves references (signature-content criterion +
authority scorecard) to say the count is read from native LinkedIn analytics, not
captured by this tool.
No new metric field, no manual-entry feature (operator Q3).
Verify: report.md has no "Saves (10x"/"highest-impact signals" and does say "no
self-serve API"; tsc --noEmit clean; analytics suite 106/106; structural lint
0 failed (report.md cites the reference, so stat-consistency stays green).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
BREAKING CHANGE: the marketplace slug, the agent namespace
(linkedin-studio:<agent>), and the runtime state-file path
(~/.claude/linkedin-studio.local.md) all change. Reinstall required;
existing state migrated in place (post metrics, streak, history preserved).
The /linkedin:* commands are unchanged — the command namespace is set
per-command in frontmatter and was always independent of the plugin slug.
Functionality is byte-identical to v2.4.0; this release is pure identity.
- dir + manifests: plugins/linkedin-studio + plugin.json + root marketplace.json
- agent namespace updated in commands/newsletter.md (only functional invoker)
- state path updated in 4 hook scripts + topic-rotation prompt + state template
- catch-all skill dir renamed skills/linkedin-studio (5 functional skills unchanged)
- docs + version bump to 3.0.0 across README badge, CHANGELOG, root README/CLAUDE.md
- historical records (CHANGELOG past entries, docs/ build artifacts,
config-audit v5.0.0 snapshots) intentionally retain the old slug
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add /ultraresearch-local for structured research combining local codebase
analysis with external knowledge via parallel agent swarms. Produces research
briefs with triangulation, confidence ratings, and source quality assessment.
New command: /ultraresearch-local with modes --quick, --local, --external, --fg.
New agents: research-orchestrator (opus), docs-researcher, community-researcher,
security-researcher, contrarian-researcher, gemini-bridge (all sonnet).
New template: research-brief-template.md.
Integration: --research flag in /ultraplan-local accepts pre-built research
briefs (up to 3), enriches the interview and exploration phases. Planning
orchestrator cross-references brief findings during synthesis.
Design principle: Context Engineering — right information to right agent at
right time. Research briefs are structured artifacts in the pipeline:
ultraresearch → brief → ultraplan --research → plan → ultraexecute.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>