"One layer always gives the same answer. The other has to think. Keep them on opposite sides of a hard line."
The Two Layers, Rediscovered
Rekindle's deepest structural rule isn't invented — it's the seam cwkWritingToolkit already had. That old plugin did two things, and they were fundamentally different kinds of thing. The WordPress-tag rulesets were deterministic: wrap this selection in that markup, every time, no thought required. The corpus autocomplete was judgment: reach for the word the writer would actually use next. One is a fixed transform; the other is a decision. Rekindle names them and gives each its own home — deterministic to the Rust core, judgment to Pippa.
Layer Question it answers Home
------------- ----------------------------- --------
deterministic "same input -> same output?" Rust core
judgment "what fits here, in context?" Pippa
Never Mix Them
The rule isn't just "have two layers" — it's never mix them. Don't push judgment (tone, register, does-this-sound-like-Dad) into the Rust core, and don't put deterministic work (parsing frontmatter, applying an export ruleset) behind an AI call. The moment you blur the seam, both sides get worse: your deterministic transforms become non-reproducible because a model is in the path, and your judgment gets brittle because it's trapped in a rule table. The line is what keeps each side able to do its job well.
The Same Spine Across the Family
This is a family spine, not a Rekindle quirk. Loomis draws it as deterministic geometry first, ML confined to landmark fitting — the drawing construction is computed and reproducible; only the messy perception step uses a model. Rekindle draws the same line one domain over: reproducible text transforms in Rust, open-ended voice and rewriting in Pippa. Whenever a tool mixes 'always the same' work with 'needs a decision' work, the winning move is to name the seam and refuse to let the two bleed.