Simplified Technical English (ASD-STE100)
STE is a controlled form of English written for aircraft maintenance manuals and
now used wherever a text must be read correctly the first time by people who do
not speak English natively, or must survive translation without drifting. It
works by restricting two things: the vocabulary (one approved word per meaning)
and the grammar (short sentences, active voice, simple tenses).
This skill carries the whole of Issue 9 (2025-01-15): every writing rule and all
2,198 dictionary entries, extracted from the source PDF into files you can read
and a checker you can run.
What to apply it to
Work out the target before you write anything. Getting this wrong means
rewriting something the user did not want touched.
- A file or files named in the request - use them.
- Text pasted into the request - rewrite that text and return it inline.
- Nothing named, but this session has one obvious piece of writing in
progress - a document you drafted or edited earlier in the conversation, or
the file under discussion. Use it, and say plainly which one you chose so the
user can redirect you.
- Nothing named and the target is genuinely ambiguous - stop and ask. List
the candidates you can see and let the user pick. Do not rewrite a file on a
guess, and do not silently pick the most recent one when several are equally
plausible.
When the user invokes this skill without a target and simply wants to work in
STE from here on, treat it as a standing instruction: apply STE to the prose
you produce for the rest of the session — documents, reports, procedures,
comments meant for readers — until the user says otherwise. It does not apply to
your conversational replies to the user, to code, or to quoted source material.
How to do the work
Rewriting into STE is not word substitution. Rule 9.1 exists precisely because
swapping an unapproved word for an approved one often leaves an ungrammatical or
inaccurate sentence; the usual fix is to restructure the sentence around the
approved verb.
- Read the source and decide the writing type. Procedural text (steps the
reader performs) follows section 5 and the 20-word limit. Descriptive text
(explanations, reports, findings) follows section 6 and the 25-word limit. A
document can contain both.
- Rewrite section by section, applying the rules below. Keep meaning exact:
STE is about clarity, and a rewrite that loses a qualification or a number
has failed even if it passes every rule.
- Look up every word you are unsure of (see Vocabulary below) rather than
guessing at what is approved. The dictionary frequently contradicts intuition
— "ensure", "perform", "may", "however", "avoid", "check" as a verb, and
"required" are all unapproved.
- Run the checker on your rewrite, fix what it reports, and run it again.
- Deliver the rewrite and the report (see What to deliver).
Vocabulary
The controlled dictionary is the part of STE that cannot be reasoned out from
first principles, so consult it rather than relying on your sense of what is
plain.
- Structured lookup:
assets/ste_dictionary.json has an approved_forms
index (every permitted inflection to the parts of speech it is approved as)
and full entries with meanings, alternatives, and the standard's own
examples.
- Reading and grepping:
references/dictionary.md, one block per entry.
grep -i -A6 '^## ensure' references/dictionary.md answers most questions.
- How the dictionary works, including the recurring-error list and the list
of approved verbs:
references/dictionary-guide.md.
Three things about approved words that catch people out:
- A word is approved as one part of speech only (rule 1.2). "Test" is an
approved noun and not an approved verb.
- A word is approved with one meaning only (rule 1.3). "Follow" is approved
in the sense of "come after", never in the sense of "obey".
- Only the listed inflections are permitted (rule 1.4), and they are printed
with each approved entry.
Words that are not in the dictionary
Rules 1.5, 1.6, and 1.8 allow any word that is a technical noun or
technical verb of your subject field. The dictionary was written for
aerospace, so it contains none of the vocabulary of housing, finance,
statistics, or policy — and mangling "census tract" or "debt-to-income ratio"
into approved words would make the text less accurate, not more readable, and
would break rule 1.11 by giving one thing two names.
assets/domain_terms.txt holds the technical nouns already admitted. When you
meet a legitimate technical term that is not there, admit it and keep using
the term. When you meet an ordinary word doing an ordinary job ("utilize",
"prior to", "in order to"), replace it.
Where to admit it depends on whose text you are writing:
Work in this repo, or any AEI housing, mortgage, finance, or policy text —
add the term to assets/domain_terms.txt. That file is the house terminology
and every run picks it up by default.
Work in another project with its own subject field — write a domain terms file
in that project and pass it with --domain-terms, rather than pushing another
field's vocabulary into the shared file. A trading ledger, a clinical
protocol, and a housing report do not share a technical vocabulary, and the
union of all three admits most of ordinary English. Keep the file beside the
text it serves, name each section with the rule that justifies it, and deliver
it with the rewrite:
python scripts/ste_check.py --domain-terms docs/ste_domain_terms.txt DRAFT.md
--no-default-terms drops the housing list entirely when the project has
nothing to do with it.
Capitalization decides how a term matches. A term written in lower case
matches any capitalization — mortgage admits "mortgage" and "Mortgage", which
is what an ordinary technical noun wants. A term written with a capital in it
matches only that spelling. That is what lets you admit an identifier (rule 8.6)
without opening a hole in the vocabulary check:
PASS # admits the verdict token; "pass" the verb stays disallowed
FIL # a ticker, not the word "fil"
debt-to-income
Write a term in capitals whenever the ordinary lower-case word is one the
dictionary disallows. --audit-domain-terms lists what still collides after
you have done that, and every remaining collision is reported as an advisory at
each use.
The test is whether the word names a thing in a subject field, not whether it
sounds technical. "Amortization" is a technical noun. "Substantial" is not.
Watch for collisions. Some legitimate technical nouns are also words the
dictionary disallows in another sense: a building permit against LET (v), a
Treasury spread against APPLY (v), a US state against CONDITION (n). These
terms belong in the list — but admitting one must not blind the checker to the
disallowed sense, or every domain you add would punch another quiet hole, and
the union of all domains' jargon approaches ordinary English. So the checker
reports each collision as an advisory naming both senses. Read those and confirm
you meant the noun.
python scripts/ste_check.py --audit-domain-terms lists every collision in the
current terms file. Run it after adding a batch of terms.
The rules
The full text of each section is in references/rules/. Read the relevant file
when a case is genuinely unclear — the sections are short, and each carries the
standard's own worked examples. The rule statements themselves are below.
Section 1 - Words (references/rules/section-1-words.md)
- 1.1 Use words that are approved in the dictionary, technical nouns, or technical verbs.
- 1.2 Use approved words only as the specified part of speech.
- 1.3 Use approved words only with their approved meanings.
- 1.4 Use only the approved forms of verbs and adjectives.
- 1.5 You can use words that fall into a technical noun category.
- 1.6 Use a word that is not approved only when it is a technical noun or part of one.
- 1.7 Do not use technical nouns as verbs.
- 1.8 Use technical nouns approved in your company, industry, or subject field.
- 1.9 When you must select a technical noun, use one that is short and easy to understand.
- 1.10 Do not use regional, slang, or jargon words as technical nouns.
- 1.11 Do not use different technical nouns for the same item.
- 1.12 You can use verbs that fall into a technical verb category.
- 1.13 Do not use technical verbs as nouns.
- 1.14 Use American English spelling.
Section 2 - Multi-word nouns (references/rules/section-2-multi-word-nouns.md)
- 2.1 Write multi-word nouns of no more than three words.
- 2.2 When a technical noun has more than three words, write it in full, then give a shorter form or use hyphens between the words you use as one unit.
Section 3 - Verbs (references/rules/section-3-verbs.md)
- 3.1 Use only the verb forms given in the dictionary.
- 3.2 Use only these forms and tenses: infinitive, imperative, simple present, simple past, simple future, and the past participle as an adjective. No perfect tenses, no progressive tenses.
- 3.3 Use the past participle form as an adjective — before a noun, or after "to be", "to become", or "to stay". This is not passive voice.
- 3.4 Do not use auxiliary verbs to make complex verb constructions. "Can", "must", and "will" are the approved ones; "may", "should", "would", "could", and "might" are not.
- 3.5 Use the "-ing" form only as a technical noun or as a modifier in one.
- 3.6 Use the active voice. In descriptive writing you can use the passive only when the agent is unknown.
- 3.7 Use an approved verb to describe an action, not a noun or another part of speech. ("Do a test", not "carry out a test procedure".)
Section 4 - Sentences (references/rules/section-4-sentences.md)
- 4.1 Write short and clear sentences.
- 4.2 Do not omit words or use contractions to make sentences shorter.
- 4.3 Use a vertical list for complex texts.
- 4.4 Use connecting words and phrases to connect sentences on related topics.
- 4.5 Use an article ("the", "a", "an") or a demonstrative adjective ("this", "these") before a noun or multi-word noun when applicable.
Section 5 - Procedural writing (references/rules/section-5-procedural-writing.md)
- 5.1 Write short sentences. Maximum 20 words in each sentence, warnings and cautions included.
- 5.2 Write only one instruction in each sentence, unless two actions occur at the same time.
- 5.3 Write instructions in the imperative (command) form.
- 5.4 When the reader must know a condition first, start with the descriptive statement, then a comma, then the command.
- 5.5 Write notes to give information, never instructions.
Section 6 - Descriptive writing (references/rules/section-6-descriptive-writing.md)
- 6.1 Give information gradually.
- 6.2 Use key words and key phrases to give the text a logical structure.
- 6.3 Write short sentences. Maximum 25 words in each sentence.
- 6.4 Use paragraphs to show related information.
- 6.5 Make sure each paragraph has only one topic.
- 6.6 Make sure no paragraph has more than six sentences.
Section 7 - Safety instructions (references/rules/section-7-safety-instructions.md)
- 7.1 Use a word such as "warning" or "caution" to identify the level of risk. A warning is a risk of injury or death; a caution is a risk of damage to objects.
- 7.2 Start a safety instruction with a clear and accurate command or condition — not with a description.
- 7.3 Give an explanation that shows the risk or the possible result.
- Put the safety instruction before the step it applies to.
Section 8 - Punctuation and word count (references/rules/section-8-punctuation-and-word-count.md)
- 8.1 You can use all standard punctuation except the semicolon.
- 8.2 Use hyphens to connect words that are directly related.
- 8.3 Parentheses are permitted for references, item identifiers, work-step identifiers, abbreviations, singular/plural forms, explanations, and alternatives.
- 8.4 In a vertical list, a colon ends a sentence for word-count purposes.
- 8.5 Text in parentheses counts as one word.
- 8.6 Each of these counts as one word: numbers, numbers with units, abbreviations, alphanumeric identifiers, quoted text, titles and headings, and proper nouns of people, groups, organizations, and places.
- 8.7 Hyphenated words count as one word.
Section 9 - Writing practices (references/rules/section-9-writing-practices.md)
- 9.1 Use a different sentence construction when a word-for-word replacement is not sufficient.
- 9.2 Use each approved word correctly, in its approved meaning.
- 9.3 When you use two words together, do not make phrasal verbs. ("Do the test again", not "carry out the test again".)
- 9.4 Use a consistent style for terminology and wording throughout.
General recommendations (references/rules/general-recommendations.md)
Not rules, but they prevent the usual mistakes: keep the conjunction "that"
(GR-1); be careful with "with" (GR-2); make pronouns unambiguous and prefer
repeating the noun (GR-3, GR-4); watch for false friends (GR-5); avoid Latin
abbreviations such as "e.g." and "i.e." (GR-6); use inclusive language (GR-7);
prefer "of" to the possessive form (GR-8).
One thing STE does not require
The standard prints its own STE examples in capitals. That is a typographic
convention of the document, not a rule. Write normally.
The checker
python scripts/ste_check.py DRAFT.md # full report
python scripts/ste_check.py --violations-only DRAFT.md # just the certain findings
python scripts/ste_check.py --mode procedural STEPS.md # force the 20-word limit
python scripts/ste_check.py --json DRAFT.md # machine-readable
python scripts/ste_check.py --domain-terms terms.txt DRAFT.md
python scripts/ste_check.py --all-advisories DRAFT.md # one line per unknown word
It reads the extracted dictionary, so its vocabulary verdicts come from the
standard, not from a heuristic. It separates two kinds of finding, and the
distinction matters when you decide what to act on:
Violations — the standard settles these on its own: the dictionary marks
the word unapproved, the sentence is over the limit, there is a semicolon, a
contraction, a perfect or progressive tense, a passive with a named agent.
Fix all of them.
Advisories — these need a judgment the script cannot make without a
part-of-speech tagger: whether an unknown word is a technical noun, whether a
gerund is doing the work of a technical noun (permitted by rule 3.5) or of a
verb, whether "is closed" describes a condition (permitted by rule 3.3) or
hides an actor. Read them, decide, and act where they are right. A long
advisory list is normal and is not a failure.
A rule 3.5 advisory names the verb it found: "wiring" is the "-ing" form of
WIRE. The checker settles whether a word is a gerund at all by removing the
suffix and looking the stem up in the dictionary's verbs, so "ceiling" and
"nothing" are not reported as gerunds. Where the stem is a verb the standard
does not carry, the word is reported under rule 1.6 instead — the same
question, asked once.
Most of the list is one advisory — rule 1.6, "this word is not in the
dictionary" — which fires on every ordinary English word STE has no entry for.
Those collapse into a wrapped list of words at the end of the report, to scan
rather than read line by line, because each carries the same suggestion. The
list comes in two parts: words that repeat, or are hyphenated, or carry a
capital that is not just the start of a sentence, are the likely domain terms and come first; lower-case words used once are most likely ordinary
English the standard omits. That split is a guess about shape and frequency,
not a lexicon, so a technical noun can land in the second list — read it too,
just faster.
The advisories printed one per line above that block are the ones that say
something specific: a domain term that collides with a disallowed sense (rule
1.2 and the collision half of 1.6), a gerund (3.5), a noun cluster over three
words (2.1), a passive that may be hiding an actor (3.6). Read those.
--all-advisories expands the word list back to one line and one location per
word.
Three limits worth knowing so you read the output correctly. The checker cannot
tell a technical noun from an unapproved verb of the same spelling when no
article precedes it, so it may report a genuine domain term as a violation —
that is what the domain terms are for; admit the term and re-run. It reads
markdown structure but not all of markdown's semantics: it splits a table into
cells so a row is not read as one run-on sentence, and it treats a colon as a
sentence end only inside a vertical list (rule 8.4), but a definition list, or a
list written without blank lines, can still land its sentences in the wrong
paragraph for rule 6.6. And it cannot judge whether your rewrite still says what
the original said. That is your job.
Do not treat a violation as settled because the script printed it. The rules
overlap, and where two of them meet the script takes the narrower reading: rule
3.3 makes a past participle after "to be" an adjective, so "the leg is missing"
is correct STE and not a passive; rule 4.3 recommends a vertical list, so the
items of one list are separate paragraphs under rule 6.6. If a finding
contradicts a rule you have read, read the rule file and trust the standard.
After changing either script, run python scripts/selftest.py. It does two
things. It rebuilds two corpora from the standard's own STE and non-STE examples
and asserts that the checker still separates them (currently about 1% of words
flagged in correct STE against about 10% in non-STE). And it runs a set of rule
cases, each pairing text where a rule must fire with text where it must stay
quiet — a real paragraph against a vertical list for rule 6.6, "is running"
against "is missing" for 3.2, a noun cluster against a clause for 2.1.
The corpus number is a statistic and moves by a fraction of a percent for most
single-rule changes, so it cannot on its own tell you a rule still works. The
cases can. When you change a rule, add the pair — the text that must be
reported and the text that must not. A rule is easy to silence by accident while
chasing a false positive, and the second half of the pair is what catches it.
What to deliver
Unless the user asks for something else:
The rewritten text — to a new file beside the original
(report.md → report.ste.md) so nothing is lost. Rewrite in place only
when the user asks for that. For pasted text, return it inline.
A short report of what changed and why, grouped by rule, citing rule
numbers. Not a line-by-line diff — the patterns are what teach the user
something:
Rule 1.1 (unapproved words): ensure -> make sure (7x), utilize -> use (4x),
however -> but (3x), prior to -> before (2x)
Rule 6.3 (sentence length): split 11 sentences over 25 words; longest was 49
Rule 3.6 (active voice): rewrote 8 passive constructions to name the actor
Rule 8.1: replaced 3 semicolons with periods
Technical nouns kept under rule 1.6: census tract, debt-to-income, LTV
(added 2 new terms to assets/domain_terms.txt)
The checker result on the rewrite, and if anything is left unresolved,
say what and why. Do not report the work as compliant without having run it.
If the rewrite forced a change you are not sure about — an ambiguity in the
original that STE makes you resolve one way or the other — flag that sentence
explicitly. Controlled language turns vagueness into a decision, and the user
should know which decisions you made on their behalf.
Rebuilding the reference data
Everything in references/rules/, references/dictionary*.md, and
assets/ste_dictionary.json is generated from the source PDF:
python scripts/build_dictionary.py
It prints a validation summary (entry counts per letter, spot checks against
known pages, unparsed cells) and is the thing to re-run if a new issue of
ASD-STE100 is published. The PDF is copyright ASD; keep this skill and its
extracted files private.
1---2name: simplified-technical-english3description: Write or rewrite text in ASD-STE100 Simplified Technical English (STE), the controlled-English standard, using the full extracted dictionary and all 65 writing rules plus a compliance checker. Use this skill whenever the user says "STE", "Simplified Technical English", "ASD-STE100", "controlled English", "controlled language", or "plain technical English" — and also when they ask for writing that must be unambiguous for non-native English readers, easy to translate, or written like a maintenance manual or procedure, even if they never name the standard. Applies to a named file, to pasted text, or to the piece of writing already in progress in this session; if the target is unclear, it asks instead of guessing.4---56# Simplified Technical English (ASD-STE100)78STE is a controlled form of English written for aircraft maintenance manuals and9now used wherever a text must be read correctly the first time by people who do10not speak English natively, or must survive translation without drifting. It11works by restricting two things: the vocabulary (one approved word per meaning)12and the grammar (short sentences, active voice, simple tenses).1314This skill carries the whole of Issue 9 (2025-01-15): every writing rule and all152,198 dictionary entries, extracted from the source PDF into files you can read16and a checker you can run.1718## What to apply it to1920Work out the target before you write anything. Getting this wrong means21rewriting something the user did not want touched.22231. **A file or files named in the request** - use them.242. **Text pasted into the request** - rewrite that text and return it inline.253. **Nothing named, but this session has one obvious piece of writing in26 progress** - a document you drafted or edited earlier in the conversation, or27 the file under discussion. Use it, and say plainly which one you chose so the28 user can redirect you.294. **Nothing named and the target is genuinely ambiguous** - stop and ask. List30 the candidates you can see and let the user pick. Do not rewrite a file on a31 guess, and do not silently pick the most recent one when several are equally32 plausible.3334When the user invokes this skill without a target and simply wants to work in35STE from here on, treat it as a standing instruction: **apply STE to the prose36you produce for the rest of the session** — documents, reports, procedures,37comments meant for readers — until the user says otherwise. It does not apply to38your conversational replies to the user, to code, or to quoted source material.3940## How to do the work4142Rewriting into STE is not word substitution. Rule 9.1 exists precisely because43swapping an unapproved word for an approved one often leaves an ungrammatical or44inaccurate sentence; the usual fix is to restructure the sentence around the45approved verb.46471. **Read the source and decide the writing type.** Procedural text (steps the48 reader performs) follows section 5 and the 20-word limit. Descriptive text49 (explanations, reports, findings) follows section 6 and the 25-word limit. A50 document can contain both.512. **Rewrite section by section**, applying the rules below. Keep meaning exact:52 STE is about clarity, and a rewrite that loses a qualification or a number53 has failed even if it passes every rule.543. **Look up every word you are unsure of** (see *Vocabulary* below) rather than55 guessing at what is approved. The dictionary frequently contradicts intuition56 — "ensure", "perform", "may", "however", "avoid", "check" as a verb, and57 "required" are all unapproved.584. **Run the checker on your rewrite**, fix what it reports, and run it again.595. **Deliver the rewrite and the report** (see *What to deliver*).6061## Vocabulary6263The controlled dictionary is the part of STE that cannot be reasoned out from64first principles, so consult it rather than relying on your sense of what is65plain.6667- **Structured lookup**: `assets/ste_dictionary.json` has an `approved_forms`68 index (every permitted inflection to the parts of speech it is approved as)69 and full `entries` with meanings, alternatives, and the standard's own70 examples.71- **Reading and grepping**: `references/dictionary.md`, one block per entry.72 `grep -i -A6 '^## ensure' references/dictionary.md` answers most questions.73- **How the dictionary works**, including the recurring-error list and the list74 of approved verbs: `references/dictionary-guide.md`.7576Three things about approved words that catch people out:7778- A word is approved **as one part of speech only** (rule 1.2). "Test" is an79 approved noun and not an approved verb.80- A word is approved **with one meaning only** (rule 1.3). "Follow" is approved81 in the sense of "come after", never in the sense of "obey".82- Only the **listed inflections** are permitted (rule 1.4), and they are printed83 with each approved entry.8485### Words that are not in the dictionary8687Rules 1.5, 1.6, and 1.8 allow any word that is a **technical noun** or88**technical verb** of your subject field. The dictionary was written for89aerospace, so it contains none of the vocabulary of housing, finance,90statistics, or policy — and mangling "census tract" or "debt-to-income ratio"91into approved words would make the text less accurate, not more readable, and92would break rule 1.11 by giving one thing two names.9394`assets/domain_terms.txt` holds the technical nouns already admitted. When you95meet a legitimate technical term that is not there, **admit it** and keep using96the term. When you meet an ordinary word doing an ordinary job ("utilize",97"prior to", "in order to"), replace it.9899Where to admit it depends on whose text you are writing:100101- **Work in this repo, or any AEI housing, mortgage, finance, or policy text** —102 add the term to `assets/domain_terms.txt`. That file is the house terminology103 and every run picks it up by default.104- **Work in another project with its own subject field** — write a domain terms file105 in that project and pass it with `--domain-terms`, rather than pushing another106 field's vocabulary into the shared file. A trading ledger, a clinical107 protocol, and a housing report do not share a technical vocabulary, and the108 union of all three admits most of ordinary English. Keep the file beside the109 text it serves, name each section with the rule that justifies it, and deliver110 it with the rewrite:111112 ```bash113 python scripts/ste_check.py --domain-terms docs/ste_domain_terms.txt DRAFT.md114 ```115116 `--no-default-terms` drops the housing list entirely when the project has117 nothing to do with it.118119**Capitalization decides how a term matches.** A term written in lower case120matches any capitalization — `mortgage` admits "mortgage" and "Mortgage", which121is what an ordinary technical noun wants. A term written with a capital in it122matches only that spelling. That is what lets you admit an identifier (rule 8.6)123without opening a hole in the vocabulary check:124125```126PASS # admits the verdict token; "pass" the verb stays disallowed127FIL # a ticker, not the word "fil"128debt-to-income129```130131Write a term in capitals whenever the ordinary lower-case word is one the132dictionary disallows. `--audit-domain-terms` lists what still collides after133you have done that, and every remaining collision is reported as an advisory at134each use.135136The test is whether the word names a thing in a subject field, not whether it137sounds technical. "Amortization" is a technical noun. "Substantial" is not.138139**Watch for collisions.** Some legitimate technical nouns are also words the140dictionary disallows in another sense: a building *permit* against LET (v), a141Treasury *spread* against APPLY (v), a US *state* against CONDITION (n). These142terms belong in the list — but admitting one must not blind the checker to the143disallowed sense, or every domain you add would punch another quiet hole, and144the union of all domains' jargon approaches ordinary English. So the checker145reports each collision as an advisory naming both senses. Read those and confirm146you meant the noun.147148`python scripts/ste_check.py --audit-domain-terms` lists every collision in the149current terms file. Run it after adding a batch of terms.150151## The rules152153The full text of each section is in `references/rules/`. Read the relevant file154when a case is genuinely unclear — the sections are short, and each carries the155standard's own worked examples. The rule statements themselves are below.156157### Section 1 - Words (`references/rules/section-1-words.md`)158- **1.1** Use words that are approved in the dictionary, technical nouns, or technical verbs.159- **1.2** Use approved words only as the specified part of speech.160- **1.3** Use approved words only with their approved meanings.161- **1.4** Use only the approved forms of verbs and adjectives.162- **1.5** You can use words that fall into a technical noun category.163- **1.6** Use a word that is not approved only when it is a technical noun or part of one.164- **1.7** Do not use technical nouns as verbs.165- **1.8** Use technical nouns approved in your company, industry, or subject field.166- **1.9** When you must select a technical noun, use one that is short and easy to understand.167- **1.10** Do not use regional, slang, or jargon words as technical nouns.168- **1.11** Do not use different technical nouns for the same item.169- **1.12** You can use verbs that fall into a technical verb category.170- **1.13** Do not use technical verbs as nouns.171- **1.14** Use American English spelling.172173### Section 2 - Multi-word nouns (`references/rules/section-2-multi-word-nouns.md`)174- **2.1** Write multi-word nouns of no more than three words.175- **2.2** When a technical noun has more than three words, write it in full, then give a shorter form or use hyphens between the words you use as one unit.176177### Section 3 - Verbs (`references/rules/section-3-verbs.md`)178- **3.1** Use only the verb forms given in the dictionary.179- **3.2** Use only these forms and tenses: infinitive, imperative, simple present, simple past, simple future, and the past participle as an adjective. No perfect tenses, no progressive tenses.180- **3.3** Use the past participle form as an adjective — before a noun, or after "to be", "to become", or "to stay". This is not passive voice.181- **3.4** Do not use auxiliary verbs to make complex verb constructions. "Can", "must", and "will" are the approved ones; "may", "should", "would", "could", and "might" are not.182- **3.5** Use the "-ing" form only as a technical noun or as a modifier in one.183- **3.6** Use the active voice. In descriptive writing you can use the passive only when the agent is unknown.184- **3.7** Use an approved verb to describe an action, not a noun or another part of speech. ("Do a test", not "carry out a test procedure".)185186### Section 4 - Sentences (`references/rules/section-4-sentences.md`)187- **4.1** Write short and clear sentences.188- **4.2** Do not omit words or use contractions to make sentences shorter.189- **4.3** Use a vertical list for complex texts.190- **4.4** Use connecting words and phrases to connect sentences on related topics.191- **4.5** Use an article ("the", "a", "an") or a demonstrative adjective ("this", "these") before a noun or multi-word noun when applicable.192193### Section 5 - Procedural writing (`references/rules/section-5-procedural-writing.md`)194- **5.1** Write short sentences. **Maximum 20 words** in each sentence, warnings and cautions included.195- **5.2** Write only one instruction in each sentence, unless two actions occur at the same time.196- **5.3** Write instructions in the imperative (command) form.197- **5.4** When the reader must know a condition first, start with the descriptive statement, then a comma, then the command.198- **5.5** Write notes to give information, never instructions.199200### Section 6 - Descriptive writing (`references/rules/section-6-descriptive-writing.md`)201- **6.1** Give information gradually.202- **6.2** Use key words and key phrases to give the text a logical structure.203- **6.3** Write short sentences. **Maximum 25 words** in each sentence.204- **6.4** Use paragraphs to show related information.205- **6.5** Make sure each paragraph has only one topic.206- **6.6** Make sure no paragraph has more than six sentences.207208### Section 7 - Safety instructions (`references/rules/section-7-safety-instructions.md`)209- **7.1** Use a word such as "warning" or "caution" to identify the level of risk. A *warning* is a risk of injury or death; a *caution* is a risk of damage to objects.210- **7.2** Start a safety instruction with a clear and accurate command or condition — not with a description.211- **7.3** Give an explanation that shows the risk or the possible result.212- Put the safety instruction **before** the step it applies to.213214### Section 8 - Punctuation and word count (`references/rules/section-8-punctuation-and-word-count.md`)215- **8.1** You can use all standard punctuation except the **semicolon**.216- **8.2** Use hyphens to connect words that are directly related.217- **8.3** Parentheses are permitted for references, item identifiers, work-step identifiers, abbreviations, singular/plural forms, explanations, and alternatives.218- **8.4** In a vertical list, a colon ends a sentence for word-count purposes.219- **8.5** Text in parentheses counts as one word.220- **8.6** Each of these counts as one word: numbers, numbers with units, abbreviations, alphanumeric identifiers, quoted text, titles and headings, and proper nouns of people, groups, organizations, and places.221- **8.7** Hyphenated words count as one word.222223### Section 9 - Writing practices (`references/rules/section-9-writing-practices.md`)224- **9.1** Use a different sentence construction when a word-for-word replacement is not sufficient.225- **9.2** Use each approved word correctly, in its approved meaning.226- **9.3** When you use two words together, do not make phrasal verbs. ("Do the test again", not "carry out the test again".)227- **9.4** Use a consistent style for terminology and wording throughout.228229### General recommendations (`references/rules/general-recommendations.md`)230Not rules, but they prevent the usual mistakes: keep the conjunction "that"231(GR-1); be careful with "with" (GR-2); make pronouns unambiguous and prefer232repeating the noun (GR-3, GR-4); watch for false friends (GR-5); avoid Latin233abbreviations such as "e.g." and "i.e." (GR-6); use inclusive language (GR-7);234prefer "of" to the possessive form (GR-8).235236### One thing STE does not require237238The standard prints its own STE examples in capitals. That is a typographic239convention of the document, not a rule. Write normally.240241## The checker242243```bash244python scripts/ste_check.py DRAFT.md # full report245python scripts/ste_check.py --violations-only DRAFT.md # just the certain findings246python scripts/ste_check.py --mode procedural STEPS.md # force the 20-word limit247python scripts/ste_check.py --json DRAFT.md # machine-readable248python scripts/ste_check.py --domain-terms terms.txt DRAFT.md249python scripts/ste_check.py --all-advisories DRAFT.md # one line per unknown word250```251252It reads the extracted dictionary, so its vocabulary verdicts come from the253standard, not from a heuristic. It separates two kinds of finding, and the254distinction matters when you decide what to act on:255256- **Violations** — the standard settles these on its own: the dictionary marks257 the word unapproved, the sentence is over the limit, there is a semicolon, a258 contraction, a perfect or progressive tense, a passive with a named agent.259 Fix all of them.260- **Advisories** — these need a judgment the script cannot make without a261 part-of-speech tagger: whether an unknown word is a technical noun, whether a262 gerund is doing the work of a technical noun (permitted by rule 3.5) or of a263 verb, whether "is closed" describes a condition (permitted by rule 3.3) or264 hides an actor. Read them, decide, and act where they are right. A long265 advisory list is normal and is not a failure.266267 A rule 3.5 advisory names the verb it found: *"wiring" is the "-ing" form of268 WIRE*. The checker settles whether a word is a gerund at all by removing the269 suffix and looking the stem up in the dictionary's verbs, so "ceiling" and270 "nothing" are not reported as gerunds. Where the stem is a verb the standard271 does not carry, the word is reported under rule 1.6 instead — the same272 question, asked once.273274 Most of the list is one advisory — rule 1.6, "this word is not in the275 dictionary" — which fires on every ordinary English word STE has no entry for.276 Those collapse into a wrapped list of words at the end of the report, to scan277 rather than read line by line, because each carries the same suggestion. The278 list comes in two parts: words that repeat, or are hyphenated, or carry a279 capital that is not just the start of a sentence, are the likely domain terms and come first; lower-case words used once are most likely ordinary280 English the standard omits. That split is a guess about shape and frequency,281 not a lexicon, so a technical noun can land in the second list — read it too,282 just faster.283284 The advisories printed one per line above that block are the ones that say285 something specific: a domain term that collides with a disallowed sense (rule286 1.2 and the collision half of 1.6), a gerund (3.5), a noun cluster over three287 words (2.1), a passive that may be hiding an actor (3.6). Read those.288 `--all-advisories` expands the word list back to one line and one location per289 word.290291Three limits worth knowing so you read the output correctly. The checker cannot292tell a technical noun from an unapproved verb of the same spelling when no293article precedes it, so it may report a genuine domain term as a violation —294that is what the domain terms are for; admit the term and re-run. It reads295markdown structure but not all of markdown's semantics: it splits a table into296cells so a row is not read as one run-on sentence, and it treats a colon as a297sentence end only inside a vertical list (rule 8.4), but a definition list, or a298list written without blank lines, can still land its sentences in the wrong299paragraph for rule 6.6. And it cannot judge whether your rewrite still says what300the original said. That is your job.301302Do not treat a violation as settled because the script printed it. The rules303overlap, and where two of them meet the script takes the narrower reading: rule3043.3 makes a past participle after "to be" an adjective, so "the leg is missing"305is correct STE and not a passive; rule 4.3 recommends a vertical list, so the306items of one list are separate paragraphs under rule 6.6. If a finding307contradicts a rule you have read, read the rule file and trust the standard.308309After changing either script, run `python scripts/selftest.py`. It does two310things. It rebuilds two corpora from the standard's own STE and non-STE examples311and asserts that the checker still separates them (currently about 1% of words312flagged in correct STE against about 10% in non-STE). And it runs a set of rule313cases, each pairing text where a rule must fire with text where it must stay314quiet — a real paragraph against a vertical list for rule 6.6, "is running"315against "is missing" for 3.2, a noun cluster against a clause for 2.1.316317The corpus number is a statistic and moves by a fraction of a percent for most318single-rule changes, so it cannot on its own tell you a rule still works. The319cases can. **When you change a rule, add the pair** — the text that must be320reported and the text that must not. A rule is easy to silence by accident while321chasing a false positive, and the second half of the pair is what catches it.322323## What to deliver324325Unless the user asks for something else:3263271. **The rewritten text** — to a new file beside the original328 (`report.md` → `report.ste.md`) so nothing is lost. Rewrite in place only329 when the user asks for that. For pasted text, return it inline.3302. **A short report of what changed and why**, grouped by rule, citing rule331 numbers. Not a line-by-line diff — the patterns are what teach the user332 something:333334 ```335 Rule 1.1 (unapproved words): ensure -> make sure (7x), utilize -> use (4x),336 however -> but (3x), prior to -> before (2x)337 Rule 6.3 (sentence length): split 11 sentences over 25 words; longest was 49338 Rule 3.6 (active voice): rewrote 8 passive constructions to name the actor339 Rule 8.1: replaced 3 semicolons with periods340 Technical nouns kept under rule 1.6: census tract, debt-to-income, LTV341 (added 2 new terms to assets/domain_terms.txt)342 ```3433443. **The checker result on the rewrite**, and if anything is left unresolved,345 say what and why. Do not report the work as compliant without having run it.346347If the rewrite forced a change you are not sure about — an ambiguity in the348original that STE makes you resolve one way or the other — flag that sentence349explicitly. Controlled language turns vagueness into a decision, and the user350should know which decisions you made on their behalf.351352## Rebuilding the reference data353354Everything in `references/rules/`, `references/dictionary*.md`, and355`assets/ste_dictionary.json` is generated from the source PDF:356357```bash358python scripts/build_dictionary.py359```360361It prints a validation summary (entry counts per letter, spot checks against362known pages, unparsed cells) and is the thing to re-run if a new issue of363ASD-STE100 is published. The PDF is copyright ASD; keep this skill and its364extracted files private.