feat(linkedin): v2.3.0 — Step 7.5 visual-assets phase in /linkedin:newsletter
Endring 7 from the change-spec: make visual assets an explicit pipeline phase. New Step 7.5 (visual-assets) between annotation (Step 7) and lock (Step 8): cover (+ optional inline figures) or carousel deck, generated and operator-gated BEFORE lock so build-linkedin.mjs picks up cover.png at lock without a post-lock re-render. Pipeline 13 → 14 phases. - commands/newsletter.md: Step 7.5 section, pipeline overview + build-status, resumption table (annotation → 7.5; new visual-assets → 8), Step 8 precondition, reference-file list. - config/edition-state.template.json: visual-assets phase + additive articles.NN.visualAssets schema (format / cover / figures / carousel). - config/image-credit-caption.template.md (new): motif + credit + caption table, honest-about-AI credit, naming convention. - Two generation routes, no lock-in: default mcp-image (cover-v<N>-kandidat.png) or external cover-raw.png. Operator-gate via SendUserFile → cp to cover.png. Carousel branch reuses render/build-carousel.mjs. - Doc/orchestration-only — no new code. Commands (24) + agents (15) unchanged. - Version sync 2.2.0 → 2.3.0 across plugin.json, CHANGELOG, README, CLAUDE.md, root README + root CLAUDE.md. Correction: spec claimed build-linkedin.mjs handles fig1-4; verified it does NOT — it embeds only cover.png by fixed name; figures are referenced in the draft markdown and uploaded manually. Step 7.5 documents actual behavior. All 8 acceptance criteria met. JSON valid (14 phases); 20/20 render tests pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4ed9717627
commit
7ebd28cb0b
9 changed files with 304 additions and 29 deletions
|
|
@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [2.3.0] - 2026-05-28
|
||||
|
||||
### Summary
|
||||
Visual assets become an explicit pipeline phase in `/linkedin:newsletter`. Until now images (cover + inline figures) were produced ad-hoc *outside* the 13-phase pipeline and referenced manually from `edition-config.json` + `linkedin/NN/cover.png` — even though a cover is mandatory (KTG cover-directive 27.05: «TLDR on top + at least one figure per article») and must coordinate with the text. v2.3.0 adds **Step 7.5 — Visual assets**, between annotation (Step 7) and lock (Step 8), so the cover is generated, operator-gated, and approved *before* lock — `render/build-linkedin.mjs` picks up `linkedin/NN/cover.png` at lock, so generating images after lock would force a re-render and break the lock. Pipeline 13 → 14 phases. Doc/orchestration-only — no new code; mcp-image is the default generation route but the interface stays pluggable (external `cover-raw.png` accepted), and the carousel branch reuses the existing `render/build-carousel.mjs`. Backward-compatible: the only state-shape change is additive (`visualAssets`), and existing editions resume by `currentPhase` (`annotation` now resumes at Step 7.5 instead of Step 8 — an intended deterministic improvement).
|
||||
|
||||
### Added
|
||||
- **Step 7.5 — Visual assets** in `commands/newsletter.md` (between Step 7 annotation and Step 8 lock). Decides image needs from the article type (method-heavy → 1–2 inline figures, diagnosis-heavy → cover only), writes a per-image brief, generates via two routes (default `mcp__mcp-image__generate_image` → `cover-v<N>-kandidat.png`; external → `cover-raw.png`), runs the operator-gate (candidates surfaced via `SendUserFile`, approval copied to the fixed `cover.png` name — the same render+annotate pattern as Steps 2.5/3a), and records credit + caption. Explicit **carousel branch** (`format: "carousel"`): render the deck via `render/build-carousel.mjs` instead of cover+inline.
|
||||
- **`visual-assets` phase string** + **`articles.NN.visualAssets` schema** in `config/edition-state.template.json` `_doc.phases` (13 → 14 phases) — `{ format, cover: { brief, route, candidates[], approved, status }, figures: [ { id, brief, placement, status } ], carousel }`. Additive; default `format: "standard"`.
|
||||
- **`config/image-credit-caption.template.md`** (new) — cover motif + credit + caption table, modelled on the established Seres-serien `image-credit-caption.md`. Honest-about-AI credit per the verification duty; documents the cover/figure naming convention.
|
||||
- **Naming convention documented** in `commands/newsletter.md` Step 7.5 — `cover.png` (approved, fixed) / `cover-v<N>-kandidat.png` (attempts) / `cover-raw.png` (external pre-edit source) / `fig<N>.png` (inline). Consistent with existing series use.
|
||||
|
||||
### Changed
|
||||
- **`/linkedin:newsletter` pipeline overview** — 13 → 14 phases; the overview table, build-status note, and reference-file list reflect Step 7.5.
|
||||
- **Resumption table** in `commands/newsletter.md` — `currentPhase: "annotation"` now resumes at **Step 7.5** (was Step 8); new `visual-assets` row resumes at Step 8. `persona-sweep-prelock` flows Step 7 → Step 7.5.
|
||||
- **Step 8 lock preconditions** now require the gated `visualAssets` (approved `cover.png` for `standard` format, or approved `carousel.pdf` for `carousel` format) alongside the existing fact-check (no open 🔴) and primær-JA gates.
|
||||
- README, CLAUDE.md, root README, root CLAUDE.md, plugin.json version + descriptions.
|
||||
|
||||
### Not changed (explicit non-deltas)
|
||||
- **Steps 0–7, 8 body, 9, 10** in `/linkedin:newsletter` — contract unchanged apart from the Step 7→7.5→8 wiring and the additive Step 8 precondition.
|
||||
- **Renderers** — `render/build-linkedin.mjs`, `build-html.mjs`, `build-carousel.mjs` untouched (Step 7.5 *calls* them; no code change). `build-linkedin.mjs` still reads `cover.png` by fixed name and does not embed `fig<N>.png` (figures are referenced in the draft and uploaded manually) — Step 7.5 documents this actual behavior rather than overstating it.
|
||||
- **Hooks, scripts, command count (24), agent count (15)** — all unchanged.
|
||||
|
||||
## [2.2.0] - 2026-05-28
|
||||
|
||||
### Summary
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue