Fieldnotes · first 20Published for review · 0 completed examples

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.

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:

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.