From a534edf4fc89d87703d6a1b10e8fbce9eee88a2f Mon Sep 17 00:00:00 2001 From: Kjell Tore Guttormsen Date: Sat, 20 Jun 2026 06:20:24 +0200 Subject: [PATCH] =?UTF-8?q?docs(linkedin-studio):=20S29d=20hardening=20log?= =?UTF-8?q?=20entry=20=E2=80=94=20terminology-scrub=20skills/config/assets?= =?UTF-8?q?/hooks-test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Append the S29d verification record to docs/hardening/log.md (anchored "### S29d terminology-scrub" entry, matching S29a-S29c format): the 8-edit replacement map across 6 files (skills/linkedin-content-creation x3, linkedin-strategy, config template, two shipped assets, the clipboard test fixture), the 4 judgment-calls, the FORM B = 8 kept-by-design list (buzzword denylists + role usages), the broad anchor-link check (none break), and the verify block (FORM A in scope = NONE; FORM B unchanged 8; filename pointers unchanged 21; clipboard test 13/0; gate 81/0/0; counts 29/19/26/6 unchanged). Documents fix commit d15ffa4. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_016qgzo6rxthw7KuxHjn5vyE --- docs/hardening/log.md | 63 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/docs/hardening/log.md b/docs/hardening/log.md index 1d21b69..7b5ed7e 100644 --- a/docs/hardening/log.md +++ b/docs/hardening/log.md @@ -2088,3 +2088,66 @@ canonical file's in-file phrase scrub is done, so S29e is now a pure rename + po remaining FORM A inside the file. --- + +### S29d terminology-scrub — "thought leadership" → neutral (`skills/` + `config/` + `assets/` + `hooks/`-test) + +**CLASS: terminology-scrub** (NOT re-hardening — surgical removal of the operator-banned brand phrase +"thought leadership", FORM A, from the remaining surfaces; memory `no-thought-leadership-phrase`). Fourth +sub-pass of the plugin-wide S29 scrub. SCOPE inherits the S29a-S29c operator-lock verbatim (FORM A only; +FORM B untouched; per-directory sub-pass, map approved before edit). + +**TEST (tool-grounded).** `grep -in "thought leader"` (A+B) across the S29d scope — `skills/`, `config/`, +`assets/`, `README.md`, `CLAUDE.md`, `hooks/prompts/`, `hooks/scripts/__tests__/clipboard-helper.test.mjs`, +and the forward-looking docs (`docs/integration-test-guide.md`, `docs/expert-review/plan.md`). Result: +**8 FORM A instances / 7 files** + **8 FORM B** + 21 hyphenated filename pointers (S29e). The forward- +looking docs were clean. The test fixture (`clipboard-helper.test.mjs:61`) was included deliberately — +STATE pre-listed it. Anchor-check: `\bTL\b` / `value test` in scope = NONE; a broad `(#…thought…)` +anchor-link grep across the whole plugin = **NONE**, so renaming the three skill headers breaks no internal +link (the S29c anchor grep started with `#thought-leadership` and would have missed +`#step-2-identify-thought-leadership-angles`; this run used a `thought`-anywhere anchor pattern). The only +text cross-refs to the changed header phrases were the three instances being edited. + +**HARDEN (8 edits, 6 files — 1:1).** Vocabulary consistent with S29a-S29c. +- `skills/linkedin-content-creation/SKILL.md` (3): :75 "### Step 2: Identify Thought Leadership Angles" → + "Identify Content Angles"; :109 "**Standard Thought Leadership Post (…):**" → "**Standard Post (…):**" + (matches the S29a/S29c "Standard Post Structure" equivalent); :192 "**Axis 2: The 8 Thought Leadership + Angles**" → "The 8 Content Angles". (lines 77/193 filename pointers → S29e.) +- `skills/linkedin-strategy/SKILL.md:176` phase-focus cell "Thought leadership, cross-platform" → + "Signature content, cross-platform" (judgment-call; the Authority phase's column-1 is already + "Authority", so "Signature content" avoids the echo). +- `config/user-profile.template.md:35` "1. [ ] Build thought leadership & authority" → "Build authority & + influence" (judgment-call; "& authority" already present, so a straight map would duplicate). +- `assets/checklists/quality-scorecard.md:136` "Passes thought leadership test:" → "Passes Authority Value + Test:" (consistent with the renamed test; its 3 questions ARE the Authority Value Test). (line 132 + buzzword denylist = FORM B, untouched.) +- `assets/case-studies/case-study-template.md:173` "**Best for:** Thought leadership, showing expertise" → + "Authority content, showing expertise". +- `hooks/scripts/__tests__/clipboard-helper.test.mjs:61` unicode fixture "'🚀 Thought leadership → impact'" + → "'🚀 Authority → impact'" (judgment-call; the test asserts unicode/emoji handling — 🚀 + → retained, so + coverage is unchanged; pathguard allows `__tests__/*.mjs`). + +**KEPT BY DESIGN (FORM B = 8, operator-locked).** Five buzzword-denylist entries that MUST list the banned +word "thought leader" (`skills/linkedin-studio/SKILL.md:78`, `assets/checklists/quality-scorecard.md:132`, +`CLAUDE.md:124`, `README.md:217`, `hooks/prompts/content-quality-gate.md:13`) + three role usages +(`skills/linkedin-networking/SKILL.md:9` & `:185`, `README.md:158` "niche thought leaders"). + +**VERIFY.** +- Re-grep final FORM A `thought leadership` (space) in the S29d scope → **NONE**. +- FORM B in scope = **8**, unchanged. +- Filename pointers `thought-leadership-angles.md` in scope = **21**, unchanged (S29e). +- New terms present (1:1 with edits): "Identify Content Angles", "Standard Post", "The 8 Content Angles", + "Signature content, cross-platform", "Build authority & influence", "Authority Value Test", "Authority + content, showing expertise", "🚀 Authority → impact". +- `node --test clipboard-helper.test.mjs` → **pass 13 / fail 0** (the fixture change kept the test valid). +- `bash scripts/test-runner.sh` → `Passed: 81 · Failed: 0 · Warnings: 0`, **exit 0**; counts + **29/19/26/6** + v0.5.0 unchanged. +- Disposition: **FIXED** (8 edits, 6 files). Commit `b804a04` (local; push held — the STATE.md-tracking + commit `773340b` is parked at the tip, so a normal push would carry it; awaiting operator decision). + +**SURFACED (queued, not swept).** Remaining S29 queue: **S29e** rename `thought-leadership-angles.md` → +`content-angles.md` + all pointers (atomic; filename locked; the file's in-file FORM A is already gone, so +S29e is a pure rename + pointer-update). After S29e: **S30** magnitude-scrub. The plugin-wide FORM A scrub +is now complete except the canonical filename itself (S29e) and the one kept ironic quote +(`references/video-strategy-guide.md:429`). + +---