Commit graph

8 commits

Author SHA1 Message Date
e17134ee9b refactor(linkedin-studio): S31c descriptive-%-scrub — platform-norm percentages asserted as fact -> SSOT
24 edits / 12 files (+26/-26). Unsourced platform/algorithm/audience percentages reconciled to
SSOT vocabulary (figure/proportion/multiplier unverified). Catalog + new sibling clusters
(64% follow-up x5, wrong-window 70% x4, Stage-2 6-10% x2) + borderlines (70% retention, 70%
mobile) + the ~3% save-worthy straggler (surfaced, not silent). The SSOT-sourced ~70% reach
figure is KEPT; only the wrong window corrected (60min/1h -> first 15-30 min). Sourced/computed
benchmarks kept (Buffer 178%/247%, Socialinsider 11%). KEPT C1: ~45% AI-comment figure (already
hedged correlational/medium-confidence). Gate 81/0/0 exit 0, counts 29/19/26 + v0.5.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qgzo6rxthw7KuxHjn5vyE
2026-06-20 09:54:44 +02:00
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
25b356fc5c fix(linkedin-studio): S29c terminology-scrub — "thought leadership" → neutral (references/)
Third sub-pass of the S29 plugin-wide terminology scrub: the banned brand phrase
"thought leadership" (FORM A) removed from the reference-doc surface — the largest pass
(2x S29a/S29b). 34 edits across 15 reference files. Vocabulary consistent with S29a/S29b:
"thought leadership angle(s)" -> "content angle(s)"; "thought leadership" (positioning/practice)
-> "authority ..."; content-type labels -> "authority content / authority posts"; the whole
"Value Test" family -> "Authority Value Test".

Established cross-pass equivalents closed: glossary:229 "Thought Leadership Value Test" ->
"Authority Value Test" (closes the S29b cross-directory naming gap); glossary:29 "8 universal
thought leadership angles" -> "content angles"; engagement-frameworks:137 "Standard Thought
Leadership Structure" -> "Standard Post Structure" (matches S29a post:98).

S29e filename locked this session: thought-leadership-angles.md -> content-angles.md (operator-
chosen). The canonical file's in-file title/headers scrubbed now for consistency (H1 ->
"# Content Angles"; "## The Authority Value Test"; "### Step 3: Test For Authority Value");
the file rename + all 20 pointers remain S29e (atomic).

