ktg-plugin-marketplace/plugins/linkedin-studio/commands
Kjell Tore Guttormsen 8d2968a482 feat(linkedin-studio): make long-form review language configurable [skip-docs]
Wave 3 / Step 9 of the remediation plan (Phase 1 — usable by a non-author).

The long-form review layer shipped Norwegian-locked: language-reviewer graded
unconditional Norwegian, voice-scrubber's gold standard was 'approved Norwegian
editions', and the editorial/content craft gates pointed at a 'skrivekontrakt §C2'
that does not ship. A non-Norwegian adopter would get English prose graded against
Norwegian idiom and a gate that depends on an unshipped contract.

- config/edition-state.template.json: add additive 'language' field (top-level,
  default 'en') + a _doc entry. Threads into the language-dependent agents.
- agents/language-reviewer.md: new 'Language parameter' section — Norwegian-specific
  checks (anglicism->Norwegian idiom, kanselli-stil) apply only when language=='no';
  any other value grades that language's equivalents and never flags idiomatic
  English as an anglicism. Default 'en'.
- agents/voice-scrubber.md: gold standard reframed to 'approved editions in the
  configured language'; the Norwegian-chronicle calibration is the language=='no'
  instantiation.
- agents/editorial-reviewer.md + agents/content-reviewer.md: the in-tree checklist
  is now the operative, self-contained source of truth; Maskinrommet §C2 is an
  optional upstream contract that does NOT ship (available only on the author's
  runs). The gates work for an adopter without it.
- commands/newsletter.md: thread 'language' through the Step 6.5 cold-inputs and the
  per-reviewer call inputs; the writing contract is now 'if it ships'.

Norwegian remains fully working when language: no (the author's case).

fact-reviewer.md was in the plan's file list but needed no change on inspection:
its F1-F4 checks (claims/quotes/numbers/sources) are language-agnostic; its
'Norwegian' mentions are boundary notes vs language-reviewer, which stay correct.

[skip-docs]: three-doc + version reconciliation is Step 21 (pre-review-gate); these
intermediate Wave commits are not pushed before the /trekreview gate.

Verify: edition-state JSON parses + has top-level language 'en'; language-reviewer
has 'language ==' references and no unconditional-Norwegian assertion; editorial
§C2 reframed to in-tree fallback ('operative source', 'does not ship'); agent
fixtures 35/35 pass; structural lint exit 0 (61 passed).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 00:55:04 +02:00
..
ab-test.md fix(linkedin-studio): downgrade A/B significance claim to directional 2026-05-30 00:25:26 +02:00
analyze.md fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate 2026-05-29 20:32:17 +02:00
audit.md fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate 2026-05-29 20:32:17 +02:00
batch.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
calendar.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
carousel.md fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate 2026-05-29 20:32:17 +02:00
competitive.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
first-post.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
headless-review.md feat(linkedin-studio): v3.1.0 — Endring 9 adversarial review-pakke + per-artefakt personas 2026-05-29 13:01:24 +02:00
import.md fix(linkedin-studio): anchor analytics root on plugin marker + surface npm install 2026-05-29 21:18:33 +02:00
linkedin.md fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate 2026-05-29 20:32:17 +02:00
monetize.md fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate 2026-05-29 20:32:17 +02:00
multiplatform.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
newsletter.md feat(linkedin-studio): make long-form review language configurable [skip-docs] 2026-05-30 00:55:04 +02:00
onboarding.md fix(linkedin-studio): ship placeholder voice profile, gitignore real, sentinel detection 2026-05-30 00:23:32 +02:00
outreach.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
pipeline.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
pivot.md feat(linkedin-studio): v3.1.0 — Endring 9 adversarial review-pakke + per-artefakt personas 2026-05-29 13:01:24 +02:00
post.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
profile.md fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate 2026-05-29 20:32:17 +02:00
quick.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
react.md fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate 2026-05-29 20:32:17 +02:00
report.md fix(linkedin-studio): honest saves/dwell wording, no false tracking claim 2026-05-30 00:28:23 +02:00
setup.md fix(linkedin-studio): ship placeholder voice profile, gitignore real, sentinel detection 2026-05-30 00:23:32 +02:00
strategy.md fix(linkedin-studio): honest saves/dwell wording, no false tracking claim 2026-05-30 00:28:23 +02:00
video.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00