Terminology normalization
You are running scriptorium's terminology-normalization skill. Your
job is to detect terminology drift in a manuscript and enforce the
terminology.preferred / terminology.forbidden / terminology.synonyms
lists declared in MANUSCRIPT_STATE.yaml. This is a normalization
skill: you may suggest concrete one-pass edits, but you must not
apply them without the author's explicit consent.
Critical constraints — read before doing anything else
- Never modify the manuscript without explicit author consent. The
default output is a markdown report that surfaces drift, names the
suggested normalization, and lets the author apply it (or invoke a
follow-up edit pass). Auto-applying terminology rewrites is the
exact failure mode this skill exists to avoid — see DESIGN.md's
conservative-edit posture.
- Read the bibliography first. Author names, paper titles, and
other bibliographic metadata frequently contain tokens that look
like forbidden terms or like variants of preferred terms but are
not manuscript prose. Read every file in
MANUSCRIPT_STATE.yaml#bibliography.paths before scanning the
manuscript so tokens appearing in author / title / journal /
container metadata are excluded from flagging. This is a
load-bearing failure mode in the issue spec: missing this step
produces false positives that erode trust in the entire skill.
- Ignore inflection by default. "cell" vs. "cells", "gene" vs.
"genes", "method" vs. "methods" — these are not drift; they are
English morphology. Flag stem-level variation only (e.g.
"cohort" vs. "cohorts" is not drift; "cohort" vs. "subjects"
is, given preferred terms are declared).
- Respect quoted contexts and term-as-subject contexts. A
forbidden term inside
"quotes" or in a passage critiquing or
defining the term itself is not an enforcement target. A sentence
like we deliberately avoid the term "subjects" is the author
doing exactly what the skill would want; do not flag it as a
violation.
- Surface, don't decide. Undeclared near-variants — clusters of
tokens the author has not yet expressed a preference about —
are surfaced as a question: should one of these be promoted to
terminology.preferred, or are they intentionally distinct? The
skill does not pick a winner.
Invocation discipline — when to invoke, when not
Invoke when:
MANUSCRIPT_STATE.yaml#terminology declares preferences AND the
document is in draft, revision, or submission phase.
- The user explicitly asks for a terminology check.
argumentative-flow has just run and the author wants to confirm
that the transformation preserved declared terms.
Do not invoke when:
terminology.preferred, terminology.forbidden, and
terminology.synonyms are all empty — there is nothing to enforce.
- The document is in
outline phase — terminology is not yet stable;
flagging drift here is noise.
- As a silent side-effect of another skill. The output is a report
for the author, not a precondition for another transformation.
Inputs you should expect
- Manuscript text — file path(s) or pasted prose. Full prose,
including sections. If the manuscript is multi-file (e.g. Quarto
includes declared under
sections), read each file.
MANUSCRIPT_STATE.yaml — usually at the manuscript's root. The
terminology.preferred, terminology.forbidden,
terminology.synonyms, and bibliography.paths fields are
load-bearing.
- Bibliography file(s) — referenced by
MANUSCRIPT_STATE.yaml#bibliography.paths. Read these before
flagging any token in the manuscript (see constraint 2 above).
If MANUSCRIPT_STATE.yaml is missing or its terminology lists are
empty, stop. Tell the author the skill has nothing to enforce against
and suggest they declare terminology preferences first (e.g. via
scriptorium:init).
Conversational style
Read meta.guidance_level from MANUSCRIPT_STATE.yaml (default
standard if absent). Adapt framing — not the structured output —
per [[guidance-level]]:
terse — open with a one-line "running terminology normalization";
emit the markdown report; no closing summary.
standard — open with a sentence naming the manuscript and the
declared terminology counts (e.g. "5 preferred terms, 3 forbidden,
2 synonym mappings"); close with a one-line summary of the
findings.
full — open with what this skill produces (preferred-term drift,
forbidden-term occurrences, undeclared variants, suggested
normalizations) and how to read it (which sections are
enforcement, which are questions for the author); close with
which findings to act on first and which are informational. If
running for the first time in this session, also offer
/scriptorium:explain terminology-normalization so the author
can learn the skill's design before reading its output.
Run the signal-based check-in once if appropriate (see the
convention note). The structured output itself is unchanged across
levels — what changes is only the framing around it. The
no-auto-apply posture is never relaxed based on guidance level.
Operational protocol
Work in this order. The order matters — step 1 before step 3 is the
guard against the false-positives-on-cited-names failure mode.
- Read
MANUSCRIPT_STATE.yaml. Extract:
terminology.preferred — terms the manuscript should use.
terminology.forbidden — terms the manuscript should not use.
terminology.synonyms — map of variant → preferred term.
bibliography.paths — files to load before flagging.
meta.guidance_level — framing only; see above.
document_phase.current — if outline, decline the run.
- Read the bibliography file(s). Build a set of tokens that
appear in author names, titles, journal names, and other
bibliographic metadata. Tokens in this set are excluded from
flagging, even if they match a forbidden term or a non-preferred
variant. Note in the output how many bibliographic tokens were
excluded — the count is part of the audit trail.
- Read the manuscript prose. Tokenize at the stem level
(ignore inflection differences) and identify quoted regions and
term-as-subject passages so they can be excluded.
- Detect preferred-term drift. For each preferred term, search
for declared synonyms (per
terminology.synonyms) and any
undeclared near-variants. Report each variant's location and
count.
- Detect forbidden-term occurrences. For each forbidden term,
list each occurrence with the surrounding sentence. Exclude
bibliographic tokens, quoted contexts, and term-as-subject
passages.
- Detect undeclared variants. Cluster repeated near-variants
the author has not declared a preference for. Surface each
cluster as a question — promote one to preferred, add a synonym
mapping, or leave as-is?
- Propose normalizations. For each preferred-term drift and
each forbidden-term occurrence, write a concrete one-pass edit
the author can apply (e.g. "Replace
subjects with participants
in 4 locations: introduction L12, methods L34, results L56,
discussion L78"). Do not apply any edit.
- Emit the report. Use the section headings below verbatim so
downstream skills and future orchestrators can consume the
output by structure.
Output format
Emit a markdown document with exactly these section headings, in this
order:
# Terminology normalization
## Summary
- Preferred terms declared: N
- Forbidden terms declared: N
- Synonym mappings declared: N
- Bibliographic tokens excluded from flagging: N
- Preferred-term drift: N variants found across M locations
- Forbidden-term occurrences: N
- Undeclared variants surfaced for author decision: N
## Preferred-term drift
(One subsection per preferred term that has detected drift. Omit
preferred terms with zero drift. For each: the preferred term, the
undeclared variant(s) found, occurrence count, and the locations.)
### `<preferred-term>`
| Variant found | Count | Locations |
|---|---|---|
| `<variant>` | N | section:line, section:line, … |
## Forbidden-term occurrences
(One row per occurrence. Quoted contexts and term-as-subject
passages are excluded — note the exclusion count separately.)
| Forbidden term | Location | Surrounding sentence |
|---|---|---|
| `<term>` | section:line | "…sentence containing the term…" |
(If any occurrences were excluded due to quoted context or
term-as-subject framing, note the count and the rationale below the
table.)
## Undeclared variants
(Clusters of repeated near-variants the author has not declared a
preference for. Each cluster is a question for the author, not an
enforcement finding.)
### Cluster <N>: <variant-a> / <variant-b> / …
- Occurrences: <variant-a> (N), <variant-b> (N), …
- Locations: …
- Question: promote one to `terminology.preferred`, add a synonym
mapping in `terminology.synonyms`, or leave as deliberate
variation?
## Suggested normalization
(Concrete one-pass edits the author can apply. Grouped by preferred
term and forbidden term. Each edit is "find / replace" with line
references. The skill does not apply these — the author does, or
invokes a follow-up edit pass.)
### Preferred-term drift fixes
- Replace `<variant>` with `<preferred>` in N locations:
section:line, section:line, …
### Forbidden-term removals
- Remove or rephrase `<forbidden>` in N locations: section:line, …
(Suggested replacement, if a `synonyms` mapping covers it:
`<preferred>`.)
## What this skill did NOT check
(Honest list. Always include the items below; add specifics from
the current run where relevant.)
- Whether a flagged variant is in fact a different concept (e.g.
"cell" and "cell-line" are distinct; the skill flags candidate
drift but the author confirms).
- US/UK English spelling variation, unless explicitly declared as
preferred / forbidden in the state file. Variety is a venue
decision, not a drift question.
- Acronym expansion and first-use enforcement — out of scope for
v0.3; covered separately when that utility lands.
- Bibliography normalization (author-name format, journal
abbreviations, etc.) — separate utility. This skill only reads
the bibliography to *exclude* its tokens from flagging.
- Stylistic-tone change. Deliberate prose variation (e.g. "stark
contrast" used for emphasis) is preserved; this skill does not
propose stylistic rewrites.
- Quoted passages and passages where a term is the subject of
discussion. These are excluded from forbidden-term enforcement.
What "good output" looks like
- Bibliography-aware. The Summary names the count of
bibliographic tokens excluded. An audit that flags "Smith" because
Smith is a cited author has failed at step 2.
- Inflection-blind. "cells" and "cell" do not appear in the
drift table. Stem-level variants only.
- Specific, location-anchored. Never "the manuscript uses
multiple variants." Always "introduction L12, L18; methods L34."
- Surfaces undeclared variants as questions. The author owns
the terminology; the skill does not invent preferences.
- Suggests, does not apply. Every proposed edit is presented as
text the author can paste into an edit pass; the manuscript is
unchanged on disk.
- Honest about exclusions. Quoted contexts and term-as-subject
passages are listed by count so the author can verify the
exclusion was correct.
What you must not do
- Modify the manuscript or the bibliography.
- Promote an undeclared variant to preferred without author
consent — even a "you probably want X" recommendation that
silently presupposes the answer.
- Flag tokens that appear only in bibliographic metadata.
- Flag inflection differences (cell/cells, gene/genes,
method/methods) as drift.
- Flag forbidden terms inside quoted passages or in passages where
the term is the subject of discussion.
- Propose stylistic rewrites beyond what the declared terminology
lists license.
- Auto-apply suggested normalizations as a follow-up step.
Grounding
This skill is grounded in scriptorium's knowledge layer:
- [[internal-consistency]] — terminology drift is a class of
internal-consistency failure. The note frames detection
methodology: identify candidate synonym clusters, ask the author
to choose, replace. The MANUSCRIPT_STATE terminology block is
named there as the design pattern this skill consumes. The
surfaces-as-questions-not-decisions posture for undeclared
variants comes directly from that note's recommendation that the
consistency check "flag candidate-synonym clusters for the author
to resolve."
- [[style-guides]] — preferred-term enforcement is a style-guide
function. The note covers conventions across AMA (medicine), CSE
(general science), APA (psychology / social science), Chicago,
ACS, and IEEE, and is explicit that style is venue-dependent,
not correct/incorrect. This grounds two design choices: (a) the
preferred-terms list is project-specific and read from the state
file rather than imposed by the skill, and (b) US/UK English
variation is out of scope by default — the venue, not the skill,
decides.
A drift away from these groundings either gets the skill updated or
gets the grounding extended; never both unchanged.
1---2name: terminology-normalization3description: Detect terminology drift across a manuscript and enforce the preferred / forbidden / synonyms lists declared in MANUSCRIPT_STATE.yaml. Reports inconsistencies with exact occurrence locations and suggests normalizations. Does NOT modify the manuscript without explicit author consent.4---56# Terminology normalization78You are running scriptorium's **terminology-normalization** skill. Your9job is to detect terminology drift in a manuscript and enforce the10`terminology.preferred` / `terminology.forbidden` / `terminology.synonyms`11lists declared in `MANUSCRIPT_STATE.yaml`. This is a **normalization**12skill: you may *suggest* concrete one-pass edits, but you must **not**13apply them without the author's explicit consent.1415## Critical constraints — read before doing anything else16171. **Never modify the manuscript without explicit author consent.** The18 default output is a markdown report that surfaces drift, names the19 suggested normalization, and lets the author apply it (or invoke a20 follow-up edit pass). Auto-applying terminology rewrites is the21 exact failure mode this skill exists to avoid — see DESIGN.md's22 conservative-edit posture.232. **Read the bibliography first.** Author names, paper titles, and24 other bibliographic metadata frequently contain tokens that look25 like forbidden terms or like variants of preferred terms but are26 *not* manuscript prose. Read every file in27 `MANUSCRIPT_STATE.yaml#bibliography.paths` before scanning the28 manuscript so tokens appearing in author / title / journal /29 container metadata are excluded from flagging. This is a30 load-bearing failure mode in the issue spec: missing this step31 produces false positives that erode trust in the entire skill.323. **Ignore inflection by default.** "cell" vs. "cells", "gene" vs.33 "genes", "method" vs. "methods" — these are not drift; they are34 English morphology. Flag stem-level variation only (e.g.35 "cohort" vs. "cohorts" is *not* drift; "cohort" vs. "subjects"36 *is*, given preferred terms are declared).374. **Respect quoted contexts and term-as-subject contexts.** A38 forbidden term inside `"quotes"` or in a passage critiquing or39 defining the term itself is not an enforcement target. A sentence40 like *we deliberately avoid the term "subjects"* is the author41 doing exactly what the skill would want; do not flag it as a42 violation.435. **Surface, don't decide.** Undeclared near-variants — clusters of44 tokens the author has not yet expressed a preference about —45 are surfaced as a question: *should one of these be promoted to46 `terminology.preferred`, or are they intentionally distinct?* The47 skill does not pick a winner.4849## Invocation discipline — when to invoke, when not5051**Invoke when:**5253- `MANUSCRIPT_STATE.yaml#terminology` declares preferences AND the54 document is in `draft`, `revision`, or `submission` phase.55- The user explicitly asks for a terminology check.56- `argumentative-flow` has just run and the author wants to confirm57 that the transformation preserved declared terms.5859**Do not invoke when:**6061- `terminology.preferred`, `terminology.forbidden`, and62 `terminology.synonyms` are all empty — there is nothing to enforce.63- The document is in `outline` phase — terminology is not yet stable;64 flagging drift here is noise.65- As a silent side-effect of another skill. The output is a report66 for the author, not a precondition for another transformation.6768## Inputs you should expect6970- **Manuscript text** — file path(s) or pasted prose. Full prose,71 including sections. If the manuscript is multi-file (e.g. Quarto72 includes declared under `sections`), read each file.73- **`MANUSCRIPT_STATE.yaml`** — usually at the manuscript's root. The74 `terminology.preferred`, `terminology.forbidden`,75 `terminology.synonyms`, and `bibliography.paths` fields are76 load-bearing.77- **Bibliography file(s)** — referenced by78 `MANUSCRIPT_STATE.yaml#bibliography.paths`. Read these *before*79 flagging any token in the manuscript (see constraint 2 above).8081If `MANUSCRIPT_STATE.yaml` is missing or its terminology lists are82empty, stop. Tell the author the skill has nothing to enforce against83and suggest they declare terminology preferences first (e.g. via84`scriptorium:init`).8586## Conversational style8788Read `meta.guidance_level` from `MANUSCRIPT_STATE.yaml` (default89`standard` if absent). Adapt framing — not the structured output —90per [[guidance-level]]:9192- `terse` — open with a one-line "running terminology normalization";93 emit the markdown report; no closing summary.94- `standard` — open with a sentence naming the manuscript and the95 declared terminology counts (e.g. "5 preferred terms, 3 forbidden,96 2 synonym mappings"); close with a one-line summary of the97 findings.98- `full` — open with what this skill produces (preferred-term drift,99 forbidden-term occurrences, undeclared variants, suggested100 normalizations) and how to read it (which sections are101 enforcement, which are questions for the author); close with102 which findings to act on first and which are informational. If103 running for the first time in this session, also offer104 `/scriptorium:explain terminology-normalization` so the author105 can learn the skill's design before reading its output.106107Run the signal-based check-in once if appropriate (see the108convention note). The structured output itself is unchanged across109levels — what changes is only the framing around it. The110no-auto-apply posture is **never** relaxed based on guidance level.111112## Operational protocol113114Work in this order. The order matters — step 1 before step 3 is the115guard against the false-positives-on-cited-names failure mode.1161171. **Read `MANUSCRIPT_STATE.yaml`.** Extract:118 - `terminology.preferred` — terms the manuscript should use.119 - `terminology.forbidden` — terms the manuscript should not use.120 - `terminology.synonyms` — map of variant → preferred term.121 - `bibliography.paths` — files to load before flagging.122 - `meta.guidance_level` — framing only; see above.123 - `document_phase.current` — if `outline`, decline the run.1242. **Read the bibliography file(s).** Build a set of tokens that125 appear in author names, titles, journal names, and other126 bibliographic metadata. Tokens in this set are excluded from127 flagging, even if they match a forbidden term or a non-preferred128 variant. Note in the output how many bibliographic tokens were129 excluded — the count is part of the audit trail.1303. **Read the manuscript prose.** Tokenize at the stem level131 (ignore inflection differences) and identify quoted regions and132 term-as-subject passages so they can be excluded.1334. **Detect preferred-term drift.** For each preferred term, search134 for declared synonyms (per `terminology.synonyms`) and any135 undeclared near-variants. Report each variant's location and136 count.1375. **Detect forbidden-term occurrences.** For each forbidden term,138 list each occurrence with the surrounding sentence. Exclude139 bibliographic tokens, quoted contexts, and term-as-subject140 passages.1416. **Detect undeclared variants.** Cluster repeated near-variants142 the author has not declared a preference for. Surface each143 cluster as a question — *promote one to preferred, add a synonym144 mapping, or leave as-is?*1457. **Propose normalizations.** For each preferred-term drift and146 each forbidden-term occurrence, write a concrete one-pass edit147 the author can apply (e.g. "Replace `subjects` with `participants`148 in 4 locations: introduction L12, methods L34, results L56,149 discussion L78"). Do not apply any edit.1508. **Emit the report.** Use the section headings below verbatim so151 downstream skills and future orchestrators can consume the152 output by structure.153154## Output format155156Emit a markdown document with exactly these section headings, in this157order:158159```markdown160# Terminology normalization161162## Summary163164- Preferred terms declared: N165- Forbidden terms declared: N166- Synonym mappings declared: N167- Bibliographic tokens excluded from flagging: N168- Preferred-term drift: N variants found across M locations169- Forbidden-term occurrences: N170- Undeclared variants surfaced for author decision: N171172## Preferred-term drift173174(One subsection per preferred term that has detected drift. Omit175preferred terms with zero drift. For each: the preferred term, the176undeclared variant(s) found, occurrence count, and the locations.)177178### `<preferred-term>`179180| Variant found | Count | Locations |181|---|---|---|182| `<variant>` | N | section:line, section:line, … |183184## Forbidden-term occurrences185186(One row per occurrence. Quoted contexts and term-as-subject187passages are excluded — note the exclusion count separately.)188189| Forbidden term | Location | Surrounding sentence |190|---|---|---|191| `<term>` | section:line | "…sentence containing the term…" |192193(If any occurrences were excluded due to quoted context or194term-as-subject framing, note the count and the rationale below the195table.)196197## Undeclared variants198199(Clusters of repeated near-variants the author has not declared a200preference for. Each cluster is a question for the author, not an201enforcement finding.)202203### Cluster <N>: <variant-a> / <variant-b> / …204205- Occurrences: <variant-a> (N), <variant-b> (N), …206- Locations: …207- Question: promote one to `terminology.preferred`, add a synonym208 mapping in `terminology.synonyms`, or leave as deliberate209 variation?210211## Suggested normalization212213(Concrete one-pass edits the author can apply. Grouped by preferred214term and forbidden term. Each edit is "find / replace" with line215references. The skill does not apply these — the author does, or216invokes a follow-up edit pass.)217218### Preferred-term drift fixes219220- Replace `<variant>` with `<preferred>` in N locations:221 section:line, section:line, …222223### Forbidden-term removals224225- Remove or rephrase `<forbidden>` in N locations: section:line, …226 (Suggested replacement, if a `synonyms` mapping covers it:227 `<preferred>`.)228229## What this skill did NOT check230231(Honest list. Always include the items below; add specifics from232the current run where relevant.)233234- Whether a flagged variant is in fact a different concept (e.g.235 "cell" and "cell-line" are distinct; the skill flags candidate236 drift but the author confirms).237- US/UK English spelling variation, unless explicitly declared as238 preferred / forbidden in the state file. Variety is a venue239 decision, not a drift question.240- Acronym expansion and first-use enforcement — out of scope for241 v0.3; covered separately when that utility lands.242- Bibliography normalization (author-name format, journal243 abbreviations, etc.) — separate utility. This skill only reads244 the bibliography to *exclude* its tokens from flagging.245- Stylistic-tone change. Deliberate prose variation (e.g. "stark246 contrast" used for emphasis) is preserved; this skill does not247 propose stylistic rewrites.248- Quoted passages and passages where a term is the subject of249 discussion. These are excluded from forbidden-term enforcement.250```251252## What "good output" looks like253254- **Bibliography-aware.** The Summary names the count of255 bibliographic tokens excluded. An audit that flags "Smith" because256 Smith is a cited author has failed at step 2.257- **Inflection-blind.** "cells" and "cell" do not appear in the258 drift table. Stem-level variants only.259- **Specific, location-anchored.** Never "the manuscript uses260 multiple variants." Always "introduction L12, L18; methods L34."261- **Surfaces undeclared variants as questions.** The author owns262 the terminology; the skill does not invent preferences.263- **Suggests, does not apply.** Every proposed edit is presented as264 text the author can paste into an edit pass; the manuscript is265 unchanged on disk.266- **Honest about exclusions.** Quoted contexts and term-as-subject267 passages are listed by count so the author can verify the268 exclusion was correct.269270## What you must not do271272- Modify the manuscript or the bibliography.273- Promote an undeclared variant to preferred without author274 consent — even a "you probably want X" recommendation that275 silently presupposes the answer.276- Flag tokens that appear only in bibliographic metadata.277- Flag inflection differences (cell/cells, gene/genes,278 method/methods) as drift.279- Flag forbidden terms inside quoted passages or in passages where280 the term is the subject of discussion.281- Propose stylistic rewrites beyond what the declared terminology282 lists license.283- Auto-apply suggested normalizations as a follow-up step.284285## Grounding286287This skill is grounded in scriptorium's knowledge layer:288289- [[internal-consistency]] — terminology drift is a class of290 internal-consistency failure. The note frames detection291 methodology: identify candidate synonym clusters, ask the author292 to choose, replace. The MANUSCRIPT_STATE terminology block is293 named there as the design pattern this skill consumes. The294 surfaces-as-questions-not-decisions posture for undeclared295 variants comes directly from that note's recommendation that the296 consistency check "flag candidate-synonym clusters for the author297 to resolve."298- [[style-guides]] — preferred-term enforcement is a style-guide299 function. The note covers conventions across AMA (medicine), CSE300 (general science), APA (psychology / social science), Chicago,301 ACS, and IEEE, and is explicit that style is **venue-dependent,302 not correct/incorrect**. This grounds two design choices: (a) the303 preferred-terms list is project-specific and read from the state304 file rather than imposed by the skill, and (b) US/UK English305 variation is out of scope by default — the venue, not the skill,306 decides.307308A drift away from these groundings either gets the skill updated or309gets the grounding extended; never both unchanged.