gentle-pi 1.2.0 → 2.1.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.
Files changed (111) hide show
  1. package/README.md +32 -10
  2. package/assets/agents/review-readability.md +0 -1
  3. package/assets/agents/review-reliability.md +0 -1
  4. package/assets/agents/review-resilience.md +0 -1
  5. package/assets/agents/review-risk.md +0 -1
  6. package/contracts/review-integration/v1/fixtures/binding-revision-conflict.fixture.json +25 -0
  7. package/contracts/review-integration/v1/fixtures/capabilities-v1.2.fixture.json +263 -0
  8. package/contracts/review-integration/v1/fixtures/capabilities-v1.3.fixture.json +301 -0
  9. package/contracts/review-integration/v1/fixtures/capabilities-v1.4.fixture.json +312 -0
  10. package/contracts/review-integration/v1/fixtures/capabilities-v1.5.fixture.json +321 -0
  11. package/contracts/review-integration/v1/fixtures/consent.fixture.json +36 -0
  12. package/contracts/review-integration/v1/fixtures/final-verification-incident.fixture.json +1 -0
  13. package/contracts/review-integration/v1/fixtures/operation.fixture.json +4 -0
  14. package/contracts/review-integration/v1/fixtures/repair-preflight.fixture.json +54 -0
  15. package/contracts/review-integration/v1/fixtures/start-v2.fixture.json +97 -0
  16. package/contracts/review-integration/v1/fixtures/start.fixture.json +25 -1
  17. package/contracts/review-integration/v1/fixtures/status-ambiguous.fixture.json +4 -0
  18. package/contracts/review-integration/v1/fixtures/status-corrupted.fixture.json +4 -0
  19. package/contracts/review-integration/v1/fixtures/status-recover.fixture.json +4 -0
  20. package/contracts/review-integration/v1/fixtures/status-unrelated.fixture.json +4 -0
  21. package/contracts/review-integration/v1/fixtures/status-v2-ambiguous.fixture.json +110 -0
  22. package/contracts/review-integration/v1/fixtures/status-v2-corrupted.fixture.json +107 -0
  23. package/contracts/review-integration/v1/fixtures/status-v2-final-verification-retry.fixture.json +192 -0
  24. package/contracts/review-integration/v1/fixtures/status-v2-recover.fixture.json +130 -0
  25. package/contracts/review-integration/v1/fixtures/status-v2-repair.fixture.json +161 -0
  26. package/contracts/review-integration/v1/fixtures/status-v2-unrelated.fixture.json +103 -0
  27. package/contracts/review-integration/v1/fixtures/status-v2.fixture.json +193 -0
  28. package/contracts/review-integration/v1/fixtures/status.fixture.json +19 -5
  29. package/contracts/review-integration/v1/fixtures/verification-evidence.fixture.json +1 -0
  30. package/contracts/review-integration/v1/schemas/admitted-result.schema.json +35 -0
  31. package/contracts/review-integration/v1/schemas/artifact-subject.schema.json +33 -0
  32. package/contracts/review-integration/v1/schemas/authority-repair-assessment.schema.json +247 -0
  33. package/contracts/review-integration/v1/schemas/capabilities-v1.2.schema.json +249 -0
  34. package/contracts/review-integration/v1/schemas/capabilities-v1.3.schema.json +429 -0
  35. package/contracts/review-integration/v1/schemas/capabilities-v1.4.schema.json +432 -0
  36. package/contracts/review-integration/v1/schemas/capabilities-v1.5.schema.json +154 -0
  37. package/contracts/review-integration/v1/schemas/consent.schema.json +86 -0
  38. package/contracts/review-integration/v1/schemas/failure.schema.json +54 -8
  39. package/contracts/review-integration/v1/schemas/final-verification-incident.schema.json +51 -0
  40. package/contracts/review-integration/v1/schemas/operation.schema.json +204 -31
  41. package/contracts/review-integration/v1/schemas/repair.schema.json +251 -0
  42. package/contracts/review-integration/v1/schemas/result-artifact-v2.schema.json +38 -0
  43. package/contracts/review-integration/v1/schemas/start-v2.schema.json +216 -0
  44. package/contracts/review-integration/v1/schemas/start.schema.json +79 -3
  45. package/contracts/review-integration/v1/schemas/status-v2.schema.json +313 -0
  46. package/contracts/review-integration/v1/schemas/status.schema.json +37 -10
  47. package/contracts/review-integration/v1/schemas/targeted-validation-request.schema.json +46 -0
  48. package/contracts/review-integration/v1/schemas/verification-evidence.schema.json +64 -0
  49. package/contracts/review-integration/v2/fixtures/capabilities.fixture.json +111 -0
  50. package/contracts/review-integration/v2/fixtures/consent.fixture.json +36 -0
  51. package/contracts/review-integration/v2/fixtures/start.fixture.json +93 -0
  52. package/contracts/review-integration/v2/fixtures/status.fixture.json +113 -0
  53. package/contracts/review-integration/v2/schemas/admitted-result.schema.json +14 -0
  54. package/contracts/review-integration/v2/schemas/artifact-subject.schema.json +36 -0
  55. package/contracts/review-integration/v2/schemas/capabilities.schema.json +111 -0
  56. package/contracts/review-integration/v2/schemas/consent.schema.json +70 -0
  57. package/contracts/review-integration/v2/schemas/failure.schema.json +35 -0
  58. package/contracts/review-integration/v2/schemas/operation.schema.json +46 -0
  59. package/contracts/review-integration/v2/schemas/repair.schema.json +22 -0
  60. package/contracts/review-integration/v2/schemas/start.schema.json +106 -0
  61. package/contracts/review-integration/v2/schemas/status.schema.json +104 -0
  62. package/docs/native-authority-architecture.md +18 -3
  63. package/docs/review-integration.md +175 -27
  64. package/extensions/gentle-ai.ts +647 -58
  65. package/lib/gentle-ai-binary.ts +65 -18
  66. package/lib/native-review-cli.ts +824 -56
  67. package/lib/review-candidate-view.ts +135 -1
  68. package/lib/review-compact-contract.ts +12 -3
  69. package/lib/review-consent-latch.ts +51 -0
  70. package/lib/review-correction-lifecycle.ts +170 -0
  71. package/lib/review-integration-v2.ts +1567 -0
  72. package/package.json +15 -11
  73. package/runtime/gentle-ai-binary.mjs +65 -18
  74. package/runtime/native-review-cli.mjs +808 -40
  75. package/runtime/review-integration-v2.mjs +1568 -0
  76. package/scripts/build-git-commit-transaction-runner.mjs +1 -1
  77. package/scripts/gentle-ai-installer.mjs +464 -76
  78. package/scripts/install-gentle-ai.mjs +7 -3
  79. package/scripts/test-packed-runner.mjs +3 -3
  80. package/scripts/verify-package-files.mjs +216 -64
  81. package/skills/_shared/review-ledger-contract.md +3 -1
  82. package/skills/release/SKILL.md +38 -11
  83. package/tests/devbinary/native-review-parity.devtest.ts +348 -0
  84. package/tests/gentle-ai-binary.test.ts +77 -3
  85. package/tests/gentle-ai-installer.test.ts +561 -22
  86. package/tests/gentle-ai.test.ts +2 -2
  87. package/tests/native-binary-gate.test.ts +145 -0
  88. package/tests/native-review-capability-contract.test.ts +87 -0
  89. package/tests/native-review-cli.test.ts +44 -1
  90. package/tests/native-review-consent.test.ts +128 -0
  91. package/tests/native-review-parity-runtime.test.ts +85 -29
  92. package/tests/native-review-parity.test.ts +782 -0
  93. package/tests/native-risk-evidence-parity.test.ts +91 -0
  94. package/tests/package-manifest.test.ts +80 -8
  95. package/tests/review-actor-tool-deny.test.ts +20 -5
  96. package/tests/review-candidate-view.test.ts +374 -1
  97. package/tests/review-compact-contract.test.ts +5 -0
  98. package/tests/review-consent-latch.test.ts +67 -0
  99. package/tests/review-controller-native-recovery.test.ts +180 -5
  100. package/tests/review-controller-native-routing.test.ts +632 -18
  101. package/tests/review-controller-workspace-root.test.ts +26 -6
  102. package/tests/review-controller.test.ts +1 -1
  103. package/tests/review-correction-lifecycle.test.ts +174 -0
  104. package/tests/review-integration-v2.test.ts +548 -0
  105. package/tests/runtime-harness.mjs +211 -12
  106. package/tests/support/native-binary-gate.ts +86 -0
  107. package/tests/verify-package-files.test.ts +119 -0
  108. package/lib/review-integration-v1.ts +0 -795
  109. package/runtime/review-integration-v1.mjs +0 -796
  110. package/tests/native-review-integration-v1.test.ts +0 -102
  111. package/tests/review-integration-v1.test.ts +0 -530
@@ -0,0 +1,321 @@
1
+ {
2
+ "schema": "gentle-ai.review-integration.capabilities/v1.5",
3
+ "contract": "gentle-ai.review-integration/v1",
4
+ "protocol": {
5
+ "major": 1,
6
+ "minor": 5
7
+ },
8
+ "package": {
9
+ "name": "gentle-ai",
10
+ "version": "2.1.7-test",
11
+ "release_channel": "prerelease"
12
+ },
13
+ "build": {
14
+ "id": "sha256:444a9f0608eb22c4697fd2092f3afcfab040c0918343e7e04087730fd33fd5e1",
15
+ "go_version": "go1.25.10",
16
+ "module_version": "v2.1.7",
17
+ "vcs": "git",
18
+ "vcs_revision": "0123456789abcdef0123456789abcdef01234567",
19
+ "vcs_time": "2026-07-15T18:00:00Z",
20
+ "vcs_modified": "false"
21
+ },
22
+ "executable": {
23
+ "sha256": "sha256:dcc846103b16d365eaeeb9d7f289c23fc4f2897f23def1cb3fe7f05557b64705",
24
+ "evidence": "self-reported",
25
+ "verification": "compare-with-published-manifest"
26
+ },
27
+ "operations": [
28
+ "review.bind_sdd",
29
+ "review.capabilities",
30
+ "review.finalize",
31
+ "review.repair",
32
+ "review.retry_final_verification",
33
+ "review.start",
34
+ "review.status",
35
+ "review.validate"
36
+ ],
37
+ "gates": [
38
+ "post-apply",
39
+ "pre-commit",
40
+ "pre-push",
41
+ "pre-pr",
42
+ "release"
43
+ ],
44
+ "projections": [
45
+ "staged",
46
+ "workspace"
47
+ ],
48
+ "schemas": [
49
+ "gentle-ai.review-admitted-result/v1",
50
+ "gentle-ai.review-artifact-subject/v1",
51
+ "gentle-ai.review-authority-repair-assessment/v1",
52
+ "gentle-ai.review-authority-status/v1",
53
+ "gentle-ai.review-gate-request/v1",
54
+ "gentle-ai.review-integration.capabilities/v1.5",
55
+ "gentle-ai.review-integration.failure/v1",
56
+ "gentle-ai.review-final-verification-incident/v1",
57
+ "gentle-ai.review-integration.operation/v1",
58
+ "gentle-ai.review-integration.projection/v1",
59
+ "gentle-ai.review-integration.repair/v1",
60
+ "gentle-ai.review-integration.start/v2",
61
+ "gentle-ai.review-integration.status/v2",
62
+ "gentle-ai.review-receipt/v1",
63
+ "gentle-ai.review-receipt/v2",
64
+ "gentle-ai.review-result-artifact/v2",
65
+ "gentle-ai.review-targeted-validation-request/v1",
66
+ "gentle-ai.review-verification-evidence/v2",
67
+ "https://gentle-ai.dev/schema/review/refuter/v1",
68
+ "https://gentle-ai.dev/schema/review/reviewer/v1",
69
+ "https://gentle-ai.dev/schema/review/validator/v1"
70
+ ],
71
+ "features": {
72
+ "mandatory": [
73
+ {
74
+ "name": "compact_v2_authority",
75
+ "supported": true,
76
+ "requires": []
77
+ },
78
+ {
79
+ "name": "exact_receipt_replay",
80
+ "supported": true,
81
+ "requires": [
82
+ "compact_v2_authority"
83
+ ]
84
+ },
85
+ {
86
+ "name": "five_delivery_gates",
87
+ "supported": true,
88
+ "requires": [
89
+ "compact_v2_authority"
90
+ ]
91
+ },
92
+ {
93
+ "name": "immutable_snapshot",
94
+ "supported": true,
95
+ "requires": []
96
+ },
97
+ {
98
+ "name": "legacy_v1_target_scoped_read_only",
99
+ "supported": true,
100
+ "requires": [
101
+ "target_scoped_status"
102
+ ]
103
+ },
104
+ {
105
+ "name": "repository_independent_capabilities",
106
+ "supported": true,
107
+ "requires": []
108
+ },
109
+ {
110
+ "name": "restart_safe_projection",
111
+ "supported": true,
112
+ "requires": [
113
+ "target_scoped_status"
114
+ ]
115
+ },
116
+ {
117
+ "name": "sdd_receipt_binding",
118
+ "supported": true,
119
+ "requires": [
120
+ "compact_v2_authority"
121
+ ]
122
+ },
123
+ {
124
+ "name": "target_scoped_status",
125
+ "supported": true,
126
+ "requires": [
127
+ "repository_independent_capabilities"
128
+ ]
129
+ },
130
+ {
131
+ "name": "uniform_failure_envelope",
132
+ "supported": true,
133
+ "requires": [
134
+ "repository_independent_capabilities"
135
+ ]
136
+ }
137
+ ],
138
+ "optional": [
139
+ {
140
+ "name": "base_ref_workspace_overlay",
141
+ "supported": true,
142
+ "requires": [
143
+ "immutable_snapshot",
144
+ "restart_safe_projection"
145
+ ]
146
+ },
147
+ {
148
+ "name": "bounded_process_waits",
149
+ "supported": true,
150
+ "requires": [
151
+ "uniform_failure_envelope"
152
+ ]
153
+ },
154
+ {
155
+ "name": "classified_authority_repair",
156
+ "supported": true,
157
+ "requires": [
158
+ "native_next_transition",
159
+ "uniform_failure_envelope"
160
+ ]
161
+ },
162
+ {
163
+ "name": "exact_gate_receipt_discovery",
164
+ "supported": true,
165
+ "requires": [
166
+ "five_delivery_gates"
167
+ ]
168
+ },
169
+ {
170
+ "name": "native_frozen_candidate_context",
171
+ "supported": true,
172
+ "requires": [
173
+ "immutable_snapshot"
174
+ ]
175
+ },
176
+ {
177
+ "name": "native_low_risk_verification",
178
+ "supported": true,
179
+ "requires": [
180
+ "compact_v2_authority"
181
+ ]
182
+ },
183
+ {
184
+ "name": "native_next_transition",
185
+ "supported": true,
186
+ "requires": [
187
+ "target_scoped_status"
188
+ ]
189
+ },
190
+ {
191
+ "name": "one_shot_final_verification_retry",
192
+ "supported": true,
193
+ "requires": [
194
+ "compact_v2_authority",
195
+ "exact_receipt_replay",
196
+ "native_next_transition"
197
+ ]
198
+ },
199
+ {
200
+ "name": "opaque_repository_context",
201
+ "supported": true,
202
+ "requires": [
203
+ "compact_v2_authority",
204
+ "native_next_transition"
205
+ ]
206
+ },
207
+ {
208
+ "name": "outcome_bound_verification_evidence",
209
+ "supported": true,
210
+ "requires": [
211
+ "compact_v2_authority",
212
+ "native_next_transition"
213
+ ]
214
+ },
215
+ {
216
+ "name": "provider_artifact_admission",
217
+ "supported": true,
218
+ "requires": [
219
+ "compact_v2_authority",
220
+ "native_frozen_candidate_context",
221
+ "opaque_repository_context"
222
+ ]
223
+ },
224
+ {
225
+ "name": "provider_targeted_validation_request",
226
+ "supported": true,
227
+ "requires": [
228
+ "compact_v2_authority",
229
+ "native_next_transition"
230
+ ]
231
+ },
232
+ {
233
+ "name": "recovered_correction_evidence",
234
+ "supported": true,
235
+ "requires": [
236
+ "compact_v2_authority",
237
+ "provider_targeted_validation_request"
238
+ ]
239
+ },
240
+ {
241
+ "name": "risk_reasons",
242
+ "supported": true,
243
+ "requires": [
244
+ "repository_independent_capabilities"
245
+ ]
246
+ },
247
+ {
248
+ "name": "scope_change_diagnostics",
249
+ "supported": true,
250
+ "requires": [
251
+ "uniform_failure_envelope"
252
+ ]
253
+ },
254
+ {
255
+ "name": "validating_result_reopen",
256
+ "supported": true,
257
+ "requires": [
258
+ "compact_v2_authority",
259
+ "provider_artifact_admission"
260
+ ]
261
+ }
262
+ ]
263
+ },
264
+ "bootstrap": {
265
+ "command": "gentle-ai review status --cwd \u003crepo\u003e --contract gentle-ai.review-integration/v1 --next-transition",
266
+ "target_selector_variants": [
267
+ {
268
+ "target_type": "staged",
269
+ "arguments": [
270
+ "--projection",
271
+ "staged"
272
+ ]
273
+ },
274
+ {
275
+ "target_type": "base_ref",
276
+ "arguments": [
277
+ "--base-ref",
278
+ "\u003cref\u003e"
279
+ ]
280
+ },
281
+ {
282
+ "target_type": "workspace_overlay_base_ref",
283
+ "arguments": [
284
+ "--workspace-overlay",
285
+ "--base-ref",
286
+ "\u003cref\u003e"
287
+ ]
288
+ },
289
+ {
290
+ "target_type": "workspace_overlay_base_tree",
291
+ "arguments": [
292
+ "--workspace-overlay",
293
+ "--base-tree",
294
+ "\u003ctree\u003e"
295
+ ]
296
+ }
297
+ ],
298
+ "required_feature": "native_next_transition",
299
+ "unsupported_outcome": "unsupported-capability",
300
+ "parent_only": true
301
+ },
302
+ "compatibility": {
303
+ "minimum_protocol_major": 1,
304
+ "maximum_protocol_major": 1,
305
+ "additive_minor_policy": "optional-fields-only",
306
+ "unknown_mandatory": "reject",
307
+ "unknown_optional": "ignore",
308
+ "modes": [
309
+ "compact-v2",
310
+ "legacy-v1"
311
+ ],
312
+ "legacy_window": {
313
+ "mode": "legacy-v1",
314
+ "state": "active",
315
+ "read_only": true,
316
+ "deprecation_started": true,
317
+ "removal": "not-scheduled",
318
+ "minimum_compatibility_releases": 1
319
+ }
320
+ }
321
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "schema": "gentle-ai.review-integration.consent/v1",
3
+ "contract": "gentle-ai.review-integration/v1",
4
+ "operation": "review.start",
5
+ "action": "consent_required",
6
+ "blocking": true,
7
+ "target_identity": "sha256:136dc6556e3bac8c2e7f7af7cc5ec361f449e383a997638128729059fefa06a5",
8
+ "projection": "workspace",
9
+ "risk_level": "high",
10
+ "changed_files": 1,
11
+ "changed_lines": 1,
12
+ "headline": "Gentle AI can review this change before you call it done.",
13
+ "reason": "this change gets a deeper review because it touches shell scripting in scripts/deploy.sh.",
14
+ "value": "Reviewing takes a bit longer, and it makes the result substantially safer.",
15
+ "risk_evidence": [
16
+ "shell scripting in scripts/deploy.sh"
17
+ ],
18
+ "choices": [
19
+ {
20
+ "answer": "granted",
21
+ "label": "Run the review now",
22
+ "effect": "Reviews this exact frozen candidate now; nothing is granted for later candidates, so each later medium- or high-risk candidate asks again.",
23
+ "invocation": "gentle-ai review start --contract gentle-ai.review-integration/v1 --cwd /repo --target sha256:136dc6556e3bac8c2e7f7af7cc5ec361f449e383a997638128729059fefa06a5 --projection workspace --lineage review-consent-fixture --consent granted"
24
+ },
25
+ {
26
+ "answer": "declined",
27
+ "label": "Not now, just this once",
28
+ "effect": "Skips the review for this candidate only; nothing is persisted and the next candidate is asked again. This is not the kill switch.",
29
+ "invocation": "gentle-ai review start --contract gentle-ai.review-integration/v1 --cwd /repo --target sha256:136dc6556e3bac8c2e7f7af7cc5ec361f449e383a997638128729059fefa06a5 --projection workspace --lineage review-consent-fixture --consent declined"
30
+ }
31
+ ],
32
+ "off_path": {
33
+ "note": "To turn reviews off for good, run 'gentle-ai review mode disable'.",
34
+ "command": "gentle-ai review mode disable"
35
+ }
36
+ }
@@ -0,0 +1 @@
1
+ {"schema":"gentle-ai.review-final-verification-incident/v1","class":"procedural_tooling_failure","lineage_id":"review-final-verification-example","terminal_revision":"sha256:1111111111111111111111111111111111111111111111111111111111111111","validating_revision":"sha256:2222222222222222222222222222222222222222222222222222222222222222","target_identity":"sha256:3333333333333333333333333333333333333333333333333333333333333333","failed_evidence_hash":"sha256:4444444444444444444444444444444444444444444444444444444444444444","finalize_request_digest":"sha256:5555555555555555555555555555555555555555555555555555555555555555"}
@@ -43,6 +43,10 @@
43
43
  "action": "review.reconcile-authority",
