# 08 - Builder and page-setting mechanical validation

## Purpose
Validate that build_audit_content.py enforces the neutral structure and that the generator
applies the page-setting controls.

## Checks
- Feeding fixtures/sample_review.json produces a content JSON whose h1 sections appear in
  the fixed order: Scope of review, Overview, Evidence reviewed against professional
  standards, Where the evidence base is well documented, Where additional information would
  strengthen the picture, Considerations for your intended use, Questions to ask the
  publisher, Suggested next steps to strengthen your assessment strategy, Scope and
  confidence, Sources reviewed. (Battery-level review appears only for a battery.) The final
  two blocks are the Disclaimer h4 and the verbatim disclaimer paragraph.
- There is no verdict_banner block anywhere; the Overview uses an overview_callout.
- The cover meta has empty taglineLine1 and taglineLine2 (no verdict tagline).
- Each finding status maps to a neutral color; "not_found" renders in muted gray.
- An unknown status key raises a clear error rather than silently passing.
- The rendered PDF contains no verdict, pass-or-fail, or suitability language except inside
  the verbatim disclaimer, and none of the words gaps, weaknesses, concerns, or
  deficiencies in the section headings.
- The generator bundle contains keepNext (heading keep-with-next), widowControl, and
  cantSplit (non-splitting table rows).

## Command
```bash
python3 scripts/build_audit_content.py evals/fixtures/sample_review.json /tmp/meta.json /tmp/content.json
python3 - <<'PY'
import json
c = json.load(open('/tmp/content.json'))
h1 = [b['text'] for b in c['body'] if b['type']=='h1']
expected = ['Scope of review','Overview','Evidence reviewed against professional standards',
            'Where the evidence base is well documented',
            'Where additional information would strengthen the picture',
            'Considerations for your intended use','Questions to ask the publisher',
            'Suggested next steps to strengthen your assessment strategy',
            'Scope and confidence','Sources reviewed']
assert h1 == expected, h1
assert not any(b['type']=='verdict_banner' for b in c['body'])
assert c['meta']['taglineLine1']=='' and c['meta']['taglineLine2']==''
assert c['body'][-1]['type']=='paragraph' and 'no responsibility or liability' in c['body'][-1]['text']
print('builder structure OK')
PY
```
