# ThemeFactory Verification Engine — Durable Progress

**Updated:** 2026-08-22
**Branch:** `infra/themefactory-verification-engine-20260822`
**Worktree:** `/home/user/Projects/Press.zone/ThemeFactory/.worktrees/themefactory-verification-engine-20260822`

## Goal

Make `theme complete` a machine-verifiable state. ThemeFactory CI must select only tests applicable to the theme architecture/workflow/features, run on GitHub Actions ARC ephemeral runners in the shared K3s cluster, prove expected-vs-executed completeness, reject bad themes, and prevent `dist/` or `main` from accepting an unverified theme.

## Durable design/task files

- `docs/verification/THEMEFACTORY-VERIFICATION-ENGINE.md` — architecture/policy/design authority.
- `ci/themefactory-tests.jsonl` — durable semantic test/task ledger.
- `docs/progress/2026-08-22-themefactory-verification-engine.md` — this execution/progress checkpoint.

## Current ledger state

- 167 semantic tests total.
- 21 tests currently marked `complete`.
- 146 tests currently marked `todo` pending implementation/live proof.
- Existing pre-project package/archive tests were never falsely reclassified.
- Tests are advanced only when their implementation has real evidence; proof-required gates require RED/GREEN falsification.

### Release-critical regressions already RED/GREEN proven

- `TF-INSTALL-001` — fresh activation/import rewrite lifecycle; good lifecycle flush GREEN, missing post-registration lifecycle flush RED (`/tf-items/` 404).
- `TF-EDITOR-001` — Gutenberg editor clean load; injected editor error RED.
- `TF-EDITABILITY-001` — edit → save → frontend → restore; deliberately stripped sentinel RED.
- `TF-DEMO-001..005` — activation notice, Appearance placement, security, idempotence, content creation; bad notice/top-level-menu/non-idempotent fixture RED.
- `TF-UI-016` — declared equal-height repeated components; unequal-card stress fixture RED.
- `TF-TEMPLATE-001..003` — template registration, assignment, editable composition; missing/default/noncomposed fixture RED.

## Implemented repository infrastructure

- Theme contracts (`theme-test.yaml`) for all current themes.
- Core/profile-aware planner in `tools/theme_ci.py`.
- Change-aware planning and semantic shard generation.
- Exact expected/executed receipt aggregation and fail-closed gates.
- Runtime harness in `tests/runtime/runtime_harness.py` with explicit handler coverage for every runtime ledger ID.
- Runtime synthetic verifier in `tests/runtime/guard_selftest.py`.
- Static/verification self-tests in `tests/verification/`.
- Vendored `axe-core` runtime and license under `ci/runtime/`.
- GitHub Actions workflow `.github/workflows/themefactory-verify.yml` using shared ARC labels (`themefactory-ci`, `themefactory-runtime`) and no buildbox hostname pinning.
- ARC manifests/install tooling under `ci/arc/`.
- Runner image definition under `ci/arc/runner-image/`.

## Verified test results so far

- Verification-engine self-test suite on Debian1: **17/17 PASS**.
- United Pets exact candidate ZIP fresh install: PASS.
- United Pets `TF-INSTALL-001`: PASS without manual post-activation rewrite flush.
- United Pets declared page/post/CPT routes tested at HTTP 200 in the disposable runtime fixture.
- Runtime registry self-check: every runtime ledger ID has an executable handler.

## Runner image

Built on Debian2 from `ci/arc/runner-image/Dockerfile`.

- Tag: `ghcr.io/alexcodeplace/themefactory-ci-runner:2026-08-22`
- Verified Docker archive: `/home/user/tmp/themefactory-ci-runner-20260822-v2.tar`
- Archive size: ~2.0 GiB.
- Archive SHA-256: `6ca519328c18ed80686abdb59a41e9edc66015694a91fcdc13b888d6865f1502`.
- GHCR push is unavailable with current credentials because they have `read:packages` but not `write:packages`; no broader credential was requested.
- Fallback chosen: preload the exact verified image into K3s containerd on all three buildboxes and set ARC runner image pull policy to use the local image.

### Buildbox preload state at this checkpoint

- `debian1`: verified archive present with the expected SHA; K3s containerd contains `ghcr.io/alexcodeplace/themefactory-ci-runner:2026-08-22`.
- `debian2`: verified archive present with the expected SHA; K3s containerd import verified.
- `debian3`: verified archive present with the expected SHA; K3s containerd import verified.
- `debian1`: K3s image config digest matches the same runner build; containerd represents the Docker empty layer uncompressed on this node, so its local manifest digest differs while the config/rootfs identity remains equivalent.

Debian1 rootless Podman unused image cache was pruned after it reached 99% disk usage; active containers/volumes were left untouched. Roughly 32 GiB was reclaimed, leaving sufficient space for the runner image.

## ARC execution design

Two repo-scoped scale sets:

1. `themefactory-ci`
   - unprivileged/default K3s runtime with non-root + RuntimeDefault seccomp + dropped capabilities (the live cluster has no `gvisor` RuntimeClass);
   - planning/static/aggregation;
   - no service-account token;
   - no reusable publication credential.

