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
@@ -205,6 +205,57 @@ function writeFrontMatter(filePath, fields) {
205
205
  return nextContent;
206
206
  }
207
207
 
208
+ const ROOT_GITIGNORE_DEFAULTS = [
209
+ 'node_modules/',
210
+ '.DS_Store',
211
+ 'dist/',
212
+ 'coverage/',
213
+ ];
214
+
215
+ function normalizeGitignorePattern(line) {
216
+ const trimmed = line.trim();
217
+ if (!trimmed || trimmed.startsWith('#')) {
218
+ return trimmed;
219
+ }
220
+
221
+ return trimmed.replace(/\/+$/g, '');
222
+ }
223
+
224
+ function mergeLineList(existingText, defaults) {
225
+ const existingLines = existingText
226
+ .split(/\r?\n/)
227
+ .filter((line, index, lines) => line.length > 0 || index < lines.length - 1);
228
+ const seen = new Set(existingLines.map(normalizeGitignorePattern).filter(Boolean));
229
+ const nextLines = [...existingLines];
230
+
231
+ for (const line of defaults) {
232
+ const normalized = normalizeGitignorePattern(line);
233
+ if (!seen.has(normalized)) {
234
+ nextLines.push(line);
235
+ seen.add(normalized);
236
+ }
237
+ }
238
+
239
+ return `${nextLines.join('\n').replace(/\s+$/g, '')}\n`;
240
+ }
241
+
242
+ function mergeRootGitignore(projectRoot) {
243
+ const gitignorePath = path.join(projectRoot, '.gitignore');
244
+ const exists = fs.existsSync(gitignorePath);
245
+ const existingText = exists
246
+ ? fs.readFileSync(gitignorePath, 'utf8')
247
+ : '';
248
+
249
+ ensureDir(path.dirname(gitignorePath));
250
+ fs.writeFileSync(gitignorePath, mergeLineList(existingText, ROOT_GITIGNORE_DEFAULTS));
251
+ return exists ? 'merged' : 'created';
252
+ }
253
+
254
+ function resolvePackageName(projectRoot, options = {}) {
255
+ return options.projectSlug
256
+ || toProjectSlug(options.projectName || path.basename(projectRoot) || 'Quiver Project');
257
+ }
258
+
208
259
  function mergePackageJson(projectRoot, templateRoot, options = {}) {
209
260
  const packageTemplate = path.join(templateRoot, 'package.template.json');
210
261
  const packageJsonPath = path.join(projectRoot, 'package.json');
@@ -218,13 +269,17 @@ function mergePackageJson(projectRoot, templateRoot, options = {}) {
218
269
 
219
270
  if (!fs.existsSync(packageJsonPath)) {
220
271
  const template = JSON.parse(fs.readFileSync(packageTemplate, 'utf8'));
272
+ template.name = resolvePackageName(projectRoot, options);
221
273
  template.scripts = scripts;
222
274
  fs.writeFileSync(packageJsonPath, `${JSON.stringify(template, null, 2)}\n`);
223
275
  return 'created';
224
276
  }
225
277
 
226
278
  const existing = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
227
- const template = JSON.parse(fs.readFileSync(packageTemplate, 'utf8'));
279
+
280
+ if (typeof existing.name !== 'string' || existing.name.trim().length === 0) {
281
+ existing.name = resolvePackageName(projectRoot, options);
282
+ }
228
283
 
229
284
  existing.scripts = {
230
285
  ...(existing.scripts || {}),
@@ -259,16 +314,28 @@ npx create-quiver next
259
314
  Use \`AGENTS.md\` first, then \`docs/AI_CONTEXT.md\` and \`docs/AI_ONBOARDING_PROMPT.md\` for the working contract.
260
315
 
261
316
  \`\`\`bash
317
+ npm run quiver:prepare -- --dry-run
262
318
  npm run quiver:ai:onboard -- --dry-run
319
+ npm run quiver:ai:inspect
320
+ npm run quiver:ai:export -- --format json
321
+ npm run quiver:ai:specs
322
+ npm run quiver:ai:slices
323
+ npm run quiver:ai:trace
263
324
  npm run quiver:ai:plan -- --phase acceptance --input requirements.md --dry-run
264
- npm run quiver:ai:plan -- --phase technical-plan --input acceptance-approved.md --dry-run
265
- npm run quiver:ai:plan -- --phase spec --input technical-plan-approved.md --dry-run
325
+ npm run quiver:ai:revise -- --phase acceptance --input feedback.md --dry-run
326
+ npm run quiver:ai:approve -- --phase acceptance --version <n>
327
+ npm run quiver:ai:plan -- --phase technical-plan --dry-run
328
+ npm run quiver:ai:review-plan -- --dry-run
329
+ npm run quiver:ai:approve -- --phase technical-plan --version <n>
330
+ npm run quiver:spec:create -- --dry-run
266
331
  \`\`\`
267
332
 
268
333
  When a real spec exists, execute one approved slice at a time:
269
334
 
270
335
  \`\`\`bash
271
- npm run quiver:ai:execute-slice -- --slice specs/<spec-slug>/slices/<slice-id>/slice.json --dry-run
336
+ npm run quiver:ai:prompt-slice -- --slice specs/<spec-slug>/slices/<slice-id>/slice.json --dry-run
337
+ npm run quiver:ai:execute-slice -- --slice specs/<spec-slug>/slices/<slice-id>/slice.json --dry-run --commit
338
+ npm run quiver:ai:execute-plan -- --dry-run --commit --mode delegated
272
339
  \`\`\`
273
340
 
274
341
  ## Documentation
@@ -302,21 +369,28 @@ After \`analyze\`, use \`docs/PROJECT_MAP.md\` for the detected stack, package m
302
369
 
303
370
  ## AI-First Workflow
304
371
 
305
- Quiver keeps the visible contract small: start with \`README.md\`, \`AGENTS.md\`, and \`docs/\`. Specs and slices should be created only after a real requirement and an approved technical plan.
372
+ Quiver keeps the visible contract small: start with \`README.md\`, \`AGENTS.md\`, and \`docs/\`. Specs and slices should be created only after a real requirement and a reviewed, approved technical plan.
306
373
 
307
374
  Use dry-runs before spending model tokens:
308
375
 
309
376
  \`\`\`bash
377
+ npm run quiver:prepare -- --dry-run
310
378
  npm run quiver:ai:onboard -- --dry-run
311
379
  npm run quiver:ai:plan -- --phase acceptance --input requirements.md --dry-run
312
- npm run quiver:ai:plan -- --phase technical-plan --input acceptance-approved.md --dry-run
313
- npm run quiver:ai:plan -- --phase spec --input technical-plan-approved.md --dry-run
380
+ npm run quiver:ai:revise -- --phase acceptance --input feedback.md --dry-run
381
+ npm run quiver:ai:approve -- --phase acceptance --version <n>
382
+ npm run quiver:ai:plan -- --phase technical-plan --dry-run
383
+ npm run quiver:ai:review-plan -- --dry-run
384
+ npm run quiver:ai:approve -- --phase technical-plan --version <n>
385
+ npm run quiver:spec:create -- --dry-run
314
386
  \`\`\`
315
387
 
316
388
  When a real spec exists, execute one approved slice at a time:
317
389
 
318
390
  \`\`\`bash
319
- npm run quiver:ai:execute-slice -- --slice specs/<spec-slug>/slices/<slice-id>/slice.json --dry-run
391
+ npm run quiver:ai:prompt-slice -- --slice specs/<spec-slug>/slices/<slice-id>/slice.json --dry-run
392
+ npm run quiver:ai:execute-slice -- --slice specs/<spec-slug>/slices/<slice-id>/slice.json --dry-run --commit
393
+ npm run quiver:ai:execute-plan -- --dry-run --commit --mode delegated
320
394
  \`\`\`
321
395
 
322
396
  ## Project NPM Scripts
@@ -325,13 +399,32 @@ The generated project includes \`quiver:*\` npm scripts that call the Node CLI:
325
399
 
326
400
  \`\`\`bash
327
401
  npm run quiver:analyze
402
+ npm run quiver:prepare -- --dry-run
328
403
  npm run quiver:plan
329
404
  npm run quiver:graph
330
405
  npm run quiver:next
331
406
  npm run quiver:doctor
407
+ npm run quiver:ai:inspect
408
+ npm run quiver:ai:export -- --format json
409
+ npm run quiver:ai:export -- --format markdown
410
+ npm run quiver:ai:specs
411
+ npm run quiver:ai:slices
412
+ npm run quiver:ai:trace
332
413
  npm run quiver:ai:onboard -- --dry-run
333
414
  npm run quiver:ai:plan -- --phase acceptance --input requirements.md --dry-run
334
- npm run quiver:ai:execute-slice -- --slice specs/<spec-slug>/slices/<slice-id>/slice.json --dry-run
415
+ npm run quiver:ai:revise -- --phase acceptance --input feedback.md --dry-run
416
+ npm run quiver:ai:approve -- --phase acceptance --version <n>
417
+ npm run quiver:ai:plan -- --phase technical-plan --dry-run
418
+ npm run quiver:ai:review-plan -- --dry-run
419
+ npm run quiver:ai:approve -- --phase technical-plan --version <n>
420
+ npm run quiver:spec:create -- --dry-run
421
+ npm run quiver:ai:prompt-slice -- --slice specs/<spec-slug>/slices/<slice-id>/slice.json --dry-run
422
+ npm run quiver:ai:execute-slice -- --slice specs/<spec-slug>/slices/<slice-id>/slice.json --dry-run --commit
423
+ npm run quiver:ai:execute-plan -- --dry-run --commit --mode delegated
424
+ npm run quiver:ai:pr -- --dry-run --input specs/<spec-slug>/pr.md --ssh-host-alias github-work --identity-file ~/.ssh/github-work
425
+ npm run quiver:spec:start -- specs/<spec-slug>
426
+ npm run quiver:spec:status -- specs/<spec-slug>
427
+ npm run quiver:spec:close -- specs/<spec-slug> --dry-run
335
428
  \`\`\`
336
429
 
337
430
  ## Documentation
@@ -388,12 +481,20 @@ Quiver is designed for an AI-first workflow: a planner agent reads the project c
388
481
  Start with dry-runs so you can inspect the provider, role, context pack, and invocation before spending model tokens:
389
482
 
390
483
  \`\`\`bash
484
+ npm run quiver:prepare -- --dry-run
391
485
  npm run quiver:ai:onboard -- --dry-run
392
486
  npm run quiver:ai:plan -- --phase acceptance --input requirements.md --dry-run
393
- npm run quiver:ai:plan -- --phase technical-plan --input acceptance-approved.md --dry-run
394
- npm run quiver:ai:plan -- --phase spec --input technical-plan-approved.md --dry-run
395
- npm run quiver:ai:execute-slice -- --slice specs/${projectSlug}/slices/slice-01/slice.json --dry-run
396
- npm run quiver:ai:pr -- --dry-run --ssh-host-alias github-work --identity-file ~/.ssh/github-work
487
+ npm run quiver:ai:revise -- --phase acceptance --input feedback.md --dry-run
488
+ npm run quiver:ai:approve -- --phase acceptance --version <n>
489
+ npm run quiver:ai:plan -- --phase technical-plan --dry-run
490
+ npm run quiver:ai:review-plan -- --dry-run
491
+ npm run quiver:ai:approve -- --phase technical-plan --version <n>
492
+ npm run quiver:spec:create -- --dry-run
493
+ npm run quiver:spec:start -- specs/${projectSlug}
494
+ npm run quiver:ai:prompt-slice -- --slice specs/${projectSlug}/slices/slice-01/slice.json --dry-run
495
+ npm run quiver:ai:execute-slice -- --slice specs/${projectSlug}/slices/slice-01/slice.json --dry-run --commit
496
+ npm run quiver:ai:execute-plan -- --dry-run --commit --mode delegated
497
+ npm run quiver:ai:pr -- --dry-run --input specs/${projectSlug}/pr.md --ssh-host-alias github-work --identity-file ~/.ssh/github-work
397
498
  \`\`\`
398
499
 
399
500
  Remove \`--dry-run\` only after the phase output is approved and the local provider CLI is ready.
@@ -404,20 +505,33 @@ The generated project includes \`quiver:*\` npm scripts that call the Node CLI a
404
505
 
405
506
  \`\`\`bash
406
507
  npm run quiver:analyze
508
+ npm run quiver:prepare -- --dry-run
407
509
  npm run quiver:plan
408
510
  npm run quiver:graph
409
511
  npm run quiver:next
410
512
  npm run quiver:doctor
411
513
  npm run quiver:ai:onboard -- --dry-run
412
514
  npm run quiver:ai:plan -- --phase acceptance --input requirements.md --dry-run
413
- npm run quiver:ai:execute-slice -- --slice specs/${projectSlug}/slices/slice-01/slice.json --dry-run
515
+ npm run quiver:ai:revise -- --phase acceptance --input feedback.md --dry-run
516
+ npm run quiver:ai:approve -- --phase acceptance --version <n>
517
+ npm run quiver:ai:plan -- --phase technical-plan --dry-run
518
+ npm run quiver:ai:review-plan -- --dry-run
519
+ npm run quiver:ai:approve -- --phase technical-plan --version <n>
520
+ npm run quiver:spec:create -- --dry-run
521
+ npm run quiver:ai:prompt-slice -- --slice specs/${projectSlug}/slices/slice-01/slice.json --dry-run
522
+ npm run quiver:ai:execute-slice -- --slice specs/${projectSlug}/slices/slice-01/slice.json --dry-run --commit
523
+ npm run quiver:ai:execute-plan -- --dry-run --commit --mode delegated
414
524
  npm run quiver:ai:doctor -- --dry-run --ssh-host-alias github-work --identity-file ~/.ssh/github-work
415
- npm run quiver:ai:pr -- --dry-run --ssh-host-alias github-work --identity-file ~/.ssh/github-work
525
+ npm run quiver:ai:pr -- --dry-run --input specs/${projectSlug}/pr.md --ssh-host-alias github-work --identity-file ~/.ssh/github-work
526
+ npm run quiver:spec:start -- specs/${projectSlug}
527
+ npm run quiver:spec:status -- specs/${projectSlug}
528
+ npm run quiver:spec:close -- specs/${projectSlug} --dry-run
416
529
  npm run quiver:migrate
417
530
  npm run quiver:start-slice -- specs/${projectSlug}/slices/slice-01/slice.json
418
531
  npm run quiver:check-slice -- specs/${projectSlug}/slices/slice-01/slice.json
419
532
  npm run quiver:check-pr -- specs/${projectSlug}/slices/slice-01/slice.json
420
533
  npm run quiver:check-handoff -- specs/${projectSlug}/HANDOFF.md
534
+ npm run quiver:check-handoff -- specs/${projectSlug}/slices/slice-01/EXECUTION_BRIEF.md
421
535
  npm run quiver:cleanup-slice -- specs/${projectSlug}/slices/slice-01/slice.json
422
536
  npm run quiver:check-scope -- specs/${projectSlug}/slices/slice-01/slice.json
423
537
  npm run quiver:refresh-active-slices
@@ -425,12 +539,14 @@ npm run quiver:refresh-active-slices
425
539
 
426
540
  The \`quiver:graph\` script prints the tree view by default; use \`npx create-quiver graph --format mermaid\` for PR-ready Markdown and \`--format dot\` when you want Graphviz source.
427
541
  The \`quiver:next\` script points to the next ready slice and can auto-start it behind a confirmation prompt.
428
- The \`quiver:ai:*\` scripts standardize planner/executor AI flows. Use dry-run first: onboarding and planning dry-runs do not require provider auth, while \`quiver:ai:pr -- --dry-run\` validates \`gh\`, GitFlow docs, branch/worktree state, and SSH inputs without creating a PR.
542
+ The \`quiver:ai:*\` scripts standardize planner/executor AI flows. Use dry-run first: onboarding and planning dry-runs do not require provider auth, \`quiver:ai:execute-plan -- --dry-run --commit --mode manual\` prints manual prompts, \`--mode delegated\` prints safe waves, \`quiver:ai:inspect\` shows lifecycle state, \`quiver:ai:export -- --format json|markdown\` emits dashboard/agent-friendly state, and \`quiver:ai:pr -- --dry-run\` validates \`gh\`, GitFlow docs, branch/worktree state, SSH inputs, and \`pr.md\` without creating a PR. Add \`--create\` only after reviewing the plan.
543
+ Use \`quiver:spec:create\`, \`quiver:spec:start\`, \`quiver:spec:status\`, and \`quiver:spec:close\` for one spec generation and worktree per spec.
429
544
  Use \`npx create-quiver next --all-ready\` when you want the full ready level instead of a single suggestion.
430
545
  The legacy Bash wrappers remain in \`tools/scripts/\` for compatibility, but new project-level automation should prefer the \`quiver:*\` scripts and the direct \`npx create-quiver ...\` commands below.
431
546
  \`npm run quiver:migrate\` is only for projects that were already initialized by Quiver.
432
547
  \`npm run check-handoff -- specs/${projectSlug}/HANDOFF.md\` is available as a legacy-friendly alias for the handoff validator.
433
548
  If a new bounded transfer is needed, scaffold \`specs/${projectSlug}/HANDOFF.md\` with \`npx create-quiver new-handoff ${projectSlug}\` and validate it with \`npx create-quiver check-handoff specs/${projectSlug}/HANDOFF.md\`.
549
+ Use \`npx create-quiver check-handoff specs/${projectSlug}/slices/slice-01/EXECUTION_BRIEF.md\` or \`CLOSURE_BRIEF.md\` to validate the current per-slice brief contract.
434
550
  For exceptional context transfers between agents or phases, a dedicated \`HANDOFF.md\` can live alongside the usual spec and docs files.
435
551
 
436
552
  ## Cross-Platform Support
@@ -502,7 +618,7 @@ Record durable decisions in \`docs/DECISIONS.md\` so future AI agents do not re-
502
618
 
503
619
  ## First Slice Workflow
504
620
 
505
- Use this section only for projects generated with the full compatibility layout. In the default AI-first layout, create real specs and slices with \`npx create-quiver ai plan --phase spec\` after acceptance criteria and the technical plan are approved.
621
+ Use this section only for projects generated with the full compatibility layout. In the default AI-first layout, create real specs and slices with \`npx create-quiver spec create\` after acceptance criteria are approved and the technical plan is reviewed and approved.
506
622
 
507
623
  1. Review or refine specs/${projectSlug}/SPEC.md.
508
624
  2. Create the first slice from specs/${projectSlug}/slices/slice-template/slice.json.
@@ -541,6 +657,19 @@ Use this section only for projects generated with the full compatibility layout.
541
657
  `;
542
658
  }
543
659
 
660
+ function buildFullProfileIndexAppendix(projectSlug) {
661
+ return `## Full Profile Extras
662
+
663
+ - **Multi-agent workflow** - \`./MULTI_AGENT_WORKFLOW.md\`
664
+ - **Quick AI context** - \`./ai/QUICK.md\`
665
+ - **Standard AI context** - \`./ai/STANDARD.md\`
666
+ - **Deep AI context** - \`./ai/DEEP.md\`
667
+ - **Spec starter assets** - \`../specs/${projectSlug}/\`
668
+ - **Tool notes** - \`./tools/\`
669
+ - **Archive** - \`./archive/\`
670
+ `;
671
+ }
672
+
544
673
  function initializeProjectDocs(options) {
545
674
  const {
546
675
  projectRoot,
@@ -598,6 +727,9 @@ function initializeProjectDocs(options) {
598
727
  fs.writeFileSync(internalPaths.gitignorePath, buildQuiverInternalGitignore());
599
728
  operations.push({ source: 'Quiver internal gitignore', destination: '.quiver/.gitignore', result: 'updated' });
600
729
 
730
+ const rootGitignoreResult = mergeRootGitignore(projectRoot);
731
+ operations.push({ source: 'root gitignore defaults', destination: '.gitignore', result: rootGitignoreResult });
732
+
601
733
  if (includeTemplates) {
602
734
  fs.mkdirSync(internalPaths.templatesDir, { recursive: true });
603
735
  fs.cpSync(templateRoot, internalPaths.templatesDir, {
@@ -691,6 +823,17 @@ function initializeProjectDocs(options) {
691
823
  operations.push({ source, destination, result });
692
824
  }
693
825
 
826
+ const indexPath = path.join(projectRoot, 'docs', 'INDEX.md');
827
+ const indexWasCreated = operations.some((operation) => (
828
+ operation.destination === 'docs/INDEX.md'
829
+ && (operation.result === 'created' || operation.result === 'created-with-frontmatter')
830
+ ));
831
+ if (profile === 'full' && indexWasCreated && fs.existsSync(indexPath)) {
832
+ const currentIndex = fs.readFileSync(indexPath, 'utf8').replace(/\s+$/g, '');
833
+ fs.writeFileSync(indexPath, `${currentIndex}\n\n${buildFullProfileIndexAppendix(replacements.projectSlug)}`);
834
+ operations.push({ source: 'full profile index appendix', destination: 'docs/INDEX.md', result: 'updated' });
835
+ }
836
+
694
837
  const binaryCopies = [
695
838
  ['docs/UI_STANDARDS.md', 'docs/UI_STANDARDS.md'],
696
839
  ['docs/MOCK_DATA_GUIDE.md', 'docs/MOCK_DATA_GUIDE.md'],
@@ -765,6 +908,8 @@ function initializeProjectDocs(options) {
765
908
  legacyScripts,
766
909
  migrateMode,
767
910
  profile,
911
+ projectName,
912
+ projectSlug: replacements.projectSlug,
768
913
  });
769
914
  operations.push({ source: 'package.template.json', destination: 'package.json', result: packageResult });
770
915
 
@@ -963,8 +1108,148 @@ function installSelfAsDevDep(projectRoot, version) {
963
1108
  }
964
1109
  }
965
1110
 
1111
+ function normalizeSkippedReason(reason) {
1112
+ if (!reason) {
1113
+ return 'excluded path';
1114
+ }
1115
+
1116
+ if (reason === 'env-file') {
1117
+ return 'env files';
1118
+ }
1119
+
1120
+ if (reason === 'git-metadata') {
1121
+ return '.git metadata';
1122
+ }
1123
+
1124
+ if (reason === 'hidden-directory') {
1125
+ return 'hidden directories';
1126
+ }
1127
+
1128
+ if (reason.startsWith('secret-file:')) {
1129
+ return 'secret files';
1130
+ }
1131
+
1132
+ if (reason.startsWith('unsafe-segment:')) {
1133
+ const segment = reason.slice('unsafe-segment:'.length);
1134
+ const dependencySegments = new Set(['node_modules', '.pnpm-store', '.npm', '.yarn']);
1135
+ const outputSegments = new Set(['dist', 'build', 'coverage', 'out', 'tmp', 'temp', 'cache', '.cache', '.turbo', '.next', '.nuxt', '.parcel-cache', 'generated', 'gen', 'artifacts', 'reports', 'vendor', 'target']);
1136
+
1137
+ if (segment === '.quiver') {
1138
+ return 'local AI state';
1139
+ }
1140
+
1141
+ if (dependencySegments.has(segment)) {
1142
+ return 'dependency folders';
1143
+ }
1144
+
1145
+ if (outputSegments.has(segment)) {
1146
+ return 'generated/output/cache folders';
1147
+ }
1148
+
1149
+ return segment;
1150
+ }
1151
+
1152
+ return reason;
1153
+ }
1154
+
1155
+ function summarizeSkippedPaths(skippedPathDetails = [], skippedPaths = []) {
1156
+ const counts = new Map();
1157
+
1158
+ const items = Array.isArray(skippedPathDetails) && skippedPathDetails.length > 0
1159
+ ? skippedPathDetails
1160
+ : skippedPaths.map((item) => ({ path: item, reason: 'excluded path' }));
1161
+
1162
+ for (const item of items) {
1163
+ const label = normalizeSkippedReason(item.reason);
1164
+ counts.set(label, (counts.get(label) || 0) + 1);
1165
+ }
1166
+
1167
+ return Array.from(counts.entries()).map(([label, count]) => ({ label, count }));
1168
+ }
1169
+
1170
+ function renderAiContextDoc(scan, options = {}) {
1171
+ const projectName = scan?.project?.name || 'Quiver Project';
1172
+ const projectSlug = options.projectSlug || toProjectSlug(projectName);
1173
+ const stack = scan?.stack || {};
1174
+ const commands = scan?.commands || {};
1175
+ const common = commands.common || {};
1176
+ const summaries = summarizeSkippedPaths(scan?.skipped_path_details, scan?.skipped_paths);
1177
+ const risks = Array.isArray(scan?.risks) ? scan.risks : [];
1178
+ const hasReadme = scan?.docs?.has_readme ? 'yes' : 'no';
1179
+ const hasWorkflow = scan?.ci?.has_ci ? 'yes' : 'no';
1180
+ const sourceDirs = Array.isArray(scan?.structure?.source_directories) ? scan.structure.source_directories : [];
1181
+
1182
+ const lines = [];
1183
+ lines.push(`# ${projectName} AI Context`);
1184
+ lines.push('');
1185
+ lines.push('This file is refreshed by `npx create-quiver analyze`.');
1186
+ lines.push('Use `docs/PROJECT_MAP.md` for stack and command details, and `.quiver/scans/PROJECT_SCAN.json` only when raw analyzer data is needed.');
1187
+ lines.push('');
1188
+ lines.push('## Snapshot');
1189
+ lines.push(`- Primary stack: ${stack.primary || 'unknown'}`);
1190
+ lines.push('- Package manager source: `docs/PROJECT_MAP.md`');
1191
+ lines.push(`- Install: ${commands.install || 'not defined'}`);
1192
+ lines.push(`- Dev: ${common.dev || 'not defined'}`);
1193
+ lines.push(`- Build: ${common.build || 'not defined'}`);
1194
+ lines.push(`- Test: ${common.test || 'not defined'}`);
1195
+ lines.push(`- README present: ${hasReadme}`);
1196
+ lines.push(`- GitHub Actions workflows: ${hasWorkflow}`);
1197
+ lines.push(`- Source directories: ${sourceDirs.length > 0 ? sourceDirs.join(', ') : 'none detected'}`);
1198
+ lines.push('');
1199
+ lines.push('## Read First');
1200
+ lines.push('- `docs/PROJECT_MAP.md`');
1201
+ lines.push('- `docs/WORKFLOW.md`');
1202
+ lines.push('- `docs/AI_ONBOARDING_PROMPT.md`');
1203
+ lines.push('- `docs/CONTEXTO.md`');
1204
+ lines.push('- `docs/DECISIONS.md`');
1205
+ lines.push(`- specs/${projectSlug}/SPEC.md`);
1206
+ lines.push('');
1207
+ lines.push('## Assumptions and Missing Info');
1208
+ if (risks.length > 0) {
1209
+ for (const risk of risks) {
1210
+ lines.push(`- ${risk}`);
1211
+ }
1212
+ } else {
1213
+ lines.push('- No major repository signals are missing.');
1214
+ }
1215
+ lines.push('- Do not infer product or business rules that are not present in the repository.');
1216
+ lines.push('');
1217
+ lines.push('## Exclusions');
1218
+ if (summaries.length > 0) {
1219
+ for (const item of summaries) {
1220
+ lines.push(`- ${item.label}: ${item.count}`);
1221
+ }
1222
+ } else {
1223
+ lines.push('- No exclusions were needed.');
1224
+ }
1225
+ lines.push('');
1226
+ lines.push('## Internal Artifacts');
1227
+ lines.push('- Visible source: `docs/PROJECT_MAP.md`');
1228
+ lines.push('- Internal raw scan: `.quiver/scans/PROJECT_SCAN.json`');
1229
+ lines.push('');
1230
+ const body = lines.join('\n');
1231
+ const frontMatter = serializeFrontMatter(buildFrontMatterFields({
1232
+ purpose: 'Agent-facing project context pack',
1233
+ appliesWhen: 'after analyze, onboarding, implementation, review',
1234
+ body,
1235
+ currentDate: options.currentDate || new Date().toISOString().slice(0, 10),
1236
+ }));
1237
+
1238
+ return `${frontMatter}\n\n${body}`;
1239
+ }
1240
+
1241
+ function refreshAiContextDoc(projectRoot, scan, options = {}) {
1242
+ const destinationPath = path.join(projectRoot, 'docs', 'AI_CONTEXT.md');
1243
+ fs.mkdirSync(path.dirname(destinationPath), { recursive: true });
1244
+ fs.writeFileSync(destinationPath, `${renderAiContextDoc(scan, options)}\n`);
1245
+ return destinationPath;
1246
+ }
1247
+
966
1248
  module.exports = {
967
1249
  initializeProjectDocs,
1250
+ refreshAiContextDoc,
1251
+ renderAiContextDoc,
1252
+ summarizeSkippedPaths,
968
1253
  writeFrontMatter,
969
1254
  toProjectSlug,
970
1255
  detectPackageManager,
@@ -22,6 +22,7 @@ const CORE_VISIBLE_DIRECTORIES = ['docs', 'docs/ai', '.quiver', '.quiver/scans']
22
22
  const MINIMAL_VISIBLE_FILES = [
23
23
  'README.md',
24
24
  'AGENTS.md',
25
+ '.gitignore',
25
26
  'docs/AI_CONTEXT.md',
26
27
  'docs/AI_ONBOARDING_PROMPT.md',
27
28
  'docs/COMMANDS.md',
@@ -81,6 +82,7 @@ function quiverInternalPaths(projectRoot) {
81
82
  cacheDir: path.join(root, 'cache'),
82
83
  configPath: path.join(root, 'config.json'),
83
84
  gitignorePath: path.join(root, '.gitignore'),
85
+ locksDir: path.join(root, 'locks'),
84
86
  runsDir: path.join(root, 'runs'),
85
87
  scansDir: path.join(root, 'scans'),
86
88
  statePath: path.join(root, 'state.json'),
@@ -92,6 +94,8 @@ function quiverInternalPaths(projectRoot) {
92
94
  function buildQuiverInternalGitignore() {
93
95
  return [
94
96
  'cache/',
97
+ 'evidence/',
98
+ 'locks/',
95
99
  'runs/',
96
100
  'worktrees/',
97
101
  '',
@@ -178,15 +182,34 @@ function resolveInitPackageScripts(profile, options = {}) {
178
182
  const baseScripts = {
179
183
  'quiver:migrate': 'npx create-quiver migrate',
180
184
  'quiver:analyze': 'npx create-quiver analyze',
185
+ 'quiver:flow': 'npx create-quiver flow',
186
+ 'quiver:prepare': 'npx create-quiver prepare',
181
187
  'quiver:plan': 'npx create-quiver plan',
182
188
  'quiver:graph': 'npx create-quiver graph',
183
189
  'quiver:next': 'npx create-quiver next',
184
190
  'quiver:doctor': 'npx create-quiver doctor',
191
+ 'quiver:evidence': 'npx create-quiver evidence',
192
+ 'quiver:ai:agent': 'npx create-quiver ai agent',
193
+ 'quiver:ai:inspect': 'npx create-quiver ai inspect',
194
+ 'quiver:ai:export': 'npx create-quiver ai export',
195
+ 'quiver:ai:specs': 'npx create-quiver ai specs list',
196
+ 'quiver:ai:slices': 'npx create-quiver ai slices list',
197
+ 'quiver:ai:trace': 'npx create-quiver ai trace report',
185
198
  'quiver:ai:onboard': 'npx create-quiver ai onboard',
199
+ 'quiver:ai:prepare-context': 'npx create-quiver ai prepare-context',
186
200
  'quiver:ai:plan': 'npx create-quiver ai plan',
201
+ 'quiver:ai:revise': 'npx create-quiver ai revise',
202
+ 'quiver:ai:review-plan': 'npx create-quiver ai review-plan',
203
+ 'quiver:ai:approve': 'npx create-quiver ai approve',
204
+ 'quiver:ai:prompt-slice': 'npx create-quiver ai prompt-slice',
187
205
  'quiver:ai:execute-slice': 'npx create-quiver ai execute-slice',
206
+ 'quiver:ai:execute-plan': 'npx create-quiver ai execute-plan',
188
207
  'quiver:ai:pr': 'npx create-quiver ai pr',
189
208
  'quiver:ai:doctor': 'npx create-quiver ai doctor',
209
+ 'quiver:spec:create': 'npx create-quiver spec create',
210
+ 'quiver:spec:start': 'npx create-quiver spec start',
211
+ 'quiver:spec:status': 'npx create-quiver spec status',
212
+ 'quiver:spec:close': 'npx create-quiver spec close',
190
213
  'quiver:start-slice': 'npx create-quiver start-slice',
191
214
  'quiver:check-slice': 'npx create-quiver check-slice',
192
215
  'quiver:check-pr': 'npx create-quiver check-pr',
@@ -259,7 +282,17 @@ function buildInitLayout(projectRoot, options = {}) {
259
282
  }
260
283
 
261
284
  for (const file of visibleFiles) {
262
- pushPlannedOperation(operations, projectRoot, file, 'file', file === 'package.json' ? 'update' : 'create', file === 'package.json' ? 'prepare package metadata and scripts' : 'core visible contract file', profile, 'visible');
285
+ const updateMode = file === 'package.json' || file === '.gitignore';
286
+ pushPlannedOperation(
287
+ operations,
288
+ projectRoot,
289
+ file,
290
+ 'file',
291
+ updateMode ? 'update' : 'create',
292
+ updateMode ? 'prepare project metadata or ignored paths' : 'core visible contract file',
293
+ profile,
294
+ 'visible',
295
+ );
263
296
  }
264
297
 
265
298
  if (profile === 'full') {
@@ -1,7 +1,57 @@
1
1
  function stripJsonComments(text) {
2
- return String(text || '')
3
- .replace(/^\s*\/\/.*$/gm, '')
4
- .replace(/\/\*[\s\S]*?\*\//g, '');
2
+ const input = String(text || '');
3
+ let output = '';
4
+ let inString = false;
5
+ let escaped = false;
6
+
7
+ for (let index = 0; index < input.length; index += 1) {
8
+ const char = input[index];
9
+ const next = input[index + 1];
10
+
11
+ if (inString) {
12
+ output += char;
13
+ if (escaped) {
14
+ escaped = false;
15
+ } else if (char === '\\') {
16
+ escaped = true;
17
+ } else if (char === '"') {
18
+ inString = false;
19
+ }
20
+ continue;
21
+ }
22
+
23
+ if (char === '"') {
24
+ inString = true;
25
+ output += char;
26
+ continue;
27
+ }
28
+
29
+ if (char === '/' && next === '/') {
30
+ while (index < input.length && input[index] !== '\n') {
31
+ index += 1;
32
+ }
33
+ if (index < input.length) {
34
+ output += '\n';
35
+ }
36
+ continue;
37
+ }
38
+
39
+ if (char === '/' && next === '*') {
40
+ index += 2;
41
+ while (index < input.length && !(input[index] === '*' && input[index + 1] === '/')) {
42
+ if (input[index] === '\n') {
43
+ output += '\n';
44
+ }
45
+ index += 1;
46
+ }
47
+ index += 1;
48
+ continue;
49
+ }
50
+
51
+ output += char;
52
+ }
53
+
54
+ return output;
5
55
  }
6
56
 
7
57
  function parseJsonWithComments(text) {
@@ -4,6 +4,7 @@ const { branchDelete, catFileExists, currentBranch, fetchBranch, fetchRemote, ha
4
4
  const { parseJsonWithComments } = require('./json');
5
5
  const { writeFrontMatter } = require('./init-docs');
6
6
  const { relativePosixPath, resolveTargetRoot } = require('./paths');
7
+ const { ensureSpecSliceZeroComplete } = require('./spec-worktrees');
7
8
  const { activeSlicePath, renderActiveSlice, resolveSliceContext, safeBranchName, toAlias, validateSliceMetaForStart, worktreesRootForRepo } = require('./slice');
8
9
 
9
10
  function ensureDir(dirPath) {
@@ -299,6 +300,11 @@ function startSlice(sliceInput, options = {}) {
299
300
  const repoRoot = runGit(['rev-parse', '--show-toplevel'], process.cwd());
300
301
  const slice = resolveSliceContext(repoRoot, sliceInput);
301
302
  slice.repoRoot = repoRoot;
303
+
304
+ if (!slice.isBaseline) {
305
+ ensureSpecSliceZeroComplete(repoRoot, slice.specDirAbs);
306
+ }
307
+
302
308
  validateSliceMetaForStart(slice);
303
309
 
304
310
  if (slice.status === 'blocked') {