Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 0
Phase 2.6.Q — models.dev as the model-metadata source (ADR-0071) + DB-backed catalog (ADR-0072)#76
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
796e10feaa7511996d0fb394acb74bd00a72d7b05179e0d95344bc831395b9abda0b10fbb83caedaffac466445e903033994636a1ce6cfbf5216c430b0b9b2e9c4367dddb0013f3d08477c88ac785468d70f086e3945c0dec0b2ee21943b495a5880987d8df7a12a5aaff49605702ee0589b103af5281dff71911953d9d4d509f6be96735d78c5115d7697ac9ff94465aecd84be165bcfb9e40ee1809ee8278057b839edd665aca8cfd45179315bd8d674a1b957db4914f6817628c302951fe5f772f843109633f27b9d68fb2b57a3ceaa7f1020f9ed569fb2f88b0e8a10f37bFile filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Uh oh!
There was an error while loading. Please reload this page.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,115 @@ | ||
| # The model-catalog guards (ADR-0071 §9). Two scheduled lanes, neither of which gates a PR: | ||
| # | ||
| # • weekly-catalog-check — did any ALREADY-SHIPPED model's price MOVE or VANISH? A moved price feeds the | ||
| # ADR-0028 cost cap, so it is a HUMAN decision surfaced as a red check, never a silent bot commit. `pnpm | ||
| # sync:models` exits non-zero on a moved/vanished shipped price; benign additive drift stays green (a weekly | ||
| # red-no-matter-what trains the maintainer to ignore it — the erosion sync.mjs's own comments warn against). | ||
| # | ||
| # • nightly-effort-conformance — the ONLY mechanism that catches a stale catalog re-introducing the reasoning | ||
| # bug: for each shipped reasoning model it asks the REAL provider whether it accepts every tier the catalog | ||
| # claims. A one-off manual probe proves a fact once; the catalog drifts continuously, so this runs nightly. | ||
| # | ||
| # Third-party actions are pinned to a full commit SHA (the `# vX.Y.Z` comment tracks the release) — the same | ||
| # convention ci.yml uses, so a moved tag cannot inject unreviewed code. | ||
| name: model-catalog | ||
| on: | ||
| schedule: | ||
| # Monday 06:00 UTC — the drift check. Ahead of a typical review week, so a red one is seen on Monday. | ||
| - cron: '0 6 * * 1' | ||
| # 07:00 UTC nightly — the live effort conformance (key-gated; skips with no key). | ||
| - cron: '0 7 * * *' | ||
| # Manual trigger for both, so a maintainer can run either on demand without waiting for the cron. | ||
| workflow_dispatch: {} | ||
| permissions: | ||
| contents: read | ||
| concurrency: | ||
| group: model-catalog-${{ github.event_name }} | ||
| cancel-in-progress: false | ||
| jobs: | ||
| weekly-catalog-check: | ||
| name: shipped-price-change guard | ||
| # Only the weekly cron (and a manual run); the nightly cron skips this job. | ||
| if: github.event.schedule != '0 7 * * *' | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 10 | ||
| steps: | ||
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | ||
| with: | ||
| persist-credentials: false | ||
| - name: Set up pnpm | ||
| uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4.4.0 | ||
| - name: Set up Node | ||
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | ||
| with: | ||
| node-version-file: .nvmrc | ||
| cache: pnpm | ||
| - name: Install (frozen lockfile) | ||
| run: pnpm install --frozen-lockfile | ||
| # `pnpm sync:models` builds `@relavium/llm` AND its `@relavium/shared` dependency first (via turbo `^build`) — | ||
| # the `@relavium/*` `exports` resolve only to `dist/`, which is gitignored, so a fresh runner has no built | ||
| # `@relavium/shared` and the sync's own `tsc`/dist import would otherwise die on TS2307 before any guard runs. | ||
| # `pnpm sync:models` fetches models.dev, normalizes it, and applies the money guards. It fails RED on the ONE | ||
| # thing that must be a human decision: a MOVED or VANISHED price on a model we already ship (a rate that | ||
| # silently moves also silently moves how much the ADR-0028 cost cap protects). It does NOT red on benign | ||
| # additive drift — models.dev adds models in our four providers constantly, and a check that is red every | ||
| # week trains the maintainer to ignore it, which is exactly how the price-change protection would erode | ||
| # (sync.mjs says so in its own comments). New models "merge automatically" via the deferred auto-PR | ||
| # (deferred-tasks.md); until it lands they are simply picked up by the next local `pnpm sync:models`. The | ||
| # snapshot this job writes into the ephemeral CI checkout is discarded — only the exit code is the guard. | ||
| - name: No ALREADY-SHIPPED model's price moved or vanished | ||
| run: pnpm sync:models | ||
| nightly-effort-conformance: | ||
| name: effort conformance (live) | ||
| # Only the nightly cron (and a manual run); the weekly cron skips this job. | ||
| if: github.event.schedule != '0 6 * * 1' | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 20 | ||
| steps: | ||
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | ||
| with: | ||
| persist-credentials: false | ||
| - name: Set up pnpm | ||
| uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4.4.0 | ||
| - name: Set up Node | ||
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | ||
| with: | ||
| node-version-file: .nvmrc | ||
| cache: pnpm | ||
| - name: Install (frozen lockfile) | ||
| run: pnpm install --frozen-lockfile | ||
| # Build the dependency closure first: the conformance suite imports `@relavium/shared`, whose `exports` resolve | ||
| # only to a gitignored `dist/`. Without this a fresh runner cannot resolve the cross-package entry and EVERY | ||
| # conformance file errors out before a single live probe — a red that looks identical to a real catalog drift. | ||
| # Turbo `^build` builds `@relavium/shared` ahead of `@relavium/llm` (mirrors ci.yml's pre-test build). | ||
| - name: Build workspace dependencies | ||
| run: pnpm turbo run build --filter=@relavium/llm | ||
| # Guard against a FALSE-GREEN nightly: the live cases are `it.skipIf(<key> === '')`, so with NO provider secret | ||
| # configured EVERY probe skips and the suite passes — a green that means "nothing was checked", indistinguishable | ||
| # from "all tiers verified". Fail loudly instead, so a green nightly is proof that probes actually ran. | ||
| - name: Require at least one provider secret | ||
| run: | | ||
| if [ -z "${ANTHROPIC_API_KEY}${OPENAI_API_KEY}${GEMINI_API_KEY}${DEEPSEEK_API_KEY}" ]; then | ||
| echo "::error::No provider secret is configured — every live effort probe would SKIP, and a green run would falsely read as 'all tiers verified'. Configure at least one of ANTHROPIC/OPENAI/GEMINI/DEEPSEEK_API_KEY." | ||
| exit 1 | ||
| fi | ||
| env: | ||
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | ||
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | ||
| GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} | ||
| DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} | ||
| # The conformance suite (fixtures + the `it.skipIf(<key> === '')` live cases). With the provider keys set here | ||
| # the live cases execute — and a catalog that claims a tier a model rejects fails red — while a missing key | ||
| # simply skips that provider's lane. Scoped to `src/conformance` so a flaky live case cannot widen the red | ||
| # surface to the whole package's unit suite. | ||
| - name: Live effort conformance | ||
| run: pnpm --filter @relavium/llm exec vitest run src/conformance | ||
| env: | ||
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | ||
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | ||
| GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} | ||
| DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} | ||
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: HodeTech/Relavium
Length of output: 874
🌐 Web query:
GitHub Actions Node 20 deprecation actions/checkout v4 setup-node v4 pnpm action-setup v4 Node 24 runners June 2 2026 September 16 2026💡 Result:
GitHub Actions has deprecated Node.js 20 in favor of Node.js 24 as part of the runner runtime migration [1][2]. The transition involves two key dates in 2026: 1. June 16, 2026: Node.js 24 became the default runtime for GitHub Actions [3][4]. Actions that rely on Node.js 20 will trigger deprecation warnings if they have not been updated to support Node.js 24 [5]. 2. September 16, 2026: Node.js 20 is scheduled to be removed from GitHub Actions runners [5]. To address deprecation warnings and ensure compatibility, maintainers must update their workflows to use versions of actions that support Node.js 24 (often v5 or higher for core actions like actions/checkout, actions/setup-node, and pnpm/action-setup) [6]. Migration details: - Environment Variables: During the transition, users could use FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true to force Node.js 24 usage or ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true to temporarily continue using Node.js 20 after it was deprecated [2][5]. - Action Compatibility: Standard actions such as actions/checkout@v4 and pnpm/action-setup@v4 may trigger warnings if they are not updated to a version explicitly configured for the Node.js 24 runtime environment [7][6][5]. Users are encouraged to bump these to the latest available major versions [6].
Citations:
🏁 Script executed:
Repository: HodeTech/Relavium
Length of output: 5753
🌐 Web query:
actions/checkout v5 node24 runtime release notes actions/setup-node v5 node24 runtime release notes pnpm/action-setup v5 node24 runtime release notes GitHub Actions Node 20 deprecation warning current runners 2026💡 Result:
As of July 13, 2026, the migration from Node.js 20 to Node.js 24 for GitHub Actions is in effect. Node.js 20 reached end-of-life in April 2026 [1][2][3], and GitHub has deprecated Node.js 20 support on GitHub Actions runners, with an enforcement date of June 2, 2026 [4][5]. Key Details: - Official Actions Support: The major versions of standard actions, including actions/checkout (v5.0.0+) [6][7] and actions/setup-node (v5.0.0+) [8][9], have been updated to use the Node.js 24 runtime. - Runner Requirement: To use these v5 versions, your GitHub Actions runner must be updated to at least version v2.327.1 [10][8][11]. - Deprecation Status: Node.js 20-based actions will trigger a deprecation warning annotation at the end of job runs [5]. Users are expected to migrate their workflows to use actions that support the Node.js 24 runtime [1][5]. - pnpm/action-setup: While specific v5 release notes for pnpm/action-setup were not explicitly surfaced in the same format as official actions/ repositories, the broader migration requires that all actions running on GitHub-hosted runners be compatible with the Node.js 24 environment [5]. Users should check the repository's latest release for v5+ updates to ensure Node.js 24 compatibility.
Citations:
Upgrade these pinned GitHub Actions off the Node 20 line
.github/workflows/models-catalog.yml:40-46,70-76—actions/checkout,actions/setup-node, andpnpm/action-setupare still on v4 releases; move them to the current Node 24-compatible majors to avoid deprecation warnings and future runner failures.🤖 Prompt for AI Agents