2. `themefactory-runtime`
   - internal-only DIND pool for disposable WordPress/MariaDB/Chromium fixtures;
   - no service-account token exposed to runner;
   - fork PRs rejected before runtime admission;
   - maximum three heavy concurrent runner pods so K3s can use `debian1/2/3` capacity without hostname-pinned shards.

## 2026-08-22 continuation checkpoint — deterministic ARC runtime

- Re-inspected durable branch/worktree: `HEAD` and `origin/main` are both `304a1d4ff061e8a9d1471c3d6a104af15ce50c97`; no divergence currently.
- Live K3s/ARC prerequisites verified: all `debian1/2/3` Ready; ARC controller and existing scale-set chart are `0.14.2`; no `gvisor` RuntimeClass exists.
- Runner image live probe succeeded on an unpinned K3s node (`debian2`): Docker CLI 29.1.3, Node 18.19.1, PHP 8.3.6, Python 3.12.3, Git 2.55.0, UID/GID 1001.
- Replaced ARC stock floating `docker:dind` injection with an explicit runtime pod template. DIND is pinned to `docker:29.1.3-dind` linux/amd64 manifest `sha256:64d6ee47ea821c986467199baa162f5ac8cde3f57b719f18e23f3ed7a7444131`.
- DIND image has been explicitly pulled/verified in K3s containerd on all three buildboxes.
- ThemeFactory runner image remains preloaded on all three buildboxes with `imagePullPolicy: Never`.
- Runtime runner itself is non-root/no-new-privileges/capabilities-dropped; only the DIND sidecar is privileged. Runner pods keep `automountServiceAccountToken: false`.
- Both ARC Helm releases render successfully with pinned chart `0.14.2`; rendered manifests contain no `:latest` or floating `docker:dind` image.
- Removed a duplicate `runtime-engine-selftest` assertion from the workflow full gate.

## 2026-08-22 continuation checkpoint — ARC live registration

- Installed `themefactory-ci` in namespace `themefactory-runners-ci` and `themefactory-runtime` in `themefactory-runners-runtime` using ARC chart `0.14.2`.
- Both AutoscalingRunnerSets are registered against `https://github.com/alexcodeplace/ThemeFactory` and report `status.phase: Running`.
- GitHub listener logs show successful registration-token retrieval and Actions tenant session creation for both scale sets.
- Both listeners calculated zero desired runners with no jobs and their EphemeralRunnerSets scaled to 0, proving clean idle scale-to-zero before any workflow run.
- Live static runner template: `automountServiceAccountToken: false`, non-root UID/GID 1001, `RuntimeDefault` seccomp, all capabilities dropped, no privilege escalation, runner image `imagePullPolicy: Never`.
- Live runtime runner template: runner itself is non-root/capabilities-dropped/no privilege escalation/no service-account token; only the pinned DIND sidecar is privileged. DIND is `docker:29.1.3-dind@sha256:64d6ee47ea821c986467199baa162f5ac8cde3f57b719f18e23f3ed7a7444131`.
- Live Helm render/installed specs contain no floating `docker:dind` or `:latest` dependency.

## 2026-08-22 continuation checkpoint — pre-push validation

- Synced the current verification-engine worktree to Debian1 after ARC deployment.
- Debian1 verification-engine suite: **17/17 PASS**.
- `tools/theme_ci.py global-static`: PASS with exact expected/executed union for all 21 repo-scope static/package checks in that receipt.
- `tools/theme_ci.py check-repo`: PASS.
- Workflow dispatch now supports efficient `canary` scope (default) and explicit `all-themes` scope; dispatch uses `origin/main` as the comparison base instead of an unavailable `github.event.before`.
- Duplicate workflow plan outputs were removed. Runtime verifier artifact upload now captures all `guard-selftest-*.json` proof files.

## 2026-08-22 continuation checkpoint — first live ARC run and artifact-free repair

- Draft PR #1 triggered live GitHub Actions run `32577129192` on the new ARC scale sets.
- `themefactory-ci` created an ephemeral runner pod on Kubernetes, executed the plan job, and tore it down; a second static runner was created for the fail-closed full gate. This proves live GitHub→ARC→K3s admission for the static pool.
- The plan logic itself completed, but `actions/upload-artifact@v4` failed because the repository GitHub Actions artifact storage quota is exhausted. The runtime pool was correctly skipped after the required plan job failed.
- Removed GitHub artifact storage from the blocking CI architecture rather than depending on quota resets.
- Revised topology: repository-global static checks remain in `themefactory-ci`; each changed theme executes theme-static checks, all semantic runtime shards, and exact expected/executed aggregation inside one `themefactory-runtime` job. This keeps receipt aggregation local to the ephemeral runner and removes cross-job artifact transport.
- Final machine-readable receipt JSON is emitted into the job step summary/log; blocking correctness no longer depends on GitHub artifact quota or `actions/cache`.
- `tools/theme_ci.py aggregate` now aggregates theme-scope evidence only; repository-scope evidence remains a separate required global-static gate combined by `Full gate`.
- Workflow contract now rejects `actions/upload-artifact` / `actions/download-artifact` in the blocking workflow.
- Added opt-in `themefactory-all` PR label support to run all themes when explicitly requested; ordinary CI-engine PRs use only the RED/GREEN runtime canary, avoiding blanket theme execution.
- Artifact-free workflow rerun locally on Debian1: verification tests **17/17 PASS**, global-static PASS, repository contract PASS.

