Files
olp/models-registry.json
T
taodengandClaude Opus 4.7 cd391b13ba chore: D25 — round-2 P3 batch (F5/F6/F7/F9/F10/F11/F13 + D22 follow-up)
cold-audit catch from 2026-05-24

Final round-2 cold-audit cleanup batch. 8 small P3 items, batched per
Iron Rule 11 IDR cleanup-batch convention (precedent: D19 / D20). No
item exceeds ~35 lines; only F9 is a code change, the rest are docs +
registry updates.

Changes (7 files, +140 / -10):

1. ALIGNMENT.md (+8 / -2)
   - **F7**: Authority pin rows for anthropic / codex / mistral updated
     from "TBD on Phase-1 spawn" to the actual citations cited in each
     plugin's header:
     · anthropic — @anthropic-ai/claude-code v2.1.89 (OCP fork audit pin)
     · openai — https://developers.openai.com/codex/cli/reference + features URL
     · mistral — https://docs.mistral.ai/mistral-vibe/terminal/quickstart + config URL
     Plugins remain Candidate (per Provider Inventory) — D25 just removes the
     `TBD` marker; Enabled transition still requires Phase audit.
   - **F6**: New 3rd entry in § One-shot Triggered Audits — "OpenAI Codex ToS
     formal pin (trigger: Phase 2 E2E enable for Codex, OR 2026-12-31)".
     Closes the cross-reference from ADR 0006 § Decision table.

2. README.md (+4 / -2)
   - **F5**: Cache-key bullet (Architecture section) replaced the stale
     7-tuple with a link to ADR 0005 § Cache key composition + the
     post-D15 11-field tuple inlined.
   - **D22 follow-up**: "328-test suite" → "Comprehensive test suite
     covering IR, cache, fallback, and integration paths" (version-less
     to prevent re-drift on every D-day).

3. docs/adr/0002-plugin-architecture.md (+4 / -2) — **F11**: Amendment 1
   wording corrected. The original Authority line + maxSpawnTimeMs
   description said "fallback engine's spawn-timeout enforcement loop"
   — but the enforcement actually lives in each provider plugin's
   `_spawnAndStream` (setTimeout + proc.kill + reject pattern). The
   fallback engine merely treats SPAWN_TIMEOUT as a hard trigger per
   ADR 0004 § Trigger taxonomy bullet 4. Both wording sites updated.

4. docs/adr/0005-cache-cross-provider.md (+1) — **F13**: Amendment 2
   gains a "Note on null-coalescing collisions" paragraph documenting
   that the `?? null` serialization treats undefined / null / [] as
   equivalent cache keys for array-typed fields. Intentional — both
   `tools: []` and `tools` omitted semantically mean "no tools." If a
   future provider distinguishes empty-array vs absent, the serialization
   needs revision.

5. models-registry.json (+35) — **F10**: 5 candidate entries added for
   the providers ALIGNMENT.md names but registry omitted. All five with
   `candidate: true`, `models: []`, tier per ALIGNMENT.md inventory:
   · grok / kimi → Tier C
   · minimax / glm / qwen → Tier B
   Closes the release_kit overlay's "Supported Providers from
   models-registry.json" claim. alignment.yml KNOWN_PROVIDERS validation
   array already includes all 8 names, so registry → workflow validation
   continues to pass.

6. server.mjs (+20 / -6) — **F9**: Streaming success path now distinguishes
   stop-terminated vs exhausted-without-stop. Pre-D25 code unconditionally
   cached after the for-await loop ended, treating any exhaustion as
   "completed." Now: only cache if `lastChunk?.type === 'stop'`. If the
   generator exhausts without emitting stop (truncation), log
   `streaming_no_stop_chunk` warn event and do NOT persist. Mirrors
   D16's buffered-path semantics ("response completed successfully (no
   truncation, no error mid-stream)") with the simpler skip-write
   pattern (streaming path doesn't use getOrCompute → no singleflight
   eviction needed). D23's cacheableForFirstHop guard preserved as the
   outer condition.