44
44
  "reason_code": "forbidden_finalize_requires_target_status"
45
45
  },
46
+ {
47
+ "action": "review.reconcile-authority-batch",
48
+ "reason_code": "forbidden_finalize_requires_target_status"
49
+ },
46
50
  {
47
51
  "action": "review.recover",
48
52
  "reason_code": "forbidden_finalize_requires_target_status"
@@ -0,0 +1,54 @@
1
+ {
2
+ "schema": "gentle-ai.review-integration.repair/v1",
3
+ "contract": "gentle-ai.review-integration/v1",
4
+ "operation": "review.repair",
5
+ "mode": "preflight",
6
+ "assessment": {
7
+ "schema": "gentle-ai.review-authority-repair-assessment/v1",
8
+ "status": "eligible",
9
+ "class": "legacy_v1_historical_alias",
10
+ "cause": "unsupported_historical_v1_operation_alias",
11
+ "disposition": "quarantine-approved-historical-alias",
12
+ "repository_binding": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
13
+ "candidate": {
14
+ "lineage_id": "historical-alias",
15
+ "revision": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
16
+ "chain_identity": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
17
+ "event_count": 6,
18
+ "alias_event_count": 2,
19
+ "operations": [
20
+ "review/complete-fix",
21
+ "review/validate-fix"
22
+ ]
23
+ },
24
+ "counts": {
25
+ "lineages": 1,
26
+ "compact_lineages": 0,
27
+ "legacy_lineages": 1,
28
+ "events": 6,
29
+ "bytes": 4096,
30
+ "eligible_candidates": 1,
31
+ "unsupported_lineages": 0,
32
+ "conflicts": 0
33
+ },
34
+ "supported_operations": [
35
+ "review/complete-fix",
36
+ "review/validate-fix"
37
+ ],
38
+ "authorization_schema": "gentle-ai.review-repair-authorization/v1"
39
+ },
40
+ "provider_inputs": {
41
+ "class": "legacy_v1_historical_alias",
42
+ "lineage_id": "historical-alias",
43
+ "expected_revision": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
44
+ "cause": "unsupported_historical_v1_operation_alias",
45
+ "disposition": "quarantine-approved-historical-alias",
46
+ "repository_binding": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
47
+ "authorization_schema": "gentle-ai.review-repair-authorization/v1"
48
+ },
49
+ "required_inputs": [
50
+ "actor",
51
+ "reason",
52
+ "maintainer_authorization"
53
+ ]
54
+ }
@@ -0,0 +1,97 @@
1
+ {
2
+ "schema": "gentle-ai.review-integration.start/v2",
3
+ "contract": "gentle-ai.review-integration/v1",
4
+ "operation": "review.start",
5
+ "action": "created",
6
+ "lenses_required": true,
7
+ "lineage_id": "review-start-fixture",
8
+ "state": "reviewing",
9
+ "risk_level": "high",
10
+ "selected_lenses": [
11
+ "review-risk",
12
+ "review-resilience",
13
+ "review-readability",
14
+ "review-reliability"
15
+ ],
16
+ "projection": "workspace",
17
+ "changed_files": 1,
18
+ "changed_lines": 1,
19
+ "correction_budget": 1,
20
+ "risk_reasons": [
21
+ {
22
+ "code": "shell_source",
23
+ "signal": "shell_process",
24
+ "path": "scripts/deploy.sh"
25
+ }
26
+ ],
27
+ "artifact_subjects": [
28
+ {
29
+ "schema": "gentle-ai.review-artifact-subject/v1",
30
+ "subject_hash": "sha256:38a55988f6b3ae6f520690d52fd29255f425a4048b0f8694de3a80c5daf265cd",
31
+ "lineage_id": "review-start-fixture",
32
+ "authority_revision": "sha256:3411d049f39e891b50adfc76473199b473927d10245a227a3bc967eae0caf68c",
33
+ "target_identity": "sha256:136dc6556e3bac8c2e7f7af7cc5ec361f449e383a997638128729059fefa06a5",
34
+ "candidate_diff_sha256": "sha256:c18ffcaf6f41a8cd5f3399a10355eb8de3e5eb561cb65cb551ea93bdf4df921b",
35
+ "changed_path_manifest_sha256": "sha256:049219ea30e21c409608ea8527e65bcc6774d764363031a6cf0cb05e35c734ef",
36
+ "lens": "review-risk",
37
+ "selected_order": 0
38
+ },
39
+ {
40
+ "schema": "gentle-ai.review-artifact-subject/v1",
41
+ "subject_hash": "sha256:06d86f981a8c0b16c2179696d467c8157580214ad72c952adee423fe596d2c21",
42
+ "lineage_id": "review-start-fixture",
43
+ "authority_revision": "sha256:3411d049f39e891b50adfc76473199b473927d10245a227a3bc967eae0caf68c",
44
+ "target_identity": "sha256:136dc6556e3bac8c2e7f7af7cc5ec361f449e383a997638128729059fefa06a5",
45
+ "candidate_diff_sha256": "sha256:c18ffcaf6f41a8cd5f3399a10355eb8de3e5eb561cb65cb551ea93bdf4df921b",
46
+ "changed_path_manifest_sha256": "sha256:049219ea30e21c409608ea8527e65bcc6774d764363031a6cf0cb05e35c734ef",
47
+ "lens": "review-resilience",
48
+ "selected_order": 1
49
+ },
50
+ {
51
+ "schema": "gentle-ai.review-artifact-subject/v1",
52
+ "subject_hash": "sha256:beacbf1eed52620ef7686087f8944cbc2304d71abf13281267efe9e4de20fb1e",
53
+ "lineage_id": "review-start-fixture",
54
+ "authority_revision": "sha256:3411d049f39e891b50adfc76473199b473927d10245a227a3bc967eae0caf68c",
55
+ "target_identity": "sha256:136dc6556e3bac8c2e7f7af7cc5ec361f449e383a997638128729059fefa06a5",
56
+ "candidate_diff_sha256": "sha256:c18ffcaf6f41a8cd5f3399a10355eb8de3e5eb561cb65cb551ea93bdf4df921b",
57
+ "changed_path_manifest_sha256": "sha256:049219ea30e21c409608ea8527e65bcc6774d764363031a6cf0cb05e35c734ef",
58
+ "lens": "review-readability",
59
+ "selected_order": 2
60
+ },
61
+ {
62
+ "schema": "gentle-ai.review-artifact-subject/v1",
63
+ "subject_hash": "sha256:61a10b133e3f7a8ccad1d0f1d58989df75d2330ad530690137de625bfd10eec8",
64
+ "lineage_id": "review-start-fixture",
65
+ "authority_revision": "sha256:3411d049f39e891b50adfc76473199b473927d10245a227a3bc967eae0caf68c",
66
+ "target_identity": "sha256:136dc6556e3bac8c2e7f7af7cc5ec361f449e383a997638128729059fefa06a5",
67
+ "candidate_diff_sha256": "sha256:c18ffcaf6f41a8cd5f3399a10355eb8de3e5eb561cb65cb551ea93bdf4df921b",
68
+ "changed_path_manifest_sha256": "sha256:049219ea30e21c409608ea8527e65bcc6774d764363031a6cf0cb05e35c734ef",
69
+ "lens": "review-reliability",
70
+ "selected_order": 3
71
+ }
72
+ ],
73
+ "candidate_diff": {
74
+ "encoding": "base64",
75
+ "data": "ZGlmZiAtLWdpdCBhL3NjcmlwdHMvZGVwbG95LnNoIGIvc2NyaXB0cy9kZXBsb3kuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhiM2FjMTI4ZmJiZWFmZmY0OWEzMjYxMDVmOGVhYzg1YzZjNzdhMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvZGVwbG95LnNoCkBAIC0wLDAgKzEgQEAKK2VjaG8gZGVwbG95Cg==",
76
+ "sha256": "sha256:c18ffcaf6f41a8cd5f3399a10355eb8de3e5eb561cb65cb551ea93bdf4df921b",
77
+ "byte_size": 226
78
+ },
79
+ "changed_path_manifest": [
80
+ {
81
+ "path": "scripts/deploy.sh",
82
+ "status": "A",
83
+ "old_mode": "000000",
84
+ "new_mode": "100644",
85
+ "deleted": false,
86
+ "type_changed": false,
87
+ "mode_only": false,
88
+ "intended_untracked": true
89
+ }
90
+ ],
91
+ "repository_context": {
92
+ "capability": "review.opaque_repository_context",
93
+ "handle": "rctx1_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
94
+ "revision": "sha256:3411d049f39e891b50adfc76473199b473927d10245a227a3bc967eae0caf68c",
95
+ "target_identity": "sha256:136dc6556e3bac8c2e7f7af7cc5ec361f449e383a997638128729059fefa06a5"
96
+ }
97
+ }
@@ -23,5 +23,29 @@
23
23
  "signal": "shell_process",
24
24
  "path": "scripts/deploy.sh"
25
25
  }
