Skip to content

critique-conformance #9

critique-conformance

critique-conformance #9

# Nightly Critique Theater conformance run (Phase 16).
#
# Feeds every registered adapter through the conformance harness and
# writes one ConformanceDay row per adapter into the daemon's data
# directory. The /api/critique/conformance route reads the rolling
# 14-day window and surfaces the ratchet's promote / hold / demote
# recommendation.
#
# Cadence: 03:00 UTC every day. The schedule is intentionally outside
# the busy generation window so the cron does not contend with real
# user runs for adapter rate-limit budgets.
#
# Operator workflow: a follow-up workflow consumes
# /api/critique/conformance and either auto-flips
# OD_CRITIQUE_ROLLOUT_PHASE or alerts a human. That step is deploy-
# pipeline-specific and intentionally not built here.
name: critique-conformance
on:
schedule:
- cron: '0 3 * * *'
workflow_dispatch: {}
jobs:
run:
name: nightly conformance + ratchet snapshot
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
run_install: false
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm
- name: Install workspace
run: pnpm install --frozen-lockfile
- name: Build daemon
run: pnpm --filter @open-design/daemon build
# The full adapter sweep lives in a follow-up that wires every
# production agent CLI into the harness; here we drive the
# synthetic-good and synthetic-bad fixtures so the workflow
# proves the cron plumbing end-to-end (install + build + harness
# invocation + history write) without depending on every adapter
# binary being installable in the CI image. The runner exits
# non-zero on any thrown error so the workflow fails loudly
# instead of uploading an empty history snapshot.
- name: Run conformance harness (synthetic adapters)
run: |
node --import tsx apps/daemon/src/critique/__fixtures__/run-nightly.ts
- name: Upload history snapshot
if: always()
uses: actions/upload-artifact@v4
with:
name: critique-conformance-${{ github.run_id }}
path: .od/conformance/
if-no-files-found: ignore
retention-days: 30