v0.36.0 — vocabulary the field never wrote, the removal map, and residue
Five tracks from one plan, each answering a specific complaint about what the
plugin could not see: words the field never wrote, sentences a mentor marked
as "jargon, what does this mean", a condense pass that scraped a few percent
by hand, and the trace an edit leaves behind. Three new tools, three new
structure families, one new exit contract, and the standard at v3.8 inside its
750-line budget. Evidence: §23.
The zero-hit audit, and a third projection asymmetry
deai_register kept a 15-use floor so that it would not flag a refereed
paper more often than not. The owner's rule replaces the knob with an
exhaustive question: which body words does the manuscript use that no
passage of the field's corpus carries? Every one is listed under
register-zero:<term>, strong unless it is a mechanical formation of an
attested stem, and the only other exemptions are the author's — the paper
defines the word, or cites the method it names. Measured on 203 held-out
refereed papers against 173 machine documents it is not a detector (2.66 words
per 1,000 on every refereed paper, rank AUC 0.221) and ships as advice.
Building it exposed the third instance of the projection asymmetry recorded
in §17.4 and §18.1: section headings sat in the manuscript's body projection
but never in a corpus passage, so Validation fused with the sentence under
it and read as a word the field never wrote. extract_sections.RE_HEADING_COMMAND
is now the one owner of the heading pattern and deai_reference.units,
deai_register.body_only and length_gate consume it. The thresholded rule
moved with it on the same 203 papers: 196 findings → 81, 0.0858 → 0.0351 per
1,000 words.
L2.collocation: words the field never joins
physical cells is two ordinary words and a pair no passage of 41,710 has
written. tools/deai_collocation.py judges each sentence by the fraction of
its distinct adjacent common-word pairs the bank does not attest, against a
leave-one-out reference per bucket at sentence unit — at calibration a pair
seen in exactly one passage is that passage's own. Only common words are
judged as partners (11,286 of them), pairs break at punctuation, placeholders
and dashes, and each flagged pair carries its expected co-occurrence and
e^−λ. On the private Letter it flags five of the six mentor-marked phrases
still present; on held-out papers the document novel-pair fraction separates
machine text at AUC 0.688.
Three structure families from the mentor's margin
Paper-as-agent subjects ("This paper presents"), wh-cleft openers ("What
matters is") and modifier stacks (three-plus tokens before a head noun with
two hyphenated compounds) join deai_structure's auxiliary class: named on
the sentence, never in template_score, with per-bucket human fractions in
the recalibrated baseline (stacks 2.5–15.9%, paper-agent 0.13–1.00%, wh-cleft
0.00–0.23%).
Condensation that is measured against a map, not a feeling
tools/condense_map.py enumerates every removable entry — restatements with
their canonical home, zero-gain sentences, dead figures/tables/labels/macros/
acronyms, verbose constructions, repeated glosses, duplicated paragraphs —
with the words each frees, and totals a default target. length_gate.py --require-shrink turns that target into an exit code (length-shrink-short,
strong, exit 1). Held-out refereed papers carry a median default target of
3.1% of prose; the old condense skill removed less than that by reading. The
skill is rewritten around the map: one disposition per entry, closed by the
gate.
L4.residue: the trace an edit leaves
tools/deai_residue.py: first-person drafting history (we initially, no longer), edit-meta text (TODO, see previous version), a heading or
caption whose object the body never names, and with --before/--git-ref
the label an edit added and does not earn. Exit 1 on a strong finding is the
third narrow exit contract, so its strengths were set on 203 held-out refereed
papers rather than assumed: the first families put a strong finding in 154 of
them; reading body prose only (a \newcommand{\TODO} in a preamble and
"Planck Collaboration XXX" in a bibliography are not residue), dropping used to (174 instrumental hits) and demoting initially/originally/at first
bring that to 34, and the static negative-label rule is ordinary while the diff
rule gates. The history families live once in the tool,
mirrored between markers in skills/paper/SKILL.md, and validate_plugin's
tenth check calls the tool's own validator_check to prove the mirror and to
scan shipped documentation for the edit-meta literals.
Everything that had to move with it
ai_ism_lint runs both new axes by default (--no-collocation,
--no-residue); eval_findings and label_findings cover collocation; the
examples/ table gains a collocation-novel row (3 → 6, and why); the
standard is v3.8 at 749 lines. 38 tools, 463 tests in 23 files, 10 validator
checks. The README latency table is re-taken whole: the model-free row rose
from 458 ms to 1.07 s, most of it the 541,309-pair bank load, which
--no-collocation drops. v0.30.0–v0.31.0 moved to CHANGELOG-ARCHIVE-RECENT.md;
this file had reached 790 lines.