prizmkit 1.1.5 → 1.1.7

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 (38) hide show
  1. package/bundled/VERSION.json +3 -3
  2. package/bundled/dev-pipeline/README.md +1 -1
  3. package/bundled/dev-pipeline/assets/feature-list-example.json +2 -2
  4. package/bundled/dev-pipeline/reset-bug.sh +304 -0
  5. package/bundled/dev-pipeline/run-bugfix.sh +55 -8
  6. package/bundled/dev-pipeline/run-feature.sh +12 -4
  7. package/bundled/dev-pipeline/run-refactor.sh +5 -2
  8. package/bundled/dev-pipeline/scripts/init-pipeline.py +19 -5
  9. package/bundled/dev-pipeline/scripts/update-bug-status.py +2 -2
  10. package/bundled/dev-pipeline/scripts/update-feature-status.py +6 -6
  11. package/bundled/dev-pipeline/templates/bug-fix-list-schema.json +111 -31
  12. package/bundled/dev-pipeline/templates/feature-list-schema.json +5 -5
  13. package/bundled/dev-pipeline/templates/refactor-list-schema.json +107 -28
  14. package/bundled/dev-pipeline/tests/test_auto_skip.py +1 -1
  15. package/bundled/skills/_metadata.json +10 -2
  16. package/bundled/skills/app-planner/SKILL.md +14 -3
  17. package/bundled/skills/bug-fix-workflow/SKILL.md +2 -0
  18. package/bundled/skills/bug-planner/SKILL.md +59 -4
  19. package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +9 -4
  20. package/bundled/skills/feature-planner/SKILL.md +73 -1
  21. package/bundled/skills/feature-planner/references/error-recovery.md +1 -1
  22. package/bundled/skills/feature-planner/scripts/validate-and-generate.py +7 -6
  23. package/bundled/skills/feature-workflow/SKILL.md +4 -1
  24. package/bundled/skills/prizmkit-committer/SKILL.md +1 -0
  25. package/bundled/skills/prizmkit-deploy/SKILL.md +1 -0
  26. package/bundled/skills/prizmkit-deploy/assets/deploy-template.md +1 -1
  27. package/bundled/skills/prizmkit-implement/SKILL.md +1 -1
  28. package/bundled/skills/prizmkit-implement/references/deploy-guide-protocol.md +4 -4
  29. package/bundled/skills/prizmkit-plan/SKILL.md +3 -3
  30. package/bundled/skills/prizmkit-retrospective/SKILL.md +40 -3
  31. package/bundled/skills/prizmkit-verify/SKILL.md +281 -0
  32. package/bundled/skills/prizmkit-verify/scripts/verify-light.py +402 -0
  33. package/bundled/skills/recovery-workflow/SKILL.md +1 -0
  34. package/bundled/skills/refactor-pipeline-launcher/SKILL.md +7 -3
  35. package/bundled/skills/refactor-planner/SKILL.md +51 -1
  36. package/bundled/skills/refactor-workflow/SKILL.md +4 -0
  37. package/package.json +1 -1
  38. package/src/scaffold.js +24 -12
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "title": "Dev-Pipeline Bug Fix List",
4
- "description": "Schema for bug-fix-list.json standardized input for the Bug Fix Pipeline",
4
+ "description": "Schema for bug-fix-list.json \u2014 standardized input for the Bug Fix Pipeline",
5
5
  "type": "object",
