planr 1.9.0 → 1.10.0-alpha.2

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.
Files changed (67) hide show
  1. package/README.md +32 -5
  2. package/docs/ARCHITECTURE.md +1 -1
  3. package/docs/RELEASE.md +37 -7
  4. package/docs/contracts/EVIDENCE_CONTRACT_V1.md +283 -0
  5. package/docs/contracts/fixtures/evidence/v1/examples/coverage-verdict.json +66 -0
  6. package/docs/contracts/fixtures/evidence/v1/examples/evidence-attempt.json +39 -0
  7. package/docs/contracts/fixtures/evidence/v1/examples/evidence-policy.json +117 -0
  8. package/docs/contracts/fixtures/evidence/v1/examples/evidence-receipt.json +93 -0
  9. package/docs/contracts/fixtures/evidence/v1/examples/evidence-waiver.json +31 -0
  10. package/docs/contracts/fixtures/evidence/v1/examples/proof-obligation.json +67 -0
  11. package/docs/contracts/fixtures/evidence/v1/examples/proof-preset.json +28 -0
  12. package/docs/contracts/fixtures/evidence/v1/examples/untrusted-evidence-proposal.json +20 -0
  13. package/docs/contracts/fixtures/evidence/v1/examples/verification-capability-instance.json +39 -0
  14. package/docs/contracts/fixtures/evidence/v1/examples/verification-capability-manifest.json +52 -0
  15. package/docs/contracts/fixtures/evidence/v1/negative/aborted-zero-exit-attempt.json +39 -0
  16. package/docs/contracts/fixtures/evidence/v1/negative/adapter-registration-missing-execution-contract.json +97 -0
  17. package/docs/contracts/fixtures/evidence/v1/negative/available-empty-probe-capability.json +27 -0
  18. package/docs/contracts/fixtures/evidence/v1/negative/blocked-coverage-with-stale-reason.json +27 -0
  19. package/docs/contracts/fixtures/evidence/v1/negative/empty-trust-bindings-receipt.json +72 -0
  20. package/docs/contracts/fixtures/evidence/v1/negative/failed-zero-exit-attempt.json +39 -0
  21. package/docs/contracts/fixtures/evidence/v1/negative/forged-trusted-receipt.json +35 -0
  22. package/docs/contracts/fixtures/evidence/v1/negative/inconclusive-clean-exit-attempt.json +39 -0
  23. package/docs/contracts/fixtures/evidence/v1/negative/inconclusive-coverage-with-blocked-reason.json +27 -0
  24. package/docs/contracts/fixtures/evidence/v1/negative/minimal-policy-missing-owned-inputs.json +5 -0
  25. package/docs/contracts/fixtures/evidence/v1/negative/mismatched-probe-execution-id-capability.json +42 -0
  26. package/docs/contracts/fixtures/evidence/v1/negative/passed-empty-attempt.json +22 -0
  27. package/docs/contracts/fixtures/evidence/v1/negative/policy-default-preset-unregistered.json +111 -0
  28. package/docs/contracts/fixtures/evidence/v1/negative/policy-weakening-without-waiver.json +111 -0
  29. package/docs/contracts/fixtures/evidence/v1/negative/process-probe-missing-output-limits.json +49 -0
  30. package/docs/contracts/fixtures/evidence/v1/negative/satisfied-empty-coverage-verdict.json +14 -0
  31. package/docs/contracts/fixtures/evidence/v1/negative/skipped-zero-exit-attempt.json +39 -0
  32. package/docs/contracts/fixtures/evidence/v1/negative/stale-coverage-with-inconclusive-reason.json +27 -0
  33. package/docs/contracts/fixtures/evidence/v1/negative/timed-out-zero-exit-attempt.json +39 -0
  34. package/docs/contracts/fixtures/evidence/v1/negative/unavailable-zero-exit-attempt.json +39 -0
  35. package/docs/contracts/fixtures/evidence/v1/negative/unbound-waiver.json +21 -0
  36. package/docs/contracts/fixtures/evidence/v1/negative/unsatisfied-coverage-without-gap.json +63 -0
  37. package/docs/contracts/fixtures/evidence/v1/negative/waived-coverage-forbidden-gap-reason.json +28 -0
  38. package/docs/contracts/fixtures/evidence/v1/negative/waived-coverage-missing-waiver-id.json +27 -0
  39. package/docs/contracts/fixtures/evidence/v1/schemas/evidence-contract-v1.schema.json +2705 -0
  40. package/docs/documentation/CONTRACT.md +1 -1
  41. package/docs/documentation/COVERAGE.md +8 -5
  42. package/docs/documentation/INFORMATION_ARCHITECTURE.md +1 -1
  43. package/docs/fixtures/mcp-contract.json +18 -0
  44. package/npm/native/darwin-arm64/planr +0 -0
  45. package/npm/native/darwin-arm64/planr-host-capability-validator +0 -0
  46. package/npm/native/darwin-x86_64/planr +0 -0
  47. package/npm/native/darwin-x86_64/planr-host-capability-validator +0 -0
  48. package/npm/native/linux-arm64/planr +0 -0
  49. package/npm/native/linux-arm64/planr-host-capability-validator +0 -0
  50. package/npm/native/linux-x86_64/planr +0 -0
  51. package/npm/native/linux-x86_64/planr-host-capability-validator +0 -0
  52. package/package.json +15 -2
  53. package/plugins/planr/.claude-plugin/plugin.json +1 -1
  54. package/plugins/planr/.codex-plugin/plugin.json +1 -1
  55. package/plugins/planr/skills/planr-goal/SKILL.md +7 -4
  56. package/plugins/planr/skills/planr-loop/SKILL.md +11 -8
  57. package/plugins/planr/skills/planr-loop/references/recovery-and-verification.md +5 -4
  58. package/plugins/planr/skills/planr-plan/SKILL.md +1 -1
  59. package/plugins/planr/skills/planr-review/SKILL.md +5 -1
  60. package/plugins/planr/skills/planr-status/SKILL.md +3 -1
  61. package/plugins/planr/skills/planr-verify-web/SKILL.md +9 -6
  62. package/plugins/planr/skills/planr-work/SKILL.md +17 -3
  63. package/scripts/host-capability-experiment.mjs +2477 -0
  64. package/scripts/host-capability-runtime/v1/schemas/host-capability-expected-manifest.schema.json +377 -0
  65. package/scripts/host-capability-runtime/v1/schemas/host-capability-observed-raw.schema.json +439 -0
  66. package/scripts/host-capability-runtime/v1/schemas/host-capability-provenance.schema.json +178 -0
  67. package/scripts/planr-host-capability-validator +51 -0
