All rules

One item given two different values

fact-conflicton by defaultJapanese / English

The same item (a deadline, a fee) given two different values in one section

Example

Flagged
Deadline: May 3, 2026 - Fee: $300 - Deadline: May 5, 2026
What chaff prints
4:13 "Deadline" is May 5, 2026 here, but May 3, 2026 earlier in the same section
Fixed
Deadline: May 3, 2026 - Fee: $300 - Deadline: May 3, 2026
What chaff prints
no finding

How to fix

Check which value is right and correct the other. If they are values of different things (another session, another group), say so in the item name ("Second session deadline").

Why it matters

When one section says "Deadline: May 3" and later "Deadline: May 5", the reader cannot tell which to trust. It happens when a date or a price is changed in one place and not in the other. Values written as "Item: value" or "The item is value", and table cells, are read; the same item name (case and width aside) with two different values in the same unit within one section is pointed out (measured quantities such as 410 g and 450 g included, and lengths of time such as 3 months and 6 months; years are compared in months, so 1 year and 12 months agree, while 1 month and 30 days are not compared). Ages are values too ("aged 40", "up to the age of 70", "aged 20 to 70"): a range and an upper limit are compared by their upper ends, and one age is not compared with a range. A retention period is compared across the whole document: "we keep personal information for 1 year" and "we delete personal information 3 years after the account is closed" give one thing (the same noun phrase) two lengths. An item that has one value for the whole document (a name in the fact-document-term lexicon, such as probation period) is compared across sections too: a table cell "Probation | 3 months" and a sentence in another section "The probation period is 6 months" disagree. The value in a section headed by the item's name ("2. Warranty period") counts like a table cell, and a sentence with the item as its subject is read even with the point it counts from ("The warranty period for the product is 24 months from the date of purchase"). Values written as "Item: value" or "The item is value", and table cells, are read; the same item name (case and width aside) with two different values in the same unit within one section is pointed out (measured quantities such as 410 g and 450 g included, and lengths of time such as 3 months and 6 months; 1 year and 12 months are not compared). A sentence whose subject is exactly a table row's heading ("Hospital cash is paid at $150 for each day") has its amount compared with that row's amount in the same section ($100 a day). A count a sentence states as the whole ("Your order is for 4 tickets in total") is compared with the table column that counts it (Tickets): the count in the total row, or else the sum of the rows (a row that counts the same tickets again, such as a ticketing fee, is not added).

What it does not flag

Values under different headings, under different parent list items, or after a bold-only line or a line like "Session 2:" are taken as values of different things. A value followed by a condition ("$300 per person", "May 3 at noon"), values per different units (a day, a month), a value per a distance or a time against the amount it multiplies into ("$0.45 per mile" and "$165"; a fee "for each transfer" is compared), a name that starts after a comma ("For adults, the fee"), and values in different units are not compared. A cell under a unit price column (Unit price, Rate) is not compared with a cell of the same name under an amount column (Amount, Total); it is compared with a sentence. An item with three or more different values is read as a list and left alone. A retention period is not compared with that of another thing (logs 90 days, account data 1 year) or with a bound or an estimate (up to, at least, about). A whole-document item is compared only between its source (a table cell, or a section headed by its name) and a sentence; two tables, two sentences with no source (sections per type of employment), an item its sources give two values, a value after a condition ("If you register the product, the warranty runs for 24 months"), and a qualified name (part-time probation period) are left alone. A whole-document item is compared only between a table cell and a sentence; two tables or two sentences (sections per type of employment), an item the tables give two values, and a qualified name (part-time probation period) are left alone. A table row and a sentence naming it are not compared when either holds two amounts in the currency (a daily amount and a cap), when the subject is longer than the heading ("Hospital cash cover is"), or when the sentence puts a condition on its amount (if, unless). A whole count is read only with a whole mark (in total, a total of) and a counting word (tickets, attendees). A part ("2 of the tickets"), a limit ("up to a total of 4 tickets"), a sentence naming a table row ("Stalls are 2 tickets in total"), and a document with two columns counting the same thing are left alone. Rows counting people are not summed, because the same guest is on the admission row and the dinner row. Values after a name-only line at the head of a paragraph ("Example", "Element 1 (standard rated portion)") belong to that example or case and are not compared with another example's. A table that repeats its headings side by side (Day | Hours | Day | Hours, week 1 and week 2) is read as one table per group of columns.

Turning it off or relaxing it

Silence this one spot (in the document)
<!-- stet: fact-conflict — reason -->
Relax it for the team (the reason is kept as a comment in chaff.yaml)
npx chaffjs relax fact-conflict --why "reason"
Turn it off for the team (chaff.yaml)
rules: fact-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
quantities

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).

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, speech/address, speech/transcript
Turned off by the genre in
literature/fiction, literature/essay, literature/poetry, literature/play

Genres

Message

"{label}" is {value} here, but {other} earlier in the same section

The retention period of "{label}" is {value} here, but {other} earlier in the document

"{label}" is {value} here, but {other} in the table

"{label}" is {value} here, but {other} in the section "{section}"

The whole count is {value} here, but the total row of the table's "{label}" column gives {other}

The whole count is {value} here, but the rows of the table's "{label}" column add up to {other}

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/fact-conflict.yaml