fix(linkedin-studio): S16 harden analyze — drop unsourced 5+ hashtags penalty

S16 analyze through the v2 interactive quality gate (analytics/diagnostic class —
prose-diagnosis + conditional agent-delegation, NOT CLI-backed: allowed-tools
Read/AskUserQuestion/Task, no Bash). 1 finding, 1 surgical edit in
commands/analyze.md, grep-confirmed + grounded persona sim (scenario 1, reach -50%):

- FUNN (axis-b'): Step 4 penalty checklist asked 'Did you use 5+ hashtags in posts?'
  — a concrete-number penalty absent from BOTH the SSOT
  (algorithm-signals-reference.md: no hashtag claim, deliberately omitted) AND the
  cited troubleshooting-guide.md (its own checklist is 6 items, no hashtag).
  Command-only unsourced folklore. Dropped analyze.md:149; kept :150 'tag unrelated
  people for reach' (defensible — aligns with SSOT bait/pod-suppression direction,
  no numeric claim).

Verified clean: interpret-mode wiring (analytics-interpreter resolves, real default
mode agent:6,39,141), shared data-dir seam (analyze:41 <-> agent:49),
/linkedin:profile cross-ref, graceful-degradation IF, saves/dwell honesty (no Bash,
no over-promise). External-link hard-penalty framing in troubleshooting-guide.md:127
vs SSOT logged as reference-pass follow-up (out of S16 scope — not touched).

Gate: test-runner 81/0/0 exit 0; counts 29/19 unchanged (.md-only).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qgzo6rxthw7KuxHjn5vyE
This commit is contained in:
Kjell Tore Guttormsen 2026-06-19 06:34:20 +02:00
commit 7362d8e4b1
2 changed files with 51 additions and 1 deletions

View file

@ -146,7 +146,6 @@ Run through this checklist:
- [ ] Are topics all over the place recently?
- [ ] Did you receive generic AI-like comments?
- [ ] Did you post way more/less frequently than usual?
- [ ] Did you use 5+ hashtags in posts?
- [ ] Did you tag unrelated people for reach?
## Step 5: Reach Drop Severity Assessment

View file

@ -1237,3 +1237,54 @@ functionally safe but mis-labelled "(Step 3b)". Root cause: conflating "the phas
post-fix (b N/A — not feed-emitting).
---
### /linkedin:analyze — diagnose why content underperforms (reach drop / low traction / low engagement) → recovery plan, analytics grounded via analytics-interpreter
**INTENT.** Prose-diagnosis + conditional agent-delegation — **NOT CLI-backed** (`allowed-tools: Read,
AskUserQuestion, Task`, no Bash, `analyze.md:912`). Measure-journey diagnostic. Steps 18 are a
faithful restatement of `references/troubleshooting-guide.md` (drop-% tiers, 14-day recovery protocol,
timeline table, prevention checklist).
**SIMULATE.** ICP author, scenario 1 (reach 50 %, 1 wk ago, 2 off-pillar posts, 1 body-link). Step 1
picks "Reach suddenly dropped" (`:32`); Step 2 analytics present → `Task
subagent_type: linkedin-studio:analytics-interpreter` interpret-mode (`:41`); Step 3 → pattern "Good
Content, Low Reach" (`:95102`); Step 4 checklist flags external link + topic drift — **and, before fix,
asked "5+ hashtags?" (`:149`)**; Step 5 → "Algorithmic suppression likely" → 14-day recovery
(`:167173`); Step 6 → `/linkedin:profile` (`:189`); Step 7 → "Moderate 5070 %: 23 wks initial"
(`:231`). Friction: exactly one unsourced checklist item.
**EVALUATE (4 axes; analytics-class predicate = graceful degradation + saves/dwell honesty).**
- **axis-a (intent): PASS** — faithful render of the cited guide; AskUserQuestion → framework → recovery
flow intact.
- **axis-b (algorithm-claim vs SSOT — feed-bar reframed since not feed-emitting): 1 FUNN.** `:149`
"Did you use 5+ hashtags in posts?" is a penalty check absent from **both** the SSOT
(`grep hashtag references/algorithm-signals-reference.md` = NONE — hashtags deliberately omitted) **and**
the cited `references/troubleshooting-guide.md` (NONE; its own penalty checklist is 6 items `:101106`).
Command-only unsourced folklore carrying a concrete number ("5+").
- **axis-c (saves/dwell honesty): PASS** — no Bash; never claims to read analytics itself; delegates
honestly; no saves/dwell mention anywhere → no over-promise.
- **axis-d (wiring + degradation): PASS**`linkedin-studio:analytics-interpreter` resolves;
interpret-mode is real/default (`agent:6,39,141`); shared seam `${LINKEDIN_STUDIO_DATA:-…}/analytics/`
(`analyze:41``agent:49`); `/linkedin:profile` resolves (`commands/profile.md`); "if analytics exists
→ delegate, else self-report" IF-branch (`:41`); all 4 referenced files exist.
**HARDEN (1 surgical edit, `commands/analyze.md`).**
1. [REWORK · axis-b] Dropped `:149` "Did you use 5+ hashtags in posts?" — unsourced in both the SSOT and
the cited guide. Step 4 checklist 8 → 7 items; **kept** `:150` "tag unrelated people for reach"
(defensible — aligns with the SSOT bait/pod-suppression direction, no numeric claim).
**Out-of-scope (logged follow-up, NOT touched in S16).** `troubleshooting-guide.md:127` "External link
overuse — LinkedIn penalizes directing traffic away" contradicts the SSOT (`:6975`: LinkedIn *denies* an
intentional penalty; soften to "body links correlate with lower reach"). `analyze.md:102` only echoes the
milder guide wording verbatim (`guide:15`) — softening the command alone would drift it from its own cited
source, so the real fix belongs to the reference-consistency pass.
**VERIFY.**
- Re-grepped final file: `grep hashtag commands/analyze.md`**NONE**; Step 4 checklist now 7 items
(`:143149`), `:149` = "tag unrelated people for reach" (survived).
- `git diff --stat` = 1 file, **1 deletion**.
- `bash scripts/test-runner.sh``Passed: 81 · Failed: 0 · Warnings: 0`, **exit 0**; counts **29/19**
unchanged (.md-only edit).
- Disposition: **FIXED** (1 edit, `commands/analyze.md`) · 0 deferrals · axes a/c/d PASS, b PASS post-fix.
---