ktg-plugin-marketplace/plugins/linkedin-studio/docs/remediation/journey-layer-design.md
Kjell Tore Guttormsen baca30feb1 feat(linkedin-studio): S14 — journey layer (create/measure front-doors + 5-journey router), v4.1.0
14a's cold command-rationalization found ZERO redundancy across the 27 commands
(no defensible merge/cut), so the operator reframed S14 from "merge/cut" to
"add a journey layer over the kept atomics".

- Add /linkedin:create + /linkedin:measure — delegate-only guided front-doors
  (Read/Glob/AskUserQuestion only; route to the command that owns the work)
- Re-tier commands/linkedin.md into 5 journeys (Start/Create/Engage/Measure/Grow);
  onboarding/strategy elevated as Start/Grow front-doors; Engage = calendar+firsthour tier
- 14a honesty nits: router now lists firsthour; calendar cross-links to firsthour;
  competitive confirmed UNGATED (the claimed 1K-gating inconsistency was unfounded)
- Lockstep: EXPECT_COMMANDS 27->29, v4.0.0->4.1.0 across plugin.json / README badges /
  plugin+root CLAUDE.md / README / CHANGELOG; new README commands-badge lint guard
- 14a deliverable corrected: multiplatform entry added (26/27 -> 27/27), header counts,
  competitive nit withdrawn
- Independent /trekreview (2 Opus reviewers) raised 3 MAJORs (stale commands badge,
  router competitive self-contradiction, STATE.md count) — ALL remediated in-session;
  verdict ALLOW

Gate: test-runner.sh 74/0/0; node --test 98/98; commands=29; v4.1.0 consistent.
Additive/minor — no command removed/renamed/behavior-changed; reload registers create+measure.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:27:06 +02:00

9.2 KiB
Raw Blame History

LinkedIn Studio — Journey-Layer Design (S14)

Supersedes the S14 "merge/cut" framing. 14a's cold review found 27 commands with zero redundancy (subsumption fails pairwise) — the surface is over-grown in count, not in redundancy. The operator therefore reframed S14 from "rationalize by cutting" to "add a journey layer over the kept atomics." This doc is the build contract. It also absorbs S15's router-tiering (finish-plan B2) — the router is re-tiered here, journey-style, so S15 collapses into S14.

Decisions locked (operator, 2026-05-30)

  1. Architecture = journey layer. Keep all 27 atomic commands as the execution tier; add journey front-door orchestrators as the primary surface; subagents remain the engine (no Workflow-tool / deep-research adoption — both are wrong-fit for an everyday product surface, see the session reasoning).
  2. Realization = 2 new + 2 elevated. Add create + measure as new front-doors; elevate existing onboarding (Start) and strategy (Grow); Engage stays a router-tier relay (calendar + firsthour), no front-door. Atomics → "advanced" tier under each journey.
  3. Version = v4.1.0 (minor), NOT v5.0.0. Honest SemVer: this is additive (2 new commands) + presentation (router retier) + one tiny doc-vs-behavior reconcile (competitive). No removal, rename, or behavior break on existing commands. Precedent: v3.1.0 added 3 agents as a MINOR with a "reload required" note — same shape. Reload note applies (the 2 new commands register at session reload).

Journey taxonomy (5 journeys + router)

Improve is not a separate journey: improving is the action after measuring (audit→fix, ab-test, content-optimizer), not a distinct entry. The operator's "Improve + Analyze" is therefore folded into Measure (the measure→optimize loop).

Journey Front-door Atomics (advanced tier)
Start onboarding (elevate — exists) setup · first-post
Create create (NEW) post · quick · react · carousel · video · multiplatform · batch · newsletter · pivot · headless-review · pipeline
Engage (router-tier — relay, no front-door) calendar · firsthour
Measure measure (NEW — analyze name is taken, so no collision) import · report · analyze · audit · ab-test
Grow strategy (elevate — exists) profile · competitive · monetize ⚿ · outreach ⚿
(map) linkedin router

⚿ = unlocks/soft-gates at ~1K followers. Count: Start 3 + Create 11 + Engage 2 + Measure 5 + Grow 5 + router 1 = 27 atomics + 2 new front-doors = 29.

The two new front-door commands

Both are thin guided routers — they add navigation (a single "what do you want?" entry), not duplicated logic. They delegate to the atomic that owns the work. No drafting/analysis logic is copied into them.

commands/create.md — Content-creation front-door

  • Purpose: one guided entry for "make something" when the user hasn't already named the format.
  • Flow: AskUserQuestion "What do you want to create?" →
    • Short substantial post → post
    • Quick 5-min post → quick
    • React to a URL / article / news → react
    • Carousel / document → carousel
    • Video script → video
    • Adapt for another platform → multiplatform
    • A full week (batch) → batch
    • Long-form / newsletter / essay → newsletter
    • Then hand off to the chosen command (it owns the work).
  • Triggers (undirected create intent only — must NOT steal post/quick direct intent): "create", "make something", "create content", "what should I make", "new content", "help me create", "linkedin create".
  • allowed-tools: Read, Glob, AskUserQuestion. No Write (it delegates).

commands/measure.md — Performance/insight front-door

  • Purpose: one guided entry for "understand how I'm doing."
  • Flow: AskUserQuestion "What do you want to do?" →
    • Import a new analytics CSV → import
    • Weekly / monthly report → report
    • Diagnose a problem (reach dropped, low engagement) → analyze
    • Quarterly strategy audit → audit
    • Design / review an A/B test → ab-test
    • Then hand off to the chosen command.
  • Triggers (undirected measure intent): "measure", "how am I doing", "my performance", "show my analytics", "performance overview", "linkedin measure".
  • allowed-tools: Read, Glob, AskUserQuestion. No Write (it delegates).

Elevation (2) — presentation only, no behavior change

  • onboarding = Start front-door. Already the cohesive wizard. Router presents it as the Start journey entry; body unchanged (optional one-line "Start journey" framing only).
  • strategy = Grow front-door. Already the phase/trajectory/authority hub. Router presents it as the Grow journey entry; body unchanged.

Router re-tiering (commands/linkedin.md) — absorbs S15 B2

Restructure the menu into the 5 journeys, each headed by its front-door with the atomics listed beneath as "also / advanced":

  • Startonboarding · setup · first-post
  • Createcreate · post · quick · react · carousel · video · multiplatform · batch · newsletter · pivot · headless-review · pipeline
  • Engage → calendar · firsthour (tier, no front-door)
  • Measuremeasure · import · report · analyze · audit · ab-test
  • Growstrategy · profile · competitive · monetize ⚿ · outreach ⚿
  • Keep the status line (weekly progress / streak / follower phase) + queue summary.
  • Fixes nit #1: /linkedin:firsthour is now listed (under Engage) — the router previously listed only the post-feedback-monitor agent there.

Honesty nits fixed in lockstep (from 14a)

  1. Router omits firsthour → fixed by the retier (Engage tier lists it).
  2. calendarfirsthour trigger overlapcalendar.md's publish-action first-hour block gets a one-line cross-link: "for the full worked sprint plan, run /linkedin:firsthour."
  3. competitive gating doc-vs-behavior14a's nit was unfounded (verified against the files: CLAUDE.md :64, README :222, the router, and the command body all leave competitive ungated — only monetize/outreach carry "(unlocks at ~1K)"). There is no inconsistency to fix. Competitive analysis helps at any stage (especially early positioning), so it stays ungated. Action: place it in the Grow tier marked "Any phase" (no ⚿), and add a one-line note to the router's gating rule that competitive is explicitly not gated. (An interim router edit that mistakenly added a ~1K marker was reverted in the same pass.)

14a doc correction (command-rationalization.md)

  • Add the missing multiplatform entry: keep (unique Twitter/X-thread + cross-platform surface; subsumption fails as a cut), flagged thinnest / develop-candidate (only command that inlines static templates instead of delegating — could use content-repurposer). Belongs in Create.
  • Fix the two header-count typos (Group C "(4)"→3; Group F "(4)"→5).
  • Corrected tally: keep 27 (27/27 covered) · 0 merge · 0 cut · 1 develop-candidate.

Count / version / roster lockstep (the release mechanics)

  • scripts/test-runner.sh: EXPECT_COMMANDS 27 → 29.
  • Version 4.0.0 → 4.1.0 everywhere it appears (version-sync rule: grep both 4.0.0 and the 27-count claims).
  • Three-doc rule (same commit / immediately after):
    • CLAUDE.md (plugin): command table +2 rows, count 27→29, version, v4.1.0 para.
    • README.md (plugin): command table, count, version, CHANGELOG entry.
    • Root README.md (marketplace): the linkedin-studio line.
  • Also: CHANGELOG.md if present; any SKILL roster enumerating commands; the router roster (done above); STATE.md count block (27→29, version 4.1.0).

Verification (testable — gate before push)

  • ls commands/*.md | wc -l == 29.
  • bash scripts/test-runner.sh exit 0 (EXPECT_COMMANDS=29; stat/version/model consistency + render-chain + $-safety guards all green).
  • node --test hooks/scripts/__tests__/*.test.mjs — all pass (no hook logic touched → expect the existing 98).
  • grep -rn "4\.0\.0\|27 command" commands README.md CLAUDE.md (user-facing) → 0 stale hits (historical CHANGELOG mentions allowed).
  • Router renders 5 journeys; primary tier = the 5 front-doors (create, measure, onboarding, strategy + Engage tier); atomics nested; 1K-gated flagged; firsthour present.
  • create / measure: valid frontmatter, AskUserQuestion routing, delegate only (grep shows no inlined drafting/analysis logic, no Write in create/measure).
  • /trekreview --project docs/remediation/ALLOW (no WARN-override) → commit (own files only) → push origin.

Out of scope (this session / S14)

  • Aggressive consolidation / folding atomics (operator chose keep-all).
  • Building the multiplatform "develop" (content-repurposer wiring) — recorded as a keep + develop-candidate, not built unless requested.
  • S16 (saves) / S17 (C13C46) — later finish-plan steps.
  • UI-brief M0 (move mutable data out of tree) — pending; conflicts with S16, not S14.