26
- ]
26
+ ],
27
+ "candidate_diff": {
28
+ "encoding": "base64",
29
+ "data": "ZGlmZiAtLWdpdCBhL3NjcmlwdHMvZGVwbG95LnNoIGIvc2NyaXB0cy9kZXBsb3kuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhiM2FjMTI4ZmJiZWFmZmY0OWEzMjYxMDVmOGVhYzg1YzZjNzdhMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvZGVwbG95LnNoCkBAIC0wLDAgKzEgQEAKK2VjaG8gZGVwbG95Cg==",
30
+ "sha256": "sha256:c18ffcaf6f41a8cd5f3399a10355eb8de3e5eb561cb65cb551ea93bdf4df921b",
31
+ "byte_size": 226
32
+ },
33
+ "changed_path_manifest": [
34
+ {
35
+ "path": "scripts/deploy.sh",
36
+ "status": "A",
37
+ "old_mode": "000000",
38
+ "new_mode": "100644",
39
+ "deleted": false,
40
+ "type_changed": false,
41
+ "mode_only": false,
42
+ "intended_untracked": true
43
+ }
44
+ ],
45
+ "repository_context": {
46
+ "capability": "review.opaque_repository_context",
47
+ "handle": "rctx1_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
48
+ "revision": "sha256:3411d049f39e891b50adfc76473199b473927d10245a227a3bc967eae0caf68c",
49
+ "target_identity": "sha256:136dc6556e3bac8c2e7f7af7cc5ec361f449e383a997638128729059fefa06a5"
50
+ }
27
51
  }
