diff --git a/commands/firsthour.md b/commands/firsthour.md index 4697da6..bfdcd1d 100644 --- a/commands/firsthour.md +++ b/commands/firsthour.md @@ -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 15–30 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. +15–30 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 diff --git a/docs/hardening/log.md b/docs/hardening/log.md index c268d15..9c4d334 100644 --- a/docs/hardening/log.md +++ b/docs/hardening/log.md @@ -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 1–2: **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 110–140, 1,200–1,800 +> band, no-body-link) do NOT apply; the inline comment band (25–50 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 15–30 min** sub-window (golden window = 60–90 min); the command even cites + that SSOT (`:118`) → it contradicted its own source. Fix: desc + body re-attributed to "first 15–30 + 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 "15–30 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. + +---