prizmkit 1.1.93 → 1.1.95
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/bundled/VERSION.json +3 -3
- package/bundled/agents/prizm-dev-team-critic.md +57 -29
- package/bundled/agents/prizm-dev-team-dev.md +2 -14
- package/bundled/agents/prizm-dev-team-reviewer.md +40 -24
- package/bundled/dev-pipeline/assets/prizm-dev-team-integration.md +3 -2
- package/bundled/dev-pipeline/lib/heartbeat.sh +4 -50
- package/bundled/dev-pipeline/run-bugfix.sh +2 -20
- package/bundled/dev-pipeline/run-feature.sh +2 -20
- package/bundled/dev-pipeline/run-refactor.sh +2 -20
- package/bundled/dev-pipeline/templates/bootstrap-tier2.md +53 -7
- package/bundled/dev-pipeline/templates/bootstrap-tier3.md +9 -6
- package/bundled/dev-pipeline/templates/sections/phase-critic-plan-full.md +1 -1
- package/bundled/dev-pipeline/templates/sections/phase-review-full.md +1 -3
- package/bundled/dev-pipeline-windows/assets/prizm-dev-team-integration.md +3 -2
- package/bundled/dev-pipeline-windows/lib/pipeline.ps1 +6 -58
- package/bundled/dev-pipeline-windows/templates/bootstrap-tier2.md +5 -6
- package/bundled/dev-pipeline-windows/templates/bootstrap-tier3.md +9 -6
- package/bundled/dev-pipeline-windows/templates/sections/phase-critic-plan-full.md +1 -1
- package/bundled/dev-pipeline-windows/templates/sections/phase-review-full.md +1 -3
- package/bundled/rules/_rules-metadata.json +9 -3
- package/bundled/rules/general/agent-operational-rules.md +68 -0
- package/bundled/skills/_metadata.json +1 -1
- package/bundled/skills/feature-planner/SKILL.md +2 -2
- package/bundled/skills/feature-planner/references/error-recovery.md +1 -1
- package/bundled/skills/feature-planner/references/incremental-feature-planning.md +1 -1
- package/bundled/skills/feature-planner/references/new-project-planning.md +1 -1
- package/bundled/skills/feature-planner/scripts/validate-and-generate.py +17 -26
- package/bundled/skills-windows/feature-planner/SKILL.md +2 -2
- package/bundled/skills-windows/feature-planner/references/error-recovery.md +1 -1
- package/bundled/skills-windows/feature-planner/references/incremental-feature-planning.md +1 -1
- package/bundled/skills-windows/feature-planner/references/new-project-planning.md +1 -1
- package/bundled/skills-windows/feature-planner/scripts/validate-and-generate.py +17 -26
- package/bundled/team/prizm-dev-team.json +6 -6
- package/package.json +1 -1
|
@@ -11,12 +11,16 @@ Commands:
|
|
|
11
11
|
grade Generate grading results from eval runs (for npm run skill:review)
|
|
12
12
|
|
|
13
13
|
Usage:
|
|
14
|
-
python3 validate-and-generate.py validate --input .prizmkit/plans/feature-list.json [--output validated.json]
|
|
14
|
+
python3 validate-and-generate.py validate --input .prizmkit/plans/feature-list.json [--output validated.json]
|
|
15
15
|
python3 validate-and-generate.py template --output .prizmkit/plans/feature-list.json
|
|
16
|
-
python3 validate-and-generate.py generate --input draft.json --output .prizmkit/plans/feature-list.json
|
|
16
|
+
python3 validate-and-generate.py generate --input draft.json --output .prizmkit/plans/feature-list.json
|
|
17
17
|
python3 validate-and-generate.py summary --input .prizmkit/plans/feature-list.json [--format markdown|json]
|
|
18
18
|
python3 validate-and-generate.py grade --workspace /.codebuddy/skill-evals/feature-planner-workspace --iteration iteration-1
|
|
19
19
|
|
|
20
|
+
Mode is determined automatically by --output path:
|
|
21
|
+
- Output file does NOT exist -> new plan (all features must be "pending")
|
|
22
|
+
- Output file already exists -> incremental append (existing features keep their status)
|
|
23
|
+
|
|
20
24
|
Python 3.6+ required. No external dependencies.
|
|
21
25
|
"""
|
|
22
26
|
|
|
@@ -38,8 +42,6 @@ VALID_STATUSES = {"pending", "in_progress", "completed", "failed", "skipped", "s
|
|
|
38
42
|
VALID_COMPLEXITIES = {"low", "medium", "high", "critical"}
|
|
39
43
|
VALID_PRIORITIES = {"critical", "high", "medium", "low"}
|
|
40
44
|
VALID_GRANULARITIES = {"feature", "sub_feature", "auto"}
|
|
41
|
-
VALID_PLANNING_MODES = {"new", "incremental"}
|
|
42
|
-
|
|
43
45
|
FEATURE_ID_RE = re.compile(r"^F-\d{3}(-[A-Z])?$")
|
|
44
46
|
SUB_FEATURE_ID_RE = re.compile(r"^F-\d{3}-[A-Z]$")
|
|
45
47
|
|
|
@@ -156,13 +158,11 @@ def _detect_cycles(features):
|
|
|
156
158
|
# ---------------------------------------------------------------------------
|
|
157
159
|
|
|
158
160
|
|
|
159
|
-
def validate_feature_list(data,
|
|
161
|
+
def validate_feature_list(data, is_new_plan=True):
|
|
160
162
|
"""Validate a parsed feature-list data structure.
|
|
161
163
|
|
|
162
164
|
Returns a dict with keys ``valid``, ``errors``, ``warnings``, ``stats``.
|
|
163
165
|
"""
|
|
164
|
-
if planning_mode not in VALID_PLANNING_MODES:
|
|
165
|
-
planning_mode = "new"
|
|
166
166
|
|
|
167
167
|
errors = []
|
|
168
168
|
warnings = []
|
|
@@ -299,7 +299,7 @@ def validate_feature_list(data, planning_mode="new"):
|
|
|
299
299
|
label, status, ", ".join(sorted(VALID_STATUSES))
|
|
300
300
|
)
|
|
301
301
|
)
|
|
302
|
-
if
|
|
302
|
+
if is_new_plan and status and status != "pending":
|
|
303
303
|
warnings.append(
|
|
304
304
|
"{}: status is '{}' (expected 'pending' for new plans)".format(label, status)
|
|
305
305
|
)
|
|
@@ -680,7 +680,9 @@ def cmd_validate(args):
|
|
|
680
680
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
681
681
|
return 2
|
|
682
682
|
|
|
683
|
-
|
|
683
|
+
# Validate input file exists -> incremental mode (existing features keep their status)
|
|
684
|
+
is_new_plan = False
|
|
685
|
+
result = validate_feature_list(data, is_new_plan=is_new_plan)
|
|
684
686
|
|
|
685
687
|
# Print results to stdout
|
|
686
688
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
@@ -758,9 +760,11 @@ def cmd_generate(args):
|
|
|
758
760
|
for feature in data.get("features", []):
|
|
759
761
|
feature.setdefault("status", "pending")
|
|
760
762
|
|
|
761
|
-
# Validate
|
|
762
|
-
|
|
763
|
-
|
|
763
|
+
# Validate. Mode is determined by whether --output file already exists:
|
|
764
|
+
# - does NOT exist -> new plan (all features must be "pending")
|
|
765
|
+
# - already exists -> incremental append (existing features keep their status)
|
|
766
|
+
is_new_plan = not os.path.exists(args.output)
|
|
767
|
+
result = validate_feature_list(data, is_new_plan=is_new_plan)
|
|
764
768
|
|
|
765
769
|
# Output validation result
|
|
766
770
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
@@ -856,7 +860,7 @@ def cmd_grade(args):
|
|
|
856
860
|
continue
|
|
857
861
|
|
|
858
862
|
# Run validation
|
|
859
|
-
result = validate_feature_list(data,
|
|
863
|
+
result = validate_feature_list(data, is_new_plan=True)
|
|
860
864
|
|
|
861
865
|
# Create grading entry
|
|
862
866
|
grade_entry = {
|
|
@@ -916,7 +920,6 @@ def main():
|
|
|
916
920
|
epilog=(
|
|
917
921
|
"Examples:\n"
|
|
918
922
|
" %(prog)s validate --input .prizmkit/plans/feature-list.json\n"
|
|
919
|
-
" %(prog)s validate --input .prizmkit/plans/feature-list.json --mode incremental\n"
|
|
920
923
|
" %(prog)s validate --input .prizmkit/plans/feature-list.json --output validated.json\n"
|
|
921
924
|
" %(prog)s template --output .prizmkit/plans/feature-list.json\n"
|
|
922
925
|
" %(prog)s generate --input draft.json --output .prizmkit/plans/feature-list.json\n"
|
|
@@ -938,12 +941,6 @@ def main():
|
|
|
938
941
|
p_validate.add_argument(
|
|
939
942
|
"--output", help="Path to write validated output (optional)"
|
|
940
943
|
)
|
|
941
|
-
p_validate.add_argument(
|
|
942
|
-
"--mode",
|
|
943
|
-
choices=["new", "incremental"],
|
|
944
|
-
default="new",
|
|
945
|
-
help="Validation mode (default: new)",
|
|
946
|
-
)
|
|
947
944
|
|
|
948
945
|
# -- template --
|
|
949
946
|
p_template = subparsers.add_parser(
|
|
@@ -965,12 +962,6 @@ def main():
|
|
|
965
962
|
p_generate.add_argument(
|
|
966
963
|
"--output", required=True, help="Path to write final feature-list.json"
|
|
967
964
|
)
|
|
968
|
-
p_generate.add_argument(
|
|
969
|
-
"--mode",
|
|
970
|
-
choices=["new", "incremental"],
|
|
971
|
-
default="new",
|
|
972
|
-
help="Validation mode (default: new)",
|
|
973
|
-
)
|
|
974
965
|
|
|
975
966
|
# -- summary --
|
|
976
967
|
p_summary = subparsers.add_parser(
|
|
@@ -285,7 +285,7 @@ For simple incremental planning, skip detailed Phase 2-3 analysis:
|
|
|
285
285
|
4. Draft features (title + description + acceptance_criteria + dependencies)
|
|
286
286
|
5. Write draft to `.prizmkit/plans/feature-list.draft.json`, then call the generate script:
|
|
287
287
|
```powershell
|
|
288
|
-
Invoke-PrizmPython ${SKILL_DIR}/scripts/validate-and-generate.py generate --input .prizmkit/plans/feature-list.draft.json --output .prizmkit/plans/feature-list.json
|
|
288
|
+
Invoke-PrizmPython ${SKILL_DIR}/scripts/validate-and-generate.py generate --input .prizmkit/plans/feature-list.draft.json --output .prizmkit/plans/feature-list.json
|
|
289
289
|
```
|
|
290
290
|
6. If valid → summarize and recommend next step
|
|
291
291
|
7. If invalid → apply fixes to the draft, re-run generate (max 2 attempts, then escalate to full workflow)
|
|
@@ -336,7 +336,7 @@ Key requirements:
|
|
|
336
336
|
1. Write a draft JSON to a temporary path (e.g., `.prizmkit/plans/feature-list.draft.json`)
|
|
337
337
|
2. Call the generate script to validate and produce the final file:
|
|
338
338
|
```powershell
|
|
339
|
-
Invoke-PrizmPython ${SKILL_DIR}/scripts/validate-and-generate.py generate --input .prizmkit/plans/feature-list.draft.json --output .prizmkit/plans/feature-list.json
|
|
339
|
+
Invoke-PrizmPython ${SKILL_DIR}/scripts/validate-and-generate.py generate --input .prizmkit/plans/feature-list.draft.json --output .prizmkit/plans/feature-list.json
|
|
340
340
|
```
|
|
341
341
|
The script fills in defaults (`$schema`, `created_at`, `created_by`), validates all fields, and writes the final file only if validation passes. If validation fails, fix the draft and retry.
|
|
342
342
|
|
|
@@ -4,7 +4,7 @@ Structured error handling for validation failures, interrupted sessions, and che
|
|
|
4
4
|
|
|
5
5
|
## Validation Failures
|
|
6
6
|
|
|
7
|
-
When `Invoke-PrizmPython scripts/validate-and-generate.py validate --input <file
|
|
7
|
+
When `Invoke-PrizmPython scripts/validate-and-generate.py validate --input <file>` returns errors:
|
|
8
8
|
|
|
9
9
|
### Parse validation output
|
|
10
10
|
Script returns JSON with `"valid": false`, `"errors": [...]`, `"warnings": [...]`
|
|
@@ -83,7 +83,7 @@ Keep dependency correctness as first constraint.
|
|
|
83
83
|
### Step 5: Validate
|
|
84
84
|
Run after defining `Invoke-PrizmPython` from the main `SKILL.md`:
|
|
85
85
|
```powershell
|
|
86
|
-
Invoke-PrizmPython ${SKILL_DIR}/scripts/validate-and-generate.py validate --input feature-list.json
|
|
86
|
+
Invoke-PrizmPython ${SKILL_DIR}/scripts/validate-and-generate.py validate --input feature-list.json
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
Fix and re-run until pass.
|
|
@@ -55,7 +55,7 @@ Split into `sub_features` when:
|
|
|
55
55
|
1. Write `feature-list.json`.
|
|
56
56
|
2. Run the command below after defining `Invoke-PrizmPython` from the main `SKILL.md`:
|
|
57
57
|
```powershell
|
|
58
|
-
Invoke-PrizmPython ${SKILL_DIR}/scripts/validate-and-generate.py validate --input feature-list.json
|
|
58
|
+
Invoke-PrizmPython ${SKILL_DIR}/scripts/validate-and-generate.py validate --input feature-list.json
|
|
59
59
|
```
|
|
60
60
|
3. Fix all errors, then re-run.
|
|
61
61
|
|
|
@@ -11,12 +11,16 @@ Commands:
|
|
|
11
11
|
grade Generate grading results from eval runs (for npm run skill:review)
|
|
12
12
|
|
|
13
13
|
Usage:
|
|
14
|
-
python3 validate-and-generate.py validate --input .prizmkit/plans/feature-list.json [--output validated.json]
|
|
14
|
+
python3 validate-and-generate.py validate --input .prizmkit/plans/feature-list.json [--output validated.json]
|
|
15
15
|
python3 validate-and-generate.py template --output .prizmkit/plans/feature-list.json
|
|
16
|
-
python3 validate-and-generate.py generate --input draft.json --output .prizmkit/plans/feature-list.json
|
|
16
|
+
python3 validate-and-generate.py generate --input draft.json --output .prizmkit/plans/feature-list.json
|
|
17
17
|
python3 validate-and-generate.py summary --input .prizmkit/plans/feature-list.json [--format markdown|json]
|
|
18
18
|
python3 validate-and-generate.py grade --workspace /.codebuddy/skill-evals/feature-planner-workspace --iteration iteration-1
|
|
19
19
|
|
|
20
|
+
Mode is determined automatically by --output path:
|
|
21
|
+
- Output file does NOT exist -> new plan (all features must be "pending")
|
|
22
|
+
- Output file already exists -> incremental append (existing features keep their status)
|
|
23
|
+
|
|
20
24
|
Python 3.6+ required. No external dependencies.
|
|
21
25
|
"""
|
|
22
26
|
|
|
@@ -38,8 +42,6 @@ VALID_STATUSES = {"pending", "in_progress", "completed", "failed", "skipped", "s
|
|
|
38
42
|
VALID_COMPLEXITIES = {"low", "medium", "high", "critical"}
|
|
39
43
|
VALID_PRIORITIES = {"critical", "high", "medium", "low"}
|
|
40
44
|
VALID_GRANULARITIES = {"feature", "sub_feature", "auto"}
|
|
41
|
-
VALID_PLANNING_MODES = {"new", "incremental"}
|
|
42
|
-
|
|
43
45
|
FEATURE_ID_RE = re.compile(r"^F-\d{3}(-[A-Z])?$")
|
|
44
46
|
SUB_FEATURE_ID_RE = re.compile(r"^F-\d{3}-[A-Z]$")
|
|
45
47
|
|
|
@@ -156,13 +158,11 @@ def _detect_cycles(features):
|
|
|
156
158
|
# ---------------------------------------------------------------------------
|
|
157
159
|
|
|
158
160
|
|
|
159
|
-
def validate_feature_list(data,
|
|
161
|
+
def validate_feature_list(data, is_new_plan=True):
|
|
160
162
|
"""Validate a parsed feature-list data structure.
|
|
161
163
|
|
|
162
164
|
Returns a dict with keys ``valid``, ``errors``, ``warnings``, ``stats``.
|
|
163
165
|
"""
|
|
164
|
-
if planning_mode not in VALID_PLANNING_MODES:
|
|
165
|
-
planning_mode = "new"
|
|
166
166
|
|
|
167
167
|
errors = []
|
|
168
168
|
warnings = []
|
|
@@ -299,7 +299,7 @@ def validate_feature_list(data, planning_mode="new"):
|
|
|
299
299
|
label, status, ", ".join(sorted(VALID_STATUSES))
|
|
300
300
|
)
|
|
301
301
|
)
|
|
302
|
-
if
|
|
302
|
+
if is_new_plan and status and status != "pending":
|
|
303
303
|
warnings.append(
|
|
304
304
|
"{}: status is '{}' (expected 'pending' for new plans)".format(label, status)
|
|
305
305
|
)
|
|
@@ -680,7 +680,9 @@ def cmd_validate(args):
|
|
|
680
680
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
681
681
|
return 2
|
|
682
682
|
|
|
683
|
-
|
|
683
|
+
# Validate input file exists -> incremental mode (existing features keep their status)
|
|
684
|
+
is_new_plan = False
|
|
685
|
+
result = validate_feature_list(data, is_new_plan=is_new_plan)
|
|
684
686
|
|
|
685
687
|
# Print results to stdout
|
|
686
688
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
@@ -758,9 +760,11 @@ def cmd_generate(args):
|
|
|
758
760
|
for feature in data.get("features", []):
|
|
759
761
|
feature.setdefault("status", "pending")
|
|
760
762
|
|
|
761
|
-
# Validate
|
|
762
|
-
|
|
763
|
-
|
|
763
|
+
# Validate. Mode is determined by whether --output file already exists:
|
|
764
|
+
# - does NOT exist -> new plan (all features must be "pending")
|
|
765
|
+
# - already exists -> incremental append (existing features keep their status)
|
|
766
|
+
is_new_plan = not os.path.exists(args.output)
|
|
767
|
+
result = validate_feature_list(data, is_new_plan=is_new_plan)
|
|
764
768
|
|
|
765
769
|
# Output validation result
|
|
766
770
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
@@ -856,7 +860,7 @@ def cmd_grade(args):
|
|
|
856
860
|
continue
|
|
857
861
|
|
|
858
862
|
# Run validation
|
|
859
|
-
result = validate_feature_list(data,
|
|
863
|
+
result = validate_feature_list(data, is_new_plan=True)
|
|
860
864
|
|
|
861
865
|
# Create grading entry
|
|
862
866
|
grade_entry = {
|
|
@@ -916,7 +920,6 @@ def main():
|
|
|
916
920
|
epilog=(
|
|
917
921
|
"Examples:\n"
|
|
918
922
|
" %(prog)s validate --input .prizmkit/plans/feature-list.json\n"
|
|
919
|
-
" %(prog)s validate --input .prizmkit/plans/feature-list.json --mode incremental\n"
|
|
920
923
|
" %(prog)s validate --input .prizmkit/plans/feature-list.json --output validated.json\n"
|
|
921
924
|
" %(prog)s template --output .prizmkit/plans/feature-list.json\n"
|
|
922
925
|
" %(prog)s generate --input draft.json --output .prizmkit/plans/feature-list.json\n"
|
|
@@ -938,12 +941,6 @@ def main():
|
|
|
938
941
|
p_validate.add_argument(
|
|
939
942
|
"--output", help="Path to write validated output (optional)"
|
|
940
943
|
)
|
|
941
|
-
p_validate.add_argument(
|
|
942
|
-
"--mode",
|
|
943
|
-
choices=["new", "incremental"],
|
|
944
|
-
default="new",
|
|
945
|
-
help="Validation mode (default: new)",
|
|
946
|
-
)
|
|
947
944
|
|
|
948
945
|
# -- template --
|
|
949
946
|
p_template = subparsers.add_parser(
|
|
@@ -965,12 +962,6 @@ def main():
|
|
|
965
962
|
p_generate.add_argument(
|
|
966
963
|
"--output", required=True, help="Path to write final feature-list.json"
|
|
967
964
|
)
|
|
968
|
-
p_generate.add_argument(
|
|
969
|
-
"--mode",
|
|
970
|
-
choices=["new", "incremental"],
|
|
971
|
-
default="new",
|
|
972
|
-
help="Validation mode (default: new)",
|
|
973
|
-
)
|
|
974
965
|
|
|
975
966
|
# -- summary --
|
|
976
967
|
p_summary = subparsers.add_parser(
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prizm-dev-team",
|
|
3
3
|
"team_name": "prizm-dev-team",
|
|
4
|
-
"description": "PrizmKit-integrated Multi-Agent software development team. 3 specialized agents (Dev, Reviewer, Critic) following PrizmKit spec-driven workflow with
|
|
4
|
+
"description": "PrizmKit-integrated Multi-Agent software development team. 3 specialized agents (Dev, Reviewer, Critic) following PrizmKit spec-driven workflow. Critic supports parallel 3-critic voting with distinct focus lenses.",
|
|
5
5
|
"lead": "orchestrator",
|
|
6
6
|
"communication": {
|
|
7
7
|
"protocol": "SendMessage",
|
|
8
8
|
"routing": "mesh",
|
|
9
|
-
"note": "Teammates communicate directly via SendMessage; key messages must also be sent to Orchestrator (the main
|
|
9
|
+
"note": "Teammates communicate directly via SendMessage; key messages must also be sent to Orchestrator (the main AI session). Critic agents operate independently in parallel — they do NOT read each other's reports."
|
|
10
10
|
},
|
|
11
11
|
"members": [
|
|
12
12
|
{
|
|
13
13
|
"name": "dev",
|
|
14
|
-
"role": "developer",
|
|
14
|
+
"role": "developer",
|
|
15
15
|
"agentDefinition": "prizm-dev-team-dev",
|
|
16
|
-
"prompt": "You are a Dev Agent of the prizm-dev-team. Follow /prizmkit-implement workflow with TDD. Read plan.md/spec.md, implement task-by-task, mark completed tasks [x].
|
|
16
|
+
"prompt": "You are a Dev Agent of the prizm-dev-team. Your complete behavior rules are in your agent definition. Follow /prizmkit-implement workflow with TDD. Read plan.md/spec.md, implement task-by-task, mark completed tasks [x].",
|
|
17
17
|
"subscriptions": ["*"]
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
"name": "reviewer",
|
|
21
21
|
"role": "reviewer",
|
|
22
22
|
"agentDefinition": "prizm-dev-team-reviewer",
|
|
23
|
-
"prompt": "You are the Reviewer Agent of the prizm-dev-team. Run /prizmkit-code-review for diagnosis + fix strategy formulation
|
|
23
|
+
"prompt": "You are the Reviewer Agent of the prizm-dev-team. Your complete behavior rules are in your agent definition. Run /prizmkit-code-review for diagnosis + fix strategy formulation. You do NOT run tests — the Orchestrator handles testing.",
|
|
24
24
|
"subscriptions": ["*"]
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"name": "critic",
|
|
28
28
|
"role": "critic",
|
|
29
29
|
"agentDefinition": "prizm-dev-team-critic",
|
|
30
|
-
"prompt": "You are the Critic Agent of the prizm-dev-team. Challenge plans and implementations for project fitness, style consistency, robustness, and integration quality. Do NOT verify correctness — that is the Reviewer's job.
|
|
30
|
+
"prompt": "You are the Critic Agent of the prizm-dev-team. Your complete behavior rules are in your agent definition. Challenge plans and implementations for project fitness, style consistency, robustness, and integration quality. Supports parallel 3-critic voting mode. Do NOT verify correctness — that is the Reviewer's job.",
|
|
31
31
|
"subscriptions": ["*"]
|
|
32
32
|
}
|
|
33
33
|
]
|