@@ -62,6 +62,10 @@
62
62
  "action": "review.reconcile-authority",
63
63
  "reason_code": "forbidden_ambiguous_authority"
64
64
  },
65
+ {
66
+ "action": "review.reconcile-authority-batch",
67
+ "reason_code": "forbidden_ambiguous_authority"
68
+ },
65
69
  {
66
70
  "action": "review.recover",
67
71
  "reason_code": "forbidden_ambiguous_authority"
@@ -59,6 +59,10 @@
59
59
  "action": "review.reconcile-authority",
60
60
  "reason_code": "forbidden_corrupted_authority"
61
61
  },
62
+ {
63
+ "action": "review.reconcile-authority-batch",
64
+ "reason_code": "forbidden_corrupted_authority"
65
+ },
62
66
  {
63
67
  "action": "review.recover",
64
68
  "reason_code": "forbidden_corrupted_authority"
@@ -86,6 +86,10 @@
86
86
  "action": "review.reconcile-authority",
87
87
  "reason_code": "forbidden_not_selected_by_native_status"
88
88
  },
89
+ {
90
+ "action": "review.reconcile-authority-batch",
91
+ "reason_code": "forbidden_not_selected_by_native_status"
92
+ },
89
93
  {
90
94
  "action": "review.start",
91
95
  "reason_code": "forbidden_not_selected_by_native_status"
@@ -59,6 +59,10 @@
59
59
  "action": "review.reconcile-authority",
60
60
  "reason_code": "forbidden_unrelated_target"
61
61
  },
62
+ {
63
+ "action": "review.reconcile-authority-batch",
64
+ "reason_code": "forbidden_unrelated_target"
65
+ },
62
66
  {
63
67
  "action": "review.recover",
64
68
  "reason_code": "forbidden_unrelated_target"