Files
vdm/.github/BRANCH_PROTECTION.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.8 KiB

Branch protection for main

CI defines the checks; branch protection is a repo setting (Settings → Branches → Add rule) and has to be configured once by an admin. This file records the intended policy so it can be re-applied or audited.

Rule: main

  • Require a pull request before merging. No direct pushes.

  • Require status checks to pass before merging, and require branches to be up to date first. Required checks:

    Check (job name in ci.yml) Required from
    clang-format now
    testserver now
    bootstrap-script now (validates package names against the 24.04 runner archive)
    bootstrap-script-2604 now — real --with-clang install in a 26.04 container; the release the project ships on
    build (gcc) / build (clang) now — core, daemon and gui have merged
    sanitizers (dev) / sanitizers (tsan) now — core, daemon and gui have merged
    conformance now — tests/conformance/ has landed; this is the M0 exit gate. Includes the live-veloxd runner (step 3b of run.sh), unconditional in the script — see docs/adr/0019-live-veloxd-conformance-is-required.md.
    extension-lint now — extension/ has merged (MV3 manifest + esbuild build)
    gui-dod now — gui/tests/dod/ has landed (GUI M1 DoD gates R3: scroll-60fps, unhappy-path); see tests/integration/README.md#gui-m1-definition-of-done-gates-r3. gui-dod-nightly (rss-flat) is schedule-only and cannot be a required PR check.

    clang-tidy is intentionally not required through M1 (continue-on-error: true, .clang-tidy has WarningsAsErrors: ''). Make it required at M2.

  • Require linear history (matches CLAUDE.md §6: rebase onto main, no merge commits).

  • Require conversation resolution before merging.

  • Do not allow force pushes or deletions.

  • Apply the rule to administrators too, except for the initial scaffolding period.

Note on the "skipped" job steps

extension-lint and clang-tidy short-circuit to a "skipped" echo when their lane hasn't landed. They still report success, so they can be marked required now without blocking — they start doing real work automatically on the commit that adds the lane.

Their guards fail loudly (non-zero) once the lane is half-present — e.g. an extension/manifest.json with no lintable package.json. A guard keyed to a single filename is how a required check ends up green over nothing; the skip branch is only for a lane that is genuinely absent.

conformance has no skip branch. It runs ctest -L conformance (see docs/adr/0014-conformance-runs-through-ctest.md); the dev test preset's noTestsAction: error fails the job if that label ever matches nothing, so a deleted or renamed registration goes red instead of passing vacuously.