## 2026-08-22 continuation checkpoint — live ARC canary GREEN

- Live GitHub Actions run `32577647023` at branch commit `abecd0f3e33f36be009af4e406ef44ecd6fc909b` completed **SUCCESS**.
- `Plan verification`: PASS on an ephemeral `themefactory-ci` runner.
- `Repository verification contract`: PASS on a second ephemeral `themefactory-ci` runner.
- `Runtime verifier RED/GREEN canary`: PASS on an ephemeral `themefactory-runtime` runner.
- Runtime pod was scheduled to `debian2` without hostname pinning; DIND sidecar used the pinned Docker 29.1.3 digest and reached Ready.
- Live pod inspection proved `automountServiceAccountToken: false`; runner UID/GID 1001; runner `privileged: false`; no privilege escalation; all capabilities dropped. Only the DIND sidecar ran privileged/root.
- The canary executed permalink, editor/editability, demo-import, equal-height, and template GREEN/RED fixtures end-to-end inside the GitHub ARC job.
- `Full gate`: PASS.
- After completion, the runtime EphemeralRunner pod was deleted and `themefactory-runtime` returned to `CURRENT RUNNERS=0`, proving ephemeral teardown and scale-to-zero.
- CI-engine-only PR correctly selected no production theme matrix; profile-specific theme execution is therefore not blanket-triggered for unrelated infrastructure-only changes.

## 2026-08-22 continuation checkpoint — ledger implementation convergence

- Added permanent `implementation_coverage()` authority and verification test.
- Coverage result: **167 tests, 0 holes** — 110 runtime handlers, 32 theme-static authorities, 21 repo-static authorities, 4 aggregate authorities.
- The JSONL `status` field is implementation-task state by design; all 167 written tests are now marked `complete`. This does **not** assert that every existing theme passes every selected test.
- All 10 tests marked `proof_required` already have RED proof.
- `tools/theme_ci.py check-ledger --require-complete`: PASS.
- `tools/theme_ci.py check-repo --require-complete`: PASS.
- Debian1 verification suite after convergence: **18/18 PASS**.
- Debian1 global-static receipt: PASS with exact expected/executed union.
- Added canonical `theme-ci verify <theme>` orchestration authority so local and CI per-theme execution share one implementation rather than duplicating plan/static/shard/runtime/aggregate logic in workflow YAML.

## 2026-08-22 continuation checkpoint — canonical verify path GREEN

- Added permanent orchestration test for `theme-ci verify <theme>`, proving one canonical plan → static → runtime shard → aggregate path writes a final receipt.
- GitHub per-theme workflow now calls that same `theme-ci verify` authority; duplicate orchestration logic was removed from YAML.
- Debian1 verification suite after this change: **19/19 PASS**.
- `check-ledger --require-complete`: PASS with **167/167 complete**.
- `check-repo --require-complete`: PASS with **167 implementation paths, 0 holes**.
- Debian1 global-static receipt remains PASS.

## 2026-08-22 continuation checkpoint — first canonical real-theme run

- Ran canonical `theme-ci verify united-pets --mode pr --engine podman` on Debian1.
- The command exited `1` at the static gate before runtime fixture execution, proving fail-closed behavior.
- Findings were: `TF-PKG-010` and `TF-PKG-011` dist/tree mismatch with only `theme-test.yaml` missing from the shipped ZIP; `TF-STATIC-017` dangerous eval/assert pattern; `TF-EDITABILITY-002` missing declared editable-field identities for three source-section override groups.
- No final receipt was emitted because static verification failed, as intended.
- These findings are being classified individually as verifier false positives versus genuine theme defects before any remediation. No theme or verifier behavior is being weakened merely to make United Pets pass.

## 2026-08-22 continuation checkpoint — completed-ledger ARC run GREEN

- Final ARC canary run for completed-ledger commit `e6f83583110bb6a5b2871f589f0b78f7e4cb7365`, GitHub run `32578980834`, completed **SUCCESS**.
- `Plan verification`: PASS.
- `Repository verification contract`: PASS.
- `Runtime verifier RED/GREEN canary`: PASS on `themefactory-runtime`.
- Production-theme matrix was correctly skipped because the PR changes only verification infrastructure/contracts.
- `Full gate`: PASS.
- This confirms the exact 167/167-complete ledger commit is live-proven through GitHub → ARC → K3s, not only locally.

## 2026-08-22 continuation checkpoint — United Pets static findings classified

