# Toolkit validation record

This record concerns mechanics. It does not approve source fidelity or count
examples. All outputs are draft until their separate evidence is accepted.

## Current selected batch — review03

`evidence/validation/clean-review03/report.json` records a second fresh snapshot
after the four review03 recipe repairs. Pinned installation, both type checks,
all **136 tests with zero skips**, and **40 actual renders plus verifier runs**
pass. The snapshot's shipped files and the selected-generation registry remain
unchanged. All renders retain the d8 implementation digest below. **31 movies
are byte-identical to their selected reference; nine are not.** This is a
successful clean execution, not a claim of bitwise reproducibility or fidelity.
All nine differing pairs are decoded and measured in
`evidence/clean-review03-pixel-summary.json`. The largest single-channel delta
is 82; the largest whole-frame mean delta is 0.735032 on the 0–255 scale.
These numbers neither diagnose the cause nor approve perceptual fidelity.
The preceding review02 pixel measurements describe that older run only.

The current input/media preflight covers all 40 documented variants in
`evidence/input-preflight-review03.json`. The research suite passes **107 tests**
in `evidence/python-first20-review03-packaging.log`: 45 review/artifact tests,
27 packet/audit tests, five capacity tests and 30 archive-packaging tests.
The separate fresh Python installation also passes those 107 tests; install
and run logs are `evidence/research-clean-review03-install.log` and
`evidence/research-clean-review03-tests.log`. After the final explicit nested
review-identity/method mapping, the same clean environment passes **108 tests**
in `evidence/research-clean-first20-bound-tests.log` (46 review tests).
Two new review regressions preserve structured scope exclusions without
weakening file bindings; malformed scope objects still fail closed. Their
red/green logs are `evidence/structured-scope-review-{red,green}.log`.
The nested report is read through declared JSON pointers, not by rewriting its
source record. Wrong nested recipe/revision values remain historical; see
`evidence/nested-identity-profile-{red,green}.log`. Earlier tool bytes remain
available by SHA-256 in `evidence/tools/`.

### Actual native-evidence archives

`evidence/native-packages-first20-review03/package-report.json` binds an actual
local packaging run for all 20 selections: **6,582 native PNGs, 78 ZIP_STORED
parts, 1,755,620,179 archive bytes**. The largest part is 25,151,162 bytes, below
the exclusive 25,165,824-byte (24 MiB) budget. Every member was read back,
hash-checked and decoded at its native dimensions. The input files remain
unchanged. Each recipe index preserves the source film/URL, rational fps,
source/local frame indices, member paths and input/output hashes.

The 30 focused tests include the source-attribution repair: the initial
packager retained frame hashes but omitted film/URL from its transport index.
`evidence/packager-development/attribution-red.log`,
`attribution-validation-red.log` and `attribution-green.log` retain that
failure and correction. These unit tests mock the external Node verifier;
the actual batch invokes it and verifies the selected movies separately.
No package is approved for publication, and no raw evidence frame becomes a
permitted production asset by being archived.

### Local browser checks

The preview tools explicitly report unavailable. The fallback check now accepts
a loopback `--base-url`, because another review process legitimately occupied
the old fixed port. The failed invocation is retained. The successful run is
`evidence/browser-first20-review03-scoped/report.json`: served-resource hashes
match local files, desktop/mobile have no horizontal overflow, and the selected
movie plays and seeks. Its synthetic 200-row pagination fixture is not 200 real
examples. The final consolidated run is
`evidence/browser-first20-final/report.json`: all 20 current entries and the
review document are bound to the served bytes, with the same successful
desktop/mobile, playback, seek and pagination checks. This remains a local
mechanical check, not a source-fidelity or live-publication verdict.

`evidence/preservation-first20-final.json` checks all 18,679 pre-existing local
benchmark/public-build files against the task baseline: none changed or went
missing. It does not attest the live site or authorize publication.

## Review02 clean reproduction — September 5, 2026

`evidence/validation/clean-review02/report.json` records a fresh, uninstalled
snapshot containing the selected 20 recipes, their media, inputs and toolkit.
Pinned `npm ci`, main and adapter type checks, and the smoke-enabled full test
suite succeed: **136 passed, zero failed, zero skipped**. All **40 actual variant
renders and their delivered-verifier checks pass**. The shipped snapshot has no
changed files. Per-command logs, case records and input hashes accompany the
report. This supersedes the smaller review01 installation as evidence of this
specific review02 snapshot, not of later recipe repairs.

The rerenders are not all byte-identical: **26 match, 14 differ**. Every differing
pair was decoded frame-for-frame into RGB24; the reports and worst-mean-frame
images are indexed by `evidence/clean-review02-pixel-summary.json`. Differences
range from 39 pixels in one archive frame to 356,681 pixels in pulse adaptation
frame 95. That pulse frame has a mean absolute channel difference of 0.444796
on the 0–255 scale; across its 235 frames the mean is 0.167544. The largest
individual channel difference anywhere in the 14 pairs is 82. These are measured
differences, not proof of their cause, imperceptibility or source fidelity.
Amplified diagnostic images are labelled 16× and are not render previews.

The source reviews bind the selected original movies, not these new movies by
association. Core digest remains
`d8b9486d145a3c5c2eb163dba433e958b8310df238f13f0c354452a67f35cf22`.
Recipes changed after this snapshot need their own current-generation render
checks. No completed example, passed reuse trial or publication approval follows
from this clean run.

The integrated research suite passes **75 tests** in
`evidence/python-review02-report-integration.log`: 43 review/artifact checks,
27 packet/audit checks and five capacity-estimation checks. This is a run in the
existing Pillow environment, separate from the earlier clean Python install.

## Catalog and builder checks — review02

`evidence/factory-contract-bindings-review02.json` binds six actual review02
variants to exact high-level design/Content equality and the delivered verifier.
It checks integration values; it is not an independent consumer trial or a claim
that the render CLI itself executed a factory.

Catalog `show` and `show --contract` expose the renderer's text-box dimensions,
font settings, prefixes, suffixes and optional line-advance constraints before
rendering. Character limits alone did not make `Sketch` fit the first reel row:
the independent trial correctly rejected 207.3px in a 181px box. No type was
shrunk and no failed brief was rewritten. The catalog's 28 focused tests pass in
`evidence/catalog-text-fit-green-final.log`. A fresh documentation/CLI retest
finds no new issue in its inspected scope; its evidence and hash pins are in
`evidence/contract-audit-review02/retest-fit-neighbor/`. Neighbor declarations
remain selection aids, not continuity approval.

## Native MP4 cadence

The first actual 33-frame export at `24000/1001` failed the strict average-rate
check. The pinned renderer's 90,000-tick MP4 timebase rounded a short interval.
The exporter now sets the video track timescale to the rational numerator,
leaving the source frame count, movement and duration clock intact.

- Actual failure: `evidence/native-rate-red.log`.
- Regression failure/pass: `evidence/native-rate-regression-red.log` and
  `evidence/native-rate-regression-green.log`.
- The regression renders real Chromium output and checks both nominal and
  average frame rate. Verification was not weakened to hide rounding.

## Local-browser request closure

The full suite exposed a false external-request failure when an allowed local
`Fetch.continueRequest` completed after its Chromium target closed. The guard
now tolerates that exact local-target closure. External URLs are still denied
before dispatch, and other transport failures still fail verification.

The deterministic failure/pass is in `evidence/request-guard-red.log` and
`evidence/request-guard-green.log`. An intermediate full run was aborted because
a new test import shadowed the existing callback-style `setImmediate`; the
test import was renamed. That interrupted log is not a successful validation.

## Content-shape rejection

Descriptions alone did not enforce three coupled input shapes: two bounded
paragraph lines, the task capsule's 32/35-character lines, and a round initial
for an outline identity sequence. Typed optional line and glyph-pattern
constraints now reject those unsupported substitutions.

`evidence/input-contract-red.log` records three failures before implementation;
`evidence/input-contract-green.log` records the focused pass. The subsequent
full run, `evidence/toolkit-tests-input-contract.log`, passes all 41 tests,
including two real Chromium exports. `evidence/typecheck-input-contract.log`
records the accompanying type check. Later catalog tests have their own run
record and must be included in the final frozen validation.

## Outgoing headline construction

The fresh lower-third review found a four-frame outgoing headline tail missing
from the chosen source interval. A content-specific crop would not support a
different final word. The shared text primitive now retains words from either
end, allowing the final word to remain right-aligned while its prefix leaves.
`evidence/trailing-text-red.log` and `evidence/trailing-text-green.log` record the
regression; the following complete run passes 49 tests including the two real
Chromium exports (`evidence/toolkit-tests-trailing-text.log`) and type checking
(`evidence/typecheck-trailing-text.log`). This changes the implementation binding
again. Earlier generations are historical, even where their pixels are equal.

The isolated clean installation passed the preceding 48-test version in
`evidence/clean-install-current.log`, `evidence/clean-typecheck-current.log` and
`evidence/clean-tests-current.log`. It is not described as a clean 49-test result;
the final frozen toolkit still needs its corresponding clean validation record.

## Revisions are not interchangeable

The rights-declaration gate also required the word “original,” which rejected
accurately attributed permitted assets without establishing ownership. It now
requires a nonempty declaration and binds that assertion unchanged. The focused
red/green records are `evidence/portability-rights-red.log` and
`evidence/portability-rights-green.log`. Media/path checks and known-source hash
exclusion remain; this is not automatic permission or privacy certification.

