prizmkit 1.1.130 → 1.1.134

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 (119) hide show
  1. package/bundled/VERSION.json +3 -3
  2. package/bundled/adapters/claude/command-adapter.js +0 -2
  3. package/bundled/dev-pipeline/.env.example +1 -1
  4. package/bundled/dev-pipeline/assets/skill-subagent-integration.md +11 -6
  5. package/bundled/dev-pipeline/prizmkit_runtime/checkpoint_state.py +445 -8
  6. package/bundled/dev-pipeline/prizmkit_runtime/gitops.py +2 -9
  7. package/bundled/dev-pipeline/prizmkit_runtime/processes.py +21 -1
  8. package/bundled/dev-pipeline/prizmkit_runtime/runner_classification.py +87 -66
  9. package/bundled/dev-pipeline/prizmkit_runtime/runner_models.py +53 -3
  10. package/bundled/dev-pipeline/prizmkit_runtime/runner_recovery.py +55 -25
  11. package/bundled/dev-pipeline/prizmkit_runtime/runner_status.py +4 -0
  12. package/bundled/dev-pipeline/prizmkit_runtime/runners.py +119 -18
  13. package/bundled/dev-pipeline/prizmkit_runtime/sessions.py +3 -2
  14. package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +411 -17
  15. package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +57 -14
  16. package/bundled/dev-pipeline/scripts/generate-recovery-prompt.py +5 -4
  17. package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +55 -2
  18. package/bundled/dev-pipeline/scripts/prompt_framework.py +152 -1
  19. package/bundled/dev-pipeline/scripts/update-bug-status.py +53 -0
  20. package/bundled/dev-pipeline/scripts/update-checkpoint.py +294 -69
  21. package/bundled/dev-pipeline/scripts/update-feature-status.py +57 -0
  22. package/bundled/dev-pipeline/scripts/update-refactor-status.py +53 -0
  23. package/bundled/dev-pipeline/templates/bootstrap-prompt.md +5 -5
  24. package/bundled/dev-pipeline/templates/bootstrap-tier3.md +28 -22
  25. package/bundled/dev-pipeline/templates/bugfix-bootstrap-prompt.md +24 -10
  26. package/bundled/dev-pipeline/templates/refactor-bootstrap-prompt.md +20 -2
  27. package/bundled/dev-pipeline/templates/sections/bugfix-phase-commit-report.md +2 -2
  28. package/bundled/dev-pipeline/templates/sections/bugfix-phase-diagnose-plan.md +1 -1
  29. package/bundled/dev-pipeline/templates/sections/bugfix-phase-manual-verification.md +5 -10
  30. package/bundled/dev-pipeline/templates/sections/bugfix-phase-review.md +9 -19
  31. package/bundled/dev-pipeline/templates/sections/bugfix-phase-test.md +21 -0
  32. package/bundled/dev-pipeline/templates/sections/bugfix-session-status.md +1 -1
  33. package/bundled/dev-pipeline/templates/sections/checkpoint-system.md +10 -10
  34. package/bundled/dev-pipeline/templates/sections/context-budget-rules.md +1 -1
  35. package/bundled/dev-pipeline/templates/sections/headless-commit-authorization.md +15 -0
  36. package/bundled/dev-pipeline/templates/sections/phase-commit-full.md +2 -2
  37. package/bundled/dev-pipeline/templates/sections/phase-commit.md +2 -2
  38. package/bundled/dev-pipeline/templates/sections/phase-prizmkit-test.md +26 -23
  39. package/bundled/dev-pipeline/templates/sections/phase-review-agent.md +5 -5
  40. package/bundled/dev-pipeline/templates/sections/phase-review-full.md +15 -11
  41. package/bundled/dev-pipeline/templates/sections/refactor-phase-commit-report.md +1 -1
  42. package/bundled/dev-pipeline/templates/sections/refactor-phase-review.md +6 -6
  43. package/bundled/dev-pipeline/templates/sections/refactor-phase-test.md +21 -0
  44. package/bundled/dev-pipeline/templates/sections/refactor-reminders.md +1 -1
  45. package/bundled/dev-pipeline/templates/sections/subagent-timeout-recovery.md +1 -1
  46. package/bundled/dev-pipeline/templates/sections/task-contract.md +4 -0
  47. package/bundled/dev-pipeline/tests/test_checkpoint_state.py +362 -3
  48. package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +349 -48
  49. package/bundled/dev-pipeline/tests/test_generate_bugfix_prompt.py +129 -0
  50. package/bundled/dev-pipeline/tests/test_generate_refactor_prompt.py +91 -0
  51. package/bundled/dev-pipeline/tests/test_python_runner_parity.py +567 -23
  52. package/bundled/dev-pipeline/tests/test_unified_cli.py +37 -10
  53. package/bundled/skills/_metadata.json +63 -26
  54. package/bundled/skills/app-planner/SKILL.md +4 -3
  55. package/bundled/skills/bug-fix-workflow/SKILL.md +89 -180
  56. package/bundled/skills/bug-planner/SKILL.md +12 -27
  57. package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +131 -220
  58. package/bundled/skills/bugfix-pipeline-launcher/references/configuration.md +36 -90
  59. package/bundled/skills/feature-pipeline-launcher/SKILL.md +129 -271
  60. package/bundled/skills/feature-pipeline-launcher/references/configuration.md +35 -76
  61. package/bundled/skills/feature-planner/SKILL.md +27 -22
  62. package/bundled/skills/feature-planner/assets/planning-guide.md +4 -4
  63. package/bundled/skills/feature-workflow/SKILL.md +94 -121
  64. package/bundled/skills/prizmkit/SKILL.md +130 -94
  65. package/bundled/skills/prizmkit/references/workflow-state-protocol.md +181 -0
  66. package/bundled/skills/prizmkit-code-review/SKILL.md +132 -86
  67. package/bundled/skills/prizmkit-code-review/references/independent-code-review.md +243 -0
  68. package/bundled/skills/prizmkit-code-review/references/review-report-template.md +42 -1
  69. package/bundled/skills/prizmkit-code-review/references/workflow-state-protocol.md +181 -0
  70. package/bundled/skills/prizmkit-code-review/scripts/render_review_report.py +93 -1
  71. package/bundled/skills/prizmkit-committer/SKILL.md +125 -48
  72. package/bundled/skills/prizmkit-committer/references/workflow-state-protocol.md +181 -0
  73. package/bundled/skills/prizmkit-implement/SKILL.md +99 -73
  74. package/bundled/skills/prizmkit-implement/references/implementation-subagent-procedure.md +1 -1
  75. package/bundled/skills/prizmkit-implement/references/workflow-state-protocol.md +181 -0
  76. package/bundled/skills/prizmkit-init/SKILL.md +5 -5
  77. package/bundled/skills/prizmkit-plan/SKILL.md +146 -105
  78. package/bundled/skills/prizmkit-plan/assets/plan-template.md +18 -0
  79. package/bundled/skills/prizmkit-plan/references/independent-plan-review.md +242 -0
  80. package/bundled/skills/prizmkit-plan/references/review-plan-spec-loop.md +4 -4
  81. package/bundled/skills/prizmkit-plan/references/workflow-state-protocol.md +181 -0
  82. package/bundled/skills/prizmkit-retrospective/SKILL.md +111 -53
  83. package/bundled/skills/prizmkit-retrospective/references/knowledge-injection-steps.md +7 -6
  84. package/bundled/skills/prizmkit-retrospective/references/structural-sync-steps.md +5 -4
  85. package/bundled/skills/prizmkit-retrospective/references/workflow-state-protocol.md +181 -0
  86. package/bundled/skills/prizmkit-test/SKILL.md +52 -6
  87. package/bundled/skills/prizmkit-test/assets/authoritative-records.schema.json +63 -12
  88. package/bundled/skills/prizmkit-test/assets/evidence-manifest.schema.json +1 -1
  89. package/bundled/skills/prizmkit-test/assets/evidence-package-template.json +13 -0
  90. package/bundled/skills/prizmkit-test/references/evidence-protocol.md +6 -1
  91. package/bundled/skills/prizmkit-test/references/evidence-request-protocol.md +8 -1
  92. package/bundled/skills/prizmkit-test/references/examples.md +1 -1
  93. package/bundled/skills/prizmkit-test/references/test-generation-steps.md +4 -1
  94. package/bundled/skills/prizmkit-test/references/test-report-template.md +1 -1
  95. package/bundled/skills/prizmkit-test/references/trusted-evidence-execution.md +15 -0
  96. package/bundled/skills/prizmkit-test/references/workflow-state-protocol.md +181 -0
  97. package/bundled/skills/prizmkit-test/scripts/build_test_evidence.py +744 -23
  98. package/bundled/skills/prizmkit-test/scripts/validate_test_evidence.py +194 -15
  99. package/bundled/skills/prizmkit-workflow/SKILL.md +266 -0
  100. package/bundled/skills/prizmkit-workflow/references/workflow-state-protocol.md +181 -0
  101. package/bundled/skills/recovery-workflow/SKILL.md +62 -241
  102. package/bundled/skills/recovery-workflow/evals/evals.json +17 -33
  103. package/bundled/skills/recovery-workflow/references/detection.md +28 -52
  104. package/bundled/skills/recovery-workflow/scripts/detect-recovery-state.py +105 -439
  105. package/bundled/skills/refactor-pipeline-launcher/SKILL.md +136 -275
  106. package/bundled/skills/refactor-pipeline-launcher/references/configuration.md +53 -88
  107. package/bundled/skills/refactor-planner/SKILL.md +12 -57
  108. package/bundled/skills/refactor-planner/references/behavior-preservation.md +111 -230
  109. package/bundled/skills/refactor-planner/references/error-recovery.md +37 -0
  110. package/bundled/skills/refactor-planner/references/planning-phases.md +11 -17
  111. package/bundled/skills/refactor-planner/scripts/validate-and-generate-refactor.py +1 -1
  112. package/bundled/skills/refactor-workflow/SKILL.md +98 -139
  113. package/bundled/templates/project-memory-template.md +4 -4
  114. package/package.json +1 -1
  115. package/src/index.js +4 -0
  116. package/src/prompts.js +10 -3
  117. package/src/scaffold.js +1 -1
  118. package/bundled/dev-pipeline/tests/test-deploy-safety.sh +0 -223
  119. package/bundled/skills/feature-pipeline-launcher/scripts/preflight-check.py +0 -462