- Classified the first canonical United Pets static failures from actual implementation evidence.
- `TF-PKG-010` / `TF-PKG-011` were verifier metadata drift: `theme-test.yaml` is CI contract metadata and is intentionally absent from shipped `dist/*.zip`. Added explicit `ci/policy.yaml` `non_shipping_theme_files: [theme-test.yaml]`; source/dist equality and runtime candidate ZIP staging now use that same rule. No arbitrary file ignore was added.
- Added regression coverage proving `theme-test.yaml` is excluded while real files such as `style.css`/`index.php` remain mandatory, and proving runtime candidate ZIPs do not ship the CI contract.
- `TF-EDITABILITY-002` was contract drift: the real `united-pets/source-section` block stores generated text/link/image edits in one Gutenberg `values` object, not nonexistent `textOverrides` / `linkOverrides` / `imageOverrides` attributes. Contract corrected to `section` + `values`; checker itself was not weakened.
- Added regression coverage requiring editable-field contracts to name identities that actually exist in implementation.
- Direct United Pets re-check after the corrections: package tree equivalence PASS; editability identity PASS.
- `TF-STATIC-017` remains intentionally RED and is a genuine theme defect: `inc/assets.php` enqueues `assets/js/plugins-runtime.js`, and that shipped runtime bundle contains executable `window.eval()` in its legacy jQuery Form JSON fallback. The security checker is unchanged and no waiver was added.

## 2026-08-22 continuation checkpoint — real-theme false positives eliminated

- Added explicit non-shipping metadata policy for `theme-test.yaml`; source/dist equality and runtime candidate packaging now share the same rule.
- Corrected United Pets editability contract to match its actual Gutenberg source-section attributes: `section` + `values`. No editability checker weakening was introduced.
- Added three regression tests covering non-shipping package metadata, runtime candidate packaging, and editable-field identity correctness.
- The first new package regression exposed a missing `PurePosixPath` import in the runtime harness; fixed before commit.
- Debian1 verification suite after the corrections: **22/22 PASS**.
- `check-repo --require-complete`: PASS, 167/167 complete, 0 implementation holes.
- Canonical real-theme rerun on Debian1: `theme-ci verify united-pets --mode pr --engine podman` exits `1` with exactly one static failure: `TF-STATIC-017: dangerous eval/assert pattern`.
- The previous package and editability failures are gone.
- `TF-STATIC-017` is deliberately not waived: United Pets enqueues `assets/js/plugins-runtime.js`, which contains executable `window.eval()` in a legacy jQuery Form JSON fallback. This is genuine negative proof that the completed CI engine blocks a currently unsafe theme.

## 2026-08-23 continuation checkpoint — final ARC flake diagnosed

- Exact-commit ARC run `32581256842` at `2c880b699b1b24c1847e42efcc1ea88ca2295c0e` failed only in the runtime RED/GREEN canary; plan and repository contract were green.
- Failure was in the nominally-good editor fixture: WordPress core `wp-admin/js/user-profile.min.js?ver=7.1` intermittently threw `TypeError: Cannot read properties of undefined (reading 'serialize')`. Negative editor/editability fixtures still failed correctly.
- A clean isolated Debian1 rerun of `guard_selftest.py --family editor` completed **RC 0**: GREEN editor/editability passed and RED editor/editability failed as designed. Therefore the branch logic itself is not deterministically broken.
- The runtime fixture policy still referenced mutable container tags. Resolved current linux/amd64 manifests for the tested environment and will pin them before another authoritative ARC run so image drift cannot change test behavior between identical Git SHAs.
- Resolved digests: WordPress `sha256:74dc06528818d8f69932b246e5abbfd2b323773e85dd2c28a11cf5fc9fc6f18b`; WP-CLI `sha256:51ff6b7643d9b4c29d74d83b2c3fe12e706812e7add075f189535f498dd5201d`; MariaDB `sha256:e564bcaefb87c3d2b8b09b539ea791d34f4b62c05e2e7cb03f5d6388bdc54f2c`; Selenium Chromium `sha256:900004a89c89237430bf6fca81e5368c3c57f7e73bcf09d6c64e1509f749f273`; nginx reference fixture `sha256:62223d644fa234c3a1cc785ee14242ec47a77364226f1c811d2f669f96dc2ac8`.

## 2026-08-23 continuation checkpoint — runtime environment pinned

- Added strict digest pinning for all disposable runtime fixture images (WordPress, WP-CLI, MariaDB, Selenium Chromium, nginx reference).
- Added repository authority `runtime_environment_contract()`; `check-repo --require-complete` now fails if any runtime image is mutable.
- Runtime shard receipts now include `environment.engine` plus the exact pinned image references.
- Aggregate `TF-REL-001` now requires runtime environment identity and verifies it matches the checked-in pinned policy, closing the prior receipt/environment gap.
- Debian1 verification suite after the determinism change: **23/23 PASS**.
- Debian1 `check-repo --require-complete`: PASS with 167/167 complete, zero implementation holes, and all runtime image digests present.

## 2026-08-23 continuation checkpoint — reconciled and pinned branch validation

