# 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 (C13–C46) — later finish-plan steps.
- UI-brief M0 (move mutable data out of tree) — pending; conflicts with S16, not S14.
