mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-13 04:02:28 +02:00
## Thinking Path > - Paperclip manages AI agents and their task execution. > - Agents need a durable way to return to work after a delayed check. > - The issue monitor scheduler already provides a one-shot wake for an assignee. > - Native runners reject generic execution-policy writes and had no bound monitor tool. > - Scheduling alone is insufficient because native completion also needs to accept a timed wait. > - This pull request adds an authorized monitor tool and connects it to completion and the existing scheduler. > - An agent can now schedule its next check, end the run, and resume on the same task. ## Linked Issues or Issue Description **What happened?** A native runner could not set its own task monitor. `call_api` correctly rejected execution-policy writes, while `schedule_wake` had no production binding. `paperclip_finish` also rejected monitor waits. **Expected behavior** A standard native run can set a one-shot monitor on its current task or another accessible task assigned to the same agent. After a confirmed schedule on the current task, it can yield. The scheduler later delivers `issue_monitor_due`. **Steps to reproduce** 1. Start a standard native task. 2. Ask the agent to check the task again later and end its current run. 3. Inspect available tools and try the generic issue execution-policy update. 4. Observe the missing native tool and the lifecycle-write denial. Related PRs: #14680 concerns monitor notes in the shared wake prompt. #11919 changes attempt-limit scope. This PR adds native scheduling and completion authority and retains the existing cumulative attempt bounds. It does not depend on either PR. ## What Changed - Add provider-neutral `set_task_monitor` with a default current-task target, future timestamp, required notes, existing bounds, and explicit clearing. - Check company, task visibility, ownership, runtime permissions, work mode, and active-run authority. Preserve review-only restrictions. Reject the reserved server-owned quota-recovery name before saving or accepting a native wait. - Commit the monitor, audit event, and retry receipt together. Retry receipts survive a successor run without re-arming cleared or consumed timers. - Permit `paperclip_finish` to yield to a persisted monitor. Recheck ownership and the schedule when committing final disposition. Release execution without an immediate continuation. - Preserve due monitors during native execution. Fence wake admission and consumption against replacement, clearing, reassignment, and completion. Preserve unrelated review policy. - Expose scheduled and consumed monitor instructions in task context. Update provider schemas, Rust validation, generated contracts, and execution documentation. - Add an opt-in live Codex smoke script with isolated data and explicit run/session/runner/process evidence. ## Verification - Repository `pnpm -r typecheck` and `pnpm build` passed after rebase. Server typecheck passed again after review fixes. All CI test shards pass on `3def77b1b`, including runner TypeScript/Rust, server, serialized server, workspace, and browser tests. All CI gates are green, including the canary dry run. Greptile is 5/5 on the same commit with zero unresolved threads. - The local monolithic `pnpm test:run`, started before the rebase, was interrupted after current-head CI test coverage passed. It is not counted as a standalone full-suite pass; the focused local regression suites passed. - Targeted server tests cover scheduling, replacement, clearing, policy preservation, cumulative bounds, cross-run retries, permissions, provider-neutral discovery, review restrictions, completion authority, and scheduler/finalizer races. - Runner contract/catalog/semantic tests and Rust terminal-tool tests cover the new operation and monitor completion. - Live Codex test passed twice (latest live run on `e0bcd63e6`) in a temporary database and workspace, with a 300,000 ms warm window. First run `67bd7709-c089-4d4a-9d2b-0d6b618a34b0` yielded at `2026-10-07T13:15:03.274Z`. Second run `97c323f9-595a-4cc5-a007-db5a2fbb937c` started at `13:15:30.952Z`, received `issue_monitor_due`, and completed the same task. Exactly one monitor wake was recorded. - Both live runs used native session `7b1dd753-1c9b-4e7a-b22f-a125dbc3748c`, runner `e90d9a1b-3502-4ee3-b15e-edc024c555d4`, provider session `01a11680-6d01-70c0-9a55-db7246ed66c3`, and PID `64218` with the same process start time. This proves warm reuse for that local Codex test, not only successful scheduling. - Reproduce the paid live test with `node --import ./server/node_modules/tsx/dist/loader.mjs server/scripts/smoke-native-task-monitor.ts --run`, with the installed Codex binary on `PATH` and a valid local login. ## Risks - The scheduler now defers monitor dispatch while the task has an active native run. A stuck run still depends on the existing recovery lifecycle. - Idempotency uses the existing run ledger; no table or migration is added. - Other providers share the tested tool and completion contracts. Only Codex received a live model test. - Existing `call_api` lifecycle restrictions remain enforced. Monitor waits do not bypass task blockers, reviews, or approvals. ## Model Used OpenAI Codex, GPT-6 family, with tool use, code execution, and TypeScript/Rust editing. The session does not expose the exact deployed model ID or context-window size. ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have searched GitHub for duplicate or related PRs and linked them above - [x] I have either (a) linked existing issues with `Fixes: #` / `Closes #` / `Refs #` OR (b) described the issue in-PR following the relevant issue template - [x] I have not referenced internal/instance-local Paperclip issues or links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip` URLs) - [x] My branch name describes the change (e.g. `docs/...`, `fix/...`) and contains no internal Paperclip ticket id or instance-derived details - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [x] All Paperclip CI gates are green - [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups - [x] I will address all Greptile and reviewer comments before requesting merge --------- Co-authored-by: Paperclip <noreply@paperclip.ing>
3906 lines
148 KiB
JSON
3906 lines
148 KiB
JSON
{
|
|
"schema": "paperclip-runner/protocol-coverage/v1",
|
|
"generatedFrom": [
|
|
"spec/capability/eval-traceability.yaml",
|
|
"src/tools/capability-semantic-tool-catalog.ts",
|
|
"src/tools/capability-semantic-tool-types.ts",
|
|
"src/scenarios/scenario-plan.ts"
|
|
],
|
|
"counts": {
|
|
"actions": 57,
|
|
"legacyRequirements": 106
|
|
},
|
|
"actions": [
|
|
{
|
|
"id": "set_task_title",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:set_task_title",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::set_task_title has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:set_task_title"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::set_task_title has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "set_task_monitor",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:set_task_monitor",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::set_task_monitor has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:set_task_monitor"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::set_task_monitor has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "submit_complaint",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:submit_complaint",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::submit_complaint has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:submit_complaint"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::submit_complaint has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "submit_suggestion",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:submit_suggestion",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::submit_suggestion has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:submit_suggestion"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::submit_suggestion has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "read_agent_instructions",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:read_agent_instructions",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::read_agent_instructions has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:read_agent_instructions"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::read_agent_instructions has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "update_agent_instructions",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:update_agent_instructions",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::update_agent_instructions has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:update_agent_instructions"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::update_agent_instructions has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "get_agent_instruction_history",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:get_agent_instruction_history",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::get_agent_instruction_history has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:get_agent_instruction_history"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::get_agent_instruction_history has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "restore_agent_instructions",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:restore_agent_instructions",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::restore_agent_instructions has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:restore_agent_instructions"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::restore_agent_instructions has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "create_skill",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:create_skill",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::create_skill has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:create_skill"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::create_skill has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "update_skill",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:update_skill",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::update_skill has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:update_skill"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::update_skill has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "create_project",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:create_project",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::create_project has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:create_project"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::create_project has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_project_repositories",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:list_project_repositories",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_project_repositories has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:list_project_repositories"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_project_repositories has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "search_api",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:search_api",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::search_api has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:search_api"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::search_api has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "call_api",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:call_api",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::call_api has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:call_api"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::call_api has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "administer_company",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:administer_company",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::administer_company has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:administer_company"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::administer_company has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "answer_status_question",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:answer_status_question",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::answer_status_question has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rs-dependency-blocked-wake-01",
|
|
"rs-question-only-01",
|
|
"rs-secret-hygiene-01",
|
|
"wk-ask-mode-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:answer_status_question",
|
|
"rs-dependency-blocked-wake-01",
|
|
"rs-question-only-01",
|
|
"rs-secret-hygiene-01",
|
|
"wk-ask-mode-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::answer_status_question has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "block_task",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:block_task",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::block_task has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"bl-cancelled-not-resolved-01",
|
|
"bl-clear-01",
|
|
"bl-create-blocked-01",
|
|
"bl-firstclass-01",
|
|
"bl-read-owners-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:block_task",
|
|
"bl-cancelled-not-resolved-01",
|
|
"bl-clear-01",
|
|
"bl-create-blocked-01",
|
|
"bl-firstclass-01",
|
|
"bl-read-owners-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::block_task has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "comment_on_approval",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:comment_on_approval",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::comment_on_approval has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"ap-approval-deny-01",
|
|
"ap-approval-wake-01",
|
|
"ap-mcp-expiry-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:comment_on_approval",
|
|
"ap-approval-deny-01",
|
|
"ap-approval-wake-01",
|
|
"ap-mcp-expiry-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::comment_on_approval has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "control_workspace_service",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:control_workspace_service",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::control_workspace_service has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:control_workspace_service"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::control_workspace_service has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "create_task",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [
|
|
"mcp:paperclipCreateIssue"
|
|
],
|
|
"contractCase": "protocol-action:create_task",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::create_task has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"bl-create-blocked-01",
|
|
"ix-checkbox-result-01",
|
|
"mh-blocked-handoff-01",
|
|
"mh-children-complete-01",
|
|
"mh-subtask-tree-01",
|
|
"su-crossteam-billing-01",
|
|
"su-inherit-workspace-01",
|
|
"su-no-poll-01",
|
|
"su-parent-goal-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:create_task",
|
|
"bl-create-blocked-01",
|
|
"ix-checkbox-result-01",
|
|
"mh-blocked-handoff-01",
|
|
"mh-children-complete-01",
|
|
"mh-subtask-tree-01",
|
|
"su-crossteam-billing-01",
|
|
"su-inherit-workspace-01",
|
|
"su-no-poll-01",
|
|
"su-parent-goal-01"
|
|
],
|
|
"legacyRequirementCases": [
|
|
"su-parent-goal-01"
|
|
],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::create_task has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "decide_approval",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:decide_approval",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::decide_approval has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"ap-approval-wake-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:decide_approval",
|
|
"ap-approval-wake-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::decide_approval has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "export_company",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:export_company",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::export_company has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rf-wf-export-preview-01",
|
|
"rf-wf-invite-01",
|
|
"rf-wf-project-setup-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:export_company",
|
|
"rf-wf-export-preview-01",
|
|
"rf-wf-invite-01",
|
|
"rf-wf-project-setup-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::export_company has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "finish_task",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:finish_task",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::finish_task has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"ar-upload-before-done-01",
|
|
"st-backlog-park-01",
|
|
"st-blocked-owner-01",
|
|
"st-crossteam-cancel-01",
|
|
"st-done-comment-01",
|
|
"st-env-blocked-notdone-01",
|
|
"st-ephemeral-verify-01",
|
|
"st-handback-review-01",
|
|
"st-unverified-toolchain-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:finish_task",
|
|
"ar-upload-before-done-01",
|
|
"st-backlog-park-01",
|
|
"st-blocked-owner-01",
|
|
"st-crossteam-cancel-01",
|
|
"st-done-comment-01",
|
|
"st-env-blocked-notdone-01",
|
|
"st-ephemeral-verify-01",
|
|
"st-handback-review-01",
|
|
"st-unverified-toolchain-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::finish_task has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "generic_api_request",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:generic_api_request",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::generic_api_request has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"wk-skilltest-mode-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:generic_api_request",
|
|
"wk-skilltest-mode-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::generic_api_request has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "get_agent",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [
|
|
"mcp:paperclipGetAgent"
|
|
],
|
|
"contractCase": "protocol-action:get_agent",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::get_agent has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:get_agent"
|
|
],
|
|
"legacyRequirementCases": [
|
|
"rf-api-mgr-heartbeat-01"
|
|
],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::get_agent has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "get_approval",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:get_approval",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::get_approval has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:get_approval"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::get_approval has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "get_approval_context",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:get_approval_context",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::get_approval_context has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:get_approval_context"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::get_approval_context has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "get_task_context",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [
|
|
"mcp:paperclipMe"
|
|
],
|
|
"contractCase": "protocol-action:get_task_context",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::get_task_context has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"ap-approval-deny-01",
|
|
"ap-approval-wake-01",
|
|
"ap-board-approval-01",
|
|
"ap-mcp-expiry-01",
|
|
"ap-mcp-gate-01",
|
|
"ap-mcp-pathmissing-01",
|
|
"ar-no-done-without-upload-01",
|
|
"ar-upload-before-done-01",
|
|
"ar-workproduct-pr-01",
|
|
"ar-workproduct-wsfile-01",
|
|
"bl-cancelled-not-resolved-01",
|
|
"bl-clear-01",
|
|
"bl-create-blocked-01",
|
|
"bl-firstclass-01",
|
|
"bl-read-owners-01",
|
|
"cm-mention-structured-01",
|
|
"cm-multiline-01",
|
|
"cm-prefixed-url-01",
|
|
"cm-progress-nextaction-01",
|
|
"cm-runid-modify-01",
|
|
"cm-ticket-link-01",
|
|
"co-409-stop-01",
|
|
"co-409-stop-02",
|
|
"co-before-work-01",
|
|
"co-body-contract-01",
|
|
"co-no-status-patch-01",
|
|
"co-runid-header-01",
|
|
"dp-base-revision-01",
|
|
"dp-plan-doc-01",
|
|
"dp-plan-link-comment-01",
|
|
"er-blocked-dedup-01",
|
|
"er-budget-critical-01",
|
|
"er-close-retry-fault-01",
|
|
"er-exec-not-participant-01",
|
|
"er-exec-participant-01",
|
|
"er-mention-handoff-01",
|
|
"er-mention-noassign-01",
|
|
"er-no-unassigned-01",
|
|
"er-release-01",
|
|
"hb-context-01",
|
|
"hb-inbox-lite-01",
|
|
"hb-pick-priority-01",
|
|
"hb-scoped-wake-01",
|
|
"hb-wake-comment-01",
|
|
"ix-checkbox-01",
|
|
"ix-checkbox-result-01",
|
|
"ix-confirmation-plan-01",
|
|
"ix-continuation-01",
|
|
"ix-questions-01",
|
|
"ix-stale-target-01",
|
|
"ix-suggest-tasks-01",
|
|
"ix-superseded-comment-01",
|
|
"ix-verdicts-01",
|
|
"mh-blocked-handoff-01",
|
|
"mh-children-complete-01",
|
|
"mh-plan-confirm-01",
|
|
"mh-subtask-tree-01",
|
|
"rf-api-404-report-01",
|
|
"rf-api-cancel-obsolete-01",
|
|
"rf-api-mention-discipline-01",
|
|
"rf-api-mgr-heartbeat-01",
|
|
"rf-api-review-changes-01",
|
|
"rf-art-attachment-wp-01",
|
|
"rf-case-child-01",
|
|
"rf-case-lifecycle-link-01",
|
|
"rf-case-upsert-doc-01",
|
|
"rf-cskill-audit-01",
|
|
"rf-cskill-install-attach-01",
|
|
"rf-cskill-self-sync-01",
|
|
"rf-iws-start-url-01",
|
|
"rf-iws-target-restart-01",
|
|
"rf-routine-create-01",
|
|
"rf-routine-manual-run-01",
|
|
"rf-routine-pause-01",
|
|
"rf-routine-policy-01",
|
|
"rf-routine-webhook-01",
|
|
"rf-wf-export-preview-01",
|
|
"rf-wf-invite-01",
|
|
"rf-wf-project-setup-01",
|
|
"rs-dependency-blocked-wake-01",
|
|
"rs-question-only-01",
|
|
"rs-secret-hygiene-01",
|
|
"se-get-issue-01",
|
|
"se-q-comments-01",
|
|
"se-q-filters-01",
|
|
"se-q-topic-01",
|
|
"st-backlog-park-01",
|
|
"st-blocked-owner-01",
|
|
"st-crossteam-cancel-01",
|
|
"st-done-comment-01",
|
|
"st-env-blocked-notdone-01",
|
|
"st-ephemeral-verify-01",
|
|
"st-handback-review-01",
|
|
"st-unverified-toolchain-01",
|
|
"su-crossteam-billing-01",
|
|
"su-inherit-workspace-01",
|
|
"su-no-poll-01",
|
|
"su-parent-goal-01",
|
|
"wk-ask-mode-01",
|
|
"wk-plan-accepted-01",
|
|
"wk-plan-annotation-01",
|
|
"wk-plan-directive-01",
|
|
"wk-plan-directive-02",
|
|
"wk-recovery-processlost-01",
|
|
"wk-resume-delta-01",
|
|
"wk-skilltest-mode-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:get_task_context",
|
|
"ap-approval-deny-01",
|
|
"ap-approval-wake-01",
|
|
"ap-board-approval-01",
|
|
"ap-mcp-expiry-01",
|
|
"ap-mcp-gate-01",
|
|
"ap-mcp-pathmissing-01",
|
|
"ar-no-done-without-upload-01",
|
|
"ar-upload-before-done-01",
|
|
"ar-workproduct-pr-01",
|
|
"ar-workproduct-wsfile-01",
|
|
"bl-cancelled-not-resolved-01",
|
|
"bl-clear-01",
|
|
"bl-create-blocked-01",
|
|
"bl-firstclass-01",
|
|
"bl-read-owners-01",
|
|
"cm-mention-structured-01",
|
|
"cm-multiline-01",
|
|
"cm-prefixed-url-01",
|
|
"cm-progress-nextaction-01",
|
|
"cm-runid-modify-01",
|
|
"cm-ticket-link-01",
|
|
"co-409-stop-01",
|
|
"co-409-stop-02",
|
|
"co-before-work-01",
|
|
"co-body-contract-01",
|
|
"co-no-status-patch-01",
|
|
"co-runid-header-01",
|
|
"dp-base-revision-01",
|
|
"dp-plan-doc-01",
|
|
"dp-plan-link-comment-01",
|
|
"er-blocked-dedup-01",
|
|
"er-budget-critical-01",
|
|
"er-close-retry-fault-01",
|
|
"er-exec-not-participant-01",
|
|
"er-exec-participant-01",
|
|
"er-mention-handoff-01",
|
|
"er-mention-noassign-01",
|
|
"er-no-unassigned-01",
|
|
"er-release-01",
|
|
"hb-context-01",
|
|
"hb-inbox-lite-01",
|
|
"hb-pick-priority-01",
|
|
"hb-scoped-wake-01",
|
|
"hb-wake-comment-01",
|
|
"ix-checkbox-01",
|
|
"ix-checkbox-result-01",
|
|
"ix-confirmation-plan-01",
|
|
"ix-continuation-01",
|
|
"ix-questions-01",
|
|
"ix-stale-target-01",
|
|
"ix-suggest-tasks-01",
|
|
"ix-superseded-comment-01",
|
|
"ix-verdicts-01",
|
|
"mh-blocked-handoff-01",
|
|
"mh-children-complete-01",
|
|
"mh-plan-confirm-01",
|
|
"mh-subtask-tree-01",
|
|
"rf-api-404-report-01",
|
|
"rf-api-cancel-obsolete-01",
|
|
"rf-api-mention-discipline-01",
|
|
"rf-api-mgr-heartbeat-01",
|
|
"rf-api-review-changes-01",
|
|
"rf-art-attachment-wp-01",
|
|
"rf-case-child-01",
|
|
"rf-case-lifecycle-link-01",
|
|
"rf-case-upsert-doc-01",
|
|
"rf-cskill-audit-01",
|
|
"rf-cskill-install-attach-01",
|
|
"rf-cskill-self-sync-01",
|
|
"rf-iws-start-url-01",
|
|
"rf-iws-target-restart-01",
|
|
"rf-routine-create-01",
|
|
"rf-routine-manual-run-01",
|
|
"rf-routine-pause-01",
|
|
"rf-routine-policy-01",
|
|
"rf-routine-webhook-01",
|
|
"rf-wf-export-preview-01",
|
|
"rf-wf-invite-01",
|
|
"rf-wf-project-setup-01",
|
|
"rs-dependency-blocked-wake-01",
|
|
"rs-question-only-01",
|
|
"rs-secret-hygiene-01",
|
|
"se-get-issue-01",
|
|
"se-q-comments-01",
|
|
"se-q-filters-01",
|
|
"se-q-topic-01",
|
|
"st-backlog-park-01",
|
|
"st-blocked-owner-01",
|
|
"st-crossteam-cancel-01",
|
|
"st-done-comment-01",
|
|
"st-env-blocked-notdone-01",
|
|
"st-ephemeral-verify-01",
|
|
"st-handback-review-01",
|
|
"st-unverified-toolchain-01",
|
|
"su-crossteam-billing-01",
|
|
"su-inherit-workspace-01",
|
|
"su-no-poll-01",
|
|
"su-parent-goal-01",
|
|
"wk-ask-mode-01",
|
|
"wk-plan-accepted-01",
|
|
"wk-plan-annotation-01",
|
|
"wk-plan-directive-01",
|
|
"wk-plan-directive-02",
|
|
"wk-recovery-processlost-01",
|
|
"wk-resume-delta-01",
|
|
"wk-skilltest-mode-01"
|
|
],
|
|
"legacyRequirementCases": [
|
|
"hb-inbox-lite-01"
|
|
],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::get_task_context has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "get_task_history",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:get_task_history",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::get_task_history has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rs-dependency-blocked-wake-01",
|
|
"rs-question-only-01",
|
|
"wk-ask-mode-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:get_task_history",
|
|
"rs-dependency-blocked-wake-01",
|
|
"rs-question-only-01",
|
|
"wk-ask-mode-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::get_task_history has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "get_workspace_runtime",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:get_workspace_runtime",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::get_workspace_runtime has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rf-iws-start-url-01",
|
|
"rf-iws-target-restart-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:get_workspace_runtime",
|
|
"rf-iws-start-url-01",
|
|
"rf-iws-target-restart-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::get_workspace_runtime has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "inspect_operation_result",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:inspect_operation_result",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::inspect_operation_result has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"ix-checkbox-result-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:inspect_operation_result",
|
|
"ix-checkbox-result-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::inspect_operation_result has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_agents",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [
|
|
"mcp:paperclipListAgents"
|
|
],
|
|
"contractCase": "protocol-action:list_agents",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_agents has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rf-api-404-report-01",
|
|
"rf-api-cancel-obsolete-01",
|
|
"rf-api-mention-discipline-01",
|
|
"rf-api-mgr-heartbeat-01",
|
|
"rf-api-review-changes-01",
|
|
"se-get-issue-01",
|
|
"se-q-comments-01",
|
|
"se-q-filters-01",
|
|
"se-q-topic-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:list_agents",
|
|
"rf-api-404-report-01",
|
|
"rf-api-cancel-obsolete-01",
|
|
"rf-api-mention-discipline-01",
|
|
"rf-api-mgr-heartbeat-01",
|
|
"rf-api-review-changes-01",
|
|
"se-get-issue-01",
|
|
"se-q-comments-01",
|
|
"se-q-filters-01",
|
|
"se-q-topic-01"
|
|
],
|
|
"legacyRequirementCases": [
|
|
"rf-api-mgr-heartbeat-01"
|
|
],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_agents has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "hire_agent",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:hire_agent",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::hire_agent has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:hire_agent"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::hire_agent has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_approvals",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:list_approvals",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_approvals has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"ap-approval-deny-01",
|
|
"ap-approval-wake-01",
|
|
"ap-board-approval-01",
|
|
"ap-mcp-expiry-01",
|
|
"ap-mcp-gate-01",
|
|
"ap-mcp-pathmissing-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:list_approvals",
|
|
"ap-approval-deny-01",
|
|
"ap-approval-wake-01",
|
|
"ap-board-approval-01",
|
|
"ap-mcp-expiry-01",
|
|
"ap-mcp-gate-01",
|
|
"ap-mcp-pathmissing-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_approvals has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_cases",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:list_cases",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_cases has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rf-case-child-01",
|
|
"rf-case-lifecycle-link-01",
|
|
"rf-case-upsert-doc-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:list_cases",
|
|
"rf-case-child-01",
|
|
"rf-case-lifecycle-link-01",
|
|
"rf-case-upsert-doc-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_cases has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_company_skills",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:list_company_skills",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_company_skills has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rf-cskill-audit-01",
|
|
"rf-cskill-install-attach-01",
|
|
"rf-cskill-self-sync-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:list_company_skills",
|
|
"rf-cskill-audit-01",
|
|
"rf-cskill-install-attach-01",
|
|
"rf-cskill-self-sync-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_company_skills has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_document_revisions",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:list_document_revisions",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_document_revisions has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:list_document_revisions"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_document_revisions has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_documents",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:list_documents",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_documents has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"dp-base-revision-01",
|
|
"dp-plan-doc-01",
|
|
"dp-plan-link-comment-01",
|
|
"wk-plan-accepted-01",
|
|
"wk-plan-annotation-01",
|
|
"wk-plan-directive-01",
|
|
"wk-plan-directive-02",
|
|
"wk-recovery-processlost-01",
|
|
"wk-resume-delta-01",
|
|
"wk-skilltest-mode-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:list_documents",
|
|
"dp-base-revision-01",
|
|
"dp-plan-doc-01",
|
|
"dp-plan-link-comment-01",
|
|
"wk-plan-accepted-01",
|
|
"wk-plan-annotation-01",
|
|
"wk-plan-directive-01",
|
|
"wk-plan-directive-02",
|
|
"wk-recovery-processlost-01",
|
|
"wk-resume-delta-01",
|
|
"wk-skilltest-mode-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_documents has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_goals",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:list_goals",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_goals has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:list_goals"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_goals has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_projects",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:list_projects",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_projects has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:list_projects"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_projects has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_routines",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:list_routines",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_routines has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rf-routine-create-01",
|
|
"rf-routine-manual-run-01",
|
|
"rf-routine-pause-01",
|
|
"rf-routine-policy-01",
|
|
"rf-routine-webhook-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:list_routines",
|
|
"rf-routine-create-01",
|
|
"rf-routine-manual-run-01",
|
|
"rf-routine-pause-01",
|
|
"rf-routine-policy-01",
|
|
"rf-routine-webhook-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_routines has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "list_secret_metadata",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:list_secret_metadata",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::list_secret_metadata has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rs-secret-hygiene-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:list_secret_metadata",
|
|
"rs-secret-hygiene-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::list_secret_metadata has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "manage_routine",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:manage_routine",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::manage_routine has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:manage_routine"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::manage_routine has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "read_document",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:read_document",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::read_document has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:read_document"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::read_document has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "read_secret_value",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:read_secret_value",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::read_secret_value has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rs-secret-hygiene-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:read_secret_value",
|
|
"rs-secret-hygiene-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::read_secret_value has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "register_deliverable",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:register_deliverable",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::register_deliverable has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"ar-no-done-without-upload-01",
|
|
"ar-upload-before-done-01",
|
|
"ar-workproduct-pr-01",
|
|
"ar-workproduct-wsfile-01",
|
|
"rf-art-attachment-wp-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:register_deliverable",
|
|
"ar-no-done-without-upload-01",
|
|
"ar-upload-before-done-01",
|
|
"ar-workproduct-pr-01",
|
|
"ar-workproduct-wsfile-01",
|
|
"rf-art-attachment-wp-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::register_deliverable has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "report_progress",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [
|
|
"mcp:paperclipAddComment"
|
|
],
|
|
"contractCase": "protocol-action:report_progress",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::report_progress has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"cm-mention-structured-01",
|
|
"cm-multiline-01",
|
|
"cm-prefixed-url-01",
|
|
"cm-progress-nextaction-01",
|
|
"cm-runid-modify-01",
|
|
"cm-ticket-link-01",
|
|
"co-409-stop-01",
|
|
"co-409-stop-02",
|
|
"co-before-work-01",
|
|
"co-body-contract-01",
|
|
"co-no-status-patch-01",
|
|
"co-runid-header-01",
|
|
"er-blocked-dedup-01",
|
|
"er-budget-critical-01",
|
|
"er-close-retry-fault-01",
|
|
"er-exec-not-participant-01",
|
|
"er-exec-participant-01",
|
|
"er-mention-handoff-01",
|
|
"er-mention-noassign-01",
|
|
"er-no-unassigned-01",
|
|
"er-release-01",
|
|
"hb-context-01",
|
|
"hb-inbox-lite-01",
|
|
"hb-pick-priority-01",
|
|
"hb-scoped-wake-01",
|
|
"hb-wake-comment-01",
|
|
"mh-blocked-handoff-01",
|
|
"mh-children-complete-01",
|
|
"mh-plan-confirm-01",
|
|
"mh-subtask-tree-01",
|
|
"rf-api-404-report-01",
|
|
"rf-api-cancel-obsolete-01",
|
|
"rf-api-mention-discipline-01",
|
|
"rf-api-mgr-heartbeat-01",
|
|
"rf-api-review-changes-01",
|
|
"st-backlog-park-01",
|
|
"st-blocked-owner-01",
|
|
"st-crossteam-cancel-01",
|
|
"st-done-comment-01",
|
|
"st-env-blocked-notdone-01",
|
|
"st-ephemeral-verify-01",
|
|
"st-handback-review-01",
|
|
"st-unverified-toolchain-01",
|
|
"su-crossteam-billing-01",
|
|
"su-inherit-workspace-01",
|
|
"su-no-poll-01",
|
|
"su-parent-goal-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:report_progress",
|
|
"cm-mention-structured-01",
|
|
"cm-multiline-01",
|
|
"cm-prefixed-url-01",
|
|
"cm-progress-nextaction-01",
|
|
"cm-runid-modify-01",
|
|
"cm-ticket-link-01",
|
|
"co-409-stop-01",
|
|
"co-409-stop-02",
|
|
"co-before-work-01",
|
|
"co-body-contract-01",
|
|
"co-no-status-patch-01",
|
|
"co-runid-header-01",
|
|
"er-blocked-dedup-01",
|
|
"er-budget-critical-01",
|
|
"er-close-retry-fault-01",
|
|
"er-exec-not-participant-01",
|
|
"er-exec-participant-01",
|
|
"er-mention-handoff-01",
|
|
"er-mention-noassign-01",
|
|
"er-no-unassigned-01",
|
|
"er-release-01",
|
|
"hb-context-01",
|
|
"hb-inbox-lite-01",
|
|
"hb-pick-priority-01",
|
|
"hb-scoped-wake-01",
|
|
"hb-wake-comment-01",
|
|
"mh-blocked-handoff-01",
|
|
"mh-children-complete-01",
|
|
"mh-plan-confirm-01",
|
|
"mh-subtask-tree-01",
|
|
"rf-api-404-report-01",
|
|
"rf-api-cancel-obsolete-01",
|
|
"rf-api-mention-discipline-01",
|
|
"rf-api-mgr-heartbeat-01",
|
|
"rf-api-review-changes-01",
|
|
"st-backlog-park-01",
|
|
"st-blocked-owner-01",
|
|
"st-crossteam-cancel-01",
|
|
"st-done-comment-01",
|
|
"st-env-blocked-notdone-01",
|
|
"st-ephemeral-verify-01",
|
|
"st-handback-review-01",
|
|
"st-unverified-toolchain-01",
|
|
"su-crossteam-billing-01",
|
|
"su-inherit-workspace-01",
|
|
"su-no-poll-01",
|
|
"su-parent-goal-01"
|
|
],
|
|
"legacyRequirementCases": [
|
|
"cm-multiline-01"
|
|
],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::report_progress has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "request_approval",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:request_approval",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::request_approval has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"ap-board-approval-01",
|
|
"ap-mcp-gate-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:request_approval",
|
|
"ap-board-approval-01",
|
|
"ap-mcp-gate-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::request_approval has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "request_human_input",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:request_human_input",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::request_human_input has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"ix-checkbox-01",
|
|
"ix-confirmation-plan-01",
|
|
"ix-continuation-01",
|
|
"ix-questions-01",
|
|
"ix-stale-target-01",
|
|
"ix-suggest-tasks-01",
|
|
"ix-superseded-comment-01",
|
|
"ix-verdicts-01",
|
|
"wk-plan-directive-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:request_human_input",
|
|
"ix-checkbox-01",
|
|
"ix-confirmation-plan-01",
|
|
"ix-continuation-01",
|
|
"ix-questions-01",
|
|
"ix-stale-target-01",
|
|
"ix-suggest-tasks-01",
|
|
"ix-superseded-comment-01",
|
|
"ix-verdicts-01",
|
|
"wk-plan-directive-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::request_human_input has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "request_review",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:request_review",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::request_review has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"ap-mcp-gate-01",
|
|
"dp-plan-doc-01",
|
|
"dp-plan-link-comment-01",
|
|
"wk-plan-directive-01",
|
|
"wk-recovery-processlost-01",
|
|
"wk-resume-delta-01",
|
|
"wk-skilltest-mode-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:request_review",
|
|
"ap-mcp-gate-01",
|
|
"dp-plan-doc-01",
|
|
"dp-plan-link-comment-01",
|
|
"wk-plan-directive-01",
|
|
"wk-recovery-processlost-01",
|
|
"wk-resume-delta-01",
|
|
"wk-skilltest-mode-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::request_review has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "schedule_wake",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:schedule_wake",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::schedule_wake has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:schedule_wake"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::schedule_wake has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "search_tasks",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [
|
|
"mcp:paperclipListIssues"
|
|
],
|
|
"contractCase": "protocol-action:search_tasks",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::search_tasks has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rf-api-mgr-heartbeat-01",
|
|
"se-get-issue-01",
|
|
"se-q-comments-01",
|
|
"se-q-filters-01",
|
|
"se-q-topic-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:search_tasks",
|
|
"rf-api-mgr-heartbeat-01",
|
|
"se-get-issue-01",
|
|
"se-q-comments-01",
|
|
"se-q-filters-01",
|
|
"se-q-topic-01"
|
|
],
|
|
"legacyRequirementCases": [
|
|
"se-q-filters-01"
|
|
],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::search_tasks has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "set_dependencies",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:set_dependencies",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::set_dependencies has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"mh-subtask-tree-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:set_dependencies",
|
|
"mh-subtask-tree-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::set_dependencies has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "reassign_task",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:reassign_task",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::reassign_task has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:reassign_task"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::reassign_task has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "sync_company_skills",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:sync_company_skills",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::sync_company_skills has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [],
|
|
"deterministicCases": [
|
|
"protocol-action:sync_company_skills"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::sync_company_skills has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "upsert_case",
|
|
"ownership": "optional_agent_tool",
|
|
"surfaces": [
|
|
"scenario"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:upsert_case",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::upsert_case has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"rf-case-child-01",
|
|
"rf-case-lifecycle-link-01",
|
|
"rf-case-upsert-doc-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:upsert_case",
|
|
"rf-case-child-01",
|
|
"rf-case-lifecycle-link-01",
|
|
"rf-case-upsert-doc-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::upsert_case has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
},
|
|
{
|
|
"id": "write_document",
|
|
"ownership": "always_agent_tool",
|
|
"surfaces": [
|
|
"scenario",
|
|
"live"
|
|
],
|
|
"legacyAliases": [],
|
|
"contractCase": "protocol-action:write_document",
|
|
"contractOwner": "src/catalog/protocol-action-contracts.test.ts::write_document has a schema-valid canonical example and every declared projection",
|
|
"legacyBehavioralCases": [
|
|
"dp-base-revision-01",
|
|
"dp-plan-doc-01",
|
|
"dp-plan-link-comment-01",
|
|
"wk-plan-accepted-01",
|
|
"wk-plan-annotation-01",
|
|
"wk-plan-directive-01",
|
|
"wk-plan-directive-02",
|
|
"wk-recovery-processlost-01",
|
|
"wk-resume-delta-01",
|
|
"wk-skilltest-mode-01"
|
|
],
|
|
"deterministicCases": [
|
|
"protocol-action:write_document",
|
|
"dp-base-revision-01",
|
|
"dp-plan-doc-01",
|
|
"dp-plan-link-comment-01",
|
|
"wk-plan-accepted-01",
|
|
"wk-plan-annotation-01",
|
|
"wk-plan-directive-01",
|
|
"wk-plan-directive-02",
|
|
"wk-recovery-processlost-01",
|
|
"wk-resume-delta-01",
|
|
"wk-skilltest-mode-01"
|
|
],
|
|
"legacyRequirementCases": [],
|
|
"deterministicOwners": [
|
|
"src/catalog/protocol-action-contracts.test.ts::write_document has a schema-valid canonical example and every declared projection",
|
|
"src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
]
|
|
}
|
|
],
|
|
"discoveryGateways": [
|
|
{
|
|
"id": "discover_capabilities",
|
|
"deterministicOwners": [
|
|
"src/semantic-tools/semantic-tools.test.ts::discovers only authorized optional tools and returns trusted schemas"
|
|
]
|
|
},
|
|
{
|
|
"id": "invoke_discovered_capability",
|
|
"deterministicOwners": [
|
|
"src/control-plane/durable-prp-control-plane.test.ts; src/live/live-session.test.ts"
|
|
]
|
|
}
|
|
],
|
|
"legacyRequirements": [
|
|
{
|
|
"id": "ap-approval-deny-01",
|
|
"title": "A denied approval leaves the issue open with an explanatory comment",
|
|
"fixture": "approval-denied",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"comment_on_approval",
|
|
"get_task_context",
|
|
"list_approvals",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ap-approval-deny-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ap-approval-wake-01",
|
|
"title": "Approval wake reviews the approval, its issues, and closes what it resolves",
|
|
"fixture": "approval-approved",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"comment_on_approval",
|
|
"decide_approval",
|
|
"get_task_context",
|
|
"list_approvals",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ap-approval-wake-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ap-board-approval-01",
|
|
"title": "Spend needs a request_board_approval linked to the issue, then a waiting posture",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_approvals",
|
|
"persist_run",
|
|
"request_approval",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ap-board-approval-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ap-mcp-expiry-01",
|
|
"title": "An expired MCP approval means one fresh idempotent re-call, then in_review again",
|
|
"fixture": "mcp-approval-gate",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"comment_on_approval",
|
|
"get_task_context",
|
|
"list_approvals",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ap-mcp-expiry-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ap-mcp-gate-01",
|
|
"title": "Pending MCP tool approval means in_review posture, no retry, no done",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_approvals",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"request_approval",
|
|
"request_review",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ap-mcp-gate-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ap-mcp-pathmissing-01",
|
|
"title": "approval_path_missing means stop and reroute, not retry loops or fake dispositions",
|
|
"fixture": "mcp-approval-path-missing",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_approvals",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ap-mcp-pathmissing-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ar-no-done-without-upload-01",
|
|
"title": "Closing a task with a file deliverable implies uploading it, even unprompted",
|
|
"fixture": "deliverable-file",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"register_deliverable",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ar-no-done-without-upload-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ar-upload-before-done-01",
|
|
"title": "File deliverables are uploaded to the issue before closing it",
|
|
"fixture": "deliverable-file",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"finish_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"register_deliverable",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ar-upload-before-done-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ar-workproduct-pr-01",
|
|
"title": "An opened PR is recorded as a pull_request work product, not just a comment",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"register_deliverable",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ar-workproduct-pr-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ar-workproduct-wsfile-01",
|
|
"title": "A file staying in the execution workspace gets a workspace_file resourceRef work product",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"register_deliverable",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ar-workproduct-wsfile-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "bl-cancelled-not-resolved-01",
|
|
"title": "Cancelled blockers do not auto-resolve — remove them explicitly",
|
|
"fixture": "blocker-graph",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"block_task",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"route_wake",
|
|
"schedule_blocker_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/bl-cancelled-not-resolved-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "bl-clear-01",
|
|
"title": "Clearing blockers sends an empty array (the set is replaced wholesale)",
|
|
"fixture": "blocker-graph",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"block_task",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"route_wake",
|
|
"schedule_blocker_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/bl-clear-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "bl-create-blocked-01",
|
|
"title": "New dependent work is created blocked with blockedByIssueIds at creation time",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"block_task",
|
|
"checkout_task",
|
|
"create_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"route_wake",
|
|
"schedule_blocker_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/bl-create-blocked-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "bl-firstclass-01",
|
|
"title": "Dependencies become first-class blockedByIssueIds, not prose",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"block_task",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"route_wake",
|
|
"schedule_blocker_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/bl-firstclass-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "bl-read-owners-01",
|
|
"title": "Blocker owners are read from the issue's blockedBy field",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"block_task",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"route_wake",
|
|
"schedule_blocker_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/bl-read-owners-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "cm-mention-structured-01",
|
|
"title": "Machine-authored mentions use the structured agent:// form",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/cm-mention-structured-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "cm-multiline-01",
|
|
"title": "Multiline markdown comments keep their literal newlines",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/cm-multiline-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "cm-prefixed-url-01",
|
|
"title": "Internal links always carry the company prefix",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/cm-prefixed-url-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "cm-progress-nextaction-01",
|
|
"title": "Progress comments state what is done, what remains, and who owns the next step",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/cm-progress-nextaction-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "cm-runid-modify-01",
|
|
"title": "Comment POSTs carry the run-id audit header too",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/cm-runid-modify-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "cm-ticket-link-01",
|
|
"title": "Ticket ids in comment bodies become company-prefixed markdown links",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/cm-ticket-link-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "co-409-stop-01",
|
|
"title": "409 on checkout means stop — no retry, no assignee patch, move on",
|
|
"fixture": "checkout-conflict",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/co-409-stop-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "co-409-stop-02",
|
|
"title": "409 on checkout is terminal even when the task was requested by name",
|
|
"fixture": "checkout-conflict",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/co-409-stop-02.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "co-before-work-01",
|
|
"title": "Checkout happens before any other write on the issue",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/co-before-work-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "co-body-contract-01",
|
|
"title": "Checkout body carries agentId and expectedStatuses",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/co-body-contract-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "co-no-status-patch-01",
|
|
"title": "Enter in_progress by checkout, never by patching status",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/co-no-status-patch-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "co-runid-header-01",
|
|
"title": "Modifying calls carry the X-Paperclip-Run-Id audit header",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/co-runid-header-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "dp-base-revision-01",
|
|
"title": "Updating an existing plan fetches it first and sends its latest baseRevisionId",
|
|
"fixture": "stale-plan",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_documents",
|
|
"persist_run",
|
|
"route_wake",
|
|
"write_document"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/dp-base-revision-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "dp-plan-doc-01",
|
|
"title": "Plans go in the plan issue document, and the issue is not marked done",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_documents",
|
|
"persist_run",
|
|
"request_review",
|
|
"route_wake",
|
|
"write_document"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/dp-plan-doc-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "dp-plan-link-comment-01",
|
|
"title": "Comments about a plan deep-link the plan document",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_documents",
|
|
"persist_run",
|
|
"request_review",
|
|
"route_wake",
|
|
"write_document"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/dp-plan-link-comment-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "er-blocked-dedup-01",
|
|
"title": "Blocked task with no new context gets no re-comment and no checkout",
|
|
"fixture": "blocked-dedup",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/er-blocked-dedup-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "er-budget-critical-01",
|
|
"title": "Above 80% budget usage, pick the critical task over the medium one",
|
|
"fixture": "budget-critical",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"enforce_budget",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/er-budget-critical-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "er-close-retry-fault-01",
|
|
"title": "C1 probe — closing PATCH survives two injected faults and keeps resending",
|
|
"fixture": "patch-fault-close",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/er-close-retry-fault-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "er-exec-not-participant-01",
|
|
"title": "Non-participants never try to advance an execution stage",
|
|
"fixture": "exec-not-participant",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/er-exec-not-participant-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "er-exec-participant-01",
|
|
"title": "Execution-policy reviewer approves via the normal PATCH with status done",
|
|
"fixture": "exec-participant",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/er-exec-participant-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "er-mention-handoff-01",
|
|
"title": "Explicit mention handoff self-assigns via checkout, never by patching assignee",
|
|
"fixture": "mention-directive",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/er-mention-handoff-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "er-mention-noassign-01",
|
|
"title": "FYI mentions never trigger self-assignment",
|
|
"fixture": "mention-fyi",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/er-mention-noassign-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "er-no-unassigned-01",
|
|
"title": "Empty inbox means exit — never adopt unassigned work",
|
|
"fixture": "empty-inbox",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/er-no-unassigned-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "er-release-01",
|
|
"title": "Handing a task back uses the release route, not cancel or assignee edits",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/er-release-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "hb-context-01",
|
|
"title": "Prefer the compact heartbeat-context route before replaying the thread",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/hb-context-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "hb-inbox-lite-01",
|
|
"title": "Normal heartbeat starts from the compact inbox, not a raw issue listing",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/hb-inbox-lite-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "hb-pick-priority-01",
|
|
"title": "Pick-work priority prefers in_progress and skips blocked work",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/hb-pick-priority-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "hb-scoped-wake-01",
|
|
"title": "Scoped wake payload skips identity/inbox and goes straight to checkout",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"enforce_budget",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/hb-scoped-wake-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "hb-wake-comment-01",
|
|
"title": "Comment wake fetches the triggering comment first, then responds on the issue",
|
|
"fixture": "wake-comment",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/hb-wake-comment-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ix-checkbox-01",
|
|
"title": "Subset selection from a known list is a checkbox confirmation",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"request_human_input",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ix-checkbox-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ix-checkbox-result-01",
|
|
"title": "Checkbox continuation wake acts on result.selectedOptionIds only",
|
|
"fixture": "continuation-wake",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"create_task",
|
|
"get_task_context",
|
|
"inspect_operation_result",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ix-checkbox-result-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ix-confirmation-plan-01",
|
|
"title": "Plan sign-off is a request_confirmation bound to the latest revision, then in_review",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"request_human_input",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ix-confirmation-plan-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ix-continuation-01",
|
|
"title": "request_confirmation sets a wake continuation policy when work must resume",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"request_human_input",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ix-continuation-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ix-questions-01",
|
|
"title": "A short typed form of questions is ask_user_questions, not a comment",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"request_human_input",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ix-questions-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ix-stale-target-01",
|
|
"title": "A stale_target expiry means rebuild against the latest revision, fresh interaction",
|
|
"fixture": "stale-target",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"request_human_input",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ix-stale-target-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ix-suggest-tasks-01",
|
|
"title": "Proposing tasks for the board to accept uses suggest_tasks, not direct creation",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"request_human_input",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ix-suggest-tasks-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ix-superseded-comment-01",
|
|
"title": "A superseded_by_comment expiry means address the comment, then a new interaction",
|
|
"fixture": "superseded-interaction",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"request_human_input",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ix-superseded-comment-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "ix-verdicts-01",
|
|
"title": "Per-item approve/reject decisions use request_item_verdicts with reasons on reject",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"request_human_input",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/ix-verdicts-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "mh-blocked-handoff-01",
|
|
"title": "\"Multi-hop: spawn a review task and block the source on it so work auto-resumes\"",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"create_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake",
|
|
"schedule_blocker_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/mh-blocked-handoff-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "mh-children-complete-01",
|
|
"title": "\"Multi-hop: children-completed wake wraps up the parent\"",
|
|
"fixture": "children-done",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"create_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake",
|
|
"schedule_blocker_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/mh-children-complete-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "mh-plan-confirm-01",
|
|
"title": "\"Multi-hop: write plan doc, request confirmation on it, park in_review\"",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake",
|
|
"schedule_blocker_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/mh-plan-confirm-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "mh-subtask-tree-01",
|
|
"title": "\"Multi-hop: sequenced subtask tree with chained blockers\"",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"create_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake",
|
|
"schedule_blocker_wake",
|
|
"set_dependencies"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/mh-subtask-tree-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-api-404-report-01",
|
|
"title": "A 404 on an issue lookup is reported honestly, not papered over",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_agents",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-api-404-report-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-api-cancel-obsolete-01",
|
|
"title": "Obsolete work is cancelled, not marked done and not deleted",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_agents",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-api-cancel-obsolete-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-api-mention-discipline-01",
|
|
"title": "Status notes don't @-mention teammates who have nothing to act on",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_agents",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-api-mention-discipline-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-api-mgr-heartbeat-01",
|
|
"title": "Manager-style heartbeat — team roster, workload read, summary comment",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"enforce_budget",
|
|
"get_task_context",
|
|
"list_agents",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake",
|
|
"search_tasks"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-api-mgr-heartbeat-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-api-review-changes-01",
|
|
"title": "Reviewer requests changes with a non-done status and lets Paperclip reassign",
|
|
"fixture": "exec-participant",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_agents",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-api-review-changes-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-art-attachment-wp-01",
|
|
"title": "Deliverable upload is registered as a primary attachment-backed work product",
|
|
"fixture": "deliverable-file",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"register_deliverable",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-art-attachment-wp-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-case-child-01",
|
|
"title": "Bounded sub-output becomes a child case under the parent record",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_cases",
|
|
"persist_run",
|
|
"route_wake",
|
|
"upsert_case"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-case-child-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-case-lifecycle-link-01",
|
|
"title": "Move a case to in_progress and link its driving issue as reference context",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_cases",
|
|
"persist_run",
|
|
"route_wake",
|
|
"upsert_case"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-case-lifecycle-link-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-case-upsert-doc-01",
|
|
"title": "Create a retry-safe case with a stable key and write its document body",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_cases",
|
|
"persist_run",
|
|
"route_wake",
|
|
"upsert_case"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-case-upsert-doc-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-cskill-audit-01",
|
|
"title": "Library-vs-attached audit reads both the company and agent skill surfaces",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_company_skills",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-cskill-audit-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-cskill-install-attach-01",
|
|
"title": "Catalog install is followed by an agent skills sync — install ≠ attach",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_company_skills",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-cskill-install-attach-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-cskill-self-sync-01",
|
|
"title": "Skills sync replaces the whole desired set — existing skills are preserved",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_company_skills",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-cskill-self-sync-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-iws-start-url-01",
|
|
"title": "Discover the issue workspace from the issue and start its service for QA",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"get_workspace_runtime",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-iws-start-url-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-iws-target-restart-01",
|
|
"title": "Bounce a specific workspace service via a targeted selector and verify health",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"get_workspace_runtime",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-iws-target-restart-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-routine-create-01",
|
|
"title": "Create a self-assigned routine with a weekly cron schedule trigger",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_routines",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-routine-create-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-routine-manual-run-01",
|
|
"title": "Fire a routine once via the manual-run endpoint with an idempotency key",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_routines",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-routine-manual-run-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-routine-pause-01",
|
|
"title": "Pause a routine reversibly instead of archiving or deleting its trigger",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_routines",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-routine-pause-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-routine-policy-01",
|
|
"title": "Set routine concurrency and catch-up policies by their enum names",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_routines",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-routine-policy-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-routine-webhook-01",
|
|
"title": "Add an HMAC-signed webhook trigger with a bounded replay window",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_routines",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-routine-webhook-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-wf-export-preview-01",
|
|
"title": "Company export previews first, narrows with selectedFiles, keeps tasks out",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"export_company",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-wf-export-preview-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-wf-invite-01",
|
|
"title": "OpenClaw invite — generate the prompt and post it paste-ready with the ws URL",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"export_company",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-wf-invite-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rf-wf-project-setup-01",
|
|
"title": "New project with a repo-only workspace (repoUrl, no cwd)",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"export_company",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rf-wf-project-setup-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rs-dependency-blocked-wake-01",
|
|
"title": "A comment on a dependency-blocked issue is triaged, never force-unblocked",
|
|
"fixture": "dependency-blocked-wake",
|
|
"operations": [
|
|
"answer_status_question",
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"get_task_history",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rs-dependency-blocked-wake-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rs-question-only-01",
|
|
"title": "A status question gets an answer, not state changes",
|
|
"fixture": "wake-comment",
|
|
"operations": [
|
|
"answer_status_question",
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"get_task_history",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rs-question-only-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "rs-secret-hygiene-01",
|
|
"title": "The API key never appears in comment bodies, even when asked to document auth",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"answer_status_question",
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_secret_metadata",
|
|
"persist_run",
|
|
"read_secret_value",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/rs-secret-hygiene-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"restraint_no_call"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "se-get-issue-01",
|
|
"title": "Direct issue fetch plus thread read to answer a history question",
|
|
"fixture": "issue-detail",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_agents",
|
|
"persist_run",
|
|
"route_wake",
|
|
"search_tasks"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/se-get-issue-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "se-q-comments-01",
|
|
"title": "Search reaches comment bodies, not just titles",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_agents",
|
|
"persist_run",
|
|
"route_wake",
|
|
"search_tasks"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/se-q-comments-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "se-q-filters-01",
|
|
"title": "Combine q with status/assignee filters",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_agents",
|
|
"persist_run",
|
|
"route_wake",
|
|
"search_tasks"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/se-q-filters-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "se-q-topic-01",
|
|
"title": "Find an issue by topic using the q search param",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_agents",
|
|
"persist_run",
|
|
"route_wake",
|
|
"search_tasks"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/se-q-topic-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "st-backlog-park-01",
|
|
"title": "Postponed work is parked in backlog, not cancelled or closed",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"finish_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/st-backlog-park-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "st-blocked-owner-01",
|
|
"title": "Blocking on another issue sets status blocked plus first-class blockedByIssueIds",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"finish_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/st-blocked-owner-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "st-crossteam-cancel-01",
|
|
"title": "Cross-team tasks are never cancelled — reassign to the manager instead",
|
|
"fixture": "crossteam",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"finish_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/st-crossteam-cancel-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "st-done-comment-01",
|
|
"title": "Closing a task is checkout, then PATCH done with an explanatory comment",
|
|
"fixture": "done-evidence",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"finish_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/st-done-comment-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "st-env-blocked-notdone-01",
|
|
"title": "Impossible deliverable (absent mount, read-only prefix, no route) ends blocked with a named owner — never done or in_review",
|
|
"fixture": "env-blocked-task",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"finish_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/st-env-blocked-notdone-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "st-ephemeral-verify-01",
|
|
"title": "Artifacts produced outside the synced workspace — the disposition PATCH must carry a persistence caveat (or relocation), never a bare done",
|
|
"fixture": "ephemeral-artifacts-task",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"finish_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/st-ephemeral-verify-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "st-handback-review-01",
|
|
"title": "Board user asking for the task back gets reassigned + in_review, not done",
|
|
"fixture": "handback-comment",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"finish_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/st-handback-review-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "st-unverified-toolchain-01",
|
|
"title": "Unrunnable mandated verification (certified toolchain unobtainable) ends blocked stating what could not be verified — no unqualified completion claim",
|
|
"fixture": "toolchain-verify-task",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"finish_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/st-unverified-toolchain-01.yaml",
|
|
"assertionClasses": [
|
|
"agent_tool_contract"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "su-crossteam-billing-01",
|
|
"title": "Cross-team delegation sets billingCode",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"create_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/su-crossteam-billing-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "su-inherit-workspace-01",
|
|
"title": "Non-child follow-up on the same code change inherits the execution workspace",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"create_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/su-inherit-workspace-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "su-no-poll-01",
|
|
"title": "Delegate long work as a child issue and rely on wakes, not polling",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"create_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/su-no-poll-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "su-parent-goal-01",
|
|
"title": "Subtasks are created with parentId and goalId set",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"create_task",
|
|
"get_task_context",
|
|
"persist_run",
|
|
"report_progress",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/su-parent-goal-01.yaml",
|
|
"assertionClasses": [
|
|
"authorization_policy"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "wk-ask-mode-01",
|
|
"title": "Ask-mode wake is answer-only — comment, no state or document writes",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"answer_status_question",
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"get_task_history",
|
|
"persist_run",
|
|
"route_wake"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/wk-ask-mode-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "wk-plan-accepted-01",
|
|
"title": "Accepted-plan continuation creates subtasks, never re-plans or re-asks",
|
|
"fixture": "continuation-wake",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_documents",
|
|
"persist_run",
|
|
"route_wake",
|
|
"write_document"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/wk-plan-accepted-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "wk-plan-annotation-01",
|
|
"title": "Plan-annotation wake revises the document and answers annotations via nested routes",
|
|
"fixture": "plan-annotations",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_documents",
|
|
"persist_run",
|
|
"route_wake",
|
|
"write_document"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/wk-plan-annotation-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "wk-plan-directive-01",
|
|
"title": "Planning-mode wake produces plan PUT, revision-bound confirmation, then in_review",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_documents",
|
|
"persist_run",
|
|
"reconcile_run",
|
|
"request_human_input",
|
|
"request_review",
|
|
"route_wake",
|
|
"write_document"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/wk-plan-directive-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "wk-plan-directive-02",
|
|
"title": "Layer probe — planning directive via wake prose only (no task-context markdown)",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_documents",
|
|
"persist_run",
|
|
"route_wake",
|
|
"write_document"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/wk-plan-directive-02.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "wk-recovery-processlost-01",
|
|
"title": "Process-lost recovery verifies durable progress first and never redoes posted work",
|
|
"fixture": "recovery-processlost",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_documents",
|
|
"persist_run",
|
|
"request_review",
|
|
"route_wake",
|
|
"write_document"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/wk-recovery-processlost-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "wk-resume-delta-01",
|
|
"title": "Layer probe — resume delta with condensed contract only preserves close discipline",
|
|
"fixture": "baseline",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"get_task_context",
|
|
"list_documents",
|
|
"persist_run",
|
|
"request_review",
|
|
"route_wake",
|
|
"write_document"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/wk-resume-delta-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
},
|
|
{
|
|
"id": "wk-skilltest-mode-01",
|
|
"title": "Skill-test mode writes the structured result to the output document, scoped to this issue",
|
|
"fixture": "skill-test-task",
|
|
"operations": [
|
|
"append_audit_record",
|
|
"checkout_task",
|
|
"generic_api_request",
|
|
"get_task_context",
|
|
"list_documents",
|
|
"persist_run",
|
|
"request_review",
|
|
"route_wake",
|
|
"write_document"
|
|
],
|
|
"sourceAnchor": "paperclip-evals/paperclip-skill-optimization/skills/paperclip/tests/cases/wk-skilltest-mode-01.yaml",
|
|
"assertionClasses": [
|
|
"control_plane_invariant",
|
|
"combined_multi_hop"
|
|
],
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts::renders every scenario with exposure, control plane, authorization, diff, and parity"
|
|
}
|
|
],
|
|
"lifecycleRequirements": [
|
|
{
|
|
"id": "provider-round-trip",
|
|
"requirement": "provider -> runnerd -> control plane -> runnerd -> provider",
|
|
"deterministicOwner": "src/live/runnerd-codex-transport.test.ts"
|
|
},
|
|
{
|
|
"id": "single-daemon",
|
|
"requirement": "one Paperclip-owned sandbox daemon and no TypeScript sandbox dispatcher",
|
|
"deterministicOwner": "src/live/runnerd-codex-transport.test.ts"
|
|
},
|
|
{
|
|
"id": "catalog-drift",
|
|
"requirement": "canonical catalog consistency and drift rejection",
|
|
"deterministicOwner": "runner/crates/runner-core/src/provider_bridge.rs::durable_session_refuses_catalog_drift"
|
|
},
|
|
{
|
|
"id": "authorization",
|
|
"requirement": "authorization denial and unknown-tool rejection",
|
|
"deterministicOwner": "runner/crates/runner-core/src/provider_bridge.rs::forwards_only_authorized_calls_and_correlates_results"
|
|
},
|
|
{
|
|
"id": "duplicates",
|
|
"requirement": "correlated duplicate and conflicting-result handling",
|
|
"deterministicOwner": "runner/crates/runner-core/src/provider_bridge.rs::rejects_unknown_tools_and_conflicting_duplicate_results"
|
|
},
|
|
{
|
|
"id": "recovery",
|
|
"requirement": "lost ACK, reconnect, runner restart, and provider-thread recovery",
|
|
"deterministicOwner": "src/control-plane/durable-prp-control-plane.test.ts; src/live/live-session.test.ts"
|
|
},
|
|
{
|
|
"id": "interrupt",
|
|
"requirement": "interruption while waiting for a tool result",
|
|
"deterministicOwner": "src/live/live-session.test.ts; src/live/clean-room-server.test.ts"
|
|
},
|
|
{
|
|
"id": "bounds",
|
|
"requirement": "bounded queues, logs, frames, and retries",
|
|
"deterministicOwner": "src/live/turn-stream.test.ts; runner/crates/runner-core/src/durable/runner.rs"
|
|
},
|
|
{
|
|
"id": "cleanup",
|
|
"requirement": "process-group cleanup with no abandoned provider",
|
|
"deterministicOwner": "runner/crates/runner-core/tests/process_supervisor.rs"
|
|
},
|
|
{
|
|
"id": "secrets",
|
|
"requirement": "secret isolation and network restrictions",
|
|
"deterministicOwner": "src/live/clean-room-server.test.ts; runner/crates/runner-core/src/durable/runner.rs"
|
|
},
|
|
{
|
|
"id": "transcript-accounting",
|
|
"requirement": "assistant transcript capture, token usage, and cost inputs",
|
|
"deterministicOwner": "src/live/live-session.test.ts; src/cli/eval-session.ts"
|
|
},
|
|
{
|
|
"id": "state-reconstruction",
|
|
"requirement": "fixture and post-run state reconstruction",
|
|
"deterministicOwner": "src/scenarios/scenario-explorer.test.ts; src/live/live-session.test.ts"
|
|
},
|
|
{
|
|
"id": "paperclip-adapter-selection",
|
|
"requirement": "paperclip_runner is selectable without changing legacy adapter behavior",
|
|
"deterministicOwner": "server/src/services/native-runtime/runtime-mode.test.ts; server/src/__tests__/heartbeat-native-runner-selection.test.ts"
|
|
},
|
|
{
|
|
"id": "real-control-plane-binding",
|
|
"requirement": "advertised runner tools re-authorize the live company, issue, agent, and run before using real Paperclip services",
|
|
"deterministicOwner": "server/src/services/native-runtime/paperclip-runner-tool-authority.test.ts; server/src/services/native-runtime/paperclip-runner-real-server.integration.test.ts"
|
|
},
|
|
{
|
|
"id": "shared-paperclip-prp-route",
|
|
"requirement": "Rust runnerd authenticates to the shared Paperclip server route and completes a real bound semantic tool call",
|
|
"deterministicOwner": "server/src/realtime/runner-prp-ws.test.ts; server/src/services/native-runtime/paperclip-runner-real-server.integration.test.ts"
|
|
},
|
|
{
|
|
"id": "real-control-plane-idempotency",
|
|
"requirement": "real service mutations are replay-safe and reject conflicting idempotency-key reuse",
|
|
"deterministicOwner": "server/src/services/native-runtime/paperclip-runner-tool-authority.test.ts"
|
|
},
|
|
{
|
|
"id": "paperclip-thread-projection",
|
|
"requirement": "committed PRP reasoning and semantic tool items render in the existing Paperclip task chat",
|
|
"deterministicOwner": "ui/src/adapters/paperclip-runner/index.test.ts; server/src/services/native-runtime/paperclip-control-plane-port.test.ts"
|
|
}
|
|
]
|
|
}
|