mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-09 16:02:36 +01:00
## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work. > - Agents split work into tasks. A task can have a parent task. > - Today agents can nest tasks to any depth: parent, child, grandchild, and deeper. > - Deep agent-made trees are hard to follow, and an agent that works on a child task makes grandchildren by default. > - This pull request limits agent-created trees to two levels: a top-level task and its children. > - A request for a grandchild does not fail. The server puts the new task beside the requester and tells the agent. > - Board users keep full control. They can still nest to any depth. Existing deep trees stay valid. > - The pull request also records which task created each new task, so the audit trail stays complete when the parent changes. ## Linked Issues or Issue Description No public issue exists. This is the feature description. Related: #16853 (budgets that include descendant work) also reasons about task trees; this change does not alter its traversal. **Subsystem affected** Issues (tasks): create, child create and move in the issue service and routes. Agent tools, chat suggestions and creation provenance use these paths. **Problem or motivation** Agents create subtasks as deep as they want. An agent that runs on a child task gets that child as the default parent, so its follow-ups become grandchildren. The trees become deep and hard to read. The parent link is also the only record of which task created a follow-up, so that record is lost when the parent changes. **Proposed solution** Limit agent-created trees to a parent and its children. When an agent asks for a grandchild, put the new task under the requester's parent and return `parentAdjusted`. Do not reject the request. Keep board users unrestricted. Record the originating task in a new server-set `origin_issue_id` column. Keep `origin_run_id` as the originating run. **Alternatives considered** Reject grandchild requests with an error. We did not do this, because agents then fail mid-task. Add a database constraint. We did not do this, because existing deep trees must stay valid and nesting can return later. ## What Changed - Add `MAX_AGENT_TASK_HIERARCHY_DEPTH` (2) and the `IssueParentAdjustment` type in `packages/shared`. - Add `resolveNewTaskParent` and `planIssueParentChange` in `server/src/services/issues.ts`. `create`, `createChild` and `update` use the agent limit by default (`parentDepthPolicy: "flatten"`). - The issue create, `/children` and PATCH routes pass `allow_nested` for board users. For agents, the routes check authorization against the parent that the server actually writes. - The requester keeps its behavior when the server moves a task beside it: `blockParentUntilDone` blocks the requester, and the new task inherits the requester's workspace and privacy. - The server never moves a task above a low-trust boundary root that contains the requester. - These subsystems keep any depth, because they find their work by parent: watchdog reviews, monitor recovery, email-channel placement, and routines that a person configured. - An agent move of a task that has children skips only the parent change and returns `reason: "has_children"`. - Add `issues.origin_issue_id` (nullable, `on delete set null`, indexed) in migration `0434`. Only the server sets it. The `createdFrom` detail field, the `createdFromIssueId` filter and task-creation provenance read it first. - Chat prompts now let a chat agent create one task, a task with children, or separate tasks. The conversation is never a parent. - The runner `create_task` tool accepts an optional `parentTaskId`. A chat agent can create a top-level task and then put subtasks under it. The run must be able to read and change the parent. A conversation is never a parent. The depth limit still applies. Project tools map the field to `parentId` through the issue route. The protocol manifest, semantic contracts and eval fixture are regenerated. - Watchdog runs that have an active watchdog keep their requested parent on all create paths, because their access is limited to the watched subtree. - Fix a bug that the test drive found: the chat (MCP) `create_task` ignored the requested `status`, so a `backlog` task became `todo` and started to run. It now uses the same rule as the native tool. - Update `skills/paperclip`, `doc/SPEC-implementation.md`, and add the plan `doc/plans/2026-11-05-two-level-task-hierarchy.md`. ## Verification - `cd server && npx vitest run src/__tests__/agent-task-hierarchy-depth.test.ts src/__tests__/agent-task-hierarchy-depth-routes.test.ts`: 19 new tests for service and route behavior, all pass. - Related suites (64 files: issues service, thread interactions, privacy, watchdogs, provenance, runner tool authority, decisions, routines, project tools): 1208 tests pass. Two tests changed because of the intended behavior and pass now. Two `email-channels.integration` tests fail locally because the test cannot find a bundled skill file from this worktree path. This change does not touch that code. - `packages/db`: migration safety, snapshot drift and journal tests pass. - Typecheck passes for `server`, `packages/shared`, `packages/db`, `cli` and `ui` (local `ui` errors come only from generated Storybook catalog files that are absent). - Local test drive on an isolated instance with real Claude agents: 29 of 29 use cases pass, including an agent on a child task (follow-ups placed beside it, with the notice) and a chat that creates a top-level task with three subtasks. - I did not run the full `pnpm test:run` or `pnpm build` locally. CI runs them. ## Risks - Behavior change for agents: some follow-ups that were grandchildren are now siblings. The parent of the requester is woken when all its children finish, which now includes these tasks. - The runner `create_task` input contract adds one optional field, so the protocol manifest and the pack contract change. The tool output does not change: it shows the actual `parentId`, and the activity log records `parentAdjusted`. - Migration `0434` adds a nullable column, a foreign key and an index. It does not backfill rows. - `IssueCreationSource.run` is now nullable. ## Model Used - Claude Opus 5.5 (`claude-opus-5-5`) in Claude Code, with tool use (shell, file edits, local test runs). ## 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 - [ ] All Paperclip CI gates are green - [ ] Greptile is 5/5 with no open P2s, recommendations, or follow-ups - [ ] I will address all Greptile and reviewer comments before requesting merge 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
488 lines
20 KiB
JSON
488 lines
20 KiB
JSON
{
|
|
"schema": "paperclip.prp.contract_manifest.v1",
|
|
"protocolVersion": 3,
|
|
"fixtureVersion": 1,
|
|
"generatedFrom": [
|
|
"protocol/schemas",
|
|
"protocol/fixtures"
|
|
],
|
|
"schemas": [
|
|
{
|
|
"path": "schemas/auth-credentials.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/auth-credentials.schema.json",
|
|
"sha256": "b31c8dc400eb50ef1f81f7acf2c73d2412f6c92dc408c3ee04bf346501a9b680"
|
|
},
|
|
{
|
|
"path": "schemas/capabilities-v2.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v2/capabilities.schema.json",
|
|
"sha256": "9c4771e778f20a0deab6702d0c0f2f5fbab29a60c56a5a78d9ce5290df1728cd"
|
|
},
|
|
{
|
|
"path": "schemas/capabilities-v3.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v3/capabilities.schema.json",
|
|
"sha256": "d640c0c4f8484050f8afd9cc12d040d76be0d7085f6cef18db10182e83acbf42"
|
|
},
|
|
{
|
|
"path": "schemas/capabilities.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/capabilities.schema.json",
|
|
"sha256": "e62a80328e5edde136b35463033280922ac2220575a83046b07fe034d233db88"
|
|
},
|
|
{
|
|
"path": "schemas/command-v2.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v2/command.schema.json",
|
|
"sha256": "06bb3b3b0b420119007494c64e64a736fd5d58cb68d04ced843ada00c54668be"
|
|
},
|
|
{
|
|
"path": "schemas/command-v3.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v3/command.schema.json",
|
|
"sha256": "6d910a693fba2a7ee77a0aaf0cbfdf4d20998f0b157e64da699671b296ff0769"
|
|
},
|
|
{
|
|
"path": "schemas/command.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/command.schema.json",
|
|
"sha256": "fc813e6b4d5b7e6890b496bd69848ada25dba58adbf7cf04163ca9e9bf2bcb79"
|
|
},
|
|
{
|
|
"path": "schemas/conformance-fixture.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/conformance-fixture.schema.json",
|
|
"sha256": "0febc66d128da1f251f9e932d78353a67f47ee60b7427e0a347c287bb6b7ea79"
|
|
},
|
|
{
|
|
"path": "schemas/conformance-output.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/conformance-output.schema.json",
|
|
"sha256": "96f78846dffc4a8300184751b9943214506f32ee1f393c6c0c453b666cf12d59"
|
|
},
|
|
{
|
|
"path": "schemas/event-v2.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v2/event.schema.json",
|
|
"sha256": "d7459d9fc186f142b0ea648fd116a2bee52cf7ea71001946be6e2991ccd2ed55"
|
|
},
|
|
{
|
|
"path": "schemas/event-v3.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v3/event.schema.json",
|
|
"sha256": "f600e7445e3db04eb394c2d9bb6ab85130f6944b47636372fe9f46f4f8a18939"
|
|
},
|
|
{
|
|
"path": "schemas/event.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/event.schema.json",
|
|
"sha256": "8fd8437758a6e75006a8806bd5e64558393f4d5777febf4e64fbb60c1f4b86e6"
|
|
},
|
|
{
|
|
"path": "schemas/fixture.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/fixture.schema.json",
|
|
"sha256": "65f331a3a3e3ac77189c91e30053bb036fa50fdeb9584e2afac582bc9daf5178"
|
|
},
|
|
{
|
|
"path": "schemas/identity.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/identity.schema.json",
|
|
"sha256": "8a8a1943f14c739284daa241c5189f3b8026c050472c4f9909897456da506f48"
|
|
},
|
|
{
|
|
"path": "schemas/native-execution.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/native-execution.schema.json",
|
|
"sha256": "7894a809005354c5abdf81d5333a094750c8267473cd426a2c1bcccda41e0214"
|
|
},
|
|
{
|
|
"path": "schemas/provider-descriptor.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/provider-descriptor.schema.json",
|
|
"sha256": "811e6a345fd21fa18a135dee082a5249db1f37b31a3ae098e7e25a5f9294495b"
|
|
},
|
|
{
|
|
"path": "schemas/provider-event.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/provider-event.schema.json",
|
|
"sha256": "fcb55885300fd19fdcae26a754a7a3b3ccd76f6e05251367bec4c5b88d12f6b1"
|
|
},
|
|
{
|
|
"path": "schemas/provider-failure.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/provider-failure.schema.json",
|
|
"sha256": "d8bc6a9a165d48c125aa0b2193f6dc212450156086f17ef852f93a3a4c260dd0"
|
|
},
|
|
{
|
|
"path": "schemas/question-adapter-fixture.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/question-adapter-fixture.schema.json",
|
|
"sha256": "002062abb4df9a98c92003eb4af43afbe8bdedd15d08b8697ad221fcc28ad9c7"
|
|
},
|
|
{
|
|
"path": "schemas/question-response.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/question-response.schema.json",
|
|
"sha256": "dec308b0daa4d882deb3878a1ad6ae5360f3342060f63ca636d65d1d9af1e055"
|
|
},
|
|
{
|
|
"path": "schemas/question-set.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/question-set.schema.json",
|
|
"sha256": "81dc76610e40665dbc4a42e4029296dffc597ba0bbee1fe92a130dffc0c07cba"
|
|
},
|
|
{
|
|
"path": "schemas/request.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/request.schema.json",
|
|
"sha256": "985a3b0a6ae36ae5ad4cf7d708dc401db7c108f683a81cd44a03093fc4ca7862"
|
|
},
|
|
{
|
|
"path": "schemas/result.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/result.schema.json",
|
|
"sha256": "e8004ce5539e9c6a2d6357369b7ef94bf282868b284b68bead1074b01fa8f776"
|
|
},
|
|
{
|
|
"path": "schemas/semantic-tool.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/semantic-tool.schema.json",
|
|
"sha256": "72dba6b17be1358160633e2ac430002b8be1ab311a236289a942cb05b21385da"
|
|
},
|
|
{
|
|
"path": "schemas/session-goal.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v2/session-goal.schema.json",
|
|
"sha256": "26b36add3657b42e6c3d40895a75a7b5093c70261072fa761f53f6784175320c"
|
|
},
|
|
{
|
|
"path": "schemas/stop-reason.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/stop-reason.schema.json",
|
|
"sha256": "ed0c0807904ff1198273458057e1a565e828dba499372c0c80e2c69a1d600a13"
|
|
},
|
|
{
|
|
"path": "schemas/terminal.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/terminal.schema.json",
|
|
"sha256": "e9093399ac6422e77b060269910ffaba9a3d574ed578832821e310a0582edffd"
|
|
},
|
|
{
|
|
"path": "schemas/usage.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/usage.schema.json",
|
|
"sha256": "ed06a0b50c311e7d8ac6c6fe53f0178cc37a38b65831531efb53cb35c992319f"
|
|
},
|
|
{
|
|
"path": "schemas/workspace-diff.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/workspace-diff.schema.json",
|
|
"sha256": "883f9d8e40ec6af2d41bd2998e3e1146f35aab3a63f683ffdbcabe3d4e72479b"
|
|
},
|
|
{
|
|
"path": "schemas/workspace-file-reference.schema.json",
|
|
"id": "https://paperclip.dev/schemas/prp/v1/workspace-file-reference.schema.json",
|
|
"sha256": "0ab57e76c9710f520ed9d15cc5d0f25c68176beff3aff556ad62dba9b922eb23"
|
|
}
|
|
],
|
|
"fixtures": [
|
|
{
|
|
"path": "fixtures/codex-driver/driver-conformance.json",
|
|
"sha256": "55bbd66bb0d6641a64eedfaf02bb067c65a8b51c46d76d3052eeb99343f53176",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/conformance-expected-output.json",
|
|
"sha256": "5a643639c9df0a2925ba95c5c5dfa2217605018bfa0dd3954ab4aca5fcfdc2c6",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "cross-language-output"
|
|
},
|
|
{
|
|
"path": "fixtures/conformance-minimal-run.json",
|
|
"sha256": "1e4304bcb51c3d7aa0575cf47b1ff3901700a254a60cf7432003ce9af0175e3a",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "cross-language-input"
|
|
},
|
|
{
|
|
"path": "fixtures/evals/harness-driver-conformance.json",
|
|
"sha256": "ce84eb64faa6af78e17a156cde352a951db7c108c8819a20109b732b23a5bec5",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/evals/native-execution-seeded.json",
|
|
"sha256": "304a03a28617531c395850b5f04c0108188f31a3d8617cd9d58cbb523e1b3b65",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/local-runner/scripts/duplicate-terminal.json",
|
|
"sha256": "56928a21318ea4b390c65fb34f0d3114760619d79301f4d535391a8566b693ab",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/local-runner/scripts/error.json",
|
|
"sha256": "a4c74f8a85f8ab25adb13e83ae753fcac1a9cb289bad44d49be05df8f3170edb",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/local-runner/scripts/happy-path.json",
|
|
"sha256": "ccdeef3df1e2020b692da3bd361958643f2f3d5ec6e1e0b16cca9e0d9890da2f",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/local-runner/scripts/interrupted.json",
|
|
"sha256": "36dc94dc1a67d320a48921f2ed10f0e7ab760c518eea84d5f224e1e6ab8fa57c",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/local-runner/scripts/linger.json",
|
|
"sha256": "ac6fed60bea22b22c16501c03388828ccaae6e9ec44ceb2ec0e8b145ab590bb8",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/local-runner/scripts/oversized-line.json",
|
|
"sha256": "485b03653a2e41351f155b787a406f903e018b3c29b19c4ddf2dfc7c031552b7",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/local-runner/scripts/permission-input.json",
|
|
"sha256": "9b64b78ed75006b9190c80fd88c5ab555ef458f7ad023e8ebfdac8de373e1f9c",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/provider-boundary/local-integrity.json",
|
|
"sha256": "ca3d3eaddd80320b273f48e68f7562f63b1f03152901154ace5ef26232c24f4f",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/questions/acpx.json",
|
|
"sha256": "6f1b65d5168b39f4bc821e778901bf077b1df10495f4bc1217b515eca4a339e4",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "acpx-structured-input"
|
|
},
|
|
{
|
|
"path": "fixtures/questions/codex.json",
|
|
"sha256": "a02a862b008d8327b4665bbde8ae3b73ad1f8dca7891072b0839b0e84b5920fa",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "codex-structured-input"
|
|
},
|
|
{
|
|
"path": "fixtures/questions/opencode.json",
|
|
"sha256": "7e5f753d04321f78a38a4362b2a4c7aeacbb4736d4db72a699f23c245884da72",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "opencode-structured-input"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/budget-cost-stop-reason.json",
|
|
"sha256": "94569a73860fc0e1dfde003bc3db1126f4000325b82ed0e397a805c8cea0ca85",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/duplicate-event.json",
|
|
"sha256": "ea94f163048111118ed2c81d9940196e5560455a047266cdc092f6f64e3cfaff",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/failed-run.json",
|
|
"sha256": "59281021b6ff11e4765213043580fc91eca8a02bedb3fe0c012bef9ad807da12",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/budget-cost-stop-reason.snapshot.json",
|
|
"sha256": "20de46a47b3cffdaefca0d8fab9bf67eaf94953e1ed85e5d9635f31bc9487927",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/budget-cost-stop-reason.summary.json",
|
|
"sha256": "4c5c1a2a68e38655746b81940b45b77fa74142a1d0cb80c9c8045ca4643b0d94",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/duplicate-event.snapshot.json",
|
|
"sha256": "24a6c221f9d46824128cde009b277dae2ea8672a608cf7fa2d7e4a714e38bc92",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/duplicate-event.summary.json",
|
|
"sha256": "dcbb2dae5810649cc59c6c0fe136e1033131d9510ebcbcc5f3435bfa998b95c9",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/failed-run.snapshot.json",
|
|
"sha256": "a2bb468e3ca94b092a86afb8a57d2d05e0ce3cd6e9f87927dea81aef5aa32dd1",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/failed-run.summary.json",
|
|
"sha256": "d7ac19d40b5d1d6106e2232cd2436ba1c4232bc6daa8a71957f12300ba851f65",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/happy-path.snapshot.json",
|
|
"sha256": "037c114df8f205a13fa9070b07e6f9707218b8249bd196925246b054a7690853",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/happy-path.summary.json",
|
|
"sha256": "00d2a033518c7b3f51ecb10aa64f7456922f6b3f930d853b3db35e72eaf55325",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/interrupted-run.snapshot.json",
|
|
"sha256": "dc216831c437cc8fd2c37cee6f40f342767b21e01a511f2235a443be0d0b7b0c",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/interrupted-run.summary.json",
|
|
"sha256": "753f226607b2d97301736d7f54b281ab7157397f3f32015c644787d370526332",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/semantic-tool-artifact-happy-path.snapshot.json",
|
|
"sha256": "78d61ea44793714dc652b86e0db8b2fdfd8e7f8617f03de6bd88904f51b20491",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/semantic-tool-artifact-happy-path.summary.json",
|
|
"sha256": "8b3e72e071f7458e67180fdd9933bb89cb6458f2507f2706000c1f172d1e529f",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/semantic-tool-conflict-duplicate-retry.snapshot.json",
|
|
"sha256": "c236827d1cadd5841a058c3f5ec0d6a542a4676b2ce65dee65e8435216266545",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/semantic-tool-conflict-duplicate-retry.summary.json",
|
|
"sha256": "f0b277d37c422b90d2012ad61ea5fbe214ebf1607f1a6c2419c518c4f9a52b7e",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/semantic-tool-denial-redaction.snapshot.json",
|
|
"sha256": "368678297d7763ea5d5d453afa9369e22484ecfc70de7f5769f4cbb05c372565",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/semantic-tool-denial-redaction.summary.json",
|
|
"sha256": "b0379c2ea8d30e9c2866d3737d9fdc73711de24a955364bd78b75769d925764f",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/semantic-tool-governance-wake-monitor.snapshot.json",
|
|
"sha256": "4c5f747c497d1a4a1ba1af4e7efaf3951dafc8e095f8f9816fa868dac03803f6",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/semantic-tool-governance-wake-monitor.summary.json",
|
|
"sha256": "a20a038c04e3f023f7eb478b67144fca48dd288cf484e74d66810d92debc62e5",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/semantic-tool-unknown-optional-envelope.snapshot.json",
|
|
"sha256": "27fbc947268d2b2a5a60127cd6b575a820b235bc7bce5ec7ade6a6196d4652b6",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/semantic-tool-unknown-optional-envelope.summary.json",
|
|
"sha256": "51fb686791aa158f9a23a0c2b90ca24d43bcc953add9e3277ab3f01b958fc26a",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/source-gap.snapshot.json",
|
|
"sha256": "7db7f25e423a721e60adfcdfee02db6d5e6fcd4a644ee180f5e29810ebbc0d78",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/source-gap.summary.json",
|
|
"sha256": "861d0ee3fafe13bf8bf0fb71b7c1ef9a62cb26efba4dc8db889f36d27a14a813",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/unknown-optional-fields.snapshot.json",
|
|
"sha256": "cf5b13a4b8d7ae73d1632e0539ec50d2ebcee8fbb6a2f33b28db7ff786fa90ff",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/golden/unknown-optional-fields.summary.json",
|
|
"sha256": "7d983bcad0439b7884e70d07f8070b53ed594fba2da3e8ac6998570e238e84dc",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "deterministic-replay-oracle"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/happy-path.json",
|
|
"sha256": "dfe0aeb4e7a217f8d375afe6e6d1ab0151bb8e81921b07ae0aaa6c4d0b8f8a1d",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/interrupted-run.json",
|
|
"sha256": "2056789605ffde847b3272e751226ce4be61527f6aaa4fe3f5557a621af0ad5c",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/semantic-tool-artifact-happy-path.json",
|
|
"sha256": "17e4e7ef03563e26111d028b056985c80a760bf6d45726a4e30bc09c1a43ae38",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/semantic-tool-conflict-duplicate-retry.json",
|
|
"sha256": "8298d73d1be7e54522e1947a6b029f6e58a5a41d4cc190a335ac50d2199d1a2e",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/semantic-tool-denial-redaction.json",
|
|
"sha256": "4409606c6ae1becd2708f4ff7c5ca82921901cbd0d5dfada171238b032e5343c",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/semantic-tool-governance-wake-monitor.json",
|
|
"sha256": "56f14ca3284e01894ee8ee70b26d4cdc1181d4e09362e3aa89170fb81f4537ff",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/semantic-tool-unknown-optional-envelope.json",
|
|
"sha256": "53b90800c7d49877892b4e7b0a3bde21bdda6faa55ac89a008a2ff5420e79d85",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/semantic-tool-unsupported-required-version.json",
|
|
"sha256": "ae1a1a873133f11e18f94b0005318000963e1c747dc4e85ae2dfdc08570aadfa",
|
|
"expectation": "reject",
|
|
"compatibilityCase": "unknown-required-version"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/source-gap.json",
|
|
"sha256": "d8a3eb2861e8198226360e666e5296ff5d7215f81d255a273b21d2bfe7dcc2ef",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "canonical"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/unknown-optional-fields.json",
|
|
"sha256": "4dbc4b70c299fe21791ca66949f3cb189c8f76514b62c52f5f40a489a84515c4",
|
|
"expectation": "accept",
|
|
"compatibilityCase": "additive-optional-fields"
|
|
},
|
|
{
|
|
"path": "fixtures/replay/unsupported-required-version.json",
|
|
"sha256": "b46ea580200a846a36cc48bd7e567583b1f1683e517d1053164fb56ff03667f2",
|
|
"expectation": "reject",
|
|
"compatibilityCase": "unknown-required-version"
|
|
}
|
|
]
|
|
}
|