prizmkit 1.1.119 → 1.1.121
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/bin/create-prizmkit.js +1 -5
- package/bundled/VERSION.json +3 -3
- package/bundled/dev-pipeline/README.md +41 -38
- package/bundled/dev-pipeline/assets/skill-subagent-integration.md +76 -0
- package/bundled/dev-pipeline/prizmkit_runtime/config.py +2 -8
- package/bundled/dev-pipeline/prizmkit_runtime/interoperability.py +1 -1
- package/bundled/dev-pipeline/prizmkit_runtime/platform_detection.py +3 -3
- package/bundled/dev-pipeline/prizmkit_runtime/runner_classification.py +23 -25
- package/bundled/dev-pipeline/prizmkit_runtime/runner_models.py +8 -2
- package/bundled/dev-pipeline/prizmkit_runtime/runner_prompts.py +10 -1
- package/bundled/dev-pipeline/prizmkit_runtime/runners.py +88 -32
- package/bundled/dev-pipeline/prizmkit_runtime/sessions.py +28 -6
- package/bundled/dev-pipeline/scripts/continuation.py +51 -6
- package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +60 -102
- package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +1 -19
- package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +1 -19
- package/bundled/dev-pipeline/scripts/{init-dev-team.py → init-change-artifact.py} +6 -16
- package/bundled/dev-pipeline/scripts/parse-stream-progress.py +364 -76
- package/bundled/dev-pipeline/scripts/update-bug-status.py +57 -14
- package/bundled/dev-pipeline/scripts/update-feature-status.py +54 -5
- package/bundled/dev-pipeline/scripts/update-refactor-status.py +57 -14
- package/bundled/dev-pipeline/scripts/utils.py +1 -1
- package/bundled/dev-pipeline/templates/bootstrap-prompt.md +2 -2
- package/bundled/dev-pipeline/templates/bootstrap-tier3.md +9 -11
- package/bundled/dev-pipeline/templates/bugfix-bootstrap-prompt.md +2 -1
- package/bundled/dev-pipeline/templates/refactor-bootstrap-prompt.md +2 -2
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-review.md +3 -3
- package/bundled/dev-pipeline/templates/sections/context-budget-rules.md +1 -1
- package/bundled/dev-pipeline/templates/sections/critical-paths-agent.md +0 -1
- package/bundled/dev-pipeline/templates/sections/critical-paths-full.md +0 -2
- package/bundled/dev-pipeline/templates/sections/phase-commit-full.md +8 -1
- package/bundled/dev-pipeline/templates/sections/phase-implement-agent.md +6 -7
- package/bundled/dev-pipeline/templates/sections/phase-implement-full.md +6 -7
- package/bundled/dev-pipeline/templates/sections/phase-implement-lite.md +4 -2
- package/bundled/dev-pipeline/templates/sections/phase-review-agent.md +3 -3
- package/bundled/dev-pipeline/templates/sections/phase-review-full.md +5 -3
- package/bundled/dev-pipeline/templates/sections/phase-specify-plan-full.md +20 -0
- package/bundled/dev-pipeline/templates/sections/refactor-phase-review.md +3 -3
- package/bundled/dev-pipeline/tests/test_auto_skip.py +5 -5
- package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +214 -144
- package/bundled/dev-pipeline/tests/test_generate_bugfix_prompt.py +25 -12
- package/bundled/dev-pipeline/tests/test_generate_refactor_prompt.py +11 -14
- package/bundled/dev-pipeline/tests/test_python_runner_parity.py +235 -32
- package/bundled/dev-pipeline/tests/test_unified_cli.py +219 -16
- package/bundled/skills/_metadata.json +4 -4
- package/bundled/skills/app-planner/SKILL.md +2 -2
- package/bundled/skills/app-planner/references/architecture-decisions.md +1 -3
- package/bundled/skills/prizmkit-code-review/SKILL.md +50 -47
- package/bundled/skills/prizmkit-code-review/references/review-report-template.md +13 -8
- package/bundled/skills/prizmkit-code-review/references/reviewer-agent-prompt.md +47 -33
- package/bundled/skills/prizmkit-code-review/references/reviewer-workspace-protocol.md +90 -0
- package/bundled/skills/prizmkit-implement/SKILL.md +21 -1
- package/bundled/skills/prizmkit-implement/references/implementation-subagent-procedure.md +67 -0
- package/bundled/skills/prizmkit-test/SKILL.md +159 -155
- package/bundled/skills/prizmkit-test/assets/authoritative-records.schema.json +420 -0
- package/bundled/skills/prizmkit-test/assets/behavior-risk-matrix.schema.json +116 -0
- package/bundled/skills/prizmkit-test/assets/evidence-manifest.schema.json +112 -0
- package/bundled/skills/prizmkit-test/assets/evidence-package-template.json +97 -0
- package/bundled/skills/prizmkit-test/references/boundary-coverage-protocol.md +76 -192
- package/bundled/skills/prizmkit-test/references/contract-mock-protocol.md +65 -0
- package/bundled/skills/prizmkit-test/references/evidence-protocol.md +194 -0
- package/bundled/skills/prizmkit-test/references/evidence-request-protocol.md +78 -0
- package/bundled/skills/prizmkit-test/references/examples.md +65 -108
- package/bundled/skills/prizmkit-test/references/service-boundary-test-catalog.md +10 -7
- package/bundled/skills/prizmkit-test/references/test-generation-steps.md +90 -82
- package/bundled/skills/prizmkit-test/references/test-report-template.md +77 -98
- package/bundled/skills/prizmkit-test/references/trusted-evidence-execution.md +97 -0
- package/bundled/skills/prizmkit-test/scripts/build_test_evidence.py +723 -0
- package/bundled/skills/prizmkit-test/scripts/validate_test_evidence.py +1426 -0
- package/package.json +1 -1
- package/src/clean.js +12 -8
- package/src/config.js +24 -42
- package/src/index.js +1 -10
- package/src/manifest.js +3 -9
- package/src/metadata.js +0 -26
- package/src/prompts.js +0 -13
- package/src/scaffold.js +76 -201
- package/src/upgrade.js +16 -33
- package/bundled/adapters/claude/agent-adapter.js +0 -96
- package/bundled/adapters/claude/team-adapter.js +0 -183
- package/bundled/adapters/codebuddy/agent-adapter.js +0 -42
- package/bundled/adapters/codebuddy/team-adapter.js +0 -46
- package/bundled/adapters/codex/agent-adapter.js +0 -38
- package/bundled/adapters/codex/team-adapter.js +0 -37
- package/bundled/agents/prizm-dev-team-dev.md +0 -123
- package/bundled/agents/prizm-dev-team-reviewer.md +0 -113
- package/bundled/dev-pipeline/assets/prizm-dev-team-integration.md +0 -65
- package/bundled/dev-pipeline/templates/bootstrap-tier1.md +0 -436
- package/bundled/dev-pipeline/templates/bootstrap-tier2.md +0 -510
- package/bundled/skills/prizmkit-test/scripts/validate_boundary_report.py +0 -347
- package/bundled/team/prizm-dev-team.json +0 -27
|
@@ -276,6 +276,33 @@ def _set_continuation_common(status_data, args, session_id):
|
|
|
276
276
|
status_data["last_session_id"] = session_id
|
|
277
277
|
|
|
278
278
|
|
|
279
|
+
def _set_ai_error_continuation_metadata(status_data, args, session_id, reason):
|
|
280
|
+
"""Preserve durable task/session state for any retryable launched AI error."""
|
|
281
|
+
if args.active_dev_branch:
|
|
282
|
+
status_data["active_dev_branch"] = args.active_dev_branch
|
|
283
|
+
if args.base_branch:
|
|
284
|
+
status_data["base_branch"] = args.base_branch
|
|
285
|
+
status_data["continuation_pending"] = True
|
|
286
|
+
status_data["continuation_reason"] = reason
|
|
287
|
+
status_data["continuation_count"] = status_data.get("continuation_count", 0) + 1
|
|
288
|
+
status_data["previous_session_id"] = session_id
|
|
289
|
+
status_data["last_fatal_error_code"] = args.last_fatal_error_code or reason
|
|
290
|
+
if args.continuation_summary_path:
|
|
291
|
+
status_data["continuation_summary_path"] = args.continuation_summary_path
|
|
292
|
+
if args.no_progress_count is not None:
|
|
293
|
+
status_data["no_progress_count"] = max(0, args.no_progress_count)
|
|
294
|
+
fingerprint = _load_progress_fingerprint(args.progress_fingerprint)
|
|
295
|
+
if fingerprint is not None:
|
|
296
|
+
status_data["last_progress_fingerprint"] = fingerprint
|
|
297
|
+
status_data["resume_from_phase"] = None
|
|
298
|
+
if session_id:
|
|
299
|
+
sessions = status_data.get("sessions", [])
|
|
300
|
+
if session_id not in sessions:
|
|
301
|
+
sessions.append(session_id)
|
|
302
|
+
status_data["sessions"] = sessions
|
|
303
|
+
status_data["last_session_id"] = session_id
|
|
304
|
+
|
|
305
|
+
|
|
279
306
|
def set_context_overflow_continuation_metadata(status_data, args, session_id):
|
|
280
307
|
"""Record continuation metadata for a context-overflow outcome in status.json."""
|
|
281
308
|
status_data["context_overflow_count"] = status_data.get("context_overflow_count", 0) + 1
|
|
@@ -456,6 +483,18 @@ def action_update(args, bug_list_path, state_dir):
|
|
|
456
483
|
|
|
457
484
|
# Track what status we write to bug-fix-list.json
|
|
458
485
|
new_status = current_list_status
|
|
486
|
+
if args.active_dev_branch:
|
|
487
|
+
bs["active_dev_branch"] = args.active_dev_branch
|
|
488
|
+
if args.base_branch:
|
|
489
|
+
bs["base_branch"] = args.base_branch
|
|
490
|
+
if args.last_fatal_error_code:
|
|
491
|
+
bs["last_fatal_error_code"] = args.last_fatal_error_code
|
|
492
|
+
if args.continuation_summary_path:
|
|
493
|
+
bs["continuation_summary_path"] = args.continuation_summary_path
|
|
494
|
+
fingerprint = _load_progress_fingerprint(args.progress_fingerprint)
|
|
495
|
+
if fingerprint is not None:
|
|
496
|
+
bs["last_progress_fingerprint"] = fingerprint
|
|
497
|
+
|
|
459
498
|
|
|
460
499
|
if session_status == "success":
|
|
461
500
|
bs["infra_error_count"] = 0
|
|
@@ -499,10 +538,14 @@ def action_update(args, bug_list_path, state_dir):
|
|
|
499
538
|
|
|
500
539
|
if infra_error_count >= max_infra_retries:
|
|
501
540
|
new_status = "failed"
|
|
541
|
+
bs["continuation_pending"] = False
|
|
542
|
+
bs["continuation_reason"] = session_status
|
|
543
|
+
bs["needs_attention"] = True
|
|
502
544
|
if session_id:
|
|
503
545
|
bs["last_failed_session_id"] = session_id
|
|
504
546
|
else:
|
|
505
|
-
new_status = "
|
|
547
|
+
new_status = "in_progress"
|
|
548
|
+
_set_ai_error_continuation_metadata(bs, args, session_id, session_status)
|
|
506
549
|
|
|
507
550
|
err = update_bug_in_list(bug_list_path, bug_id, new_status)
|
|
508
551
|
if err:
|
|
@@ -528,27 +571,25 @@ def action_update(args, bug_list_path, state_dir):
|
|
|
528
571
|
else:
|
|
529
572
|
bs["retry_count"] = bs.get("retry_count", 0) + 1
|
|
530
573
|
|
|
531
|
-
cleaned = cleanup_bug_artifacts(
|
|
532
|
-
state_dir=state_dir,
|
|
533
|
-
bug_id=bug_id,
|
|
534
|
-
project_root=args.project_root,
|
|
535
|
-
)
|
|
536
|
-
|
|
537
574
|
if bs["retry_count"] >= max_retries:
|
|
538
575
|
new_status = "failed"
|
|
576
|
+
bs["continuation_pending"] = False
|
|
577
|
+
bs["continuation_reason"] = session_status
|
|
578
|
+
bs["needs_attention"] = True
|
|
539
579
|
else:
|
|
540
|
-
new_status = "
|
|
580
|
+
new_status = "in_progress"
|
|
581
|
+
_set_ai_error_continuation_metadata(bs, args, session_id, session_status)
|
|
541
582
|
|
|
542
583
|
bs["resume_from_phase"] = None
|
|
543
|
-
|
|
544
|
-
|
|
584
|
+
if session_id:
|
|
585
|
+
bs["last_failed_session_id"] = session_id
|
|
545
586
|
|
|
546
587
|
err = update_bug_in_list(bug_list_path, bug_id, new_status)
|
|
547
588
|
if err:
|
|
548
589
|
error_out("Failed to update .prizmkit/plans/bug-fix-list.json: {}".format(err))
|
|
549
590
|
return
|
|
550
591
|
|
|
551
|
-
if
|
|
592
|
+
if session_id:
|
|
552
593
|
sessions = bs.get("sessions", [])
|
|
553
594
|
if session_id not in sessions:
|
|
554
595
|
sessions.append(session_id)
|
|
@@ -581,8 +622,9 @@ def action_update(args, bug_list_path, state_dir):
|
|
|
581
622
|
summary["degraded_reason"] = session_status
|
|
582
623
|
summary["restart_policy"] = "finalization_retry"
|
|
583
624
|
elif session_status == "infra_error":
|
|
584
|
-
summary["restart_policy"] = "
|
|
625
|
+
summary["restart_policy"] = "in_process_ai_error_continuation" if new_status == "in_progress" else "needs_attention"
|
|
585
626
|
summary["infra_error_count"] = bs.get("infra_error_count", 0)
|
|
627
|
+
summary.update(continuation_metadata_summary(bs))
|
|
586
628
|
summary["artifacts_preserved"] = True
|
|
587
629
|
elif session_status == "context_overflow":
|
|
588
630
|
summary["restart_policy"] = "context_overflow_continuation"
|
|
@@ -593,8 +635,9 @@ def action_update(args, bug_list_path, state_dir):
|
|
|
593
635
|
summary.update(continuation_metadata_summary(bs))
|
|
594
636
|
summary["artifacts_preserved"] = True
|
|
595
637
|
elif session_status != "success":
|
|
596
|
-
summary["restart_policy"] = "
|
|
597
|
-
summary
|
|
638
|
+
summary["restart_policy"] = "in_process_ai_error_continuation" if new_status == "in_progress" else "needs_attention"
|
|
639
|
+
summary.update(continuation_metadata_summary(bs))
|
|
640
|
+
summary["artifacts_preserved"] = True
|
|
598
641
|
|
|
599
642
|
print(json.dumps(summary, indent=2, ensure_ascii=False))
|
|
600
643
|
|
|
@@ -381,6 +381,33 @@ def _set_continuation_common(status_data, args, session_id):
|
|
|
381
381
|
status_data["last_session_id"] = session_id
|
|
382
382
|
|
|
383
383
|
|
|
384
|
+
def _set_ai_error_continuation_metadata(status_data, args, session_id, reason):
|
|
385
|
+
"""Preserve durable task/session state for any retryable launched AI error."""
|
|
386
|
+
if args.active_dev_branch:
|
|
387
|
+
status_data["active_dev_branch"] = args.active_dev_branch
|
|
388
|
+
if args.base_branch:
|
|
389
|
+
status_data["base_branch"] = args.base_branch
|
|
390
|
+
status_data["continuation_pending"] = True
|
|
391
|
+
status_data["continuation_reason"] = reason
|
|
392
|
+
status_data["continuation_count"] = status_data.get("continuation_count", 0) + 1
|
|
393
|
+
status_data["previous_session_id"] = session_id
|
|
394
|
+
status_data["last_fatal_error_code"] = args.last_fatal_error_code or reason
|
|
395
|
+
if args.continuation_summary_path:
|
|
396
|
+
status_data["continuation_summary_path"] = args.continuation_summary_path
|
|
397
|
+
if args.no_progress_count is not None:
|
|
398
|
+
status_data["no_progress_count"] = max(0, args.no_progress_count)
|
|
399
|
+
fingerprint = _load_progress_fingerprint(args.progress_fingerprint)
|
|
400
|
+
if fingerprint is not None:
|
|
401
|
+
status_data["last_progress_fingerprint"] = fingerprint
|
|
402
|
+
status_data["resume_from_phase"] = None
|
|
403
|
+
if session_id:
|
|
404
|
+
sessions = status_data.get("sessions", [])
|
|
405
|
+
if session_id not in sessions:
|
|
406
|
+
sessions.append(session_id)
|
|
407
|
+
status_data["sessions"] = sessions
|
|
408
|
+
status_data["last_session_id"] = session_id
|
|
409
|
+
|
|
410
|
+
|
|
384
411
|
def set_context_overflow_continuation_metadata(status_data, args, session_id):
|
|
385
412
|
"""Record continuation metadata for a context-overflow outcome in status.json."""
|
|
386
413
|
status_data["context_overflow_count"] = status_data.get("context_overflow_count", 0) + 1
|
|
@@ -848,6 +875,18 @@ def action_update(args, feature_list_path, state_dir):
|
|
|
848
875
|
|
|
849
876
|
# Track what status we write to feature-list.json
|
|
850
877
|
new_status = current_list_status
|
|
878
|
+
if args.active_dev_branch:
|
|
879
|
+
fs["active_dev_branch"] = args.active_dev_branch
|
|
880
|
+
if args.base_branch:
|
|
881
|
+
fs["base_branch"] = args.base_branch
|
|
882
|
+
if args.last_fatal_error_code:
|
|
883
|
+
fs["last_fatal_error_code"] = args.last_fatal_error_code
|
|
884
|
+
if args.continuation_summary_path:
|
|
885
|
+
fs["continuation_summary_path"] = args.continuation_summary_path
|
|
886
|
+
fingerprint = _load_progress_fingerprint(args.progress_fingerprint)
|
|
887
|
+
if fingerprint is not None:
|
|
888
|
+
fs["last_progress_fingerprint"] = fingerprint
|
|
889
|
+
|
|
851
890
|
|
|
852
891
|
if session_status == "success":
|
|
853
892
|
fs["infra_error_count"] = 0
|
|
@@ -923,10 +962,14 @@ def action_update(args, feature_list_path, state_dir):
|
|
|
923
962
|
|
|
924
963
|
if infra_error_count >= max_infra_retries:
|
|
925
964
|
new_status = "failed"
|
|
965
|
+
fs["continuation_pending"] = False
|
|
966
|
+
fs["continuation_reason"] = session_status
|
|
967
|
+
fs["needs_attention"] = True
|
|
926
968
|
if session_id:
|
|
927
969
|
fs["last_failed_session_id"] = session_id
|
|
928
970
|
else:
|
|
929
|
-
new_status = "
|
|
971
|
+
new_status = "in_progress"
|
|
972
|
+
_set_ai_error_continuation_metadata(fs, args, session_id, session_status)
|
|
930
973
|
|
|
931
974
|
err = update_feature_in_list(feature_list_path, feature_id, new_status)
|
|
932
975
|
if err:
|
|
@@ -955,8 +998,12 @@ def action_update(args, feature_list_path, state_dir):
|
|
|
955
998
|
|
|
956
999
|
if fs["retry_count"] >= max_retries:
|
|
957
1000
|
new_status = "failed"
|
|
1001
|
+
fs["continuation_pending"] = False
|
|
1002
|
+
fs["continuation_reason"] = session_status
|
|
1003
|
+
fs["needs_attention"] = True
|
|
958
1004
|
else:
|
|
959
|
-
new_status = "
|
|
1005
|
+
new_status = "in_progress"
|
|
1006
|
+
_set_ai_error_continuation_metadata(fs, args, session_id, session_status)
|
|
960
1007
|
|
|
961
1008
|
fs["resume_from_phase"] = None
|
|
962
1009
|
if session_id:
|
|
@@ -969,7 +1016,7 @@ def action_update(args, feature_list_path, state_dir):
|
|
|
969
1016
|
error_out("Failed to update .prizmkit/plans/feature-list.json: {}".format(err))
|
|
970
1017
|
return
|
|
971
1018
|
|
|
972
|
-
if
|
|
1019
|
+
if session_id:
|
|
973
1020
|
sessions = fs.get("sessions", [])
|
|
974
1021
|
if session_id not in sessions:
|
|
975
1022
|
sessions.append(session_id)
|
|
@@ -1013,8 +1060,9 @@ def action_update(args, feature_list_path, state_dir):
|
|
|
1013
1060
|
summary["degraded_reason"] = session_status
|
|
1014
1061
|
summary["restart_policy"] = "finalization_retry"
|
|
1015
1062
|
elif session_status == "infra_error":
|
|
1016
|
-
summary["restart_policy"] = "
|
|
1063
|
+
summary["restart_policy"] = "in_process_ai_error_continuation" if new_status == "in_progress" else "needs_attention"
|
|
1017
1064
|
summary["infra_error_count"] = fs.get("infra_error_count", 0)
|
|
1065
|
+
summary.update(continuation_metadata_summary(fs))
|
|
1018
1066
|
summary["artifacts_preserved"] = True
|
|
1019
1067
|
elif session_status == "context_overflow":
|
|
1020
1068
|
summary["restart_policy"] = "context_overflow_continuation"
|
|
@@ -1025,7 +1073,8 @@ def action_update(args, feature_list_path, state_dir):
|
|
|
1025
1073
|
summary.update(continuation_metadata_summary(fs))
|
|
1026
1074
|
summary["artifacts_preserved"] = True
|
|
1027
1075
|
elif session_status != "success":
|
|
1028
|
-
summary["restart_policy"] = "
|
|
1076
|
+
summary["restart_policy"] = "in_process_ai_error_continuation" if new_status == "in_progress" else "needs_attention"
|
|
1077
|
+
summary.update(continuation_metadata_summary(fs))
|
|
1029
1078
|
summary["artifacts_preserved"] = True
|
|
1030
1079
|
|
|
1031
1080
|
print(json.dumps(summary, indent=2, ensure_ascii=False))
|
|
@@ -275,6 +275,33 @@ def _set_continuation_common(status_data, args, session_id):
|
|
|
275
275
|
status_data["last_session_id"] = session_id
|
|
276
276
|
|
|
277
277
|
|
|
278
|
+
def _set_ai_error_continuation_metadata(status_data, args, session_id, reason):
|
|
279
|
+
"""Preserve durable task/session state for any retryable launched AI error."""
|
|
280
|
+
if args.active_dev_branch:
|
|
281
|
+
status_data["active_dev_branch"] = args.active_dev_branch
|
|
282
|
+
if args.base_branch:
|
|
283
|
+
status_data["base_branch"] = args.base_branch
|
|
284
|
+
status_data["continuation_pending"] = True
|
|
285
|
+
status_data["continuation_reason"] = reason
|
|
286
|
+
status_data["continuation_count"] = status_data.get("continuation_count", 0) + 1
|
|
287
|
+
status_data["previous_session_id"] = session_id
|
|
288
|
+
status_data["last_fatal_error_code"] = args.last_fatal_error_code or reason
|
|
289
|
+
if args.continuation_summary_path:
|
|
290
|
+
status_data["continuation_summary_path"] = args.continuation_summary_path
|
|
291
|
+
if args.no_progress_count is not None:
|
|
292
|
+
status_data["no_progress_count"] = max(0, args.no_progress_count)
|
|
293
|
+
fingerprint = _load_progress_fingerprint(args.progress_fingerprint)
|
|
294
|
+
if fingerprint is not None:
|
|
295
|
+
status_data["last_progress_fingerprint"] = fingerprint
|
|
296
|
+
status_data["resume_from_phase"] = None
|
|
297
|
+
if session_id:
|
|
298
|
+
sessions = status_data.get("sessions", [])
|
|
299
|
+
if session_id not in sessions:
|
|
300
|
+
sessions.append(session_id)
|
|
301
|
+
status_data["sessions"] = sessions
|
|
302
|
+
status_data["last_session_id"] = session_id
|
|
303
|
+
|
|
304
|
+
|
|
278
305
|
def set_context_overflow_continuation_metadata(status_data, args, session_id):
|
|
279
306
|
"""Record continuation metadata for a context-overflow outcome in status.json."""
|
|
280
307
|
status_data["context_overflow_count"] = status_data.get("context_overflow_count", 0) + 1
|
|
@@ -460,6 +487,18 @@ def action_update(args, refactor_list_path, state_dir):
|
|
|
460
487
|
|
|
461
488
|
# Track what status we write to refactor-list.json
|
|
462
489
|
new_status = current_list_status
|
|
490
|
+
if args.active_dev_branch:
|
|
491
|
+
rs["active_dev_branch"] = args.active_dev_branch
|
|
492
|
+
if args.base_branch:
|
|
493
|
+
rs["base_branch"] = args.base_branch
|
|
494
|
+
if args.last_fatal_error_code:
|
|
495
|
+
rs["last_fatal_error_code"] = args.last_fatal_error_code
|
|
496
|
+
if args.continuation_summary_path:
|
|
497
|
+
rs["continuation_summary_path"] = args.continuation_summary_path
|
|
498
|
+
fingerprint = _load_progress_fingerprint(args.progress_fingerprint)
|
|
499
|
+
if fingerprint is not None:
|
|
500
|
+
rs["last_progress_fingerprint"] = fingerprint
|
|
501
|
+
|
|
463
502
|
|
|
464
503
|
if session_status == "success":
|
|
465
504
|
rs["infra_error_count"] = 0
|
|
@@ -503,10 +542,14 @@ def action_update(args, refactor_list_path, state_dir):
|
|
|
503
542
|
|
|
504
543
|
if infra_error_count >= max_infra_retries:
|
|
505
544
|
new_status = "failed"
|
|
545
|
+
rs["continuation_pending"] = False
|
|
546
|
+
rs["continuation_reason"] = session_status
|
|
547
|
+
rs["needs_attention"] = True
|
|
506
548
|
if session_id:
|
|
507
549
|
rs["last_failed_session_id"] = session_id
|
|
508
550
|
else:
|
|
509
|
-
new_status = "
|
|
551
|
+
new_status = "in_progress"
|
|
552
|
+
_set_ai_error_continuation_metadata(rs, args, session_id, session_status)
|
|
510
553
|
|
|
511
554
|
err = update_refactor_in_list(refactor_list_path, refactor_id, new_status)
|
|
512
555
|
if err:
|
|
@@ -532,27 +575,25 @@ def action_update(args, refactor_list_path, state_dir):
|
|
|
532
575
|
else:
|
|
533
576
|
rs["retry_count"] = rs.get("retry_count", 0) + 1
|
|
534
577
|
|
|
535
|
-
cleaned = cleanup_refactor_artifacts(
|
|
536
|
-
state_dir=state_dir,
|
|
537
|
-
refactor_id=refactor_id,
|
|
538
|
-
project_root=args.project_root,
|
|
539
|
-
)
|
|
540
|
-
|
|
541
578
|
if rs["retry_count"] >= max_retries:
|
|
542
579
|
new_status = "failed"
|
|
580
|
+
rs["continuation_pending"] = False
|
|
581
|
+
rs["continuation_reason"] = session_status
|
|
582
|
+
rs["needs_attention"] = True
|
|
543
583
|
else:
|
|
544
|
-
new_status = "
|
|
584
|
+
new_status = "in_progress"
|
|
585
|
+
_set_ai_error_continuation_metadata(rs, args, session_id, session_status)
|
|
545
586
|
|
|
546
587
|
rs["resume_from_phase"] = None
|
|
547
|
-
|
|
548
|
-
|
|
588
|
+
if session_id:
|
|
589
|
+
rs["last_failed_session_id"] = session_id
|
|
549
590
|
|
|
550
591
|
err = update_refactor_in_list(refactor_list_path, refactor_id, new_status)
|
|
551
592
|
if err:
|
|
552
593
|
error_out("Failed to update .prizmkit/plans/refactor-list.json: {}".format(err))
|
|
553
594
|
return
|
|
554
595
|
|
|
555
|
-
if
|
|
596
|
+
if session_id:
|
|
556
597
|
sessions = rs.get("sessions", [])
|
|
557
598
|
if session_id not in sessions:
|
|
558
599
|
sessions.append(session_id)
|
|
@@ -594,8 +635,9 @@ def action_update(args, refactor_list_path, state_dir):
|
|
|
594
635
|
summary["degraded_reason"] = session_status
|
|
595
636
|
summary["restart_policy"] = "finalization_retry"
|
|
596
637
|
elif session_status == "infra_error":
|
|
597
|
-
summary["restart_policy"] = "
|
|
638
|
+
summary["restart_policy"] = "in_process_ai_error_continuation" if new_status == "in_progress" else "needs_attention"
|
|
598
639
|
summary["infra_error_count"] = rs.get("infra_error_count", 0)
|
|
640
|
+
summary.update(continuation_metadata_summary(rs))
|
|
599
641
|
summary["artifacts_preserved"] = True
|
|
600
642
|
elif session_status == "context_overflow":
|
|
601
643
|
summary["restart_policy"] = "context_overflow_continuation"
|
|
@@ -606,8 +648,9 @@ def action_update(args, refactor_list_path, state_dir):
|
|
|
606
648
|
summary.update(continuation_metadata_summary(rs))
|
|
607
649
|
summary["artifacts_preserved"] = True
|
|
608
650
|
elif session_status != "success":
|
|
609
|
-
summary["restart_policy"] = "
|
|
610
|
-
summary
|
|
651
|
+
summary["restart_policy"] = "in_process_ai_error_continuation" if new_status == "in_progress" else "needs_attention"
|
|
652
|
+
summary.update(continuation_metadata_summary(rs))
|
|
653
|
+
summary["artifacts_preserved"] = True
|
|
611
654
|
|
|
612
655
|
print(json.dumps(summary, indent=2, ensure_ascii=False))
|
|
613
656
|
|
|
@@ -745,7 +745,7 @@ def resolve_prompt_platform(project_root):
|
|
|
745
745
|
if resolution.platform:
|
|
746
746
|
return resolution.platform
|
|
747
747
|
raise RuntimeError(
|
|
748
|
-
"PrizmKit
|
|
748
|
+
"PrizmKit platform skills not found. None of .claude/commands/, .agents/skills/, or .codebuddy/skills/ exists. "
|
|
749
749
|
"Run `npx prizmkit install` first, set .prizmkit/config.json ai_cli/platform, or set PRIZMKIT_PLATFORM=claude|codex|codebuddy explicitly."
|
|
750
750
|
)
|
|
751
751
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Dev-Pipeline Fallback Bootstrap Prompt
|
|
2
2
|
|
|
3
3
|
> **Note**: This is an emergency fallback template. Normally, `generate-bootstrap-prompt.py`
|
|
4
|
-
>
|
|
5
|
-
>
|
|
4
|
+
> renders modular full guidance from `templates/sections/`. If sections are unavailable,
|
|
5
|
+
> it tries `bootstrap-tier3.md` before this last-resort fallback.
|
|
6
6
|
|
|
7
7
|
## Feature Context
|
|
8
8
|
|
|
@@ -50,7 +50,7 @@ You are running in **headless non-interactive mode** with a FINITE context windo
|
|
|
50
50
|
|
|
51
51
|
0. **NON-INTERACTIVE MODE** — There is NO human on the other end. NEVER ask for user confirmation, NEVER wait for user input, NEVER use interactive prompts (e.g. "Would you like me to…"). If a skill has an interactive step (e.g. offer remediation, ask for approval), skip it and proceed autonomously. Make decisions based on the data available and move forward.
|
|
52
52
|
|
|
53
|
-
1. **context-snapshot.md is your single source of truth** — After Phase 1-2
|
|
53
|
+
1. **context-snapshot.md is your single source of truth** — After Phase 1-2 makes it available, use it instead of re-reading individual source files. If you just created or updated it in this session, continue from the in-context content; read it only when resuming/continuing, after context compaction/loss, or when handing work to a subagent.
|
|
54
54
|
2. **Never re-read your own writes** — After you create/modify a file, do NOT read it back to verify. Trust your write was correct.
|
|
55
55
|
3. **Never re-read unmodified files** — Once you have read a file into context, do NOT read it again unless it was modified by an Edit/Write operation after your last read. Use platform file/search tools for targeted lookup; when shell-free helper lookup is needed, run `{{RUNTIME_HELPER_CMD}} text search <file> --pattern "<pattern>" --json`, then read only the smallest bounded range with the platform file-reading tool instead of full-file Read. Before issuing a Read, ask yourself: "Have I read this file before, and has it changed since?" If the answer is "no, it hasn't changed" — do NOT read it. This applies to all files including those summarized in context-snapshot.md Section 4. Reviewer subagents must receive context-snapshot.md and rely on it rather than independently re-reading the same files the orchestrator already read.
|
|
56
56
|
4. **Stay focused** — Do NOT explore code unrelated to this feature. No curiosity-driven reads.
|
|
@@ -205,14 +205,13 @@ Before starting, check plan.md Tasks:
|
|
|
205
205
|
|
|
206
206
|
**Build artifacts rule**: After any build/compile command, ensure output is in `.gitignore`. Never commit binaries/build output.
|
|
207
207
|
|
|
208
|
-
**3a.** Run `/prizmkit-implement` directly
|
|
209
|
-
-
|
|
210
|
-
-
|
|
208
|
+
**3a.** Run `/prizmkit-implement` directly:
|
|
209
|
+
- Continue from the `spec.md` / `plan.md` / `context-snapshot.md` content you created in Phase 1-2; do not re-read self-authored artifacts just because implementation starts
|
|
210
|
+
- Re-read `plan.md` or `context-snapshot.md` only when resuming/continuing, when current context was compacted or lost, or when task checkbox state may have changed outside this session
|
|
211
|
+
- If implementation is delegated to a Dev subagent, the subagent must read `spec.md` if the artifact exists, plus `plan.md` and `context-snapshot.md`, before editing
|
|
212
|
+
- Use context-snapshot.md Section 4 File Manifest for targeted source reads; avoid re-reading source files already summarized there unless they changed after the snapshot
|
|
211
213
|
- Implements task-by-task, marking each `[x]` immediately
|
|
212
|
-
-
|
|
213
|
-
- Defers scoped/full test execution until after the code-review loop completes
|
|
214
|
-
- Preserves Reviewer behavior; only the top-level implementation Dev handoff is removed
|
|
215
|
-
- If plan.md has >5 tasks: update checkpoints after every 3 tasks
|
|
214
|
+
- Remeber to update checkpoints after finishing a series of tasks
|
|
216
215
|
|
|
217
216
|
**3b. Focused checks only (no test gate here)**:
|
|
218
217
|
- During implementation, do not run mandatory periodic or full-suite tests.
|
|
@@ -241,7 +240,7 @@ For each Verification Gate from the Task Contract, write one evidence line to Im
|
|
|
241
240
|
|
|
242
241
|
Review the completed implementation before the scoped feature test gate runs. Use `artifact_dir=.prizmkit/specs/{{FEATURE_SLUG}}/` so the code-review skill can read spec, plan, context snapshot, implementation log, and current diff artifacts. Do not require or read a prior `/prizmkit-test` report here; test generation and test-fix looping happen in the next phase.
|
|
243
242
|
|
|
244
|
-
Run `/prizmkit-code-review` with `artifact_dir=.prizmkit/specs/{{FEATURE_SLUG}}/`. The
|
|
243
|
+
Run `/prizmkit-code-review` with `artifact_dir=.prizmkit/specs/{{FEATURE_SLUG}}/`. The skill chooses a platform-supported independent Reviewer strategy and verifies that the Reviewer's snapshot is equivalent to the current workspace under its skill-owned workspace protocol. Do not prescribe Agent launch parameters from this bootstrap prompt.
|
|
245
244
|
|
|
246
245
|
The skill runs an internal review-fix loop (Reviewer Agent → filter → orchestrator fix, max 3 rounds) and writes `review-report.md` to the artifact directory.
|
|
247
246
|
|
|
@@ -254,7 +253,7 @@ If GATE:MISSING:
|
|
|
254
253
|
- Do not re-run `/prizmkit-code-review` in an unbounded report-repair loop.
|
|
255
254
|
- Perform one bounded status check; retry at most once: inspect the skill output, `review-report.md` path, and any Reviewer agent spawn messages.
|
|
256
255
|
- If the missing report is caused by Reviewer agent spawn or review skill error, retry `/prizmkit-code-review` at most once only if it appears transient.
|
|
257
|
-
- If the report is still missing after that single check/retry, write `failure-log.md` with the spawn/skill error and last observable state, then
|
|
256
|
+
- If the report is still missing after that single check/retry, write `failure-log.md` with the spawn/skill error and last observable state, then stop with a clear recovery failure. Do not synthesize a passing report through Main-Agent self-review.
|
|
258
257
|
|
|
259
258
|
Read `review-report.md` and check the Verdict:
|
|
260
259
|
- `PASS` → proceed to next phase
|
|
@@ -507,7 +506,6 @@ Rules for writing completion notes:
|
|
|
507
506
|
|----------|------|
|
|
508
507
|
| Feature Artifacts Dir | `.prizmkit/specs/{{FEATURE_SLUG}}/` |
|
|
509
508
|
| Context Snapshot | `.prizmkit/specs/{{FEATURE_SLUG}}/context-snapshot.md` |
|
|
510
|
-
| Team Config | `{{TEAM_CONFIG_PATH}}` |
|
|
511
509
|
| Project Root | {{PROJECT_ROOT}} |
|
|
512
510
|
| Feature List Path | {{FEATURE_LIST_PATH}} |
|
|
513
511
|
|
|
@@ -180,6 +180,7 @@ After implement completes, verify:
|
|
|
180
180
|
If `FAST_PATH=true` (≤ 2 tasks, obvious root cause), skip this phase entirely and mark checkpoint step `prizmkit-code-review` as `skipped` before continuing.
|
|
181
181
|
|
|
182
182
|
Run `/prizmkit-code-review` with `artifact_dir=.prizmkit/bugfix/{{BUG_ID}}/`:
|
|
183
|
+
- The skill chooses a platform-supported independent Reviewer strategy and verifies a workspace-equivalent snapshot under its skill-owned protocol
|
|
183
184
|
- The skill runs an internal review-fix loop (Reviewer → filter → orchestrator fix, max 3 rounds) and writes `review-report.md`
|
|
184
185
|
- `review-report.md` must contain `## Verdict`
|
|
185
186
|
|
|
@@ -191,7 +192,7 @@ After `/prizmkit-code-review` returns, verify the review report:
|
|
|
191
192
|
If GATE:MISSING:
|
|
192
193
|
- Do not re-run `/prizmkit-code-review` in an unbounded report-repair loop.
|
|
193
194
|
- Perform one bounded status check; retry `/prizmkit-code-review` at most once only if the missing report appears caused by a transient team/config/lock error.
|
|
194
|
-
- If the report is still missing after that single check/retry, write `failure-log.md` with the spawn/skill error and last observable state, then
|
|
195
|
+
- If the report is still missing after that single check/retry, write `failure-log.md` with the spawn/skill error and last observable state, then stop with a clear recovery failure. Do not replace the independent Reviewer with Main-Agent self-review.
|
|
195
196
|
|
|
196
197
|
Read `review-report.md` and check the Verdict:
|
|
197
198
|
- `PASS` → proceed
|
|
@@ -139,7 +139,7 @@ Apply the browser behavior preservation protocol where UI behavior can be affect
|
|
|
139
139
|
|
|
140
140
|
### Phase 4: Review — Code Review & Behavior Verification
|
|
141
141
|
|
|
142
|
-
Run `/prizmkit-code-review` with `artifact_dir=.prizmkit/refactor/{{REFACTOR_ID}}/` directly from the main orchestrator.
|
|
142
|
+
Run `/prizmkit-code-review` with `artifact_dir=.prizmkit/refactor/{{REFACTOR_ID}}/` directly from the main orchestrator. The skill loads its skill-owned `references/reviewer-agent-prompt.md` and `references/reviewer-workspace-protocol.md`, chooses a platform-supported independent Reviewer strategy, and verifies a workspace-equivalent snapshot.
|
|
143
143
|
|
|
144
144
|
Review requirements:
|
|
145
145
|
- verify refactor quality against spec.md and plan.md;
|
|
@@ -147,7 +147,7 @@ Review requirements:
|
|
|
147
147
|
- run or confirm relevant tests;
|
|
148
148
|
- write `.prizmkit/refactor/{{REFACTOR_ID}}/review-report.md` with `## Verdict`.
|
|
149
149
|
|
|
150
|
-
If the report is missing after one bounded status check, write `failure-log.md` and
|
|
150
|
+
If the report is missing after one bounded status check, write `failure-log.md` and stop with a clear recovery failure. Do not replace the independent Reviewer with Main-Agent self-review.
|
|
151
151
|
|
|
152
152
|
**Checkpoint update**: set step `prizmkit-code-review` to `completed` in `{{CHECKPOINT_PATH}}`.
|
|
153
153
|
|
|
@@ -12,9 +12,9 @@ If `FAST_PATH=true`, skip this phase intentionally:
|
|
|
12
12
|
|
|
13
13
|
Then continue to the next checkpoint step.
|
|
14
14
|
|
|
15
|
-
Otherwise, run `/prizmkit-code-review` with `artifact_dir=.prizmkit/bugfix/{{BUG_ID}}/`.
|
|
15
|
+
Otherwise, run `/prizmkit-code-review` with `artifact_dir=.prizmkit/bugfix/{{BUG_ID}}/`. The skill loads its skill-owned Reviewer prompt and workspace protocol, chooses a platform-supported subagent strategy, and verifies that the Reviewer's snapshot is equivalent to the current workspace before review.
|
|
16
16
|
|
|
17
|
-
The skill runs its internal Reviewer Agent → filter → orchestrator fix loop and writes `review-report.md`.
|
|
17
|
+
The skill runs its internal Reviewer Agent → filter → orchestrator fix loop and writes `review-report.md`. Do not prescribe Agent launch parameters from this pipeline template; the review skill owns strategy selection and workspace-equivalence verification.
|
|
18
18
|
|
|
19
19
|
**Gate Check — Review Report**:
|
|
20
20
|
|
|
@@ -24,6 +24,6 @@ The skill runs its internal Reviewer Agent → filter → orchestrator fix loop
|
|
|
24
24
|
|
|
25
25
|
- `PASS` → proceed.
|
|
26
26
|
- `NEEDS_FIXES` → the skill exhausted its internal rounds; log remaining findings and proceed only when they do not block acceptance criteria.
|
|
27
|
-
- Missing report → one bounded retry
|
|
27
|
+
- Missing report → one bounded retry, then write `failure-log.md` and stop if the independent review protocol remains blocked; do not replace it with Main-Agent self-review.
|
|
28
28
|
|
|
29
29
|
**Checkpoint update**: Set step `prizmkit-code-review` to `completed` when review is complete, or `skipped` for FAST_PATH.
|
|
@@ -4,7 +4,7 @@ You are running in **headless non-interactive mode** with a FINITE context windo
|
|
|
4
4
|
|
|
5
5
|
0. **NON-INTERACTIVE MODE** — There is NO human on the other end. NEVER ask for user confirmation, NEVER wait for user input, NEVER use interactive prompts (e.g. "Would you like me to…"). If a skill has an interactive step (e.g. offer remediation, ask for approval), skip it and proceed autonomously. Make decisions based on the data available and move forward.
|
|
6
6
|
|
|
7
|
-
1. **context-snapshot.md is your single source of truth** — After it is
|
|
7
|
+
1. **context-snapshot.md is your single source of truth** — After it is available, use it instead of re-reading individual source files. If you just created or updated it in this session, continue from the in-context content; read it only when resuming/continuing, after context compaction/loss, or when handing work to a subagent.
|
|
8
8
|
2. **Never re-read your own writes** — After you create/modify a file, do NOT read it back to verify. Trust your write was correct.
|
|
9
9
|
3. **Never re-read unmodified files** — Once you have read a file into context, do NOT read it again unless it was modified by an Edit/Write operation after your last read. Use platform file/search tools for targeted lookup; when shell-free helper lookup is needed, run `{{RUNTIME_HELPER_CMD}} text search <file> --pattern "<pattern>" --json`, then read only the smallest bounded range with the platform file-reading tool instead of full-file Read. Before issuing a Read, ask yourself: "Have I read this file before, and has it changed since?" If the answer is "no, it hasn't changed" — do NOT read it. This applies to all files including those summarized in context-snapshot.md Section 4. Reviewer subagents must receive context-snapshot.md and rely on it rather than independently re-reading the same files the orchestrator already read.
|
|
10
10
|
4. **Stay focused** — Do NOT explore code unrelated to this feature. No curiosity-driven reads.
|
|
@@ -4,7 +4,5 @@
|
|
|
4
4
|
|----------|------|
|
|
5
5
|
| Feature Artifacts Dir | `.prizmkit/specs/{{FEATURE_SLUG}}/` |
|
|
6
6
|
| Context Snapshot | `.prizmkit/specs/{{FEATURE_SLUG}}/context-snapshot.md` |
|
|
7
|
-
| Team Config | `{{TEAM_CONFIG_PATH}}` |
|
|
8
|
-
| Reviewer Agent Def | {{REVIEWER_SUBAGENT_PATH}} |
|
|
9
7
|
| Project Root | {{PROJECT_ROOT}} |
|
|
10
8
|
| Feature List Path | {{FEATURE_LIST_PATH}} |
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
### Architecture Sync & Commit (SINGLE COMMIT) — DO NOT SKIP
|
|
2
2
|
|
|
3
|
-
**a.** Check if feature already committed
|
|
3
|
+
**a.** Check if feature already committed by inspecting recent git history for `{{FEATURE_ID}}`:
|
|
4
4
|
```bash
|
|
5
5
|
git log --oneline
|
|
6
6
|
```
|
|
7
7
|
- If a commit for `{{FEATURE_ID}}` already exists → **skip d** (do NOT run /prizmkit-committer, do NOT run git reset, do NOT stage or unstage anything). Proceed directly to e Final verification.
|
|
8
8
|
- If no existing commit → proceed normally with b–d.
|
|
9
9
|
|
|
10
|
+
**Feature Documentation Policy**:
|
|
11
|
+
- Run `/prizmkit-retrospective` before commit to update `.prizmkit/prizm-docs/` with durable structural knowledge from this feature.
|
|
12
|
+
- Capture architecture knowledge when the feature adds interfaces, dependencies, observable behavior, modules, or durable TRAPS/RULES/DECISIONS.
|
|
13
|
+
- Commit prefix: `feat({{FEATURE_ID}}):`.
|
|
14
|
+
|
|
10
15
|
**b.** Run `/prizmkit-retrospective` (**before commit**, maintains `.prizmkit/prizm-docs/` architecture index):
|
|
11
16
|
1. **Structural sync**: update KEY_FILES/INTERFACES/DEPENDENCIES/file counts for changed modules
|
|
12
17
|
2. **Architecture knowledge**: extract TRAPS, RULES, DECISIONS from completed work into `.prizmkit/prizm-docs/`
|
|
@@ -32,6 +37,8 @@ git status --short
|
|
|
32
37
|
```
|
|
33
38
|
Working tree MUST be clean after this step. If any feature-related files remain, stage them explicitly and amend the SAME commit with `git commit --amend --no-edit`; do NOT create a separate commit.
|
|
34
39
|
|
|
40
|
+
**Exception**: `session-summary.md` in the artifact directory is a local cross-session artifact generated by `/prizmkit-committer` — it is NOT committed to git. Ignore it in the clean-tree check.
|
|
41
|
+
|
|
35
42
|
**f.** Write completion summary for downstream dependency context:
|
|
36
43
|
|
|
37
44
|
Write `.prizmkit/specs/{{FEATURE_SLUG}}/completion-summary.json` with the key changes from this session. This file is NOT committed to git — the pipeline runner reads it to propagate context to dependent features.
|
|
@@ -11,14 +11,13 @@ Before starting, check plan.md Tasks:
|
|
|
11
11
|
|
|
12
12
|
**Build artifacts rule**: After any build/compile command, ensure output is in `.gitignore`. Never commit binaries/build output.
|
|
13
13
|
|
|
14
|
-
**3a.** Run `/prizmkit-implement` directly
|
|
15
|
-
-
|
|
16
|
-
-
|
|
14
|
+
**3a.** Run `/prizmkit-implement` directly:
|
|
15
|
+
- Continue from the `spec.md` / `plan.md` / `context-snapshot.md` content you created in Phase 1-2; do not re-read self-authored artifacts just because implementation starts
|
|
16
|
+
- Re-read `plan.md` or `context-snapshot.md` only when resuming/continuing, when current context was compacted or lost, or when task checkbox state may have changed outside this session
|
|
17
|
+
- If implementation is delegated to a Dev subagent, the subagent must read `spec.md` if the artifact exists, plus `plan.md` and `context-snapshot.md`, before editing
|
|
18
|
+
- Use context-snapshot.md Section 4 File Manifest for targeted source reads; avoid re-reading source files already summarized there unless they changed after the snapshot
|
|
17
19
|
- Implements task-by-task, marking each `[x]` immediately
|
|
18
|
-
-
|
|
19
|
-
- Defers scoped/full test execution until after the code-review loop completes
|
|
20
|
-
- Preserves Reviewer behavior; only the top-level implementation Dev handoff is removed
|
|
21
|
-
- If plan.md has >5 tasks: update checkpoints after every 3 tasks
|
|
20
|
+
- Remeber to update checkpoints after finishing a series of tasks
|
|
22
21
|
|
|
23
22
|
**3b. Focused checks only (no test gate here)**:
|
|
24
23
|
- During implementation, do not run mandatory periodic or full-suite tests.
|
|
@@ -11,14 +11,13 @@ Before starting, check plan.md Tasks:
|
|
|
11
11
|
|
|
12
12
|
**Build artifacts rule**: After any build/compile command, ensure output is in `.gitignore`. Never commit binaries/build output.
|
|
13
13
|
|
|
14
|
-
**3a.** Run `/prizmkit-implement` directly
|
|
15
|
-
-
|
|
16
|
-
-
|
|
14
|
+
**3a.** Run `/prizmkit-implement` directly:
|
|
15
|
+
- Continue from the `spec.md` / `plan.md` / `context-snapshot.md` content you created in Phase 1-2; do not re-read self-authored artifacts just because implementation starts
|
|
16
|
+
- Re-read `plan.md` or `context-snapshot.md` only when resuming/continuing, when current context was compacted or lost, or when task checkbox state may have changed outside this session
|
|
17
|
+
- If implementation is delegated to a Dev subagent, the subagent must read `spec.md` if the artifact exists, plus `plan.md` and `context-snapshot.md`, before editing
|
|
18
|
+
- Use context-snapshot.md Section 4 File Manifest for targeted source reads; avoid re-reading source files already summarized there unless they changed after the snapshot
|
|
17
19
|
- Implements task-by-task, marking each `[x]` immediately
|
|
18
|
-
-
|
|
19
|
-
- Defers scoped/full test execution until after the code-review loop completes
|
|
20
|
-
- Preserves Reviewer behavior; only the top-level implementation Dev handoff is removed
|
|
21
|
-
- If plan.md has >5 tasks: update checkpoints after every 3 tasks
|
|
20
|
+
- Remeber to update checkpoints after finishing a series of tasks
|
|
22
21
|
|
|
23
22
|
**3b. Focused checks only (no test gate here)**:
|
|
24
23
|
- During implementation, do not run mandatory periodic or full-suite tests.
|
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
- Follow Context Budget Rules §10 after build/compile commands.
|
|
7
7
|
|
|
8
8
|
**3a.** Run `/prizmkit-implement` — this handles the implementation cycle:
|
|
9
|
-
-
|
|
10
|
-
-
|
|
9
|
+
- Continue from the plan/context you just created; do not re-read self-authored artifacts just because implementation starts
|
|
10
|
+
- Re-read plan.md or `context-snapshot.md` only when resuming/continuing, when current context was compacted or lost, or when task checkbox state may have changed outside this session
|
|
11
|
+
- If implementation is delegated to a subagent, the subagent must read `plan.md` and `context-snapshot.md` before editing
|
|
12
|
+
- Uses context from `context-snapshot.md` (Prizm docs, TRAPS, file manifest) for targeted source reads; avoid re-reading source files already summarized there unless they changed after the snapshot
|
|
11
13
|
- Implements task-by-task, marking each `[x]` immediately
|
|
12
14
|
- Creates/updates L2 `.prizm` docs when creating new modules or significantly modifying existing ones — AI selectively decides which modules warrant L2 based on complexity and importance
|
|
13
15
|
- Does not run the scoped/full test gate; testing happens after code review in the PrizmKit Test phase
|