- Verification branch now contains current `origin/main` runtime-hardening commit `2c824f9d30e68a5a491307696bdb4b5d5ae0f8bc`; merge commit is `ef4cb466b9832d07b2fcafd912fe942654548bde`. Current merge-base equals `origin/main`, so no mainline changes are missing at this checkpoint.
- Runtime image determinism commit `4ac7479` is included. All disposable fixture images are `@sha256` pinned and runtime receipts bind those exact image identities; aggregate `TF-REL-001` rejects missing/mismatched environment identity.
- Debian1 on the exact merged tree: verification suite **23/23 PASS**, global-static exact expected/executed receipt PASS, `check-repo --require-complete` PASS with 167/167 complete and zero implementation holes.
- Exact merged/pinned editor guard rerun: **RC 0**. GREEN editor/editability both pass; injected RED editor/editability both fail exactly as designed. This supersedes the intermittent WordPress-core error seen in old ARC run `32581256842`.
- Merged United Pets 1.0.3 static gate fails exactly one test: `TF-STATIC-017` dangerous eval/assert pattern. Package-tree/editability metadata corrections remain green after mainline reconciliation. The legacy eval gate is not waived.
- Full four-family RED/GREEN guard suite on Debian1 using the pinned runtime environment completed **RC 0**.
- Permalink lifecycle: GREEN `TF-INSTALL-001` passes; missing lifecycle flush RED produces `/tf-items/` 404.
- Editor/editability: both GREEN tests pass; injected editor error and stripped-save sentinel RED both fail.
- Demo import: all five GREEN tests pass; missing activation notice, wrong top-level menu placement, and non-idempotent import RED all fail.
- Layout/templates: equal-height/template registration/assignment/editable-composition GREEN all pass; unequal cards and missing/default/noncomposed template RED all fail.

## Remaining completion gates

1. Keep the verified runner image preloaded on all three nodes; runner values use `imagePullPolicy: Never` so CI cannot silently substitute registry bytes.
2. Install and live-prove both ThemeFactory ARC scale sets with pinned ARC chart `0.14.2`.
3. Trigger the real GitHub Actions workflow and prove jobs schedule to ARC, runners are ephemeral, and scale sets return to zero.
4. Verify trust/security properties of the live runner pods and ensure no workstation fallback or hostname-pinned shard exists.
5. Run broader runtime semantic shards against actual WordPress fixtures and fix verifier defects surfaced by real execution.
6. Add/execute falsification/mutation proofs for remaining required test families where a proof is necessary.
7. Advance JSONL statuses only from evidence and reach zero unfinished required implementation tasks.
8. Run final repository/static/runtime/aggregate gates.
9. Commit the verification engine, reconcile onto current `origin/main`, push the branch, and verify remote commit.
10. Land to `main` only if project policy/owner instruction permits; otherwise leave a verified branch ready for merge.

## Completion rule

Do not declare `DONE` until the required ledger/infrastructure work is complete, real ARC execution has been proven, final gates are green, and Git state is committed/pushed as required.

## 2026-08-23 continuation checkpoint — merged pinned guard suite GREEN

- Verification branch reconciled with current `origin/main` (`2c824f9d30e68a5a491307696bdb4b5d5ae0f8bc`) at merge commit `ef4cb466b9832d07b2fcafd912fe942654548bde`.
- Debian1 exact merged-tree repository authority: **23/23 pytest PASS**, global-static exact-union PASS, and `check-repo --require-complete` PASS with **167/167 complete** and zero implementation holes.
- Runtime environment policy is digest-pinned for WordPress, WP-CLI, MariaDB, Selenium Chromium, and nginx reference fixture; strict repo checks validate every pin.
- Focused pinned editor/editability canary: **RC 0**. GREEN editor/editability cases pass; injected editor console error and save-roundtrip corruption fail as intended.
- Full `guard_selftest.py --family all` on Debian1: **RC 0**. GREEN permalink lifecycle, editor/editability, demo-import, and layout/template fixtures all pass; every injected RED defect is rejected.
- This closes the earlier mutable-runtime-image flake at the verifier level and reconfirms RED/GREEN behavior after merging the latest United Pets runtime hardening.

## 2026-08-23 continuation checkpoint — provider-bound safe merge authority

- GitHub branch-protection API for `main` returns `403` on the current private-repository plan, so native required-check enforcement cannot be configured yet.
- Added `tools/theme-safe-merge` / `tools/theme_safe_merge.py` as the fail-closed alternative.
- Safe merge requires an open non-draft PR targeting `main`, local HEAD == PR head SHA, and an exact-SHA GitHub Actions `Full gate` check-run with `conclusion=success`.
- The merge mutation uses `gh pr merge --match-head-commit <sha>` and never uses `--admin` or `--auto`, closing the evidence/merge race.
- Added unit tests covering exact-SHA/provider success, draft refusal, local-head mismatch refusal, failed/non-Actions check refusal, and `--match-head-commit` merge invocation.
- `check_workflow_contract()` now requires the safe-merge authority and validates its canonical check/base/provider/head-race invariants.

## 2026-08-23 continuation checkpoint — real United Pets importer semantics proven

