# FROZEN ACCEPTANCE — force the exactly-100-words task (deepseek-chat)
Frozen 2026-10-20, before the harness run. Baseline for this task, same
counter: deepseek-chat 0/10 (attempts landed at 88–99 words).

## The job
A product description for a coffee mug, exactly 100 words.

## Method (the harness treatment)
- The job is decomposed into 4 sealed sections of exactly 25 words each,
  each with an assigned role: S1 hook (what this mug is), S2 materials and
  craft, S3 the experience of using it, S4 closing (why it belongs in your
  kitchen / call to buy).
- Every generation call is deepseek-chat. No other model writes anything.
  The operator writes nothing and edits nothing.
- Word counting rule, stated to the model up front: words are tokens split
  on whitespace; punctuation attached to a word is part of that word. The
  utility (force100.py) counts with exactly that rule — the same counter
  that graded the baseline.
- Each section is machine-counted on arrival. If it is not exactly 25, the
  model gets ONE repair instruction naming its measured count and the
  delta, and rewrites. Repair budget: at most 5 attempts per section. A
  section that exhausts its budget fails the run — reported, never patched
  by hand.
- Assembly is mechanical: the four passing sections joined with single
  spaces, then the total is re-counted by the utility.

## Acceptance
Run 3 independent assemblies. The run PASSES if every assembly totals
exactly 100 words with all four sections at exactly 25 inside their repair
budgets, and the joined text reads as one coherent coffee-mug description
with no counting narration, numbering, or meta text in the output.
Attempt counts are reported per section, whatever they are.
