67 lines
3.1 KiB
Markdown
67 lines
3.1 KiB
Markdown
# /unslop mimic
|
|
|
|
Single-pass voiced writing. Draft or rewrite in a taught voice, then clear the
|
|
full gate battery. Route here on "write this like me", "match my voice", or
|
|
"mimic this author" once a voice card exists. Read `references/mimic.md` for card
|
|
anatomy, scoring, and failure modes.
|
|
|
|
## Flow
|
|
|
|
1. Load the situation sheet the task needs. Read `card.md` for the always-on core
|
|
(rhythm, contraction habits, punctuation, openers, the Never list) and the
|
|
one `card/<situation>.md` sheet that matches what you are writing. Load only
|
|
what the task needs; the card is layered so generation stays cheap.
|
|
2. Draft or rewrite in that voice. Follow the card's measured markers and
|
|
verbatim snippets; do not invent a habit the samples cannot support.
|
|
3. Run the output through **every** removal gate:
|
|
```bash
|
|
python3 scripts/banned_phrase_scan.py <<< "$OUTPUT"
|
|
python3 scripts/structure_scan.py <<< "$OUTPUT"
|
|
python3 scripts/readability_metrics.py <<< "$OUTPUT"
|
|
python3 scripts/validate_preservation.py original.txt "$OUTPUT_FILE"
|
|
python3 scripts/diff_check.py original.txt "$OUTPUT_FILE"
|
|
```
|
|
4. Score the voice:
|
|
```bash
|
|
python3 scripts/voice_score.py --profile profile.json "$OUTPUT_FILE"
|
|
```
|
|
|
|
## The rule
|
|
|
|
A mimic that scores well on voice but trips a slop gate is **rejected**. Voice
|
|
never buys an exemption from the constitution — the removal gates are hard, the
|
|
voice score is a guide. Meaning preservation versus the original draft is its own
|
|
hard gate, never blended into the voice score.
|
|
|
|
## Refine — when one pass is not enough
|
|
|
|
Most users teach once and mimic cheaply thereafter. When a single pass keeps
|
|
scoring short of the target voice, hill-climb with the refine loop — worth the
|
|
cost only then:
|
|
|
|
```bash
|
|
python3 evals/run_mimic_refine.py --samples samples/ --draft draft.md --out OUT
|
|
```
|
|
|
|
LIVE (default) calls `--generate-cmd` (default `claude -p`) once per beam per
|
|
iteration; `--candidates-dir DIR` runs the loop logic with no model calls. Hard
|
|
gates (banned-phrase, structure, draft→candidate preservation, copy-gate, 150-
|
|
word floor) discard a candidate regardless of score; survivors are scored against
|
|
a held-out DEV split with the full `voice_score` composite, and the best-so-far
|
|
never regresses. The **divergence guard** halts and sets
|
|
`reward_hacking_warning` when the A composite improves while DEV worsens for two
|
|
iterations — the reward-hacking signature. Confirm a win only when
|
|
`mimic_stats.py` shows the CI lower bound > 0 and p < 0.05. Internals, baselines,
|
|
and the failure table are in `references/mimic.md`.
|
|
|
|
## Voice check
|
|
|
|
"Does this sound like me?" — score only, change nothing. Run
|
|
`python3 scripts/voice_score.py --profile .unslop/voice/<name>/profile.json
|
|
--impostors evals/fixtures/voice/impostors --seed 7 <draft>` and report the
|
|
composite (lower is more them), the GI rank, and the two or three metric
|
|
deltas that explain the score, in plain words ("your sentences run longer than
|
|
usual; contractions match"). No rewrite unless asked. This is the cheapest
|
|
voice interaction and the usual one after teach: check drafts often, commission
|
|
rewrites rarely.
|