# Inkhaven 1.4.4 — Unify the companions

_The examined-authorship triad is complete — **World** (consistency), **Inner Socrates**
(structure), **Inner Editor** (craft) — but they shipped as three *parallel* features. 1.4.4
(COMPANIONS-1) makes them feel like one system: the Editor joins the unified review pass, its
intent loop closes the way Socrates' does, and a single filter + cockpit show the whole board.
Almost entirely reuse — **no new dependencies**._

_Plan: [COMPANIONS-1_PLAN.md](../PROPOSALS/COMPANIONS-1_PLAN.md)_

## The Editor joins the review pass

**`Ctrl+B Shift+C`** (the unified review pass) now includes Inner Editor. The three instant,
LLM-free checkers (world fact-check + Socrates + timeline) run as before; because the Editor is
LLM-only, it's spawned in the **background** on the open paragraph rather than blocking the
instant pass. Its craft observations (✎) arrive in Output a few seconds later and re-badge the
tree; the status reads `… · editor running…` and won't claim "clean" until it's done. (Tree
report-card badges already counted the Editor — the badge computation is kind-agnostic.)

## The Editor's intent loop closes

Inner Editor now learns from dismissal the same way Inner Socrates does. **Dismiss** the same
category enough times and it nudges you to declare it deliberate:

```sh
inkhaven inner-editor suggestions list
inkhaven inner-editor suggestions promote dictionary_richness   # → declares the intent
inkhaven inner-editor suggestions dismiss tautology             # → stop suggesting it
```

`promote` writes into the **shared intent ledger** Socrates also consults, so future findings of
that category are suppressed. (This also fixed a latent bug where Inner Socrates' own promotion
nudge was being overwritten by the generic "dismissed" status.)

## One view of the whole board

- A **`companions` meta-filter** — the Output pane's `f` source cycle gains a stop that shows all
  four examined-authorship sources at once (fact-check + Socrates + Inner Editor + timeline) and
  nothing else.
- **`inkhaven companions`** — a terminal cockpit:

  ```
  Examined authorship — ~/my-book

  Open findings:
    Inner Socrates  ◇  Notice 1 · Inquiry 4 · Probe 0   (total 5)
    Inner Editor    ✎  Praise 2 · Note 6 · Concern 1     (total 9)
    World           ●  World: ✓ consistent — 0 fact(s), 3 entities

  Intent ledger:    7 entr(ies) · 2 promotion candidate(s) pending (socrates 1, editor 1)

  AI cost — LLM calls today …
  ```

  Open findings per Inner-family member, the shared intent ledger + pending promotions, and
  today's LLM cost per companion (the same tally as `inkhaven cost`). Read-only — a glance at
  where your attention, and your token budget, are going.

## Also

- **`ink.inner_editor.suggestions`** Bund word — promotion candidates as `{category, chapter,
  count}` dicts, completing the scripting surface.

## Deferred

- **`inkhaven inner-editor config set`** was attempted but reverted: the comment-preserving HJSON
  splice can't safely create/update deeply-nested keys in the optional `inner_editor` block, and a
  naive implementation could corrupt the config. Tune via `inkhaven.hjson` or the `inkhaven config`
  TUI for now; a proper nested writer is a follow-up.

## Dependencies & compatibility

**No external application or binary dependencies; no new runtime crates.** The only new storage is
the Editor's `editor_dismissals` tally (additive); no on-disk shape moved. Tests 1879 → 1882.
