# The breathing rule — counting card

Two numbers decide whether a long piece is readable at a glance. Both are
thresholds this site holds itself to; the tool at
atomstorm.ai/en/tools/breathing-check/ computes them.

| Check | Threshold |
|---|---|
| Words per non-paragraph element | **≤ 150** |
| Bold spans per 100 words | **≥ 1** |
| Long-form floor (below it, neither check applies) | **> 800 words** |

Below the floor nothing is judged. "Not judged" is not "passed" — a 400-word
post can be a wall of text and this card will not tell you so.

---

## What counts as a word

**Latin**: split on whitespace; a token counts only if it contains a letter or
a digit, so stray punctuation is not a word.

**Chinese**: Chinese has no whitespace word boundaries, so "words" has to be
defined before it can be counted. The convention here is fixed and arbitrary
by admission:

```
words = Latin tokens + (Unified Ideograph characters ÷ 1.7)
```

The divisor is a chosen constant, not a linguistic finding. Any other value
would work as long as one value is fixed — but changing it moves every number
downstream, so it is printed next to every result rather than hidden.

"Unified Ideograph" means the base *CJK Unified Ideographs* block,
U+4E00-U+9FFF. Narrow on purpose: the Unicode database lists eleven blocks
under that name (base + Extensions A-J), and we count only the base, because
that is what the build gate enforcing this rule counts. A rare Extension
ideograph is therefore not counted as a word. CJK punctuation, kana, Hangul
and fullwidth forms are outside the range too - `。，、「」` are not words.

A consequence worth knowing before you compare a translation to its original:
across the seven articles this site had published in both languages at
`a746249`, each Chinese version carried the **same element count** as its
English original, pair for pair — but word counts landed from **8% below** the
English to **9% above**, four longer and three shorter. The shared threshold is
not uniformly harsher on Chinese; which way a pair goes is a fact about that
translation, not about the language. Measure the pair in front of you.

## What counts as a non-paragraph element

| Counted | How |
|---|---|
| `##` and `###` headings | one each (the `#` title does not count) |
| Images | one each |
| **Each list item** | one each — a bullet is its own resting point |
| Tables | one per table, not per row |
| Blockquotes | one per quote block, not per line |
| Callout components | one each |
| Fenced code blocks | one per block |
| h4-h6 | folded in with h2/h3 |

A fenced block counts as one element - it breaks the grey the way a table does
- but the code INSIDE it is not prose, so none of its words count and a list
marker in there is not a list item.

Bold is counted the way CommonMark renders it, not the way it looks. Two traps,
both of which produced wrong numbers here before they were fixed: a bold span
may wrap a soft line break (a newline-forbidding regex misses every bold phrase
that straddles a hard-wrapped line), and `**...。**在` is NOT bold, because
CommonMark rejects a closer preceded by punctuation and followed by a letter -
Chinese prose walks into that constantly.

## The trap

Bold density is a **proxy** for scannability, not the goal. Sprinkling `**`
through a wall of text raises the number and improves nothing. The honest
moves are the ones that also raise it: cut the section in two and give each
half a heading, turn the three-clause sentence into three bullets, put the
comparison in a table, pull the caveat into a quote.

If the number went up and the page did not get easier to skim, the edit was
wrong.

---

Reference card for the AtomStorm Breathing Check —
atomstorm.ai/en/tools/breathing-check/
