feat(linkedin-studio): parameterize series path + de-brand render output [skip-docs]
Wave 3 / Step 8 of the remediation plan (Phase 1 — usable by a non-author). The flagship long-form engine shipped bespoke-as-general: a maintainer-private absolute series path and a hardcoded 'Maskinrommet' brand in the renderers. Both are now generalized so a non-author can run the pipeline without inheriting the author's filesystem or publication identity. - commands/newsletter.md + config/edition-state.template.json: series-root default /Users/ktg/repos/maskinrommet/serier -> $HOME/linkedin-series; reconciled the prose that called the maskinrommet folder 'the default' so it no longer contradicts the new neutral default. LTL_SERIES_ROOT override contract preserved. - render/build-linkedin.mjs + render/build-carousel.mjs: brand is now an LTL_BRAND env-var (empty default -> generic). Samle-post title, carousel footer brand-span, and cover-eyebrow fallback are de-branded; empty brand renders clean chrome. The operator sets LTL_BRAND=Maskinrommet in their own env to re-brand (same pattern as LTL_SERIES_ROOT). - config/image-credit-caption.template.md: 'Maskinrommet-/serie-badge' -> generic 'serie-badge'. Out of scope (Step 9): the residual 'Maskinrommet skrivekontrakt §C2/§A' references in newsletter.md are the writing-contract generalization, handled next. [skip-docs]: three-doc + version reconciliation is Step 21 (pre-review-gate, per plan: 'LAST so it captures everything'). These intermediate Wave commits are NOT pushed before the /trekreview gate, so the three-doc obligation (which governs pushed changes) is satisfied at Step 21, not per local checkpoint commit. Verify: grep -rIn '/Users/ktg' config/ commands/ render/ (excl .local) -> no matches; grep -rn 'Maskinrommet' render/ -> no matches (de-branded); node --check on both render scripts -> OK; LTL_SERIES_ROOT still present in newsletter.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6ed3e2f5a6
commit
305b99c0e4
5 changed files with 24 additions and 13 deletions
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"_doc": {
|
||||
"purpose": "Schema for edition-state.json — deterministic resumption state for a newsletter edition in production. Holds the current phase + per-article status so /linkedin:newsletter (Step 0) can resume exactly where a prior session stopped.",
|
||||
"decision": "G — production state lives in the serie-mappe (e.g. /Users/ktg/repos/maskinrommet/serier/<slug>/linkedin/edition-state.json), NOT in the plugin. This file is the schema-defining TEMPLATE only; copy + fill it in the serie-mappe when producing an edition.",
|
||||
"decision": "G — production state lives in the series folder (e.g. $LTL_SERIES_ROOT/<slug>/linkedin/edition-state.json, default $HOME/linkedin-series/<slug>/...), NOT in the plugin. This file is the schema-defining TEMPLATE only; copy + fill it in the series folder when producing an edition.",
|
||||
"complements": "edition-config.json (static: calendar, freshness, captions) and <serie>/STATE.md (human-readable narrative state, overwritten each phase per the ONE-system continuity rule — there is no edition-HANDOVER.md). edition-state.json is the machine-readable companion: deterministic resumption + the durable fact-check log, immutable rules, and persona verdicts that the old HANDOVER §4/§5 used to carry.",
|
||||
"lifecycle": "/linkedin:newsletter reads this in Step 0 and rewrites it at every phase transition. Article keys mirror edition-config.json (zero-padded strings: \"01\", \"02\", ..., or \"samle\").",
|
||||
"phases": [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue