diff --git a/assets/checklists/quality-scorecard.md b/assets/checklists/quality-scorecard.md index 6990334..5dab248 100644 --- a/assets/checklists/quality-scorecard.md +++ b/assets/checklists/quality-scorecard.md @@ -29,7 +29,7 @@ Rate each criterion 0-3: | Criterion | Score | Notes | |-----------|-------|-------| -| Works in 140 characters | /3 | Mobile threshold | +| Works in 110-140 characters | /3 | Mobile band (floor + ceiling) | | Creates curiosity gap | /3 | Click-through driver | | Promises clear value | /3 | Worth reading? | | **Subtotal** | /9 x 2 = **/18** | | @@ -111,7 +111,7 @@ Before posting, verify your profile supports the post's topic (topic/interest re For quick posts, use this simplified check: 1. On-topic for my expertise? (Y/N) -2. Hook works in 140 chars? (Y/N) +2. Hook works in 110-140 chars? (Y/N) 3. Clear value delivered? (Y/N) 4. Ends with engagement prompt? (Y/N) 5. No external links in body? (Y/N) @@ -129,6 +129,7 @@ Before finalizing any post, verify: - [ ] Character count within optimal range - [ ] Short paragraphs with white space - [ ] Tone is authentic, not corporate +- [ ] No corporate buzzwords (leverage, synergy, paradigm shift, thought leader, disruptive, value proposition, ecosystem, holistic approach) - [ ] Provides genuine value to readers - [ ] CTA is specific and natural - [ ] Passes the "mobile test" (readable on phone) diff --git a/commands/post.md b/commands/post.md index 2e7a93a..b502c70 100644 --- a/commands/post.md +++ b/commands/post.md @@ -131,6 +131,7 @@ Before presenting, verify against `assets/checklists/quality-scorecard.md`: - [ ] Provides genuine value to readers - [ ] CTA is specific and natural - [ ] No external links in post body +- [ ] No corporate buzzwords (leverage, synergy, paradigm shift, thought leader, disruptive, value proposition, ecosystem, holistic approach) - [ ] Topic aligns with user's 5 core expertise areas - [ ] Passes thought leadership test (helps someone decide or think differently) diff --git a/docs/hardening/log.md b/docs/hardening/log.md index 47e1fc3..9b6efa0 100644 --- a/docs/hardening/log.md +++ b/docs/hardening/log.md @@ -245,3 +245,70 @@ plan, "command file modified" is not a coverage predicate — the `log.md` entry Disposition: **PASS, no edit** · 0 deferrals. --- + +## Session 2 — Create I (`post`) + +> S2 status: the v1 autonomous attempt fabricated and was reverted (→ v2 method; see `plan.md` +> header). This is the v2 re-run: parked at step 5 across a `/clear`, re-grounded from STATE.md's +> two P4 findings against the actual file lines before talking (jerndisiplin: assert-after-read). +> Field-notes inbox **absent** at S2 → graceful no-op (SC-I). + +### /linkedin:post — interactive full-workflow post (angle→write→quality→refine→publish), 1200–1800 chars + +**INTENT.** `post` is the Create journey's full path: from raw material (data / article / experience / +observation / opinion / question) to a publishable 1,200–1,800-char thought-leadership post via an +8-step workflow — angle → format → structure+write → quality check → present → refine → pre-publish +→ deterministic state update. Post-emitting, so it must honor the content bar mechanically (hook +**110–140**, length **1,200–1,800**, no body links, no banned buzzword, topic→5 pillars) and the +algorithm bar (hook decisive before the mobile fold, links→first comment, native, comment-inviting +CTA without bait, de-AI substance signals). + +**SIMULATE.** +- **Persona (ICP):** the author — 1048 followers, "Validation", 5 pillars; direct/technical NO/EN voice. +- **Invocation:** `/linkedin:post about AI-kodeassistenter i offentlig sektor`. +- **Walk:** Step 0 load state/SKILL → Step 1 type=Opinion → Step 2 angle (contrarian) → Step 3 medium + text → Step 4 structure (hook 110–140 ✓ internally) → **Step 5 quality check (the gap)** → Step 6 + present+clipboard → Step 7 refine → Step 8 pre-publish + state. +- **CONCRETE friction (spec-level, the live proof — anchored, not a generated post):** at **Step 5** + the quality checklist (`post.md:127–135`, 9 items) had **no buzzword line**, so a draft opening + *"How to leverage AI to drive synergy in the public sector…"* would pass Step 5 unflagged — the + banned-list (content rule #4, `CLAUDE.md:124`) was never enforced at the gate. Step 5 also routes to + `quality-scorecard.md` (`post.md:125`), which **self-contradicted on the hook bound**: l.32 "Works in + **140** characters" + l.114 "Hook works in **140** chars?" (upper-only) vs l.128 "**110-140**" — the + same one-sided bound S1 fixed in the command files, surviving in the shared asset. +- **Friction log:** `post.md` itself is internally consistent on the hook (110–140 at l.100/113/127); + the only command-side gap is the missing Step-5 buzzword line. The shared scorecard carried both + gaps (buzzword absent + two one-sided hook bounds). Scorecard is shared by 8 surfaces + (`pipeline · video · post · react · batch` + 3 skills) — fixing it is high-leverage, operator-approved. + +**EVALUATE (4 axes).** +- **(a) intention fidelity — PASS.** Full 8-step workflow delivers the description's promise. +- **(b) algorithm bar — PASS.** No body link (`post.md:133/176`); comment-inviting CTA; de-AI gate + cites the confirmed reach-suppression (`post.md:137–141`). Consistent with `algorithm-signals-reference.md`. +- **(c) MECHANICAL predicate (post-emitting) — GAP → fixed.** hook band ✓ · length band ✓ · no-body-link + ✓ · topic→pillars ✓ · subagent resolves ✓ · **buzzword ✗** (Step-5 checklist had no line; grep NONE). + Shared scorecard added two sub-gaps: hook one-sided at l.32 + l.114. +- **(d) agent-wiring + graceful degradation — PASS.** `differentiation-checker` (`post.md:141`, + conditional) + `content-optimizer` (`post.md:166`, conditional) both resolve, both correctly + `subagent_type: linkedin-studio:`-namespaced. Voice→defaults; fresh-adopter path graceful. + +**HARDEN (surgical — 4 edits across 2 files, all grep-confirmed landed).** +- `commands/post.md:134` — **added** Step-5 checklist line: `- [ ] No corporate buzzwords (leverage, + synergy, paradigm shift, thought leader, disruptive, value proposition, ecosystem, holistic approach)`. +- `assets/checklists/quality-scorecard.md:32` — `Works in 140 characters` → `Works in 110-140 + characters` (Notes `Mobile threshold` → `Mobile band (floor + ceiling)`). +- `assets/checklists/quality-scorecard.md:114` — `Hook works in 140 chars?` → `Hook works in 110-140 chars?`. +- `assets/checklists/quality-scorecard.md:132` — **added** Pre-Publish Basic Checklist line: + `- [ ] No corporate buzzwords (…)` (same banned list). +- **Deferrals:** none. **Scope note:** the 3 scorecard edits improve all 8 consumers; only `post` is + hardened this session — `react/batch/video/pipeline` get their own EVALUATE in S3/S5/S6/S8. + +**VERIFY.** +- `bash scripts/test-runner.sh` → `Passed: 81 · Failed: 0 · Warnings: 0`; counts **29/19/26/6** unchanged. +- Anti-check grep: no one-sided bare `140 char` hook bound remains in the scorecard (`110-140` at + l.32/114/128). Buzzword line present in both files (`post.md:134`, `quality-scorecard.md:132`). +- Before/after delta: axis (c) buzzword sub-check now enforced at the load-bearing Step-5 gate; the + scorecard hook self-contradiction is resolved (all three mentions banded). The 4 edits are the cause. +- Disposition: **HARDENED** (4 edits, axis-c + shared-asset consistency) · 0 deferrals · axes a/b/d PASS. + +---