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
48 lines
2.8 KiB
Markdown
48 lines
2.8 KiB
Markdown
# 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.
|