contract-gate zero-budget semantic-index
Contract gate
Multi-actor, op envelope, lock, batch, and persistence contracts. This lane proves cross-client invariants and API/browser parity on the self-hosted runner.
Behaviours 0 Tests 49 Graph 50 nodes · 49 edges Runner corbet/unraid CircleCI browser_contracts Source qa/suites/contract-gate.yaml
Test witnesses
These tests belong to the suite. Missing implementation links stay visible until a code-backed graph claim records them.
| Test | Status | Implementation | Open |
|---|---|---|---|
GET /api/keys returns key status shape for a workspace @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
GET /api/notes returns 404 for unknown workspace @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
GET returns { notes: string } for a workspace @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
POST /api/ai-usage records a usage entry @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
PUT /api/notes returns 400 when notes field is missing @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
PUT persists and GET retrieves the saved notes (round-trip) @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
PUT with workspace_id in body (no query param) also works @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
accepts a nanoid-style job_id without 400 integer-validation error @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
chain_overrides is present (not undefined) in every job seed object @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
each iceServer entry (if any) has a urls array @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 200 with address fields for a valid workspace (graceful no-key) @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 200 with an array for a valid workspace @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 200 with entries array for group=recent @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 200 with iceServers array @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 200 with stats array for group=day @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 200 with stats array for group=function @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 200 with stats array for group=provider @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 200 with summary counter shape @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 200 with { success: false } for an obviously invalid API key @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 400 when required fields are missing @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 400 when service and apiKey are both missing @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 400 when url parameter is missing @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 400 when workspace parameter is missing @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 404 for an unknown workspace @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns 404 when workspace_id does not exist @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns { exists: false } for a URL not in the workspace @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns { exists: false } for an unknown workspace (v1 permissive behavior) @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
returns { exists: true, title } for a URL that is in the workspace @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
tailored_cl is present (not undefined) in every job seed object @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
tailored_cv is present (not undefined) in every job seed object @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
when TURN not configured, returns available=false with empty iceServers @cv/ui · playwright · api-smoke.spec.ts | catalog | missing implementation link | Test |
REST writes commit to workspace_sub_doc before best-effort realtime fanout @cv/ui · playwright · canonical-collaboration.spec.ts | catalog | missing implementation link | Test |
preserve-style job patches do not clear workspace jobs subdoc fields @cv/ui · playwright · canonical-collaboration.spec.ts | catalog | missing implementation link | Test |
server-side op path rejects secret fanout and strict pipeline maxCount violations @cv/ui · playwright · canonical-collaboration.spec.ts | catalog | missing implementation link | Test |
L1: Concurrent evaluate requests for the same job: at least one wins the lock; neither returns 5xx; any locked response has locked=true (not an error) @cv/ui · playwright · compute-lock-cycle.spec.ts | catalog | missing implementation link | Test |
L2: After first evaluate completes, lock is released and a subsequent POST succeeds (not locked) @cv/ui · playwright · compute-lock-cycle.spec.ts | catalog | missing implementation link | Test |
L3: TTL cleanup — after lock is released, acquire always wins (expired lock cleanup path is exercised) @cv/ui · playwright · compute-lock-cycle.spec.ts | catalog | missing implementation link | Test |
cv_profile + cl_profile batch advances both clocks together @cv/ui · playwright · multi-actor-primitives.spec.ts | catalog | missing implementation link | Test |
edit lands in IDB and the y-indexeddb store retains the bytes after reload @cv/ui · playwright · multi-actor-primitives.spec.ts | catalog | missing implementation link | Test |
pipeline-class write is dropped over a human title; force=true overrides @cv/ui · playwright · multi-actor-primitives.spec.ts | catalog | missing implementation link | Test |
pipeline-class write with structured actor_id shows up in the cell-origins projection @cv/ui · playwright · multi-actor-primitives.spec.ts | catalog | missing implementation link | Test |
process-request enqueue fires SSE consumer in the browser within ~5s @cv/ui · playwright · multi-actor-primitives.spec.ts | catalog | missing implementation link | Test |
second POST with same opId returns reason=duplicate and does not bump clock @cv/ui · playwright · multi-actor-primitives.spec.ts | catalog | missing implementation link | Test |
solo human on /dashboard stays WS-idle, /cvl opens WS, return to /dashboard closes WS @cv/ui · playwright · multi-actor-primitives.spec.ts | catalog | missing implementation link | Test |
two contexts typing into the same bullet merge both keystroke sets @cv/ui · playwright · multi-actor-primitives.spec.ts | catalog | missing implementation link | Test |
two actors update status_id simultaneously; all converge to one value @cv/ui · playwright · multi-actor/concurrent-status-updates-converge.spec.ts | catalog | missing implementation link | Test |
Tab A creates a job; Tab B sees the same durable state @cv/ui · playwright · multi-actor/two-tab-job-create-converges.spec.ts | catalog | missing implementation link | Test |
a cross-sub-doc batch commits all sub-ops or none @cv/ui · playwright · persistence/batch-atomicity.spec.ts | catalog | missing implementation link | Test |
fresh workspace job.create writes via /ops survive a hard browser reload @cv/ui · playwright · persistence/reload-survival.spec.ts | catalog | missing implementation link | Test |