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>
This commit is contained in:
parent
431a893f7c
commit
baca30feb1
16 changed files with 885 additions and 208 deletions
154
plugins/linkedin-studio/docs/remediation/journey-layer-design.md
Normal file
154
plugins/linkedin-studio/docs/remediation/journey-layer-design.md
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
# 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue