planr 1.10.0-alpha.9 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +11 -0
- package/CHANGELOG.md +20 -0
- package/README.md +27 -245
- package/docs/board.md +44 -0
- package/docs/cli.md +100 -0
- package/docs/concepts.md +133 -0
- package/docs/contract.md +150 -0
- package/docs/plugins/bb.md +49 -0
- package/docs/plugins/claude-code.md +84 -0
- package/docs/plugins/codex.md +77 -0
- package/docs/quickstart.md +307 -0
- package/docs/setup.md +103 -0
- package/package.json +21 -68
- package/plugin.json +12 -0
- package/skills/planr/SKILL.md +64 -0
- package/skills/planr/assets/board/fonts/LICENSE-mona-sans.txt +93 -0
- package/skills/planr/assets/board/fonts/LICENSE-monaspace.txt +93 -0
- package/skills/planr/assets/board/fonts/MonaSans-Variable.woff2 +0 -0
- package/skills/planr/assets/board/fonts/MonaspaceNeon-400.woff2 +0 -0
- package/skills/planr/assets/board/fonts/MonaspaceNeon-500.woff2 +0 -0
- package/skills/planr/assets/board/fonts/MonaspaceNeon-600.woff2 +0 -0
- package/skills/planr/assets/board/template.html +788 -0
- package/skills/planr/assets/templates/goal.md +13 -0
- package/skills/planr/assets/templates/hook.sh +4 -0
- package/skills/planr/assets/templates/in-repo.config.json +6 -0
- package/skills/planr/assets/templates/planr.config.json +6 -0
- package/skills/planr/assets/templates/tasks-README.md +14 -0
- package/skills/planr/references/format.md +88 -0
- package/skills/planr/references/work-a-goal.md +62 -0
- package/skills/planr/scripts/lib/board.mjs +39 -0
- package/skills/planr/scripts/lib/graph.mjs +345 -0
- package/skills/planr/scripts/lib/runs.mjs +127 -0
- package/skills/planr/scripts/lib/version.mjs +11 -0
- package/skills/planr/scripts/planr.mjs +386 -0
- package/docs/ARCHITECTURE.md +0 -136
- package/docs/RELEASE.md +0 -275
- package/docs/SWITCHLOOM_COMPATIBILITY.md +0 -14
- package/docs/contracts/BROWSER_HARNESS_ADAPTER_V1.md +0 -75
- package/docs/contracts/EVAL_CONTRACT_V1.md +0 -2072
- package/docs/contracts/EVIDENCE_ADAPTER_PROTOCOL_V1.md +0 -98
- package/docs/contracts/EVIDENCE_CONTRACT_V1.md +0 -382
- package/docs/contracts/GROK_INTEGRATION_V1.md +0 -139
- package/docs/contracts/LINUX_RELEASE_PORTABILITY.json +0 -9
- package/docs/contracts/PI_INTEGRATION_V1.md +0 -164
- package/docs/contracts/V1_1_DIFFERENTIATION_CONTRACT.md +0 -177
- package/docs/contracts/fixtures/evidence/v1/examples/coverage-verdict.json +0 -66
- package/docs/contracts/fixtures/evidence/v1/examples/evidence-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/examples/evidence-policy.json +0 -108
- package/docs/contracts/fixtures/evidence/v1/examples/evidence-receipt.json +0 -93
- package/docs/contracts/fixtures/evidence/v1/examples/evidence-waiver.json +0 -31
- package/docs/contracts/fixtures/evidence/v1/examples/proof-obligation.json +0 -55
- package/docs/contracts/fixtures/evidence/v1/examples/proof-preset.json +0 -19
- package/docs/contracts/fixtures/evidence/v1/examples/untrusted-evidence-proposal.json +0 -20
- package/docs/contracts/fixtures/evidence/v1/examples/verification-capability-instance.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/examples/verification-capability-manifest.json +0 -52
- package/docs/contracts/fixtures/evidence/v1/negative/aborted-zero-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/adapter-registration-missing-execution-contract.json +0 -88
- package/docs/contracts/fixtures/evidence/v1/negative/available-empty-probe-capability.json +0 -27
- package/docs/contracts/fixtures/evidence/v1/negative/blocked-coverage-with-stale-reason.json +0 -27
- package/docs/contracts/fixtures/evidence/v1/negative/empty-trust-bindings-receipt.json +0 -72
- package/docs/contracts/fixtures/evidence/v1/negative/failed-zero-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/forged-trusted-receipt.json +0 -35
- package/docs/contracts/fixtures/evidence/v1/negative/inconclusive-clean-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/inconclusive-coverage-with-blocked-reason.json +0 -27
- package/docs/contracts/fixtures/evidence/v1/negative/minimal-policy-missing-owned-inputs.json +0 -5
- package/docs/contracts/fixtures/evidence/v1/negative/mismatched-probe-execution-id-capability.json +0 -42
- package/docs/contracts/fixtures/evidence/v1/negative/passed-empty-attempt.json +0 -22
- package/docs/contracts/fixtures/evidence/v1/negative/policy-default-preset-unregistered.json +0 -102
- package/docs/contracts/fixtures/evidence/v1/negative/policy-weakening-without-waiver.json +0 -102
- package/docs/contracts/fixtures/evidence/v1/negative/process-probe-missing-output-limits.json +0 -49
- package/docs/contracts/fixtures/evidence/v1/negative/satisfied-empty-coverage-verdict.json +0 -14
- package/docs/contracts/fixtures/evidence/v1/negative/skipped-zero-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/stale-coverage-with-inconclusive-reason.json +0 -27
- package/docs/contracts/fixtures/evidence/v1/negative/timed-out-zero-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/unavailable-zero-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/unbound-waiver.json +0 -21
- package/docs/contracts/fixtures/evidence/v1/negative/unsatisfied-coverage-without-gap.json +0 -63
- package/docs/contracts/fixtures/evidence/v1/negative/waived-coverage-forbidden-gap-reason.json +0 -28
- package/docs/contracts/fixtures/evidence/v1/negative/waived-coverage-missing-waiver-id.json +0 -27
- package/docs/contracts/fixtures/evidence/v1/schemas/evidence-contract-v1.schema.json +0 -2685
- package/docs/contracts/schemas/com.planr.web.dom_state.v1.schema.json +0 -30
- package/docs/documentation/CONTRACT.md +0 -164
- package/docs/documentation/COVERAGE.md +0 -98
- package/docs/documentation/INFORMATION_ARCHITECTURE.md +0 -151
- package/docs/fixtures/mcp-contract.json +0 -153
- package/npm/bin/native-launcher.js +0 -67
- package/npm/bin/planr-browser-harness-adapter.js +0 -8
- package/npm/bin/planr.js +0 -8
- package/npm/native/darwin-arm64/planr +0 -0
- package/npm/native/darwin-arm64/planr-browser-harness-adapter +0 -0
- package/npm/native/darwin-arm64/planr-host-capability-validator +0 -0
- package/npm/native/darwin-x86_64/planr +0 -0
- package/npm/native/darwin-x86_64/planr-browser-harness-adapter +0 -0
- package/npm/native/darwin-x86_64/planr-host-capability-validator +0 -0
- package/npm/native/linux-arm64/planr +0 -0
- package/npm/native/linux-arm64/planr-browser-harness-adapter +0 -0
- package/npm/native/linux-arm64/planr-host-capability-validator +0 -0
- package/npm/native/linux-x86_64/planr +0 -0
- package/npm/native/linux-x86_64/planr-browser-harness-adapter +0 -0
- package/npm/native/linux-x86_64/planr-host-capability-validator +0 -0
- package/plugins/planr/.claude-plugin/plugin.json +0 -11
- package/plugins/planr/.codex-plugin/plugin.json +0 -25
- package/plugins/planr/agents/pi/planr-reviewer.md +0 -20
- package/plugins/planr/agents/pi/planr-worker.md +0 -35
- package/plugins/planr/agents/planr-reviewer.md +0 -21
- package/plugins/planr/agents/planr-worker.md +0 -40
- package/plugins/planr/skills/planr/SKILL.md +0 -60
- package/plugins/planr/skills/planr-goal/SKILL.md +0 -52
- package/plugins/planr/skills/planr-loop/SKILL.md +0 -126
- package/plugins/planr/skills/planr-loop/agents/planr-reviewer.md +0 -21
- package/plugins/planr/skills/planr-loop/agents/planr-worker.md +0 -36
- package/plugins/planr/skills/planr-loop/references/host-dispatch.md +0 -52
- package/plugins/planr/skills/planr-loop/references/recovery-and-verification.md +0 -26
- package/plugins/planr/skills/planr-plan/SKILL.md +0 -86
- package/plugins/planr/skills/planr-review/SKILL.md +0 -55
- package/plugins/planr/skills/planr-status/SKILL.md +0 -52
- package/plugins/planr/skills/planr-summary/SKILL.md +0 -30
- package/plugins/planr/skills/planr-task-graph/SKILL.md +0 -67
- package/plugins/planr/skills/planr-verify-web/SKILL.md +0 -62
- package/plugins/planr/skills/planr-work/SKILL.md +0 -93
- package/scripts/host-capability-experiment.mjs +0 -2481
- package/scripts/host-capability-runtime/v1/schemas/host-capability-expected-manifest.schema.json +0 -377
- package/scripts/host-capability-runtime/v1/schemas/host-capability-observed-raw.schema.json +0 -439
- package/scripts/host-capability-runtime/v1/schemas/host-capability-provenance.schema.json +0 -178
- package/scripts/planr-host-capability-validator +0 -57
- /package/{LICENSE.md → LICENSE} +0 -0
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
# Pi Integration Contract v1
|
|
2
|
-
|
|
3
|
-
Status: frozen for implementation
|
|
4
|
-
|
|
5
|
-
Frozen: 2026-07-27
|
|
6
|
-
|
|
7
|
-
Upstream source probes:
|
|
8
|
-
|
|
9
|
-
- `earendil-works/pi` `main` commit
|
|
10
|
-
`a597371bda2af70372d1323d550483b5f4a0ae36` (2026-07-27).
|
|
11
|
-
- Pi release `v0.82.1` commit
|
|
12
|
-
`b4f293684bba718d59cc1157679bcf6157b3a7f5` (2026-07-27).
|
|
13
|
-
- `nicobailon/pi-subagents` `main` commit `73fb2fc` (2026-07-27).
|
|
14
|
-
|
|
15
|
-
The Pi repository currently publishes release tags ahead of the fetched
|
|
16
|
-
`main` version line, so this contract records both: `main` is the requested
|
|
17
|
-
source probe, while `v0.82.1` is the latest released runtime/API baseline.
|
|
18
|
-
|
|
19
|
-
This contract is the implementation boundary for first-class Pi support.
|
|
20
|
-
It follows Pi's native extension model instead of treating every coding agent
|
|
21
|
-
as an MCP host. Pi core deliberately ships without MCP, subagents, plan mode,
|
|
22
|
-
or permission popups. It natively discovers Agent Skills and can run their CLI
|
|
23
|
-
workflows through its built-in `bash` tool.
|
|
24
|
-
|
|
25
|
-
## Frozen artifact and discovery policy
|
|
26
|
-
|
|
27
|
-
`planr install pi` owns exactly the repository paths in the executable
|
|
28
|
-
contract below. Workflow files are copied byte-for-byte from the canonical
|
|
29
|
-
`plugins/planr/skills` sources. Pi-specific role bodies exist only because
|
|
30
|
-
`pi-subagents` frontmatter is not interchangeable with Claude/Cursor role
|
|
31
|
-
frontmatter: it uses `thinking`, explicit tool/skill inheritance controls, and
|
|
32
|
-
project agents under `.pi/agents/**/*.md`.
|
|
33
|
-
|
|
34
|
-
Pi loads `.pi/skills/` only after the repository is trusted. Interactive Pi
|
|
35
|
-
asks for trust; non-interactive `-p`, JSON, and RPC runs ignore untrusted
|
|
36
|
-
project resources by default. A headless operator who has deliberately chosen
|
|
37
|
-
to trust the repository passes `--approve` for that run. Planr never writes
|
|
38
|
-
Pi's user trust store or `.pi/settings.json`.
|
|
39
|
-
|
|
40
|
-
`pi-subagents` is optional. When installed, it discovers both Planr roles.
|
|
41
|
-
Without it, the role files are inert and the same Planr skills remain usable
|
|
42
|
-
in the parent Pi session or separate Pi processes.
|
|
43
|
-
|
|
44
|
-
```json
|
|
45
|
-
{
|
|
46
|
-
"contract_version": 1,
|
|
47
|
-
"pi_main_revision": "a597371bda2af70372d1323d550483b5f4a0ae36",
|
|
48
|
-
"pi_release": {
|
|
49
|
-
"tag": "v0.82.1",
|
|
50
|
-
"revision": "b4f293684bba718d59cc1157679bcf6157b3a7f5"
|
|
51
|
-
},
|
|
52
|
-
"pi_subagents_revision": "73fb2fc",
|
|
53
|
-
"artifacts": [
|
|
54
|
-
{"target": ".pi/agents/planr-reviewer.md", "source": "plugins/planr/agents/pi/planr-reviewer.md", "kind": "agent"},
|
|
55
|
-
{"target": ".pi/agents/planr-worker.md", "source": "plugins/planr/agents/pi/planr-worker.md", "kind": "agent"},
|
|
56
|
-
{"target": ".pi/skills/planr-goal/SKILL.md", "source": "plugins/planr/skills/planr-goal/SKILL.md", "kind": "skill"},
|
|
57
|
-
{"target": ".pi/skills/planr-loop/SKILL.md", "source": "plugins/planr/skills/planr-loop/SKILL.md", "kind": "skill"},
|
|
58
|
-
{"target": ".pi/skills/planr-loop/agents/planr-reviewer.md", "source": "plugins/planr/skills/planr-loop/agents/planr-reviewer.md", "kind": "skill_asset"},
|
|
59
|
-
{"target": ".pi/skills/planr-loop/agents/planr-worker.md", "source": "plugins/planr/skills/planr-loop/agents/planr-worker.md", "kind": "skill_asset"},
|
|
60
|
-
{"target": ".pi/skills/planr-loop/references/host-dispatch.md", "source": "plugins/planr/skills/planr-loop/references/host-dispatch.md", "kind": "skill_asset"},
|
|
61
|
-
{"target": ".pi/skills/planr-loop/references/recovery-and-verification.md", "source": "plugins/planr/skills/planr-loop/references/recovery-and-verification.md", "kind": "skill_asset"},
|
|
62
|
-
{"target": ".pi/skills/planr-plan/SKILL.md", "source": "plugins/planr/skills/planr-plan/SKILL.md", "kind": "skill"},
|
|
63
|
-
{"target": ".pi/skills/planr-review/SKILL.md", "source": "plugins/planr/skills/planr-review/SKILL.md", "kind": "skill"},
|
|
64
|
-
{"target": ".pi/skills/planr-status/SKILL.md", "source": "plugins/planr/skills/planr-status/SKILL.md", "kind": "skill"},
|
|
65
|
-
{"target": ".pi/skills/planr-summary/SKILL.md", "source": "plugins/planr/skills/planr-summary/SKILL.md", "kind": "skill"},
|
|
66
|
-
{"target": ".pi/skills/planr-task-graph/SKILL.md", "source": "plugins/planr/skills/planr-task-graph/SKILL.md", "kind": "skill"},
|
|
67
|
-
{"target": ".pi/skills/planr-verify-web/SKILL.md", "source": "plugins/planr/skills/planr-verify-web/SKILL.md", "kind": "skill"},
|
|
68
|
-
{"target": ".pi/skills/planr-work/SKILL.md", "source": "plugins/planr/skills/planr-work/SKILL.md", "kind": "skill"},
|
|
69
|
-
{"target": ".pi/skills/planr/SKILL.md", "source": "plugins/planr/skills/planr/SKILL.md", "kind": "skill"}
|
|
70
|
-
],
|
|
71
|
-
"mcp": {"supported": false, "artifacts": []},
|
|
72
|
-
"extensions": {"emitted": false, "artifacts": []},
|
|
73
|
-
"hooks": {"supported": false, "artifacts": []},
|
|
74
|
-
"settings": {"emitted": false, "artifacts": []},
|
|
75
|
-
"trust": {
|
|
76
|
-
"project_resources_require_trust": true,
|
|
77
|
-
"interactive": "Pi prompts the operator",
|
|
78
|
-
"headless": "pass --approve only after choosing to trust the repository"
|
|
79
|
-
},
|
|
80
|
-
"observed_client": {
|
|
81
|
-
"environment": "PI_CODING_AGENT",
|
|
82
|
-
"accepted_value": "true",
|
|
83
|
-
"stored_value": "pi",
|
|
84
|
-
"advisory_only": true
|
|
85
|
-
},
|
|
86
|
-
"client_all_includes_pi": false,
|
|
87
|
-
"headless": {
|
|
88
|
-
"command": "pi --approve --model <provider/model> --thinking <level> -p \"<prompt>\""
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Pi role contract
|
|
94
|
-
|
|
95
|
-
Both role files use `pi-subagents` project-agent frontmatter:
|
|
96
|
-
|
|
97
|
-
- `name` is exactly `planr-worker` or `planr-reviewer`;
|
|
98
|
-
- `systemPromptMode: replace`;
|
|
99
|
-
- `inheritProjectContext: true`;
|
|
100
|
-
- `inheritSkills: false`;
|
|
101
|
-
- `skills` names exactly `planr-work` or `planr-review`;
|
|
102
|
-
- the worker tool allowlist includes read/search, `bash`, `edit`, and `write`;
|
|
103
|
-
- the reviewer tool allowlist includes read/search and mutation-capable `bash`,
|
|
104
|
-
but omits the `edit` and `write` tools;
|
|
105
|
-
- the reviewer declares `acceptanceRole: read-only` and
|
|
106
|
-
`completionGuard: false`, so pi-subagents treats the bash-enabled validator
|
|
107
|
-
as non-implementation work without changing its tool access;
|
|
108
|
-
- no role pins `model`, `thinking`, `fallbackModels`, provider credentials, or
|
|
109
|
-
extensions.
|
|
110
|
-
|
|
111
|
-
Model and thinking selection remain external host policy. Operators can use
|
|
112
|
-
Pi or `pi-subagents` settings/overrides, while Planr records only requested and
|
|
113
|
-
observed evidence.
|
|
114
|
-
|
|
115
|
-
## Merge and overwrite policy
|
|
116
|
-
|
|
117
|
-
- Missing target: write the canonical packaged source.
|
|
118
|
-
- Existing identical content: unchanged.
|
|
119
|
-
- Existing different content: preserve without `--force`; replace only that
|
|
120
|
-
target with `--force`.
|
|
121
|
-
- `--no-mcp` and `--no-hooks` are accepted for install-command parity but
|
|
122
|
-
change no Pi path because the v1 artifact set contains neither.
|
|
123
|
-
- Dry-run enumerates the same paths the corresponding write reconciles.
|
|
124
|
-
- `project init --client pi` provisions the same skills and roles without
|
|
125
|
-
writing any other Pi artifact.
|
|
126
|
-
- `--client all` remains the legacy Codex, Claude Code, and Cursor expansion.
|
|
127
|
-
|
|
128
|
-
## Runtime observation boundary
|
|
129
|
-
|
|
130
|
-
Pi documents that commands launched by its built-in tools receive
|
|
131
|
-
`PI_CODING_AGENT=true`. Planr accepts only that exact value as advisory
|
|
132
|
-
`runs.observed_client=pi`. Other values and other ambient `PI_*` variables are
|
|
133
|
-
ignored. The marker is not authentication, authorization, proof of model,
|
|
134
|
-
proof of `pi-subagents`, or worker identity.
|
|
135
|
-
|
|
136
|
-
Pi has no Planr hook in v1. Run `planr prime` manually after startup or
|
|
137
|
-
compaction when a fresh state block is useful. Agent Skills remain the primary
|
|
138
|
-
entry point: `/skill:planr` explicitly loads the router, while natural-language
|
|
139
|
-
requests may trigger Pi's skill discovery.
|
|
140
|
-
|
|
141
|
-
## Security and CI boundary
|
|
142
|
-
|
|
143
|
-
Planr installation must not read or write:
|
|
144
|
-
|
|
145
|
-
- `~/.pi`, Pi auth files, provider keys, OAuth tokens, sessions, transcripts,
|
|
146
|
-
prompts, responses, model catalogs, package caches, or trust decisions;
|
|
147
|
-
- `.pi/settings.json`, `.pi/extensions/`, `.pi/prompts/`, or an MCP config;
|
|
148
|
-
- global `pi install`, `pi config`, package enablement, or user settings.
|
|
149
|
-
|
|
150
|
-
Release and CI workflows do not install/invoke Pi, `pi-subagents`, a provider,
|
|
151
|
-
or a live model. Deterministic tests parse the frozen contract, compile/write
|
|
152
|
-
assets into disposable repositories, and validate CLI/docs output.
|
|
153
|
-
|
|
154
|
-
## Sources
|
|
155
|
-
|
|
156
|
-
- `packages/coding-agent/README.md` at Pi `v0.82.1`: project trust, skills,
|
|
157
|
-
extensions, packages, philosophy, CLI, and `PI_CODING_AGENT`.
|
|
158
|
-
- `packages/coding-agent/docs/skills.md` at Pi `v0.82.1`.
|
|
159
|
-
- `nicobailon/pi-subagents` README at `73fb2fc`: project agent discovery,
|
|
160
|
-
prompt assembly, frontmatter, and model overrides.
|
|
161
|
-
- `nicobailon/pi-subagents` `test/unit/agent-frontmatter.test.ts` and
|
|
162
|
-
`test/unit/path-resolution.test.ts` at `73fb2fc`.
|
|
163
|
-
- https://github.com/earendil-works/pi
|
|
164
|
-
- https://github.com/nicobailon/pi-subagents
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
# V1.1 Differentiation Contract
|
|
2
|
-
|
|
3
|
-
Generated: 2026-06-09
|
|
4
|
-
|
|
5
|
-
## Purpose
|
|
6
|
-
|
|
7
|
-
This contract defines the Planr-owned V1.1 acceptance baseline. It turns the remaining product gaps into implementation-ready requirements without relying on external product names, copied command vocabulary, or hidden context.
|
|
8
|
-
|
|
9
|
-
V1.1 is complete only when Planr can prove these capabilities from its own CLI, MCP, HTTP, durable FeatureRun/ReviewGate state, docs, tests, and real consumer usage.
|
|
10
|
-
|
|
11
|
-
## Product Outcome
|
|
12
|
-
|
|
13
|
-
Planr V1.1 must feel like one coherent product:
|
|
14
|
-
|
|
15
|
-
```text
|
|
16
|
-
idea -> product plan -> build plan -> map -> pick -> work -> log -> review -> recover -> close
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
The map remains the source of truth for execution state. Markdown plans remain the source of rich product and implementation context. Review and recovery must be evidence-backed, not optimistic.
|
|
20
|
-
|
|
21
|
-
## Capability Requirements
|
|
22
|
-
|
|
23
|
-
### Graph Intelligence
|
|
24
|
-
|
|
25
|
-
- REQ-V11-GRAPH-001: `planr map lane --critical` must compute a real critical path across blocking graph edges, not just sort open items by priority.
|
|
26
|
-
- REQ-V11-GRAPH-002: `planr map pressure` must report transitive downstream impact, direct blockers, and why each item matters.
|
|
27
|
-
- REQ-V11-GRAPH-003: Map reads must detect and report cycles with enough edge detail for a user or agent to repair the graph.
|
|
28
|
-
- REQ-V11-GRAPH-004: Unlock and lookahead views must explain what becomes ready after closure, what remains blocked, and which blockers are still active.
|
|
29
|
-
- REQ-V11-GRAPH-005: Mutation previews must share one effect engine for close, cancel, insert, replan, and dependency rewires.
|
|
30
|
-
- REQ-V11-GRAPH-006: CLI, MCP, HTTP, and JSON responses must use the same graph-analysis results.
|
|
31
|
-
|
|
32
|
-
Acceptance:
|
|
33
|
-
|
|
34
|
-
- A branched fixture with deep dependencies returns the mathematically longest open blocking path.
|
|
35
|
-
- A transitive bottleneck ranks above a shallow item that only blocks one direct child.
|
|
36
|
-
- A cyclic graph is refused or diagnosed before readiness or critical-path output becomes misleading.
|
|
37
|
-
|
|
38
|
-
### Automatic Pick Recall
|
|
39
|
-
|
|
40
|
-
- REQ-V11-RECALL-001: `planr pick` and `planr_pick_item` must return a compact task-start package.
|
|
41
|
-
- REQ-V11-RECALL-002: The package must include ranked relevant project contexts, upstream logs or handoffs, linked plan references, active blockers or unlocks, ReviewGate history, and deeper-read commands.
|
|
42
|
-
- REQ-V11-RECALL-003: Recall ranking must search item title, description, linked plan metadata, contexts, logs, and review summaries.
|
|
43
|
-
- REQ-V11-RECALL-004: Pick recall must be size-bounded and avoid source file content, prompt transcripts, secret-looking values, and large artifacts by default.
|
|
44
|
-
- REQ-V11-RECALL-005: Possible file conflicts must be surfaced from recent logs, artifacts, and active picked/running work when enough path evidence exists.
|
|
45
|
-
|
|
46
|
-
Acceptance:
|
|
47
|
-
|
|
48
|
-
- A task with relevant historical decisions receives those decisions without the user running a separate search.
|
|
49
|
-
- Irrelevant contexts are omitted or ranked below relevant ones.
|
|
50
|
-
- The response remains compact enough for an agent handoff and includes deeper-read commands for full detail.
|
|
51
|
-
|
|
52
|
-
### Recovery Automation
|
|
53
|
-
|
|
54
|
-
- REQ-V11-RECOVERY-001: Planr must provide a sweeper command and API that inspect interrupted work without silently mutating by default.
|
|
55
|
-
- REQ-V11-RECOVERY-002: Timeouts must be stored on items and evaluated consistently for CLI, MCP, and HTTP flows.
|
|
56
|
-
- REQ-V11-RECOVERY-003: Retry policy must support max attempts, retry count, fixed or exponential delay, and clear terminal state when retries are exhausted.
|
|
57
|
-
- REQ-V11-RECOVERY-004: Stale picks must be reclaimable only through explicit recovery action or a documented sweeper mode.
|
|
58
|
-
- REQ-V11-RECOVERY-005: Item preconditions and postconditions must be visible in pick, trace, review, and close-preview outputs.
|
|
59
|
-
- REQ-V11-RECOVERY-006: Close preview must show unsatisfied conditions, missing evidence, open reviews, open child work, and approval blockers in one gate report.
|
|
60
|
-
|
|
61
|
-
Acceptance:
|
|
62
|
-
|
|
63
|
-
- An interrupted picked item is diagnosed, optionally released, and then picked by a later worker without duplicate ownership.
|
|
64
|
-
- A failed retryable item returns to ready only after the documented delay.
|
|
65
|
-
- A postcondition appears in review and close-preview output before the item closes.
|
|
66
|
-
|
|
67
|
-
### Durable FeatureRun Review Gates
|
|
68
|
-
|
|
69
|
-
- REQ-V11-REVIEW-001: FeatureRun settlement must create or reuse durable ReviewGates according to materiality and structured escalation policy.
|
|
70
|
-
- REQ-V11-REVIEW-002: ReviewGate attempts must record independent reviewer identity, verdict, findings, and immutable attempt history.
|
|
71
|
-
- REQ-V11-REVIEW-003: When Git evidence is available, review evidence must show scoped file changes or a clear explanation of missing diff context.
|
|
72
|
-
- REQ-V11-REVIEW-004: Findings must pause settlement, remain durable on the gate, and return the same gate to pending re-review only after explicit resolution.
|
|
73
|
-
- REQ-V11-REVIEW-005: Final product review must use exactly one accepted independent plan-scoped ReviewGate and project consistently through CLI, MCP, HTTP, audit, status, package, and trace surfaces.
|
|
74
|
-
|
|
75
|
-
Acceptance:
|
|
76
|
-
|
|
77
|
-
- A reviewer can lease a ReviewGate, inspect scoped evidence, and record either acceptance or durable findings.
|
|
78
|
-
- A maker can resolve named findings and the same gate becomes available for independent re-review.
|
|
79
|
-
- An accepted final ReviewGate makes the canonical plan audit clause pass without creating review/fix map items.
|
|
80
|
-
|
|
81
|
-
### Scoped Git And PR Review
|
|
82
|
-
|
|
83
|
-
- REQ-V11-GIT-001: Planr must detect the current Git worktree and record branch, commit, dirty state, and changed-file scope in review evidence.
|
|
84
|
-
- REQ-V11-GIT-002: Review flows must distinguish agent-owned evidence from unrelated dirty files.
|
|
85
|
-
- REQ-V11-GIT-003: Item logs and artifacts must be able to reference changed files and line-level findings without storing full source contents by default.
|
|
86
|
-
- REQ-V11-GIT-004: Optional PR URL review may be implemented when a provider can be queried safely; otherwise V1.1 must clearly document local-only behavior and future PR support.
|
|
87
|
-
- REQ-V11-GIT-005: Review output must tie findings to item id, file path, optional line, evidence source, and next action.
|
|
88
|
-
|
|
89
|
-
Acceptance:
|
|
90
|
-
|
|
91
|
-
- A dirty worktree with unrelated files does not let an agent claim broad ownership.
|
|
92
|
-
- ReviewGate attempts show which evidence was considered and which files were excluded.
|
|
93
|
-
- Durable findings and file/line annotations survive package projection.
|
|
94
|
-
|
|
95
|
-
### Distribution And Client Setup
|
|
96
|
-
|
|
97
|
-
- REQ-V11-DIST-001: README and install docs must make GitHub Release curl installation the normal user path.
|
|
98
|
-
- REQ-V11-DIST-002: Homebrew instructions must be present as soon as a tap or formula path exists; until then docs must state the release condition clearly.
|
|
99
|
-
- REQ-V11-DIST-003: Cargo and source build instructions must be maintainer/developer paths, not the primary user install story.
|
|
100
|
-
- REQ-V11-DIST-004: `planr install` or equivalent setup commands must cover Codex, Claude Code, Cursor, and generic MCP without editing global configuration unexpectedly.
|
|
101
|
-
- REQ-V11-DIST-005: `planr prompt` or an equivalent command must expose ready-to-use CLI, MCP, and HTTP instructions.
|
|
102
|
-
- REQ-V11-DIST-006: Release artifacts must have checksums and documented verification steps.
|
|
103
|
-
|
|
104
|
-
Acceptance:
|
|
105
|
-
|
|
106
|
-
- A fresh machine can install from release assets using only documented commands.
|
|
107
|
-
- A project can configure each supported client from Planr docs or CLI output.
|
|
108
|
-
- Package dry-runs show only intentional files.
|
|
109
|
-
|
|
110
|
-
### Templates And Review Packages
|
|
111
|
-
|
|
112
|
-
- REQ-V11-TEMPLATE-001: Export/import must support map items, links, plans, contexts, logs, durable ReviewGate projections, and metadata.
|
|
113
|
-
- REQ-V11-TEMPLATE-002: Templates must include package requirements metadata, Planr version, creation timestamp, source project name, and optional tags.
|
|
114
|
-
- REQ-V11-TEMPLATE-003: Import must preview what will be created or skipped before mutating existing projects.
|
|
115
|
-
- REQ-V11-TEMPLATE-004: Review packages must preserve ReviewGate attempts, findings, annotations, and file references.
|
|
116
|
-
- REQ-V11-TEMPLATE-005: Encrypted local bundle sharing may be implemented without hosted infrastructure; if not implemented in V1.1, docs must capture the accepted local-first format and explicit future scope.
|
|
117
|
-
|
|
118
|
-
Acceptance:
|
|
119
|
-
|
|
120
|
-
- A proven decomposition can be exported, imported into a fresh project, and picked without losing dependencies.
|
|
121
|
-
- Review annotations survive package export/import.
|
|
122
|
-
- Imports are idempotent or explain conflicts before mutation.
|
|
123
|
-
|
|
124
|
-
### Documentation And Public Copy
|
|
125
|
-
|
|
126
|
-
- REQ-V11-DOCS-001: README, CLI reference, MCP contract, operating model, task graph model, install docs, testing docs, and spec files must match implemented V1.1 behavior.
|
|
127
|
-
- REQ-V11-DOCS-002: `docs/planr-spec.zip` must be regenerated after spec changes.
|
|
128
|
-
- REQ-V11-DOCS-003: Docs must use Planr vocabulary: plan, map, item, pick, log, review, context, recovery, package.
|
|
129
|
-
- REQ-V11-DOCS-004: Repo-visible docs and public copy must not mention local comparison products or imply Planr is a fork of another task graph or review tool.
|
|
130
|
-
- REQ-V11-DOCS-005: New commands and APIs must have examples and JSON contract notes where agents rely on them.
|
|
131
|
-
|
|
132
|
-
Acceptance:
|
|
133
|
-
|
|
134
|
-
- Docs, fixtures, CLI help, MCP tools, and tests do not drift.
|
|
135
|
-
- A forbidden-reference scrub over public repo paths returns no matches for comparison-product names.
|
|
136
|
-
|
|
137
|
-
## End-To-End Verification Contract
|
|
138
|
-
|
|
139
|
-
V1.1 final verification must run from the current worktree and a fresh consumer project at `~/projects/planr-test`.
|
|
140
|
-
|
|
141
|
-
Required repository checks:
|
|
142
|
-
|
|
143
|
-
- `cargo fmt --check`
|
|
144
|
-
- `cargo clippy --all-targets -- -D warnings`
|
|
145
|
-
- `cargo test`
|
|
146
|
-
- `scripts/build-release.sh`
|
|
147
|
-
- checksum verification for release assets and packaged files
|
|
148
|
-
- `npm pack --dry-run` when the npm wrapper remains present
|
|
149
|
-
- `scripts/ci-local.sh`
|
|
150
|
-
- MCP stdio contract smoke
|
|
151
|
-
- HTTP/SSE smoke
|
|
152
|
-
- durable ReviewGate cross-surface smoke
|
|
153
|
-
- forbidden-reference scrub over public repo paths
|
|
154
|
-
|
|
155
|
-
Required consumer checks in `~/projects/planr-test`:
|
|
156
|
-
|
|
157
|
-
- install or invoke the built Planr binary without relying on source-tree paths except for the selected test binary
|
|
158
|
-
- initialize a project
|
|
159
|
-
- create a product plan or build plan
|
|
160
|
-
- build map items
|
|
161
|
-
- pick one item
|
|
162
|
-
- log files, commands, and tests
|
|
163
|
-
- request review
|
|
164
|
-
- annotate or ingest review feedback
|
|
165
|
-
- close review and target item according to gate rules
|
|
166
|
-
- export and import a package/template
|
|
167
|
-
- run documented examples that are meant to work for users
|
|
168
|
-
|
|
169
|
-
The final V1.1 review must treat missing, stale, narrow, or indirect evidence as incomplete.
|
|
170
|
-
|
|
171
|
-
## Out Of Scope For V1.1 Unless Explicitly Added
|
|
172
|
-
|
|
173
|
-
- Hosted accounts, billing, hosted sync, or team permission models.
|
|
174
|
-
- Uploading private plans, source files, prompts, responses, or review content to a hosted service by default.
|
|
175
|
-
- Full project-management SaaS workflows unrelated to coding-agent execution.
|
|
176
|
-
- Silent global agent-client configuration edits.
|
|
177
|
-
- Claiming PR-provider support that was not verified with a real provider or documented local capability boundary.
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "cverdict-api-health-v1",
|
|
3
|
-
"schema_version": "evidence.contract.v1",
|
|
4
|
-
"scope": {
|
|
5
|
-
"kind": "criterion",
|
|
6
|
-
"id": "criterion-api-health",
|
|
7
|
-
"plan_id": "pln-example",
|
|
8
|
-
"item_id": "item-example"
|
|
9
|
-
},
|
|
10
|
-
"evaluated_at": "2026-07-28T12:00:08Z",
|
|
11
|
-
"status": "satisfied",
|
|
12
|
-
"observation_coverage": [
|
|
13
|
-
{
|
|
14
|
-
"requirement_id": "obs-http-200",
|
|
15
|
-
"status": "covered",
|
|
16
|
-
"covering_receipt_ids": ["erec-planr-api-health-v1"],
|
|
17
|
-
"covered_observation_ids": ["obs-http-200"]
|
|
18
|
-
}
|
|
19
|
-
],
|
|
20
|
-
"validation_details": {
|
|
21
|
-
"trust": {
|
|
22
|
-
"status": "passed",
|
|
23
|
-
"checked_at": "2026-07-28T12:00:08Z",
|
|
24
|
-
"receipt_ids": ["erec-planr-api-health-v1"],
|
|
25
|
-
"gap_reasons": []
|
|
26
|
-
},
|
|
27
|
-
"freshness": {
|
|
28
|
-
"status": "passed",
|
|
29
|
-
"checked_at": "2026-07-28T12:00:08Z",
|
|
30
|
-
"receipt_ids": ["erec-planr-api-health-v1"],
|
|
31
|
-
"gap_reasons": []
|
|
32
|
-
},
|
|
33
|
-
"target": {
|
|
34
|
-
"status": "passed",
|
|
35
|
-
"checked_at": "2026-07-28T12:00:08Z",
|
|
36
|
-
"receipt_ids": ["erec-planr-api-health-v1"],
|
|
37
|
-
"gap_reasons": []
|
|
38
|
-
},
|
|
39
|
-
"schema": {
|
|
40
|
-
"status": "passed",
|
|
41
|
-
"checked_at": "2026-07-28T12:00:08Z",
|
|
42
|
-
"receipt_ids": ["erec-planr-api-health-v1"],
|
|
43
|
-
"gap_reasons": []
|
|
44
|
-
},
|
|
45
|
-
"provenance": {
|
|
46
|
-
"status": "passed",
|
|
47
|
-
"checked_at": "2026-07-28T12:00:08Z",
|
|
48
|
-
"receipt_ids": ["erec-planr-api-health-v1"],
|
|
49
|
-
"gap_reasons": []
|
|
50
|
-
},
|
|
51
|
-
"fixture": {
|
|
52
|
-
"status": "passed",
|
|
53
|
-
"checked_at": "2026-07-28T12:00:08Z",
|
|
54
|
-
"receipt_ids": ["erec-planr-api-health-v1"],
|
|
55
|
-
"gap_reasons": []
|
|
56
|
-
},
|
|
57
|
-
"completion": {
|
|
58
|
-
"status": "passed",
|
|
59
|
-
"checked_at": "2026-07-28T12:00:08Z",
|
|
60
|
-
"receipt_ids": ["erec-planr-api-health-v1"],
|
|
61
|
-
"gap_reasons": []
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
"suggested_next_action": "none",
|
|
65
|
-
"actionable_now": false
|
|
66
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "eatt-planr-api-health-v1",
|
|
3
|
-
"schema_version": "evidence.contract.v1",
|
|
4
|
-
"criterion_id": "criterion-api-health",
|
|
5
|
-
"obligation_id": "pob-planr-api-health-v1",
|
|
6
|
-
"capability_instance_id": "vcinst-planr-http-process-v1",
|
|
7
|
-
"started_at": "2026-07-28T12:00:05Z",
|
|
8
|
-
"ended_at": "2026-07-28T12:00:06Z",
|
|
9
|
-
"status": "passed",
|
|
10
|
-
"resolved_command": {
|
|
11
|
-
"kind": "command",
|
|
12
|
-
"command": ["curl", "-fsS", "http://127.0.0.1:4173/health"],
|
|
13
|
-
"cwd": "$PLANR_REPOSITORY_ROOT"
|
|
14
|
-
},
|
|
15
|
-
"exit": {
|
|
16
|
-
"exit_code": 0,
|
|
17
|
-
"signal": null,
|
|
18
|
-
"error": null
|
|
19
|
-
},
|
|
20
|
-
"retry_lineage": {
|
|
21
|
-
"attempt_number": 1,
|
|
22
|
-
"max_attempts": 1,
|
|
23
|
-
"previous_attempt_ids": []
|
|
24
|
-
},
|
|
25
|
-
"stdout_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
26
|
-
"stderr_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
27
|
-
"raw_result": {
|
|
28
|
-
"kind": "artifact",
|
|
29
|
-
"artifact_id": "artifact-http-response",
|
|
30
|
-
"digest": "sha256:8888888888888888888888888888888888888888888888888888888888888888"
|
|
31
|
-
},
|
|
32
|
-
"artifacts": [],
|
|
33
|
-
"output_bounds": {
|
|
34
|
-
"stdout_bytes": 16,
|
|
35
|
-
"stderr_bytes": 0,
|
|
36
|
-
"stdout_truncated": false,
|
|
37
|
-
"stderr_truncated": false
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "epolicy-default-v1",
|
|
3
|
-
"schema_version": "evidence.contract.v1",
|
|
4
|
-
"policy_digest": "sha256:4dc9ebefae0d8334a19d958a456d5633d615025e7643f999dfda6d4c30bfc613",
|
|
5
|
-
"defaults": {
|
|
6
|
-
"preset_id": "preset-http-health",
|
|
7
|
-
"binding": true,
|
|
8
|
-
"assurance_level": "standard"
|
|
9
|
-
},
|
|
10
|
-
"named_presets": [
|
|
11
|
-
{
|
|
12
|
-
"id": "preset-http-health",
|
|
13
|
-
"schema_version": "evidence.contract.v1",
|
|
14
|
-
"namespace": "planr.api",
|
|
15
|
-
"observations": [
|
|
16
|
-
{
|
|
17
|
-
"id": "obs-http-200",
|
|
18
|
-
"type": "planr.api.http.response",
|
|
19
|
-
"subject": "GET /health",
|
|
20
|
-
"expected": {
|
|
21
|
-
"status": 200
|
|
22
|
-
},
|
|
23
|
-
"target": {
|
|
24
|
-
"kind": "local_service",
|
|
25
|
-
"uri": "http://127.0.0.1:4173/health"
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
]
|
|
29
|
-
}
|
|
30
|
-
],
|
|
31
|
-
"observation_schema_registrations": [
|
|
32
|
-
{
|
|
33
|
-
"type": "planr.api.http.response",
|
|
34
|
-
"schema_ref": "planr.api.http.response@v1",
|
|
35
|
-
"schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
|
36
|
-
"owning_namespace": "planr.api"
|
|
37
|
-
}
|
|
38
|
-
],
|
|
39
|
-
"adapter_registrations": [
|
|
40
|
-
{
|
|
41
|
-
"manifest_id": "vcap-planr-http-process-v1",
|
|
42
|
-
"manifest_path": "docs/contracts/fixtures/evidence/v1/examples/verification-capability-manifest.json",
|
|
43
|
-
"manifest_digest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
|
|
44
|
-
"observation_types": ["planr.api.http.response"],
|
|
45
|
-
"payload_schemas": [
|
|
46
|
-
{
|
|
47
|
-
"type": "planr.api.http.response",
|
|
48
|
-
"schema_ref": "planr.api.http.response@v1",
|
|
49
|
-
"schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
|
|
50
|
-
}
|
|
51
|
-
],
|
|
52
|
-
"provenance_path": "planr_observed_execution",
|
|
53
|
-
"execution_contract": {
|
|
54
|
-
"kind": "process",
|
|
55
|
-
"executable": "curl",
|
|
56
|
-
"args": ["--fail", "--silent", "http://127.0.0.1:4173/health"],
|
|
57
|
-
"working_directory": ".",
|
|
58
|
-
"timeout_ms": 10000,
|
|
59
|
-
"stdout_limit_bytes": 1048576,
|
|
60
|
-
"stderr_limit_bytes": 1048576,
|
|
61
|
-
"payload_schema": {
|
|
62
|
-
"type": "planr.api.http.response",
|
|
63
|
-
"schema_ref": "planr.api.http.response@v1",
|
|
64
|
-
"schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
],
|
|
69
|
-
"extension_namespaces": ["planr.api"],
|
|
70
|
-
"trust_policy": {
|
|
71
|
-
"accepted_provenance": ["planr_observed_execution"],
|
|
72
|
-
"min_receipt_status": "trusted",
|
|
73
|
-
"allow_user_attestation": false
|
|
74
|
-
},
|
|
75
|
-
"freshness_policy": {
|
|
76
|
-
"max_age_seconds": 3600,
|
|
77
|
-
"invalidate_on": [
|
|
78
|
-
"source_change",
|
|
79
|
-
"target_change",
|
|
80
|
-
"policy_change",
|
|
81
|
-
"adapter_schema_change",
|
|
82
|
-
"configuration_change"
|
|
83
|
-
]
|
|
84
|
-
},
|
|
85
|
-
"fixture_policy": {
|
|
86
|
-
"fixtures_allowed": false,
|
|
87
|
-
"mocks_allowed": false,
|
|
88
|
-
"disclosure_required": true
|
|
89
|
-
},
|
|
90
|
-
"completion_policy": {
|
|
91
|
-
"require_satisfied_or_waived": true,
|
|
92
|
-
"allow_inconclusive_completion": false,
|
|
93
|
-
"require_review_evidence": true
|
|
94
|
-
},
|
|
95
|
-
"layering_policy": {
|
|
96
|
-
"mode": "monotonic_strengthening",
|
|
97
|
-
"weakening_requires_waiver": true,
|
|
98
|
-
"layers": [
|
|
99
|
-
{
|
|
100
|
-
"scope": {
|
|
101
|
-
"kind": "plan",
|
|
102
|
-
"id": "pln-example"
|
|
103
|
-
},
|
|
104
|
-
"policy_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
105
|
-
}
|
|
106
|
-
]
|
|
107
|
-
}
|
|
108
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "erec-planr-api-health-v1",
|
|
3
|
-
"schema_version": "evidence.contract.v1",
|
|
4
|
-
"criterion_id": "criterion-api-health",
|
|
5
|
-
"obligation_id": "pob-planr-api-health-v1",
|
|
6
|
-
"receipt_status": "trusted",
|
|
7
|
-
"source": {
|
|
8
|
-
"revision": "0123456789abcdef0123456789abcdef01234567",
|
|
9
|
-
"tree_digest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
|
|
10
|
-
"dirty": false
|
|
11
|
-
},
|
|
12
|
-
"target": {
|
|
13
|
-
"kind": "local_service",
|
|
14
|
-
"uri": "http://127.0.0.1:4173/health",
|
|
15
|
-
"digest": "sha256:4444444444444444444444444444444444444444444444444444444444444444"
|
|
16
|
-
},
|
|
17
|
-
"environment": {
|
|
18
|
-
"kind": "local",
|
|
19
|
-
"id": "dev-shell",
|
|
20
|
-
"digest": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
|
|
21
|
-
},
|
|
22
|
-
"vantage_point": {
|
|
23
|
-
"kind": "localhost",
|
|
24
|
-
"identity": "127.0.0.1"
|
|
25
|
-
},
|
|
26
|
-
"capability": {
|
|
27
|
-
"manifest_id": "vcap-planr-http-process-v1",
|
|
28
|
-
"manifest_digest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
|
|
29
|
-
"instance_id": "vcinst-planr-http-process-v1",
|
|
30
|
-
"instance_digest": "sha256:7777777777777777777777777777777777777777777777777777777777777777"
|
|
31
|
-
},
|
|
32
|
-
"provenance": {
|
|
33
|
-
"source": "planr_observed_execution",
|
|
34
|
-
"assigned_by": "planr",
|
|
35
|
-
"execution_id": "exec-20260728-api-health",
|
|
36
|
-
"tool_call_id": null
|
|
37
|
-
},
|
|
38
|
-
"observations": [
|
|
39
|
-
{
|
|
40
|
-
"requirement_id": "obs-http-200",
|
|
41
|
-
"type": "planr.api.http.response",
|
|
42
|
-
"outcome": "passed",
|
|
43
|
-
"predicate": {
|
|
44
|
-
"status": 200,
|
|
45
|
-
"json_path": "$.status",
|
|
46
|
-
"equals": "ok"
|
|
47
|
-
},
|
|
48
|
-
"actual": {
|
|
49
|
-
"status": 200,
|
|
50
|
-
"json": {
|
|
51
|
-
"status": "ok"
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
],
|
|
56
|
-
"attempt_ids": [
|
|
57
|
-
"eatt-planr-api-health-v1"
|
|
58
|
-
],
|
|
59
|
-
"retry_history": [],
|
|
60
|
-
"artifacts": [
|
|
61
|
-
{
|
|
62
|
-
"id": "artifact-http-response",
|
|
63
|
-
"kind": "stdout",
|
|
64
|
-
"digest": "sha256:8888888888888888888888888888888888888888888888888888888888888888"
|
|
65
|
-
}
|
|
66
|
-
],
|
|
67
|
-
"raw_result": {
|
|
68
|
-
"kind": "artifact",
|
|
69
|
-
"artifact_id": "artifact-http-response",
|
|
70
|
-
"digest": "sha256:8888888888888888888888888888888888888888888888888888888888888888"
|
|
71
|
-
},
|
|
72
|
-
"config_digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
|
|
73
|
-
"fixture_disclosure": {
|
|
74
|
-
"fixtures_used": false,
|
|
75
|
-
"mocks_used": false
|
|
76
|
-
},
|
|
77
|
-
"permissions": {
|
|
78
|
-
"network": "localhost_only",
|
|
79
|
-
"filesystem": "read_workspace"
|
|
80
|
-
},
|
|
81
|
-
"sandbox": {
|
|
82
|
-
"mode": "bounded_process",
|
|
83
|
-
"limits": {
|
|
84
|
-
"timeout_ms": 10000,
|
|
85
|
-
"stdout_bytes": 1048576,
|
|
86
|
-
"stderr_bytes": 1048576
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
"proof_gaps": [],
|
|
90
|
-
"started_at": "2026-07-28T12:00:05Z",
|
|
91
|
-
"ended_at": "2026-07-28T12:00:06Z",
|
|
92
|
-
"receipt_digest": "sha256:6ea111943fdafe268a5bbe85b0fecaab75890dbcb9b2e2dfb966f3c6916e348f"
|
|
93
|
-
}
|