fix(linkedin-studio): S26 harden linkedin — re-source router copy to "LinkedIn Studio", queue S29 terminology-scrub

Router hardening (routing/agent/grant axes all PASS). Operator terminology rule: the "thought leadership" phrase must not appear in the plugin. Re-sourced the 2 occurrences in commands/linkedin.md (:4 frontmatter description, :16 body) to "LinkedIn Studio". Routing 28/28 + agent-pointers 10/10 resolve; grant-hygiene clean (no Glob orphan — third front-door). Surfaced plugin-wide (~85 lines / ~45 files) and promoted to S29 terminology-scrub in docs/hardening/plan.md.
This commit is contained in:
Kjell Tore Guttormsen 2026-06-19 21:52:58 +02:00
commit 47782eb91d
3 changed files with 61 additions and 4 deletions

View file

@ -1,7 +1,7 @@
---
name: linkedin
description: |
Main router for LinkedIn thought leadership commands. Lists all available subcommands
Main router for LinkedIn Studio commands. Lists all available subcommands
and helps the user choose the right workflow. Use when the user mentions "linkedin",
"linkedin help", "what linkedin commands", or needs guidance on which LinkedIn command to use.
Triggers on: "linkedin", "/linkedin", "linkedin help", "show linkedin commands".
@ -13,7 +13,7 @@ allowed-tools:
# LinkedIn Studio Command Router
You are a LinkedIn thought leadership assistant. The user has invoked the main `/linkedin` command. Your job is to help them navigate to the right subcommand.
You are the LinkedIn Studio assistant. The user has invoked the main `/linkedin` command. Your job is to help them navigate to the right subcommand.
## Session Status

View file

@ -1762,3 +1762,51 @@ read, pattern greps) from a tool, never by reasoning.
did not). `linkedin` (S26) still to check independently.
---
### /linkedin:linkedin — top router (five-journey menu + status line + queue glance); routes to every command/agent, executes nothing (S26)
**CLASS: routing** (the master router over the whole surface — the largest routing check: 28 command
pointers + 10 agent pointers). Predicate: every emitted `/linkedin:Y` resolves to `commands/Y.md`; every
"Suggest `X` agent" resolves to `agents/X.md`; bidirectional grant-hygiene; "delegates only" (shows
menu/status, never executes).
**TEST (tool-grounded).**
- Routing (main axis): **28/28 distinct `/linkedin:Y` targets resolve** to `commands/Y.md` (menu `:66-127`,
ask-menu `:136-140`, direct-routing `:157-198`) — the full sub-command surface (+`linkedin` itself = 29).
- Agent pointers (axis d): **10/10** "Suggest `X` agent" resolve to `agents/X.md` (analytics-interpreter,
content-optimizer, content-planner, content-repurposer, differentiation-checker, engagement-coach,
network-builder, post-feedback-monitor, trend-spotter, voice-trainer).
- Grant-hygiene (bidirectional): `allowed-tools` = Read/Bash/AskUserQuestion (`:8-11`); each has a body home
— Read→state status line (`:20`), Bash→node queue-manager block (`:34-42`), AskUserQuestion→sub-choice
(`:145`); **no ungranted tool referenced, no Glob at all** — third front-door is clean (unlike create's
Glob-orphan / measure's Glob-via-Step-0).
- Delegates-only: body routes/suggests; `:146` "invoke it directly" = hand-off to the command, not
self-execution. No drafting / number-crunch. PASS.
- Graceful degrade (axis d): no-state fallback (`:28`) + empty-queue fallback (`:57`). PASS.
- Persona (ICP author types `/linkedin`): graceful-degrade path — no fixture (pure routing prose).
**FINDING (terminology — operator rule surfaced this session): "thought leadership" must not appear in the
plugin (it is named LinkedIn Studio).** linkedin.md used it at `:4` (frontmatter description) + `:16` (body).
**HARDEN (2 edits, 1 file — `commands/linkedin.md`).**
1. [REWORK · terminology] `:4` "Main router for LinkedIn **thought leadership** commands" → "Main router for
**LinkedIn Studio** commands".
2. [REWORK · terminology] `:16` "You are a LinkedIn **thought leadership** assistant" → "You are the
**LinkedIn Studio** assistant".
**VERIFY.**
- Re-grep final: "thought leadership" in linkedin.md → **NONE**; `:4`/`:16` show "LinkedIn Studio".
- Routing/agent axes unchanged: 28 + 10 targets all resolve.
- `git diff --stat` = 1 file, **+2/2**.
- `bash scripts/test-runner.sh``Passed: 81 · Failed: 0 · Warnings: 0`, **exit 0**; counts **29/19**
unchanged (.md-only prose edit).
- Disposition: **FIXED** (2 edits, 1 file) · 0 deferrals · routing **PASS**, agent-wiring **PASS**,
grant-hygiene **PASS** (clean — no orphan; third front-door has no Glob), delegates-only **PASS**.
**SURFACED (out of scope → queued as S29).** "thought leadership" appears plugin-wide on **85 lines across
~45 files** (commands, agents, references incl. the filename `references/thought-leadership-angles.md`,
skills, plus historical CHANGELOG/docs). Promoted to a dedicated terminology-scrub pass **S29**
(`docs/hardening/plan.md`); the user-facing-vs-historical boundary + the file rename are open scoping
questions for that pass.
---

View file

@ -91,7 +91,7 @@ that exercises the command's real path:
| S5 carousel | S12 firsthour | S19 strategy | S26 linkedin |
| S6 video | S13 calendar | S20 competitive | S27 ref-consistency A |
| S7 batch | S14 import | S21 monetize | S28 ref-consistency B |
| S8 pipeline | S15 report | S22 outreach | |
| S8 pipeline | S15 report | S22 outreach | S29 terminology-scrub |
*S9 newsletter (16-phase) may split into S9a/S9b. Otherwise one command = one session.
@ -107,7 +107,16 @@ SSOT-reconciliation of the documented divergences, same tool-grounded discipline
- **S28 (B) — format magnitudes → SSOT:** `commands/video.md:69` + `references/linkedin-formats.md`
(the "30% zero-distribution" claim vs SSOT native-video framing).
Run after S26; order adjustable. These edit already-hardened files surgically and are
**S29 — terminology scrub: "thought leadership" → "LinkedIn Studio" / neutral (added 2026-06-19,
operator-approved during S26).** The phrase must not appear anywhere in the plugin (it is named LinkedIn
Studio; see auto-memory `no-thought-leadership-phrase`). S26 fixed the 2 occurrences in
`commands/linkedin.md`; **~85 lines across ~45 files remain** (commands, agents, references — incl. the
filename `references/thought-leadership-angles.md` — skills, plus historical CHANGELOG/docs). Open scoping
questions for this pass: (a) user-facing surface only, or include historical CHANGELOG/docs too? (b) the
`thought-leadership-angles.md` rename is its own sub-step — every pointer to the filename must update with
it. Same tool-grounded discipline (read-and-show → grep-confirm → re-grep final); hardening-class.
Run after S26; order adjustable (S27 → S28 → S29). These edit already-hardened files surgically and are
hardening-class (commit local, no push).
## End-of-session ritual (every session — STATE.md handoff baked in)