PUN-002
Hard constraint
layer: sentence
No comma splice
IF two independent clauses are joined only by a comma, THEN add a coordinator, use a semicolon, or make two sentences ELSE retain.
Why the rule exists
A comma alone normally does not mark the full boundary between independent clauses.
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
- sentence.independent_clause_count gte 2
- sentence.joiner eq "comma_only"
Facts this rule reads
| Path | Source |
|---|---|
sentence.independent_clause_count |
Derived from text |
sentence.joiner |
Derived from text |
Then
- restructure — target
sentence.joiner
Else
- retain — target
current_text, No triggering condition is present.
Test cases
TST-004 · [object Object]
- Before
The server stopped, the queue kept growing.- After
The server stopped, and the queue kept growing.- Reason
- Two independent clauses receive a valid boundary.
LAKA
- Smallest sufficient intervention
- Yes
- Primary axes
Sources
-
The Blue Book of Grammar and Punctuation — Jane Straus; Lester Kaufman
Accessible grammar, punctuation, examples, and exercises. -
The Copyeditor's Handbook — Amy Einsohn; Marilyn Schwartz
Professional copyediting practice, grammar, and editorial process. -
Grammar, Punctuation, and Sentence Structure — Purdue Online Writing Lab
link
Practical mechanics, clause, sentence, punctuation, and style guidance.
The raw rule record
Verbatim from 08-punctuation-rules.json. Also available at /v1/rules/PUN-002.
{
"id": "PUN-002",
"name": "No comma splice",
"domain": "punctuation",
"layer": "sentence",
"strength": "hard_constraint",
"human_logic": "IF two independent clauses are joined only by a comma, THEN add a coordinator, use a semicolon, or make two sentences ELSE retain.",
"when": {
"all": [
{
"path": "sentence.independent_clause_count",
"operator": "gte",
"value": 2
},
{
"path": "sentence.joiner",
"operator": "eq",
"value": "comma_only"
}
]
},
"then": [
{
"action": "restructure",
"target": "sentence.joiner",
"options": [
"comma_plus_coordinator",
"semicolon",
"period"
]
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "A comma alone normally does not mark the full boundary between independent clauses.",
"diagnostics": [],
"examples": {},
"source_ids": [
"BK-002",
"BK-007",
"WEB-011"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
}
Other punctuation rules
- PUN-001 Terminate complete sentences IF a prose sentence is complete, THEN end it with a mark matching statement, direct question, or strong exclamation ELSE keep it joined to its governing structure. Hard constraint
- PUN-003 Comma before coordinating conjunction IF a coordinating conjunction joins two independent clauses, THEN place a comma before it unless the clauses are very short and unambiguous ELSE retain. Context default
- PUN-004 Comma after introductory material IF introductory material is long, clausal, or potentially misread, THEN add a comma before the main clause ELSE use the lightest mark that preserves clarity. Context default
- PUN-005 Set off nonrestrictive material IF a modifier adds nonessential information rather than identifying the referent, THEN set it off with paired punctuation ELSE do not set it off. Hard constraint
- PUN-006 Do not isolate restrictive material IF a modifier identifies which person or thing is meant, THEN remove punctuation that falsely marks it as optional ELSE evaluate as nonrestrictive. Hard constraint
- PUN-007 Serial comma follows declared style IF a series contains three or more coordinated items, THEN apply the selected serial-comma policy consistently AND add a comma when omission causes ambiguity ELSE retain. Context default
- PUN-008 Semicolon joins related independent clauses IF two independent clauses are closely related AND no coordinator is used, THEN a semicolon is available ELSE choose another boundary. Context default
- PUN-009 Semicolons clarify complex series IF list items contain internal commas, THEN separate top-level items with semicolons ELSE use commas. Context default