chore(linkedin): v2.0.0 — import trim, router gating, full doc pass (S20)

This commit is contained in:
Kjell Tore Guttormsen 2026-05-28 06:53:55 +02:00
commit 8de481399e
12 changed files with 146 additions and 108 deletions

View file

@ -525,7 +525,7 @@ These are verified deviations from the fasit. Each is a correction-in-scope
- **Changes:** Remove the newsletter/blog adaptation path from `multiplatform.md` so there is exactly ONE entry to long-form (fasit §4.1). Add the langform trigger to `skills/linkedin-content-creation/SKILL.md` (fasit §5.3) AND sweep the catalog tables in all 6 `skills/*/SKILL.md` (N2). Add a router row for `newsletter` in `commands/linkedin.md`. (codebase analysis)
- **Reuses:** existing router-row format in `linkedin.md`; skill trigger format.
- **Test first:** *(archetype F)* grep proves only one newsletter entry; router row present; no dead newsletter path in multiplatform.
- **Verify:** `grep -Eci 'Step.*newsletter|newsletter (pipeline|workflow|edition)' commands/multiplatform.md && grep -c 'newsletter' commands/linkedin.md` → expected: **0** multi-step newsletter section in multiplatform (a one-line pointer is allowed, any wording); router row present in linkedin.md. (Robust: does not depend on exact pointer phrasing — only that no *pipeline/section* survives.)
- **Verify:** `[ "$(grep -Eci 'Step.*newsletter|newsletter (pipeline|workflow|edition)' commands/multiplatform.md)" = "0" ] && grep -q 'newsletter' commands/linkedin.md` → expected: **0** multi-step newsletter section in multiplatform (a one-line pointer is allowed, any wording); router row present in linkedin.md. (Robust: does not depend on exact pointer phrasing — only that no *pipeline/section* survives. **Fix v2.0 doc-pass:** the original `grep -Eci ... && grep -c ...` was `&&`-broken — `grep -c` returns the count as stdout but exits non-zero when count=0, so the chain short-circuited even on the desired "0 matches" outcome. Reworked to an explicit string-equality test.)
- **On failure:** revert — `git checkout -- commands/multiplatform.md commands/linkedin.md skills/`
- **Checkpoint:** `git commit -m "refactor(linkedin): single newsletter entry + skill trigger + router row (S11)"`
- **Manifest:**
@ -749,7 +749,7 @@ These are verified deviations from the fasit. Each is a correction-in-scope
- **Reuses:** `report.md` trends CLI; existing version-sync discipline.
- **Test first:** *(archetype F)* command count verified down; all version refs = 2.0.0 (grep); all 3 doc levels updated; router gating present.
- **Changes (count, corrected):** net command count = **24** = 27 today 5 removed (`templates`, `publish`, `authority`, `collab`, `speaking`) + 2 added (`newsletter`, `outreach`). (The fasit's "~23" was approximate; the exact arithmetic is 24. This is the binding number.)
- **Verify:** `test "$(ls commands/*.md | wc -l | tr -d ' ')" = "24" && ! grep -rIn '1\\.2\\.0' .claude-plugin/plugin.json CLAUDE.md README.md CHANGELOG.md` → expected: command count is **exactly 24**; zero `1.2.0` refs remain (all bumped to 2.0.0)
- **Verify:** `test "$(ls commands/*.md | wc -l | tr -d ' ')" = "24" && grep -q '"version": "2\\.0\\.0"' .claude-plugin/plugin.json && grep -q '^# LinkedIn Thought Leadership Plugin (v2\\.0\\.0)' CLAUDE.md && grep -q 'version-2\\.0\\.0-blue' README.md && grep -q '^## \\[2\\.0\\.0\\]' CHANGELOG.md` → expected: command count is **exactly 24**; every target file carries an **active** v2.0.0 marker (forward-positive assertion). **Fix v2.0 doc-pass:** original `! grep '1\\.2\\.0'` was overly strict — it would have blocked any release that correctly preserves historical changelog entries. Forward-positive form asserts the actual release intent (active version is 2.0.0) without requiring deletion of changelog history.
- **On failure:** revert — `git checkout -- commands/ README.md CLAUDE.md .claude-plugin/ CHANGELOG.md`
- **Checkpoint:** `git commit -m "chore(linkedin): v2.0.0 — import trim, router gating, full doc pass (S20)"`
- **Manifest:**
@ -844,9 +844,9 @@ End-to-end / cross-step checks (per-step Manifests run automatically during exec
- [ ] **Antakelse 2 (fonts resolve via `__dirname`, not fallback):** `cd /tmp && node <plugin>/render/build-pdf.mjs <sample.md>` produces a PDF embedding Newsreader/Inter (inspect PDF metadata / visual) — `[OPERATØR]` visual confirm
- [ ] `node --test 'agents/__tests__/*.test.mjs'` → fixture-lint tests pass
- [ ] `test "$(ls commands/*.md | wc -l | tr -d ' ')" = "24"` → command count is exactly 24 (27 5 removed + 2 added)
- [ ] `ls agents/*.md | grep -v README | wc -l`16 (content-tracker, personalization-scorer, performance-reporter, comment-strategist removed; fact-checker, persona-reviewer added)
- [ ] `ls agents/*.md | grep -v README | wc -l`**14** (content-tracker, personalization-scorer, performance-reporter, comment-strategist removed = 4; fact-checker, persona-reviewer added = +2; net 16 4 + 2 = 14). **Fix v2.0 doc-pass:** the original "16" was the pre-S20 figure carried over by mistake. **Correction:** S14 moved `agents/README.md` into the per-agent files, so `agents/README.md` no longer exists; the `grep -v README` filter is a no-op but harmless.
- [ ] `grep -rn '1\.2\.0' .claude-plugin/plugin.json CLAUDE.md README.md CHANGELOG.md` → zero matches (all bumped to 2.0.0)
- [ ] `grep -rn '/linkedin:templates\|/linkedin:publish\|/linkedin:authority\|/linkedin:collab\|/linkedin:speaking' commands/ agents/ skills/ hooks/ README.md CLAUDE.md agents/README.md` → zero stray route-refs to removed commands
- [ ] `grep -rEn '/linkedin:(templates|publish|authority|collab|speaking)\b|commands/(templates|publish|authority|collab|speaking)\.md|`:(templates|publish|authority|collab|speaking)`' commands/ agents/ skills/ hooks/ README.md CLAUDE.md` → zero stray route-refs to removed commands. **Fix v2.0 doc-pass:** original target set included `agents/README.md` (file removed in S14); extended to also match the shorthand backtick form (`` `:templates` ``, etc.) used in the pillar/skill tables — Step 21 doc-pass uncovered three live shorthand refs in `README.md:294` that the original grep would have missed.
- [ ] `python3 hooks/scripts/compile-hooks.py --check` → clean (no drift after hook-ref edits)
- [ ] `[OPERATØR]` one real edition produced end-to-end with persona-sweep before lock, reviewed in browser
- [ ] All 3 doc levels (plugin README + plugin CLAUDE + root README) reflect v2.0.0
@ -855,7 +855,7 @@ End-to-end / cross-step checks (per-step Manifests run automatically during exec
- **Files to create:** ~13 (newsletter.md, outreach.md, fact-checker.md, persona-reviewer.md, personas.template.md, edition-state.template.json, longform-quality-rules.md, OFL.txt, 4 render scripts under render/ + fonts/, plus test/fixture files)
- **Files to modify:** ~15 (multiplatform, linkedin router, quick, calendar, strategy, audit, analyze, import, profile, analytics-interpreter, engagement-coach, 6 skills, agents/README, CLAUDE.md, README.md, plugin.json, CHANGELOG, hook scripts, marketplace docs)
- **Files to remove:** 7 (templates, publish, authority, collab, speaking commands; content-tracker, personalization-scorer, performance-reporter, comment-strategist agents)
- **Files to remove:** **9** = 5 commands (`templates`, `publish`, `authority`, `collab`, `speaking`) + 4 agents (`content-tracker`, `personalization-scorer`, `performance-reporter`, `comment-strategist`). **Fix v2.0 doc-pass:** original "7" was a stale count from an earlier draft that listed only one of the two outreach precursors. The 5 + 4 arithmetic is binding.
- **Complexity:** high (21 sessions, multi-session resumption, cross-repo touchpoint, runtime-assumption checkpoint)
## Execution Strategy