diff --git a/commands/pipeline.md b/commands/pipeline.md index c63a294..220156f 100644 --- a/commands/pipeline.md +++ b/commands/pipeline.md @@ -76,7 +76,7 @@ Run the draft through optimization checks: - [ ] Hook 110-140 chars - [ ] Total 1,200-1,800 chars - [ ] No external links in body -- [ ] No corporate buzzwords +- [ ] No corporate buzzwords (leverage, synergy, paradigm shift, thought leader, disruptive, value proposition, ecosystem, holistic approach) - [ ] Topic aligns with expertise areas - [ ] Authentic voice (not AI-sounding) diff --git a/docs/hardening/log.md b/docs/hardening/log.md index 6b94eca..1cfba94 100644 --- a/docs/hardening/log.md +++ b/docs/hardening/log.md @@ -709,3 +709,79 @@ graceful degradation). - Disposition: **HARDENED** (1 edit, axis-c) · 3 recorded deferrals · axes a/b/d PASS. --- + +## Session 8 — Pipeline (`pipeline`) + +> S8 status: re-grounded the proposed predicates against the actual `pipeline.md` lines BEFORE +> talk (jerndisiplin: assert-after-read). Field-notes inbox **absent** at S8 → graceful no-op (SC-I). +> All `file:line` below are tool-grounded against the FINAL (post-edit) file. +> **Class call (operator-delegated → quality + precedent):** hybrid **guided/stateful + post-emitting +> on the final post** — the 8-step idea→publish→analysis pipeline produces ONE feed post (Step 2 draft +> `:57–62` → Step 3 gate `:66–86` → Step 6 publish `:135`), so the post predicates apply to that post; +> the orchestration around it (Step 0 load · Step 1 agent-deleg · Step 4 schedule/queue · Step 5 5x5x5 · +> Step 7 first-hour · Step 8 analysis · state-update `:186–199`) is the guided/stateful layer. + +### /linkedin:pipeline — full idea→publish→analysis pipeline, one 1,200–1,800-char feed post, 8 steps + +**INTENT.** `pipeline` is the Create journey's **end-to-end path**: from idea (or `$ARGUMENTS` topic) +through ideation → draft → optimize → schedule → 5x5x5 pre-engagement → publish → first-hour → 48h +analysis, with a deterministic state update. Post-emitting on the final post (hook **110–140**, length +**1,200–1,800**, no body link, no banned buzzword, topic→5 pillars); guided/stateful for the +orchestration (subagent targets + 5 node helpers resolve; graceful degradation). + +**SIMULATE.** +- **Persona (ICP):** the author — 1048 followers, "Validation", 5 pillars; direct/technical NO/EN voice. +- **Invocation:** `/linkedin:pipeline about AI-kodeassistenter i offentlig sektor` (topic in `$ARGUMENTS` + → Step 1 ideation skipped, `:41`). +- **Walk:** Step 0 load state/SKILL/voice → Step 1 skipped → Step 2 angle + draft to the structure + (`:57–62`) → **Step 3 optimize gate (`:66–86`, the gap)** → Step 4 schedule (+ Option-3 queue) → + Step 5 5x5x5 → Step 6 publish+clipboard → Step 7 first-hour → Step 8 analysis → state. +- **CONCRETE friction (spec-level, anchored — not a generated post):** at **Step 3** the inline quality + scorecard (`:75–81`) carried the buzzword line (`:79`) but as a **bare** `- [ ] No corporate buzzwords` + — no inline enumeration; it leaned on the scorecard reference (`:75` → `quality-scorecard.md:132`). A + draft opening *"How to leverage AI to drive synergy across the public-sector ecosystem…"* relies on the + operator cross-referencing a long shared asset rather than the inline gate the AI actually executes. + **Unlike S2/S3/S5/S6 the line was PRESENT** — the gap was that it was not self-contained, making + pipeline the odd-one-out among post-emitting commands (post `:134` · react `:131` · carousel `:123` · + video `:129` all enumerate inline). + +**EVALUATE (4 axes).** +- **(a) intention fidelity — PASS.** 8-step idea→publish→analysis delivers the description's promise. +- **(b) algorithm bar — PASS.** Step 3 signals (`:70–73`) cited to the SSOT (saves rank highest · a + 15+-word comment ≈ 2× a like · dwell >30 s +25 %); no body link (`:78`); 5x5x5 (`:120–133`); first-hour + (`:158–169`). No 30 %-claim → untouched by the open reference-consistency follow-up. +- **(c) MECHANICAL predicate (post-emitting, on the final post) — GAP → fixed.** hook 110–140 ✓ + (`:58/:76`) · length band ✓ (`:77` names 1,200–1,800) · no-body-link ✓ (`:78`) · topic→pillars ✓ + (`:80` + `:49` content-planner pillar-situating) · subagent resolves ✓ (`:49`) · **buzzword + present-but-not-self-contained ✗→fixed** (`:79` bare → enumerated inline). +- **(d) agent-wiring + graceful degradation — PASS.** `content-planner` + `trend-spotter` (`:49`) resolve + to real `agents/*.md`, both `subagent_type: linkedin-studio:`-namespaced. All 5 node helpers export with + matching signatures: `queueUpcoming(days=7)` (qm`:52`) · `queueAdd(…8 params)` (qm`:63`; pipeline passes + 8 args `:116`) · `queueFormatSummary` (qm`:112`) · `writeState` (su`:346`) · `updatePostTracking` + (su`:55`). Degradation: Step 1 (`:43–47`) handles no-planned-topic/no-input via AskUserQuestion; Step 0 + voice-samples is a soft read (no "REQUIRED" dead-end). + +**HARDEN (surgical — 1 edit, 1 file, grep-confirmed landed).** +- `commands/pipeline.md:79` — `- [ ] No corporate buzzwords` → `- [ ] No corporate buzzwords (leverage, + synergy, paradigm shift, thought leader, disruptive, value proposition, ecosystem, holistic approach)` + (same banned list as the other post-emitting gates + the scorecard). +- **Deferral (1, recorded):** the Step-2 component structure (`:58–62`: hook 110–140 + context 200–300 + + insight 400–800 + implication 200–300 + CTA 50–100) sums **960–1 640**, whose floor sits below the + Step-3 band floor 1,200 (`:77`) — **identical structure to batch's 3a (`:88–92`)**. NOT edited: + pipeline's Step-3 gate already NAMES the band (the S7 fix was naming the band on an *unenforceable* gate; + here it is already named), so a minimum-path draft is caught by the gate, not shipped — and S7 did not + edit the analogous 3a structure either. Editing Step 2 here would exceed precedent (over-engineering). + Below the axis-pass bar. +- **CONCRETE after:** the "leverage…synergy…ecosystem" draft now trips the Step-3 buzzword line inline + before optimize completes, without the operator cross-referencing the shared scorecard. + +**VERIFY.** +- `bash scripts/test-runner.sh` → `Passed: 81 · Failed: 0 · Warnings: 0`; counts **29/19** confirmed + (`ls commands/*.md|wc -l` == 29, `ls agents/*.md|wc -l` == 19; `git diff --stat` = `pipeline.md` only, + 1 insertion / 1 deletion). Only `.md` touched → hooks/analytics `node --test` not needed. +- Before/after delta: axis (c) buzzword sub-check is now self-contained at the load-bearing Step-3 gate + (was a bare, reference-dependent line). The 1 edit is the cause. +- Disposition: **HARDENED** (1 edit, axis-c) · 1 recorded deferral (Step-2 component-sum, gate-caught) · + axes a/b/d PASS. + +---