Files
vdm/docs/adr/0019-live-veloxd-conformance-is-required.md
T
samiandClaude Sonnet 5 1d359af5a3 pkg: wire GUI's DoD harness into CI, mark live-veloxd conformance required
gui-dod (per-PR: scroll-60fps + unhappy-path) and gui-dod-nightly (rss-flat,
schedule/workflow_dispatch) are live in ci.yml, driving GUI's newly-landed
gui/tests/dod/run.sh + gui-dod-harness. No Xvfb step: run.sh already runs
QT_QPA_PLATFORM=offscreen itself.

Each gate forced red once before being trusted (tests/integration/README.md
has the transcripts): VELOX_DOD_FRAME_BUDGET_MS=0.01 for scroll-60fps,
VELOX_DOD_RSS_SLACK_KIB=-999999999 for rss-flat, and — since run.sh always
starts a working mockd — a direct gui-dod-harness invocation against an
unreachable socket for unhappy-path, which hit the harness's own 75s
watchdog exactly as documented.

Recorded GUI's live finding (gui/docs/proto-requests-m1.md) that mockd
--drop-connection is a no-op over the UDS transport, so unhappy-path's
drop-connection phase can't yet exercise a real drop — coordinating with
PROTO on the fix rather than working around it locally. gui-dod stays
required regardless: its other two phases and the crash/hang/watchdog paths
still catch real regressions.

Added gui-dod to BRANCH_PROTECTION.md's required-checks table.

ADR 0019: the live-veloxd conformance runner (run.sh step 3b, already
unconditional inside the already-required conformance job) stays required
as PROTO's xfail list shrinks (18 entries now, down from 34; 57/57 fixtures
passing on main). No CI change needed — it was already inside a required
check; this records the decision not to carve out an exception for it.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RBPR7iM3YPyxrjWsVtZDPJ
2026-09-12 22:04:09 +04:00

2.5 KiB

ADR 0019 — The live-veloxd conformance runner is a required check, as-is

Status: accepted · Date: 2026-09-12 · Lane: PKG/QA

Context

tests/conformance/run.sh step 3b (ADR 0014's conformance ctest, already required per .github/BRANCH_PROTECTION.md) replays every fixture against a real, isolated veloxd it builds and starts — not just mockd, which only proves the TS client and the fixtures agree with each other. This is the runner that can catch veloxd disagreeing with its own contract, and it is unconditional in run.sh (set -euo pipefail, no skip flag): it already runs, and already blocks, inside the conformance job.

What was open was whether to treat that as a settled, defended gate or as something still provisional while daemon/docs/deferrals.md's D1-D4b stub handlers were excused via veloxd-xfail.json. PROTO's update: 57/57 fixtures pass on main, and the xfail allowlist is down to 18 entries from 34 as DAEMON lands the deferred handlers behind them.

Decision

The live-veloxd conformance runner stays required — no change to CI is needed, since it already runs inside the already-required conformance job (ADR 0014). What this ADR records is the standing: PKG/QA is not carving out an exception, a continue-on-error, or a separate advisory job for it while the xfail list shrinks. A regression here fails the same required check a schema mismatch would.

Verified, not assumed: tests/conformance/veloxd-xfail.json has 18 entries as of this ADR (python3 -c "import json; print(len(json.load(open('tests/conformance/veloxd-xfail.json'))))"). Each remaining entry excuses one still-stubbed handler on deferrals.md's D-list, not a real disagreement between veloxd and its contract — tests/conformance/README.md already draws that line (an entry for anything else is a run.sh-detected "xfail entry unexpectedly passed" or a straight failure, not a quiet pass).

Consequences

  • No ci.yml or BRANCH_PROTECTION.md change: conformance was already listed required, and this runner was already inside it.
  • The xfail list is a visible, shrinking number, not a static allowance — as DAEMON clears more of deferrals.md's D-list, entries come out of tests/conformance/veloxd-xfail.json, and replay.ts fails loudly (per applyXfail's "unexpectedly passed" check) if one is left in after its handler ships.
  • Nothing here changes who owns what: veloxd-xfail.json and run.sh stay PROTO's; PKG/QA's role is the branch-protection policy this ADR confirms, not the runner itself.