Repository navigation
feat(lab): CL-05 compatibility matrix UI #1384
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
Changes from 4 commits
ceac431
38ce440
2a159b8
ddcc710
4805477
9c98a65
adf28fc
2dead29
a381a9d
716118e
8a6331c
b460adf
cdf5765
68edcd4
594492c
d717984
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| # CL-05 implementation record - Compatibility Matrix UI | ||
|
|
||
| ## Programme position | ||
|
|
||
| - **Phase:** CL-05 (read-only GUI) | ||
| - **Starting `upstream/dev` SHA:** `d517161aeaa3a974ad3c0360ff0c97b03b4c4520` (merge #1378 / CL-04) | ||
| - **Branch:** `feat/cl-05-compatibility-matrix-ui` | ||
| - **PR:** DRAFT → `lidge-jun/opencodex:dev` ([#1384](https://github.com/lidge-jun/opencodex/pull/1384)) | ||
| - **CL-06:** not started | ||
|
|
||
| ## Scope delivered | ||
|
|
||
| ### GUI (`gui/src/pages/`) | ||
|
|
||
| - **Models → Compatibility tab** at `#models/compatibility` (not a standalone sidebar page) | ||
| - Legacy `#lab` hash redirects to `#models/compatibility` | ||
| - `CompatibilityMatrix.tsx` - read-only verdict matrix over CL-04 management APIs | ||
| - `compatibility-matrix-api.ts` - paginated fetch helpers for `/api/lab/status`, `/api/lab/verdicts`, `/api/lab/subjects`, detail reads | ||
| - `compatibility-matrix-shared.ts` - DTO parsing, matrix grouping, filters | ||
| - `styles-compatibility-matrix.css` - scrollable matrix + detail pane | ||
| - i18n keys in all seven locales (`en`, `de`, `ko`, `zh`, `ru`, `ja`, `tr`) | ||
| - Component/layout tests under `gui/tests/compatibility-lab.test.tsx` | ||
|
|
||
| ### Behaviour | ||
|
|
||
| - Projection status cards (subjects, verdicts, observations, events, built-at) | ||
| - Subject × evidence-layer matrix with per-suite verdict badges | ||
| - Server-side verdict filters (layer, verdict, subjectId, suiteId) with paginated "Load more" | ||
| - Verdict detail pane (subject, observations, contributing events, artifact metadata only) | ||
| - Empty/unavailable/incompatible projection states via existing data-surface contract | ||
| - Lazy mount with `active` / `pauseWhenHidden` gating inside Models workspace | ||
| - No probe execution, projection rebuild, or evidence mutation | ||
|
|
||
| ## Validation (local) | ||
|
|
||
| - `bun x tsc --noEmit` - passed | ||
| - `bun test tests/lab-read-surfaces.test.ts tests/models-workspace-tabs.test.ts` - 33/33 passed | ||
| - `cd gui && bun test tests/compatibility-lab.test.tsx tests/models-workspace-panels.test.tsx` - 29/29 passed | ||
| - `bun run lint:gui && bun run doctor:gui && bun run build:gui && bun run privacy:scan` - passed | ||
|
coderabbitai[bot] marked this conversation as resolved.
|
||
|
|
||
| ## Acceptance blockers | ||
|
|
||
| - Draft PR requires cross-platform CI green | ||
| - GUI screenshot in PR body (or `gui-screenshot-waived` label) | ||
| - Independent acceptance review not performed | ||
|
|
||
| ## Out of scope (confirmed) | ||
|
|
||
| - CL-06 routing profile compatibility fields, CL-07 fabric, CL-08 shadow/automatic/public publish | ||
| - New management APIs or CLI changes (CL-04 read surfaces are sufficient) | ||
| - Probe execution, projection rebuild triggers, raw artifact download in GUI | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -442,9 +442,11 @@ export const ja: Record<TKey, string> = { | |
| // models | ||
| "models.tab.catalog": "モデル", | ||
| "models.tab.combos": "コンボ", | ||
| "models.tab.compatibility": "互換性", | ||
| "models.tab.routing": "ルーティング (beta)", | ||
| "models.tabsLabel": "モデルサーフェス", | ||
| "models.subtitle.combos": "複数のモデルを 1 つの id にまとめ、順に応答させます。failover は順番に試し、round-robin は負荷を分散します。", | ||
| "models.subtitle.compatibility": "ラボ投影証拠の読み取り専用互換性判定マトリクス。", | ||
| "models.subtitle.routing": "ポリシープロファイル、dry-run 評価、そして根拠の残るルーティング分析です。", | ||
| "models.subtitle": "Codex に表示するモデルを切り替えます — ネイティブ GPT パススルーとルーティングプロバイダー、プロバイダー別(ヘッダーをクリックで折りたたみ)。非表示モデルはカタログとピッカーから外れますが、正確な id での直接呼び出しは可能です。変更は次回の Codex ターンで適用 — opencodex は Codex の 5 分間モデルキャッシュを無効化するので再起動は不要です。", | ||
| "models.nativeGroupLabel": "OpenAI ネイティブ", | ||
|
|
@@ -1929,4 +1931,51 @@ export const ja: Record<TKey, string> = { | |
| "sub.delegation.modelHint": "Codex が作業を任せるとき、最初に呼ぶモデルです。上のおすすめが呼べる候補で、ここで選んだものがその中の第一候補になります。", | ||
| "dash.syncModelsHint": "接続済みのプロバイダーをもとに Codex のモデルカタログを書き直します。", | ||
| "dash.syncRun": "今すぐ同期", | ||
| "lab.title": "Compatibility Lab", | ||
| "lab.subtitle": "Read-only compatibility verdict matrix from lab projection evidence.", | ||
| "lab.loadFailed": "Could not load compatibility lab data", | ||
| "lab.projectionUnavailable": "Lab projection is not available. Run conformance or live probes first.", | ||
| "lab.projectionIncompatible": "Lab projection schema is incompatible. Rebuild the projection.", | ||
| "lab.statusTitle": "Projection status", | ||
| "lab.matrixTitle": "Compatibility matrix", | ||
| "lab.verdictsTitle": "Verdict records", | ||
| "lab.filter.layer": "Evidence layer", | ||
| "lab.filter.verdict": "Verdict", | ||
| "lab.filter.subject": "Subject ID", | ||
| "lab.filter.all": "All", | ||
| "lab.col.subject": "Subject", | ||
| "lab.col.layer": "Layer", | ||
| "lab.col.suite": "Suite", | ||
| "lab.col.verdict": "Verdict", | ||
| "lab.col.asOf": "As of", | ||
| "lab.col.protocol": "Protocol conformance", | ||
| "lab.col.live": "Live route compatibility", | ||
| "lab.col.task": "Task effectiveness", | ||
| "lab.empty": "No compatibility verdicts in the projection yet.", | ||
| "lab.subjectKind": "Kind", | ||
| "lab.observationCount": "Observations", | ||
| "lab.eventCount": "Events", | ||
| "lab.verdictCount": "Verdicts", | ||
| "lab.subjectCount": "Subjects", | ||
| "lab.builtAt": "Built", | ||
| "lab.loading": "Loading compatibility evidence…", | ||
| "lab.loadMore": "Load more", | ||
| "lab.detailTitle": "Verdict detail", | ||
| "lab.detailClose": "Close", | ||
| "lab.detailSubject": "Subject", | ||
| "lab.detailObservations": "Observations", | ||
| "lab.detailEvents": "Contributing events", | ||
| "lab.detailArtifacts": "Artifact metadata", | ||
| "lab.detailLoadFailed": "Could not load verdict detail", | ||
| "lab.refresh": "Refresh", | ||
| "lab.verdict.UNKNOWN": "Unknown", | ||
| "lab.verdict.CLAIMED": "Claimed", | ||
| "lab.verdict.PROBED": "Probed", | ||
| "lab.verdict.VERIFIED": "Verified", | ||
| "lab.verdict.DEGRADED": "Degraded", | ||
| "lab.verdict.BLOCKED": "Blocked", | ||
| "lab.verdict.UNSUPPORTED": "Unsupported", | ||
| "lab.layer.protocol_conformance": "Protocol conformance", | ||
| "lab.layer.live_route_compatibility": "Live route compatibility", | ||
| "lab.layer.task_effectiveness": "Task effectiveness", | ||
|
Comment on lines
+1934
to
+1980
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift Root cause: the new CL-05 "lab.*" i18n block was copied from
Because 📍 Affects 5 files
🤖 Prompt for AI Agents |
||
| }; | ||
Uh oh!
There was an error while loading. Please reload this page.