chore(linkedin-studio): release v0.8.0 — produksjonslinjen komplett
CHANGELOG [0.8.0] (N7.5-N18) + versjonssync i alle filer som nevner versjonen. README: badge-retting (agents 19->20, refs 28->29, begge verifisert mot disk) + eksplisitt CLI-install-linje (marketplace add registrerte kun markedsplassen; ingen ikke-interaktiv installsti fantes) + "0.7.0-dev" -> "shipped in 0.7.0" for /linkedin:trends. Alle ti suiter groenne, alle floors holdt: test-runner 270 - analytics 202 - trends 300 - brain 134 - editions 72 - specifics-bank 45 - contract-gate 33 - tests 35 - render 63 (ny floor) - hooks 191. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QxvWAjte7vPcF79QeSRvRJ
This commit is contained in:
parent
e0f964ad60
commit
f98446aeea
4 changed files with 19 additions and 9 deletions
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "linkedin-studio",
|
||||
"version": "0.7.0",
|
||||
"version": "0.8.0",
|
||||
"description": "LinkedIn Studio — full-spectrum LinkedIn content engine: feed posts, carousels, video scripts, and long-form newsletter editions, with the 2026 relevance-ranking model baked in. v4.0.0 is an audit-remediation release (Voyage Phase 0–3): every user-facing claim is made honest or removed, all 11 previously-orphaned agents are wired (→ 19 agents), a `/linkedin:firsthour` post-publish command is added (→ 27 commands), the algorithm-signal claims are reconciled to one sourced statement (no unpublishable model name or date), short-form de-AI and video quality gates are added, and the structure lint is rebuilt to guard the real layout plus version/count/stat consistency. Breaking: the newly-wired agents register only on reinstall/reload, and this consolidates the v3.0.0 identity break (slug, agent namespace `linkedin-studio:<agent>`, state-file path `~/.claude/linkedin-studio.local.md`). v3.1.0 added the cold adversarial review package (`/linkedin:headless-review` + Step 6.5 + `/linkedin:pivot` + per-artifact personas); the `/linkedin:*` commands are unchanged. v4.1.0 adds a journey layer: two guided front-doors (`/linkedin:create`, `/linkedin:measure`) plus a router re-tiered into five journeys (Start · Create · Engage · Measure · Grow), with the 27 existing commands kept as the execution tier (→ 29 commands; additive, reload registers the two new commands).",
|
||||
"author": {
|
||||
"name": "Kjell Tore Guttormsen"
|
||||
|
|
|
|||
|
|
@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
## [0.8.0] - 2026-07-27
|
||||
|
||||
**The production line, closed.** 0.7.0 built the bridge from discovery to a scheduled edition; 0.8.0 makes the whole line hold together and, for the first time, feed back into itself. A candidate now travels id-traceably from capture to a scheduled slot with **no manual re-entry anywhere in the chain** (proven end-to-end before this release). A measurement now changes the next piece instead of dying in chat. A correction made once is enforced from then on. Voice is bound *before* prose rather than scrubbed after. The series remembers what it has already spent. And the engine finally knows your own normal well enough to **refuse a verdict** when the data is too thin — the answer that keeps everything above it honest.
|
||||
|
||||
### Added — demand-sweep «innenfra og ut» (N7.5 / MR-F9)
|
||||
|
||||
- **`demand-spotter` agent** — the demand-side twin of `trend-spotter`. Discovery finds *what happened*; the sweep translates it into *the reader's problem* via three passes after discovery, before drafting: demand-sweep (verbatim questions from where readers ask) → pain-point map → vocabulary translation (the reader's words, not the field's jargon). Inherits the session model; agents 19 → 20.
|
||||
|
|
@ -98,6 +102,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
- **`/linkedin:analyze` tests the problem before diagnosing it** — a new Step 2a reads the band first. `within-band` says plainly that this looks like ordinary variation rather than a drop (and asks whether to continue) instead of manufacturing a diagnosis; `no-verdict` continues on self-report only, labelled provisional. Step 5's severity assessment now measures against the band rather than a remembered peak.
|
||||
- Additive and backward-compatible: `baseline` is optional in the report types, so pre-N17 reports load unchanged (and a consumer says "no baseline in this report" rather than assuming one). analytics suite 144 → 202 (58 new tests: median/MAD, window, band, refusal, grouping, period reading, queue join, report wiring); test-runner 247 → 270 (Section 16x: 23 unconditional greps + self-test; anti-erosion floor 228 → 251); `tsc` clean.
|
||||
|
||||
### Fixed — cleanup never topples a successful render (N18)
|
||||
|
||||
- **`render/build-figur.mjs` — a figure that rendered could still fail** — `runChromeScreenshot`'s finish path SIGKILLed the parent Chrome process and resolved **without waiting for it to die**. The renderer/GPU children outlived it and kept writing into `--user-data-dir` inside the work dir while the `finally` block was already traversing that same directory, so the cleanup raced the dying browser and threw `ENOTEMPTY`. The PNG lives *outside* the work dir and was already written by then — so the render had succeeded and the cleanup toppled it. Replaced with `cleanupWorkDir()`: an explicit retry loop (configurable `maxRetries`/`retryDelay`, injectable `rm` so the retry is testable) that **never throws** — a work dir that cannot be removed is a leaked temp dir, not a failed figure.
|
||||
- This was never a flaky test. Measured before the fix, the render suite passed **1 run in 4**; after, **5 of 5**. Suite 60 → 63 (new floor).
|
||||
|
||||
### Built feedback (awaiting consumer-side proof)
|
||||
|
||||
- **MR-F9** (demand-sweep «innenfra og ut») — built; the (a)/(b)/(c) evidence gate is a runtime demonstration, proven consumer-side (plugin agents don't resolve in the dev repo).
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# LinkedIn Studio Plugin (v0.7.0)
|
||||
# LinkedIn Studio Plugin (v0.8.0)
|
||||
|
||||
Full-spectrum LinkedIn content engine — short-form feed posts, carousels, video scripts, and long-form newsletter editions — with the 2026 relevance-ranking model baked in. Maturity v0.7.0: M0 (per-user data dir `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/`, idempotent session-start migration — see `references/data-path-convention.md`) complete; the 29 pre-0.7.0 command surfaces all through the interactive quality-gate (`docs/hardening/log.md`) AND through independent cold-review (29/29, R2a–R5 — `docs/hardening/review*.md`); `/linkedin:trends` (shipped in 0.7.0) is not yet through the hardening gate. Remaining for v1.0.0: a GUI. Version history → `CHANGELOG.md`.
|
||||
Full-spectrum LinkedIn content engine — short-form feed posts, carousels, video scripts, and long-form newsletter editions — with the 2026 relevance-ranking model baked in. Maturity v0.8.0: M0 (per-user data dir `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/`, idempotent session-start migration — see `references/data-path-convention.md`) complete; the 29 pre-0.7.0 command surfaces all through the interactive quality-gate (`docs/hardening/log.md`) AND through independent cold-review (29/29, R2a–R5 — `docs/hardening/review*.md`); `/linkedin:trends` (shipped in 0.7.0) is not yet through the hardening gate. Remaining for v1.0.0: a GUI. Version history → `CHANGELOG.md`.
|
||||
|
||||
## Architecture
|
||||
|
||||
|
|
|
|||
13
README.md
13
README.md
|
|
@ -6,12 +6,12 @@
|
|||
|
||||
*AI-generated: all code produced by Claude Code through dialog-driven development. [Full disclosure →](../../README.md#ai-generated-code-disclosure)*
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
Most experts know they *should* post on LinkedIn — and quietly don't. The blank editor wins. LinkedIn Studio turns that chore into a system: structured workflows that take you from idea to published, in your own voice, calibrated to how LinkedIn's **topic-relevance** ranking model (2026) actually distributes content. Two engines under one surface — a **feed engine** for short-form posts, carousels, and video scripts, and a **long-form engine** that runs newsletter editions and essays through a serious editorial pipeline before they ever lock.
|
||||
|
|
@ -22,7 +22,7 @@ This is not a shortcut. Hand the wheel to the AI and you land where everyone who
|
|||
> New here? Run `/linkedin:onboarding` — it walks you through profile optimization, personalization, and your first published post in one guided flow (~10 minutes).
|
||||
|
||||
> [!NOTE]
|
||||
> **Pre-1.0.** The earlier 1.0.0–4.1.0 numbering reflected ambition, not maturity. Honest about where it stands today: the **architecture workstream (M0) is done** — user data lives in a per-user data dir *outside* the plugin, with automatic migration — and the **29 pre-0.7.0 command surfaces have all passed both the interactive hardening gate (29/29) and independent cold-review (29/29)** (`/linkedin:trends`, new in 0.7.0-dev, is not yet gated). What remains for 1.0.0 is a GUI. See [CHANGELOG.md](CHANGELOG.md).
|
||||
> **Pre-1.0.** The earlier 1.0.0–4.1.0 numbering reflected ambition, not maturity. Honest about where it stands today: the **architecture workstream (M0) is done** — user data lives in a per-user data dir *outside* the plugin, with automatic migration — and the **29 pre-0.7.0 command surfaces have all passed both the interactive hardening gate (29/29) and independent cold-review (29/29)** (`/linkedin:trends`, shipped in 0.7.0, is not yet gated). What remains for 1.0.0 is a GUI. See [CHANGELOG.md](CHANGELOG.md).
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -69,13 +69,14 @@ Each gate exists because skipping it is expensive: spine errors are caught at th
|
|||
|
||||
### Installation
|
||||
|
||||
Add the marketplace and browse plugins with `/plugin`:
|
||||
Add the marketplace, then install the plugin:
|
||||
|
||||
```bash
|
||||
claude plugin marketplace add https://git.fromaitochitta.com/open/ktg-plugin-marketplace.git
|
||||
claude plugin install linkedin-studio@ktg-plugin-marketplace
|
||||
```
|
||||
|
||||
Or enable directly in `~/.claude/settings.json`:
|
||||
Or add the marketplace and browse interactively with `/plugin`. Or enable directly in `~/.claude/settings.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue