# Milestone 4 Results

Status: complete
Completed: 2026-07-20 HKT
Portfolio manifest: `config/experiments/build_week_vnext/milestone4_portfolio.yaml`

## Outcome

Milestone 4 produced ten distinct accepted source-to-redesign journeys and
integrated all ten into the judge-facing product. Every counted run uses the
promoted image-only, one-shot vNext workflow and passes production integrity,
epistemic integrity, material communication gain, design authorship, and
GPT-5.6 judgment-provenance gates.

The strict portfolio validator reports `10/10`. The tracked aggregate evidence
is `examples/build_week_vnext/portfolio_manifest.json`; the visual audit is
`examples/build_week_vnext/portfolio_contact_sheet.jpg`.

## Accepted Portfolio

| # | Case | Visual grammar | Accepted run | Repairs |
|---|---|---|---|---:|
| 1 | Opposite endpoint gravity | paired distributions | `milestone2-case-a-20260719-004` | 2 |
| 2 | Signal tower | ranked bars | `milestone2-case-b-20260719-001` | 3 |
| 3 | Monitor window | multi-panel scatter | `milestone2-case-c-20260719-001` | 6 |
| 4 | Retention cliff | line chart | `milestone4-retention-cliff-20260720-001` | 1 |
| 5 | Regional recovery gap | grouped bars | `milestone4-regional-recovery-gap-20260720-001` | 2 |
| 6 | Backlog heatmap | annotated heatmap | `milestone4-backlog-heatmap-20260720-003` | 1 |
| 7 | Commute tradeoff | bubble scatter | `milestone4-commute-tradeoff-20260720-001` | 4 |
| 8 | Forecast uncertainty | interval dot plot | `milestone4-forecast-uncertainty-20260720-001` | 2 |
| 9 | Conversion funnel | funnel / survivor route | `milestone4-conversion-funnel-20260720-003` | 3 |
| 10 | Energy mix transition | 100% stacked area | `milestone4-energy-mix-transition-20260720-001` | 2 |

The portfolio contains ten unique decoded source images and 26 targeted repair
cycles in total. Seven new sources are project-owned synthetic data released as
CC0-1.0. The three prior cases remain explicitly attributed official public
figures with their source URLs and third-party attribution status.

## What the New Cases Proved

- **Retention cliff:** a conventional line became a two-act narrative; repair
  removed an annotation collision before release.
- **Regional recovery:** one chart can distinguish highest finish from biggest
  improvement without falsely collapsing both into one winner.
- **Backlog heatmap:** a dense matrix became a seven-versus-one reversal story
  while preserving the exact API sequence and correct 55-versus-16 comparison.
- **Commute tradeoff:** the reviewer caught highlighted bubbles whose enlarged
  radii silently corrupted the population-area encoding, then repaired the
  mark semantics and embedded annotations.
- **Forecast uncertainty:** the reviewer corrected a headline that assigned
  zero-crossing behavior to point estimates rather than intervals.
- **Conversion funnel:** the source was corrected before promotion so largest
  absolute loss and steepest proportional loss genuinely differed; subsequent
  repairs removed overflow, broken connector geometry, and capsule crowding.
- **Energy mix:** the redesign made individual source trends faster to read
  while explicitly disclosing that separated ribbons no longer make the annual
  100% total visually self-evident.

These are not generic style improvements. The review loop changed both visible
production details and the truth conditions of the final messages.

## Workflow Hardening During the Portfolio

Two heatmap attempts and one funnel attempt exposed malformed Python returned at
the render boundary. The failed run directories remain preserved. The runner
now repairs only three unambiguous token/argument artifacts, and only when the
normalized program parses successfully:

- a lone `n` after a closing call at end of line;
- a missing newline represented as `)n<assignment>`; and
- an impossible `font=` keyword followed by a positional color in the runner's
  alignment helpers.

All other invalid syntax remains a hard failure. Regression tests cover the
narrow normalization and refusal behavior.

An earlier funnel attempt was intentionally interrupted and excluded when its
synthetic numbers did not exercise the declared absolute-versus-relative
challenge. The corrected source uses `100k → 60k → 25k → 19k → 13k`, making the
40k first-stage loss largest in absolute terms while the 35k second-stage loss
is steepest proportionally at about 58%.

## Evidence Contract

Each curated example contains:

- input, final, and comparison images;
- perceptual reconstruction and three-concept evidence;
- final evaluation and review dossier;
- run manifest and model-provenance records;
- source data and source provenance for synthetic cases; and
- `example_manifest.json` with hashes, configuration, rights, run identity,
  repair count, and all release-gate outcomes.

The product no longer maintains a separate three-item hardcoded example list.
`scripts/chartsmith_web.py` projects all ten entries from the authoritative
portfolio manifest, so product and evidence state cannot drift independently.

## Validation

Passed on 2026-07-20 HKT:

- `python scripts/chartsmith_vnext.py validate-run` for every new accepted run;
- `python scripts/validate_milestone4_portfolio.py` — `10/10`, no global errors;
- `python scripts/curate_milestone4_portfolio.py` — `10/10` curated;
- `python -m unittest discover -s tests` — 23 tests;
- `npm test` — production build plus two rendered-product tests;
- `npm run lint`;
- `npm run build`;
- full-size contact-sheet inspection of all ten source/final pairs;
- real-browser desktop QA at 1600×1000;
- real-browser mobile QA at 390×844;
- interaction from example 1 to example 10 and its complete seven-stage journey;
- browser console — zero warnings and zero errors.

Browser captures are intentionally disposable under `output/playwright/`.

## Boundary

Milestone 4 completes example preparation and quality proof. Public deployment,
repository sharing/publication, demo recording, feedback Session ID, submission
checklist, and Devpost packaging remain Milestone 5. No deployment authority was
assumed.
