create-quiver 0.10.0 → 0.12.1

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 (242) hide show
  1. package/BACKLOG.md +16 -17
  2. package/CHANGELOG.md +78 -0
  3. package/README.md +208 -41
  4. package/README_FOR_AI.md +50 -24
  5. package/ROADMAP.md +34 -11
  6. package/docs/AI_CONTEXT.md.template +2 -0
  7. package/docs/AI_ONBOARDING_PROMPT.md.template +31 -18
  8. package/docs/COMMANDS.md.template +90 -16
  9. package/docs/CONTEXTO.md.template +2 -0
  10. package/docs/DECISIONS.md.template +1 -0
  11. package/docs/INDEX.md.template +20 -18
  12. package/docs/STATUS.md.template +6 -1
  13. package/docs/SUPPORT_MATRIX.md.template +2 -2
  14. package/docs/TROUBLESHOOTING.md.template +50 -0
  15. package/docs/WORKFLOW.md.template +27 -17
  16. package/package.json +27 -4
  17. package/package.template.json +13 -1
  18. package/scripts/init-docs.sh +11 -4
  19. package/scripts/package-quiver.sh +18 -2
  20. package/specs/quiver-v22-guided-ai-workflow/EVIDENCE_REPORT.md +58 -0
  21. package/specs/quiver-v22-guided-ai-workflow/EXECUTION_PLAN.md +88 -0
  22. package/specs/quiver-v22-guided-ai-workflow/SPEC.md +228 -0
  23. package/specs/quiver-v22-guided-ai-workflow/STATUS.md +42 -0
  24. package/specs/quiver-v22-guided-ai-workflow/pr.md +104 -0
  25. package/specs/quiver-v22-guided-ai-workflow/slices/slice-00-spec-foundation/CLOSURE_BRIEF.md +35 -0
  26. package/specs/quiver-v22-guided-ai-workflow/slices/slice-00-spec-foundation/EXECUTION_BRIEF.md +61 -0
  27. package/specs/quiver-v22-guided-ai-workflow/slices/slice-00-spec-foundation/slice.json +51 -0
  28. package/specs/quiver-v22-guided-ai-workflow/slices/slice-01-docs-source-of-truth-sync/CLOSURE_BRIEF.md +31 -0
  29. package/specs/quiver-v22-guided-ai-workflow/slices/slice-01-docs-source-of-truth-sync/EXECUTION_BRIEF.md +58 -0
  30. package/specs/quiver-v22-guided-ai-workflow/slices/slice-01-docs-source-of-truth-sync/slice.json +55 -0
  31. package/specs/quiver-v22-guided-ai-workflow/slices/slice-02-prepare-command-diagnostics/CLOSURE_BRIEF.md +30 -0
  32. package/specs/quiver-v22-guided-ai-workflow/slices/slice-02-prepare-command-diagnostics/EXECUTION_BRIEF.md +57 -0
  33. package/specs/quiver-v22-guided-ai-workflow/slices/slice-02-prepare-command-diagnostics/slice.json +57 -0
  34. package/specs/quiver-v22-guided-ai-workflow/slices/slice-03-context-doc-refresh/CLOSURE_BRIEF.md +32 -0
  35. package/specs/quiver-v22-guided-ai-workflow/slices/slice-03-context-doc-refresh/EXECUTION_BRIEF.md +56 -0
  36. package/specs/quiver-v22-guided-ai-workflow/slices/slice-03-context-doc-refresh/slice.json +56 -0
  37. package/specs/quiver-v22-guided-ai-workflow/slices/slice-04-planner-approval-state/CLOSURE_BRIEF.md +33 -0
  38. package/specs/quiver-v22-guided-ai-workflow/slices/slice-04-planner-approval-state/EXECUTION_BRIEF.md +56 -0
  39. package/specs/quiver-v22-guided-ai-workflow/slices/slice-04-planner-approval-state/slice.json +58 -0
  40. package/specs/quiver-v22-guided-ai-workflow/slices/slice-05-spec-worktree-lifecycle/CLOSURE_BRIEF.md +32 -0
  41. package/specs/quiver-v22-guided-ai-workflow/slices/slice-05-spec-worktree-lifecycle/EXECUTION_BRIEF.md +56 -0
  42. package/specs/quiver-v22-guided-ai-workflow/slices/slice-05-spec-worktree-lifecycle/slice.json +54 -0
  43. package/specs/quiver-v22-guided-ai-workflow/slices/slice-06-executor-commit-recovery/CLOSURE_BRIEF.md +32 -0
  44. package/specs/quiver-v22-guided-ai-workflow/slices/slice-06-executor-commit-recovery/EXECUTION_BRIEF.md +58 -0
  45. package/specs/quiver-v22-guided-ai-workflow/slices/slice-06-executor-commit-recovery/slice.json +57 -0
  46. package/specs/quiver-v22-guided-ai-workflow/slices/slice-07-execution-waves-delegation/CLOSURE_BRIEF.md +32 -0
  47. package/specs/quiver-v22-guided-ai-workflow/slices/slice-07-execution-waves-delegation/EXECUTION_BRIEF.md +58 -0
  48. package/specs/quiver-v22-guided-ai-workflow/slices/slice-07-execution-waves-delegation/slice.json +55 -0
  49. package/specs/quiver-v22-guided-ai-workflow/slices/slice-08-pr-create-gh-ssh/CLOSURE_BRIEF.md +32 -0
  50. package/specs/quiver-v22-guided-ai-workflow/slices/slice-08-pr-create-gh-ssh/EXECUTION_BRIEF.md +58 -0
  51. package/specs/quiver-v22-guided-ai-workflow/slices/slice-08-pr-create-gh-ssh/slice.json +53 -0
  52. package/specs/quiver-v22-guided-ai-workflow/slices/slice-09-post-merge-cleanup-release-safety/CLOSURE_BRIEF.md +33 -0
  53. package/specs/quiver-v22-guided-ai-workflow/slices/slice-09-post-merge-cleanup-release-safety/EXECUTION_BRIEF.md +59 -0
  54. package/specs/quiver-v22-guided-ai-workflow/slices/slice-09-post-merge-cleanup-release-safety/slice.json +59 -0
  55. package/specs/quiver-v22-guided-ai-workflow/slices/slice-10-docs-smokes-release-readiness/CLOSURE_BRIEF.md +34 -0
  56. package/specs/quiver-v22-guided-ai-workflow/slices/slice-10-docs-smokes-release-readiness/EXECUTION_BRIEF.md +58 -0
  57. package/specs/quiver-v22-guided-ai-workflow/slices/slice-10-docs-smokes-release-readiness/slice.json +60 -0
  58. package/specs/quiver-v23-guided-flow-productization/EVIDENCE_REPORT.md +80 -0
  59. package/specs/quiver-v23-guided-flow-productization/EXECUTION_PLAN.md +80 -0
  60. package/specs/quiver-v23-guided-flow-productization/SPEC.md +203 -0
  61. package/specs/quiver-v23-guided-flow-productization/STATUS.md +39 -0
  62. package/specs/quiver-v23-guided-flow-productization/pr.md +119 -0
  63. package/specs/quiver-v23-guided-flow-productization/slices/slice-00-spec-foundation/CLOSURE_BRIEF.md +30 -0
  64. package/specs/quiver-v23-guided-flow-productization/slices/slice-00-spec-foundation/EXECUTION_BRIEF.md +61 -0
  65. package/specs/quiver-v23-guided-flow-productization/slices/slice-00-spec-foundation/slice.json +51 -0
  66. package/specs/quiver-v23-guided-flow-productization/slices/slice-01-short-command-and-flow-entrypoint/CLOSURE_BRIEF.md +33 -0
  67. package/specs/quiver-v23-guided-flow-productization/slices/slice-01-short-command-and-flow-entrypoint/EXECUTION_BRIEF.md +35 -0
  68. package/specs/quiver-v23-guided-flow-productization/slices/slice-01-short-command-and-flow-entrypoint/slice.json +56 -0
  69. package/specs/quiver-v23-guided-flow-productization/slices/slice-02-flow-status-wizard/CLOSURE_BRIEF.md +31 -0
  70. package/specs/quiver-v23-guided-flow-productization/slices/slice-02-flow-status-wizard/EXECUTION_BRIEF.md +29 -0
  71. package/specs/quiver-v23-guided-flow-productization/slices/slice-02-flow-status-wizard/slice.json +55 -0
  72. package/specs/quiver-v23-guided-flow-productization/slices/slice-03-agent-profiles/CLOSURE_BRIEF.md +33 -0
  73. package/specs/quiver-v23-guided-flow-productization/slices/slice-03-agent-profiles/EXECUTION_BRIEF.md +29 -0
  74. package/specs/quiver-v23-guided-flow-productization/slices/slice-03-agent-profiles/slice.json +54 -0
  75. package/specs/quiver-v23-guided-flow-productization/slices/slice-04-context-preparation-onboarding/CLOSURE_BRIEF.md +32 -0
  76. package/specs/quiver-v23-guided-flow-productization/slices/slice-04-context-preparation-onboarding/EXECUTION_BRIEF.md +30 -0
  77. package/specs/quiver-v23-guided-flow-productization/slices/slice-04-context-preparation-onboarding/slice.json +59 -0
  78. package/specs/quiver-v23-guided-flow-productization/slices/slice-05-planner-iteration-history/CLOSURE_BRIEF.md +31 -0
  79. package/specs/quiver-v23-guided-flow-productization/slices/slice-05-planner-iteration-history/EXECUTION_BRIEF.md +29 -0
  80. package/specs/quiver-v23-guided-flow-productization/slices/slice-05-planner-iteration-history/slice.json +53 -0
  81. package/specs/quiver-v23-guided-flow-productization/slices/slice-06-production-plan-review/CLOSURE_BRIEF.md +33 -0
  82. package/specs/quiver-v23-guided-flow-productization/slices/slice-06-production-plan-review/EXECUTION_BRIEF.md +30 -0
  83. package/specs/quiver-v23-guided-flow-productization/slices/slice-06-production-plan-review/slice.json +54 -0
  84. package/specs/quiver-v23-guided-flow-productization/slices/slice-07-spec-create-experience/CLOSURE_BRIEF.md +33 -0
  85. package/specs/quiver-v23-guided-flow-productization/slices/slice-07-spec-create-experience/EXECUTION_BRIEF.md +30 -0
  86. package/specs/quiver-v23-guided-flow-productization/slices/slice-07-spec-create-experience/slice.json +55 -0
  87. package/specs/quiver-v23-guided-flow-productization/slices/slice-08-executor-prompt-generation/CLOSURE_BRIEF.md +32 -0
  88. package/specs/quiver-v23-guided-flow-productization/slices/slice-08-executor-prompt-generation/EXECUTION_BRIEF.md +30 -0
  89. package/specs/quiver-v23-guided-flow-productization/slices/slice-08-executor-prompt-generation/slice.json +55 -0
  90. package/specs/quiver-v23-guided-flow-productization/slices/slice-09-delegated-slice-execution/CLOSURE_BRIEF.md +33 -0
  91. package/specs/quiver-v23-guided-flow-productization/slices/slice-09-delegated-slice-execution/EXECUTION_BRIEF.md +34 -0
  92. package/specs/quiver-v23-guided-flow-productization/slices/slice-09-delegated-slice-execution/slice.json +57 -0
  93. package/specs/quiver-v23-guided-flow-productization/slices/slice-10-docs-smokes-release-readiness/CLOSURE_BRIEF.md +33 -0
  94. package/specs/quiver-v23-guided-flow-productization/slices/slice-10-docs-smokes-release-readiness/EXECUTION_BRIEF.md +32 -0
  95. package/specs/quiver-v23-guided-flow-productization/slices/slice-10-docs-smokes-release-readiness/slice.json +63 -0
  96. package/specs/quiver-v24-dx-onboarding-hardening/EVIDENCE_REPORT.md +55 -0
  97. package/specs/quiver-v24-dx-onboarding-hardening/EXECUTION_PLAN.md +43 -0
  98. package/specs/quiver-v24-dx-onboarding-hardening/SPEC.md +149 -0
  99. package/specs/quiver-v24-dx-onboarding-hardening/STATUS.md +31 -0
  100. package/specs/quiver-v24-dx-onboarding-hardening/pr.md +76 -0
  101. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-00-spec-foundation/CLOSURE_BRIEF.md +31 -0
  102. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-00-spec-foundation/EXECUTION_BRIEF.md +52 -0
  103. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-00-spec-foundation/slice.json +51 -0
  104. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-01-init-template-hygiene/CLOSURE_BRIEF.md +38 -0
  105. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-01-init-template-hygiene/EXECUTION_BRIEF.md +53 -0
  106. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-01-init-template-hygiene/slice.json +55 -0
  107. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-02-cli-command-routing-version-errors/CLOSURE_BRIEF.md +33 -0
  108. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-02-cli-command-routing-version-errors/EXECUTION_BRIEF.md +50 -0
  109. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-02-cli-command-routing-version-errors/slice.json +52 -0
  110. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-03-doctor-fix-doc-link-checks/CLOSURE_BRIEF.md +33 -0
  111. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-03-doctor-fix-doc-link-checks/EXECUTION_BRIEF.md +50 -0
  112. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-03-doctor-fix-doc-link-checks/slice.json +53 -0
  113. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-04-prepare-output-ai-context-drafts/CLOSURE_BRIEF.md +33 -0
  114. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-04-prepare-output-ai-context-drafts/EXECUTION_BRIEF.md +50 -0
  115. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-04-prepare-output-ai-context-drafts/slice.json +70 -0
  116. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-05-local-slice-validation-base-guidance/CLOSURE_BRIEF.md +36 -0
  117. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-05-local-slice-validation-base-guidance/EXECUTION_BRIEF.md +49 -0
  118. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-05-local-slice-validation-base-guidance/slice.json +52 -0
  119. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-06-plan-graph-next-history-views/CLOSURE_BRIEF.md +43 -0
  120. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-06-plan-graph-next-history-views/EXECUTION_BRIEF.md +53 -0
  121. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-06-plan-graph-next-history-views/slice.json +60 -0
  122. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-07-analyzer-command-map-hardening/CLOSURE_BRIEF.md +32 -0
  123. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-07-analyzer-command-map-hardening/EXECUTION_BRIEF.md +50 -0
  124. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-07-analyzer-command-map-hardening/slice.json +51 -0
  125. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-08-evidence-run-command/CLOSURE_BRIEF.md +34 -0
  126. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-08-evidence-run-command/EXECUTION_BRIEF.md +52 -0
  127. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-08-evidence-run-command/slice.json +54 -0
  128. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-09-spec-viewer-demo-scaffolding/CLOSURE_BRIEF.md +34 -0
  129. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-09-spec-viewer-demo-scaffolding/EXECUTION_BRIEF.md +51 -0
  130. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-09-spec-viewer-demo-scaffolding/slice.json +59 -0
  131. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-10-docs-smokes-release-readiness/CLOSURE_BRIEF.md +33 -0
  132. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-10-docs-smokes-release-readiness/EXECUTION_BRIEF.md +54 -0
  133. package/specs/quiver-v24-dx-onboarding-hardening/slices/slice-10-docs-smokes-release-readiness/slice.json +76 -0
  134. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/EVIDENCE_REPORT.md +293 -0
  135. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/EXECUTION_PLAN.md +58 -0
  136. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/SPEC.md +242 -0
  137. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/STATUS.md +35 -0
  138. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/pr.md +77 -0
  139. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-00-spec-foundation/CLOSURE_BRIEF.md +34 -0
  140. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-00-spec-foundation/EXECUTION_BRIEF.md +52 -0
  141. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-00-spec-foundation/slice.json +52 -0
  142. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-01-cli-contract-compatibility/CLOSURE_BRIEF.md +36 -0
  143. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-01-cli-contract-compatibility/EXECUTION_BRIEF.md +52 -0
  144. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-01-cli-contract-compatibility/slice.json +56 -0
  145. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-02-run-state-phase-locks/CLOSURE_BRIEF.md +43 -0
  146. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-02-run-state-phase-locks/EXECUTION_BRIEF.md +54 -0
  147. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-02-run-state-phase-locks/slice.json +52 -0
  148. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-03-safe-ai-onboarding-docs/CLOSURE_BRIEF.md +35 -0
  149. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-03-safe-ai-onboarding-docs/EXECUTION_BRIEF.md +53 -0
  150. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-03-safe-ai-onboarding-docs/slice.json +54 -0
  151. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-04-agent-profiles-adapters/CLOSURE_BRIEF.md +34 -0
  152. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-04-agent-profiles-adapters/EXECUTION_BRIEF.md +54 -0
  153. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-04-agent-profiles-adapters/slice.json +52 -0
  154. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-05-approval-gates/CLOSURE_BRIEF.md +34 -0
  155. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-05-approval-gates/EXECUTION_BRIEF.md +54 -0
  156. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-05-approval-gates/slice.json +53 -0
  157. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-06-spec-slice-generator/CLOSURE_BRIEF.md +33 -0
  158. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-06-spec-slice-generator/EXECUTION_BRIEF.md +56 -0
  159. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-06-spec-slice-generator/slice.json +55 -0
  160. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-07-slice-execution-planner/CLOSURE_BRIEF.md +33 -0
  161. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-07-slice-execution-planner/EXECUTION_BRIEF.md +54 -0
  162. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-07-slice-execution-planner/slice.json +52 -0
  163. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-08-controlled-slice-execution/CLOSURE_BRIEF.md +39 -0
  164. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-08-controlled-slice-execution/EXECUTION_BRIEF.md +56 -0
  165. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-08-controlled-slice-execution/slice.json +53 -0
  166. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-09-git-worktree-pr-lifecycle/CLOSURE_BRIEF.md +38 -0
  167. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-09-git-worktree-pr-lifecycle/EXECUTION_BRIEF.md +57 -0
  168. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-09-git-worktree-pr-lifecycle/slice.json +52 -0
  169. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-10-validation-errors-fixtures/CLOSURE_BRIEF.md +39 -0
  170. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-10-validation-errors-fixtures/EXECUTION_BRIEF.md +55 -0
  171. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-10-validation-errors-fixtures/slice.json +56 -0
  172. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-11-export-dashboard-migration/CLOSURE_BRIEF.md +36 -0
  173. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-11-export-dashboard-migration/EXECUTION_BRIEF.md +54 -0
  174. package/specs/quiver-v25-ai-first-lifecycle-orchestrator/slices/slice-11-export-dashboard-migration/slice.json +53 -0
  175. package/specs/quiver-v26-0121-smoke-hardening/EVIDENCE_REPORT.md +208 -0
  176. package/specs/quiver-v26-0121-smoke-hardening/EXECUTION_PLAN.md +57 -0
  177. package/specs/quiver-v26-0121-smoke-hardening/SPEC.md +137 -0
  178. package/specs/quiver-v26-0121-smoke-hardening/STATUS.md +32 -0
  179. package/specs/quiver-v26-0121-smoke-hardening/pr.md +96 -0
  180. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-00-docs-foundation/CLOSURE_BRIEF.md +35 -0
  181. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-00-docs-foundation/EXECUTION_BRIEF.md +55 -0
  182. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-00-docs-foundation/slice.json +73 -0
  183. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-01-cli-help-version-contract/CLOSURE_BRIEF.md +38 -0
  184. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-01-cli-help-version-contract/EXECUTION_BRIEF.md +51 -0
  185. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-01-cli-help-version-contract/slice.json +76 -0
  186. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-02-init-doc-links-and-flow-guidance/CLOSURE_BRIEF.md +37 -0
  187. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-02-init-doc-links-and-flow-guidance/EXECUTION_BRIEF.md +52 -0
  188. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-02-init-doc-links-and-flow-guidance/slice.json +75 -0
  189. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-03-ai-approval-review-consistency/CLOSURE_BRIEF.md +37 -0
  190. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-03-ai-approval-review-consistency/EXECUTION_BRIEF.md +53 -0
  191. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-03-ai-approval-review-consistency/slice.json +77 -0
  192. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-04-local-validation-brief-contracts/CLOSURE_BRIEF.md +35 -0
  193. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-04-local-validation-brief-contracts/EXECUTION_BRIEF.md +52 -0
  194. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-04-local-validation-brief-contracts/slice.json +77 -0
  195. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-05-demo-scaffold-readiness/CLOSURE_BRIEF.md +34 -0
  196. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-05-demo-scaffold-readiness/EXECUTION_BRIEF.md +54 -0
  197. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-05-demo-scaffold-readiness/slice.json +84 -0
  198. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-06-plan-graph-scope-performance/CLOSURE_BRIEF.md +35 -0
  199. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-06-plan-graph-scope-performance/EXECUTION_BRIEF.md +53 -0
  200. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-06-plan-graph-scope-performance/slice.json +82 -0
  201. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-07-smoke-release-readiness/CLOSURE_BRIEF.md +35 -0
  202. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-07-smoke-release-readiness/EXECUTION_BRIEF.md +55 -0
  203. package/specs/quiver-v26-0121-smoke-hardening/slices/slice-07-smoke-release-readiness/slice.json +92 -0
  204. package/src/create-quiver/commands/ai.js +1060 -37
  205. package/src/create-quiver/commands/demo.js +22 -0
  206. package/src/create-quiver/commands/evidence.js +37 -0
  207. package/src/create-quiver/commands/flow.js +562 -0
  208. package/src/create-quiver/commands/graph.js +19 -4
  209. package/src/create-quiver/commands/next.js +28 -0
  210. package/src/create-quiver/commands/plan.js +9 -6
  211. package/src/create-quiver/commands/prepare.js +236 -0
  212. package/src/create-quiver/commands/spec.js +133 -0
  213. package/src/create-quiver/index.js +1010 -31
  214. package/src/create-quiver/lib/actionable-error.js +27 -0
  215. package/src/create-quiver/lib/agent-profiles.js +148 -0
  216. package/src/create-quiver/lib/ai/context-packs.js +16 -0
  217. package/src/create-quiver/lib/ai/execution-plan.js +377 -11
  218. package/src/create-quiver/lib/ai/executor.js +633 -24
  219. package/src/create-quiver/lib/ai/export-state.js +534 -0
  220. package/src/create-quiver/lib/ai/github.js +279 -0
  221. package/src/create-quiver/lib/ai/onboarding-template.js +578 -0
  222. package/src/create-quiver/lib/ai/plan-review.js +286 -0
  223. package/src/create-quiver/lib/ai/providers.js +5 -3
  224. package/src/create-quiver/lib/ai/run-state.js +414 -0
  225. package/src/create-quiver/lib/ai/safety.js +5 -0
  226. package/src/create-quiver/lib/ai/spec-generator.js +12 -0
  227. package/src/create-quiver/lib/ai/spec-templates.js +80 -11
  228. package/src/create-quiver/lib/approvals.js +369 -0
  229. package/src/create-quiver/lib/demo.js +832 -0
  230. package/src/create-quiver/lib/doctor.js +309 -0
  231. package/src/create-quiver/lib/evidence.js +115 -0
  232. package/src/create-quiver/lib/handoff.js +81 -12
  233. package/src/create-quiver/lib/init-docs.js +302 -17
  234. package/src/create-quiver/lib/init-layout.js +34 -1
  235. package/src/create-quiver/lib/json.js +53 -3
  236. package/src/create-quiver/lib/lifecycle.js +6 -0
  237. package/src/create-quiver/lib/package-safety.js +117 -0
  238. package/src/create-quiver/lib/readiness.js +103 -21
  239. package/src/create-quiver/lib/scope.js +50 -7
  240. package/src/create-quiver/lib/slice-graph.js +138 -37
  241. package/src/create-quiver/lib/slice.js +14 -9
  242. package/src/create-quiver/lib/spec-worktrees.js +363 -0