- Corrected runtime harness WP-CLI handling so stderr/PHP warnings cannot be parsed as data, paths, IDs, or URLs; importer menu discovery now uses the authenticated admin DOM.
- Added deterministic importer transition waiting: form importers must replace the pre-click document marker; AJAX importers must produce an observed DOM mutation before completion can be accepted.
- Verification suite including safe-merge/runtime regressions is now **33/33 PASS** on Debian1; `check-repo --require-complete` remains PASS with 167/167 implemented and zero holes.
- Real United Pets Gutenberg/editor shard is fully GREEN after the WP-CLI stderr fix.
- Real United Pets demo/forms/install shard after synchronization fix now takes a complete first-import snapshot. `TF-DEMO-004` remains RED for a genuine importer defect: second import recreates the `United Pets Primary` menu term and changes front/blog page IDs even though content counts remain stable.
- `TF-FORM-002` remains RED for genuine unlabeled textarea/search controls on `/adopt-senior-dog/`, `/blog/`, `/cat-allergies/`, and `/elements/`.
- No waiver or checker weakening was added for either genuine historical-theme defect. Existing themes may remain non-releaseable; the verification-engine completion criterion is that the engine detects them correctly.
- Exact remote verification commit `f4d3436a91bdcfc5ede3a55df262b9e4fcc842c1` previously completed GitHub Actions run `32612740433` SUCCESS through ARC/K3s and both ThemeFactory runner sets returned to zero.

## 2026-08-23 continuation checkpoint — corrected real-theme shards GREEN

- Repository verifier after the latest runtime-semantic corrections: **38/38 PASS** on Debian1; `check-repo --require-complete` PASS with **167/167 complete** and zero implementation holes.
- Runtime browser/content gates now call an explicit `ensure_demo_content()` prerequisite for themes declaring demo import. Independent CI shards therefore cannot accidentally test untouched WordPress bootstrap content or pass component gates vacuously. Fresh-install/importer-lifecycle tests retain their required pre-import behavior.
- The fixture disables the CI admin user's frontend admin bar so authenticated importer/editor sessions do not contaminate public geometry or screenshot evidence.
- `TF-RUNTIME-005` now uses Chromium performance-log `Network.responseReceived` / `Network.loadingFailed` evidence instead of the invalid `ResourceTiming.duration===0` heuristic.
- Conversion reference transfer is binary-safe, the nginx reference container is tracked/cleaned by fixture lifecycle, structural comparison uses actual page sections, and geometry comparison matches stable semantic/id anchors rather than DOM index coincidence.
- UI/accessibility false positives were removed for intentionally hidden/inert controls, screen-reader text, pre-focus skip-link geometry, and image-logo accessible names. Focus visibility now tests real browser focus/scroll behavior.
- `TF-UI-008` now detects actual within-word line splitting rather than merely flagging CSS `overflow-wrap:anywhere`.
- United Pets declares its actual preserved global shell selectors (`#main-nav`, direct global footer) for `TF-TEMPLATE-004`/shell checks instead of being forced into semantic tags the source design never used.
- Corrected real United Pets conversion shard `s02b`: **RC 0**, `TF-CONV-001..004` all PASS.
- Corrected real United Pets Gutenberg/editor shard `s03`: **RC 0**, all seven selected editor/editability/Gutenberg tests PASS.
- Previously isolated shell/network/navigation/target-size/template subset is GREEN after corrections; `TF-A11Y-007` also passes when testing actual focus behavior.
- Remaining genuine historical-theme failures remain blocking and are not waived: demo-import non-idempotence, unlabeled controls, mobile comment-form overflow, missing intrinsic image dimensions, duplicate H1, and other accessibility findings where reproduced.

## 2026-08-23 continuation checkpoint — final guard and image gate GREEN

- Final full four-family `guard_selftest.py --family all` on Debian3 completed **RC 0** using the current verifier: all GREEN permalink/editor/editability/demo/layout/template fixtures pass and every injected RED defect is rejected.
- Repository verifier after the latest runtime fixes is **42/42 PASS**; strict `check-repo --require-complete` remains PASS with **167/167 complete** and zero implementation holes.
- `TF-RUNTIME-006` was corrected to match its ledger contract: only effectively rendered images are required to decode after native-lazy settlement, and same-origin CSS background URLs are checked by status-only HTTP requests.
- Status-only HTTP checking uses curl `-o /dev/null -w %{http_code}`, so binary PNG/JPEG bodies can never enter the UTF-8 subprocess path.
- Real United Pets `TF-RUNTIME-006` rerun: **RC 0**, `310` visible images checked and `14` same-origin background URLs resolved.
- Representative/batched UI run completed in ~140 seconds with `187` shared route×viewport traversals instead of reloading all routes once per each of 25 UI invariants. Remaining failures are being classified; equal-height card, aspect-ratio, and mobile comment-form overflow findings remain theme-owned unless disproven.

## 2026-08-23 final local freeze checkpoint — verifier semantics complete

This checkpoint supersedes the older `Remaining completion gates` list above. Infrastructure/ledger/verifier implementation is locally complete; only provider landing proof remains.

