fix(linkedin-studio): S12 harden firsthour — re-source ~70% stat to first 15-30 min + drop CEA mislabel

Axis-b: command attributed ~70% of reach to the first 60 min (desc + body);
SSOT algorithm-signals-reference.md:81 pins ~70% to the first 15-30 min
sub-window (golden window 60-90 min). The command even cited that SSOT, so it
contradicted its own source. Re-attributed to '15-30 minutes decide ~70%',
framing the hour as the golden window worked.

Axis-a: footer labelled engagement-frameworks.md as carrying CEA, but CEA lives
in the SSOT + engagement-coach. Dropped 'CEA' from the footer label.

Verified clean: both agents namespaced + frontmatter name/model/color match
CLAUDE.md; recordFirstHourPlan exported/additive/$-safe; delegation + hand-off
sound. test-runner.sh 81/0/0; counts 29/19/26 unchanged. FIXED, 0 deferrals.

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-18 18:48:19 +02:00
commit bc325f0243
2 changed files with 58 additions and 4 deletions

View file

@ -1,7 +1,7 @@
---
name: linkedin:firsthour
description: |
Run the critical first hour after you publish — the window that decides ~70% of a post's
Run the critical first hour after you publish — its first 1530 minutes decide ~70% of a post's
reach. Builds a timestamped first-hour plan: a warm-up + reply-loop target list, draft
self-comments and CEA replies in your voice, and a minute-by-minute timeline — then persists
it to state so you can work it live. Hands off to the 48-hour monitor afterwards.
@ -19,8 +19,9 @@ allowed-tools:
# First Hour / Reply Loop — Post-Publish Engagement Sprint
You are a LinkedIn engagement operator. A post just went live (or is about to). The first
60 minutes set ~70% of its total reach, so this command turns that window into a concrete,
worked plan: who to engage, what to say, and exactly when — persisted to state.
1530 minutes decide ~70% of its reach and the first hour is the golden window you work it,
so this command turns that window into a concrete, worked plan: who to engage, what to say,
and exactly when — persisted to state.
## Step 0: Load Context
@ -114,5 +115,5 @@ delayed spike) with the post-feedback monitor — invoke it via `Task` with
## Reference Files
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/authentic-voice-samples.md` — voice matching for the draft comments
- `references/engagement-frameworks.md` — hook types, CEA, engagement hierarchy
- `references/engagement-frameworks.md` — hook types, engagement hierarchy
- `references/algorithm-signals-reference.md` — first-hour weighting, signal order, timing data

View file

@ -1021,3 +1021,56 @@ functionally safe but mis-labelled "(Step 3b)". Root cause: conflating "the phas
post-fix.
---
## Session 12 — Hardening (`firsthour`)
> S12 status: re-grounded STATE's predicates against the actual `firsthour.md` (119 lines) BEFORE talk.
> Class agreed steps 12: **post-publish engagement orchestrator — first-hour / reply-loop sprint.
> NOT post-emitting / feed-draft.** It builds a first-hour plan (target list + draft comments + timeline)
> by DELEGATING construction to `engagement-coach` (Step 2, `Task`), presents + auto-copies the draft
> comments (Step 3), persists via `recordFirstHourPlan` (Step 4), and hands off to `post-feedback-monitor`
> (Step 5). It emits COMMENT copy, not a feed post → the feed-format predicates (hook 110140, 1,2001,800
> band, no-body-link) do NOT apply; the inline comment band (2550 words, voice, no bait, no generic
> praise) is its own surface. Axis-d heavy: 2 agents + a state-writer + a hand-off chain.
**WHAT VERIFIED CLEAN (no change).**
- Agent wiring (axis-d): both `subagent_type: linkedin-studio:`-namespaced. `engagement-coach` frontmatter
= name / model:sonnet / color:magenta; `post-feedback-monitor` = name / model:opus / color:lime — both
match the CLAUDE.md table exactly.
- State-writer (axis-d): `recordFirstHourPlan` exported (`state-updater.mjs:235`), additive, `$`-safe
(function-replacements), stamps `last_firsthour_date` + `firsthour_active`, writes `## First-Hour Plans`
— exactly as Step 4 claims. `writeState` / `clipboard-helper.mjs` / both ref files present.
- Delegation sound (axis-d): CEA / 5x5x5 / first-hour / target-selection genuinely owned by
`engagement-coach.md` (whales / inner-circle, velocity table). Hand-off coach→monitor present (Step 5).
- Axis-c: the draft-comment band is consistent with the SSOT AI-slop suppression + the 15+-word floor.
- Principle 2 "comments rank above reactions" (`:111`) IS supported — SSOT `:38`
`saves > shares > quality comments > reactions/likes` + `:160`. (My initial narrow grep was a false
negative — withdrawn.)
**THE FIX (2 findings, 3 surgical edits, confined to prose + footer).**
1. [REWORK · axis-b] `~70%`-stat MISATTRIBUTED to "the first 60 min". The command (desc `:4`, body `:22`)
said the first hour / "first 60 minutes" decide ~70% of reach. SSOT `algorithm-signals-reference.md:81`
pins ~70% to the **first 1530 min** sub-window (golden window = 6090 min); the command even cites
that SSOT (`:118`) → it contradicted its own source. Fix: desc + body re-attributed to "first 1530
minutes decide ~70%", framing the hour as the golden window you work. (Operational guidance was already
front-loaded — the 5/15/30/60 velocity checkpoints were left unchanged.)
2. [REWORK-low · axis-a] Reference-label: `engagement-frameworks.md` does NOT contain CEA. The footer
labelled it "hook types, CEA, engagement hierarchy" — but CEA lives in `algorithm-signals-reference.md:162`
+ `engagement-coach.md`; the ref carries hook types + "Engagement Quality Hierarchy" only. Fix: dropped
"CEA" from the footer line (CEA already covered by the Step 2 coach-delegation + the SSOT pointer).
**VERIFY.**
- Re-grepped the final file: `~70%` is now attributed to "1530 minutes" at desc `:4` + body `:22`; no
"first 60" / "60 minutes set" attribution remains (`:66` "5/15/30/60-minute" is the velocity-checkpoints
table, unchanged). CEA now only at `:6 / :44 / :54 / :65 / :112` (desc + Step 2 + Step 3 + principle),
GONE from the footer; footer `:118` = "hook types, engagement hierarchy".
- `bash scripts/test-runner.sh``Passed: 81 · Failed: 0 · Warnings: 0`; counts **29/19/26** unchanged
(count / version / model / stat-consistency guards passed; .md-only edit, node/analytics tests not
triggered).
- **One NICE left (anti-gold-plating):** no degradation note for an `engagement-coach`-Task failure /
absent voice-samples (thin orchestrator, fully coach-dependent) — consistent with the suite's posture,
below the axis-pass bar, left.
- Disposition: **FIXED** (3 edits, all in `commands/firsthour.md`) · 0 deferrals · axes a/b/c/d all PASS
post-fix.
---