Judgment-calls (operator-approved): thought-leadership-angles:212 "disguised as thought
leadership" -> "expertise" (S29b vocab); linkedin-formats:295 -> "Text-based content" (avoids
authority...authority echo); linkedin-visual-style:3 -> "For building authority,"; ai-content-
framework:380 "main LinkedIn thought leadership skill" -> "content skill" (avoids awkward
"authority skill"). Kept by design: video-strategy-guide:429 ironic quote; video-strategy-
guide:532 "TL;DW" false positive (too long, didn't watch).

Scope (operator-locked, inherits S29a/S29b): FORM A only. FORM B ("thought leader(s)" as role,
references = 4) untouched. The 3 thought-leadership-angles.md filename pointers in references/
deferred to S29e.

Verify: FORM A in references/ = only the kept ironic quote (video:429); canonical file in-file
FORM A = NONE; FORM B unchanged (4); filename pointers unchanged (3); no anchor links to changed
headers; gate 81/0/0; counts 29/19/26/6 + v0.5.0 unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qgzo6rxthw7KuxHjn5vyE
2026-06-20 05:44:05 +02:00
ed835e9024 fix(linkedin-studio): S28 ref-consistency B — format magnitudes → SSOT
Reconcile commands/video.md + references/linkedin-formats.md to the algorithm-signals SSOT
in one pass (20 edits/2 files). The unsourced "30% completion rate or zero distribution"
gate (7x) → "completion/dwell is a ranking input; shorter completes better; no published
hard completion gate". The 6 S27-folded link-penalty lines → "correlate with lower reach"
(incl. heading "The External Link Penalty" → "External Links and Lower Reach"). Six other
unsourced format magnitudes softened to direction-without-number (video 5.60% ER, Live
12-24x, polls 1.64x, 3x shares, Creator-Mode 35%). One internal contradiction fixed (3-sec
= 70% retention contradicted the already-reconciled three-second-folklore note).

Bucket D (this file's non-format coefficients: 47-50% reach-decline, AI-comment -30%/-55%,
hashtag -68%) left intact and deferred to S30, which is re-scoped to cover them + the other
files. Gate 81/0/0; counts 29/19 unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qgzo6rxthw7KuxHjn5vyE
2026-06-19 22:17:54 +02:00
b48e1305e6 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>
2026-05-30 09:27:15 +02:00
900a959c0b feat(linkedin-studio): video quality gate (captions + aspect guidance, drop 9:16 mandate)
Resolve the video-advice contradiction on the two surfaces this step owns
(research/03 D1-D3):

- commands/video.md: rename the "3-Second Test" to a "Muted-Autoplay Test"
  (front-load value for ~85% muted viewing; the "three-second hook" is
  cross-platform folklore, not a LinkedIn signal); make captions the
  enforceable spec (SRT or native auto-captions, indexed for search);
  aspect ratio as guidance (4:5/1:1 preferred for broad distribution,
  9:16 opt-in for the vertical video tab, crops to 1:1 on desktop); add
  MP4-default + warn-only MOV/AVI + official upload limits to the
  pre-recording reminder.
- references/linkedin-formats.md: reframe the 9:16 "distribution boost"
  as uncorroborated heuristic; 4:5 "deprioritized" -> 4:5/1:1 preferred;
  drop the "3-second hook"; MP4 safe-default + warn-only MOV/AVI; replace
  "good video rewarded more than ever" with the honest "per-video reach
  declining; documents/carousels out-engage video."

algorithm-signals-reference.md (the canonical magnitude source) was
already reconciled in Phase 0 (line 56 reads "declining ... 4:5/1:1
preferred, captions are the enforceable spec") and carries no boost copy,
so it is intentionally untouched here — and it is not in this step's
manifest.

Verify: grep 'must be 9:16|9:16 (1080|3-second hook' video.md
linkedin-formats.md -> none; 'captions' video.md -> 5; 'deprioritized'
linkedin-formats.md -> none; structure lint 61/61.

KNOWN RESIDUAL (flagged for follow-up, NOT in this step's scope):
- references/linkedin-growth-playbook-2025-2026.md:216 still carries a
  "9:16 ... distribution boost" line. That file is owned by Step 17, but
  Step 17's changes are newsletter-distribution — the video line would
  fall through. Fold this into Step 17 or the review gate.
- references/video-strategy-guide.md:300 still says "the 3-second test
  determines 70% of retention." That file is owned by NO plan step
  (orphaned) — needs a home. Surface at session end for an operator
  decision.

Plan Step 15 (Wave 4 S2). Counts unchanged.
[skip-docs]: tre-doc + version bump deferred to Step 21 per remediation plan.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 02:37:51 +02:00
3dd8f40c31 fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 20:32:17 +02:00
Kjell Tore Guttormsen
40986575b6 feat(ultraplan-local): v1.6.0 — /ultraresearch-local deep research command
Add /ultraresearch-local for structured research combining local codebase
analysis with external knowledge via parallel agent swarms. Produces research
briefs with triangulation, confidence ratings, and source quality assessment.

New command: /ultraresearch-local with modes --quick, --local, --external, --fg.
New agents: research-orchestrator (opus), docs-researcher, community-researcher,
security-researcher, contrarian-researcher, gemini-bridge (all sonnet).
New template: research-brief-template.md.

Integration: --research flag in /ultraplan-local accepts pre-built research
briefs (up to 3), enriches the interview and exploration phases. Planning
orchestrator cross-references brief findings during synthesis.

Design principle: Context Engineering — right information to right agent at
right time. Research briefs are structured artifacts in the pipeline:
ultraresearch → brief → ultraplan --research → plan → ultraexecute.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 08:58:35 +02:00