The paragraph retest found a second, separate defect after the vertical repair:
both replacement lower lines erased the source's final right margin. Character
counts did not constrain the visible footprint. The new optional
`lineWidthRanges` and `decreasingLineWidths` reject unsupported substitutions
using the loaded font's measured advances. `evidence/text-fit-red.log` records
the missing validation; `evidence/text-fit-green.log` passes the three focused
regressions. This is a fit guard, not a source-fidelity verdict. New copy and
actual exports still require independent inspection.

An actual negative render with `project/inputs/validation/paragraph-too-wide.json`
also fails after font loading: its second line measures 3583.5px against the
supported 3120–3280px range. `evidence/text-fit-render-rejection.log` retains the
error. No MP4 or manifest is created for that rejected input.

These changes alter the bound implementation hash. Old renders and review
inputs are preserved, not relabeled. Final examples require actual new exports
and comparisons under the chosen final generation. Pixel equality can support
a retest, but cannot replace a current render manifest or fresh review binding.

The local preservation checkpoint checks 18,679 pre-existing files with no
changes or missing files: `evidence/preservation-checkpoint.log`. This does not
establish live preservation; that check follows approved publication.

## Current frozen runtime

The project-relative custom-input repair preserves the actual JSON-byte and
symlink-target bindings while allowing a copied toolkit to verify without its
old directory. Legacy absolute-path manifests are not rewritten. See
`project/docs/PORTABILITY.md` and `evidence/portability-report.md`.

The frozen implementation digest is
`d8b9486d145a3c5c2eb163dba433e958b8310df238f13f0c354452a67f35cf22`.
An earlier isolated `npm ci`, type check and smoke-enabled full test run pass **78/78**,
including four real Chromium export cases with no skips. The hashed source/test
snapshot and logs are indexed by `evidence/clean-review01-report.json`.
That clean snapshot includes the runtime, recipe metadata and font, not the
non-font media for all recipes. It does not claim that all examples have been
rendered from that snapshot, or that any source-fidelity or reuse trial passed.

## Content builders and bounded retrieval

The three high-level factories no longer require callers to author 111 book,
365 wordmark or 88 selection paths. The selection factory snapshots its executed
module and used inputs before asynchronous font measurement and rejects changes
during generation. Both canonical selection variants now reproduce the
Chromium-generated Content exactly; the earlier FreeType values remain archived.
The rendered layer tracks and frozen core are unchanged by this migration.

`evidence/builders-post-resume.log` passes 34 factory tests, including negative
mutation cases. Adapter type checking uses
`npm exec tsc -- --project adapters/tsconfig.json --noEmit` from `project/`.
`evidence/factory-contract-bindings-review01.json` binds six actual default and
adaptation renders to exact high-level design/Content equality and the current
render verifier. This is author integration evidence, not an independent brief
or source-fidelity pass. The first invocation's incorrect verifier path is
retained in `evidence/factory-contract-bindings-review01.log`; the corrected
successful invocation is `evidence/factory-contract-bindings-review01-retry.log`.

Search now returns at most 20 records by default, with explicit pagination.
Builder-backed compact views expose the small design contract instead of every
generated pose. `evidence/catalog-integration-freeze.json` records the tested
catalog/UI code hashes. This does not substitute for final-index browser checks
or a real 200-example delivery test.

## Research-tool environment

A separate fresh research virtual environment now installs the pinned dependency
and passes the then-current **52 Python tests**. The retained records are
`evidence/research-clean-install.log` and `evidence/research-clean-tests.log`.
Later report-normalization regressions are separate: the focused suite first
fails on missing bindings/root-path handling, then passes **41 tests** in
`evidence/findings-normalization-review02/red.log` and `green.log`. Neither result
is a source-fidelity verdict or a claim about the future final test count.

The portable editing/rendering toolkit uses Node and the documented media tools.
The optional Python source-comparison, index-build and research-test scripts also
require Python 3.11+ and the separately pinned `requirements-research.txt`:

```sh
python3 -m venv .venv-research
.venv-research/bin/python -m pip install -r requirements-research.txt
.venv-research/bin/python -m unittest discover -s scripts -p 'test_*.py'
```

The system-Python invocation failed because Pillow was absent; preserve
`evidence/python-integration-post-catalog.log` as that failed attempt. The existing
research environment, with Pillow 12.3.0, passes all 52 current Python tests in
`evidence/python-integration-post-catalog-venv.log`. That run includes 14 trial
packet/audit tests, including a real filesystem watcher change-and-restore case.
It is not a passed editing trial or a clean installation claim.
