prizmkit 1.1.100 → 1.1.102

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 (317) hide show
  1. package/bin/create-prizmkit.js +4 -4
  2. package/bundled/VERSION.json +3 -3
  3. package/bundled/dev-pipeline/.env.example +3 -3
  4. package/bundled/dev-pipeline/README.md +110 -90
  5. package/bundled/dev-pipeline/assets/prizm-dev-team-integration.md +1 -1
  6. package/bundled/dev-pipeline/cli.py +27 -0
  7. package/bundled/dev-pipeline/prizmkit_runtime/__init__.py +13 -0
  8. package/bundled/dev-pipeline/prizmkit_runtime/__main__.py +9 -0
  9. package/bundled/dev-pipeline/prizmkit_runtime/cli.py +193 -0
  10. package/bundled/dev-pipeline/prizmkit_runtime/commands.py +313 -0
  11. package/bundled/dev-pipeline/prizmkit_runtime/compat.py +32 -0
  12. package/bundled/dev-pipeline/prizmkit_runtime/config.py +410 -0
  13. package/bundled/dev-pipeline/prizmkit_runtime/daemon.py +478 -0
  14. package/bundled/dev-pipeline/prizmkit_runtime/gitops.py +734 -0
  15. package/bundled/dev-pipeline/prizmkit_runtime/heartbeat.py +256 -0
  16. package/bundled/dev-pipeline/prizmkit_runtime/interoperability.py +109 -0
  17. package/bundled/dev-pipeline/prizmkit_runtime/paths.py +110 -0
  18. package/bundled/dev-pipeline/prizmkit_runtime/processes.py +373 -0
  19. package/bundled/dev-pipeline/prizmkit_runtime/reset.py +389 -0
  20. package/bundled/dev-pipeline/prizmkit_runtime/runner_bookkeeping.py +51 -0
  21. package/bundled/dev-pipeline/prizmkit_runtime/runner_classification.py +179 -0
  22. package/bundled/dev-pipeline/prizmkit_runtime/runner_models.py +355 -0
  23. package/bundled/dev-pipeline/prizmkit_runtime/runner_prompts.py +118 -0
  24. package/bundled/dev-pipeline/prizmkit_runtime/runner_recovery.py +187 -0
  25. package/bundled/dev-pipeline/prizmkit_runtime/runner_status.py +153 -0
  26. package/bundled/dev-pipeline/prizmkit_runtime/runners.py +425 -0
  27. package/bundled/dev-pipeline/prizmkit_runtime/sessions.py +560 -0
  28. package/bundled/dev-pipeline/prizmkit_runtime/status.py +71 -0
  29. package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +51 -36
  30. package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +20 -5
  31. package/bundled/dev-pipeline/scripts/generate-recovery-prompt.py +2 -2
  32. package/bundled/dev-pipeline/scripts/parse-stream-progress.py +39 -0
  33. package/bundled/dev-pipeline/templates/agent-prompts/dev-implement.md +8 -2
  34. package/bundled/dev-pipeline/templates/agent-prompts/reviewer-review.md +1 -1
  35. package/bundled/dev-pipeline/templates/bootstrap-prompt.md +6 -2
  36. package/bundled/dev-pipeline/templates/bootstrap-tier1.md +14 -6
  37. package/bundled/dev-pipeline/templates/bootstrap-tier2.md +14 -4
  38. package/bundled/dev-pipeline/templates/bootstrap-tier3.md +14 -4
  39. package/bundled/dev-pipeline/templates/sections/context-budget-rules.md +2 -0
  40. package/bundled/dev-pipeline/templates/sections/log-size-awareness.md +9 -30
  41. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-agent-suffix.md +15 -7
  42. package/bundled/dev-pipeline/templates/sections/phase-implement-agent.md +42 -29
  43. package/bundled/dev-pipeline/templates/sections/phase-implement-full.md +41 -39
  44. package/bundled/dev-pipeline/templates/sections/phase-implement-lite.md +8 -17
  45. package/bundled/dev-pipeline/templates/sections/phase-prizmkit-test.md +2 -2
  46. package/bundled/dev-pipeline/templates/sections/phase-review-agent.md +1 -3
  47. package/bundled/dev-pipeline/templates/sections/phase-review-full.md +1 -3
  48. package/bundled/dev-pipeline/templates/sections/phase0-test-baseline.md +3 -8
  49. package/bundled/dev-pipeline/templates/sections/test-failure-recovery-agent.md +6 -2
  50. package/bundled/dev-pipeline/templates/sections/test-failure-recovery-lite.md +5 -1
  51. package/bundled/dev-pipeline/tests/test_auto_skip.py +436 -14
  52. package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +115 -7
  53. package/bundled/dev-pipeline/tests/test_generate_bugfix_prompt.py +40 -0
  54. package/bundled/dev-pipeline/tests/test_python_runner_parity.py +1226 -0
  55. package/bundled/dev-pipeline/tests/test_unified_cli.py +1045 -0
  56. package/bundled/skills/_metadata.json +1 -1
  57. package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +29 -34
  58. package/bundled/skills/bugfix-pipeline-launcher/references/configuration.md +6 -5
  59. package/bundled/skills/feature-pipeline-launcher/SKILL.md +29 -35
  60. package/bundled/skills/feature-pipeline-launcher/references/configuration.md +7 -6
  61. package/bundled/skills/feature-workflow/SKILL.md +3 -6
  62. package/bundled/skills/recovery-workflow/SKILL.md +23 -32
  63. package/bundled/skills/refactor-pipeline-launcher/SKILL.md +29 -35
  64. package/bundled/skills/refactor-pipeline-launcher/references/configuration.md +7 -6
  65. package/bundled/skills/refactor-workflow/SKILL.md +3 -6
  66. package/bundled/templates/hooks/commit-intent.json +2 -2
  67. package/bundled/templates/hooks/diff-prizm-docs.py +226 -0
  68. package/bundled/templates/hooks/prizm-pre-commit.py +45 -0
  69. package/bundled/templates/hooks/validate-prizm-docs.py +240 -0
  70. package/package.json +1 -1
  71. package/src/config.js +42 -19
  72. package/src/external-skills.js +14 -14
  73. package/src/index.js +3 -6
  74. package/src/manifest.js +11 -5
  75. package/src/metadata.js +7 -18
  76. package/src/platforms.js +25 -0
  77. package/src/prompts.js +0 -12
  78. package/src/runtimes.js +18 -11
  79. package/src/scaffold.js +144 -122
  80. package/src/upgrade.js +12 -3
  81. package/bundled/dev-pipeline/launch-bugfix-daemon.sh +0 -500
  82. package/bundled/dev-pipeline/launch-feature-daemon.sh +0 -657
  83. package/bundled/dev-pipeline/launch-refactor-daemon.sh +0 -502
  84. package/bundled/dev-pipeline/lib/branch.sh +0 -326
  85. package/bundled/dev-pipeline/lib/common.sh +0 -1476
  86. package/bundled/dev-pipeline/lib/heartbeat.sh +0 -469
  87. package/bundled/dev-pipeline/reset-bug.sh +0 -425
  88. package/bundled/dev-pipeline/reset-feature.sh +0 -436
  89. package/bundled/dev-pipeline/reset-refactor.sh +0 -423
  90. package/bundled/dev-pipeline/run-bugfix.sh +0 -1430
  91. package/bundled/dev-pipeline/run-feature.sh +0 -1718
  92. package/bundled/dev-pipeline/run-recovery.sh +0 -648
  93. package/bundled/dev-pipeline/run-refactor.sh +0 -1463
  94. package/bundled/dev-pipeline/tests/test-path-resolution.sh +0 -100
  95. package/bundled/dev-pipeline-windows/.env.example +0 -36
  96. package/bundled/dev-pipeline-windows/README.md +0 -30
  97. package/bundled/dev-pipeline-windows/SCHEMA_ANALYSIS.md +0 -533
  98. package/bundled/dev-pipeline-windows/assets/feature-list-example.json +0 -146
  99. package/bundled/dev-pipeline-windows/assets/prizm-dev-team-integration.md +0 -137
  100. package/bundled/dev-pipeline-windows/launch-bugfix-daemon.ps1 +0 -9
  101. package/bundled/dev-pipeline-windows/launch-feature-daemon.ps1 +0 -9
  102. package/bundled/dev-pipeline-windows/launch-refactor-daemon.ps1 +0 -9
  103. package/bundled/dev-pipeline-windows/lib/branch.ps1 +0 -235
  104. package/bundled/dev-pipeline-windows/lib/common.ps1 +0 -991
  105. package/bundled/dev-pipeline-windows/lib/daemon.ps1 +0 -140
  106. package/bundled/dev-pipeline-windows/lib/pipeline.ps1 +0 -1051
  107. package/bundled/dev-pipeline-windows/lib/reset.ps1 +0 -121
  108. package/bundled/dev-pipeline-windows/reset-bug.ps1 +0 -10
  109. package/bundled/dev-pipeline-windows/reset-feature.ps1 +0 -10
  110. package/bundled/dev-pipeline-windows/reset-refactor.ps1 +0 -10
  111. package/bundled/dev-pipeline-windows/run-bugfix.ps1 +0 -9
  112. package/bundled/dev-pipeline-windows/run-feature.ps1 +0 -9
  113. package/bundled/dev-pipeline-windows/run-recovery.ps1 +0 -179
  114. package/bundled/dev-pipeline-windows/run-refactor.ps1 +0 -9
  115. package/bundled/dev-pipeline-windows/scripts/check-session-status.py +0 -301
  116. package/bundled/dev-pipeline-windows/scripts/continuation.py +0 -374
  117. package/bundled/dev-pipeline-windows/scripts/detect-stuck.py +0 -530
  118. package/bundled/dev-pipeline-windows/scripts/generate-bootstrap-prompt.py +0 -2279
  119. package/bundled/dev-pipeline-windows/scripts/generate-bugfix-prompt.py +0 -763
  120. package/bundled/dev-pipeline-windows/scripts/generate-recovery-prompt.py +0 -805
  121. package/bundled/dev-pipeline-windows/scripts/generate-refactor-prompt.py +0 -841
  122. package/bundled/dev-pipeline-windows/scripts/init-bugfix-pipeline.py +0 -316
  123. package/bundled/dev-pipeline-windows/scripts/init-dev-team.py +0 -134
  124. package/bundled/dev-pipeline-windows/scripts/init-pipeline.py +0 -382
  125. package/bundled/dev-pipeline-windows/scripts/init-refactor-pipeline.py +0 -399
  126. package/bundled/dev-pipeline-windows/scripts/parse-stream-progress.py +0 -1362
  127. package/bundled/dev-pipeline-windows/scripts/patch-completion-notes.py +0 -191
  128. package/bundled/dev-pipeline-windows/scripts/prizmkit-test-gate.py +0 -446
  129. package/bundled/dev-pipeline-windows/scripts/update-bug-status.py +0 -1121
  130. package/bundled/dev-pipeline-windows/scripts/update-checkpoint.py +0 -173
  131. package/bundled/dev-pipeline-windows/scripts/update-feature-status.py +0 -1789
  132. package/bundled/dev-pipeline-windows/scripts/update-refactor-status.py +0 -1327
  133. package/bundled/dev-pipeline-windows/scripts/utils.py +0 -542
  134. package/bundled/dev-pipeline-windows/templates/agent-prompts/critic-plan-challenge.md +0 -7
  135. package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-fix.md +0 -7
  136. package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-implement.md +0 -65
  137. package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-resume.md +0 -5
  138. package/bundled/dev-pipeline-windows/templates/agent-prompts/reviewer-review.md +0 -7
  139. package/bundled/dev-pipeline-windows/templates/bootstrap-prompt.md +0 -73
  140. package/bundled/dev-pipeline-windows/templates/bootstrap-tier1.md +0 -589
  141. package/bundled/dev-pipeline-windows/templates/bootstrap-tier2.md +0 -710
  142. package/bundled/dev-pipeline-windows/templates/bootstrap-tier3.md +0 -791
  143. package/bundled/dev-pipeline-windows/templates/bug-fix-list-schema.json +0 -263
  144. package/bundled/dev-pipeline-windows/templates/bugfix-bootstrap-prompt.md +0 -326
  145. package/bundled/dev-pipeline-windows/templates/feature-list-schema.json +0 -237
  146. package/bundled/dev-pipeline-windows/templates/refactor-bootstrap-prompt.md +0 -340
  147. package/bundled/dev-pipeline-windows/templates/refactor-list-schema.json +0 -270
  148. package/bundled/dev-pipeline-windows/templates/sections/ac-verification-checklist.md +0 -7
  149. package/bundled/dev-pipeline-windows/templates/sections/checkpoint-system.md +0 -91
  150. package/bundled/dev-pipeline-windows/templates/sections/context-budget-rules.md +0 -34
  151. package/bundled/dev-pipeline-windows/templates/sections/critical-paths-agent.md +0 -10
  152. package/bundled/dev-pipeline-windows/templates/sections/critical-paths-full.md +0 -12
  153. package/bundled/dev-pipeline-windows/templates/sections/critical-paths-lite.md +0 -7
  154. package/bundled/dev-pipeline-windows/templates/sections/directory-convention-agent.md +0 -8
  155. package/bundled/dev-pipeline-windows/templates/sections/directory-convention-full.md +0 -9
  156. package/bundled/dev-pipeline-windows/templates/sections/directory-convention-lite.md +0 -6
  157. package/bundled/dev-pipeline-windows/templates/sections/failure-capture.md +0 -21
  158. package/bundled/dev-pipeline-windows/templates/sections/feature-context.md +0 -21
  159. package/bundled/dev-pipeline-windows/templates/sections/log-size-awareness.md +0 -41
  160. package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification-auto.md +0 -283
  161. package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification-opencli.md +0 -112
  162. package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification.md +0 -168
  163. package/bundled/dev-pipeline-windows/templates/sections/phase-commit-full.md +0 -82
  164. package/bundled/dev-pipeline-windows/templates/sections/phase-commit.md +0 -75
  165. package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-agent-suffix.md +0 -23
  166. package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-base.md +0 -14
  167. package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-lite-suffix.md +0 -19
  168. package/bundled/dev-pipeline-windows/templates/sections/phase-critic-plan-full.md +0 -63
  169. package/bundled/dev-pipeline-windows/templates/sections/phase-critic-plan.md +0 -42
  170. package/bundled/dev-pipeline-windows/templates/sections/phase-implement-agent.md +0 -44
  171. package/bundled/dev-pipeline-windows/templates/sections/phase-implement-full.md +0 -59
  172. package/bundled/dev-pipeline-windows/templates/sections/phase-implement-lite.md +0 -39
  173. package/bundled/dev-pipeline-windows/templates/sections/phase-plan-agent.md +0 -27
  174. package/bundled/dev-pipeline-windows/templates/sections/phase-plan-lite.md +0 -27
  175. package/bundled/dev-pipeline-windows/templates/sections/phase-prizmkit-test.md +0 -39
  176. package/bundled/dev-pipeline-windows/templates/sections/phase-review-agent.md +0 -35
  177. package/bundled/dev-pipeline-windows/templates/sections/phase-review-full.md +0 -35
  178. package/bundled/dev-pipeline-windows/templates/sections/phase-specify-plan-full.md +0 -73
  179. package/bundled/dev-pipeline-windows/templates/sections/phase0-init.md +0 -13
  180. package/bundled/dev-pipeline-windows/templates/sections/phase0-test-baseline.md +0 -21
  181. package/bundled/dev-pipeline-windows/templates/sections/session-context.md +0 -5
  182. package/bundled/dev-pipeline-windows/templates/sections/subagent-timeout-recovery.md +0 -6
  183. package/bundled/dev-pipeline-windows/templates/sections/task-contract.md +0 -34
  184. package/bundled/dev-pipeline-windows/templates/sections/test-failure-recovery-agent.md +0 -48
  185. package/bundled/dev-pipeline-windows/templates/sections/test-failure-recovery-lite.md +0 -48
  186. package/bundled/dev-pipeline-windows/templates/session-status-schema.json +0 -83
  187. package/bundled/skills-windows/app-planner/SKILL.md +0 -296
  188. package/bundled/skills-windows/app-planner/assets/app-design-guide.md +0 -101
  189. package/bundled/skills-windows/app-planner/references/architecture-decisions.md +0 -52
  190. package/bundled/skills-windows/app-planner/references/brainstorm-guide.md +0 -101
  191. package/bundled/skills-windows/app-planner/references/frontend-design-guide.md +0 -71
  192. package/bundled/skills-windows/app-planner/references/infrastructure-convention-discovery.md +0 -108
  193. package/bundled/skills-windows/app-planner/references/project-brief-guide.md +0 -82
  194. package/bundled/skills-windows/app-planner/references/project-conventions-discovery.md +0 -59
  195. package/bundled/skills-windows/app-planner/references/project-state-detection.md +0 -90
  196. package/bundled/skills-windows/app-planner/references/red-team-checklist.md +0 -40
  197. package/bundled/skills-windows/app-planner/references/rules/backend/derivation-rules.md +0 -619
  198. package/bundled/skills-windows/app-planner/references/rules/backend/fixed-rules.md +0 -285
  199. package/bundled/skills-windows/app-planner/references/rules/backend/question-bank.md +0 -249
  200. package/bundled/skills-windows/app-planner/references/rules/backend/question-manifest.json +0 -46
  201. package/bundled/skills-windows/app-planner/references/rules/backend/template.md +0 -173
  202. package/bundled/skills-windows/app-planner/references/rules/database/derivation-rules.md +0 -382
  203. package/bundled/skills-windows/app-planner/references/rules/database/fixed-rules.md +0 -211
  204. package/bundled/skills-windows/app-planner/references/rules/database/question-bank.md +0 -184
  205. package/bundled/skills-windows/app-planner/references/rules/database/question-manifest.json +0 -39
  206. package/bundled/skills-windows/app-planner/references/rules/database/template.md +0 -158
  207. package/bundled/skills-windows/app-planner/references/rules/frontend/derivation-rules.md +0 -820
  208. package/bundled/skills-windows/app-planner/references/rules/frontend/fixed-rules.md +0 -188
  209. package/bundled/skills-windows/app-planner/references/rules/frontend/question-bank.md +0 -319
  210. package/bundled/skills-windows/app-planner/references/rules/frontend/question-manifest.json +0 -51
  211. package/bundled/skills-windows/app-planner/references/rules/frontend/template.md +0 -339
  212. package/bundled/skills-windows/app-planner/references/rules/mobile/derivation-rules.md +0 -649
  213. package/bundled/skills-windows/app-planner/references/rules/mobile/fixed-rules.md +0 -290
  214. package/bundled/skills-windows/app-planner/references/rules/mobile/question-bank.md +0 -232
  215. package/bundled/skills-windows/app-planner/references/rules/mobile/question-manifest.json +0 -47
  216. package/bundled/skills-windows/app-planner/references/rules/mobile/template.md +0 -175
  217. package/bundled/skills-windows/app-planner/references/rules-configuration.md +0 -46
  218. package/bundled/skills-windows/bug-fix-workflow/SKILL.md +0 -379
  219. package/bundled/skills-windows/bug-fix-workflow/references/bug-diagnosis.md +0 -41
  220. package/bundled/skills-windows/bug-planner/SKILL.md +0 -402
  221. package/bundled/skills-windows/bug-planner/assets/bug-confirmation-template.md +0 -43
  222. package/bundled/skills-windows/bug-planner/references/critic-and-verification.md +0 -44
  223. package/bundled/skills-windows/bug-planner/references/error-recovery.md +0 -73
  224. package/bundled/skills-windows/bug-planner/references/input-formats.md +0 -53
  225. package/bundled/skills-windows/bug-planner/references/schema-validation.md +0 -25
  226. package/bundled/skills-windows/bug-planner/references/severity-rules.md +0 -16
  227. package/bundled/skills-windows/bug-planner/scripts/validate-bug-list.py +0 -322
  228. package/bundled/skills-windows/bugfix-pipeline-launcher/SKILL.md +0 -304
  229. package/bundled/skills-windows/bugfix-pipeline-launcher/references/configuration.md +0 -84
  230. package/bundled/skills-windows/feature-pipeline-launcher/SKILL.md +0 -381
  231. package/bundled/skills-windows/feature-pipeline-launcher/references/configuration.md +0 -67
  232. package/bundled/skills-windows/feature-pipeline-launcher/scripts/preflight-check.py +0 -462
  233. package/bundled/skills-windows/feature-planner/SKILL.md +0 -397
  234. package/bundled/skills-windows/feature-planner/assets/evaluation-guide.md +0 -64
  235. package/bundled/skills-windows/feature-planner/assets/planning-guide.md +0 -214
  236. package/bundled/skills-windows/feature-planner/references/browser-interaction.md +0 -59
  237. package/bundled/skills-windows/feature-planner/references/completeness-review.md +0 -57
  238. package/bundled/skills-windows/feature-planner/references/decomposition-patterns.md +0 -75
  239. package/bundled/skills-windows/feature-planner/references/error-recovery.md +0 -90
  240. package/bundled/skills-windows/feature-planner/references/incremental-feature-planning.md +0 -112
  241. package/bundled/skills-windows/feature-planner/references/new-project-planning.md +0 -85
  242. package/bundled/skills-windows/feature-planner/scripts/validate-and-generate.py +0 -1020
  243. package/bundled/skills-windows/feature-workflow/SKILL.md +0 -374
  244. package/bundled/skills-windows/feature-workflow/references/brainstorm-guide.md +0 -137
  245. package/bundled/skills-windows/prizm-kit/SKILL.md +0 -93
  246. package/bundled/skills-windows/prizmkit-code-review/SKILL.md +0 -161
  247. package/bundled/skills-windows/prizmkit-code-review/references/dev-agent-prompt.md +0 -30
  248. package/bundled/skills-windows/prizmkit-code-review/references/review-report-template.md +0 -31
  249. package/bundled/skills-windows/prizmkit-code-review/references/reviewer-agent-prompt.md +0 -66
  250. package/bundled/skills-windows/prizmkit-code-review/scripts/check_loop.py +0 -186
  251. package/bundled/skills-windows/prizmkit-committer/SKILL.md +0 -89
  252. package/bundled/skills-windows/prizmkit-deploy/SKILL.md +0 -444
  253. package/bundled/skills-windows/prizmkit-deploy/references/ci-cd-workflows.md +0 -115
  254. package/bundled/skills-windows/prizmkit-deploy/references/cloud-platform-deploy.md +0 -93
  255. package/bundled/skills-windows/prizmkit-deploy/references/data-safety-examples.md +0 -120
  256. package/bundled/skills-windows/prizmkit-deploy/references/database-setup.md +0 -46
  257. package/bundled/skills-windows/prizmkit-deploy/references/deploy-config-schema.md +0 -148
  258. package/bundled/skills-windows/prizmkit-deploy/references/deploy-history-schema.md +0 -62
  259. package/bundled/skills-windows/prizmkit-deploy/references/deployment-modes.md +0 -50
  260. package/bundled/skills-windows/prizmkit-deploy/references/direct-upload.md +0 -26
  261. package/bundled/skills-windows/prizmkit-deploy/references/dns-setup.md +0 -42
  262. package/bundled/skills-windows/prizmkit-deploy/references/docker-deploy.md +0 -31
  263. package/bundled/skills-windows/prizmkit-deploy/references/firewall-setup.md +0 -37
  264. package/bundled/skills-windows/prizmkit-deploy/references/live-validation-notes.md +0 -21
  265. package/bundled/skills-windows/prizmkit-deploy/references/nginx-blue-green.md +0 -59
  266. package/bundled/skills-windows/prizmkit-deploy/references/ssh-bootstrap-flow.md +0 -49
  267. package/bundled/skills-windows/prizmkit-deploy/references/ssh-execution-flow.md +0 -41
  268. package/bundled/skills-windows/prizmkit-deploy/references/ssh-takeover.md +0 -20
  269. package/bundled/skills-windows/prizmkit-deploy/references/ssl-setup.md +0 -56
  270. package/bundled/skills-windows/prizmkit-implement/SKILL.md +0 -71
  271. package/bundled/skills-windows/prizmkit-init/SKILL.md +0 -356
  272. package/bundled/skills-windows/prizmkit-init/assets/project-brief-template.md +0 -82
  273. package/bundled/skills-windows/prizmkit-init/references/config-schema.md +0 -70
  274. package/bundled/skills-windows/prizmkit-init/references/rules/layer-detection.md +0 -41
  275. package/bundled/skills-windows/prizmkit-init/references/tech-stack-catalog.md +0 -13
  276. package/bundled/skills-windows/prizmkit-init/references/update-supplement.md +0 -9
  277. package/bundled/skills-windows/prizmkit-plan/SKILL.md +0 -102
  278. package/bundled/skills-windows/prizmkit-plan/assets/plan-template.md +0 -115
  279. package/bundled/skills-windows/prizmkit-plan/assets/spec-template.md +0 -73
  280. package/bundled/skills-windows/prizmkit-plan/references/clarify-guide.md +0 -67
  281. package/bundled/skills-windows/prizmkit-plan/references/examples.md +0 -85
  282. package/bundled/skills-windows/prizmkit-plan/references/verification-checklist.md +0 -60
  283. package/bundled/skills-windows/prizmkit-prizm-docs/SKILL.md +0 -129
  284. package/bundled/skills-windows/prizmkit-prizm-docs/assets/prizm-docs-format.md +0 -613
  285. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-init.md +0 -45
  286. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-rebuild.md +0 -15
  287. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-status.md +0 -14
  288. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-update.md +0 -19
  289. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-validate.md +0 -17
  290. package/bundled/skills-windows/prizmkit-retrospective/SKILL.md +0 -87
  291. package/bundled/skills-windows/prizmkit-retrospective/references/knowledge-injection-steps.md +0 -50
  292. package/bundled/skills-windows/prizmkit-retrospective/references/structural-sync-steps.md +0 -43
  293. package/bundled/skills-windows/prizmkit-test/SKILL.md +0 -227
  294. package/bundled/skills-windows/prizmkit-test/references/boundary-coverage-protocol.md +0 -220
  295. package/bundled/skills-windows/prizmkit-test/references/examples.md +0 -143
  296. package/bundled/skills-windows/prizmkit-test/references/service-boundary-test-catalog.md +0 -225
  297. package/bundled/skills-windows/prizmkit-test/references/test-generation-steps.md +0 -109
  298. package/bundled/skills-windows/prizmkit-test/references/test-report-template.md +0 -111
  299. package/bundled/skills-windows/prizmkit-test/scripts/validate_boundary_report.py +0 -347
  300. package/bundled/skills-windows/recovery-workflow/SKILL.md +0 -355
  301. package/bundled/skills-windows/recovery-workflow/evals/evals.json +0 -46
  302. package/bundled/skills-windows/recovery-workflow/references/detection.md +0 -58
  303. package/bundled/skills-windows/recovery-workflow/scripts/detect-recovery-state.py +0 -544
  304. package/bundled/skills-windows/refactor-pipeline-launcher/SKILL.md +0 -346
  305. package/bundled/skills-windows/refactor-pipeline-launcher/references/configuration.md +0 -72
  306. package/bundled/skills-windows/refactor-planner/SKILL.md +0 -398
  307. package/bundled/skills-windows/refactor-planner/assets/planning-guide.md +0 -292
  308. package/bundled/skills-windows/refactor-planner/references/behavior-preservation.md +0 -301
  309. package/bundled/skills-windows/refactor-planner/references/fast-path.md +0 -59
  310. package/bundled/skills-windows/refactor-planner/references/planning-phases.md +0 -135
  311. package/bundled/skills-windows/refactor-planner/references/refactor-scoping-guide.md +0 -221
  312. package/bundled/skills-windows/refactor-planner/scripts/validate-and-generate-refactor.py +0 -858
  313. package/bundled/skills-windows/refactor-workflow/SKILL.md +0 -343
  314. package/bundled/skills-windows/refactor-workflow/references/brainstorm-guide.md +0 -116
  315. package/bundled/templates/hooks/diff-prizm-docs.sh +0 -158
  316. package/bundled/templates/hooks/prizm-pre-commit.sh +0 -108
  317. package/bundled/templates/hooks/validate-prizm-docs.sh +0 -139
