Skip to content

chore(ci): raise the dev PR gate to Typecheck + Unit Tests (linux) - #371

Merged
LeXwDeX merged 7 commits into
devfrom
feat/370-issue370
Aug 19, 2026
Merged

chore(ci): raise the dev PR gate to Typecheck + Unit Tests (linux)#371
LeXwDeX merged 7 commits into
devfrom
feat/370-issue370

Conversation

@LeXwDeX

Copy link
Copy Markdown
Owner

Closes#370

What

Middle-tier dev gating (agreed with maintainer):

  1. ci-test.yml: pull_request: branches: [main, dev] — the unit/e2e matrix now also runs on delivery PRs. Note the whole matrix triggers (including E2E as informational checks on dev PRs); only Unit Tests (linux) is added to the required set.
  2. spec_git/policy.yaml: required_checks: [Typecheck, Unit Tests (linux)] — hand-maintained (the CLI's auto-detector still writes matrix-placeholder names; skip-${{/dispatch-only filtering is pending upstream).
  3. protect-dev Ruleset: maintainer action after merge — add Unit Tests (linux) to required checks (repo settings, not in this diff).

Rationale

#368 (missing SPDX headers) merged through the Typecheck-only gate and kept dev red for 75 minutes; Unit Tests (linux) catches exactly that assertion-level class pre-merge for ~3-5 extra minutes per PR. Full gating (E2E, 20-40 min) buys little: dev→main runs the full suite and release is manual.

Verification

  • YAML parses; this PR itself exercises the new trigger (watch Unit Tests (linux) appear in its checks)
  • specgit finish now evaluates both required checks

The Typecheck-only PR->dev gate let an assertion-level regression (#368,
missing SPDX headers) merge and keep dev's push-triggered full run red for 75
minutes. ci-test.yml now triggers on PRs to dev (the whole matrix runs, but
only Unit Tests (linux) becomes required); spec_git/policy.yaml follows so
specgit finish enforces the same pair. E2E stays push-on-dev + dev->main.
Closes#370
…e tool
The new PR->dev unit gate caught it (#371's own run): the exerciser's CI
context has no resolvable model, and the environment-profile validation made
model.unavailable a blocking 400 — while the workflow tool's start action
asks a question instead (an HTTP caller has no such interaction; spawn fails
loudly at execution time if a model never resolves). All other diagnostic
classes stay blocking.
… a model-bearing session
CI (no providers) exposed two layers: the advisory filter let a graph that
never compiled (prepared === undefined) through to a confusing 'no prepared
graph' 400 — a non-compiling graph is now always blocking regardless of
diagnostic class; and the dag.start happy-path scenario relied on the
pre-#344 behavior of never resolving a model. The scenario now runs under
withLlm with an explicit session model so the parent resolution chain has
something to resolve in the provider-less CI environment.
…28min)
The verdict waits for every policy check to reach a terminal state; with
Unit Tests (linux) now required on dev PRs, the 15min job cap timed out
while the sibling was still running.
…was the real timeout
The job-level 45min bump was necessary but not sufficient: the sibling-wait
script carries its own hardcoded 15-minute deadline and gives up while Unit
Tests (linux) (~28min) is still running.
@LeXwDeX
LeXwDeX merged commit f9f6e55 into devAug 19, 2026
10 checks passed
@LeXwDeX
LeXwDeX deleted the feat/370-issue370 branch August 19, 2026 10:07
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@LeXwDeX