prizmkit 1.1.154 → 1.1.156

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 (164) hide show
  1. package/bundled/VERSION.json +3 -3
  2. package/bundled/adapters/codex/skill-adapter.js +1 -1
  3. package/bundled/adapters/pi/skill-adapter.js +2 -1
  4. package/bundled/dev-pipeline/.env.example +2 -6
  5. package/bundled/dev-pipeline/README.md +21 -27
  6. package/bundled/dev-pipeline/prizmkit_runtime/checkpoint_state.py +341 -15
  7. package/bundled/dev-pipeline/prizmkit_runtime/cli.py +0 -3
  8. package/bundled/dev-pipeline/prizmkit_runtime/daemon.py +1 -15
  9. package/bundled/dev-pipeline/prizmkit_runtime/gitops.py +48 -14
  10. package/bundled/dev-pipeline/prizmkit_runtime/runner_classification.py +50 -2
  11. package/bundled/dev-pipeline/prizmkit_runtime/runner_models.py +0 -9
  12. package/bundled/dev-pipeline/prizmkit_runtime/runner_prompts.py +3 -3
  13. package/bundled/dev-pipeline/prizmkit_runtime/runners.py +120 -22
  14. package/bundled/dev-pipeline/prizmkit_runtime/runtime_commit.py +482 -0
  15. package/bundled/dev-pipeline/prizmkit_runtime/test_result.py +64 -11
  16. package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +145 -367
  17. package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +91 -62
  18. package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +105 -69
  19. package/bundled/dev-pipeline/scripts/prompt_framework.py +36 -41
  20. package/bundled/dev-pipeline/scripts/update-bug-status.py +1 -4
  21. package/bundled/dev-pipeline/scripts/update-checkpoint.py +61 -13
  22. package/bundled/dev-pipeline/scripts/update-feature-status.py +1 -4
  23. package/bundled/dev-pipeline/scripts/update-refactor-status.py +1 -4
  24. package/bundled/dev-pipeline/templates/bootstrap-prompt.md +22 -27
  25. package/bundled/dev-pipeline/templates/bootstrap-tier3.md +71 -104
  26. package/bundled/dev-pipeline/templates/bugfix-bootstrap-prompt.md +59 -111
  27. package/bundled/dev-pipeline/templates/refactor-bootstrap-prompt.md +37 -72
  28. package/bundled/dev-pipeline/templates/sections/artifact-manifest.md +39 -0
  29. package/bundled/dev-pipeline/templates/sections/bugfix-critical-paths.md +3 -1
  30. package/bundled/dev-pipeline/templates/sections/bugfix-phase-commit-report.md +8 -25
  31. package/bundled/dev-pipeline/templates/sections/bugfix-phase-diagnose-plan.md +3 -3
  32. package/bundled/dev-pipeline/templates/sections/bugfix-phase-implement.md +2 -2
  33. package/bundled/dev-pipeline/templates/sections/bugfix-phase-review.md +3 -3
  34. package/bundled/dev-pipeline/templates/sections/bugfix-phase-test.md +2 -2
  35. package/bundled/dev-pipeline/templates/sections/bugfix-reminders.md +4 -4
  36. package/bundled/dev-pipeline/templates/sections/bugfix-session-context.md +0 -1
  37. package/bundled/dev-pipeline/templates/sections/checkpoint-system.md +7 -4
  38. package/bundled/dev-pipeline/templates/sections/context-budget-rules.md +14 -27
  39. package/bundled/dev-pipeline/templates/sections/feature-completion-summary.md +20 -0
  40. package/bundled/dev-pipeline/templates/sections/phase-commit-full.md +8 -71
  41. package/bundled/dev-pipeline/templates/sections/phase-implement-full.md +7 -7
  42. package/bundled/dev-pipeline/templates/sections/phase-prizmkit-test.md +3 -3
  43. package/bundled/dev-pipeline/templates/sections/phase-review-full.md +4 -4
  44. package/bundled/dev-pipeline/templates/sections/phase-specify-plan-full.md +5 -17
  45. package/bundled/dev-pipeline/templates/sections/refactor-critical-paths.md +3 -1
  46. package/bundled/dev-pipeline/templates/sections/refactor-phase-commit-report.md +10 -23
  47. package/bundled/dev-pipeline/templates/sections/refactor-phase-implement.md +2 -2
  48. package/bundled/dev-pipeline/templates/sections/refactor-phase-plan.md +2 -2
  49. package/bundled/dev-pipeline/templates/sections/refactor-phase-review.md +3 -3
  50. package/bundled/dev-pipeline/templates/sections/refactor-phase-test.md +2 -2
  51. package/bundled/dev-pipeline/templates/sections/refactor-reminders.md +7 -7
  52. package/bundled/dev-pipeline/templates/sections/refactor-session-context.md +0 -1
  53. package/bundled/dev-pipeline/templates/sections/retrospective.md +12 -0
  54. package/bundled/dev-pipeline/templates/sections/runtime-commit-handoff.md +35 -0
  55. package/bundled/dev-pipeline/templates/session-status-schema.json +45 -62
  56. package/bundled/dev-pipeline/tests/test_checkpoint_state.py +469 -18
  57. package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +262 -175
  58. package/bundled/dev-pipeline/tests/test_generate_bugfix_prompt.py +62 -23
  59. package/bundled/dev-pipeline/tests/test_generate_refactor_prompt.py +76 -28
  60. package/bundled/dev-pipeline/tests/test_python_runner_parity.py +168 -18
  61. package/bundled/dev-pipeline/tests/test_recovery_workflow.py +111 -0
  62. package/bundled/dev-pipeline/tests/test_reset_preserve.py +0 -2
  63. package/bundled/dev-pipeline/tests/test_runtime_commit.py +608 -0
  64. package/bundled/dev-pipeline/tests/test_unified_cli.py +167 -25
  65. package/bundled/skills/_metadata.json +9 -9
  66. package/bundled/skills/app-planner/SKILL.md +3 -3
  67. package/bundled/skills/app-planner/references/generated-plan-review.md +2 -1
  68. package/bundled/skills/app-planner/references/rules/backend/derivation-rules.md +56 -64
  69. package/bundled/skills/app-planner/references/rules/backend/fixed-rules.md +85 -240
  70. package/bundled/skills/app-planner/references/rules/backend/question-bank.md +25 -25
  71. package/bundled/skills/app-planner/references/rules/backend/question-manifest.json +16 -7
  72. package/bundled/skills/app-planner/references/rules/backend/template.md +74 -92
  73. package/bundled/skills/app-planner/references/rules/database/derivation-rules.md +93 -93
  74. package/bundled/skills/app-planner/references/rules/database/fixed-rules.md +66 -173
  75. package/bundled/skills/app-planner/references/rules/database/question-bank.md +31 -26
  76. package/bundled/skills/app-planner/references/rules/database/question-manifest.json +13 -4
  77. package/bundled/skills/app-planner/references/rules/database/template.md +76 -98
  78. package/bundled/skills/app-planner/references/rules/frontend/derivation-rules.md +68 -95
  79. package/bundled/skills/app-planner/references/rules/frontend/fixed-rules.md +93 -166
  80. package/bundled/skills/app-planner/references/rules/frontend/question-bank.md +46 -36
  81. package/bundled/skills/app-planner/references/rules/frontend/question-manifest.json +11 -2
  82. package/bundled/skills/app-planner/references/rules/frontend/template.md +79 -257
  83. package/bundled/skills/app-planner/references/rules/mobile/derivation-rules.md +91 -99
  84. package/bundled/skills/app-planner/references/rules/mobile/fixed-rules.md +73 -246
  85. package/bundled/skills/app-planner/references/rules/mobile/question-bank.md +17 -17
  86. package/bundled/skills/app-planner/references/rules/mobile/question-manifest.json +17 -2
  87. package/bundled/skills/app-planner/references/rules/mobile/template.md +73 -85
  88. package/bundled/skills/app-planner/references/rules-configuration.md +133 -65
  89. package/bundled/skills/app-planner/scripts/validate-rules-configuration.py +291 -0
  90. package/bundled/skills/prizmkit/SKILL.md +17 -18
  91. package/bundled/skills/prizmkit/references/workflow-state-protocol.md +22 -18
  92. package/bundled/skills/prizmkit-code-review/SKILL.md +22 -58
  93. package/bundled/skills/prizmkit-code-review/references/independent-code-review.md +6 -6
  94. package/bundled/skills/prizmkit-code-review/references/review-report-template.md +2 -2
  95. package/bundled/skills/prizmkit-committer/SKILL.md +82 -132
  96. package/bundled/skills/prizmkit-deploy/SKILL.md +27 -11
  97. package/bundled/skills/prizmkit-deploy/assets/deploy-document-template.md +89 -0
  98. package/bundled/skills/prizmkit-deploy/references/ci-cd-workflows.md +44 -14
  99. package/bundled/skills/prizmkit-deploy/references/cloud-platform-deploy.md +19 -3
  100. package/bundled/skills/prizmkit-deploy/references/database-setup.md +22 -12
  101. package/bundled/skills/prizmkit-deploy/references/deploy-config-schema.md +3 -1
  102. package/bundled/skills/prizmkit-deploy/references/deploy-history-schema.md +22 -6
  103. package/bundled/skills/prizmkit-deploy/references/deploy-metadata-schema.json +49 -0
  104. package/bundled/skills/prizmkit-deploy/references/live-validation-notes.md +1 -1
  105. package/bundled/skills/prizmkit-deploy/references/pending-input-schema.json +164 -0
  106. package/bundled/skills/prizmkit-deploy/references/ssh-adapter-flow.md +9 -8
  107. package/bundled/skills/prizmkit-deploy/references/ssh-execution-flow.md +6 -6
  108. package/bundled/skills/prizmkit-implement/SKILL.md +30 -66
  109. package/bundled/skills/prizmkit-implement/references/implementation-subagent-procedure.md +4 -4
  110. package/bundled/skills/prizmkit-init/SKILL.md +4 -0
  111. package/bundled/skills/prizmkit-plan/SKILL.md +21 -64
  112. package/bundled/skills/prizmkit-plan/references/artifact-identity.md +38 -0
  113. package/bundled/skills/prizmkit-plan/references/independent-plan-review.md +4 -4
  114. package/bundled/skills/prizmkit-plan/references/review-plan-spec-loop.md +5 -5
  115. package/bundled/skills/prizmkit-prizm-docs/SKILL.md +75 -11
  116. package/bundled/skills/prizmkit-prizm-docs/assets/prizm-docs-format.md +191 -56
  117. package/bundled/skills/prizmkit-prizm-docs/references/op-init.md +18 -18
  118. package/bundled/skills/prizmkit-prizm-docs/references/op-rebuild.md +14 -8
  119. package/bundled/skills/prizmkit-prizm-docs/references/op-status.md +12 -5
  120. package/bundled/skills/prizmkit-prizm-docs/references/op-update.md +23 -12
  121. package/bundled/skills/prizmkit-prizm-docs/references/op-validate.md +13 -9
  122. package/bundled/skills/prizmkit-retrospective/SKILL.md +94 -97
  123. package/bundled/skills/prizmkit-retrospective/references/knowledge-injection-steps.md +79 -37
  124. package/bundled/skills/prizmkit-retrospective/references/retrospective-result-schema.json +138 -0
  125. package/bundled/skills/prizmkit-retrospective/references/structural-sync-steps.md +111 -54
  126. package/bundled/skills/prizmkit-test/SKILL.md +64 -51
  127. package/bundled/skills/prizmkit-test/references/boundary-contract-and-test-double-guidance.md +206 -0
  128. package/bundled/skills/prizmkit-test/references/independent-test-review.md +17 -9
  129. package/bundled/skills/prizmkit-test/references/test-coverage-model.md +45 -21
  130. package/bundled/skills/prizmkit-test/references/test-report-template.md +20 -13
  131. package/bundled/skills/prizmkit-workflow/SKILL.md +35 -37
  132. package/bundled/skills/prizmkit-workflow/references/artifact-identity.md +34 -0
  133. package/bundled/skills/prizmkit-workflow/references/workflow-state-protocol.md +22 -18
  134. package/bundled/skills/recovery-workflow/SKILL.md +2 -1
  135. package/bundled/skills/recovery-workflow/references/detection.md +4 -3
  136. package/bundled/skills/recovery-workflow/scripts/detect-recovery-state.py +15 -5
  137. package/bundled/templates/hooks/validate-prizm-docs.py +124 -12
  138. package/package.json +1 -1
  139. package/src/scaffold.js +33 -22
  140. package/bundled/dev-pipeline/templates/sections/bugfix-artifacts.md +0 -16
  141. package/bundled/dev-pipeline/templates/sections/bugfix-session-status.md +0 -31
  142. package/bundled/dev-pipeline/templates/sections/critical-paths-agent.md +0 -7
  143. package/bundled/dev-pipeline/templates/sections/critical-paths-lite.md +0 -7
  144. package/bundled/dev-pipeline/templates/sections/directory-convention-agent.md +0 -9
  145. package/bundled/dev-pipeline/templates/sections/directory-convention-lite.md +0 -6
  146. package/bundled/dev-pipeline/templates/sections/headless-commit-authorization.md +0 -15
  147. package/bundled/dev-pipeline/templates/sections/phase-commit.md +0 -61
  148. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-agent-suffix.md +0 -24
  149. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-lite-suffix.md +0 -12
  150. package/bundled/dev-pipeline/templates/sections/phase-implement-agent.md +0 -44
  151. package/bundled/dev-pipeline/templates/sections/phase-implement-lite.md +0 -25
  152. package/bundled/dev-pipeline/templates/sections/phase-plan-agent.md +0 -20
  153. package/bundled/dev-pipeline/templates/sections/phase-plan-lite.md +0 -20
  154. package/bundled/dev-pipeline/templates/sections/phase-review-agent.md +0 -20
  155. package/bundled/dev-pipeline/templates/sections/refactor-artifacts.md +0 -17
  156. package/bundled/dev-pipeline/templates/sections/refactor-session-status.md +0 -28
  157. package/bundled/dev-pipeline/templates/sections/test-failure-recovery-agent.md +0 -52
  158. package/bundled/dev-pipeline/templates/sections/test-failure-recovery-lite.md +0 -52
  159. package/bundled/skills/prizmkit-code-review/references/workflow-state-protocol.md +0 -174
  160. package/bundled/skills/prizmkit-committer/references/workflow-state-protocol.md +0 -174
  161. package/bundled/skills/prizmkit-implement/references/workflow-state-protocol.md +0 -174
  162. package/bundled/skills/prizmkit-plan/references/workflow-state-protocol.md +0 -174
  163. package/bundled/skills/prizmkit-retrospective/references/workflow-state-protocol.md +0 -174
  164. package/bundled/skills/prizmkit-test/references/external-contract-mock-guidance.md +0 -119
