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.
- package/bundled/VERSION.json +3 -3
- package/bundled/adapters/codex/skill-adapter.js +1 -1
- package/bundled/adapters/pi/skill-adapter.js +2 -1
- package/bundled/dev-pipeline/.env.example +2 -6
- package/bundled/dev-pipeline/README.md +21 -27
- package/bundled/dev-pipeline/prizmkit_runtime/checkpoint_state.py +341 -15
- package/bundled/dev-pipeline/prizmkit_runtime/cli.py +0 -3
- package/bundled/dev-pipeline/prizmkit_runtime/daemon.py +1 -15
- package/bundled/dev-pipeline/prizmkit_runtime/gitops.py +48 -14
- package/bundled/dev-pipeline/prizmkit_runtime/runner_classification.py +50 -2
- package/bundled/dev-pipeline/prizmkit_runtime/runner_models.py +0 -9
- package/bundled/dev-pipeline/prizmkit_runtime/runner_prompts.py +3 -3
- package/bundled/dev-pipeline/prizmkit_runtime/runners.py +120 -22
- package/bundled/dev-pipeline/prizmkit_runtime/runtime_commit.py +482 -0
- package/bundled/dev-pipeline/prizmkit_runtime/test_result.py +64 -11
- package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +145 -367
- package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +91 -62
- package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +105 -69
- package/bundled/dev-pipeline/scripts/prompt_framework.py +36 -41
- package/bundled/dev-pipeline/scripts/update-bug-status.py +1 -4
- package/bundled/dev-pipeline/scripts/update-checkpoint.py +61 -13
- package/bundled/dev-pipeline/scripts/update-feature-status.py +1 -4
- package/bundled/dev-pipeline/scripts/update-refactor-status.py +1 -4
- package/bundled/dev-pipeline/templates/bootstrap-prompt.md +22 -27
- package/bundled/dev-pipeline/templates/bootstrap-tier3.md +71 -104
- package/bundled/dev-pipeline/templates/bugfix-bootstrap-prompt.md +59 -111
- package/bundled/dev-pipeline/templates/refactor-bootstrap-prompt.md +37 -72
- package/bundled/dev-pipeline/templates/sections/artifact-manifest.md +39 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-critical-paths.md +3 -1
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-commit-report.md +8 -25
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-diagnose-plan.md +3 -3
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-implement.md +2 -2
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-review.md +3 -3
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-test.md +2 -2
- package/bundled/dev-pipeline/templates/sections/bugfix-reminders.md +4 -4
- package/bundled/dev-pipeline/templates/sections/bugfix-session-context.md +0 -1
- package/bundled/dev-pipeline/templates/sections/checkpoint-system.md +7 -4
- package/bundled/dev-pipeline/templates/sections/context-budget-rules.md +14 -27
- package/bundled/dev-pipeline/templates/sections/feature-completion-summary.md +20 -0
- package/bundled/dev-pipeline/templates/sections/phase-commit-full.md +8 -71
- package/bundled/dev-pipeline/templates/sections/phase-implement-full.md +7 -7
- package/bundled/dev-pipeline/templates/sections/phase-prizmkit-test.md +3 -3
- package/bundled/dev-pipeline/templates/sections/phase-review-full.md +4 -4
- package/bundled/dev-pipeline/templates/sections/phase-specify-plan-full.md +5 -17
- package/bundled/dev-pipeline/templates/sections/refactor-critical-paths.md +3 -1
- package/bundled/dev-pipeline/templates/sections/refactor-phase-commit-report.md +10 -23
- package/bundled/dev-pipeline/templates/sections/refactor-phase-implement.md +2 -2
- package/bundled/dev-pipeline/templates/sections/refactor-phase-plan.md +2 -2
- package/bundled/dev-pipeline/templates/sections/refactor-phase-review.md +3 -3
- package/bundled/dev-pipeline/templates/sections/refactor-phase-test.md +2 -2
- package/bundled/dev-pipeline/templates/sections/refactor-reminders.md +7 -7
- package/bundled/dev-pipeline/templates/sections/refactor-session-context.md +0 -1
- package/bundled/dev-pipeline/templates/sections/retrospective.md +12 -0
- package/bundled/dev-pipeline/templates/sections/runtime-commit-handoff.md +35 -0
- package/bundled/dev-pipeline/templates/session-status-schema.json +45 -62
- package/bundled/dev-pipeline/tests/test_checkpoint_state.py +469 -18
- package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +262 -175
- package/bundled/dev-pipeline/tests/test_generate_bugfix_prompt.py +62 -23
- package/bundled/dev-pipeline/tests/test_generate_refactor_prompt.py +76 -28
- package/bundled/dev-pipeline/tests/test_python_runner_parity.py +168 -18
- package/bundled/dev-pipeline/tests/test_recovery_workflow.py +111 -0
- package/bundled/dev-pipeline/tests/test_reset_preserve.py +0 -2
- package/bundled/dev-pipeline/tests/test_runtime_commit.py +608 -0
- package/bundled/dev-pipeline/tests/test_unified_cli.py +167 -25
- package/bundled/skills/_metadata.json +9 -9
- package/bundled/skills/app-planner/SKILL.md +3 -3
- package/bundled/skills/app-planner/references/generated-plan-review.md +2 -1
- package/bundled/skills/app-planner/references/rules/backend/derivation-rules.md +56 -64
- package/bundled/skills/app-planner/references/rules/backend/fixed-rules.md +85 -240
- package/bundled/skills/app-planner/references/rules/backend/question-bank.md +25 -25
- package/bundled/skills/app-planner/references/rules/backend/question-manifest.json +16 -7
- package/bundled/skills/app-planner/references/rules/backend/template.md +74 -92
- package/bundled/skills/app-planner/references/rules/database/derivation-rules.md +93 -93
- package/bundled/skills/app-planner/references/rules/database/fixed-rules.md +66 -173
- package/bundled/skills/app-planner/references/rules/database/question-bank.md +31 -26
- package/bundled/skills/app-planner/references/rules/database/question-manifest.json +13 -4
- package/bundled/skills/app-planner/references/rules/database/template.md +76 -98
- package/bundled/skills/app-planner/references/rules/frontend/derivation-rules.md +68 -95
- package/bundled/skills/app-planner/references/rules/frontend/fixed-rules.md +93 -166
- package/bundled/skills/app-planner/references/rules/frontend/question-bank.md +46 -36
- package/bundled/skills/app-planner/references/rules/frontend/question-manifest.json +11 -2
- package/bundled/skills/app-planner/references/rules/frontend/template.md +79 -257
- package/bundled/skills/app-planner/references/rules/mobile/derivation-rules.md +91 -99
- package/bundled/skills/app-planner/references/rules/mobile/fixed-rules.md +73 -246
- package/bundled/skills/app-planner/references/rules/mobile/question-bank.md +17 -17
- package/bundled/skills/app-planner/references/rules/mobile/question-manifest.json +17 -2
- package/bundled/skills/app-planner/references/rules/mobile/template.md +73 -85
- package/bundled/skills/app-planner/references/rules-configuration.md +133 -65
- package/bundled/skills/app-planner/scripts/validate-rules-configuration.py +291 -0
- package/bundled/skills/prizmkit/SKILL.md +17 -18
- package/bundled/skills/prizmkit/references/workflow-state-protocol.md +22 -18
- package/bundled/skills/prizmkit-code-review/SKILL.md +22 -58
- package/bundled/skills/prizmkit-code-review/references/independent-code-review.md +6 -6
- package/bundled/skills/prizmkit-code-review/references/review-report-template.md +2 -2
- package/bundled/skills/prizmkit-committer/SKILL.md +82 -132
- package/bundled/skills/prizmkit-deploy/SKILL.md +27 -11
- package/bundled/skills/prizmkit-deploy/assets/deploy-document-template.md +89 -0
- package/bundled/skills/prizmkit-deploy/references/ci-cd-workflows.md +44 -14
- package/bundled/skills/prizmkit-deploy/references/cloud-platform-deploy.md +19 -3
- package/bundled/skills/prizmkit-deploy/references/database-setup.md +22 -12
- package/bundled/skills/prizmkit-deploy/references/deploy-config-schema.md +3 -1
- package/bundled/skills/prizmkit-deploy/references/deploy-history-schema.md +22 -6
- package/bundled/skills/prizmkit-deploy/references/deploy-metadata-schema.json +49 -0
- package/bundled/skills/prizmkit-deploy/references/live-validation-notes.md +1 -1
- package/bundled/skills/prizmkit-deploy/references/pending-input-schema.json +164 -0
- package/bundled/skills/prizmkit-deploy/references/ssh-adapter-flow.md +9 -8
- package/bundled/skills/prizmkit-deploy/references/ssh-execution-flow.md +6 -6
- package/bundled/skills/prizmkit-implement/SKILL.md +30 -66
- package/bundled/skills/prizmkit-implement/references/implementation-subagent-procedure.md +4 -4
- package/bundled/skills/prizmkit-init/SKILL.md +4 -0
- package/bundled/skills/prizmkit-plan/SKILL.md +21 -64
- package/bundled/skills/prizmkit-plan/references/artifact-identity.md +38 -0
- package/bundled/skills/prizmkit-plan/references/independent-plan-review.md +4 -4
- package/bundled/skills/prizmkit-plan/references/review-plan-spec-loop.md +5 -5
- package/bundled/skills/prizmkit-prizm-docs/SKILL.md +75 -11
- package/bundled/skills/prizmkit-prizm-docs/assets/prizm-docs-format.md +191 -56
- package/bundled/skills/prizmkit-prizm-docs/references/op-init.md +18 -18
- package/bundled/skills/prizmkit-prizm-docs/references/op-rebuild.md +14 -8
- package/bundled/skills/prizmkit-prizm-docs/references/op-status.md +12 -5
- package/bundled/skills/prizmkit-prizm-docs/references/op-update.md +23 -12
- package/bundled/skills/prizmkit-prizm-docs/references/op-validate.md +13 -9
- package/bundled/skills/prizmkit-retrospective/SKILL.md +94 -97
- package/bundled/skills/prizmkit-retrospective/references/knowledge-injection-steps.md +79 -37
- package/bundled/skills/prizmkit-retrospective/references/retrospective-result-schema.json +138 -0
- package/bundled/skills/prizmkit-retrospective/references/structural-sync-steps.md +111 -54
- package/bundled/skills/prizmkit-test/SKILL.md +64 -51
- package/bundled/skills/prizmkit-test/references/boundary-contract-and-test-double-guidance.md +206 -0
- package/bundled/skills/prizmkit-test/references/independent-test-review.md +17 -9
- package/bundled/skills/prizmkit-test/references/test-coverage-model.md +45 -21
- package/bundled/skills/prizmkit-test/references/test-report-template.md +20 -13
- package/bundled/skills/prizmkit-workflow/SKILL.md +35 -37
- package/bundled/skills/prizmkit-workflow/references/artifact-identity.md +34 -0
- package/bundled/skills/prizmkit-workflow/references/workflow-state-protocol.md +22 -18
- package/bundled/skills/recovery-workflow/SKILL.md +2 -1
- package/bundled/skills/recovery-workflow/references/detection.md +4 -3
- package/bundled/skills/recovery-workflow/scripts/detect-recovery-state.py +15 -5
- package/bundled/templates/hooks/validate-prizm-docs.py +124 -12
- package/package.json +1 -1
- package/src/scaffold.js +33 -22
- package/bundled/dev-pipeline/templates/sections/bugfix-artifacts.md +0 -16
- package/bundled/dev-pipeline/templates/sections/bugfix-session-status.md +0 -31
- package/bundled/dev-pipeline/templates/sections/critical-paths-agent.md +0 -7
- package/bundled/dev-pipeline/templates/sections/critical-paths-lite.md +0 -7
- package/bundled/dev-pipeline/templates/sections/directory-convention-agent.md +0 -9
- package/bundled/dev-pipeline/templates/sections/directory-convention-lite.md +0 -6
- package/bundled/dev-pipeline/templates/sections/headless-commit-authorization.md +0 -15
- package/bundled/dev-pipeline/templates/sections/phase-commit.md +0 -61
- package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-agent-suffix.md +0 -24
- package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-lite-suffix.md +0 -12
- package/bundled/dev-pipeline/templates/sections/phase-implement-agent.md +0 -44
- package/bundled/dev-pipeline/templates/sections/phase-implement-lite.md +0 -25
- package/bundled/dev-pipeline/templates/sections/phase-plan-agent.md +0 -20
- package/bundled/dev-pipeline/templates/sections/phase-plan-lite.md +0 -20
- package/bundled/dev-pipeline/templates/sections/phase-review-agent.md +0 -20
- package/bundled/dev-pipeline/templates/sections/refactor-artifacts.md +0 -17
- package/bundled/dev-pipeline/templates/sections/refactor-session-status.md +0 -28
- package/bundled/dev-pipeline/templates/sections/test-failure-recovery-agent.md +0 -52
- package/bundled/dev-pipeline/templates/sections/test-failure-recovery-lite.md +0 -52
- package/bundled/skills/prizmkit-code-review/references/workflow-state-protocol.md +0 -174
- package/bundled/skills/prizmkit-committer/references/workflow-state-protocol.md +0 -174
- package/bundled/skills/prizmkit-implement/references/workflow-state-protocol.md +0 -174
- package/bundled/skills/prizmkit-plan/references/workflow-state-protocol.md +0 -174
- package/bundled/skills/prizmkit-retrospective/references/workflow-state-protocol.md +0 -174
- 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
|
-
[
|
|
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(
|
|
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-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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(
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
"
|
|
387
|
-
"
|
|
388
|
-
|
|
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(
|
|
391
|
+
def assemble_bugfix_sections(sections_dir, browser_enabled, manual_gate, browser_tool="auto"):
|
|
394
392
|
sections = [
|
|
395
|
-
("header", _bugfix_header(
|
|
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
|
-
("
|
|
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
|
-
("
|
|
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
|
-
("
|
|
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(
|
|
431
|
-
|
|
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
|
-
|
|
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
|
-
|
|
503
|
-
use_sections = False
|
|
508
|
+
emit_failure("Bugfix section assembly failed: {}".format(exc))
|
|
504
509
|
|
|
505
510
|
if not use_sections:
|
|
506
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
557
|
-
|
|
558
|
-
|
|
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),
|