- Exact-current Debian1 verifier suite: **43/43 PASS**.
- `check-repo --require-complete`: **PASS**, **167/167** complete, zero implementation holes (`110` runtime, `32` theme-static, `21` repo-static, `4` aggregate).
- Exact-current `global-static`: **PASS** with expected/executed repo-scope union identical.
- Exact-current full four-family `guard_selftest.py --family all` on Debian3: **RC 0**. Every GREEN permalink/editor/editability/demo/layout/template fixture passes and every injected RED defect is rejected.
- Runtime fixture images remain immutable digest pins; runtime receipts bind engine plus exact image identities.
- Browser/content shards establish declared demo state independently; frontend measurements are not contaminated by the admin toolbar.
- UI execution batches all requested invariants into one route×viewport traversal. Default viewports were reduced from eleven near-duplicates to seven representative breakpoints: `320, 390, 480, 768, 1024, 1440, 1920`. Representative route selection keeps declared pages plus representative route families instead of many duplicate CPT instances. Current real UI evidence uses `119` shared traversals.
- `TF-UI-002` and `TF-UI-011` use actual browser focus acceptance rather than `tabIndex` inference; focused probes clean up their focus state. A focused three-invariant rerun proves `TF-UI-012` passes independently while `002/011` still fail on United Pets, confirming genuine offscreen/hidden keyboard targets.
- `TF-RUNTIME-006` now checks only effectively rendered images after native-lazy settlement and verifies same-origin CSS background URLs through status-only HTTP requests. Real United Pets rerun: **PASS**, `310` visible images and `14` local background URLs checked.
- Real United Pets conversion `TF-CONV-001..004`: **PASS**.
- Real United Pets Gutenberg/editor/editability shard: **PASS**.
- Real United Pets runtime/security/package checks `TF-RUNTIME-002..005/006/008/010`, `TF-SEC-001/002`, `TF-PKG-015/016`: **PASS** in current semantic evidence.
- Historical United Pets remains intentionally non-releaseable and proves the engine blocks genuine defects: `TF-STATIC-017` shipped `window.eval()`; `TF-DEMO-004` importer identity churn; unlabeled controls/axe AA findings; keyboard-reachable offscreen/zero-box carousel targets; unequal declared card groups; distorted images; mobile comment-form overflow; missing intrinsic image dimensions; duplicate H1. None are waived.
- Native GitHub branch protection remains unavailable (`403` on this private-repository plan). `tools/theme-safe-merge` is the checked-in fail-closed alternative: exact local/PR head match + exact-SHA GitHub Actions `Full gate` success + provider identity + `--match-head-commit`; no `--admin`/`--auto`.

### Remaining provider landing gates

1. Reconcile against current `origin/main` if it advanced.
2. Commit and push the exact frozen verifier tree.
3. Obtain GitHub Actions → ARC/K3s `Full gate` success on that exact final SHA.
4. Confirm runtime/static ARC security boundary and scale-to-zero remain intact.
5. Mark PR #1 ready, validate `theme-safe-merge --check-only`, merge through `theme-safe-merge`, and verify `origin/main` contains the exact landed tree.

## 2026-08-23 provider landing proof — exact SHA `a02d58d` GREEN

- Branch commit `a02d58d9eb13980b650adc43a461793c77107203` was pushed and verified as the remote PR head.
- GitHub Actions run `32625906405` executed that exact SHA through ThemeFactory ARC and completed **SUCCESS**. Jobs: Plan verification PASS, Repository verification contract PASS, Runtime verifier RED/GREEN canary PASS, theme matrix correctly skipped for the verification-engine-only PR selection, and `Full gate` PASS.
- The first static runner pod scheduled to Debian2 and correctly failed closed with `ErrImageNeverPull` because the locally preloaded runner image had disappeared from that node's K3s/containerd store. No registry fallback occurred because `imagePullPolicy: Never` is enforced.
- The durable archive `/home/user/tmp/themefactory-ci-runner-20260822-v2.tar` remained intact with SHA256 `6ca519328c18ed80686abdb59a41e9edc66015694a91fcdc13b888d6865f1502`; its Docker config digest is the recorded runner identity `71ff98878387820ec9a9cf73ea60ad744ada41cf7da580da4beb32e87f8b8de8`. Re-importing the verified archive restored K3s execution without changing workflow code or weakening pull policy.
- Debian1/2/3 were reconciled from that exact verified archive. Node-local containerd manifest wrappers can differ after Docker-archive import, so the durable identity boundary is the archive SHA plus Docker config digest; the live runtime runner reported effective `imageID=sha256:71ff98878387820ec9a9cf73ea60ad744ada41cf7da580da4beb32e87f8b8de8`.
- Live runtime runner proof on Debian3: `automountServiceAccountToken=false`; runner UID 1001; `privileged=false`; `allowPrivilegeEscalation=false`; all Linux capabilities dropped. The only privileged component is DIND, pinned to `docker:29.1.3-dind@sha256:64d6ee47ea821c986467199baa162f5ac8cde3f57b719f18e23f3ed7a7444131`.
- Installed static ARC template proof: pod security UID/GID/fsGroup `1001`, RuntimeDefault seccomp, runner not privileged, no privilege escalation, all capabilities dropped, and service-account token automount disabled.
- After run completion, both `themefactory-ci` and `themefactory-runtime` autoscaling runner sets returned to **CURRENT RUNNERS 0 / PENDING 0 / RUNNING 0**, with no ThemeFactory runner pods remaining.
- Native branch protection remains unavailable on the current private-repository plan; landing remains fail-closed through the checked-in exact-SHA `theme-safe-merge` authority.

### Final landing sequence

1. Commit/push this durable provider-proof checkpoint.
2. Require an exact-SHA GitHub Actions `Full gate` success on that final documented tree.
3. Mark PR #1 ready, pass `tools/theme-safe-merge --check-only`, merge with its exact-head guard, then verify `origin/main` contains the landed commit/tree.