@@ -1,530 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Detect stuck items in the dev-pipeline (features, bugs, or refactors).
3
-
4
- Checks each item for conditions that indicate it is stuck:
5
- 1. Max retries exceeded
6
- 2. Same checkpoint for consecutive sessions
7
- 3. Stale or missing heartbeat (for in_progress items)
8
- 4. Dependency deadlock (depends on a failed item)
9
-
10
- Outputs a JSON report to stdout and exits with code 1 if any stuck
11
- items are found, 0 otherwise.
12
-
13
- Usage:
14
- python3 detect-stuck.py --state-dir <path> --pipeline-type feature [--item-id <id>]
15
- [--max-retries <n>] [--stale-threshold <seconds>]
16
- [--task-list <path>]
17
-
18
- # Legacy feature-only args still supported:
19
- python3 detect-stuck.py --state-dir <path> [--feature-id <id>]
20
- [--feature-list <path>]
21
- """
22
-
23
- import argparse
24
- import json
25
- import os
26
- import sys
27
- from datetime import datetime, timezone
28
-
29
- from utils import error_out, setup_logging
30
-
31
-
32
- LOGGER = setup_logging("detect-stuck")
33
-
34
-
35
- def parse_args():
36
- parser = argparse.ArgumentParser(
37
- description="Detect stuck items in the dev-pipeline."
38
- )
39
- parser.add_argument(
40
- "--state-dir",
41
- required=True,
42
- help="Path to the state directory (e.g. .prizmkit/state/features)",
43
- )
44
- parser.add_argument(
45
- "--pipeline-type",
46
- choices=["feature", "bugfix", "refactor"],
47
- default=None,
48
- help="Pipeline type (auto-detected from --feature-id/--bug-id/--refactor-id if omitted)",
49
- )
50
- parser.add_argument(
51
- "--item-id",
52
- default=None,
53
- help="Check a specific item ID, or check all if omitted",
54
- )
55
- # Legacy feature-only args (still supported for backward compat)
56
- parser.add_argument(
57
- "--feature-id",
58
- default=None,
59
- help="(Legacy) Feature ID — equivalent to --pipeline-type feature --item-id <id>",
60
- )
61
- parser.add_argument(
62
- "--bug-id",
63
- default=None,
64
- help="Bug ID — equivalent to --pipeline-type bugfix --item-id <id>",
65
- )
66
- parser.add_argument(
67
- "--refactor-id",
68
- default=None,
69
- help="Refactor ID — equivalent to --pipeline-type refactor --item-id <id>",
70
- )
71
- parser.add_argument(
72
- "--max-retries",
73
- type=int,
74
- default=3,
75
- help="Maximum allowed retries before an item is considered stuck (default: 3)",
76
- )
77
- parser.add_argument(
78
- "--stale-threshold",
79
- type=int,
80
- default=600,
81
- help="Heartbeat staleness threshold in seconds (default: 600)",
82
- )
83
- parser.add_argument(
84
- "--feature-list",
85
- default=None,
86
- help="(Legacy) Path to feature-list.json — use --task-list instead",
87
- )
88
- parser.add_argument(
89
- "--bug-list",
90
- default=None,
91
- help="Path to bug-fix-list.json",
92
- )
93
- parser.add_argument(
94
- "--refactor-list",
95
- default=None,
96
- help="Path to refactor-list.json",
97
- )
98
- parser.add_argument(
99
- "--task-list",
100
- default=None,
101
- help="Path to the task list JSON (feature-list, bug-fix-list, or refactor-list)",
102
- )
103
- return parser.parse_args()
104
-
105
-
106
- def load_json(path):
107
- """Load and return parsed JSON from a file. Returns None on any error."""
108
- try:
109
- with open(path, "r", encoding="utf-8") as f:
110
- return json.load(f)
111
- except (IOError, OSError, json.JSONDecodeError, ValueError):
112
- return None
113
-
114
-
115
- def discover_item_ids(state_dir, subdir):
116
- """Return a sorted list of item IDs found directly under the typed state dir."""
117
- items_dir = os.path.join(state_dir, subdir) if subdir else state_dir
118
- if not os.path.isdir(items_dir):
119
- return []
120
- ids = []
121
- for name in os.listdir(items_dir):
122
- item_path = os.path.join(items_dir, name)
123
- if os.path.isdir(item_path):
124
- ids.append(name)
125
- return sorted(ids)
126
-
127
-
128
- def get_session_statuses(item_dir):
129
- """Return session-status.json data for all sessions of an item, sorted by session ID.
130
-
131
- Returns a list of (session_id, data) tuples.
132
- """
133
- sessions_dir = os.path.join(item_dir, "sessions")
134
- if not os.path.isdir(sessions_dir):
135
- return []
136
- results = []
137
- for session_name in sorted(os.listdir(sessions_dir)):
138
- session_path = os.path.join(sessions_dir, session_name)
139
- if not os.path.isdir(session_path):
140
- continue
141
- status_path = os.path.join(session_path, "session-status.json")
142
- data = load_json(status_path)
143
- if data is not None:
144
- results.append((session_name, data))
145
- return results
146
-
147
-
148
- def parse_iso_timestamp(ts_str):
149
- """Parse an ISO 8601 timestamp string to a datetime object.
150
-
151
- Handles formats with and without timezone info. Returns None on failure.
152
- """
153
- if not isinstance(ts_str, str):
154
- return None
155
- # Try parsing with timezone (Z suffix or +HH:MM offset)
156
- formats = [
157
- "%Y-%m-%dT%H:%M:%SZ",
158
- "%Y-%m-%dT%H:%M:%S+00:00",
159
- "%Y-%m-%dT%H:%M:%S.%fZ",
160
- "%Y-%m-%dT%H:%M:%S.%f+00:00",
161
- ]
162
- for fmt in formats:
163
- try:
164
- dt = datetime.strptime(ts_str, fmt)
165
- return dt.replace(tzinfo=timezone.utc)
166
- except ValueError:
167
- continue
168
- # Fallback: try stripping and replacing
169
- try:
170
- clean = ts_str.replace("Z", "+00:00")
171
- # Python 3.7+ fromisoformat
172
- if hasattr(datetime, "fromisoformat"):
173
- dt = datetime.fromisoformat(clean)
174
- if dt.tzinfo is None:
175
- dt = dt.replace(tzinfo=timezone.utc)
176
- return dt
177
- except (ValueError, AttributeError):
178
- pass
179
- return None
180
-
181
-
182
- def check_max_retries(item_status, max_retries):
183
- """Check 1: Has the item exceeded the maximum retry count?
184
-
185
- Returns a stuck-report dict or None.
186
- """
187
- retry_count = item_status.get("retry_count", 0)
188
- if not isinstance(retry_count, int):
189
- return None
190
- if retry_count >= max_retries:
191
- return {
192
- "reason": "max_retries_exceeded",
193
- "details": "Retry count {} has reached or exceeded max retries {}".format(
194
- retry_count, max_retries
195
- ),
196
- "suggestion": "Investigate recurring failures and consider resetting the item or adjusting the approach",
197
- }
198
- return None
199
-
200
-
201
- def check_stuck_checkpoint(item_dir):
202
- """Check 2: Is the item stuck at the same checkpoint for 3 consecutive sessions?
203
-
204
- Returns a stuck-report dict or None.
205
- """
206
- session_statuses = get_session_statuses(item_dir)
207
- if len(session_statuses) < 3:
208
- return None
209
-
210
- # Take the last 3 sessions
211
- last_three = session_statuses[-3:]
212
- checkpoints = []
213
- for _sid, data in last_three:
214
- cp = data.get("checkpoint_reached")
215
- checkpoints.append(cp)
216
-
217
- # All three must be non-None and identical
218
- if checkpoints[0] is not None and all(cp == checkpoints[0] for cp in checkpoints):
219
- return {
220
- "reason": "stuck_at_checkpoint",
221
- "details": "Stuck at {} for 3 consecutive sessions".format(checkpoints[0]),
222
- "suggestion": "Review plan.md generation - checkpoint {} validation is repeatedly failing".format(
223
- checkpoints[0]
224
- ),
225
- }
226
- return None
227
-
228
-
229
- def check_stale_heartbeat(item_id, item_status, state_dir, items_subdir, stale_threshold, task_list_status=None):
230
- """Check 3: Is the heartbeat stale or missing for an in_progress item?
231
-
232
- Only applies to items whose status indicates active work.
233
- Status is read from task_list_status (task list JSON, single source of truth).
234
- Uses last_session_id from the item's own status.json to find the active session.
235
-
236
- Returns a stuck-report dict or None.
237
- """
238
- status = task_list_status
239
- # All pipelines now use "in_progress" as the active status
240
- in_progress_statuses = {"in_progress"}
241
- if status not in in_progress_statuses:
242
- return None
243
-
244
- # Use last_session_id from the item's own status
245
- session_id = item_status.get("last_session_id")
246
- if not session_id:
247
- return None
248
-
249
- # Check heartbeat file
250
- heartbeat_path = os.path.join(
251
- state_dir, items_subdir, item_id, "sessions", session_id, "heartbeat.json"
252
- )
253
- heartbeat = load_json(heartbeat_path)
254
-
255
- if heartbeat is None:
256
- return {
257
- "reason": "no_heartbeat",
258
- "details": "Item is {} but no heartbeat.json found for session {}".format(
259
- status, session_id
260
- ),
261
- "suggestion": "The agent session may have crashed without writing a heartbeat - check session logs",
262
- }
263
-
264
- # Parse heartbeat timestamp and check staleness
265
- ts_str = heartbeat.get("timestamp")
266
- heartbeat_time = parse_iso_timestamp(ts_str)
267
- if heartbeat_time is None:
268
- return {
269
- "reason": "stale_heartbeat",
270
- "details": "Heartbeat has invalid or unparseable timestamp: {}".format(ts_str),
271
- "suggestion": "Check the agent session - heartbeat timestamp is malformed",
272
- }
273
-
274
- now = datetime.now(timezone.utc)
275
- age_seconds = (now - heartbeat_time).total_seconds()
276
- if age_seconds > stale_threshold:
277
- return {
278
- "reason": "stale_heartbeat",
279
- "details": "Heartbeat is {:.0f}s old (threshold: {}s) for session {}".format(
280
- age_seconds, stale_threshold, session_id
281
- ),
282
- "suggestion": "The agent may be hung or crashed - consider terminating and retrying the session",
283
- }
284
-
285
- return None
286
-
287
-
288
- def check_dependency_deadlock(item_id, task_list_data, state_dir, items_subdir, items_key):
289
- """Check 4: Does this item depend on a failed item?
290
-
291
- Reads dependency status from task list JSON (single source of truth).
292
-
293
- Returns a stuck-report dict or None.
294
- """
295
- if task_list_data is None:
296
- return None
297
-
298
- items = task_list_data.get(items_key, [])
299
- if not isinstance(items, list):
300
- return None
301
-
302
- # Build status map from task list
303
- status_map = {}
304
- for item in items:
305
- if isinstance(item, dict) and item.get("id"):
306
- status_map[item["id"]] = item.get("status", "pending")
307
-
308
- # Find this item in the list to get its dependencies
309
- deps = None
310
- for item in items:
311
- if not isinstance(item, dict):
312
- continue
313
- if item.get("id") == item_id:
314
- deps = item.get("dependencies", [])
315
- break
316
-
317
- if not deps or not isinstance(deps, list):
318
- return None
319
-
320
- # Check each dependency's status from the task list
321
- for dep_id in deps:
322
- dep_state = status_map.get(dep_id)
323
- if dep_state == "failed":
324
- return {
325
- "reason": "dependency_failed",
326
- "details": "Depends on {} which has status 'failed'".format(dep_id),
327
- "suggestion": "Fix or skip {} to unblock {}".format(dep_id, item_id),
328
- }
329
-
330
- return None
331
-
332
-
333
- def find_task_list(state_dir):
334
- """Attempt to locate and load the task list JSON via pipeline.json reference.
335
-
336
- Resolves the list path relative to state_dir when it is a relative path,
337
- so that pipeline.json is portable across machines and directory structures.
338
- """
339
- pipeline_path = os.path.join(state_dir, "pipeline.json")
340
- pipeline = load_json(pipeline_path)
341
- if pipeline is None:
342
- return None
343
-
344
- # Try various path keys used by different pipeline types
345
- fl_path = (
346
- pipeline.get("feature_list_path")
347
- or pipeline.get("bug_list_path")
348
- or pipeline.get("refactor_list_path")
349
- )
350
- if not fl_path:
351
- return None
352
-
353
- # Resolve relative paths relative to state_dir (not process cwd)
354
- if not os.path.isabs(fl_path):
355
- fl_path = os.path.join(state_dir, fl_path)
356
-
357
- fl_path = os.path.normpath(fl_path)
358
- if os.path.isfile(fl_path):
359
- return load_json(fl_path)
360
-
361
- return None
362
-
363
-
364
- # Pipeline type configurations
365
- PIPELINE_CONFIG = {
366
- "feature": {"subdir": "", "items_key": "features", "id_label": "feature_id"},
367
- "bugfix": {"subdir": "", "items_key": "bugs", "id_label": "bug_id"},
368
- "refactor": {"subdir": "", "items_key": "refactors", "id_label": "refactor_id"},
369
- }
370
-
371
-
372
- def check_item(item_id, state_dir, items_subdir, items_key, task_list_data, max_retries, stale_threshold):
373
- """Run all stuck-detection checks on a single item.
374
-
375
- Returns a list of stuck-report dicts (may be empty if item is not stuck).
376
- """
377
- item_dir = os.path.join(state_dir, items_subdir, item_id)
378
- status_path = os.path.join(item_dir, "status.json")
379
- item_status = load_json(status_path)
380
-
381
- if item_status is None:
382
- # Create a minimal runtime dict so checks can proceed
383
- item_status = {}
384
-
385
- # Look up item status from task list (single source of truth)
386
- task_list_status = None
387
- if task_list_data:
388
- for item in task_list_data.get(items_key, []):
389
- if isinstance(item, dict) and item.get("id") == item_id:
390
- task_list_status = item.get("status", "pending")
391
- break
392
-
393
- reports = []
394
-
395
- # Check 1: Max retries exceeded
396
- result = check_max_retries(item_status, max_retries)
397
- if result is not None:
398
- reports.append(result)
399
-
400
- # Check 2: Stuck at same checkpoint
401
- result = check_stuck_checkpoint(item_dir)
402
- if result is not None:
403
- reports.append(result)
404
-
405
- # Check 3: Stale heartbeat
406
- result = check_stale_heartbeat(item_id, item_status, state_dir, items_subdir, stale_threshold, task_list_status)
407
- if result is not None:
408
- reports.append(result)
409
-
410
- # Check 4: Dependency deadlock
411
- result = check_dependency_deadlock(item_id, task_list_data, state_dir, items_subdir, items_key)
412
- if result is not None:
413
- reports.append(result)
414
-
415
- return reports
416
-
417
-
418
- def resolve_pipeline_type(args):
419
- """Resolve pipeline type, item ID, and task list path from args.
420
-
421
- Supports both new generic args and legacy feature-only args.
422
- Returns (pipeline_type, item_id, task_list_path).
423
- """
424
- # Explicit --pipeline-type takes precedence
425
- if args.pipeline_type:
426
- ptype = args.pipeline_type
427
- item_id = args.item_id
428
- task_list = args.task_list
429
- # Legacy / shorthand: --feature-id, --bug-id, --refactor-id
430
- elif args.feature_id:
431
- ptype = "feature"
432
- item_id = args.feature_id
433
- task_list = args.feature_list or args.task_list
434
- elif args.bug_id:
435
- ptype = "bugfix"
436
- item_id = args.bug_id
437
- task_list = args.bug_list or args.task_list
438
- elif args.refactor_id:
439
- ptype = "refactor"
440
- item_id = args.refactor_id
441
- task_list = args.refactor_list or args.task_list
442
- # Legacy: --feature-list without --feature-id means check all features
443
- elif args.feature_list:
444
- ptype = "feature"
445
- item_id = None
446
- task_list = args.feature_list
447
- elif args.bug_list:
448
- ptype = "bugfix"
449
- item_id = None
450
- task_list = args.bug_list
451
- elif args.refactor_list:
452
- ptype = "refactor"
453
- item_id = None
454
- task_list = args.refactor_list
455
- else:
456
- # Default to feature for backward compat
457
- ptype = "feature"
458
- item_id = None
459
- task_list = args.task_list
460
-
461
- return ptype, item_id, task_list
462
-
463
-
464
- def main():
465
- args = parse_args()
466
- state_dir = os.path.abspath(args.state_dir)
467
-
468
- if not os.path.isdir(state_dir):
469
- error_out("State directory not found: {}".format(state_dir), code=2)
470
-
471
- # Resolve pipeline type and parameters
472
- ptype, item_id, task_list_path = resolve_pipeline_type(args)
473
- config = PIPELINE_CONFIG[ptype]
474
- items_subdir = config["subdir"]
475
- items_key = config["items_key"]
476
- id_label = config["id_label"]
477
-
478
- # Determine which items to check
479
- if item_id:
480
- item_ids = [item_id]
481
- else:
482
- item_ids = discover_item_ids(state_dir, items_subdir)
483
-
484
- # Load task list for dependency checks
485
- if task_list_path:
486
- task_list_data = load_json(os.path.abspath(task_list_path))
487
- else:
488
- task_list_data = find_task_list(state_dir)
489
-
490
- stuck_items = []
491
- for iid in item_ids:
492
- reports = check_item(
493
- iid, state_dir, items_subdir, items_key,
494
- task_list_data, args.max_retries, args.stale_threshold
495
- )
496
- for report in reports:
497
- stuck_items.append(
498
- {
499
- id_label: iid,
500
- "reason": report["reason"],
501
- "details": report["details"],
502
- "suggestion": report["suggestion"],
503
- }
504
- )
505
-
506
- output = {
507
- "pipeline_type": ptype,
508
- "stuck_items": stuck_items,
509
- "total_checked": len(item_ids),
510
- "stuck_count": len(stuck_items),
511
- }
512
-
513
- print(json.dumps(output, indent=2, ensure_ascii=False))
514
-
515
- if stuck_items:
516
- sys.exit(1)
517
- else:
518
- sys.exit(0)
519
-
520
-
521
- if __name__ == "__main__":
522
- try:
523
- main()
524
- except KeyboardInterrupt:
525
- error_out("detect-stuck interrupted", code=130)
526
- except SystemExit:
527
- raise
528
- except Exception as exc:
529
- LOGGER.exception("Unhandled exception in detect-stuck")
530
- error_out("detect-stuck failed: {}".format(str(exc)), code=1)