@@ -13,8 +13,12 @@ from generate_bugfix_prompt import (
13
13
  format_error_source_details,
14
14
  format_environment,
15
15
  generate_bugfix_checkpoint,
16
+ bugfix_checkpoint_metadata,
17
+ merge_bugfix_checkpoint_state,
18
+ route_bugfix_repair,
16
19
  process_conditional_blocks,
17
20
  render_template,
21
+ assemble_bugfix_sections,
18
22
  )
19
23
  from continuation import append_continuation_handoff
20
24
 
@@ -312,6 +316,11 @@ def test_template_source_is_clean_for_headless_prompt_contract():
312
316
  content = Path("dev-pipeline/templates/bugfix-bootstrap-prompt.md").read_text(encoding="utf-8")
313
317
  for forbidden in HEADLESS_FORBIDDEN_PROMPT_STRINGS:
314
318
  assert forbidden not in content
319
+ assert "FAST_PATH=true" not in content
320
+ assert "prizmkit-workflow" not in content
321
+ assert "/prizmkit-test scope=this-change artifact_dir=.prizmkit/bugfix/{{BUG_ID}}/" in content
322
+ assert "local_commit_authorized=true" in content
323
+ assert "push_authorized" not in content
315
324
 
316
325
 
317
326
  def test_bugfix_prompt_keeps_fine_grained_phases_out_of_external_status_contract():
