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

154 lines
9.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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":
- **Start** → `onboarding` · setup · first-post
- **Create** → `create` · post · quick · react · carousel · video · multiplatform · batch · newsletter · pivot · headless-review · pipeline
- **Engage** → calendar · firsthour *(tier, no front-door)*
- **Measure** → `measure` · import · report · analyze · audit · ab-test
- **Grow** → `strategy` · 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. **`calendar``firsthour` trigger overlap** → `calendar.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-behavior** → **14a'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.