linkedin-studio/commands
Kjell Tore Guttormsen ff52ec8577 fix(linkedin-studio): S22 harden outreach — add missing Bash grant, drop orphan WebFetch+Write, re-source fabricated pod/DM stats to SSOT
Outreach is the first command in the hardening queue that both delegates to an
agent (network-builder) and mutates real state (recordOutreachContact), so the
weight fell on axis-d. Five fixes across two files (operator-approved scope
extension to the SSOT-diverging guide source):

- allowed-tools: ADD Bash (Step 8c runs `node state-updater.mjs --record-outreach`
  and needs it — firsthour precedent grants Bash for the same pattern; the command
  promised a mutation it couldn't execute), DROP orphan WebFetch + Write grants
  (zero body use; :410/:1040 "Write a post" is prose). Now
  Read·Glob·WebSearch·AskUserQuestion·Task·Bash.
- Step 7 pod-warning (axis-b'): replaced fabricated magnitudes ("30-55% reach
  reduction", "shadow suppression", "credibility score", "penalizes",
  "Post-March 2025", "low dwell") with the SSOT statement
  (algorithm-signals-reference.md:98 — demote out of "Most Relevant" / scope to
  own network / restrict repeat offenders) + cite.
- :652 DM-amplification "2-3x first-hour" (axis-b'): re-attributed 2-3x to collab
  reach (where SSOT places it), kept the first-hour effect qualitative.
- collaborations-guide.md:349-370 (axis-b', scope extension): same SSOT rewrite of
  the "March 2025 Crackdown" section so the Step 7 fix can't be re-rendered from a
  stale reference (dropped "shadow banning ALL future content / 90+ days / 6+
  months / permanent penalty" + speculative detection methods).

Verify: re-grep both files clean (orphans/fabricated stats NONE, Bash :21, SSOT
text in place); recordOutreachContact throwaway-fixture 10/10 PASS (additive,
$-safe, newest-first, untouched undeclared fields); 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
2026-06-19 20:33:30 +02:00
..
ab-test.md fix(linkedin-studio): S18 harden ab-test — soften "(Tue-Thu, 8-9 AM optimal)" precision over-claim to "(Tue-Thu mornings)" 2026-06-19 13:55:41 +02:00
analyze.md fix(linkedin-studio): S16 harden analyze — drop unsourced 5+ hashtags penalty 2026-06-19 06:34:20 +02:00
audit.md fix(linkedin-studio): S17 harden audit — drop orphan WebFetch grant + re-source carousel save-rate claim to SSOT 2026-06-19 13:24:43 +02:00
batch.md fix(linkedin-studio): S7 harden batch — format-aware length band on per-post quality check 2026-06-18 15:29:31 +02:00
calendar.md fix(linkedin-studio): S13 harden calendar — concrete Reschedule snippet + correct camelCase exports 2026-06-18 20:19:31 +02:00
carousel.md fix(linkedin-studio): S5 harden carousel — Step-5 caption buzzword gate 2026-06-18 14:28:07 +02:00
competitive.md fix(linkedin-studio): S20 harden competitive — drop orphan WebFetch grant from allowed-tools 2026-06-19 15:05:48 +02:00
create.md feat(linkedin-studio): S14 — journey layer (create/measure front-doors + 5-journey router), v4.1.0 2026-05-30 21:27:06 +02:00
first-post.md docs(linkedin-studio): M0-14 — D3 path-convention + voice-readers prototype 2026-06-18 12:38:17 +02:00
firsthour.md fix(linkedin-studio): S12 harden firsthour — re-source ~70% stat to first 15-30 min + drop CEA mislabel 2026-06-18 18:48:19 +02:00
headless-review.md feat(linkedin-studio): v3.1.0 — Endring 9 adversarial review-pakke + per-artefakt personas 2026-05-29 13:01:24 +02:00
import.md fix(linkedin-studio): S14 harden import — drop baseline/metadata over-promise, prose now matches CLI 2026-06-18 20:56:47 +02:00
linkedin.md feat(linkedin-studio): S14 — journey layer (create/measure front-doors + 5-journey router), v4.1.0 2026-05-30 21:27:06 +02:00
measure.md docs(linkedin-studio): M0-15 — repoint remaining prose families + route ab-tests/plans 2026-06-18 13:04:18 +02:00
monetize.md fix(linkedin-studio): S21 harden monetize — drop orphan WebFetch+Write grants, re-source fabricated DM-conversion decay curve to SSOT 2026-06-19 15:23:28 +02:00
multiplatform.md fix(linkedin-studio): S4 harden multiplatform — Step-0 empty-source fallback + cross-platform buzzword line 2026-06-18 14:10:17 +02:00
newsletter.md docs(linkedin-studio): M0-15 — repoint remaining prose families + route ab-tests/plans 2026-06-18 13:04:18 +02:00
onboarding.md docs(linkedin-studio): M0-15 — repoint remaining prose families + route ab-tests/plans 2026-06-18 13:04:18 +02:00
outreach.md fix(linkedin-studio): S22 harden outreach — add missing Bash grant, drop orphan WebFetch+Write, re-source fabricated pod/DM stats to SSOT 2026-06-19 20:33:30 +02:00
pipeline.md fix(linkedin-studio): S8 harden pipeline — Step-3 buzzword gate enumerated inline 2026-06-18 17:15:46 +02:00
pivot.md fix(linkedin-studio): S11 harden pivot — moderate to-phase reset skipped fact-check (off-by-one) 2026-06-18 18:34:37 +02:00
post.md fix(linkedin-studio): S2 harden post — Step-5 buzzword gate + scorecard hook-band consistency 2026-06-18 13:32:56 +02:00
profile.md fix(linkedin-studio): S9 — full algorithm-magnitude sweep + lint rebuilt to the criterion 2026-05-30 09:56:49 +02:00
quick.md fix(linkedin-studio): S1 hardening — method calibration (quick) + Start journey 2026-05-31 06:46:11 +02:00
react.md fix(linkedin-studio): S3 harden react — Step-6 buzzword gate + WebFetch-failure fallback (both paths) 2026-06-18 13:44:00 +02:00
report.md fix(linkedin-studio): S15 harden report — drop baselines/metadata phantom, fix engagement_rate flag + JSON schema fields 2026-06-19 06:18:44 +02:00
setup.md docs(linkedin-studio): M0-15 — repoint remaining prose families + route ab-tests/plans 2026-06-18 13:04:18 +02:00
strategy.md fix(linkedin-studio): S19 harden strategy — drop orphan WebFetch grant from allowed-tools 2026-06-19 14:02:44 +02:00
video.md fix(linkedin-studio): S6 harden video — caption buzzword gate + voice-samples graceful degradation 2026-06-18 15:20:05 +02:00