# Milestone 3 results

Date: 2026-07-19
Status: complete locally; public deployment deferred by user decision

## Outcome

Chartsmith now has a judge-facing product rather than only a workflow runner.
From the opening screen, a reviewer can see a source-to-redesign transformation,
open three complete accepted journeys, inspect meaningful intermediate work, or
upload one chart image and follow a genuine autonomous run.

The implementation preserves the Milestone 2 engine as the execution authority.
The product layer projects its canonical artifacts into user-facing stages; it
does not contain a second or simulated redesign workflow.

## Implemented product

- `app/web/` — responsive vinext interface with the transformation hero,
  accepted examples, live studio, seven-stage journey, final release gates,
  differentiation evidence, and reconnect-safe live-run restoration.
- `scripts/chartsmith_web.py` — versioned presentation projector, static example
  packager, safe local API, durable job records, bounded launch control,
  allowlisted artifact serving, and supported resume.
- `scripts/start_chartsmith_app.py` — one local command that refreshes examples,
  resolves a current Codex executable, and owns both product processes.
- `scripts/run_single_call_baseline.py` — reproducible fair one-call baseline and
  image-only independent comparison.
- `app/web/public/og.png` — generated social-preview asset wired through
  request-host-derived metadata.

Three accepted Milestone 2 cases use the same presentation contract as live
runs. Default product content excludes raw JSON, prompts, logs, token counts,
stack traces, and machine-local paths.

## Genuine product run

The browser upload path was exercised with the ordinary example image:

- run: `web-20260719-230950-25f674a9`
- source SHA-256:
  `A92AD0A7BDC4EF944199DA7158C5D6937834957963BA64C31D1BE2463ED78C51`
- input contract: one chart image, no prompt, raw data, or design decision
- model: GPT-5.6 Sol through official Codex CLI 0.144.6
- elapsed time: 20 minutes 23 seconds
- concepts explored: three
- selected concept: `The 79.3% Fold`
- repairs used: three
- final decision: accepted
- release gates: production, epistemic, communication, authorship, and
  provenance all passed

The run is compactly curated under
`examples/build_week_vnext/milestone3_live_product_run/`.

The repair history is product evidence, not hidden workflow detail. Successive
reviews found overlapping endpoint callouts, microtype at embedded size, a
misplaced source-axis descriptor, and a footer collision. The fourth candidate
passed after those named issues were corrected while the selected visual idea
was preserved.

Refreshing the browser restored the same durable run and complete journey
without launching duplicate work.

## Controlled single-call comparison

The direct baseline received the identical source image and one open-ended
instruction to make a materially better presentation visualization. It used
GPT-5.6 Sol at high reasoning effort, exactly one built-in image-generation
call, and no structured reconstruction, concept set, review, or repair. Its
generation took 232.129 seconds.

This was a strong baseline:

- it communicated the headline faster than Chartsmith;
- it used a clean editorial small-multiple structure;
- it correctly made the 79.3% endpoint visible;
- it was simpler and immediately persuasive.

The image-only independent comparison still found additional Chartsmith value:

- Chartsmith preserved the source's shared comparison structure;
- it distinguished the exact 79.3% from estimated reconstructed heights;
- it avoided assigning an unsupported name to the source axes;
- its folded measure made the source's 79.3-on-a-20-axis contradiction the
  authored visual idea.

The retained conclusion is deliberately narrow: Chartsmith won fidelity,
epistemic care, and structural explanation in this case, while the direct result
won speed and simplicity. The evidence does not claim that direct model calls
generally fail or that workflow complexity is inherently better.

The evaluator ran from an isolated temporary directory, used only the three
supplied images, and made no shell or repository reads. Evidence is under
`examples/build_week_vnext/single_call_baseline/`.

Two earlier infrastructure attempts produced no baseline image—one transient
image-service failure and one stale global CLI rejection. They are not counted
as retained design variants. The successful protocol itself contains exactly
one generation call.

## Validation

The completion audit passed:

- 19 Python unit and contract tests;
- web lint with no errors;
- production web build plus two rendered-HTML tests;
- repository-state validation;
- canonical `validate-run` on the genuine uploaded run;
- projector coverage for all three accepted examples;
- accepted-run refresh and durable restoration;
- malformed MIME, unsafe image, failed-run projection, and path-traversal
  containment;
- live HTTP traversal request rejected with status 400;
- browser checks for one H1, named controls, useful image alt text, loaded
  imagery, and host-derived Open Graph and Twitter images;
- no horizontal overflow at desktop or 390-pixel mobile width;
- visual inspection of desktop, mobile, source/final, live progress, completed
  run, and generated social card;
- stopped-state one-command startup brought both servers online, served the
  product with HTTP 200, and stopped both children with one interrupt.

The final product build and repository diff also pass whitespace checks.

## Deferred boundary

Public deployment is intentionally not part of this completed local milestone.
The Sites project is registered, but no version was published or deployed.
Hosted live runs still require a later user-authority decision covering workers,
durable storage, model credentials, spending, concurrency, repository
visibility, rights review, and publication.

This is not a hidden implementation gap in the local product: examples and
genuine uploads both work locally. It is an explicit external authority and
hosted-infrastructure boundary.
