From b6f865e9e07e6c2e12aba3ebfb8418b2b3147e03 Mon Sep 17 00:00:00 2001 From: Malcolm Jones Date: Mon, 5 Oct 2026 05:46:53 +0200 Subject: [PATCH 1/2] feat(desktop): restore isolated UI evidence harness [L30] --- .agents/skills/capture-ui-evidence/SKILL.md | 35 ++ .../references/runner-output-and-limits.md | 57 ++++ .agents/skills/test-t3-app/SKILL.md | 15 +- .agents/skills/test-t3-mobile/SKILL.md | 7 +- .github/pull_request_template.md | 8 +- apps/desktop/scripts/ui-evidence.mjs | 250 ++++++++++++++ apps/desktop/scripts/ui-evidence/doctor.mjs | 128 +++++++ .../desktop/scripts/ui-evidence/lifecycle.mjs | 155 +++++++++ .../scripts/ui-evidence/lifecycle.test.mjs | 108 ++++++ apps/desktop/scripts/ui-evidence/manifest.mjs | 109 ++++++ .../scripts/ui-evidence/manifest.test.mjs | 77 +++++ apps/desktop/scripts/ui-evidence/probe.mjs | 58 ++++ .../scripts/ui-evidence/provenance.mjs | 202 +++++++++++ .../scripts/ui-evidence/provenance.test.mjs | 97 ++++++ apps/desktop/scripts/ui-evidence/runner.mjs | 255 ++++++++++++++ apps/desktop/scripts/ui-evidence/runtime.mjs | 279 +++++++++++++++ .../scripts/ui-evidence/runtime.test.mjs | 33 ++ apps/desktop/scripts/ui-evidence/sandbox.mjs | 191 +++++++++++ .../scripts/ui-evidence/sandbox.test.mjs | 62 ++++ .../scripts/ui-evidence/scenario-api.mjs | 322 ++++++++++++++++++ .../scripts/ui-evidence/scenario-api.test.mjs | 183 ++++++++++ .../scripts/ui-evidence/scenarios/example.mjs | 11 + .../ui-evidence/scenarios/sidebar-rename.mjs | 88 +++++ knip.jsonc | 5 + package.json | 2 + 25 files changed, 2732 insertions(+), 5 deletions(-) create mode 100644 .agents/skills/capture-ui-evidence/SKILL.md create mode 100644 .agents/skills/capture-ui-evidence/references/runner-output-and-limits.md create mode 100644 apps/desktop/scripts/ui-evidence.mjs create mode 100644 apps/desktop/scripts/ui-evidence/doctor.mjs create mode 100644 apps/desktop/scripts/ui-evidence/lifecycle.mjs create mode 100644 apps/desktop/scripts/ui-evidence/lifecycle.test.mjs create mode 100644 apps/desktop/scripts/ui-evidence/manifest.mjs create mode 100644 apps/desktop/scripts/ui-evidence/manifest.test.mjs create mode 100644 apps/desktop/scripts/ui-evidence/probe.mjs create mode 100644 apps/desktop/scripts/ui-evidence/provenance.mjs create mode 100644 apps/desktop/scripts/ui-evidence/provenance.test.mjs create mode 100644 apps/desktop/scripts/ui-evidence/runner.mjs create mode 100644 apps/desktop/scripts/ui-evidence/runtime.mjs create mode 100644 apps/desktop/scripts/ui-evidence/runtime.test.mjs create mode 100644 apps/desktop/scripts/ui-evidence/sandbox.mjs create mode 100644 apps/desktop/scripts/ui-evidence/sandbox.test.mjs create mode 100644 apps/desktop/scripts/ui-evidence/scenario-api.mjs create mode 100644 apps/desktop/scripts/ui-evidence/scenario-api.test.mjs create mode 100644 apps/desktop/scripts/ui-evidence/scenarios/example.mjs create mode 100644 apps/desktop/scripts/ui-evidence/scenarios/sidebar-rename.mjs diff --git a/.agents/skills/capture-ui-evidence/SKILL.md b/.agents/skills/capture-ui-evidence/SKILL.md new file mode 100644 index 000000000..09cab32b8 --- /dev/null +++ b/.agents/skills/capture-ui-evidence/SKILL.md @@ -0,0 +1,35 @@ +--- +name: capture-ui-evidence +description: Use the standard Jones Code UI verification and evidence workflow for UI changes and screenshots. Route interactive shared-renderer checks to T3 Browser, native Linux desktop scenarios to the Electron harness after exact-revision qualification, and mobile checks to test-t3-mobile. +--- + +# Capture Jones Code UI evidence + +This is the default workflow for verifying user-visible UI changes and recording evidence. Choose the affected client: + +- Shared web/desktop renderer: [test-t3-app](../test-t3-app/SKILL.md) and T3's Browser panel for live inspection, clicks, typing, screenshots and iteration. +- Linux native desktop shell: the Electron runner below for repeatable screenshots and scripted interactions after exact-revision qualification. +- Native mobile: [test-t3-mobile](../test-t3-mobile/SKILL.md). + +Exercise the changed flow, assert its observable result, and check backend readback or reload persistence when the change depends on them. Use the same evidence format on every route: full candidate/comparison revisions (plus patch identity for dirty source), build correspondence, client/route, actual viewport/scale/theme, meaningful fixture, action and readback, captures, and coverage limits. The source/build distinction in [runner output and evidence limits](references/runner-output-and-limits.md) applies to Browser evidence too; a dev source OID alone is not an attestation of the served bundle. + +T3 Browser remains the shared-renderer route. An unavailable Preview does not authorize switching to a standalone browser or using Electron as a Browser fallback. + +The Linux Electron runner is a separate route for behavior that depends on the desktop shell. Require a recorded passing qualification for the exact harness revision; exploratory output alone leaves Electron-specific behavior unverified. This nightly source port does not qualify a host or adopt an installed wrapper. A separately installed host command must remain pinned to its qualified revision, with readback in `~/.local/state/jones-code-ui-evidence/qualification.json`; an older source qualification does not qualify this port. + +The runner launches existing built outputs; it does not build the app. On a host with the installed command, first run `jones-code-ui-evidence doctor`, then use `jones-code-ui-evidence run --source /absolute/candidate --build-receipt /absolute/candidate-receipt.json` with a scenario that exercises the changed flow. The default `sidebar-rename` is a qualification/smoke scenario; it does not verify an unrelated UI change. A custom scenario receives a Playwright page and Electron app for inspecting and interacting with the candidate inside the isolated run. + +From the Jones Code repository root, use: + +```sh +node apps/desktop/scripts/ui-evidence.mjs doctor [--source DIR] +node apps/desktop/scripts/ui-evidence.mjs setup [--source DIR] +node apps/desktop/scripts/ui-evidence.mjs run [--source DIR] [--scenario sidebar-rename|/absolute/path/scenario.mjs] [--size 1280x800] [--scale 1] [--theme system|light|dark] [--comparison OID] [--build-receipt FILE] [--out DIR] +node apps/desktop/scripts/ui-evidence.mjs cleanup --run +``` + +The repository also exposes the CLI and its bounded test group as package scripts `ui:evidence` and `test:ui-evidence`, invoked through the existing `vp run