mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-25 17:45:53 +01:00
## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work. > - The Runner gives agents tools to change company resources. > - Users need agents to save reusable skills during a task. > - A saved skill needs a visible result that users can inspect and edit. > - This pull request adds `create_skill` and a task feed card linked to Skill Studio. > - Users can open the saved skill from the task and edit the same resource. ## Linked Issues or Issue Description **Subsystem affected** Runner tools, company skill storage, task feed, and Skill Studio. **Problem or motivation** The Runner has no dedicated tool to create a company skill. A user cannot follow a creation result from the task feed to the saved skill. **Proposed solution** Add a company-scoped `create_skill` tool. Save the skill with the existing company policy. Add one creation card to the task. Open a named sidebar tab from that card. Let the user open the same skill in Skill Studio. **Alternatives considered** An agent can write a local file, but that file is not a company skill. A second document copy in the task would become stale after a Studio edit. The sidebar therefore reads the saved skill directly. **Roadmap alignment** This extends the shipped Skills Manager, Skill Studio, and Skills Store milestone. The maintainer requested and approved this scope. Search found no duplicate `create_skill` PR or issue. Related UI validation work: #8715. This PR does not change that validation display. ## What Changed - Add the real Runner tool, its contract, and its mock implementation. - Validate the complete SKILL.md and derive company, task, agent, and run identity from authentication. - Apply the existing company skill policy. Do not assign the skill to an agent. - Make keyed retries return one skill and one creation event. Reject conflicting retries. - Make concurrent file creation safe. Never replace an existing published skill during creation. - Add a creation card, a named sidebar tab, and an Open in Skill Studio action. - Show saved Studio edits when the user returns to the task. - Add storage, policy, mode, retry, UI, and Product E2E tests. Document the tool. - Fix deleted-name reuse, onboarding panel persistence, immediate feed refresh, and mock validation parity from review. - Serialize Studio file edits and renames with skill deletion and recreation. Reject stale editor requests before they can change a replacement skill. - Generate the standalone mock parser and validator from the production contract. Use portable UUIDs so the browser scenario bundle builds. ## Verification - All latest-head PR checks pass on `145dd76a5`, including all server shards, browser E2E, Runner verification, build, typecheck, and release dry run. Greptile: 5/5 with no open findings. An interrupted CI runner was retried successfully. - `pnpm -r typecheck`: passed. - `pnpm build`: passed. - `pnpm check:token-gates`: passed. - Review regressions: 73 storage tests, 6 real API tests, 63 UI tests, and 61 semantic runtime tests passed. Parser synchronization passed. - CI exposed existing fire-and-forget Sentry test races. Reproduced the resumption race locally, then synchronized the related sweep and finalizer assertions on the actual report; all 27 tests across the three affected files pass. - Runner scenario browser build and strict content-security-policy check: passed. - Runner suite: 2,012 tests passed; 10 skipped. - `pnpm test:run`: the general-server batch had 12,416 passes and two failures. The old tool-count assertion was fixed; all 16 authority tests then passed. The chat webhook test had a socket error; it passed four isolated reruns. - Both workspace test groups passed. The isolated route suites completed. Two socket failures in the initial route batches passed on individual reruns; all remaining 61 files passed. - Product E2E `create-skill-studio`: passed with local Codex and local ACPX Claude. - Manual browser test: submit a task, observe the real tool call and creation card, open the sidebar, edit in Studio, save, and return. The task reached Done. The saved second revision and sidebar tab survived a server restart. - The new companion headless Runner Eval passed. Companion coverage PR: https://github.com/paperclipai/paperclip-evals/pull/23. Daytona was not run because no immutable runner image was configured. ## Risks - Database writes and local file writes cannot share one transaction. Recovery accepts only an exact file-for-file retry after a database rollback. Conflicting files remain untouched. - The sidebar displays the current skill. The feed card remains the historical creation receipt. - No database migration, dependency, or workflow change is included. - Remote Daytona behavior still needs a run with a configured immutable image. ## Model Used OpenAI GPT-6 (`gpt-6-astra`) handled design, integration, review, and browser verification. OpenAI `gpt-5.6-luna` assisted with bounded implementation and eval work. Both used code execution and tool access. The host did not expose the 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>
3695 lines
138 KiB
JSON
3695 lines
138 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": 46,
|
|
"legacyRequirements": 106
|
|
},
|
|
"actions": [
|
|
{
|
|
"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": "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": "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": "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"
|
|
}
|
|
]
|
|
}
|