@@ -14,13 +14,11 @@ import sys
14
14
  from continuation import add_continuation_args, append_continuation_handoff, is_continuation
15
15
  from prompt_framework import (
16
16
  browser_enabled_from_item,
17
- checkpoint_group,
18
17
  checkpoint_step,
19
18
  detect_dev_server_port,
20
19
  generate_checkpoint_from_sections,
21
20
  load_section,
22
21
  merge_checkpoint_state,
23
- normalize_mode,
24
22
  pipeline_checkpoint_metadata,
25
23
  read_text_file,
26
24
  render_from_sections,
@@ -63,10 +61,17 @@ BUGFIX_SECTION_TO_SKILL = {
63
61
  "bugfix-phase-init": checkpoint_step("prizmkit-init", "Initialize", [".prizmkit/bugfix/{slug}"]),
64
62
  "bugfix-phase-diagnose-plan": checkpoint_step(
65
63
  "bug-diagnosis-and-plan", "Diagnose & Plan",
66
- [".prizmkit/bugfix/{slug}/spec.md", ".prizmkit/bugfix/{slug}/plan.md"],
64
+ [
65
+ ".prizmkit/bugfix/{slug}/context-snapshot.md",
66
+ ".prizmkit/bugfix/{slug}/spec.md",
67
+ ".prizmkit/bugfix/{slug}/plan.md",
68
+ ],
67
69
  ),
68
70
  "bugfix-phase-implement": checkpoint_step("prizmkit-implement", "Implement Fix", []),
69
- "bugfix-phase-review": checkpoint_step("prizmkit-code-review", "Code Review", []),
71
+ "bugfix-phase-review": checkpoint_step(
72
+ "prizmkit-code-review", "Code Review",
73
+ [".prizmkit/bugfix/{slug}/review-report.md"],
74
+ ),
70
75
  "bugfix-phase-test": checkpoint_step(
71
76
  "prizmkit-test", "Post-Review Test Gate",
72
77
  [
@@ -75,11 +80,21 @@ BUGFIX_SECTION_TO_SKILL = {
75
80
  ],
76
81
  ),
77
82
  "phase-browser": checkpoint_step("browser-verification", "Browser Verification", []),
78
- "bugfix-phase-commit-report": checkpoint_group([
79
- ("prizmkit-retrospective", "Retrospective", []),
80
- ("prizmkit-committer", "Commit", []),
81
- ("bug-report", "Generate Fix Report", [".prizmkit/bugfix/{slug}/fix-report.md"]),
82
- ]),
83
+ "bugfix-manual-gate": checkpoint_step(
84
+ "manual-verification", "Manual / Hybrid Verification", []
85
+ ),
86
+ "bugfix-phase-commit-report": checkpoint_step(
87
+ "bug-report", "Generate Fix Report",
88
+ [".prizmkit/bugfix/{slug}/fix-report.md"],
89
+ ),
90
+ "retrospective": checkpoint_step(
91
+ "prizmkit-retrospective", "Retrospective",
92
+ [".prizmkit/bugfix/{slug}/retrospective-result.json"],
93
+ ),
94
+ "runtime-commit-handoff": checkpoint_step(
95
+ "prizmkit-committer", "Runtime Commit Handoff",
96
+ [".prizmkit/bugfix/{slug}/runtime-commit-request.json"],
97
+ ),
83
98
  }
84
99
 
85
100
  BUGFIX_SPLIT_STEPS = {}
@@ -101,8 +116,12 @@ def parse_args():
101
116
  parser.add_argument("--state-dir", default=None, help="State directory (default: .prizmkit/state/bugfix)")
102
117
  parser.add_argument("--output", required=True, help="Output path for the rendered prompt")
103
118
  parser.add_argument("--project-root", default=None, help="AI-visible project root used for rendered prompt paths")
119
+ parser.add_argument(
120
+ "--no-checkpoint-write",
121
+ action="store_true",
122
+ help="Render and validate a preview without creating or updating checkpoint state",
123
+ )
104
124
  parser.add_argument("--template", default=None, help="Custom legacy template path. Defaults to section assembly.")
105
- parser.add_argument("--mode", choices=["lite", "standard", "full"], default=None, help="Pipeline execution mode override")
106
125
  add_continuation_args(parser, "bugfix")
107
126
  return parser.parse_args()
108
127
 
@@ -255,16 +274,6 @@ def _args_project_root(args, script_dir):
255
274
  return resolve_project_root(script_dir)
256
275
 
257
276
 
258
- def determine_bugfix_mode(args, bug):
259
- if args.mode:
260
- return args.mode
261
- return normalize_mode(
262
- {"low": "lite", "medium": "lite", "high": "standard", "critical": "full"}.get(
263
- str(bug.get("severity", "medium")).lower(), "lite"
264
- )
265
- )
266
-
267
-
268
277
  def is_recovery_like(args):
269
278
  retry_count = 0
270
279
  try:
@@ -279,13 +288,6 @@ def build_replacements(args, bug, global_context, script_dir):
279
288
  project_root = _args_project_root(args, script_dir)
280
289
  resolve_prompt_platform(project_root)
281
290
 
282
- state_dir = (
283
- os.path.abspath(args.state_dir)
284
- if args.state_dir
285
- else os.path.join(project_root, ".prizmkit", "state", "bugfix")
286
- )
287
- session_status_path = os.path.join(state_dir, args.bug_id, "sessions", args.session_id, "session-status.json")
288
-
289
291
  error_source = bug.get("error_source", {})
290
292
  error_type = error_source.get("type", "unknown") if isinstance(error_source, dict) else "unknown"
291
293
  affected_modules = bug.get("affected_modules", [])
@@ -296,7 +298,6 @@ def build_replacements(args, bug, global_context, script_dir):
296
298
  dev_port = detect_dev_server_port(project_root)
297
299
  dev_url = "http://localhost:{}".format(dev_port) if dev_port.isdigit() else "<UNKNOWN_DETECT_FROM_PROJECT_CONFIG>"
298
300
 
299
- pipeline_mode = determine_bugfix_mode(args, bug)
300
301
  manual_or_hybrid = verification_type in ("manual", "hybrid")
301
302
  manual_policy = (
302
303
  "Manual/hybrid verification is executed automatically in headless mode: use available browser, CLI, API, fixture, and test evidence; document the verification evidence and proceed through review, test, retrospective, and commit."
@@ -313,7 +314,6 @@ def build_replacements(args, bug, global_context, script_dir):
313
314
  "{{TASK_TITLE}}": bug.get("title", ""),
314
315
  "{{BUG_TITLE}}": bug.get("title", ""),
315
316
  "{{SEVERITY}}": bug.get("severity", "medium"),
316
- "{{PIPELINE_MODE}}": pipeline_mode,
317
317
  "{{VERIFICATION_TYPE}}": verification_type,
318
318
  "{{MANUAL_VERIFICATION_POLICY}}": manual_policy,
319
319
  "{{BUG_DESCRIPTION}}": bug.get("description", ""),
@@ -324,9 +324,9 @@ def build_replacements(args, bug, global_context, script_dir):
324
324
  "{{AC_CHECKLIST}}": format_ac_checklist(bug.get("acceptance_criteria", [])),
325
325
  "{{ENVIRONMENT}}": format_environment(bug.get("environment")),
326
326
  "{{GLOBAL_CONTEXT}}": format_global_context(global_context, project_root),
327
- "{{SESSION_STATUS_PATH}}": session_status_path,
328
327
  "{{PROJECT_ROOT}}": project_root,
329
328
  "{{ARTIFACT_DIR}}": ".prizmkit/bugfix/{}".format(args.bug_id),
329
+ "{{FAMILY_ARTIFACTS}}": "├── fix-report.md",
330
330
  "{{CHECKPOINT_PATH}}": os.path.join(".prizmkit", "bugfix", args.bug_id, "workflow-checkpoint.json"),
331
331
  "{{CHECKPOINT_SYSTEM}}": read_checkpoint_system_section(script_dir),
332
332
  "{{FIX_SCOPE}}": fix_scope,
@@ -380,24 +380,22 @@ def render_template(template_content, replacements, bug):
380
380
  return replace_placeholders(process_conditional_blocks(template_content, bug), replacements)
381
381
 
382
382
 
383
- def _bugfix_header(pipeline_mode):
384
- title = "# Dev-Pipeline Bug Fix Session Bootstrap — {}\n".format(pipeline_mode.title())
385
- desc = {
386
- "lite": "**Tier 1 — Scoped Bugfix Guidance**: use the active skills and runtime contracts for diagnosis, implementation, review, and verification.",
387
- "standard": "**Tier 2 — Bugfix Review Gates**: use the active skills and runtime contracts for diagnosis, implementation, review, and verification.",
388
- "full": "**Tier 3 — Full Bugfix Guardrails**: use the active skills and runtime contracts for diagnosis, implementation, review, recovery, and verification.",
389
- }.get(pipeline_mode, "**Bugfix pipeline**")
390
- return title + "\n" + desc + "\n"
383
+ def _bugfix_header():
384
+ return (
385
+ "# Dev-Pipeline Bug Fix Session Bootstrap — Canonical Guidance\n\n"
386
+ "Use the active skills and runtime contracts for diagnosis, implementation, "
387
+ "review, verification, retrospective, and runtime-owned commit execution.\n"
388
+ )
391
389
 
392
390
 
393
- def assemble_bugfix_sections(pipeline_mode, sections_dir, browser_enabled, manual_gate, browser_tool="auto"):
391
+ def assemble_bugfix_sections(sections_dir, browser_enabled, manual_gate, browser_tool="auto"):
394
392
  sections = [
395
- ("header", _bugfix_header(pipeline_mode)),
393
+ ("header", _bugfix_header()),
396
394
  ("bugfix-session-context", load_section(sections_dir, "bugfix-session-context.md")),
397
395
  ("mission", load_section(sections_dir, "bugfix-mission.md")),
398
396
  ("bugfix-task-contract", load_section(sections_dir, "bugfix-task-contract.md")),
399
397
  ("context-budget-rules", load_section(sections_dir, "context-budget-rules.md")),
400
- ("bugfix-artifacts", load_section(sections_dir, "bugfix-artifacts.md")),
398
+ ("artifact-manifest", load_section(sections_dir, "artifact-manifest.md")),
401
399
  ("checkpoint-system", load_section(sections_dir, "checkpoint-system.md")),
402
400
  ("execution-header", "---\n\n## Execution\n"),
403
401
  ("bugfix-phase-init", load_section(sections_dir, "bugfix-phase-init.md")),
@@ -406,7 +404,6 @@ def assemble_bugfix_sections(pipeline_mode, sections_dir, browser_enabled, manua
406
404
  sections.extend([
407
405
  ("bugfix-phase-implement", load_section(sections_dir, "bugfix-phase-implement.md")),
408
406
  ("bugfix-phase-review", load_section(sections_dir, "bugfix-phase-review.md")),
409
- ("bugfix-phase-test", load_section(sections_dir, "bugfix-phase-test.md")),
410
407
  ])
411
408
  if browser_enabled:
412
409
  browser_section_file = {
@@ -417,9 +414,10 @@ def assemble_bugfix_sections(pipeline_mode, sections_dir, browser_enabled, manua
417
414
  if manual_gate:
418
415
  sections.append(("bugfix-manual-gate", load_section(sections_dir, "bugfix-phase-manual-verification.md")))
419
416
  sections.extend([
420
- ("headless-commit-authorization", load_section(sections_dir, "headless-commit-authorization.md")),
417
+ ("bugfix-phase-test", load_section(sections_dir, "bugfix-phase-test.md")),
421
418
  ("bugfix-phase-commit-report", load_section(sections_dir, "bugfix-phase-commit-report.md")),
422
- ("bugfix-session-status", load_section(sections_dir, "bugfix-session-status.md")),
419
+ ("retrospective", load_section(sections_dir, "retrospective.md")),
420
+ ("runtime-commit-handoff", load_section(sections_dir, "runtime-commit-handoff.md")),
423
421
  ("bugfix-critical-paths", load_section(sections_dir, "bugfix-critical-paths.md")),
424
422
  ("failure-capture", load_section(sections_dir, "failure-capture.md")),
425
423
  ("bugfix-reminders", load_section(sections_dir, "bugfix-reminders.md")),
@@ -427,21 +425,30 @@ def assemble_bugfix_sections(pipeline_mode, sections_dir, browser_enabled, manua
427
425
  return sections
428
426
 
429
427
 
430
- def generate_bugfix_checkpoint(bug_id, session_id, pipeline_mode="standard", sections=None):
431
- """Generate a checkpoint definition for bugfix pipeline."""
428
+ def generate_bugfix_checkpoint(
429
+ bug_id, session_id, sections=None, *, browser_enabled=False, manual_gate=False,
430
+ ):
431
+ """Generate a checkpoint definition for the Bugfix coordinator."""
432
432
  if sections is None:
433
433
  sections = [
434
434
  ("bugfix-phase-init", ""),
435
435
  ("bugfix-phase-diagnose-plan", ""),
436
436
  ("bugfix-phase-implement", ""),
437
437
  ("bugfix-phase-review", ""),
438
+ ]
439
+ if browser_enabled:
440
+ sections.append(("phase-browser", ""))
441
+ if manual_gate:
442
+ sections.append(("bugfix-manual-gate", ""))
443
+ sections.extend([
438
444
  ("bugfix-phase-test", ""),
439
445
  ("bugfix-phase-commit-report", ""),
440
- ]
446
+ ("retrospective", ""),
447
+ ("runtime-commit-handoff", ""),
448
+ ])
441
449
  return generate_checkpoint_from_sections(
442
450
  sections,
443
451
  BUGFIX_SECTION_TO_SKILL,
444
- pipeline_mode,
445
452
  "bugfix-pipeline",
446
453
  bug_id,
447
454
  bug_id,
@@ -485,7 +492,6 @@ def main():
485
492
  global_context = {}
486
493
 
487
494
  replacements = build_replacements(args, bug, global_context, script_dir)
488
- pipeline_mode = replacements["{{PIPELINE_MODE}}"]
489
495
  browser_enabled = replacements["{{BROWSER_ENABLED}}"] == "true"
490
496
  manual_gate = bug.get("verification_type", "automated") in ("manual", "hybrid")
491
497
 
@@ -494,16 +500,17 @@ def main():
494
500
  if use_sections:
495
501
  try:
496
502
  sections = assemble_bugfix_sections(
497
- pipeline_mode, sections_dir, browser_enabled, manual_gate,
503
+ sections_dir, browser_enabled, manual_gate,
498
504
  browser_tool=replacements["{{BROWSER_TOOL}}"],
499
505
  )
500
506
  rendered = render_from_sections(sections, replacements)
501
507
  except FileNotFoundError as exc:
502
- LOGGER.warning("Bugfix section assembly failed (%s), falling back to legacy template", exc)
503
- use_sections = False
508
+ emit_failure("Bugfix section assembly failed: {}".format(exc))
504
509
 
505
510
  if not use_sections:
506
- template_path = args.template or os.path.join(templates_dir, "bugfix-bootstrap-prompt.md")
511
+ if not args.template:
512
+ emit_failure("Canonical Bugfix prompt sections are unavailable")
513
+ template_path = args.template
507
514
  template_content, err = read_text_file(template_path)
508
515
  if err:
509
516
  emit_failure("Template error: {}".format(err))
@@ -519,7 +526,7 @@ def main():
519
526
  logger=LOGGER,
520
527
  )
521
528
  if not is_valid:
522
- LOGGER.error("Rendered bugfix prompt failed validation: %s", "; ".join(errors))
529
+ emit_failure("Rendered bugfix prompt failed validation: {}".format("; ".join(errors)))
523
530
 
524
531
  err = write_output(args.output, rendered)
525
532
  if err:
@@ -527,9 +534,14 @@ def main():
527
534
 
528
535
  project_root = _args_project_root(args, script_dir)
529
536
  checkpoint_path = os.path.join(project_root, replacements["{{CHECKPOINT_PATH}}"])
530
- os.makedirs(os.path.dirname(checkpoint_path), exist_ok=True)
537
+ if not args.no_checkpoint_write:
538
+ os.makedirs(os.path.dirname(checkpoint_path), exist_ok=True)
531
539
  checkpoint = generate_bugfix_checkpoint(
532
- args.bug_id, args.session_id, pipeline_mode, sections if use_sections else None,
540
+ args.bug_id,
541
+ args.session_id,
542
+ sections if use_sections else None,
543
+ browser_enabled=browser_enabled,
544
+ manual_gate=manual_gate,
533
545
  )
534
546
  if not any(step.get("skill") == "prizmkit-test" for step in checkpoint["steps"]):
535
547
  emit_failure("Bugfix checkpoint is missing the mandatory prizmkit-test stage")
@@ -544,7 +556,7 @@ def main():
544
556
  resume_from="prizmkit-implement",
545
557
  )
546
558
 
547
- if (args.resume_phase != "null" or is_continuation(args)) and os.path.exists(checkpoint_path):
559
+ if not args.no_checkpoint_write and (args.resume_phase != "null" or is_continuation(args)) and os.path.exists(checkpoint_path):
548
560
  try:
549
561
  with open(checkpoint_path, "r", encoding="utf-8") as f:
550
562
  existing = json.load(f)
@@ -553,14 +565,32 @@ def main():
553
565
  except (json.JSONDecodeError, KeyError) as exc:
554
566
  LOGGER.warning("Existing bugfix checkpoint corrupted (%s) — generating fresh", exc)
555
567
 
556
- with open(checkpoint_path, "w", encoding="utf-8") as f:
557
- json.dump(checkpoint, f, indent=2, ensure_ascii=False)
558
- LOGGER.info("Wrote bugfix checkpoint to %s", checkpoint_path)
568
+ if not args.no_checkpoint_write:
569
+ with open(checkpoint_path, "w", encoding="utf-8") as f:
570
+ json.dump(checkpoint, f, indent=2, ensure_ascii=False)
571
+ LOGGER.info("Wrote bugfix checkpoint to %s", checkpoint_path)
559
572
 
560
573
  if is_continuation(args):
561
574
  rendered = append_continuation_handoff(
562
575
  rendered, args, project_root, args.task_type, args.bug_id, args.bug_id, checkpoint,
563
576
  )
577
+ final_valid, final_warnings, final_errors = validate_rendered(
578
+ rendered,
579
+ required_markers=[
580
+ ("## Your Mission", "Mission section"),
581
+ ("## Execution", "Execution section"),
582
+ ("## Failure Capture", "Failure Capture Protocol"),
583
+ ],
584
+ logger=LOGGER,
585
+ )
586
+ if not final_valid:
587
+ emit_failure(
588
+ "Rendered bugfix continuation prompt failed validation: {}".format(
589
+ "; ".join(final_errors)
590
+ )
591
+ )
592
+ warnings.extend(final_warnings)
593
+ errors.extend(final_errors)
564
594
  err = write_output(args.output, rendered)
565
595
  if err:
566
596
  emit_failure(err)
@@ -568,9 +598,8 @@ def main():
568
598
  output = {
569
599
  "success": True,
570
600
  "output_path": os.path.abspath(args.output),
571
- "checkpoint_path": checkpoint_path,
601
+ "checkpoint_path": "" if args.no_checkpoint_write else checkpoint_path,
572
602
  "model": bug.get("model", ""),
573
- "pipeline_mode": pipeline_mode,
574
603
  "render_mode": "sections" if use_sections else "legacy",
575
604
  "validation_warnings": len(warnings),
576
605
  "validation_errors": len(errors),