@@ -455,6 +464,126 @@ class TestBugfixBootstrapShellExtraction:
455
464
 
456
465
 
457
466
  class TestBugfixCheckpointGeneration:
467
+ def test_checkpoint_merge_preserves_family_handoff_state(self, tmp_path):
468
+ fresh = generate_bugfix_checkpoint("B-001", "new")
469
+ existing = generate_bugfix_checkpoint("B-001", "old")
470
+ existing["bugfix_state"] = bugfix_checkpoint_metadata(
471
+ ".prizmkit/bugfix/B-001",
472
+ stage="test",
473
+ status="TEST_BLOCKED",
474
+ stage_result="TEST_BLOCKED",
475
+ repair_round=2,
476
+ next_stage="prizmkit-test",
477
+ resume_from="prizmkit-test",
478
+ )
479
+
480
+ merged = merge_bugfix_checkpoint_state(existing, fresh, str(tmp_path))
481
+
482
+ assert merged["bugfix_state"]["stage_result"] == "TEST_BLOCKED"
483
+ assert merged["bugfix_state"]["resume_from"] == "prizmkit-test"
484
+
485
+ def test_default_checkpoint_has_all_atomic_gates_in_order(self):
486
+ checkpoint = generate_bugfix_checkpoint("B-001", "session-1")
487
+
488
+ assert [step["skill"] for step in checkpoint["steps"]] == [
489
+ "prizmkit-init",
490
+ "bug-diagnosis-and-plan",
491
+ "prizmkit-implement",
492
+ "prizmkit-code-review",
493
+ "prizmkit-test",
494
+ "prizmkit-retrospective",
495
+ "prizmkit-committer",
496
+ "bug-report",
497
+ ]
498
+ test_step = checkpoint["steps"][4]
499
+ assert test_step["depends_on"] == "S04"
500
+ assert test_step["required_artifacts"] == [
501
+ ".prizmkit/test/evidence/*/manifest.json",
502
+ ".prizmkit/test/evidence/*/verdict.json",
503
+ ".prizmkit/test/evidence/*/validation.json",
504
+ ]
505
+ assert checkpoint["steps"][5]["depends_on"] == "S05"
506
+
507
+ def test_bugfix_repair_routing_preserves_review_and_test_boundaries(self):
508
+ review = route_bugfix_repair("REVIEW_NEEDS_FIXES", repair_round=0)
509
+ test_infra = route_bugfix_repair(
510
+ "TEST_FAIL", "test-infrastructure", repair_round=1,
511
+ )
512
+ production = route_bugfix_repair("TEST_FAIL", "public-interface", repair_round=2)
513
+
514
+ assert review["route"] == [
515
+ "prizmkit-implement", "prizmkit-code-review", "prizmkit-test",
516
+ ]
517
+ assert test_infra["route"] == ["prizmkit-implement", "prizmkit-test"]
518
+ assert production["route"] == [
519
+ "prizmkit-implement", "prizmkit-code-review", "prizmkit-test",
520
+ ]
521
+ assert production["repair_round"] == 3
522
+
523
+ def test_bugfix_repair_routing_blocks_unsafe_blocked_and_exhausted_results(self):
524
+ unknown = route_bugfix_repair("TEST_FAIL", "unknown", repair_round=1)
525
+ blocked = route_bugfix_repair("TEST_BLOCKED", "production", repair_round=1)
526
+ exhausted = route_bugfix_repair("TEST_FAIL", "production", repair_round=3)
527
+
528
+ assert unknown["blocked"] is True
529
+ assert unknown["route"] == []
530
+ assert blocked["blocked"] is True
531
+ assert blocked["resumable"] is False
532
+ assert blocked["next_stage"] is None
533
+ assert blocked["terminal_status"] == "WORKFLOW_BLOCKED"
534
+ assert blocked["blocked_reason"] == "test_blocked"
535
+ assert blocked["route"] == []
536
+ assert "cannot safely edit production" in blocked["reason"]
537
+ assert exhausted["blocked"] is True
538
+ assert exhausted["repair_round"] == 3
539
+
540
+ def test_bugfix_checkpoint_metadata_preserves_artifact_and_evidence_handoff(self):
541
+ metadata = bugfix_checkpoint_metadata(
542
+ ".prizmkit/bugfix/B-001",
543
+ evidence={
544
+ "manifest_path": ".prizmkit/test/evidence/id/manifest.json",
545
+ "verdict_path": ".prizmkit/test/evidence/id/verdict.json",
546
+ "validation_path": ".prizmkit/test/evidence/id/validation.json",
547
+ },
548
+ stage="test",
549
+ status="TEST_FAIL",
550
+ stage_result="TEST_FAIL",
551
+ repair_scope="test-infrastructure",
552
+ repair_round=2,
553
+ )
554
+
555
+ assert metadata["artifact_dir"] == ".prizmkit/bugfix/B-001"
556
+ assert metadata["authoritative_evidence_paths"]["validation"].endswith(
557
+ "/validation.json"
558
+ )
559
+ assert metadata["repair_round"] == 2
560
+ assert metadata["resume_from"] == "prizmkit-implement"
561
+
562
+ def test_manual_bugfix_uses_automatic_verification_and_keeps_commit_gate(self):
563
+ sections = assemble_bugfix_sections(
564
+ "standard", "dev-pipeline/templates/sections", False, True,
565
+ )
566
+ names = [name for name, _ in sections]
567
+
568
+ assert "bugfix-manual-gate" in names
569
+ assert "headless-commit-authorization" in names
570
+ assert "bugfix-phase-commit-report" in names
571
+
572
+ def test_rendered_bugfix_prompt_is_atomic_headless_and_local_commit_only(self, tmp_path):
573
+ prompt = _render_bugfix_prompt(tmp_path)
574
+
575
+ assert prompt.index("/prizmkit-code-review") < prompt.index(
576
+ "/prizmkit-test scope=this-change artifact_dir=.prizmkit/bugfix/B-001/"
577
+ ) < prompt.index("### Headless Commit Authorization")
578
+ assert "FAST_PATH=true" not in prompt
579
+ assert "prizmkit-workflow" not in prompt
580
+ assert '"local_commit_authorized": true' in prompt
581
+ assert "push_authorized" not in prompt
582
+ assert "Do not ask questions, wait for user input" in prompt
583
+ assert "Remote publication is controlled by the runtime" in prompt
584
+ assert "push_authorized\": true" not in prompt
585
+ assert ".prizmkit/bugfix/B-001/" in prompt
586
+
458
587
  def test_setup_section_skips_and_finalization_group_expands(self):
