Agent and headless (P4 + P5)
Prove that agents and headless MCP clients integrate cleanly: writes flow through the same op envelope (actorClass="agent"), cells tint by provider on the dashboard, the human-write-protection gate rejects agent overwrites of human-set fields without force=true, cardinality is enforced on variant pools unless explicitly overridden, FIXED-tier nodes are never modified by the LLM regardless of model behaviour, and the entire pipeline (extract → enrich → evaluate → tailor) runs through the CF Worker fallback when no browser is present. Includes the deterministic request_id contract that makes headless tailoring idempotent.
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 |
|---|---|---|---|
[agent operator] import a batch of jobs into my workspace via MCP-shaped ops @cv/ui · playwright · stories/agent/p4-g1-s1-agent-imports-batch.spec.ts | catalog | missing implementation link | Test |
[agent operator] avoid creating two job rows when I retry the same URL @cv/ui · playwright · stories/agent/p4-g1-s2-agent-imports-duplicate-url.spec.ts | catalog | missing implementation link | Test |
[agent operator] avoid double-row when two agents paste the same URL at the same time @cv/ui · playwright · stories/agent/p4-g1-s3-two-agents-race-same-url.spec.ts | catalog | missing implementation link | Test |
[agent operator] see my agent's presence next to my collaborator's in the workspace UI @cv/ui · playwright · stories/agent/p4-g10-s1-agent-presence-alongside-human.spec.ts | catalog | missing implementation link | Test |
[agent operator] see that agent-extracted cells carry an agent-class origin @cv/ui · playwright · stories/agent/p4-g2-s1-agent-extracts-agent-tint.spec.ts | catalog | missing implementation link | Test |
[agent operator] see the agent-filled cells tinted with the provider color on the dashboard @cv/ui · playwright · stories/agent/p4-g2-s1b-cell-tint-on-dashboard.spec.ts | catalog | missing implementation link | Test |
[agent operator] have the dashboard tint evaluation cells with the agent's provider colour @cv/ui · playwright · stories/agent/p4-g3-s1-agent-evaluates-cell-origin.spec.ts | catalog | missing implementation link | Test |
[agent operator] have the server protect my collaborator's manual title edit from an agent overwrite @cv/ui · playwright · stories/agent/p4-g3-s2-human-write-protection-gate.spec.ts | catalog | missing implementation link | Test |
[agent operator] use force:true to deliberately override a human-set value @cv/ui · playwright · stories/agent/p4-g3-s3-force-true-bypasses-gate.spec.ts | catalog | missing implementation link | Test |
[agent operator] have my agent add CV candidates without auto-rendering them @cv/ui · playwright · stories/agent/p4-g6-s1-agent-creates-inactive-candidate.spec.ts | catalog | missing implementation link | Test |
[agent operator] queue a tailor while the user's tab is idle and have it persist on completion @cv/ui · playwright · stories/agent/p4-g6-s2-agent-tailor-while-user-idle.spec.ts | catalog | missing implementation link | Test |
[agent operator] enforce selection.maxCount when an agent overshoots without force @cv/ui · playwright · stories/agent/p4-g6-s3-cardinality-rejects-without-force.spec.ts | catalog | missing implementation link | Test |
[agent operator] use force:true to deliberately overshoot maxCount when I know what I'm doing @cv/ui · playwright · stories/agent/p4-g6-s4-force-true-overrides-cardinality.spec.ts | catalog | missing implementation link | Test |
[agent operator] delete a FIXED-tier personal-info node when asked @cv/ui · playwright · stories/agent/p4-g6-s5-agent-deletes-fixed-node.spec.ts | catalog | missing implementation link | Test |
[agent operator] have the broker reject FIXED-tier mutations from system/pipeline ops @cv/ui · playwright · stories/agent/p4-g6-s6-fixed-tier-llm-protection.spec.ts | catalog | missing implementation link | Test |
[agent operator] have my agent seed a second-language CV tree without touching en @cv/ui · playwright · stories/agent/p4-g9-s1-agent-seeds-new-language.spec.ts | catalog | missing implementation link | Test |
[agent operator] have my agent's malformed tree get rejected without corrupting state @cv/ui · playwright · stories/agent/p4-g9-s2-agent-malformed-tree-rejected.spec.ts | catalog | missing implementation link | Test |
[automated agent] headless add_job — no browser open, queue + job appear @cv/ui · playwright · stories/agent/p5-g1-s1-headless-add-job-no-browser.spec.ts | catalog | missing implementation link | Test |
[automated agent] headless extract — server fallback claims and runs without a browser @cv/ui · playwright · stories/agent/p5-g2-s1-headless-extract-server-fallback.spec.ts | catalog | missing implementation link | Test |
[automated agent] sub-2s SSE-driven wake on agent enqueue with browser leader open @cv/ui · playwright · stories/agent/p5-g2-s2-headless-with-browser-leader-sse.spec.ts | catalog | missing implementation link | Test |
[automated agent] two headless tailor calls collapse on deterministic request_id @cv/ui · playwright · stories/agent/p5-g6-s1-headless-tailor-deterministic-request-id.spec.ts | catalog | missing implementation link | Test |
[automated agent] headless tailor — server fallback handles enqueue without a browser @cv/ui · playwright · stories/agent/p5-g6-s2-headless-tailor-no-browser.spec.ts | catalog | missing implementation link | Test |
[automated agent] headless status update is visible on user's first paint @cv/ui · playwright · stories/agent/p5-g8-s1-headless-status-update-user-opens.spec.ts | catalog | missing implementation link | Test |
[mixed personas] two browsers tailor same job — one process_request, same id @cv/ui · playwright · stories/agent/x-g6-s4-two-browsers-tailor-same-job.spec.ts | catalog | missing implementation link | Test |