All rules

Opposite obligations on the same act

modal-conflicton by defaultJapanese / English

The same act required or allowed in one sentence and forbidden in another

Example

Flagged
## 5. Confidentiality The Supplier must not disclose Confidential Information to third parties. ## 9. Advisers The Supplier may disclose Confidential Information to third parties.
What chaff prints
7:1 This says "may", but line 3 says "must not" about the same act
Fixed
## 5. Confidentiality The Supplier must not disclose Confidential Information to third parties. ## 9. Advisers The Supplier may disclose Confidential Information to its legal advisers.
What chaff prints
no finding

How to fix

Decide which one holds and delete the other, or add the condition or exception ("unless the Customer agrees in writing") that separates them.

Why it matters

The same act by the same party written as "must" or "may" in one sentence and "must not" in another leaves the reader unable to tell which to follow. It happens when a clause is added later or copied from another document. A condition or an exception changes the sentence's words, so a carefully scoped pair is not reported.

What it does not flag

Only two sentences with exactly the same content words (nouns, verbs, adjectives) are compared. A sentence with two or more modal markers, or with fewer than two content words, is not checked. "Must" and "may" are not counted as a conflict.

Turning it off or relaxing it

Silence this one spot (in the document)
<!-- stet: modal-conflict — reason -->
Relax it for the team (the reason is kept as a comment in chaff.yaml)
npx chaffjs relax modal-conflict --why "reason"
Turn it off for the team (chaff.yaml)
rules: modal-conflict: off
Technical details
Layer
L3
Status
stable
Severity
warning
Languages
Japanese and English
Suited to
business, technical, blog, legal, docs, academic, literature, speech
Reads from the document
structure, pos

Levels

Set a level for this rule under rules in chaff.yaml. With nothing set, it runs at the level its genre gives it (see By genre below).

stricterror
normalwarning
relaxedinfo

This rule has no limit to count to. A level sets how a finding is marked: relaxed keeps the finding and marks it a step lower.

By genre

Runs by default in
technical/spec, technical/readme, blog/tech, blog/essay, blog/owned-media, business/proposal, business/report, business/email, business/press-release, business/meeting-notes, legal/contract, legal/statute, legal/judgment, legal/patent, docs/manual, docs/faq, docs/glossary, academic/paper, literature/fiction, literature/essay, literature/poetry, literature/play, speech/address, speech/transcript

Genres

Message

This says "{marker}", but line {otherLine} says "{other}" about the same act

Rewrite depth (chaff fix-plan --depth): light — words and sentences; the structure and the voice stay

This page is built from the rule's definition file:packages/chaff/rules/modal-conflict.yaml