@@ -0,0 +1,72 @@
1
+ {
2
+ "id": "erec-empty-trust-bindings",
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
+ "capability": {
24
+ "manifest_id": "vcap-planr-http-process-v1",
25
+ "manifest_digest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
26
+ "instance_id": "vcinst-planr-http-process-v1",
27
+ "instance_digest": "sha256:7777777777777777777777777777777777777777777777777777777777777777"
28
+ },
29
+ "provenance": {
30
+ "source": "planr_observed_execution",
31
+ "assigned_by": "planr",
32
+ "execution_id": "exec-20260728-api-health",
33
+ "tool_call_id": null
34
+ },
35
+ "observations": [
36
+ {
37
+ "requirement_id": "obs-http-200",
38
+ "type": "planr.api.http.response",
39
+ "outcome": "passed",
40
+ "predicate": {
41
+ "status": 200
42
+ },
43
+ "actual": {
44
+ "status": 200
45
+ }
46
+ }
47
+ ],
48
+ "attempt_ids": [
49
+ "eatt-planr-api-health-v1"
50
+ ],
51
+ "retry_history": [],
52
+ "artifacts": [
53
+ {
54
+ "id": "artifact-http-response",
55
+ "kind": "stdout",
56
+ "digest": "sha256:8888888888888888888888888888888888888888888888888888888888888888"
57
+ }
58
+ ],
59
+ "raw_result": {
60
+ "kind": "artifact",
61
+ "artifact_id": "artifact-http-response",
62
+ "digest": "sha256:8888888888888888888888888888888888888888888888888888888888888888"
63
+ },
64
+ "config_digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
65
+ "fixture_disclosure": {},
66
+ "permissions": {},
67
+ "sandbox": {},
68
+ "proof_gaps": [],
69
+ "started_at": "2026-07-28T12:00:05Z",
70
+ "ended_at": "2026-07-28T12:00:06Z",
71
+ "receipt_digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
72
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "id": "eatt-failed-zero-exit",
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": "failed",
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": 2,
35
+ "stderr_bytes": 0,
36
+ "stdout_truncated": false,
37
+ "stderr_truncated": false
38
+ }
39
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "id": "erec-forged-minimal",
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
+ "target": {},
9
+ "environment": {},
10
+ "vantage_point": {},
11
+ "capability": {},
12
+ "provenance": {
13
+ "source": "planr_observed_execution",
14
+ "assigned_by": "planr"
15
+ },
16
+ "observations": [
17
+ {
18
+ "requirement_id": "obs-http-200",
19
+ "type": "planr.api.http.response",
20
+ "outcome": "passed",
21
+ "predicate": {},
22
+ "actual": {}
23
+ }
24
+ ],
25
+ "attempt_ids": [
26
+ "attempt-forged"
27
+ ],
28
+ "fixture_disclosure": {},
29
+ "permissions": {},
30
+ "sandbox": {},
31
+ "proof_gaps": [],
32
+ "started_at": "2026-07-28T12:00:05Z",
33
+ "ended_at": "2026-07-28T12:00:06Z",
34
+ "receipt_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
35
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "id": "eatt-inconclusive-clean-exit",
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": "inconclusive",
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": 2,
35
+ "stderr_bytes": 0,
36
+ "stdout_truncated": false,
37
+ "stderr_truncated": false
38
+ }
39
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "id": "cverdict-inconclusive-blocked-reason",
3
+ "schema_version": "evidence.contract.v1",
4
+ "scope": {
5
+ "kind": "criterion",
6
+ "id": "criterion-api-health"
7
+ },
8
+ "evaluated_at": "2026-07-28T12:00:08Z",
9
+ "status": "inconclusive",
10
+ "observation_coverage": [
11
+ {
12
+ "requirement_id": "obs-http-200",
13
+ "status": "inconclusive",
14
+ "gap_reason": "permission_denied"
15
+ }
16
+ ],
17
+ "validation_details": {
18
+ "trust": {
19
+ "status": "inconclusive",
20
+ "checked_at": "2026-07-28T12:00:08Z",
21
+ "receipt_ids": [],
22
+ "gap_reasons": ["permission_denied"]
23
+ }
24
+ },
25
+ "suggested_next_action": "rerun verifier",
26
+ "actionable_now": true
27
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "id": "epolicy-minimal",
3
+ "schema_version": "evidence.contract.v1",
4
+ "policy_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
5
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "id": "vcinst-mismatched-probe",
3
+ "schema_version": "evidence.contract.v1",
4
+ "manifest_id": "vcap-planr-http-process-v1",
5
+ "manifest_digest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
6
+ "host": "codex",
7
+ "surface": "local-process",
8
+ "host_version": "1.0.0",
9
+ "adapter_version": "1.0.0",
10
+ "environment": {
11
+ "kind": "local",
12
+ "id": "dev-shell",
13
+ "digest": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
14
+ },
15
+ "permissions": {
16
+ "network": "localhost_only",
17
+ "filesystem": "read_workspace"
18
+ },
19
+ "availability": {
20
+ "status": "available"
21
+ },
22
+ "probe_result": {
23
+ "probe_execution_id": "probe-empty",
24
+ "outcome": "passed",
25
+ "observed_at": "2026-07-28T12:00:04Z",
26
+ "checks": [
27
+ {
28
+ "name": "http-health",
29
+ "outcome": "passed"
30
+ }
31
+ ]
32
+ },
33
+ "probe_execution_id": "probe-other",
34
+ "observed_payload_contract": {
35
+ "schema_ref": "planr.api.http.response@v1",
36
+ "observation_types": [
37
+ "planr.api.http.response"
38
+ ]
39
+ },
40
+ "limitations": [],
41
+ "captured_at": "2026-07-28T12:00:04Z"
42
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "id": "eatt-empty-passed",
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
+ "exit": {},
12
+ "retry_lineage": {},
13
+ "stdout_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
14
+ "stderr_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
15
+ "raw_result": {
16
+ "kind": "artifact",
17
+ "artifact_id": "artifact-http-response",
18
+ "digest": "sha256:8888888888888888888888888888888888888888888888888888888888888888"
19
+ },
20
+ "artifacts": [],
21
+ "output_bounds": {}
22
+ }
@@ -0,0 +1,111 @@
1
+ {
2
+ "id": "epolicy-unregistered-default-preset",
3
+ "schema_version": "evidence.contract.v1",
4
+ "policy_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
5
+ "defaults": {
6
+ "preset_id": "preset-missing",
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
+ "environment": {
28
+ "kind": "local",
29
+ "id": "dev-shell",
30
+ "digest": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
31
+ },
32
+ "runtime_target": {
33
+ "kind": "process",
34
+ "id": "planr-doc-fixture"
35
+ }
36
+ }
37
+ ]
38
+ }
39
+ ],
40
+ "observation_schema_registrations": [
41
+ {
42
+ "type": "planr.api.http.response",
43
+ "schema_ref": "planr.api.http.response@v1",
44
+ "schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
45
+ "owning_namespace": "planr.api"
46
+ }
47
+ ],
48
+ "adapter_registrations": [
49
+ {
50
+ "manifest_id": "vcap-planr-http-process-v1",
51
+ "manifest_path": "docs/contracts/fixtures/evidence/v1/examples/verification-capability-manifest.json",
52
+ "manifest_digest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
53
+ "observation_types": ["planr.api.http.response"],
54
+ "payload_schemas": [
55
+ {
56
+ "type": "planr.api.http.response",
57
+ "schema_ref": "planr.api.http.response@v1",
58
+ "schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
59
+ }
60
+ ],
61
+ "provenance_path": "planr_observed_execution",
62
+ "execution_contract": {
63
+ "kind": "process",
64
+ "executable": "curl",
65
+ "args": ["--fail", "--silent", "http://127.0.0.1:4173/health"],
66
+ "working_directory": ".",
67
+ "timeout_ms": 10000,
68
+ "stdout_limit_bytes": 1048576,
69
+ "stderr_limit_bytes": 1048576,
70
+ "payload_schema": {
71
+ "type": "planr.api.http.response",
72
+ "schema_ref": "planr.api.http.response@v1",
73
+ "schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
74
+ }
75
+ }
76
+ }
77
+ ],
78
+ "extension_namespaces": ["planr.api"],
79
+ "trust_policy": {
80
+ "accepted_provenance": ["planr_observed_execution"],
81
+ "min_receipt_status": "trusted",
82
+ "allow_user_attestation": false
83
+ },
84
+ "freshness_policy": {
85
+ "max_age_seconds": 3600,
86
+ "invalidate_on": ["source_change"]
87
+ },
88
+ "fixture_policy": {
89
+ "fixtures_allowed": false,
90
+ "mocks_allowed": false,
91
+ "disclosure_required": true
92
+ },
93
+ "completion_policy": {
94
+ "require_satisfied_or_waived": true,
95
+ "allow_inconclusive_completion": false,
96
+ "require_review_evidence": true
97
+ },
98
+ "layering_policy": {
99
+ "mode": "monotonic_strengthening",
100
+ "weakening_requires_waiver": true,
101
+ "layers": [
102
+ {
103
+ "scope": {
104
+ "kind": "plan",
105
+ "id": "pln-example"
106
+ },
107
+ "policy_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
108
+ }
109
+ ]
110
+ }
111
+ }
@@ -0,0 +1,111 @@
1
+ {
2
+ "id": "epolicy-weakening",
3
+ "schema_version": "evidence.contract.v1",
4
+ "policy_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
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
+ "environment": {
28
+ "kind": "local",
29
+ "id": "dev-shell",
30
+ "digest": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
31
+ },
32
+ "runtime_target": {
33
+ "kind": "process",
34
+ "id": "planr-doc-fixture"
35
+ }
36
+ }
37
+ ]
38
+ }
39
+ ],
40
+ "observation_schema_registrations": [
41
+ {
42
+ "type": "planr.api.http.response",
43
+ "schema_ref": "planr.api.http.response@v1",
44
+ "schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
45
+ "owning_namespace": "planr.api"
46
+ }
47
+ ],
48
+ "adapter_registrations": [
49
+ {
50
+ "manifest_id": "vcap-planr-http-process-v1",
51
+ "manifest_path": "docs/contracts/fixtures/evidence/v1/examples/verification-capability-manifest.json",
52
+ "manifest_digest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
53
+ "observation_types": ["planr.api.http.response"],
54
+ "payload_schemas": [
55
+ {
56
+ "type": "planr.api.http.response",
57
+ "schema_ref": "planr.api.http.response@v1",
58
+ "schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
59
+ }
60
+ ],
61
+ "provenance_path": "planr_observed_execution",
62
+ "execution_contract": {
63
+ "kind": "process",
64
+ "executable": "curl",
65
+ "args": ["--fail", "--silent", "http://127.0.0.1:4173/health"],
66
+ "working_directory": ".",
67
+ "timeout_ms": 10000,
68
+ "stdout_limit_bytes": 1048576,
69
+ "stderr_limit_bytes": 1048576,
70
+ "payload_schema": {
71
+ "type": "planr.api.http.response",
72
+ "schema_ref": "planr.api.http.response@v1",
73
+ "schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
74
+ }
75
+ }
76
+ }
77
+ ],
78
+ "extension_namespaces": ["planr.api"],
79
+ "trust_policy": {
80
+ "accepted_provenance": ["planr_observed_execution"],
81
+ "min_receipt_status": "trusted",
82
+ "allow_user_attestation": false
83
+ },
84
+ "freshness_policy": {
85
+ "max_age_seconds": 3600,
86
+ "invalidate_on": ["source_change"]
87
+ },
88
+ "fixture_policy": {
89
+ "fixtures_allowed": false,
90
+ "mocks_allowed": false,
91
+ "disclosure_required": true
92
+ },
93
+ "completion_policy": {
94
+ "require_satisfied_or_waived": true,
95
+ "allow_inconclusive_completion": false,
96
+ "require_review_evidence": true
97
+ },
98
+ "layering_policy": {
99
+ "mode": "monotonic_strengthening",
100
+ "weakening_requires_waiver": false,
101
+ "layers": [
102
+ {
103
+ "scope": {
104
+ "kind": "plan",
105
+ "id": "pln-example"
106
+ },
107
+ "policy_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
108
+ }
109
+ ]
110
+ }
111
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "id": "vcap-process-probe-missing-limits",
3
+ "schema_version": "evidence.contract.v1",
4
+ "version": "1.0.0",
5
+ "adapter_kind": "process",
6
+ "adapter_digest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
7
+ "supported_surfaces": ["local-process"],
8
+ "supported_observations": [
9
+ {
10
+ "type": "planr.api.http.response",
11
+ "schema_ref": "planr.api.http.response@v1",
12
+ "schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
13
+ }
14
+ ],
15
+ "supported_interactions": ["http-get"],
16
+ "supported_artifacts": ["stdout"],
17
+ "runtime_targets": [
18
+ {
19
+ "kind": "process",
20
+ "id": "planr-doc-fixture"
21
+ }
22
+ ],
23
+ "provenance_path": "planr_observed_execution",
24
+ "permissions": {
25
+ "network": "localhost_only",
26
+ "filesystem": "read_workspace"
27
+ },
28
+ "costs": {
29
+ "network": "local"
30
+ },
31
+ "determinism": "deterministic for static health endpoint",
32
+ "repeatability": "replayable from source tree and target URI",
33
+ "independence": "adapter observes process output independently of agent text",
34
+ "blind_spots": [],
35
+ "availability_probe": {
36
+ "kind": "process",
37
+ "execution": {
38
+ "kind": "process",
39
+ "executable": "curl",
40
+ "args": ["--version"],
41
+ "timeout_ms": 5000,
42
+ "payload_schema": {
43
+ "type": "planr.api.http.response",
44
+ "schema_ref": "planr.api.http.response@v1",
45
+ "schema_digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
46
+ }
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "id": "cverdict-empty-satisfied",
3
+ "schema_version": "evidence.contract.v1",
4
+ "scope": {
5
+ "kind": "criterion",
6
+ "id": "criterion-api-health"
7
+ },
8
+ "evaluated_at": "2026-07-28T12:00:08Z",
9
+ "status": "satisfied",
10
+ "observation_coverage": [],
11
+ "validation_details": {},
12
+ "suggested_next_action": "none",
13
+ "actionable_now": false
14
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "id": "eatt-skipped-zero-exit",
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": "skipped",
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": 2,
35
+ "stderr_bytes": 0,
36
+ "stdout_truncated": false,
37
+ "stderr_truncated": false
38
+ }
39
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "id": "cverdict-stale-inconclusive-reason",
3
+ "schema_version": "evidence.contract.v1",
4
+ "scope": {
5
+ "kind": "criterion",
6
+ "id": "criterion-api-health"
7
+ },
8
+ "evaluated_at": "2026-07-28T12:00:08Z",
9
+ "status": "stale",
10
+ "observation_coverage": [
11
+ {
12
+ "requirement_id": "obs-http-200",
13
+ "status": "stale",
14
+ "gap_reason": "inconclusive_result"
15
+ }
16
+ ],
17
+ "validation_details": {
18
+ "freshness": {
19
+ "status": "failed",
20
+ "checked_at": "2026-07-28T12:00:08Z",
21
+ "receipt_ids": [],
22
+ "gap_reasons": ["inconclusive_result"]
23
+ }
24
+ },
25
+ "suggested_next_action": "refresh evidence",
26
+ "actionable_now": true
27
+ }