fix(linkedin-studio): close v4.0.0 audit review findings (S8)

Close the 5 findings from the S7 /trekreview release gate (review.md, verdict BLOCK):

- BLOCKER: comment-multiplier "5x" reconciled to the canonical order-only framing
  (no fixed multiplier) in agents/engagement-coach.md, linkedin-growth-playbook,
  linkedin-formats.md — per algorithm-signals-reference.md ("do not quote a comment
  multiplier").
- BLOCKER: carousel rate "6.60%/6.6% (highest)" reconciled to "~7% top organic
  format" in linkedin-formats.md:42 (was self-contradicting :50) and
  assets/templates/carousel-templates.md.
- Lint hardening: test-runner.sh STALE_STATS now matches 6.60% + the 5x comment
  folklore and scans agents/ + assets/templates/ — the grep that defines the
  Phase-0 criterion now catches both BLOCKERs.
- MAJOR: onboarding.md command count 26 -> 27.
- MAJOR: add section-append-branch (production-path) tests for recordFirstHourPlan
  + recordOutreachContact against a template-layout fixture.
- MINOR: move date-scalar changes.push inside the write branch in state-updater.mjs.

Verify: node --test hooks/scripts/__tests__/*.test.mjs -> 92/92; bash
scripts/test-runner.sh -> 66/0/0. NO push until /trekreview re-confirms ALLOW/WARN.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-05-30 09:27:15 +02:00
commit 18b198f655
8 changed files with 104 additions and 13 deletions

View file

@ -187,8 +187,17 @@ echo "--- Algorithm-Stat Consistency ---"
# stale/competing magnitudes — and the unpublishable model brand/date — must not
# reappear anywhere else (cite the reference, do not restate). This enforces
# "one value per effect" by forbidding the known competing values from returning.
STALE_STATS='40-50%|25-40%|6\.6%|1\.92%|15x more reach|-40-60%|360Brew|January 2026'
STAT_HITS=$(grep -rnE "$STALE_STATS" references/ commands/ skills/ hooks/prompts/ CLAUDE.md README.md .claude-plugin/plugin.json 2>/dev/null | grep -v 'algorithm-signals-reference' || true)
#
# Pattern + scope must cover every file the criterion's grep covers. The carousel
# rate appears as the substring "6.60%" (which "6\.6%" does NOT match), and the
# retired comment multiplier as "5x more effective / 5x less valuable / 5x more
# reach than" — folklore the canonical reference forbids (it keeps only the
# engagement ORDER). Scope includes agents/ and assets/templates/ because the two
# v4.0.0 BLOCKERs survived there (agents/engagement-coach.md, assets/templates/
# carousel-templates.md). assets/templates/ — not all of assets/ — keeps the scan
# off gitignored runtime data (assets/analytics/, assets/drafts/).
STALE_STATS='40-50%|25-40%|6\.6%|6\.60%|1\.92%|15x more reach|5x more effective|5x less valuable|5x more reach than|-40-60%|360Brew|January 2026'
STAT_HITS=$(grep -rnE "$STALE_STATS" references/ commands/ skills/ hooks/prompts/ agents/ assets/templates/ CLAUDE.md README.md .claude-plugin/plugin.json 2>/dev/null | grep -v 'algorithm-signals-reference' || true)
if [ -z "$STAT_HITS" ]; then
pass "no stale algorithm magnitudes / model brand outside the canonical reference"
else