# FORCE REPORT — exactly 100 words (2026-10-20)
Frozen acceptance: acceptance-100.md. Baseline (same counter):
deepseek-chat 0/10, attempts 88–99 words.

## Result: 2 of 3 assemblies at exactly 100 words — frozen bar (3/3) NOT met
- Assembly 1: PASS, total exactly 100. Section attempts: S1 4, S2 3, S3 3, S4 4.
- Assembly 2: PASS, total exactly 100. Section attempts: 4, 4, 4, 3.
- Assembly 3: FAIL — S2-craft exhausted its 5-attempt budget, crawling
  20 → 21 → 22 → 23 → 24 words, one short. Run stopped there per the
  frozen rules; nothing was hand-patched.

## Diagnosis
In repair, deepseek-chat adjusts by roughly one word per round no matter
what delta it is told ("remove 2" still lands +1 or −1 from wherever it
was). Its counting is approximate even with exact feedback; convergence
is real but slow — passing sections took 3–4 attempts each. The harness
turned a 0/10 task into a working system with one crisp failure mode:
repair steps too small for a 5-attempt budget.

## Assembly 1 (verbatim, exactly 100 words)
"Meet your new morning ritual: this thoughtfully crafted ceramic mug
keeps every single sip warm, promising deep comfort from the very first
rich, soothing taste. Dense stoneware ceramic body under a satin glaze;
substantial weighted feel, hand-finished pulled handle, kiln-fired twice
at high temperature for lasting durability and chip resistance. Start
slow mornings wrapped in cozy warmth, sip securely at your work desk,
rinse clean effortlessly—your reliable daily companion from first brew
to easy wash. For the slow mornings and late-night deadlines, this mug
is truly yours. Treat yourself, or someone very deserving, and make it
their new favorite today."

Raw record: force100.json (every attempt), force100.py (runner+counter),
force100.log.

## V2 iteration (James's GO) — numbered-word technique: 3/3 PASS
Method: acceptance-v2.md. Sections written with every word indexed
(Meet[1] your[2] …[25]); the utility verifies stripped count == 25 AND
bracket sequence == 1..25; repair is surgical, in the model's own
numbering units. Everything else identical to v1.

- Assembly 1: PASS, exactly 100 (one repair: S4 stopped at [24], appended).
- Assembly 2: PASS, exactly 100 (one repair: S3 sequence break, rewritten clean).
- Assembly 3: PASS, exactly 100 (all four sections first attempt).
- 10 of 12 sections passed on the FIRST attempt (v1: 0 of 12 — every
  section needed 3–5). Total v2 calls: 14, vs v1's 29+ and a dead run.

Why it works: the model counts reliably when it enumerates (the same
strength that aced the strawberry letter-listing once examined) and
drifts when it counts silently in free prose. Numbering externalizes the
count into the text, where both the model and the utility can see it.
Raw record: force100v2.json / force100v2.py / force100v2.log.