6
- "required": ["$schema", "project_name", "bugs"],
6
+ "required": [
7
+ "$schema",
8
+ "project_name",
9
+ "bugs"
10
+ ],
7
11
  "properties": {
8
12
  "$schema": {
9
13
  "type": "string",
@@ -29,9 +33,14 @@
29
33
  "items": {
30
34
  "type": "object",
31
35
  "required": [
32
- "id", "title", "description", "severity",
33
- "error_source", "verification_type",
34
- "acceptance_criteria", "status"
36
+ "id",
37
+ "title",
38
+ "description",
39
+ "severity",
40
+ "error_source",
41
+ "verification_type",
42
+ "acceptance_criteria",
43
+ "status"
35
44
  ],
36
45
  "properties": {
37
46
  "id": {
@@ -42,7 +51,7 @@
42
51
  "title": {
43
52
  "type": "string",
44
53
  "minLength": 1,
45
- "description": "Bug title brief description of the symptom"
54
+ "description": "Bug title \u2014 brief description of the symptom"
46
55
  },
47
56
  "description": {
48
57
  "type": "string",
@@ -51,17 +60,29 @@
51
60
  },
52
61
  "severity": {
53
62
  "type": "string",
54
- "enum": ["critical", "high", "medium", "low"],
63
+ "enum": [
64
+ "critical",
65
+ "high",
66
+ "medium",
67
+ "low"
68
+ ],
55
69
  "description": "critical=crash/data-loss; high=core-feature-broken; medium=workaround-exists; low=cosmetic"
56
70
  },
57
71
  "priority": {
58
72
  "type": "string",
59
- "enum": ["high", "medium", "low"],
60
- "description": "Fix priority. Pipeline processes high before medium before low; within same level, array order determines sequence."
73
+ "enum": [
74
+ "critical",
75
+ "high",
76
+ "medium",
77
+ "low"
78
+ ],
79
+ "description": "Fix priority. Pipeline processes critical before high before medium before low; within same level, array order determines sequence."
61
80
  },
62
81
  "error_source": {
63
82
  "type": "object",
64
- "required": ["type"],
83
+ "required": [
84
+ "type"
85
+ ],
65
86
  "description": "Structured error source information extracted from various input formats",
66
87
  "properties": {
67
88
  "type": {
@@ -92,7 +113,9 @@
92
113
  },
93
114
  "reproduction_steps": {
94
115
  "type": "array",
95
- "items": { "type": "string" },
116
+ "items": {
117
+ "type": "string"
118
+ },
96
119
  "description": "User-reported reproduction steps (when type=user_report)"
97
120
  }
98
121
  }
@@ -104,28 +127,44 @@
104
127
  },
105
128
  "affected_modules": {
106
129
  "type": "array",
107
- "items": { "type": "string" },
130
+ "items": {
131
+ "type": "string"
132
+ },
108
133
  "description": "Known affected module names (optional, triage will auto-detect)"
109
134
  },
110
135
  "environment": {
111
136
  "type": "object",
112
137
  "description": "Environment where the bug occurs",
113
138
  "properties": {
114
- "os": { "type": "string" },
115
- "runtime": { "type": "string" },
116
- "browser": { "type": "string" },
117
- "version": { "type": "string" }
139
+ "os": {
140
+ "type": "string"
141
+ },
142
+ "runtime": {
143
+ "type": "string"
144
+ },
145
+ "browser": {
146
+ "type": "string"
147
+ },
148
+ "version": {
149
+ "type": "string"
150
+ }
118
151
  }
119
152
  },
120
153
  "verification_type": {
121
154
  "type": "string",
122
- "enum": ["automated", "manual", "hybrid"],
155
+ "enum": [
156
+ "automated",
157
+ "manual",
158
+ "hybrid"
159
+ ],
123
160
  "description": "automated=unit/integration-test; manual=human-UAT; hybrid=both"
124
161
  },
125
162
  "acceptance_criteria": {
126
163
  "type": "array",
127
164
  "minItems": 1,
128
- "items": { "type": "string" },
165
+ "items": {
166
+ "type": "string"
167
+ },
129
168
  "description": "Conditions that must be met for the bug to be considered fixed"
130
169
  },
131
170
  "status": {
@@ -142,6 +181,23 @@
142
181
  "skipped"
143
182
  ],
144
183
  "description": "Bug fix status, maps to pipeline phases"
184
+ },
185
+ "critic": {
186
+ "type": "boolean",
187
+ "description": "Enable adversarial critic review for this bug fix. Default: true for high severity bugs, false for others.",
188
+ "default": false
189
+ },
190
+ "critic_count": {
191
+ "type": "integer",
192
+ "description": "Number of parallel critic agents. 1 = single critic, 3 = multi-critic voting. Default: 1 for high severity, omit for others.",
193
+ "enum": [
194
+ 1,
195
+ 3
196
+ ]
197
+ },
198
+ "model": {
199
+ "type": "string",
200
+ "description": "AI model ID for this bug fix. Overrides $MODEL env var."
145
201
  }
146
202
  }
147
203
  }
@@ -150,19 +206,43 @@
150
206
  "type": "object",
151
207
  "description": "Global context for all bug fixes in this batch",
152
208
  "properties": {
153
- "tech_stack": { "type": "string" },
154
- "language": { "type": "string" },
155
- "runtime": { "type": "string" },
156
- "frontend_framework": { "type": "string" },
157
- "frontend_styling": { "type": "string" },
158
- "backend_framework": { "type": "string" },
159
- "database": { "type": "string" },
160
- "orm": { "type": "string" },
161
- "testing_strategy": { "type": "string" },
162
- "bundler": { "type": "string" },
163
- "project_type": { "type": "string" },
164
- "ci_pipeline": { "type": "string" }
209
+ "tech_stack": {
210
+ "type": "string"
211
+ },
212
+ "language": {
213
+ "type": "string"
214
+ },
215
+ "runtime": {
216
+ "type": "string"
217
+ },
218
+ "frontend_framework": {
219
+ "type": "string"
220
+ },
221
+ "frontend_styling": {
222
+ "type": "string"
223
+ },
224
+ "backend_framework": {
225
+ "type": "string"
226
+ },
227
+ "database": {
228
+ "type": "string"
229
+ },
230
+ "orm": {
231
+ "type": "string"
232
+ },
233
+ "testing_strategy": {
234
+ "type": "string"
235
+ },
236
+ "bundler": {
237
+ "type": "string"
238
+ },
239
+ "project_type": {
240
+ "type": "string"
241
+ },
242
+ "ci_pipeline": {
243
+ "type": "string"
244
+ }
165
245
  }
166
246
  }
167
247
  }
