feat(linkedin-studio): SB-S1 wire voice-trainer to published-only + gate-enforce it [skip-docs]
voice-trainer's Gather step now reads ingest/published/ (provenance=published) as the primary gold source, keeps voice-samples as a human tributary (not reshaped), forbids learning from provenance=ai-draft, and fences the auto-append trap. New gate Section 16c (Brain Published-Only Invariant) enforces the wiring with exact-literal greps (grep -F 'ingest/published' + 'provenance=ai-draft') + a non-vacuity self-test (rejects an 'AI-generated'-only probe), against voice-trainer.md + the new contract doc docs/second-brain/ingest-manual-import.md. BRAIN_TESTS_FLOOR 34→63; assertion floor 75→78 (+3 unconditional checks; not pinned to deps-present TOTAL to preserve the warn-skip margin). Gate 90→93/0/0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RigJBiRFNtFZKCz21qNbQ4
This commit is contained in:
parent
b65eb25328
commit
ac532f9218
3 changed files with 155 additions and 4 deletions
|
|
@ -133,7 +133,7 @@ Architecture: [prose/sectioned/framework]
|
|||
|
||||
### Analysis Process
|
||||
|
||||
1. **Gather** — Read all files in `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/`, existing profile from `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/profile/user-profile.md`, and template from `config/user-profile.template.md`
|
||||
1. **Gather (published-only gold signal first)** — Read the user's actual published posts from `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/ingest/published/` (`provenance=published` — the highest-trust source). Then read the human-curated `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/` corpus (kept as a tributary, not reshaped), the existing profile from `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/profile/user-profile.md`, and the template from `config/user-profile.template.md`. **Never learn voice patterns from any content marked `provenance=ai-draft`** — a content engine that learns its own voice from its own drafts collapses toward its priors (this generalises voice-scrubber's "gold standard = approved editions, never the draft corpus"). **Fence:** any future auto-capture into a learning corpus (the voice-samples template's Stop-hook hint) MUST tag provenance and admit `provenance=published` only — never blind-append generated drafts.
|
||||
2. **Analyze** — Apply all six dimensions to each sample. Note dates for temporal analysis. Flag inconsistent samples as outliers or evolution.
|
||||
3. **Synthesize** — Patterns in 70%+ of samples = core traits. 40-70% = situational traits (note context). <40% = experimental traits. Track temporal trends.
|
||||
4. **Build** — Compile into Voice Profile Document format. Include confidence levels (high/medium/low) and concrete examples for every trait.
|
||||
|
|
@ -141,12 +141,15 @@ Architecture: [prose/sectioned/framework]
|
|||
|
||||
### Sample Quality Priorities
|
||||
|
||||
0. **`ingest/published/` records (`provenance=published`) — the gold signal; rank above all else.**
|
||||
1. Published posts with high engagement (audience-validated authenticity)
|
||||
2. Recent samples (last 6 months reflect current voice)
|
||||
3. Author-confirmed samples ("this sounds like me")
|
||||
4. Longer samples (more data points)
|
||||
5. Varied contexts (different content types reveal range)
|
||||
|
||||
**Exclude unconditionally: anything marked `provenance=ai-draft`** (the model-collapse guard — never train voice on the engine's own drafts).
|
||||
|
||||
Flag if: fewer than 5 samples (low confidence), single time period (temporal bias), or contradictory patterns (possible ghostwriting).
|
||||
|
||||
## Voice Drift Detection
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue