linkedin-studio/agents
Kjell Tore Guttormsen 1bab1d6df1 refactor(linkedin-studio): S30 magnitude-scrub (discrete-% class) — unsourced reach/engagement penalties -> SSOT
Hardening-class, NOT re-hardening: surgical SSOT-reconciliation of discrete percentage
penalties/declines stated as fact with no primary source in the SSOT
(references/algorithm-signals-reference.md). Same tool-grounded discipline as S27/S28
(read-and-show -> grep-confirm -> re-grep final). Re-grep surfaced drift + same-class siblings
beyond the plan's stored list; all surfaced and operator-approved before edit.

Scope: the discrete-% reach/engagement-penalty class only. The unsourced "Nx" reach/format
MULTIPLIER class (~50 instances across ~15 files) is a separate, larger pass -> deferred to S31
(operator: run everything, across multiple sessions).

HARDEN (20 edits, 7 files):
- linkedin-formats.md (5): :6 47-50% decline + :7 15%->31% feed-share -> directional; :176
  AI-comment 30%/55% -> ~45% less engagement (correlational, medium); :231/:279 hashtags -68%
  -> diminishing returns, no discrete figure.
- linkedin-growth-playbook (6): :158 47-50% decline (twin of formats:6) + :166 hashtags -68%
  + :224/:225 post-length 25%/32% + :435/:828 posting-frequency 25% -> directional, no
  discrete figure. (:221 1.17x multiplier folded in per operator approval; the rest of the
  multiplier class -> S31.)
- glossary.md (2): :91 engagement-bait -30-50% + :235 topic-gap -15-25% -> "correlate with
  lower reach, no discrete figure".
- engagement-coach.md (2): :195 55% + :455 -30%/-55% AI-comment -> ~45% less engagement
  (correlational), actively suppressed.
- post-feedback-monitor.md (1): :330 -25%/post -> "tends to split your own audience".
- ab-testing-framework.md (1): :66 hashtags -68% -> no discrete figure.
- poll-strategy-guide.md (2): :20 / :205 poll-overuse penalty -> declining effectiveness
  (directional).

KEPT INTACT (operator-locked / different class): engagement-pod + AI-slop suppression framing
(SSOT high-confidence); firsthour:112 (no number); poll:206 / poll:3 (qualitative); growth:567
conversion-rate; formats:268 list item.

VERIFY: discrete-% penalty/decline class re-grep across the 7 files -> NONE; leave-items intact;
bash scripts/test-runner.sh -> Passed 81 / Failed 0 / Warnings 0, exit 0; counts 29/19/26/6 +
v0.5.0 unchanged (.md prose only). Disposition: FIXED (20 edits, 7 files), one atomic commit,
local (push held).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qgzo6rxthw7KuxHjn5vyE
2026-06-20 09:08:59 +02:00
..
__tests__ feat(linkedin-studio): v3.1.0 — Endring 9 adversarial review-pakke + per-artefakt personas 2026-05-29 13:01:24 +02:00
fixtures feat(linkedin-studio): v3.1.0 — Endring 9 adversarial review-pakke + per-artefakt personas 2026-05-29 13:01:24 +02:00
analytics-interpreter.md test(linkedin-studio): M0-16 — lint: EXPECT_REFS=26 + no-bare-path + no-pin + SC2 dry-run (R1) + drop 5 ANALYTICS_ROOT pins it caught 2026-06-18 13:11:50 +02:00
content-optimizer.md docs(linkedin-studio): M0-15 — repoint remaining prose families + route ab-tests/plans 2026-06-18 13:04:18 +02:00
content-planner.md refactor(linkedin-studio): S29e terminology-scrub — rename thought-leadership-angles.md -> content-angles.md + all pointers 2026-06-20 06:39:49 +02:00
content-repurposer.md refactor(linkedin-studio): S29e terminology-scrub — rename thought-leadership-angles.md -> content-angles.md + all pointers 2026-06-20 06:39:49 +02:00
content-reviewer.md feat(linkedin-studio): make long-form review language configurable [skip-docs] 2026-05-30 00:55:04 +02:00
differentiation-checker.md refactor(linkedin-studio): S29e terminology-scrub — rename thought-leadership-angles.md -> content-angles.md + all pointers 2026-06-20 06:39:49 +02:00
editorial-reviewer.md feat(linkedin-studio): make long-form review language configurable [skip-docs] 2026-05-30 00:55:04 +02:00
engagement-coach.md refactor(linkedin-studio): S30 magnitude-scrub (discrete-% class) — unsourced reach/engagement penalties -> SSOT 2026-06-20 09:08:59 +02:00
fact-checker.md feat(linkedin): v2.2.0 — harden longform gates from 2nd production run 2026-05-28 20:50:56 +02:00
fact-reviewer.md feat(linkedin-studio): v3.1.0 — Endring 9 adversarial review-pakke + per-artefakt personas 2026-05-29 13:01:24 +02:00
language-reviewer.md feat(linkedin-studio): make long-form review language configurable [skip-docs] 2026-05-30 00:55:04 +02:00
network-builder.md refactor(linkedin-studio): S29e terminology-scrub — rename thought-leadership-angles.md -> content-angles.md + all pointers 2026-06-20 06:39:49 +02:00
persona-reviewer.md feat(linkedin): v2.2.0 — harden longform gates from 2nd production run 2026-05-28 20:50:56 +02:00
post-feedback-monitor.md refactor(linkedin-studio): S30 magnitude-scrub (discrete-% class) — unsourced reach/engagement penalties -> SSOT 2026-06-20 09:08:59 +02:00
strategy-advisor.md refactor(linkedin-studio): S29e terminology-scrub — rename thought-leadership-angles.md -> content-angles.md + all pointers 2026-06-20 06:39:49 +02:00
trend-spotter.md refactor(linkedin-studio): S29e terminology-scrub — rename thought-leadership-angles.md -> content-angles.md + all pointers 2026-06-20 06:39:49 +02:00
video-scripter.md refactor(linkedin-studio): S29e terminology-scrub — rename thought-leadership-angles.md -> content-angles.md + all pointers 2026-06-20 06:39:49 +02:00
voice-scrubber.md docs(linkedin-studio): M0-15 — repoint remaining prose families + route ab-tests/plans 2026-06-18 13:04:18 +02:00
voice-trainer.md fix(linkedin-studio): S29b terminology-scrub — "thought leadership" → neutral (agents/) 2026-06-19 22:53:14 +02:00