chore: gate the validation harness in CI as an explicit check (#51) #431

Merged
manlycucumber merged 1 commit from chore/51-validation-ci-gating into develop 2026-07-02 18:33:39 +00:00
manlycucumber commented 2026-07-02 18:32:14 +00:00 (Migrated from github.com)

Closes #51. Completes Epic #45 (validation harness).

The oracle re-proving already runs inside the full suite on every PR, but only implicitly. This makes it a first-class, named merge gate.

Changes

  • .github/workflows/ci.yml — a dedicated validate job that re-proves the engine against the pinned oracles as an explicit check (distinct from the matrix's full run), so any divergence from the committed baselines fails the build. Pinned to one PHP version with ext-calendar (for Computus); Composer dependencies cached (actions/cache keyed on composer.lock) to keep it fast. The oracle fixtures are committed, so there's no network at test time.
  • phpunit.xml.dist — a validation testsuite over tests/Validation; test now targets introibo-core so the harness isn't run twice by the full suite.
  • composer.json — a validate-oracles script (phpunit --testsuite validation) for CI + local parity.

AC status

  • CI runs Computus, fixture, and SSPX checks on every PR — the validate job runs the whole oracle suite (Easter #46, missalemeum #48, SSPX #49; DO #50 self-skips without a checkout)
  • Any oracle divergence fails the build — the baselines assert live == frozen
  • The job caches dependencies to keep runs fast (fixtures are committed, so free)
  • A green run is required to merge — adding validate to the main ruleset's required checks is a maintainer-only settings change; flagged separately (see below)

Maintainer action

The main protection ruleset currently requires check (7.4/8.1/8.2/8.3). To make the explicit gate blocking, add validate to that ruleset's required status checks. (Develop is unprotected by design, but validate runs on every PR regardless.)

Local: composer test → 641 once (no double-run); composer validate-oracles → 22-test oracle suite in ~0.2s.

Closes #51. Completes Epic #45 (validation harness). The oracle re-proving already runs inside the full suite on every PR, but only *implicitly*. This makes it a **first-class, named merge gate**. ## Changes - **`.github/workflows/ci.yml`** — a dedicated **`validate`** job that re-proves the engine against the pinned oracles as an explicit check (distinct from the matrix's full run), so any divergence from the committed baselines fails the build. Pinned to one PHP version with `ext-calendar` (for Computus); **Composer dependencies cached** (`actions/cache` keyed on `composer.lock`) to keep it fast. The oracle fixtures are committed, so there's no network at test time. - **`phpunit.xml.dist`** — a `validation` testsuite over `tests/Validation`; `test` now targets `introibo-core` so the harness isn't run twice by the full suite. - **`composer.json`** — a `validate-oracles` script (`phpunit --testsuite validation`) for CI + local parity. ## AC status - [x] CI runs Computus, fixture, and SSPX checks on every PR — the `validate` job runs the whole oracle suite (Easter #46, missalemeum #48, SSPX #49; DO #50 self-skips without a checkout) - [x] Any oracle divergence fails the build — the baselines assert live == frozen - [x] The job caches dependencies to keep runs fast (fixtures are committed, so free) - [ ] **A green run is required to merge** — adding `validate` to the `main` ruleset's required checks is a maintainer-only settings change; **flagged separately** (see below) ## Maintainer action The `main` protection ruleset currently requires `check (7.4/8.1/8.2/8.3)`. To make the explicit gate blocking, add **`validate`** to that ruleset's required status checks. (Develop is unprotected by design, but `validate` runs on every PR regardless.) Local: `composer test` → 641 once (no double-run); `composer validate-oracles` → 22-test oracle suite in ~0.2s.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Directorium/Core!431
No description provided.