@crown-dev-studios/review-council 0.1.0 → 0.2.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/README.md +48 -80
- package/SKILL.md +95 -209
- package/dist/cli.js +0 -0
- package/dist/orchestrate-review-council.js +88 -156
- package/dist/render-review-html.js +90 -7
- package/dist/review-session.js +4 -51
- package/package.json +25 -17
- package/references/cli-integration.md +38 -95
- package/references/output-contract.md +36 -46
- package/schemas/judge-verdict.schema.json +33 -9
- package/schemas/review-findings.schema.json +0 -8
- package/templates/judge.md +50 -10
- package/templates/report.html +47 -27
- package/templates/reviewer-export.md +2 -8
- package/dist/schemas.js +0 -67
package/templates/report.html
CHANGED
|
@@ -190,58 +190,58 @@
|
|
|
190
190
|
word-break: break-word;
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
.markdown {
|
|
193
|
+
.rendered-markdown {
|
|
194
194
|
color: var(--ink);
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
.markdown > :first-child {
|
|
197
|
+
.rendered-markdown > :first-child {
|
|
198
198
|
margin-top: 0;
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
.markdown > :last-child {
|
|
201
|
+
.rendered-markdown > :last-child {
|
|
202
202
|
margin-bottom: 0;
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
.markdown p,
|
|
206
|
-
.markdown ul,
|
|
207
|
-
.markdown ol,
|
|
208
|
-
.markdown blockquote,
|
|
209
|
-
.markdown pre {
|
|
205
|
+
.rendered-markdown p,
|
|
206
|
+
.rendered-markdown ul,
|
|
207
|
+
.rendered-markdown ol,
|
|
208
|
+
.rendered-markdown blockquote,
|
|
209
|
+
.rendered-markdown pre {
|
|
210
210
|
margin: 0 0 14px;
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
-
.markdown ul,
|
|
214
|
-
.markdown ol {
|
|
213
|
+
.rendered-markdown ul,
|
|
214
|
+
.rendered-markdown ol {
|
|
215
215
|
padding-left: 22px;
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
.markdown li + li {
|
|
218
|
+
.rendered-markdown li + li {
|
|
219
219
|
margin-top: 8px;
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
.markdown h1,
|
|
223
|
-
.markdown h2,
|
|
224
|
-
.markdown h3,
|
|
225
|
-
.markdown h4,
|
|
226
|
-
.markdown h5,
|
|
227
|
-
.markdown h6 {
|
|
222
|
+
.rendered-markdown h1,
|
|
223
|
+
.rendered-markdown h2,
|
|
224
|
+
.rendered-markdown h3,
|
|
225
|
+
.rendered-markdown h4,
|
|
226
|
+
.rendered-markdown h5,
|
|
227
|
+
.rendered-markdown h6 {
|
|
228
228
|
margin: 22px 0 12px;
|
|
229
229
|
line-height: 1.15;
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
-
.markdown h1 {
|
|
232
|
+
.rendered-markdown h1 {
|
|
233
233
|
font-size: 28px;
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
.markdown h2 {
|
|
236
|
+
.rendered-markdown h2 {
|
|
237
237
|
font-size: 22px;
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
-
.markdown h3 {
|
|
240
|
+
.rendered-markdown h3 {
|
|
241
241
|
font-size: 18px;
|
|
242
242
|
}
|
|
243
243
|
|
|
244
|
-
.markdown code {
|
|
244
|
+
.rendered-markdown code {
|
|
245
245
|
padding: 0.15em 0.4em;
|
|
246
246
|
border-radius: 6px;
|
|
247
247
|
background: var(--surface-2);
|
|
@@ -250,14 +250,14 @@
|
|
|
250
250
|
font-size: 0.92em;
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
-
.markdown pre code {
|
|
253
|
+
.rendered-markdown pre code {
|
|
254
254
|
display: block;
|
|
255
255
|
padding: 0;
|
|
256
256
|
border: 0;
|
|
257
257
|
background: transparent;
|
|
258
258
|
}
|
|
259
259
|
|
|
260
|
-
.markdown blockquote {
|
|
260
|
+
.rendered-markdown blockquote {
|
|
261
261
|
padding: 12px 16px;
|
|
262
262
|
border-left: 4px solid var(--accent);
|
|
263
263
|
background: #faf1e7;
|
|
@@ -265,7 +265,7 @@
|
|
|
265
265
|
border-radius: 0 12px 12px 0;
|
|
266
266
|
}
|
|
267
267
|
|
|
268
|
-
.markdown a {
|
|
268
|
+
.rendered-markdown a {
|
|
269
269
|
color: var(--accent);
|
|
270
270
|
}
|
|
271
271
|
|
|
@@ -316,6 +316,19 @@
|
|
|
316
316
|
color: var(--muted);
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
+
.merge-note {
|
|
320
|
+
margin-top: 6px;
|
|
321
|
+
font-size: 13px;
|
|
322
|
+
color: var(--muted);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
.contradiction-note {
|
|
326
|
+
margin-top: 6px;
|
|
327
|
+
font-size: 13px;
|
|
328
|
+
color: var(--warn);
|
|
329
|
+
font-style: italic;
|
|
330
|
+
}
|
|
331
|
+
|
|
319
332
|
@media (max-width: 720px) {
|
|
320
333
|
main {
|
|
321
334
|
padding: 18px;
|
|
@@ -336,7 +349,7 @@
|
|
|
336
349
|
<section class="grid two">
|
|
337
350
|
<article class="card">
|
|
338
351
|
<h2>Judge Summary</h2>
|
|
339
|
-
<div class="markdown">__JUDGE_SUMMARY__</div>
|
|
352
|
+
<div class="rendered-markdown">__JUDGE_SUMMARY__</div>
|
|
340
353
|
</article>
|
|
341
354
|
<article class="card">
|
|
342
355
|
<h2>Stage Status</h2>
|
|
@@ -386,14 +399,21 @@
|
|
|
386
399
|
</article>
|
|
387
400
|
</section>
|
|
388
401
|
|
|
402
|
+
<section class="grid">
|
|
403
|
+
<article class="card">
|
|
404
|
+
<h2>Follow-ups</h2>
|
|
405
|
+
<div class="rendered-markdown">__FOLLOW_UPS__</div>
|
|
406
|
+
</article>
|
|
407
|
+
</section>
|
|
408
|
+
|
|
389
409
|
<section class="grid two">
|
|
390
410
|
<article class="card">
|
|
391
411
|
<h2>Claude Report</h2>
|
|
392
|
-
<div class="markdown">__CLAUDE_REPORT__</div>
|
|
412
|
+
<div class="rendered-markdown">__CLAUDE_REPORT__</div>
|
|
393
413
|
</article>
|
|
394
414
|
<article class="card">
|
|
395
415
|
<h2>Codex Report</h2>
|
|
396
|
-
<div class="markdown">__CODEX_REPORT__</div>
|
|
416
|
+
<div class="rendered-markdown">__CODEX_REPORT__</div>
|
|
397
417
|
</article>
|
|
398
418
|
</section>
|
|
399
419
|
</main>
|
|
@@ -6,11 +6,6 @@ You are the {{REVIEWER_NAME}} reviewer inside Review Council.
|
|
|
6
6
|
|
|
7
7
|
{{TARGET}}
|
|
8
8
|
|
|
9
|
-
## Review Identity
|
|
10
|
-
|
|
11
|
-
- Review ID: `{{REVIEW_ID}}`
|
|
12
|
-
- Run ID: `{{RUN_ID}}`
|
|
13
|
-
|
|
14
9
|
## Artifact Directory
|
|
15
10
|
|
|
16
11
|
{{ARTIFACT_DIR}}
|
|
@@ -21,7 +16,8 @@ You are the {{REVIEWER_NAME}} reviewer inside Review Council.
|
|
|
21
16
|
- Do not create authoritative files in `todos/`
|
|
22
17
|
- Do not modify code unless explicitly asked elsewhere
|
|
23
18
|
- Keep all raw artifacts inside `{{ARTIFACT_DIR}}`
|
|
24
|
-
|
|
19
|
+
|
|
20
|
+
{{SKILL_REFERENCES}}
|
|
25
21
|
|
|
26
22
|
## Required Outputs
|
|
27
23
|
|
|
@@ -38,8 +34,6 @@ You are the {{REVIEWER_NAME}} reviewer inside Review Council.
|
|
|
38
34
|
|
|
39
35
|
```json
|
|
40
36
|
{
|
|
41
|
-
"review_id": "{{REVIEW_ID}}",
|
|
42
|
-
"run_id": "{{RUN_ID}}",
|
|
43
37
|
"reviewer": "{{REVIEWER_NAME_LOWER}}",
|
|
44
38
|
"status": "complete",
|
|
45
39
|
"completed_at": "ISO-8601",
|
package/dist/schemas.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
const fileRef = z.object({
|
|
3
|
-
path: z.string(),
|
|
4
|
-
line: z.number().int().min(1).optional(),
|
|
5
|
-
}).strict();
|
|
6
|
-
const finding = z.object({
|
|
7
|
-
id: z.string(),
|
|
8
|
-
title: z.string(),
|
|
9
|
-
severity: z.enum(["p1", "p2", "p3"]),
|
|
10
|
-
confidence: z.enum(["high", "medium", "low"]),
|
|
11
|
-
category: z.string(),
|
|
12
|
-
description: z.string(),
|
|
13
|
-
evidence: z.string(),
|
|
14
|
-
recommended_fix: z.string(),
|
|
15
|
-
files: z.array(fileRef),
|
|
16
|
-
}).strict();
|
|
17
|
-
export const reviewFindingsSchema = z.object({
|
|
18
|
-
review_id: z.string(),
|
|
19
|
-
run_id: z.string(),
|
|
20
|
-
reviewer: z.enum(["claude", "codex", "other"]),
|
|
21
|
-
target: z.string(),
|
|
22
|
-
generated_at: z.iso.datetime(),
|
|
23
|
-
summary: z.string(),
|
|
24
|
-
findings: z.array(finding),
|
|
25
|
-
}).strict();
|
|
26
|
-
const verdictFinding = z.object({
|
|
27
|
-
title: z.string(),
|
|
28
|
-
status: z.enum(["confirmed", "contested", "rejected"]),
|
|
29
|
-
reason: z.string(),
|
|
30
|
-
reviewer_ids: z.array(z.string()).optional(),
|
|
31
|
-
final_priority: z.enum(["p1", "p2", "p3"]).optional(),
|
|
32
|
-
}).strict();
|
|
33
|
-
const todoRecommendation = z.object({
|
|
34
|
-
title: z.string(),
|
|
35
|
-
priority: z.enum(["p1", "p2", "p3"]),
|
|
36
|
-
reason: z.string(),
|
|
37
|
-
}).strict();
|
|
38
|
-
export const judgeVerdictSchema = z.object({
|
|
39
|
-
review_id: z.string(),
|
|
40
|
-
run_id: z.string(),
|
|
41
|
-
target: z.string(),
|
|
42
|
-
generated_at: z.iso.datetime(),
|
|
43
|
-
overall_verdict: z.enum(["approve", "needs-fixes", "blocked", "incomplete"]),
|
|
44
|
-
summary_markdown: z.string(),
|
|
45
|
-
confirmed_findings: z.array(verdictFinding),
|
|
46
|
-
contested_findings: z.array(verdictFinding),
|
|
47
|
-
rejected_findings: z.array(verdictFinding),
|
|
48
|
-
todo_recommendations: z.array(todoRecommendation),
|
|
49
|
-
}).strict();
|
|
50
|
-
export const reviewDoneSchema = z.object({
|
|
51
|
-
review_id: z.string(),
|
|
52
|
-
run_id: z.string(),
|
|
53
|
-
reviewer: z.enum(["claude", "codex", "other"]),
|
|
54
|
-
status: z.literal("complete"),
|
|
55
|
-
completed_at: z.iso.datetime(),
|
|
56
|
-
finding_count: z.number().int().min(0),
|
|
57
|
-
}).strict();
|
|
58
|
-
export const judgeDoneSchema = z.object({
|
|
59
|
-
review_id: z.string(),
|
|
60
|
-
run_id: z.string(),
|
|
61
|
-
reviewer: z.literal("judge"),
|
|
62
|
-
status: z.literal("complete"),
|
|
63
|
-
completed_at: z.iso.datetime(),
|
|
64
|
-
confirmed_count: z.number().int().min(0),
|
|
65
|
-
contested_count: z.number().int().min(0),
|
|
66
|
-
rejected_count: z.number().int().min(0),
|
|
67
|
-
}).strict();
|