feat(linkedin-studio): N8 — stemme-kjeden (chronicle-voice-profile + drift-logg + language-resolve + auto-gull) [skip-docs]
Bind the long-form VOICE before prose — the discipline the line already applies to SOURCES (validate-binding), its strongest link. - C-1/A2-F1: voice-trainer distils a chronicle-voice-profile from the published gold corpus (per language/format); newsletter Step 0/3a/3b bind drafting to it, with an explicit never-silent fallback to the short-form corpus (which the engine itself calls degrading for chronicle voice). - C-2: Step 3a Pass 0 READS the chronicle-voice-drift-log as a negative list (it was append-only, never consumed); Step 3b re-reads it in expansion. - C-3: Step 1 resolves + persists the top-level edition-state.language, making the template doc-string's "Resolved at Step 1" claim true; the Norwegian review axis (language-reviewer / voice-scrubber) now fires when the edition IS Norwegian instead of being silently off by default. Step 6.5 already consumed the field — resolving it closes the axis end-to-end. - A2-F2: Step 8 lock appends the locked edition to ingest/published (provenance=published), so the gold corpus the profile distils from grows one edition at a time — never the engine's drafts. Domain-general throughout (languages/formats from the user's own corpus). test-runner 140 -> 146 (Section 16o: 6 unconditional voice-chain greps + non-vacuity self-test; anti-erosion floor 123 -> 129). All six suites green (trends 300, brain 134, hooks 140, tests 35, render 60). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014bE7VbkmR3cqHFEeGfzgwb
This commit is contained in:
parent
9de38c4939
commit
b30b0e208f
4 changed files with 197 additions and 13 deletions
|
|
@ -152,6 +152,39 @@ Architecture: [prose/sectioned/framework]
|
|||
|
||||
Flag if: fewer than 5 samples (low confidence), single time period (temporal bias), or contradictory patterns (possible ghostwriting).
|
||||
|
||||
### Long-form chronicle voice profile (per language / format)
|
||||
|
||||
Short-form feed posts and long-form editions (newsletters, essays, chronicles) are
|
||||
**different registers of the same author** — a device the author bans in a punchy
|
||||
short post (e.g. the em-dash) can be load-bearing rhythm in a long-form chronicle.
|
||||
Drafting long-form against the short-form corpus therefore *degrades* the chronicle
|
||||
voice (this is `voice-scrubber`'s canonical rule). So the long-form pipeline binds
|
||||
to its own distilled artifact, which this agent generates:
|
||||
|
||||
- **Artifact:** `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/profile/chronicle-voice-profile.md`
|
||||
— a distilled long-form voice profile built with the same six-dimension
|
||||
framework as the general profile, but from **only the long-form gold corpus**.
|
||||
- **Corpus (published gold only):** the approved/published long-form editions under
|
||||
`${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/ingest/published/`
|
||||
carrying `provenance=published`. The same model-collapse fence applies —
|
||||
**never distil chronicle voice from `provenance=ai-draft`**, and never from the
|
||||
short-form `voice-samples/authentic-voice-samples.md` corpus (wrong register).
|
||||
- **Per language AND format — domain-general.** Emit one profile section per
|
||||
`(language, format)` pair actually present in the corpus (e.g. `no` / newsletter),
|
||||
keyed by those axes; the author's languages and formats come from their OWN
|
||||
corpus, never hardcoded. If a `(language, format)` pair has no published editions
|
||||
yet, say so plainly and emit no section for it — do not invent a chronicle voice
|
||||
from short-form samples or from assumptions.
|
||||
- **Grows automatically.** Each locked edition is appended to the gold corpus at
|
||||
`/linkedin:newsletter` Step 8 (`provenance=published`), so re-running this
|
||||
distillation sharpens the chronicle profile over editions without manual curation.
|
||||
|
||||
Trigger this distillation on the same events as the general profile (a new
|
||||
published edition, quarterly audit, explicit request). The long-form pipeline
|
||||
(`/linkedin:newsletter` Step 0 / 3a / 3b) reads this artifact; when it is missing,
|
||||
that pipeline warns and falls back — it never silently drafts against the wrong
|
||||
corpus.
|
||||
|
||||
## Voice Drift Detection
|
||||
|
||||
### Drift Scoring
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue