CollectiveX MVP v0.1 JIT artifact explorer / CollectiveX MVP v0.1 即时产物结果浏览器#497
CollectiveX MVP v0.1 JIT artifact explorer / CollectiveX MVP v0.1 即时产物结果浏览器#497Oseltamivir wants to merge 15 commits into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Replace the synthetic preview with server-side JIT discovery and validation of the promoted CollectiveX V1 GitHub Actions artifact. Scope channel, immutable dataset, query cache, and UI selection by benchmark version while preserving publisher-owned decisions. 中文:将合成预览替换为服务端即时发现并校验 CollectiveX V1 GitHub Actions 发布产物。Channel、不可变数据集、查询缓存与 UI 选择器均按基准版本隔离,同时继续由 publisher 独占资格判定、排名与推荐逻辑。
The backend now publishes a v1 dataset from a single qualifying run (qualification index 1) and no longer measures cross-allocation stability. Align the frontend consumer to the new emitted shape: - Drop the per-point `stability` block and the series/cohort eligibility stability fields (`stable_p50`, `stable_p99`, `p50_max_min_ratio`, `p99_max_min_ratio`) from the zod schemas, and pin `promotion.required_allocations` to 1 and `promotion.qualification_indices` to [1]. - Remove the reader's per-point qualification-evidence cross-check (the removed `stability.qualification_indices`); keep the evidence and coverage/selected-attempt invariants. - Remove stability rendering from the inventory, decision tables, display cohorts, and chart tooltip; relabel "3-run evidence" -> "Evidence" and "3/3 qualification runs" -> "1/1 qualification run". - Drop the dead `unstable-p50`, `unstable-p99`, and `awaiting-repeat-allocations` reason labels (no longer emitted). - Regenerate full-catalog.v1.json for the frozen 322-case matrix (167 runnable / 155 unsupported, 1314 points) and refresh the pinned file/matrix digests and counts in data.test.ts. - Update the fixture and reader/e2e tests to the single-allocation, no-stability shape.
…ntity
The CollectiveX release version becomes a first-class numeric identity
(1, 2, 3, ...) instead of the hardcoded string "v1", matching the backend
release marker's "version": N and the cxpublication-<N>-* artifact name.
Future releases increment the number; a version dropdown selects which one.
- types.ts: COLLECTIVEX_VERSIONS is [1] (numeric); add COLLECTIVEX_DEFAULT_VERSION
(max), collectiveXVersionLabel (`V${n}`), and parseCollectiveXVersion (strict
positive-int guard). Frozen data-format literals (collectivex.public.v1,
cx*-v1-*, collectivex_public_v1_*.ndjson) are schema-version and stay unchanged.
- SelectControl/SelectOption generalized to `string | number`; Radix Select is
string-native, so numeric option values round-trip via String() and are
recovered from the option list on change.
- route.ts validates the URL version segment through parseCollectiveXVersion
(404 on unknown) instead of a blind cast.
- reader/api/use-collectivex default to COLLECTIVEX_DEFAULT_VERSION.
- collectivex-github PUBLICATION_POLICY keyed by numeric version.
- promotion badge is version-agnostic ("Promoted"/"已发布").
Add a run picker that lists eligible (tag + success) publication runs for a release version on demand and lets the operator pin the view to any one run's promoted dataset, alongside the numeric version dropdown. - types: collectivex.runs.v1 listing schema (frozen data-format literal) and optional partial-coverage promotion fields (coverage_scope, covered_skus) - reader: parseCollectiveXRuns, fetchCollectiveXRuns, and fetchCollectiveXByDigest (content-hash-verified, promoted-only, synthesizes the channel pointer) - backend: /collectivex-data/<version>/runs.json enumerates candidates via listCollectiveXPublications with a 60s edge cache - hooks/api: useCollectiveXRuns (gated behind Load runs) + useCollectiveXRun - UI: Run control (Load runs then select), version dropdown, and an error-card fallback to the latest published channel Full and partial coverage both parse; pre-partial datasets remain valid.
…ic reasons Align the frontend consumer with the single-run publisher: - types.ts: trial_count 192 -> 64 (single allocation, 64 trials); admit 0.0 data-rate percentiles for host-staging components that spend real latency moving zero logical bytes, while keeping latency strictly positive. - test-fixture.ts: trial_count 192 -> 64 across trial diagnostics. - reader.test.ts: cover the zero-byte / zero-rate host-staging component and assert negative rate and zero latency are still rejected. - CollectiveXDisplay.tsx: in free-form diagnostics mode (no cohort pinned), surface the distinct eligibility reasons across the revealed series so a flagged series explains itself without pinning a cohort. - collectivex.cy.ts: new e2e for the per-series reason line; realign six stale assertions to the single-run shape (64 trials, 1 allocation, 8 attempts, single source bundle, no cross-allocation stability).
A promoted public dataset can legitimately carry rankings and sensitivities but zero recommendations: recommendations are unique-p99-latency-winner callouts, and when an official cohort's candidates fall within the bootstrap equivalence band the winners tie, so no recommendation is emitted. This is a routine, honest outcome for single-allocation v1 publications. The reader's recommendation-coverage check already derives 0 as the expected count in that case, but the decision-graph gate then rejected the same dataset for having an empty recommendations array — an internal contradiction. Require rankings (the decision graph) but not recommendations. Verified end-to-end against the real published v1 artifact (49 series, 66 rankings, 0 recommendations) and with a new regression test.
…lacks decision-grade coverage The landing view combined the Controlled (decision-grade only) evidence scope with the decode phase. On a partial-coverage publication — e.g. a single-run v1 where the strict within-run trial gate leaves whole SKUs diagnostic-tier — the only decision-grade decode cohorts are H100/H200, so Controlled hid every other working SKU (B200, MI300X) by default. The page appeared to have only two SKUs. Choose the landing scope per dataset: keep Controlled when the decision-grade set already covers every SKU measured at the landing phase (decode); otherwise fall back to the full-evidence (diagnostic) scope so no working SKU is hidden. The scope is re-evaluated per content digest on a version/run switch, while an in-session user toggle is preserved. Make the diagnostic scope a true full-evidence superset (all measured series, both tiers, badged by status) so decision-grade series stay visible alongside the rest and the SKU/backend/routing dropdowns run off the complete dataset. Reword the diagnostic warning accordingly. Tests: unit discriminator in data.test.ts; e2e updated for the superset line count and warning text, plus a new default-to-full-evidence case.
…facts Rework the CollectiveX frontend around the trimmed return-code-only artifact contract (collectivex.matrix.v1 / .ep.v1 / .terminal.v1). The GitHub loader assembles a run dataset at request time from the sweep's matrix + shard artifacts, newest-completed-run wins regardless of conclusion, and runs are selected by the matrix's numeric `version` field: latest/list skip runs tagged for another version and by-id 404s on a mismatch. The format tag stays collectivex.matrix.v1 as the schema id; the numeric version is the content axis the UI selects on. Rewrites the reader, data model, display/chart/inventory/tables components, API surface, route, and the vitest + cypress suites for the neutral model.
The backend dropped the promotion-era shape: no format/schema_version
strings, no eplb/activation_profile/implementation.provenance/
resource_profile, and terminal-outcome docs are gone (failed correctness
now rides in-band as a case-attempt with outcome.status: invalid).
Reader/ingest updated to the current artifacts:
- discriminate docs by record_type ('case-attempt'), not doc.format;
ignore 'samples'; identify the matrix structurally (requested_cases +
include + version)
- relax the 3 raw ingest schemas (drop format literals; make removed
fields optional) and remove the dead terminal schema
- surface non-success attempts as invalid coverage/attempts instead of
mislabeling them 'pending'
- defensive derefs + valid-safeId defaults for the dropped nested objects
De-slop: remove dead exports, an unused param, and a stale i18n key.
Frontend-internal collectivex.view.v1 / collectivex.runs.v1 unchanged.
Align the frontend with the current neutral artifact contract, remove retired diagnostics and selector systems, and keep partial sweeps and reruns visible.\n\nFix run-list cache expiry so rerun attempts refresh after the configured TTL.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit e86ffa2. Configure here.
| terminal_status: tokens > largestMeasured ? 'unsupported' : 'pending', | ||
| reason: tokens > largestMeasured ? 'backend-token-capacity' : 'not-measured', | ||
| }; | ||
| }); |
There was a problem hiding this comment.
Empty rows break coverage
Medium Severity
For a successful case shard, measuredPoints sets largestMeasured via Math.max(...rows.keys()). When measurement.rows is empty, that yields -Infinity, so every ladder token is treated as above the largest measured point and marked unsupported with backend-token-capacity instead of pending or invalid.
Reviewed by Cursor Bugbot for commit e86ffa2. Configure here.


Summary
Finalizes the
/collectivexV1 explorer around just-in-time GitHub Actions artifact retrieval. It replaces the synthetic preview and requires no attached filesystem, results server, database, or managed storage.Data boundary
cxpublication-v1-*with a server-sideGITHUB_TOKEN.Interface
Validation
git diff --checkpass.中文说明
本 PR 完成基于 GitHub Actions 产物即时读取的
/collectivexV1 浏览器。它移除了合成预览,不需要挂载文件系统、results server、数据库或 managed storage。数据边界
GITHUB_TOKEN发现最新成功的 V1 publication workflow,并且只下载cxpublication-v1-*。界面
验证
git diff --check通过。Note
Medium Risk
New server-side GitHub artifact pipeline and token dependency add operational and availability risk, but inputs are validated, size-bounded, and errors are sanitized at the API boundary.
Overview
Adds a first-class CollectiveX dashboard tab (EN +
/zh) with a D3 log-scale explorer, matrix inventory, version selector, and optional run picker over published sweep results.Data path: a new
/collectivex-data/{version}/latest.json,runs.json, andruns/{id}.jsonroute loads GitHub Actions artifacts from thecollectivex-sweepworkflow (cxsweep-matrix-*+cxshard-*ZIPs), assembles a neutral dataset viabuildDatasetFromNeutral, and maps upstream failures to 404/502/503 without leaking details. Client hooks usecache: 'no-store'; the page skips global DB filters and/api/v1/availability.Supporting changes: documents
GITHUB_TOKENas required for JIT reads; extends tab nav, sitemap, and header routing; adds vendor-prefixed chart colors; improvesSearchableSelect(Popover, keyboard nav, localized search),DataTable/legend a11y strings, and D3tickValuesfor sparse log axes.AGENTS.mdadds a temporary English-only override above existing bilingual rules.Reviewed by Cursor Bugbot for commit e86ffa2. Bugbot is set up for automated code reviews on this repo. Configure here.