# Inkhaven 1.3.9 — Finish the Editorial Pass

_On top of 1.3.8. The Editorial Pass shipped its **navigator** (1.3.6 — one
ranked worklist, jump to any finding) and its **actor** (1.3.7 — `f` streams
an AI rewrite of the located paragraph). 1.3.9 closes the four deferrals
those cuts left open, taking the cockpit to its final 1.3 form before the 1.4
Whole-Book AI Editor. Full plan:
[EDITORIAL-3_PLAN.md](../PROPOSALS/EDITORIAL-3_PLAN.md)._

## Headline

`f` rewrote the whole paragraph and fixed one finding at a time. Now it
rewrites only the flagged phrase, two more detectors feed the worklist, the
anachronism check underlines live, and `F` fixes a whole category at once.

## Span-scoped rewrite

`f` on a *localized* finding now rewrites **only its flagged phrase** and
splices the result back — the good prose around it is left alone. Echo and
pacing still rewrite the whole paragraph (there's no single phrase to
isolate); **show-don't-tell** and **filter-word** rewrite just the span. The
diff still shows the whole paragraph for context, with the same
snapshot-gated `a` accept / `r` reject.

Under the hood: a pure, char-indexed `splice_span` (clamps out-of-range,
preserves trailing newlines) + `extract_phrase` (strips wrapping quotes the
model may add); the span category marks the phrase between `« »` in context
and asks the model for just its replacement.

## Filter-words join the worklist

The last live-overlay detector not yet in `inkhaven edit`. Filter words
(intensifier crutches + hedges — `just`, `really`, `very`, `seemed`) now
surface as `filter` findings at **`info`** severity (so they sort last and
never bury sharper findings), jumpable and span-`f`-rewritable. No new
detection — it reuses the shipped `FilterWordsDetector`.

## Anachronism underlines live

The anachronism detector that fed `inkhaven edit` in 1.3.8 now underlines as
you type, like the filter-word / show-don't-tell overlays — in its own warm
amber-orange "wrong era" hue (`theme.style_warning_anachronism_fg`, default
`#eba672`). Self-gating: silent until you set
`editor.style_warnings.anachronism.year`, and it rides the master
`Ctrl+B Shift+F` style toggle.

## `F` — batch fix-all

When a category is clean enough to trust the rewriter, **`F`** in the cockpit
walks **every** rewritable finding in the current `[` `]` filter through the
*same* per-item diff review — one at a time, **never blind-applied**. `a`
accepts and advances, `r` skips to the next, `Esc` stops the run. The status
tracks progress (`editorial batch 3/7 …`); the close reports `N applied, M
skipped`.

## Under the hood

- Zero new dependencies. The span rewrite reuses the shipped
  rewrite→diff→snapshot machinery; the new findings reuse the overlay
  detectors; batch reuses the per-item diff review.
- New pure, unit-tested code: `editorial::splice_span` / `extract_phrase` /
  `FixScope` / `batch_fix_queue` (+ the `BatchFix` alias), the filter-word
  paragraph mapper, the anachronism theme colour.
- The Editorial Pass quick-help (`Ctrl+B H`) and `Ctrl+V Shift+R` chord
  descriptions, the cockpit footer legend, and Tutorial 68 all refreshed for
  span rewrite, filter-words, and `F`.
- Tests 1333 → 1339.

## Carryovers (still open)

- **The Whole-Book AI Editor** (RAG over the whole manuscript) → 1.4+.
- **Embedding-based divergent-description / drift** check (the semantic
  consistency layer) — a strong 1.4-adjacent candidate.
- **1.2.20:** ePub inline images + popup footnotes.
- PDF follow-ups: N-up / booklet quick-impose presets; CMYK-JPEG grayscale.
- A TUI `edit --deep` trigger; sixth supported language; GitHub Release
  backfill for 1.2.11–1.2.19.