7. test-features.mjs (+78) — F9 test 15e in Suite 15:
   - Mock provider whose spawn yields delta chunks then implicit-returns
     without stop (provider-injection pattern same as 15d — the real
     plugins synthesize a stop on clean proc exit so __setSpawnImpl can't
     simulate this case)
   - Asserts response succeeds AND second identical request triggers
     fresh spawn (proves no caching happened) AND X-OLP-Cache: miss on
     both responses

Tests: 348 → 349 (+1 from 15e). All pass on Node 20.

Authority:
- F5 → ADR 0005 § Cache key composition (post-D15 Amendment 2)
- F6 → ALIGNMENT.md self + ADR 0006 self-reference
- F7 → plugin headers (verified during D25 implementation)
- F9 → ADR 0005 § Cache write conditions item 1 + D16 truncation precedent
- F10 → ALIGNMENT.md § Provider Inventory tier classification
- F11 → ADR 0004 § Trigger taxonomy bullet 4 (the actual SPAWN_TIMEOUT
  hard-trigger documentation)
- F13 → ADR 0005 Amendment 2 (extends with the null-coalescing note)
- D22 fu → no spec authority; version-less framing prevents future drift
- CC 开发铁律 v1.6 § 10.x — Round-2 Cold Audit caught all 8 items

Reviewer (Iron Rule v1.6 § 10.x Mode A, fresh-context opus, independent
of drafter): APPROVE. Independently verified F7 citations against
plugin headers (anthropic.mjs:5-6, codex.mjs:23/31, mistral.mjs:26/32);
F10 tier classifications against ALIGNMENT.md § Provider Inventory;
F6 cross-reference now self-consistent (ADR 0006 → ALIGNMENT.md);
alignment.yml workflow validation passes; F9 truncation semantics
mirror D16 buffered-path; test 15e correctly uses provider-injection
since real plugin synthesizes stop on clean exit.

Three non-blocking suggestions noted (README cache-key bullet slightly
verbose with both link + inline list; F9 could optionally synthesize
a finish_reason: 'length' stop chunk for client-visible truncation
observability; test 15e single-delta variant could be extended to
multi-delta). None folded in — all genuine polish, not correctness
gaps.

---

