@bendyline/gilde 0.1.65 → 0.1.67

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.
@@ -0,0 +1,602 @@
1
+ {
2
+ "id": "pull-request-review",
3
+ "name": "Pull Request Review",
4
+ "description": "Review a GitHub pull request from a complete, launch-time local mirror rather than a context-sized API response. The runtime resolves the PR, materializes one untruncated patch record per changed path, and publishes adaptive bounded batches plus compact scope metadata. Each child reviewer receives one exact batch. Service-observed full-read evidence and per-file observations gate its progress; the runtime publishes coverage shards, and a merge gate holds the run to the whole corpus. The final verdict stays local and cites verified code and checks.",
5
+ "basedOn": {
6
+ "name": "Gezel Code Review",
7
+ "url": "https://github.com/bendyline/gezel"
8
+ },
9
+ "entryStepId": "scope",
10
+ "triggers": [
11
+ "review this pr",
12
+ "review the current pr",
13
+ "review this pull request",
14
+ "pr review",
15
+ "review the github pull request"
16
+ ],
17
+ "requirements": [
18
+ {
19
+ "kind": "github"
20
+ }
21
+ ],
22
+ "toolsets": [
23
+ {
24
+ "toolsetId": "github",
25
+ "optional": true,
26
+ "autoAllow": true,
27
+ "reason": "read CI/check status and perform targeted PR verification"
28
+ }
29
+ ],
30
+ "connectors": [
31
+ {
32
+ "typeId": "github-pulls",
33
+ "reason": "materialize the selected pull request as a complete, chunk-readable local corpus"
34
+ }
35
+ ],
36
+ "paramSchema": {
37
+ "type": "object",
38
+ "properties": {
39
+ "workPath": {
40
+ "type": "string",
41
+ "title": "Working folder",
42
+ "description": "Per-task working folder in the artifacts drawer. Defaults to this task's own folder so runs never collide; override with a stable name when you deliberately want runs to share files.",
43
+ "default": "{{task.dir}}"
44
+ },
45
+ "number": {
46
+ "type": "number",
47
+ "title": "Pull request number",
48
+ "description": "Optional PR number. Leave blank to use the open PR whose head matches the project's checked-out branch."
49
+ },
50
+ "focus": {
51
+ "type": "string",
52
+ "title": "Review focus",
53
+ "default": "general correctness",
54
+ "description": "Optional area to emphasize, e.g. security, performance, or tests."
55
+ },
56
+ "intensity": {
57
+ "type": "string",
58
+ "title": "Intensity",
59
+ "enum": [
60
+ "low",
61
+ "medium",
62
+ "high"
63
+ ],
64
+ "default": "medium",
65
+ "squisq": {
66
+ "control": "segmented"
67
+ },
68
+ "description": "How deep to go on each changed-file batch. Coverage remains complete at every intensity."
69
+ }
70
+ }
71
+ },
72
+ "steps": [
73
+ {
74
+ "id": "scope",
75
+ "name": "Map the pull request corpus",
76
+ "description": "Read the launch-time PR overview and compact runtime scope evidence, capture CI/check status, and let the gate verify complete fanout batches mechanically.",
77
+ "prompt": "The runtime publishes complete PR batches and a compact scope summary at step entry, then advances automatically once the full-corpus batch gate approves. If this step is handed to you, deterministic setup or the gate failed. Read the named task diagnostic and {{workPath}}/pr-review/scope-data.json; never invent, rewrite, or truncate the manifest or batches. Ask for help if the source PR snapshot or runtime script is unavailable. Do not edit source or post to GitHub.",
78
+ "suggestedRole": "reviewer",
79
+ "toolPolicy": {
80
+ "disallowBuiltinToolsets": [
81
+ "ai-apps",
82
+ "archives",
83
+ "audio",
84
+ "browser-automation",
85
+ "craftbooks",
86
+ "data-tables",
87
+ "entity-intel",
88
+ "image-intel",
89
+ "images",
90
+ "role-delegation",
91
+ "role-delegation-escalation",
92
+ "security-intel",
93
+ "team-management",
94
+ "videos",
95
+ "web",
96
+ "workspace-fs-write"
97
+ ],
98
+ "disallowToolsets": [
99
+ "@playwright/mcp"
100
+ ],
101
+ "outputMedium": "task-note"
102
+ },
103
+ "onEnter": [
104
+ {
105
+ "name": "publishCorpusBatches",
106
+ "scope": "standard",
107
+ "inputs": {
108
+ "corpusDir": "{{corpusScope}}",
109
+ "outFile": "{{workPath}}/pr-review/batches.json"
110
+ }
111
+ },
112
+ {
113
+ "name": "summarizePullRequestCorpus",
114
+ "scope": "standard",
115
+ "inputs": {
116
+ "manifestFile": "{{corpusScope}}/attachments/001/pr-{{number}}-files.json",
117
+ "batchesFile": "{{workPath}}/pr-review/batches.json",
118
+ "outFile": "{{workPath}}/pr-review/scope-data.json"
119
+ },
120
+ "autoAdvanceOnSuccess": true
121
+ }
122
+ ],
123
+ "advanceWhen": {
124
+ "file": "{{workPath}}/pr-review/batches.json",
125
+ "minBytes": 2,
126
+ "sniff": "json-valid",
127
+ "artifact": true
128
+ },
129
+ "gate": {
130
+ "at": "completion",
131
+ "checks": [
132
+ {
133
+ "kind": "corpusBatches",
134
+ "file": "{{workPath}}/pr-review/batches.json",
135
+ "corpusDir": "{{corpusScope}}",
136
+ "artifact": true
137
+ }
138
+ ],
139
+ "onReject": "scope",
140
+ "maxAttempts": 3
141
+ },
142
+ "next": "scan"
143
+ },
144
+ {
145
+ "id": "scan",
146
+ "name": "Fan the batches out to the review crew",
147
+ "description": "Spawn one child reviewer per published batch. The runtime performs the fanout with no model turn; the crew is the work.",
148
+ "prompt": "The runtime spawns one child reviewer per entry in `{{workPath}}/pr-review/batches.json`, each in its own session holding only that batch's records. No turn is needed here.",
149
+ "suggestedRole": "reviewer",
150
+ "toolPolicy": {
151
+ "disallowBuiltinToolsets": [
152
+ "ai-apps",
153
+ "archives",
154
+ "artifacts",
155
+ "audio",
156
+ "browser-automation",
157
+ "code-execution",
158
+ "craftbooks",
159
+ "data-tables",
160
+ "entity-intel",
161
+ "image-intel",
162
+ "images",
163
+ "role-delegation",
164
+ "role-delegation-escalation",
165
+ "security-intel",
166
+ "team-management",
167
+ "videos",
168
+ "web",
169
+ "workspace-fs-write"
170
+ ],
171
+ "disallowToolsets": [
172
+ "@playwright/mcp"
173
+ ],
174
+ "outputMedium": "none"
175
+ },
176
+ "advanceWhen": {
177
+ "file": "{{workPath}}/pr-review/fanout.md",
178
+ "minBytes": 1,
179
+ "sniff": "nonempty",
180
+ "artifact": true
181
+ },
182
+ "next": "collect",
183
+ "spawnFanout": true
184
+ },
185
+ {
186
+ "id": "collect",
187
+ "name": "Merge the batch ledgers",
188
+ "description": "Wait for the crew while the runtime deterministically rebuilds the run-wide ledger from exact per-batch coverage shards, then prove both corpus completeness and shard provenance.",
189
+ "prompt": "The runtime has rebuilt `{{workPath}}/pr-review-coverage.json` from every valid `coverage-N.json` shard currently on disk. Do not write or edit that ledger yourself — it is deliberately runtime-owned so a large pull request never has to pass hundreds of exact paths through one model tool call.\n\nCall `advance_task_step` now. The gate will compare the ledger against the complete connector corpus and independently prove that it is exactly the union of one valid shard per published batch. If reviewers are still working, it will reject and name the missing batches; on the fresh activation the runtime will rebuild the ledger again. Do not review files yourself or add paths to close the gap. A batch that remains stuck belongs in a task note, not a fabricated coverage claim.\n\nThe ledger and shards live in the project's artifacts drawer; the shipped workspace stays untouched.",
190
+ "suggestedRole": "reviewer",
191
+ "toolPolicy": {
192
+ "disallowBuiltinToolsets": [
193
+ "ai-apps",
194
+ "archives",
195
+ "audio",
196
+ "browser-automation",
197
+ "craftbooks",
198
+ "data-tables",
199
+ "entity-intel",
200
+ "image-intel",
201
+ "images",
202
+ "role-delegation",
203
+ "role-delegation-escalation",
204
+ "security-intel",
205
+ "team-management",
206
+ "videos",
207
+ "web",
208
+ "workspace-fs-write"
209
+ ],
210
+ "disallowToolsets": [
211
+ "@playwright/mcp"
212
+ ],
213
+ "outputMedium": "none"
214
+ },
215
+ "onEnter": [
216
+ {
217
+ "name": "mergeCorpusCoverage",
218
+ "scope": "standard",
219
+ "inputs": {
220
+ "batchesFile": "{{workPath}}/pr-review/batches.json",
221
+ "shardDir": "{{workPath}}/pr-review",
222
+ "outFile": "{{workPath}}/pr-review-coverage.json",
223
+ "pullRequest": "{{number}}"
224
+ }
225
+ }
226
+ ],
227
+ "advanceWhen": {
228
+ "file": "{{workPath}}/pr-review-coverage.json",
229
+ "minBytes": 2,
230
+ "sniff": "json-valid",
231
+ "artifact": true
232
+ },
233
+ "gate": {
234
+ "at": "completion",
235
+ "checks": [
236
+ {
237
+ "kind": "corpusCoverage",
238
+ "file": "{{workPath}}/pr-review-coverage.json",
239
+ "corpusDir": "{{corpusScope}}",
240
+ "artifact": true
241
+ }
242
+ ],
243
+ "scripts": [
244
+ {
245
+ "name": "checkCorpusCoverageProvenance",
246
+ "scope": "standard",
247
+ "inputs": {
248
+ "batchesFile": "{{workPath}}/pr-review/batches.json",
249
+ "shardDir": "{{workPath}}/pr-review",
250
+ "ledgerFile": "{{workPath}}/pr-review-coverage.json",
251
+ "pullRequest": "{{number}}"
252
+ }
253
+ }
254
+ ],
255
+ "onReject": "collect",
256
+ "maxAttempts": 6
257
+ },
258
+ "next": "report"
259
+ },
260
+ {
261
+ "id": "report",
262
+ "name": "Synthesize the review",
263
+ "description": "Synthesize every batch's observations into a cited report, re-verifying cross-file claims and keeping CI status distinct from code-review judgment.",
264
+ "prompt": "The coverage gate has proved that every changed path in PR #{{number}} was reviewed. At step entry, the runtime read EVERY exact observations-N.md shard from the published batch array and wrote the compact artifact `{{workPath}}/pr-review/synthesis-data.json`. Read `{{workPath}}/pr-review/scope-data.json`, the mirrored PR overview record, `{{workPath}}/pr-review-coverage.json`, and `{{workPath}}/pr-review/synthesis-data.json` with read_artifact. Do not recursively list or reread all shards: the deterministic index names every batch, supplies a bounded severity-ranked `shortlist` of proved shard findings, and carries every structured cross-file question in `verificationCandidates`. Work only from those two channels; `omittedActionable` is lower-priority triage metadata, not an instruction to reopen every shard. If a shortlisted candidate has unknown severity, open THAT exact observations file for detail; never synthesize from a subset.\n\nThe script has already removed likely non-issues from the shortlist; do not reintroduce them from batch metadata. A Findings row is reserved for a confirmed defect introduced or materially worsened by this PR: never promote \"no issue\", \"no action needed\", \"acceptable as-is\", optional hardening, a TODO/comment request, an unverified hash/value, a \"needs central verification\" placeholder, a contingent claim, a style/consistency suggestion, or a hypothetical future schema change. Resolve every entry in `verificationCandidates` against the exact checkout target named by its `verify` field, and re-check every shortlisted critical or major candidate, using `stat` and narrowly ranged `read_file`/`read_files`. For source files over 8 KB always pass startLine/endLine; do not load a full giant source file. Verify definitions and route-level enforcement before alleging that an API or guard is missing, then drop unsupported claims. State a concrete trigger and definite failure mechanism; if the best description still needs \"may\", \"might\", \"could\", \"possibly\", \"likely\", \"potentially\", \"consider\", or \"undefined behavior\", omit it. Reconcile duplicates and keep at most the eight strongest confirmed findings; checks, limitations, and follow-up ideas belong in the summary or are omitted, not in the findings table. If `github_check_status` is available, call it once when earlier CI was pending; otherwise mark CI unknown rather than browsing or guessing. Do not repeat an existing PR comment unless it still needs action and you say it was already raised.\n\nCite every finding as `path:line` using a changed path and a new-side diff line, and name its originating B- or V-number in Source. Promote a V-number only after checkout verification proves its concrete failure; silently drop disproved V candidates. Any critical or major finding requires `request-changes`; `approve` is valid only when the table has no critical or major rows. CI success is evidence that the checked revision compiled/tested as configured, but it does not erase logic findings. CI unknown/pending is not itself a code defect.\n\nWrite `{{workPath}}/pr-review.md` in ONE concise `write_artifact` call using exactly this skeleton:\n\n```\n# Pull Request Review — PR #{{number}}: <title>\n\n## Summary\n<2–6 sentences: what changes, overall risk, existing-comment coverage, and CI/check status. Say \"No findings.\" when there are none.>\n\nCoverage: <reviewed count>/<changed-file count> changed files across <batch count> batches.\n\n## Findings\n| # | Severity | Source | File | Line | Finding | Recommendation |\n|---|----------|--------|------|------|---------|----------------|\n<zero to eight confirmed findings; Source is the exact B- or V-number such as B12-2 or V12-1; severities: critical, major, minor, nit. Keep the header when there are no findings.>\n\n## Verdict\nVerdict: approve\n<or> Verdict: request-changes\n<one sentence of rationale consistent with the highest severity above>\n```\n\nDo not modify source and do not call `github_pr_comment`; the report is local. If the gate rejects, repair the named gap and rewrite the whole report. After the one successful whole-file `write_artifact` call, STOP. The runtime validates the report and advances automatically; `advance_task_step` is intentionally unavailable.\n\nThese deliverables live in the project's artifacts drawer — write them with `write_artifact` and read them back with `read_artifact`; the shipped workspace stays untouched. A pull-request review never modifies project source.",
265
+ "suggestedRole": "reviewer",
266
+ "toolPolicy": {
267
+ "disallowBuiltinToolsets": [
268
+ "ai-apps",
269
+ "archives",
270
+ "audio",
271
+ "browser-automation",
272
+ "code-execution",
273
+ "craftbooks",
274
+ "data-tables",
275
+ "entity-intel",
276
+ "image-intel",
277
+ "images",
278
+ "role-delegation",
279
+ "role-delegation-escalation",
280
+ "security-intel",
281
+ "team-management",
282
+ "videos",
283
+ "web",
284
+ "workspace-fs-write"
285
+ ],
286
+ "disallowToolsets": [
287
+ "@playwright/mcp"
288
+ ],
289
+ "allowTools": [
290
+ "read_artifact",
291
+ "read_file",
292
+ "read_files",
293
+ "stat",
294
+ "github_check_status",
295
+ "write_artifact"
296
+ ],
297
+ "outputMedium": "artifact"
298
+ },
299
+ "onEnter": [
300
+ {
301
+ "name": "summarizePullRequestObservations",
302
+ "scope": "standard",
303
+ "inputs": {
304
+ "batchesFile": "{{workPath}}/pr-review/batches.json",
305
+ "shardDir": "{{workPath}}/pr-review",
306
+ "outFile": "{{workPath}}/pr-review/synthesis-data.json"
307
+ }
308
+ }
309
+ ],
310
+ "advanceWhen": {
311
+ "file": "{{workPath}}/pr-review.md",
312
+ "minBytes": 500,
313
+ "artifact": true,
314
+ "requireChange": false
315
+ },
316
+ "gate": {
317
+ "at": "completion",
318
+ "checks": [
319
+ {
320
+ "kind": "minBytes",
321
+ "file": "{{workPath}}/pr-review.md",
322
+ "bytes": 500,
323
+ "artifact": true
324
+ },
325
+ {
326
+ "kind": "contains",
327
+ "file": "{{workPath}}/pr-review.md",
328
+ "pattern": "#\\s+Pull Request Review\\s+[—-]\\s+PR\\s+#{{number}}",
329
+ "label": "PR-numbered title",
330
+ "artifact": true
331
+ },
332
+ {
333
+ "kind": "contains",
334
+ "file": "{{workPath}}/pr-review.md",
335
+ "pattern": "Coverage:\\s*\\d+\\s*/\\s*\\d+\\s+changed files",
336
+ "label": "coverage summary",
337
+ "artifact": true
338
+ },
339
+ {
340
+ "kind": "contains",
341
+ "file": "{{workPath}}/pr-review.md",
342
+ "pattern": "##\\s+Summary[\\s\\S]*##\\s+Findings[\\s\\S]*##\\s+Verdict",
343
+ "label": "required sections",
344
+ "artifact": true
345
+ },
346
+ {
347
+ "kind": "contains",
348
+ "file": "{{workPath}}/pr-review.md",
349
+ "pattern": "Verdict:\\s*(approve|request-changes)",
350
+ "label": "verdict line",
351
+ "artifact": true
352
+ },
353
+ {
354
+ "kind": "notContains",
355
+ "file": "{{workPath}}/pr-review.md",
356
+ "pattern": "^\\|\\s*\\d+\\s*\\|[^\\n]*(?:no\\s+(?:defect|issue|finding|action\\s+needed)|acceptable\\s+as[- ]is|accept\\s+as[- ]is|worth\\s+noting|future\\s+optimization|pre[- ]existing|intentional\\s+limitation)",
357
+ "flags": "im",
358
+ "label": "findings contain only actionable defects",
359
+ "artifact": true
360
+ },
361
+ {
362
+ "kind": "notContains",
363
+ "file": "{{workPath}}/pr-review.md",
364
+ "pattern": "^\\|\\s*\\d+\\s*\\|[^\\n]*(?:needs?\\s+(?:central\\s+)?verification|central\\s+verification|not\\s+audited|contingent|undefined\\s+behavior|risk\\s+(?:is\\s+)?low|\\bmay\\b|\\bmight\\b|\\bcould\\b|potential(?:ly)?|possibly|likely|consider(?:ing)?|(?:style|quoting|backslash)\\s+(?:inconsistency|concern)|standardiz(?:e|ing)|if\\s+.{0,160}\\b(?:fails?|missing|empty|malformed|changes?|changed|removed|renamed)|hardening\\s+suggestion|best\\s+addressed\\s+in\\s+follow[- ]ups)",
365
+ "flags": "im",
366
+ "label": "findings use verified definite mechanisms",
367
+ "artifact": true
368
+ },
369
+ {
370
+ "kind": "notContains",
371
+ "file": "{{workPath}}/pr-review.md",
372
+ "pattern": "##\\s+Findings[\\s\\S]*\\|\\s*(?:critical|major)\\s*\\|[\\s\\S]*##\\s+Verdict[\\s\\S]*Verdict:\\s*approve",
373
+ "flags": "i",
374
+ "label": "verdict agrees with critical and major findings",
375
+ "artifact": true
376
+ },
377
+ {
378
+ "kind": "contains",
379
+ "file": "{{workPath}}/pr-review.md",
380
+ "pattern": "\\|\\s*#\\s*\\|\\s*Severity\\s*\\|\\s*Source\\s*\\|\\s*File\\s*\\|\\s*Line\\s*\\|\\s*Finding\\s*\\|\\s*Recommendation\\s*\\|[\\s\\S]*\\|\\s*-+\\s*\\|",
381
+ "label": "findings table header (body rows are optional when there are no findings)",
382
+ "artifact": true
383
+ }
384
+ ],
385
+ "onReject": "report",
386
+ "maxAttempts": 4
387
+ },
388
+ "next": "done"
389
+ },
390
+ {
391
+ "id": "done",
392
+ "name": "Deliver the verdict",
393
+ "description": "The complete-coverage report passed its gates. Summarize the verdict and point the user to the local evidence files.",
394
+ "prompt": "Read the artifacts `{{workPath}}/pr-review.md` and `{{workPath}}/pr-review-coverage.json` with `read_artifact`, then write one final task note with `write_task_note`: `PR #{{number}} — Verdict: <approve|request-changes> — N findings (a critical, b major, c minor, d nit) — coverage X/X` plus a one-paragraph summary. Tell the user the full local review is at `{{workPath}}/pr-review.md` in the project's artifacts drawer, the coverage ledger is beside it at `{{workPath}}/pr-review-coverage.json`, the per-batch observations are under `{{workPath}}/pr-review/`, and nothing was posted to GitHub. Then call `advance_task_step` to complete the task.",
395
+ "suggestedRole": "reviewer",
396
+ "toolPolicy": {
397
+ "allowTools": [
398
+ "read_artifact",
399
+ "write_task_note",
400
+ "advance_task_step"
401
+ ],
402
+ "disallowBuiltinToolsets": [
403
+ "ai-apps",
404
+ "archives",
405
+ "audio",
406
+ "browser-automation",
407
+ "code-execution",
408
+ "craftbooks",
409
+ "data-tables",
410
+ "entity-intel",
411
+ "image-intel",
412
+ "images",
413
+ "role-delegation",
414
+ "role-delegation-escalation",
415
+ "security-intel",
416
+ "team-management",
417
+ "videos",
418
+ "web",
419
+ "workspace-fs-write"
420
+ ],
421
+ "disallowToolsets": [
422
+ "@playwright/mcp"
423
+ ],
424
+ "outputMedium": "task-note"
425
+ },
426
+ "gate": {
427
+ "at": "completion",
428
+ "scripts": [
429
+ {
430
+ "name": "checkTaskNoteContains",
431
+ "scope": "standard",
432
+ "inputs": {
433
+ "pattern": "PR\\s*#{{number}}\\s*[—-]\\s*Verdict:"
434
+ }
435
+ }
436
+ ],
437
+ "onReject": "done",
438
+ "maxAttempts": 3
439
+ },
440
+ "terminal": true
441
+ }
442
+ ],
443
+ "spawn": {
444
+ "overFile": "{{workPath}}/pr-review/batches.json",
445
+ "overArtifact": true,
446
+ "entryStepId": "open-batch",
447
+ "steps": [
448
+ {
449
+ "id": "open-batch",
450
+ "name": "Open exact patch records for batch {{batchNumber}}",
451
+ "description": "Read every exact assigned artifact record before review writing is available; the service gate verifies full delivered line-range evidence.",
452
+ "prompt": "You own ONLY batch {{batchNumber}} of PR #{{number}}. Your assigned patch records are exactly:\n{{records}}\n\nFIRST call `read_artifacts({ paths: {{records}} })`. These are project artifacts, not checkout files. If a record is partial or tool output is truncated, a later gate-repair turn will tell you which consecutive unread line ranges to open with `read_artifact`. Do not search, list, grep, write observations, or read any other batch. After each successful read call, STOP: the runtime ends the provider turn, checks durable full-read evidence, and advances automatically once every exact record is complete. `advance_task_step` is intentionally unavailable; do not narrate, repeat the read, or request lifecycle advancement. Do not claim a read happened until the tool returned it.",
453
+ "suggestedRole": "reviewer",
454
+ "retrieval": {
455
+ "mode": "off"
456
+ },
457
+ "toolPolicy": {
458
+ "allowTools": [
459
+ "read_artifact",
460
+ "read_artifacts"
461
+ ],
462
+ "disallowBuiltinToolsets": [
463
+ "ai-apps",
464
+ "archives",
465
+ "audio",
466
+ "browser-automation",
467
+ "code-execution",
468
+ "craftbooks",
469
+ "data-tables",
470
+ "doc-intel",
471
+ "documents",
472
+ "entity-intel",
473
+ "image-intel",
474
+ "images",
475
+ "role-delegation",
476
+ "role-delegation-escalation",
477
+ "tasks",
478
+ "team-management",
479
+ "videos",
480
+ "web",
481
+ "workspace-fs-read",
482
+ "workspace-fs-write"
483
+ ],
484
+ "disallowTools": [
485
+ "list_artifacts",
486
+ "grep_artifact",
487
+ "read_doc_as_markdown",
488
+ "write_artifact"
489
+ ],
490
+ "disallowToolsets": [
491
+ "@playwright/mcp"
492
+ ],
493
+ "outputMedium": "none"
494
+ },
495
+ "gate": {
496
+ "at": "completion",
497
+ "checks": [
498
+ {
499
+ "kind": "corpusReadEvidence",
500
+ "batchesFile": "{{workPath}}/pr-review/batches.json",
501
+ "batchNumber": "{{batchNumber}}",
502
+ "artifact": true
503
+ }
504
+ ],
505
+ "onReject": "open-batch",
506
+ "maxAttempts": 8
507
+ },
508
+ "next": "review-batch",
509
+ "promptProfile": "focused"
510
+ },
511
+ {
512
+ "id": "review-batch",
513
+ "name": "Review batch {{batchNumber}} of PR #{{number}}",
514
+ "description": "Continue from the verified open-batch read in the same task session, review one small slice of the pull-request corpus, checkpoint its observations, and let the runtime publish a coverage shard.",
515
+ "prompt": "You are continuing in the SAME task session that just completed open-batch for batch {{batchNumber}} of PR #{{number}} (changed-file ordinals {{start}}–{{end}}). The patch-record tool results from that step are preserved immediately above in this conversation. Other batches belong to other reviewers. Do not edit source or post to GitHub.\n\nExact artifact records that open-batch proved you fully read:\n{{records}}\n\nChanged paths in those records:\n{{paths}}\n\n1. Analyze the patch records already returned in this session. The service has proved full delivered reads, not your conclusions. Re-open only a specific artifact line range if you need to check a detail; do not search, list, or inspect other batches.\n2. Analyze each PATCH record for correctness, security, data loss, error handling, concurrency, compatibility, and test gaps, weighted by focus {{focus}} and intensity {{intensity}}. This child intentionally has no checkout-reader tools: do not look for workspace files or invent repository evidence. When a candidate depends on another file, do not give it a B-number and do not claim it is definitely a defect. Put it in the structured Verification candidates channel described below so the checkout-aware final reviewer can resolve it after every shard lands. Avoid numbering non-issues or pre-existing unrelated quirks. If you cannot name a concrete failure mechanism and an actual changed line, record the uncertainty under Checks or as a central-verification limitation; do not turn an unknown external configuration into a numbered defect.\n3. Call `write_artifact` to write ONE whole-file artifact at {{workPath}}/pr-review/observations-{{batchNumber}}.md. Begin with a Markdown heading “Batch {{batchNumber}} — files {{start}}–{{end}}” (#, ##, or ###). Give EACH assigned path its own Markdown heading (## or ###) and say what was checked, with either concrete findings or “Verified OK”/“No patch available” and an honest limitation. Under a Findings heading, number ONLY actionable issues introduced or materially affected by this PR as B{{batchNumber}}-1 onward; cite each as `path:ACTUAL_INTEGER` where ACTUAL_INTEGER is the real new-side hunk line (for example `src/a.ts:42`), and give severity (critical/major/minor/nit), mechanism, and fix. A numbered finding must never say “no defect”, “no issue”, “no action needed”, “acceptable as-is”, “worth noting”, or describe only future hardening; put those under Checks without a B-number. Never use a bare placeholder such as `path:new-side-line` or `path:line` as the anchor. Descriptive prose such as “new-side line 42” is fine; the actual citation must still be `path:42`. Put Verified OK checks and non-issues under a separate Checks heading without B-number or severity. Do not promote pre-existing unrelated quirks to PR findings. End the artifact with a `## Verification candidates` heading and exactly one fenced `json` object shaped as `{ \"verificationCandidates\": [...] }`. Use an empty array when none exist. Each entry must contain only `id`, `path`, `line`, `severity`, `claim`, and `verify`: ids are V{{batchNumber}}-1 onward; path is an assigned changed path; line is the actual positive new-side line that raised the question; severity is critical, major, minor, or nit; claim states the concrete conditional failure; verify names the exact checkout file, symbol, route, or invariant the final reviewer must inspect. Do not duplicate a proved B-number finding in this array. The write_artifact tool replaces the whole file; rewrite it if a gate names a gap.\n4. After the one successful whole-file `write_artifact` call, STOP. The runtime ends the provider turn, validates the observations artifact and one heading per assigned path, and advances automatically when it passes. `advance_task_step` is intentionally unavailable; do not narrate or repeat the write. After approval, the runtime writes coverage-{{batchNumber}}.json from the published batch; do not create or edit that bookkeeping file yourself.\n\nThese deliverables live in the project's artifacts drawer. The checkout stays untouched.",
516
+ "suggestedRole": "reviewer",
517
+ "retrieval": {
518
+ "mode": "off"
519
+ },
520
+ "toolPolicy": {
521
+ "allowTools": [
522
+ "read_artifact",
523
+ "read_artifacts",
524
+ "write_artifact"
525
+ ],
526
+ "disallowBuiltinToolsets": [
527
+ "ai-apps",
528
+ "archives",
529
+ "audio",
530
+ "browser-automation",
531
+ "code-execution",
532
+ "craftbooks",
533
+ "data-tables",
534
+ "documents",
535
+ "entity-intel",
536
+ "image-intel",
537
+ "images",
538
+ "role-delegation",
539
+ "role-delegation-escalation",
540
+ "tasks",
541
+ "team-management",
542
+ "videos",
543
+ "web",
544
+ "workspace-fs-read",
545
+ "workspace-fs-write"
546
+ ],
547
+ "disallowTools": [
548
+ "list_artifacts",
549
+ "grep_artifact",
550
+ "read_doc_as_markdown"
551
+ ],
552
+ "disallowToolsets": [
553
+ "@playwright/mcp"
554
+ ],
555
+ "outputMedium": "artifact"
556
+ },
557
+ "advanceWhen": {
558
+ "file": "{{workPath}}/pr-review/observations-{{batchNumber}}.md",
559
+ "minBytes": 200,
560
+ "artifact": true
561
+ },
562
+ "gate": {
563
+ "at": "completion",
564
+ "checks": [
565
+ {
566
+ "kind": "minBytes",
567
+ "file": "{{workPath}}/pr-review/observations-{{batchNumber}}.md",
568
+ "bytes": 200,
569
+ "artifact": true
570
+ },
571
+ {
572
+ "kind": "corpusBatchObservations",
573
+ "batchesFile": "{{workPath}}/pr-review/batches.json",
574
+ "batchNumber": "{{batchNumber}}",
575
+ "file": "{{workPath}}/pr-review/observations-{{batchNumber}}.md",
576
+ "artifact": true,
577
+ "requireVerificationCandidates": true
578
+ }
579
+ ],
580
+ "onReject": "review-batch",
581
+ "maxAttempts": 4
582
+ },
583
+ "onExit": [
584
+ {
585
+ "name": "publishCorpusCoverageShard",
586
+ "scope": "standard",
587
+ "inputs": {
588
+ "batchesFile": "{{workPath}}/pr-review/batches.json",
589
+ "batchNumber": "{{batchNumber}}",
590
+ "outFile": "{{workPath}}/pr-review/coverage-{{batchNumber}}.json"
591
+ }
592
+ }
593
+ ],
594
+ "terminal": true,
595
+ "promptProfile": "focused"
596
+ }
597
+ ]
598
+ },
599
+ "version": "1.9.17",
600
+ "releasedAt": "2026-09-17T00:00:00Z",
601
+ "minGezelVersion": "1.26259"
602
+ }