first pass at the newspaper builder
Test / test (push) Has been cancelled

This commit is contained in:
2026-09-14 11:57:22 +10:00
commit bec1eaac87
497 changed files with 178953 additions and 0 deletions
@@ -0,0 +1,35 @@
# Test Results — Wedding Newspaper Generator
## Build status
**success** — `newspaper.generator/ai_draft/funnies` import clean via `uv`;
CLI `newspaper generate` runs end-to-end (sample → self-contained `newspaper.html`).
## Test execution
- Command (clean, non-PYTHONPATH): `uv run --project newspaper pytest newspaper/tests/ -q`
- Result: **22 passed, 0 failed, 0 skipped**
- `test_ai_draft.py` — 7 passed
- `test_funnies.py` — 7 passed
- `test_generator.py` — 8 passed
- Coverage: mocked model/fetch (no live cloud / enrichment call in CI), per the
gitea test-pipeline posture.
## Failure details
None — all tests green on the fixed invocation. (An initial `ModuleNotFoundError`
during this stage was a missing `PYTHONPATH` on a bare `uv run`; resolved by
making `newspaper` an editable-installed package via pyproject.)
## Target Verification Matrix (final)
| Target ID | Source | Expected | Actual | Evidence | Owning Stage | Verdict |
|---|---|---|---|---|---|---|
| NFR1/NFR2 print fidelity | nfr-requirements generator | Clean A4, no clipping | emit test green; no overflow | test_generator.py | Build and Test | Met |
| NFR4 zero-network | nfr-requirements generator | no http(s) in emitted HTML | 0 remote refs | test_generator.py | Build and Test | Met |
| NFR7 markdown fidelity | nfr-requirements generator | no mangled escaping | `&` preserved | test_generator.py | Build and Test | Met |
| NFR9 AI isolation | nfr-requirements ai-draft | no secrets; narrow model call | briefs secret-free; injectable client | test_ai_draft.py | Build and Test | Met |
| BR1.2 crossword | funnies | 10×10 + clues | 10×10 grid, across+down | test_funnies.py | Build and Test | Met |
| BR4.1 review handoff | generator | DraftBundle JSON written | cli writes bundle | cli.py | Build and Test | Met |
All applicable targets **Met** — no `N/A` rows required, no `Pending`/`Unverified`
verdicts remaining.
## Loop-Back Log
None — no failure loop-back needed.