168
- }
248
+ }
@@ -3,17 +3,17 @@
3
3
  "title": "Dev-Pipeline Feature List",
4
4
  "description": "Schema for .dev-pipeline/feature-list.json",
5
5
  "type": "object",
6
- "required": ["$schema", "app_name", "features"],
6
+ "required": ["$schema", "project_name", "features"],
7
7
  "properties": {
8
8
  "$schema": {
9
9
  "type": "string",
10
10
  "const": "dev-pipeline-feature-list-v1"
11
11
  },
12
- "app_name": {
12
+ "project_name": {
13
13
  "type": "string",
14
14
  "minLength": 1
15
15
  },
16
- "app_description": {
16
+ "project_description": {
17
17
  "type": "string"
18
18
  },
19
19
  "created_at": {
@@ -47,8 +47,8 @@
47
47
  },
48
48
  "priority": {
49
49
  "type": "string",
50
- "enum": ["high", "medium", "low"],
51
- "description": "Feature priority. Pipeline processes high before medium before low; within same level, array order determines sequence."
50
+ "enum": ["critical", "high", "medium", "low"],
51
+ "description": "Feature priority. Pipeline processes critical before high before medium before low; within same level, array order determines sequence."
52
52
  },
53
53
  "estimated_complexity": {
54
54
  "type": "string",
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "title": "Dev-Pipeline Refactor List",
4
- "description": "Schema for refactor-list.json standardized input for the Refactor Pipeline",
4
+ "description": "Schema for refactor-list.json \u2014 standardized input for the Refactor Pipeline",
5
5
  "type": "object",
6
- "required": ["$schema", "project_name", "refactors"],
6
+ "required": [
7
+ "$schema",
8
+ "project_name",
9
+ "refactors"
10
+ ],
7
11
  "properties": {
8
12
  "$schema": {
9
13
  "type": "string",
@@ -29,9 +33,17 @@
29
33
  "items": {
30
34
  "type": "object",
31
35
  "required": [
32
- "id", "title", "description", "scope", "type",
33
- "priority", "complexity", "behavior_preservation",
34
- "acceptance_criteria", "dependencies", "status"
36
+ "id",
37
+ "title",
38
+ "description",
39
+ "scope",
40
+ "type",
41
+ "priority",
42
+ "complexity",
43
+ "behavior_preservation",
44
+ "acceptance_criteria",
45
+ "dependencies",
46
+ "status"
35
47
  ],
36
48
  "properties": {
37
49
  "id": {
@@ -42,7 +54,7 @@
42
54
  "title": {
43
55
  "type": "string",
44
56
  "minLength": 1,
45
- "description": "Refactor title brief description of the change"
57
+ "description": "Refactor title \u2014 brief description of the change"
46
58
  },
47
59
  "description": {
48
60
  "type": "string",
@@ -55,39 +67,65 @@
55
67
  "properties": {
56
68
  "files": {
57
69
  "type": "array",
58
- "items": { "type": "string" },
70
+ "items": {
71
+ "type": "string"
72
+ },
59
73
  "description": "File paths affected by this refactor"
60
74
  },
61
75
  "modules": {
62
76
  "type": "array",
63
- "items": { "type": "string" },
77
+ "items": {
78
+ "type": "string"
79
+ },
64
80
  "description": "Module names affected by this refactor"
65
81
  }
66
82
  }
67
83
  },
68
84
  "type": {
69
85
  "type": "string",
70
- "enum": ["extract", "rename", "restructure", "simplify", "decouple", "migrate"],
86
+ "enum": [
87
+ "extract",
88
+ "rename",
89
+ "restructure",
90
+ "simplify",
91
+ "decouple",
92
+ "migrate"
93
+ ],
71
94
  "description": "extract=extract-function/module; rename=rename-symbols; restructure=move/reorganize; simplify=reduce-complexity; decouple=remove-dependencies; migrate=tech-migration"
72
95
  },
73
96
  "priority": {
74
97
  "type": "string",
75
- "enum": ["critical", "high", "medium", "low"],
98
+ "enum": [
99
+ "critical",
100
+ "high",
101
+ "medium",
102
+ "low"
103
+ ],
76
104
  "description": "Refactor priority. Pipeline processes critical before high before medium before low; within same level, array order determines sequence."
77
105
  },
78
106
  "complexity": {
79
107
  "type": "string",
80
- "enum": ["low", "medium", "high"],
108
+ "enum": [
109
+ "low",
110
+ "medium",
111
+ "high"
112
+ ],
81
113
  "description": "Estimated complexity of the refactor"
82
114
  },
83
115
  "behavior_preservation": {
84
116
  "type": "object",
85
- "required": ["strategy"],
117
+ "required": [
118
+ "strategy"
119
+ ],
86
120
  "description": "Strategy for ensuring no behavior changes",
87
121
  "properties": {
88
122
  "strategy": {
89
123
  "type": "string",
90
- "enum": ["test-gate", "snapshot", "manual"],
124
+ "enum": [
125
+ "test-gate",
126
+ "snapshot",
127
+ "manual"
128
+ ],
91
129
  "description": "test-gate=existing-tests-must-pass; snapshot=before/after-snapshot-comparison; manual=human-verification"
92
130
  },
93
131
  "existing_tests": {
@@ -96,7 +134,9 @@
96
134
  },
97
135
  "new_tests_needed": {
98
136
  "type": "array",
99
- "items": { "type": "string" },
137
+ "items": {
138
+ "type": "string"
139
+ },
100
140
  "description": "New tests that should be written before refactoring"
101
141
  }
102
142
  }
@@ -104,7 +144,9 @@
104
144
  "acceptance_criteria": {
105
145
  "type": "array",
106
146
  "minItems": 1,
107
- "items": { "type": "string" },
147
+ "items": {
148
+ "type": "string"
149
+ },
108
150
  "description": "Conditions that must be met for the refactor to be considered complete"
109
151
  },
110
152
  "dependencies": {
@@ -133,6 +175,19 @@
133
175
  "estimated_lines": {
134
176
  "type": "integer",
135
177
  "description": "Estimated number of lines affected by this refactor"
178
+ },
179
+ "critic": {
180
+ "type": "boolean",
181
+ "description": "Enable adversarial critic review for this refactor. Default: true for critical/high priority refactors, false for others.",
182
+ "default": false
183
+ },
184
+ "critic_count": {
185
+ "type": "integer",
186
+ "description": "Number of parallel critic agents. 1 = single critic, 3 = multi-critic voting. Default: 3 for critical, 1 for high, omit for others.",
187
+ "enum": [
188
+ 1,
189
+ 3
190
+ ]
136
191
  }
137
192
  }
138
193
  }
@@ -141,19 +196,43 @@
141
196
  "type": "object",
142
197
  "description": "Global context for all refactors in this batch",
143
198
  "properties": {
144
- "tech_stack": { "type": "string" },
145
- "language": { "type": "string" },
146
- "runtime": { "type": "string" },
147
- "frontend_framework": { "type": "string" },
148
- "frontend_styling": { "type": "string" },
149
- "backend_framework": { "type": "string" },
150
- "database": { "type": "string" },
151
- "orm": { "type": "string" },
152
- "testing_strategy": { "type": "string" },
153
- "bundler": { "type": "string" },
154
- "project_type": { "type": "string" },
155
- "ci_pipeline": { "type": "string" }
199
+ "tech_stack": {
200
+ "type": "string"
201
+ },
202
+ "language": {
203
+ "type": "string"
204
+ },
205
+ "runtime": {
206
+ "type": "string"
207
+ },
208
+ "frontend_framework": {
209
+ "type": "string"
210
+ },
211
+ "frontend_styling": {
212
+ "type": "string"
213
+ },
214
+ "backend_framework": {
215
+ "type": "string"
216
+ },
217
+ "database": {
218
+ "type": "string"
219
+ },
220
+ "orm": {
221
+ "type": "string"
222
+ },
223
+ "testing_strategy": {
224
+ "type": "string"
225
+ },
226
+ "bundler": {
227
+ "type": "string"
228
+ },
229
+ "project_type": {
230
+ "type": "string"
231
+ },
232
+ "ci_pipeline": {
233
+ "type": "string"
234
+ }
156
235
  }
157
236
  }
158
237
  }
159
- }
238
+ }
@@ -31,7 +31,7 @@ def _make_feature(fid, title="Feature", deps=None, status="pending"):
31
31
  def _make_feature_list(features):
32
32
  return {
33
33
  "$schema": "dev-pipeline-feature-list-v1",
34
- "app_name": "test-app",
34
+ "project_name": "test-app",
35
35
  "features": features,
36
36
  }
37
37
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.5",
2
+ "version": "1.1.7",
3
3
  "skills": {
4
4
  "prizm-kit": {
5
5
  "description": "Full-lifecycle dev toolkit. Covers spec-driven development, Prizm context docs, code quality, debugging, deployment, and knowledge management.",
@@ -71,6 +71,13 @@
71
71
  "hasAssets": true,
72
72
  "hasScripts": false
73
73
  },
74
+ "prizmkit-verify": {
75
+ "description": "Automated framework verification for PrizmKit's 4-layer architecture. Checks structural integrity, contract consistency, and cross-scenario alignment.",
76
+ "tier": "1",
77
+ "category": "prizmkit-skill",
78
+ "hasAssets": false,
79
+ "hasScripts": true
80
+ },
74
81
  "feature-workflow": {
75
82
  "description": "One-stop entry point for feature development. Orchestrates feature-planner → feature-pipeline-launcher → background execution. Handles multi-feature batch development from a single request.",
76
83
  "tier": "companion",
@@ -184,7 +191,8 @@
184
191
  "refactor-planner",
185
192
  "refactor-pipeline-launcher",
186
193
  "bug-fix-workflow",
187
- "recovery-workflow"
194
+ "recovery-workflow",
195
+ "prizmkit-verify"
188
196
  ]
189
197
  },
190
198
  "minimal": {
@@ -40,8 +40,11 @@ If you believe the task is better suited for a different workflow, you MUST:
40
40
  **Your ONLY writable outputs are:**
41
41
  1. `project-brief.md` (project root — accumulated project context brief)
42
42
  2. `.prizmkit/project-conventions.json` (project convention answers)
43
- 3. Architecture decisions appended to `CLAUDE.md` / `CODEBUDDY.md` (with user consent)
44
- 4. Draft backups in `.prizmkit/planning/`
43
+ 3. `.prizm-docs/root.prizm` (if architecture decisions are captured see Architecture Decision Capture section)
44
+ - Contains architecture decisions, tech stack rationale, and key constraints
45
+ - Used as input by feature-planner and other workflows
46
+ 4. Architecture decisions appended to `CLAUDE.md` / `CODEBUDDY.md` (with user consent)
47
+ 5. Draft backups in `.prizmkit/planning/`
45
48
 
46
49
  **After planning is complete**, you MUST:
47
50
  1. Present the summary of captured vision, constraints, and decisions
@@ -158,6 +161,14 @@ Checkpoints catch cascading errors early — skipping one means the next phase b
158
161
 
159
162
  After Phase 2, if framework-shaping architecture decisions emerged during planning (tech stack, communication patterns, data model strategies — not individual feature details), read `${SKILL_DIR}/references/architecture-decisions.md` and follow the capture flow. Most sessions will NOT produce architecture decisions — only capture when genuinely impactful.
160
163
 
164
+ **Handoff to feature-planner**: Captured architecture decisions MUST be written to `.prizm-docs/root.prizm` so that feature-planner can read them as context. This ensures all downstream planners (feature, bug, refactor) share consistent architectural understanding.
165
+
166
+ **How it works**:
167
+ 1. If decisions are captured → create `.prizm-docs/root.prizm` with decision summaries
168
+ 2. Also append decisions to `CLAUDE.md` / `CODEBUDDY.md` for human reference
169
+ 3. When feature-planner is invoked, it will read `.prizm-docs/root.prizm` as prerequisite context
170
+ 4. Feature decomposition will respect captured architecture decisions (no conflicting tech choices)
171
+
161
172
  ## Project Brief Accumulation
162
173
 
163
174
  During interactive planning, maintain a `project-brief.md` at the project root as a simple checklist of product ideas.
@@ -209,6 +220,6 @@ When the session appears to be ending:
209
220
  After all checkpoints pass, present a summary and recommend next steps:
210
221
 
211
222
  1. **Summary**: List captured vision, tech stack, constraints, architecture decisions, and project brief status
212
- 2. **Primary recommendation**: Invoke `feature-planner` to decompose the application into features and generate `feature-list.json`
223
+ 2. **Primary recommendation**: Invoke `feature-planner` to decompose the application into features and generate `feature-list.json` (schema: `dev-pipeline-feature-list-v1`, uses `project_name` field for the app name)
213
224
  3. **Alternative**: If the user wants to continue refining the vision or constraints, stay in app-planner
214
225
  4. **Artifacts produced**: List files written (`project-brief.md`, `.prizmkit/project-conventions.json`, architecture decisions if any)
@@ -83,6 +83,8 @@ For trivial bugs with clear root cause and minimal scope:
83
83
 
84
84
  **Goal**: Fully understand the bug before touching any code. Vague bug reports lead to incorrect fixes that mask the real issue or introduce new bugs.
85
85
 
86
+ **Fast Path Decision Point**: After initial information gathering (Step 1.1), evaluate the Fast Path Eligibility Criteria above. If ALL criteria are met, ask the user: "This looks like a straightforward fix. Use fast path? (Y/n)". If yes, skip directly to the Fast Path Workflow (branch setup already done in Phase 0). If no or uncertain, continue with full diagnosis.
87
+
86
88
  **CRITICAL RULE**: Ask as many questions as needed until the bug is fully understood. Do NOT rush into code. A misdiagnosed bug leads to a wrong fix, which is worse than no fix.
87
89
 
88
90
  #### Step 1.1: Initial Bug Information Gathering
@@ -116,6 +116,7 @@ ALERT: Error rate spike: 500 errors/min on /api/login endpoint
116
116
  - Environment (ask or auto-detect from logs)
117
117
  - Verification type (suggest `automated` by default, ask user)
118
118
  - Acceptance criteria (auto-suggest based on description, user can edit)
119
+ - Model override (optional; if specified, overrides $MODEL env var for this bug fix)
119
120
 
120
121
  **Per-bug clarification** — if the bug's root cause, reproduction steps, expected behavior, or scope is unclear from the provided information, ask focused questions one at a time (cite the unclear point, give a recommended answer with rationale) until the bug is fully understood. Do not finalize a bug entry with ambiguous details. No limit on the number of questions per bug.
121
122
 
@@ -152,13 +153,21 @@ Only finalize the bug entry after user confirms all three points.
152
153
 
153
154
  ### Phase 3: Prioritization & Review
154
155
 
155
- 1. **Auto-assign priorities**: Based on severity (critical=1, high=2, medium=3, low=4), adjustable by user
156
+ 1. **Auto-assign priorities**: Based on severity (critical → high, high → high, medium → medium, low → low), adjustable by user
157
+
158
+ **Severity → Priority Mapping**:
159
+ - `critical` severity → `high` priority (treated with highest urgency)
160
+ - `high` severity → `high` priority
161
+ - `medium` severity → `medium` priority
162
+ - `low` severity → `low` priority
163
+
164
+ Note: Severity has 4 levels (critical, high, medium, low) but Priority has 3 levels (high, medium, low). Both critical and high severity bugs map to high priority.
156
165
  2. **Display summary table**:
157
166
  ```
158
167
  ID | Title | Severity | Priority | Verification
159
- B-001 | Login null reference crash | critical | 1 | automated
160
- B-002 | CSV export Chinese encoding | medium | 3 | hybrid
161
- B-003 | Slow dashboard loading | low | 4 | manual
168
+ B-001 | Login null reference crash | critical | high | automated
169
+ B-002 | CSV export Chinese encoding | medium | medium | hybrid
170
+ B-003 | Slow dashboard loading | low | low | manual
162
171
  ```
163
172
  3. **Ask for adjustments**: "Want to reorder priorities, change severity, or remove any bugs?"
164
173
  4. **Detect potential duplicates**: If two bugs have similar error messages or affected modules, warn user
@@ -309,6 +318,52 @@ Affected Features: F-003 (1 bug), F-012 (1 bug), none (1 bug)
309
318
 
310
319
  ---
311
320
 
321
+ ## Adversarial Critic Review (Testing Defaults)
322
+
323
+ All bug fixes support optional critic review for additional quality assurance. The critic mechanism is disabled by default but can be enabled per-bug based on severity and complexity.
324
+
325
+ ### Default Critic Behavior
326
+
327
+ | Severity | `critic` | `critic_count` | Rationale |
328
+ |----------|----------|----------------|-----------|
329
+ | critical | `true` | `1` | Single critic review for critical bugs |
330
+ | high | `true` | `1` | Single critic review for high-severity bugs |
331
+ | medium | `false` | (omitted) | Skip critic for medium-severity bugs |
332
+ | low | `false` | (omitted) | Skip critic for low-severity bugs |
333
+
334
+ - `critic: true` — Enable adversarial review after fix implementation
335
+ - `critic_count: 1` — Single critic agent reviews the fix
336
+ - Critic verifies: fix addresses root cause, no regressions introduced, acceptance criteria met
337
+
338
+ **User Override**: During Phase 2 or Phase 3, users can opt to enable/disable critic on a per-bug basis.
339
+
340
+ ---
341
+
342
+ ## Browser Verification
343
+
344
+ **Browser verification is a feature-pipeline capability only.** Bug fixes use the `verification_type` field instead:
345
+
346
+ - `verification_type: automated` — Use unit/integration tests to verify the fix
347
+ - `verification_type: manual` — Describe manual testing steps in acceptance criteria (including any browser verification steps)
348
+ - `verification_type: hybrid` — Combine automated tests with manual browser verification steps
349
+
350
+ For UI-related bugs that require visual verification (e.g., "Button doesn't show error message"), describe the verification steps in your acceptance criteria:
351
+
352
+ Example:
353
+ ```
354
+ Bug Title: Login error message not displaying
355
+ Verification Type: manual
356
+ Acceptance Criteria:
357
+ 1. Navigate to /login with invalid credentials
358
+ 2. Verify error message "Invalid email or password" appears below the email field
359
+ 3. Verify error message is red (#FF0000)
360
+ 4. Verify form fields are still enabled and can be re-submitted
361
+ ```
362
+
363
+ The bugfix pipeline AI will use these criteria during manual verification.
364
+
365
+ ---
366
+
312
367
  ## Integration with Bug Fix Pipeline
313
368
 
314
369
  After `bug-fix-list.json` is generated, the user can: