agent-api-parity-e2e zero-budget semantic-index
Agent API parity (E2E)
Prove the API surface that agents and headless MCP tools rely on stays in step with the browser pipeline: the parity smoke spec exercises every documented op against /api/workspaces, the cutover spec walks an imported legacy workspace, the job-ad role boundary spec pins the public/role split, and the human-cooperation spec confirms agent writes do not race or shadow human edits.
Behaviours 0 Tests 45 Graph 46 nodes · 45 edges Runner - CircleCI - Source qa/suites/agent-api-parity-e2e.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 |
|---|---|---|---|
Creating a job via the REST API produces the same dashboard state as creating via the GUI — job appears on the dashboard, pipeline auto-advances identically @cv/ui · playwright · agent-api-parity.spec.ts | catalog | missing implementation link | Test |
Tailoring a job via the REST API produces a tailored_cv indistinguishable from one produced by clicking "Tailor CV" in the GUI @cv/ui · playwright · agent-api-parity.spec.ts | catalog | missing implementation link | Test |
agent queues, claims, and completes a rerun request through the shared process API @cv/ui · playwright · agent-process-observability.spec.ts | catalog | missing implementation link | Test |
presence endpoints reject unknown workspaces instead of creating orphan rows @cv/ui · playwright · agent-process-observability.spec.ts | catalog | missing implementation link | Test |
presence heartbeats resolve slugs and mirrors to the source workspace @cv/ui · playwright · agent-process-observability.spec.ts | catalog | missing implementation link | Test |
Submitting a cv_profile.replace op via REST reflects in any open human GUI tab within 2 seconds @cv/ui · playwright · api-cv-quarry-sync.spec.ts | catalog | missing implementation link | Test |
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 |
forked migrated workspace supports jobs, CVL, dashboard, and export @cv/ui · playwright · cutover-migrated-workspace.spec.ts | catalog | missing implementation link | Test |
uses an explicit migrated workspace selector contract @cv/ui · playwright · cutover-migrated-workspace.spec.ts | catalog | missing implementation link | Test |
workspace job create exposes only public job data across sub-doc and /jobs @cv/ui · playwright · job-ad-role-public-boundary.spec.ts | catalog | missing implementation link | Test |
workspace system facts reach jobcache without public id leakage @cv/ui · playwright · job-ad-role-public-boundary.spec.ts | catalog | missing implementation link | Test |
API-created job renders in the dashboard and stale status-only updates do not clobber fields @cv/ui · playwright · job-api-human-cooperation.spec.ts | catalog | missing implementation link | Test |
dashboard Enter on the last row creates a REST-backed integer job @cv/ui · playwright · job-api-human-cooperation.spec.ts | catalog | missing implementation link | Test |
job creation normalizes LinkedIn wrapper URLs and is idempotent by normalized URL @cv/ui · playwright · job-api-human-cooperation.spec.ts | catalog | missing implementation link | Test |
read-only mirrors reject job create, patch, and delete mutations @cv/ui · playwright · job-api-human-cooperation.spec.ts | catalog | missing implementation link | Test |