@@ -0,0 +1,363 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ const {
5
+ currentBranch,
6
+ fetchRemote,
7
+ hasLocalBranch,
8
+ hasRemoteBranch,
9
+ isCleanWorktree,
10
+ lsRemoteHeads,
11
+ mergeBaseIsAncestor,
12
+ runGit,
13
+ statusPorcelain,
14
+ worktreeAdd,
15
+ worktreeList,
16
+ worktreePrune,
17
+ worktreeRemove,
18
+ } = require('./git');
19
+ const { parseJsonWithComments } = require('./json');
20
+ const { safeBranchName, worktreesRootForRepo } = require('./slice');
21
+
22
+ function formatError(message) {
23
+ return `create-quiver: ${message}`;
24
+ }
25
+
26
+ function toPosix(relativePath) {
27
+ return relativePath.split(path.sep).join('/');
28
+ }
29
+
30
+ function findSpecDir(repoRoot, specInput) {
31
+ const value = String(specInput || '').trim();
32
+ if (!value || value === '.') {
33
+ throw new Error(formatError('missing spec directory. Use: npx create-quiver spec status specs/<spec-slug>'));
34
+ }
35
+
36
+ const resolved = path.resolve(repoRoot, value);
37
+ if (!fs.existsSync(path.join(resolved, 'SPEC.md'))) {
38
+ throw new Error(formatError(`missing SPEC.md in ${toPosix(path.relative(repoRoot, resolved))}`));
39
+ }
40
+
41
+ return resolved;
42
+ }
43
+
44
+ function listSpecSlices(specDir) {
45
+ const slicesDir = path.join(specDir, 'slices');
46
+ if (!fs.existsSync(slicesDir)) {
47
+ return [];
48
+ }
49
+
50
+ return fs.readdirSync(slicesDir, { withFileTypes: true })
51
+ .filter((entry) => entry.isDirectory())
52
+ .map((entry) => {
53
+ const slicePath = path.join(slicesDir, entry.name, 'slice.json');
54
+ if (!fs.existsSync(slicePath)) {
55
+ return null;
56
+ }
57
+ const json = parseJsonWithComments(fs.readFileSync(slicePath, 'utf8'));
58
+ return {
59
+ id: json.slice_id || entry.name,
60
+ path: slicePath,
61
+ status: String(json.status || 'draft'),
62
+ title: json.title || json.slice_id || entry.name,
63
+ };
64
+ })
65
+ .filter(Boolean)
66
+ .sort((left, right) => left.id.localeCompare(right.id));
67
+ }
68
+
69
+ function resolveSpecIdentity(repoRoot, specDir) {
70
+ const relativeSpecDir = toPosix(path.relative(repoRoot, specDir));
71
+ const specSlug = path.basename(specDir);
72
+ const branchName = `feature/${specSlug}`;
73
+ return {
74
+ branchName,
75
+ relativeSpecDir,
76
+ specSlug,
77
+ worktreePath: path.join(worktreesRootForRepo(repoRoot, branchName), safeBranchName(branchName)),
78
+ };
79
+ }
80
+
81
+ function findExistingWorktree(repoRoot, branchName) {
82
+ for (const entry of worktreeList(repoRoot)) {
83
+ const branchRef = entry.branch || '';
84
+ if (branchRef.replace('refs/heads/', '') === branchName) {
85
+ return entry.worktree;
86
+ }
87
+ }
88
+ return '';
89
+ }
90
+
91
+ function resolveBaseRef(repoRoot, preferred = '') {
92
+ const candidates = [preferred, 'main', 'develop'].filter(Boolean);
93
+ for (const candidate of candidates) {
94
+ if (hasLocalBranch(repoRoot, candidate)) {
95
+ return candidate;
96
+ }
97
+ if (hasRemoteBranch(repoRoot, candidate)) {
98
+ return `origin/${candidate}`;
99
+ }
100
+ if (lsRemoteHeads(repoRoot, candidate)) {
101
+ return `origin/${candidate}`;
102
+ }
103
+ }
104
+ throw new Error(formatError('missing base branch. Expected local or remote main/develop.'));
105
+ }
106
+
107
+ function resolveMergedBaseRef(repoRoot, preferred = '', remote = 'origin') {
108
+ const candidates = [preferred, 'main', 'develop'].filter(Boolean);
109
+ for (const candidate of candidates) {
110
+ if (hasRemoteBranch(repoRoot, candidate, remote)) {
111
+ return {
112
+ baseBranch: candidate,
113
+ baseRef: `${remote}/${candidate}`,
114
+ remote,
115
+ };
116
+ }
117
+ if (hasLocalBranch(repoRoot, candidate)) {
118
+ return {
119
+ baseBranch: candidate,
120
+ baseRef: candidate,
121
+ remote: '',
122
+ };
123
+ }
124
+ }
125
+ throw new Error(formatError('missing merge base branch. Expected local or remote main/develop.'));
126
+ }
127
+
128
+ function buildSpecStatus(repoRoot, specInput) {
129
+ const specDir = findSpecDir(repoRoot, specInput);
130
+ const identity = resolveSpecIdentity(repoRoot, specDir);
131
+ const slices = listSpecSlices(specDir);
132
+ const slice00 = slices.find((slice) => slice.id.startsWith('slice-00')) || null;
133
+ const pendingSlices = slices.filter((slice) => slice.status !== 'completed');
134
+ const laterSlicesBlocked = !slice00 || slice00.status !== 'completed';
135
+ const existingWorktree = findExistingWorktree(repoRoot, identity.branchName);
136
+ const worktreeDirty = existingWorktree ? !isCleanWorktree(existingWorktree) : false;
137
+
138
+ return {
139
+ ...identity,
140
+ existingWorktree,
141
+ laterSlicesBlocked,
142
+ pendingSlices,
143
+ slice00,
144
+ slices,
145
+ specDir,
146
+ worktreeDirty,
147
+ };
148
+ }
149
+
150
+ function formatSpecStatus(status) {
151
+ const lines = [
152
+ 'Spec worktree status',
153
+ `Spec: ${status.relativeSpecDir}`,
154
+ `Branch: ${status.branchName}`,
155
+ `Worktree: ${status.existingWorktree || status.worktreePath}`,
156
+ `Worktree dirty: ${status.worktreeDirty ? 'yes' : 'no'}`,
157
+ `slice-00: ${status.slice00 ? status.slice00.status : 'missing'}`,
158
+ `Later slices blocked: ${status.laterSlicesBlocked ? 'yes' : 'no'}`,
159
+ 'Pending slices:',
160
+ ];
161
+
162
+ if (status.pendingSlices.length === 0) {
163
+ lines.push('- none');
164
+ } else {
165
+ for (const slice of status.pendingSlices) {
166
+ lines.push(`- ${slice.id}: ${slice.status}`);
167
+ }
168
+ }
169
+
170
+ return `${lines.join('\n')}\n`;
171
+ }
172
+
173
+ function startSpecWorktree(repoRoot, specInput, options = {}) {
174
+ const specDir = findSpecDir(repoRoot, specInput);
175
+ const identity = resolveSpecIdentity(repoRoot, specDir);
176
+ const existingWorktree = findExistingWorktree(repoRoot, identity.branchName);
177
+ const slices = listSpecSlices(specDir);
178
+ const slice00 = slices.find((slice) => slice.id.startsWith('slice-00')) || null;
179
+ const baseRef = resolveBaseRef(repoRoot, options.baseBranch);
180
+
181
+ if (existingWorktree) {
182
+ if (!isCleanWorktree(existingWorktree)) {
183
+ throw new Error(formatError(`existing spec worktree is dirty: ${existingWorktree}`));
184
+ }
185
+ return {
186
+ ...identity,
187
+ baseRef,
188
+ dryRun: options.dryRun === true,
189
+ reused: true,
190
+ slice00,
191
+ worktreePath: existingWorktree,
192
+ };
193
+ }
194
+
195
+ if (fs.existsSync(identity.worktreePath)) {
196
+ throw new Error(formatError(`worktree path already exists and is not registered for ${identity.branchName}: ${identity.worktreePath}`));
197
+ }
198
+
199
+ if (!isCleanWorktree(repoRoot)) {
200
+ throw new Error(formatError('current checkout is not clean. Commit or stash before starting a spec worktree.'));
201
+ }
202
+
203
+ if (options.dryRun === true) {
204
+ return {
205
+ ...identity,
206
+ baseRef,
207
+ currentBranch: currentBranch(repoRoot),
208
+ dryRun: true,
209
+ reused: false,
210
+ slice00,
211
+ };
212
+ }
213
+
214
+ worktreePrune(repoRoot);
215
+ fs.mkdirSync(path.dirname(identity.worktreePath), { recursive: true });
216
+
217
+ if (hasLocalBranch(repoRoot, identity.branchName)) {
218
+ worktreeAdd(repoRoot, identity.worktreePath, identity.branchName);
219
+ } else {
220
+ worktreeAdd(repoRoot, identity.worktreePath, baseRef, { branch: identity.branchName });
221
+ }
222
+
223
+ return {
224
+ ...identity,
225
+ baseRef,
226
+ currentBranch: currentBranch(repoRoot),
227
+ dryRun: false,
228
+ reused: false,
229
+ slice00,
230
+ };
231
+ }
232
+
233
+ function formatSpecStartResult(result) {
234
+ return `${[
235
+ result.dryRun ? 'Spec worktree start dry-run' : 'Spec worktree ready',
236
+ `Branch: ${result.branchName}`,
237
+ `Base: ${result.baseRef}`,
238
+ `Worktree: ${result.worktreePath}`,
239
+ `Reused: ${result.reused ? 'yes' : 'no'}`,
240
+ `slice-00: ${result.slice00 ? result.slice00.status : 'missing'}`,
241
+ result.dryRun && !result.reused ? `Would create worktree: ${result.worktreePath}` : '',
242
+ ].filter(Boolean).join('\n')}\n`;
243
+ }
244
+
245
+ function closeSpecWorktree(repoRoot, specInput, options = {}) {
246
+ const specDir = findSpecDir(repoRoot, specInput);
247
+ const identity = resolveSpecIdentity(repoRoot, specDir);
248
+ const existingWorktree = findExistingWorktree(repoRoot, identity.branchName);
249
+ const discard = options.discard === true;
250
+ const dryRun = options.dryRun === true;
251
+ const force = options.force === true;
252
+ const remote = options.remote || 'origin';
253
+ const base = resolveMergedBaseRef(repoRoot, options.baseBranch, remote);
254
+
255
+ if (!existingWorktree) {
256
+ throw new Error(formatError(`missing spec worktree for branch ${identity.branchName}.`));
257
+ }
258
+
259
+ if (!discard && !isCleanWorktree(existingWorktree)) {
260
+ throw new Error(formatError(`spec worktree is dirty: ${existingWorktree}. Commit or stash before closing, or pass --discard intentionally.`));
261
+ }
262
+
263
+ if (!discard) {
264
+ const branch = currentBranch(repoRoot);
265
+ if (branch !== base.baseBranch) {
266
+ throw new Error(formatError(`spec close must run from ${base.baseBranch}. Current branch: ${branch || '(detached)'}.`));
267
+ }
268
+ if (statusPorcelain(repoRoot) !== '') {
269
+ throw new Error(formatError('main checkout is dirty. Commit or stash before closing the spec worktree.'));
270
+ }
271
+ if (base.remote) {
272
+ try {
273
+ fetchRemote(repoRoot, base.remote, [base.baseBranch]);
274
+ } catch {
275
+ // Local-only test repos and offline environments can still validate against the current remote ref.
276
+ }
277
+ }
278
+ if (hasLocalBranch(repoRoot, identity.branchName) && !mergeBaseIsAncestor(repoRoot, identity.branchName, base.baseRef)) {
279
+ throw new Error(formatError(`spec branch ${identity.branchName} is not merged into ${base.baseRef}. Merge the PR before cleanup, or pass --discard intentionally.`));
280
+ }
281
+ }
282
+
283
+ if (dryRun) {
284
+ return {
285
+ ...identity,
286
+ baseBranch: base.baseBranch,
287
+ baseRef: base.baseRef,
288
+ discarded: discard,
289
+ dryRun: true,
290
+ pulled: false,
291
+ remote: base.remote,
292
+ removed: false,
293
+ worktreePath: existingWorktree,
294
+ };
295
+ }
296
+
297
+ worktreeRemove(repoRoot, existingWorktree, force || discard);
298
+ if (!discard && base.remote) {
299
+ runGit(['pull', '--ff-only', remote, base.baseBranch], repoRoot);
300
+ }
301
+
302
+ return {
303
+ ...identity,
304
+ baseBranch: base.baseBranch,
305
+ baseRef: base.baseRef,
306
+ discarded: discard,
307
+ dryRun: false,
308
+ pulled: !discard && Boolean(base.remote),
309
+ remote: base.remote,
310
+ removed: true,
311
+ worktreePath: existingWorktree,
312
+ };
313
+ }
314
+
315
+ function formatSpecCloseResult(result) {
316
+ const lines = [
317
+ result.dryRun ? 'Spec close dry-run' : 'Spec worktree closed',
318
+ `Spec: ${result.relativeSpecDir}`,
319
+ `Branch: ${result.branchName}`,
320
+ `Base: ${result.baseRef}`,
321
+ `Worktree: ${result.worktreePath}`,
322
+ `Discard: ${result.discarded ? 'yes' : 'no'}`,
323
+ ];
324
+
325
+ if (result.dryRun) {
326
+ lines.push(`Would remove worktree: ${result.worktreePath}`);
327
+ if (!result.discarded && result.remote) {
328
+ lines.push(`Would pull: git pull --ff-only ${result.remote} ${result.baseBranch}`);
329
+ }
330
+ } else {
331
+ lines.push(`Removed worktree: ${result.removed ? 'yes' : 'no'}`);
332
+ lines.push(`Pulled main checkout: ${result.pulled ? 'yes' : 'no'}`);
333
+ }
334
+
335
+ return `${lines.join('\n')}\n`;
336
+ }
337
+
338
+ function ensureSpecSliceZeroComplete(repoRoot, specInput) {
339
+ const status = buildSpecStatus(repoRoot, specInput);
340
+ if (!status.slice00) {
341
+ throw new Error(formatError(`spec ${status.relativeSpecDir} requires slice-00 completed before starting later slices; slice-00 is missing.`));
342
+ }
343
+ if (status.slice00.status !== 'completed') {
344
+ throw new Error(formatError(`spec ${status.relativeSpecDir} requires slice-00 completed before starting later slices; current status: ${status.slice00.status}.`));
345
+ }
346
+ return status.slice00;
347
+ }
348
+
349
+ module.exports = {
350
+ buildSpecStatus,
351
+ closeSpecWorktree,
352
+ ensureSpecSliceZeroComplete,
353
+ findSpecDir,
354
+ findExistingWorktree,
355
+ formatSpecCloseResult,
356
+ formatSpecStartResult,
357
+ formatSpecStatus,
358
+ listSpecSlices,
359
+ resolveBaseRef,
360
+ resolveMergedBaseRef,
361
+ resolveSpecIdentity,
362
+ startSpecWorktree,
363
+ };