STR-014
Context default
layer: section
Keep list items parallel
IF list items perform the same role but begin with mismatched grammatical forms, THEN align them ELSE retain justified variation.
Why the rule exists
Parallel structure makes lists faster to scan and compare.
Condition
The rule fires when this evaluates true. Paths marked below must be present in the fact base; the engine reports the rest rather than guessing them.
- ALL
- list.item_count gte 2
- list.items_same_role eq true
- list.grammatical_parallelism eq false
Facts this rule reads
| Path | Source |
|---|---|
list.item_count |
You supply it |
list.items_same_role |
You supply it |
list.grammatical_parallelism |
You supply it |
Then
- align — target
list.item_openings, value fromclearest_item_pattern
Else
- retain — target
current_text, No triggering condition is present.
LAKA
- Smallest sufficient intervention
- Yes
- Primary axes
Sources
-
Microsoft Writing Style Guide — Microsoft
link
Warm, clear, concise, helpful technical communication. -
The Elements of Style — William Strunk Jr.; E. B. White
Conciseness, conventional usage, and composition principles. -
Handbook of Technical Writing — Gerald J. Alred; Charles T. Brusaw; Walter E. Oliu
Grammar, mechanics, formats, and workplace documents.
The raw rule record
Verbatim from 10-paragraph-document-rules.json. Also available at /v1/rules/STR-014.
{
"id": "STR-014",
"name": "Keep list items parallel",
"domain": "structure",
"layer": "section",
"strength": "context_default",
"human_logic": "IF list items perform the same role but begin with mismatched grammatical forms, THEN align them ELSE retain justified variation.",
"when": {
"all": [
{
"path": "list.item_count",
"operator": "gte",
"value": 2
},
{
"path": "list.items_same_role",
"operator": "eq",
"value": true
},
{
"path": "list.grammatical_parallelism",
"operator": "eq",
"value": false
}
]
},
"then": [
{
"action": "align",
"target": "list.item_openings",
"value_from": "clearest_item_pattern"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Parallel structure makes lists faster to scan and compare.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-004",
"BK-001",
"BK-025"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
}
Other structure rules
- STR-001 One controlling move per paragraph IF a paragraph performs more than one unrelated rhetorical move, THEN split it at the move boundary ELSE retain. Context default
- STR-002 Expose the paragraph point IF the paragraph’s controlling point is absent or recoverable only after rereading, THEN state or move it to a strategic position ELSE retain an intentional delayed reveal. Heuristic
- STR-003 Support consequential claims IF a paragraph makes a consequential factual claim, THEN provide evidence, cite it, qualify it, or remove the claim ELSE retain. Hard constraint
- STR-004 Keep evidence beside the claim IF evidence is separated from the claim it supports by unrelated material, THEN move it closer or label the relation ELSE retain. Context default
- STR-005 Use transitions that name the relation IF adjacent paragraphs have a meaningful but unstated relation, THEN add a transition that expresses that relation ELSE retain. Context default
- STR-006 Delete orphan paragraphs IF a paragraph neither advances the purpose nor supports another necessary move, THEN delete or relocate it ELSE retain. Heuristic
- STR-007 Section answers one reader question IF a section answers multiple unrelated reader questions, THEN split and label them ELSE retain. Context default
- STR-008 Heading predicts content IF a heading does not accurately predict its section, THEN rename the heading or repair the section ELSE retain. Hard constraint