**Round-2 cold-audit cleanup complete.** 5 D-days (D21-D25 minus the
already-completed D24) closed all 13 round-2 findings (P2: F1/F2/F3/F4
in D21/D22/D23/D24; P3: F5-F13 distributed across D25 + earlier issues
#2/#3). v0.1 is one cold-audit-round-3 away from being ready to tag.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 14:56:05 +10:00

150 lines
5.4 KiB
JSON

{
"version": "0.1.0-bootstrap",
"comment": "OLP models registry — SPOT for (provider, model) → metadata per CLAUDE.md release_kit overlay. v0.1 founding shipped zero Enabled Providers per ALIGNMENT.md § Provider Inventory. D4 populates providers.anthropic as Candidate; D5 transitions to Enabled pending E2E audit. Schema validated by .github/workflows/alignment.yml; provider keys must match ALIGNMENT.md inventory.",
"providers": {
"anthropic": {
"displayName": "Anthropic Claude",
"tier": "D",
"candidate": true,
"models": [
{
"id": "claude-opus-4-7",
"displayName": "Claude Opus 4.7",
"contextWindow": 200000,
"deprecated": false
},
{
"id": "claude-sonnet-4-6",
"displayName": "Claude Sonnet 4.6",
"contextWindow": 200000,
"deprecated": false
},
{
"id": "claude-haiku-4-5",
"displayName": "Claude Haiku 4.5",
"contextWindow": 200000,
"deprecated": false
}
],
"aliases": {
"claude": "claude-sonnet-4-6",
"sonnet": "claude-sonnet-4-6",
"opus": "claude-opus-4-7",
"haiku": "claude-haiku-4-5"
}
},
"openai": {
"displayName": "OpenAI Codex",
"tier": "D",
"candidate": true,
"comment": "Model IDs sourced from canonical Codex models doc (https://developers.openai.com/codex/models, retrieved 2026-05-23). Each id is documented as a `codex -m <id>` example on that page. D7 E2E will probe each one.",
"models": [
{
"id": "gpt-5.5",
"displayName": "GPT-5.5",
"contextWindow": null,
"deprecated": false,
"note": "Frontier recommended model. Docs example: `codex -m gpt-5.5`."
},
{
"id": "gpt-5.4",
"displayName": "GPT-5.4",
"contextWindow": null,
"deprecated": false,
"note": "Docs example: `codex -m gpt-5.4`."
},
{
"id": "gpt-5.4-mini",
"displayName": "GPT-5.4 Mini",
"contextWindow": null,
"deprecated": false,
"note": "Lower-cost gpt-5.4 variant. Docs example: `codex -m gpt-5.4-mini`."
},
{
"id": "gpt-5.3-codex",
"displayName": "GPT-5.3-Codex",
"contextWindow": null,
"deprecated": false,
"note": "Docs example: `codex -m gpt-5.3-codex`. Distinct from the -spark variant."
},
{
"id": "gpt-5.3-codex-spark",
"displayName": "GPT-5.3-Codex Spark",
"contextWindow": null,
"deprecated": false,
"note": "Research preview. Docs example: `codex -m gpt-5.3-codex-spark`."
}
],
"aliases": {
"codex": "gpt-5.3-codex",
"codex-spark": "gpt-5.3-codex-spark",
"gpt5": "gpt-5.5",
"gpt5-mini": "gpt-5.4-mini"
}
},
"mistral": {
"displayName": "Mistral Vibe",
"tier": "D",
"candidate": true,
"comment": "Model IDs sourced from canonical Mistral models registry (https://docs.mistral.ai/getting-started/models/models_overview, retrieved 2026-05-23). Each id is the date-stamped canonical form Mistral's own model registry uses. The short forms (devstral-2, devstral-small-2) are aliases used in Vibe's config.toml TOML examples and are exposed as user-facing aliases below. Both models have 262144-token context window per the canonical registry + DOCS-5 launch announcement.",
"models": [
{
"id": "devstral-2-25-12",
"displayName": "Devstral 2",
"contextWindow": 262144,
"deprecated": false,
"note": "123B-parameter dense transformer. DOCS-5: $0.40/$2.00 per million tokens (input/output). Canonical date-stamped id; Vibe config.toml accepts the short form 'devstral-2' as an alias."
},
{
"id": "devstral-small-2-25-12",
"displayName": "Devstral Small 2",
"contextWindow": 262144,
"deprecated": false,
"note": "24B-parameter model, runs on consumer-grade GPUs. DOCS-5: $0.10/$0.30 per million tokens (input/output). Canonical date-stamped id; Vibe config.toml accepts the short form 'devstral-small-2' as an alias."
}
],
"aliases": {
"devstral": "devstral-2-25-12",
"devstral-2": "devstral-2-25-12",
"devstral-small": "devstral-small-2-25-12",
"devstral-small-2": "devstral-small-2-25-12"
}
},
"grok": {
"displayName": "xAI Grok",
"tier": "C",
"candidate": true,
"models": [],
"comment": "anticipated Phase 8+; no canonical models pinned yet"
},
"kimi": {
"displayName": "Moonshot Kimi",
"tier": "C",
"candidate": true,
"models": [],
"comment": "anticipated Phase 8+; no canonical models pinned yet"
},
"minimax": {
"displayName": "MiniMax",
"tier": "B",
"candidate": true,
"models": [],
"comment": "anticipated Phase 8+; no canonical models pinned yet"
},
"glm": {
"displayName": "Zhipu GLM",
"tier": "B",
"candidate": true,
"models": [],
"comment": "anticipated Phase 8+; no canonical models pinned yet"
},
"qwen": {
"displayName": "Alibaba Qwen",
"tier": "B",
"candidate": true,
"models": [],
"comment": "anticipated Phase 8+; no canonical models pinned yet"
}
}
}