459
588
  checkpoint = generate_bugfix_checkpoint(
460
589
  "B-001",
@@ -10,6 +10,8 @@ from generate_refactor_prompt import (
10
10
  build_replacements,
11
11
  generate_refactor_checkpoint,
12
12
  merge_refactor_checkpoint_state,
13
+ refactor_checkpoint_metadata,
14
+ route_refactor_repair,
13
15
  )
14
16
 
15
17
  REMOVED_MAX_LOG_ENV = "MAX_" + "LOG_SIZE"
@@ -54,12 +56,24 @@ class TestRefactorCheckpointMerge:
54
56
  def test_preserves_skipped_without_artifacts(self, tmp_path):
55
57
  fresh = generate_refactor_checkpoint("R-008", "R-008-new")
56
58
  existing = generate_refactor_checkpoint("R-008", "R-008-old")
59
+ existing["refactor_state"] = refactor_checkpoint_metadata(
60
+ ".prizmkit/refactor/R-008",
61
+ stage="test",
62
+ status="TEST_FAIL",
63
+ stage_result="TEST_FAIL",
64
+ repair_scope="public-interface",
65
+ repair_round=2,
66
+ next_stage="prizmkit-implement",
67
+ resume_from="prizmkit-implement",
68
+ )
57
69
  existing["steps"][0]["status"] = "skipped"
58
70
 
59
71
  merged = merge_refactor_checkpoint_state(existing, fresh, str(tmp_path))
60
72
 
61
73
  assert merged["steps"][0]["status"] == "skipped"
62
74
  assert merged["steps"][1]["status"] == "pending"
75
+ assert merged["refactor_state"]["repair_scope"] == "public-interface"
76
+ assert merged["refactor_state"]["repair_round"] == 2
63
77
 
64
78
 
65
79
  class TestExplicitProjectRoot:
@@ -197,6 +211,11 @@ def test_template_source_is_clean_for_headless_prompt_contract():
197
211
  content = Path("dev-pipeline/templates/refactor-bootstrap-prompt.md").read_text(encoding="utf-8")
198
212
  for forbidden in HEADLESS_FORBIDDEN_PROMPT_STRINGS:
199
213
  assert forbidden not in content
214
+ assert "prizmkit-workflow" not in content
215
+ assert "/prizmkit-test scope=this-change artifact_dir=.prizmkit/refactor/{{REFACTOR_ID}}/" in content
216
+ assert "local_commit_authorized=true" in content
217
+ assert "push_authorized" not in content
218
+ assert "Behavior-preservation checks remain supporting evidence" in content
200
219
 
201
220
 
202
221
  # ---------------------------------------------------------------------------
@@ -315,6 +334,78 @@ class TestRefactorBootstrapShellExtraction:
315
334
 
316
335
 
317
336
  class TestRefactorCheckpointGeneration:
337
+ def test_default_checkpoint_has_all_atomic_gates_in_order(self):
338
+ checkpoint = generate_refactor_checkpoint("R-001", "session-1")
339
+
340
+ assert [step["skill"] for step in checkpoint["steps"]] == [
341
+ "prizmkit-init",
342
+ "prizmkit-plan",
343
+ "prizmkit-implement",
344
+ "prizmkit-code-review",
345
+ "prizmkit-test",
346
+ "prizmkit-retrospective",
347
+ "prizmkit-committer",
348
+ "refactor-report",
349
+ "completion-summary",
350
+ ]
351
+ assert checkpoint["steps"][4]["depends_on"] == "S04"
352
+ assert checkpoint["steps"][5]["depends_on"] == "S05"
353
+
354
+ def test_refactor_repair_routing_preserves_behavior_review_and_test(self):
355
+ test_infra = route_refactor_repair(
356
+ "TEST_FAIL", "test-infrastructure", repair_round=1,
357
+ )
358
+ production = route_refactor_repair("TEST_FAIL", "public-interface", repair_round=1)
359
+ blocked = route_refactor_repair("TEST_BLOCKED", "production", repair_round=1)
360
+
361
+ assert test_infra["route"] == ["prizmkit-implement", "prizmkit-test"]
362
+ assert production["route"] == [
363
+ "prizmkit-implement", "prizmkit-code-review", "prizmkit-test",
364
+ ]
365
+ unknown = route_refactor_repair("TEST_FAIL", "contract", repair_round=1)
366
+ exhausted = route_refactor_repair("TEST_FAIL", "production", repair_round=3)
367
+ assert unknown["blocked"] is True
368
+ assert unknown["route"] == []
369
+ assert exhausted["blocked"] is True
370
+ assert exhausted["repair_round"] == 3
371
+ assert blocked["blocked"] is True
372
+ assert blocked["route"] == []
373
+ assert blocked["next_stage"] is None
374
+ assert blocked["terminal_status"] == "WORKFLOW_BLOCKED"
375
+ assert blocked["blocked_reason"] == "test_blocked"
376
+
377
+ def test_refactor_checkpoint_metadata_preserves_artifact_and_evidence_handoff(self):
378
+ metadata = refactor_checkpoint_metadata(
379
+ ".prizmkit/refactor/R-001",
380
+ evidence={"manifest_path": "manifest.json"},
381
+ stage="test",
382
+ status="TEST_PASS",
383
+ stage_result="TEST_PASS",
384
+ next_stage="prizmkit-retrospective",
385
+ resume_from="prizmkit-retrospective",
386
+ )
387
+
388
+ assert metadata["artifact_dir"] == ".prizmkit/refactor/R-001"
389
+ assert metadata["authoritative_evidence_paths"]["manifest"] == "manifest.json"
390
+ assert metadata["next_stage"] == "prizmkit-retrospective"
391
+ assert metadata["resume_from"] == "prizmkit-retrospective"
392
+
393
+ def test_rendered_refactor_prompt_is_atomic_headless_and_local_commit_only(self, tmp_path):
394
+ prompt = _render_refactor_prompt_full(tmp_path)
395
+
396
+ assert prompt.index("/prizmkit-code-review") < prompt.index(
397
+ "/prizmkit-test scope=this-change artifact_dir=.prizmkit/refactor/R-001/"
398
+ ) < prompt.index("### Headless Commit Authorization")
399
+ assert "prizmkit-workflow" not in prompt
400
+ assert "Behavior-preservation checks collected during planning and implementation remain supporting evidence" in prompt
401
+ assert '"local_commit_authorized": true' in prompt
402
+ assert "push_authorized" not in prompt
403
+ assert "Remote publication is controlled by the runtime" in prompt
404
+ assert "automatic push" not in prompt.lower()
405
+ assert "push_authorized\": true" not in prompt
406
+
407
+
408
+ class TestRefactorCheckpointGenerationLegacy:
318
409
  def test_setup_section_is_step_and_finalization_group_expands(self):
319
410
  checkpoint = generate_refactor_checkpoint(
320
411
  "R-001",