Skip to content

DevLog v3.24.0 + v3.25.0 — release-intent conflict guard, project tra… #32

DevLog v3.24.0 + v3.25.0 — release-intent conflict guard, project tra…

DevLog v3.24.0 + v3.25.0 — release-intent conflict guard, project tra… #32

Workflow file for this run

name: test
# Quality gate: typecheck + lint + tests on every push to main and on PRs.
# Zero RUNTIME deps; dev-only deps (bun-types, typescript, @biomejs/biome)
# are pinned in bun.lock so the gate is reproducible (no floating bunx fetches).
on:
push:
branches: [main]
pull_request:
jobs:
test:
# Cross-OS matrix answers "does it work on Unix/macOS/Windows?" on every push,
# not once. fail-fast off so one platform's failure still surfaces the others.
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
with:
bun-version: "1.3.14"
- name: Install dev dependencies (bun-types)
run: bun install --frozen-lockfile
- name: Typecheck (tsc)
run: bun run typecheck
- name: Lint (Biome — fails on errors only; warnings don't gate)
run: bun run lint
- name: Run tests
run: bun test
coverage:
# Coverage ratchet — one OS is enough (the gate is deterministic). Fails the
# build if src/ line coverage regresses overall or for a sensitive module
# (floors live in scripts/coverage-gate.ts). Separate from the cross-OS test
# job so it doesn't run the coverage pass three times.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
with:
bun-version: "1.3.14"
- name: Install dev dependencies (bun-types)
run: bun install --frozen-lockfile
- name: Coverage gate
run: bun run coverage:gate
ui-smoke:
# The one BEHAVIORAL dashboard proof (#433): drives the real page in
# headless Chrome over raw CDP (zero deps) — happy render (live verdicts)
# plus the degraded dim when /api/verdicts is blocked at the network layer.
# Outside the cross-OS matrix so the browser dependency stays on the one
# runner that ships Chrome preinstalled.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
with:
bun-version: "1.3.14"
- name: Install dev dependencies (bun-types)
run: bun install --frozen-lockfile
- name: UI smoke (headless Chrome over CDP)
run: bun run smoke:ui
plugin-validate:
# Validates the plugin + marketplace manifests and hooks/hooks.json against
# the Claude Code schema, so a broken plugin.json can't ship. --strict treats
# unrecognized-field warnings as errors. Runs headless (no auth needed —
# `plugin validate` is a static schema check).
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Claude Code
run: npm install -g @anthropic-ai/claude-code
- name: Validate plugin manifests
run: claude plugin validate ./ --strict