Press releases and announcements

A press release or an announcement has to give outside readers its dates, counts and prices right the first time. chaff finds by machine a wrong weekday, a period that runs backwards and a total that does not add up. It also finds a breakdown that is not 100%, and a count that does not match its list. The genre is business/press-release. Internal notices are checked under the same genre.

What usually goes wrong

Dates and prices keep moving until the moment a release goes out. The figures that were changed sit next to the ones that were not.

What goes wrongExample
A weekday that is wrongThe launch moved by a day, but the weekday did not
A period that runs backwards“October 26, 2026 – October 19, 2026”
A total that does not add upThe option’s price changed, but the total did not
A breakdown that is not 100%One share was changed, and the shares now add up to 95%
A count that does not match“four features” above a list of three

Once a release is out, fixing it means publishing a correction.

What chaff checks, and what it does not

These are the main rules for this genre. All but the last run with no settings.

RuleWhat it finds
date-weekday-mismatchA date whose weekday disagrees with the calendar
date-range-reversedA period whose end comes before its start
total-mismatchA total that is not the sum of the amounts above it
percent-sum-mismatchShares of a whole that do not add up to 100%
announced-count-mismatchA count announced that differs from the list below it
agentless-passiveA passive that never says who did it (off for business documents: it reports on most of those people write; agentless-passive: normal in chaff.yaml turns it on)

What it does not do is decided too.

  • It does not check that the figures are true. Whether 400 staff really took the survey is for the writer to check.
  • It does not check the weekday of a date when no date in the document gives a year, since the year is unknown. When one does, a date without its year is read in the year that puts it within five months of that dated date, and its weekday is checked.
  • Percentages are added up only when a nearby header or sentence names the parts of a whole (breakdown, market share, composition). Growth rates and usage rates do not add up to 100%, and are not added.

Try it

If you have not set up yet, do Getting ready first. The release below was saved as release.md. The company and the app are made up.

# Minato Trading launches Yoyakun, a meeting room booking app, in November

October 15, 2026
Minato Trading Ltd.

Minato Trading Ltd. will launch Yoyakun, an app for booking meeting rooms from a smartphone, on Tuesday, November 2, 2026.

## Why we built it

In a survey of 400 staff in September, many said they were unhappy with how meeting rooms are booked.

| Complaint | Breakdown |
| --- | --- |
| Hard to find a free room | 45% |
| Cancelling takes too long | 30% |
| Other | 20% |

## Features

Yoyakun has four features:

- Find free rooms on a floor map
- Cancel a booking in one tap
- Sign in with the company's single sign-on

## Preview event

Before the launch, staff can try the app at a preview event.

- Dates: October 26, 2026 – October 19, 2026
- Place: Head office, ground floor lobby

## Pricing

| Plan | Per month |
| --- | --- |
| Basic plan | $300 |
| Map option | $50 |
| Total | $360 |

## Contact

Minato Trading Ltd., Press Office

Run it with the genre. --compact prints each finding on two lines.

$ npx chaffjs release.md --genre business/press-release --compact

release.md   business/press-release · English   genre from --genre

  6:106   error   November 2, 2026 is a Monday, not a Tuesday
                  date-weekday-mismatch
  14:30   warning The shares add up to 95%, not 100%
                  percent-sum-mismatch
  20:13   warning "four features" is announced, but the number of items in the list below is 3
                  announced-count-mismatch
  30:10   warning The period "October 26, 2026 – October 19, 2026" ends before it starts
                  date-range-reversed
  39:12   error   The total $360 is not the sum of its items ($350)
                  total-mismatch

5 findings, 87 rules not run

error means the figures disagree, so one of them is certainly wrong. warning is worth fixing.

The guide that comes first

With the genre set, chaff opens the report with the genre’s guide: what a good press release does, as questions to check the draft against. Under them is a line naming the rules that matter most for this genre. Most of the questions are ones no rule can answer, so read them before the findings. An AI that rewrites the text works to the same lines (Using the guide with an AI).

$ npx chaffjs release.md --genre business/press-release

Guide: Press release and notice (business/press-release)

  Before the findings below, check the draft against these.

  - Do the headline and the first paragraph state who, what, when, where and why?
  - Are dates, prices, figures and names exact and consistent throughout?
  - Is every superlative (groundbreaking, first in the industry) backed by evidence?
  - Are the contact and the release date given?

  Rules that matter most for this genre: concrete-evidence-density, cushion-phrase-density, preamble-length, quote-unnamed-speaker, request-without-deadline, risk-disclosure, unsourced-number
  Change it with guide: in chaff.yaml; leave it out with --no-guide.

════════════════════════════════════════════════════════════

release.md   business/press-release · English   genre from --genre
…

A genre that was guessed from the path or the content, or left at the default, prints no guide. A guide for the wrong kind of document would mislead. --compact and --no-guide leave it out. A team changes the lines with guide: in chaff.yaml (Changing the genre’s guide).

What each finding means

LineFindingWhat it meansHow to fix it
6date-weekday-mismatchNovember 2, 2026 is a MondayFix the weekday. To launch on a Tuesday, make it November 3
14percent-sum-mismatch45%, 30% and 20% make 95%Check the survey and fix the wrong figure
20announced-count-mismatchIt says “four features”, but there are threeAdd the missing feature, or say “three”
30date-range-reversedThe end date comes before the start date“October 19, 2026 – October 26, 2026”
39total-mismatch$300 and $50 make $350Fix the total, or the amount that is wrong

For line 6, chaff does not decide whether the date or the weekday is wrong. The writer decides. With agentless-passive: normal in chaff.yaml, chaff also points at line 10: “how meeting rooms are booked” does not say who books them. Here the passive reads naturally; leave it, or say “how staff book meeting rooms”. Run chaff again before the release goes out, and check that the findings are gone.

Checks that read meaning go to an AI

npx chaffjs test can have an AI read whether the release leaves out something to watch for. npx chaffjs test release.md --genre business/press-release --dry-run says 1 passage would be sent.

Line 10 says “many said they were unhappy”, but not how many. In this example, no passage goes to the check for numbers without a source, so chaff does not send this line to an AI either. A person reads it, and writes the number: “280 of the 400”.

A starter chaff.yaml

Put this chaff.yaml in the folder that holds your releases.

genre: business/press-release
language: en

required_sections:
  - Contact

With this file in place, npx chaffjs release.md --compact alone shows the findings above. required_sections lists the headings every release needs. A release without a “Contact” heading is flagged by required-sections.