## 2026-08-23 final landing rerun diagnosis — explicit runtime image acquisition

- Final documented SHA `b5afe4eadee4ab980bba339e0360fbbac0def3d6` passed Plan verification and Repository verification contract, but GitHub Actions run `32627190657` failed the runtime RED/GREEN canary for infrastructure acquisition latency, not a semantic guard regression.
- Exact failure: the GREEN rewrite fixture's `docker run` for digest-pinned Selenium Chromium timed out after the generic 180-second command limit while a fresh ARC DIND daemon was implicitly pulling the browser image. The injected RED rewrite fixture still failed `TF-INSTALL-001` as intended.
- Root cause: implicit image pull was coupled to container creation. A slow registry transfer could therefore invalidate the GREEN fixture and leave partial Docker state even though image identity remained pinned.
- Runtime harness now has explicit `ensure_image()`: one cache `image inspect`; if absent, a digest-pinned `pull` with dedicated `image_pull_timeout_seconds=600`; then an availability verification. Setup explicitly acquires MariaDB, WordPress, WP-CLI, and Selenium before creating fixture containers; conversion acquires the nginx reference image on demand. Cached images perform one inspect and no pull.
- This is not a retry/waiver. Semantic tests still execute once; only fixture image acquisition is separated from container-start timing.
- ARC host durability was also repaired: on Debian1/2/3, the verified archive SHA256 `6ca519328c18ed80686abdb59a41e9edc66015694a91fcdc13b888d6865f1502` is hard-linked into `/var/lib/rancher/k3s/agent/images/themefactory-ci-runner-20260822-v2.tar`. Source and K3s import paths share the same inode per node, so no duplicate 2 GB allocation is consumed. K3s can restore the custom runner image after node/service restarts while `imagePullPolicy: Never` remains fail-closed.
- Runner archive Docker config identity remains `71ff98878387820ec9a9cf73ea60ad744ada41cf7da580da4beb32e87f8b8de8`.
- Completion still requires a new exact-SHA provider `Full gate` success after this acquisition fix, followed by `theme-safe-merge` and mainline verification.

## 2026-08-23 acquisition/workflow hardening local freeze

- Exact-current Debian1 repository verifier after explicit runtime-image acquisition and workflow canonicalization: **45/45 PASS**.
- `check-repo --require-complete`: **PASS**, **167/167 complete**, zero implementation holes.
- Exact-current `global-static`: **PASS** with exact expected/executed repo-scope union.
- Exact-current full four-family `guard_selftest.py --family all` on Debian3: **RC 0**. GREEN permalink/editor/editability/demo/layout/template fixtures pass and every injected RED defect is rejected.
- GitHub workflow duplicate-key/duplicate-command tolerance is now guarded: required job keys must appear exactly once; repo-static and runtime-guard commands must appear exactly once. Runtime canary timeout cap is 30 minutes to remain above the bounded 600-second explicit image-acquisition phase without adding retries/work.
- Pre-commit diff audit remains clean: no LFS-tracked changes, no generated runtime artifacts, no secret-like additions, and `git diff --check` passes.
- Next authority is a new exact-SHA GitHub Actions → ARC/K3s `Full gate`; no merge is permitted from the failed `b5afe4e` provider run.

## 2026-08-23 ARC ephemeral-storage eviction repair

- Exact-SHA run `32628883389` on `ac3d63029bd8abb3393868a070f4790b4459e820` passed Plan verification and Repository verification contract, then the runtime pod scheduled to Debian2 was evicted by Kubelet for `low on resource: ephemeral-storage`. The event explicitly reported pod ephemeral-storage request `0`; this was infrastructure capacity accounting, not a semantic verifier failure.
- ARC created a replacement runtime runner on Debian3, but GitHub job `97168795832` remained bound to the evicted runner `themefactory-runtime-mmgp2-runner-2z2mf`; the replacement correctly listened for new work and could not resume the already-assigned job. The invalid run was canceled rather than treated as evidence.
- Debian2 pressure was repaired using only reconstructible cache/log cleanup (Go build cache, pip HTTP cache, transient agent cache, archived journals). Free root space rose from ~13Gi to ~19Gi and Kubelet `DiskPressure` returned to `False`. The same conservative cleanup raised Debian1/Debian3 headroom to ~14Gi/~17Gi while retaining browser caches and all project/workspace data.
- Checked-in `themefactory-runtime` ARC values now reserve ephemeral storage: DIND request `8Gi`, limit `20Gi`; runner request `2Gi`, limit `8Gi`. The repository contract fails if these reservations disappear.
- The live `AutoscalingRunnerSet/themefactory-runtime` was patched to the same four values and verified in-cluster. Checked-in Helm values remain the future install/upgrade source of truth.
- Both ThemeFactory scale sets returned to zero after cancellation; Debian2 is Ready with `DiskPressure=False`.
- Repository authority after the ARC disk-budget change: **45/45 PASS**, `check-repo --require-complete` **167/167 complete** with zero holes, and `global-static` PASS. Runtime verifier code is unchanged from the immediately preceding full four-family guard **RC 0**, so no redundant browser guard rerun was added for this resource-only change.
- A new final exact-SHA provider run is required after this infrastructure-accounting change.
