create-quiver 0.15.3 → 0.16.0

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 (390) hide show
  1. package/.github/pull_request_template.md +17 -0
  2. package/.github/workflows/ci.yml +79 -0
  3. package/.markdown-link-check.json +15 -0
  4. package/.markdownlint.json +11 -0
  5. package/.quiver/runs/run-2026-06-09t19-14-39z/approvals.json +5 -0
  6. package/.quiver/runs/run-2026-06-09t19-14-39z/decisions.md +2 -0
  7. package/.quiver/runs/run-2026-06-09t19-14-39z/requirement.md +0 -0
  8. package/.quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/docs/INDEX.md +97 -0
  9. package/.quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/manifest.json +61 -0
  10. package/.quiver/runs/run-2026-06-09t19-14-39z/state.json +28 -0
  11. package/ACTIVE_SLICES.md +43 -0
  12. package/AGENTS.md.es.template +37 -0
  13. package/ARCHITECTURE.md +133 -0
  14. package/CHANGELOG.md +12 -0
  15. package/CONTRIBUTING.md +174 -9
  16. package/README.md +10 -1
  17. package/ROADMAP.md +4 -0
  18. package/SECURITY.md +9 -2
  19. package/auditoria-ux-ui-performance-documentacion.md +705 -0
  20. package/copys-landing-page.md +244 -0
  21. package/docs/AI_CONTEXT.md.es.template +37 -0
  22. package/docs/AI_CONTEXT.md.template +3 -1
  23. package/docs/AI_ONBOARDING_PROMPT.md.es.template +22 -0
  24. package/docs/CLI_UX_GUIDE.md +55 -1
  25. package/docs/COMMANDS.md.es.template +28 -0
  26. package/docs/COMMANDS.md.template +20 -6
  27. package/docs/CONTEXTO.md.es.template +33 -0
  28. package/docs/DECISIONS.md.es.template +17 -0
  29. package/docs/GITFLOW_PR_GUIDE.md +73 -11
  30. package/docs/GITFLOW_PR_GUIDE.md.es.template +84 -0
  31. package/docs/GITFLOW_PR_GUIDE.md.template +72 -10
  32. package/docs/INDEX.md +11 -1
  33. package/docs/INDEX.md.es.template +36 -0
  34. package/docs/QUICK.md.template +2 -1
  35. package/docs/STANDARD.md.template +2 -1
  36. package/docs/STATUS.md.es.template +28 -0
  37. package/docs/SUPPORT_MATRIX.md.es.template +22 -0
  38. package/docs/TESTING_GUIDE_FOR_AI.md.es.template +19 -0
  39. package/docs/TROUBLESHOOTING.md.es.template +35 -0
  40. package/docs/WORKFLOW.md.es.template +31 -0
  41. package/docs/WORKFLOW.md.template +6 -4
  42. package/docs/ai/ACTIVE_SLICE.md +61 -0
  43. package/docs/ai/LESSONS.md.es.template +24 -0
  44. package/docs/getting-started/installation.md +26 -0
  45. package/docs/reference/commands.md +159 -7
  46. package/docs/reference/slice-schema.md +37 -0
  47. package/docs/schema/slice.schema.json +221 -0
  48. package/docs/specs/01-spec/01-slice/01-slice.json +36 -0
  49. package/docs/specs/01-spec/01-slice/01-slice.md +106 -0
  50. package/docs/specs/01-spec/01-slice/CLOSURE_BRIEF.md +80 -0
  51. package/docs/specs/01-spec/01-slice/EXECUTION_BRIEF.md +39 -0
  52. package/docs/specs/01-spec/02-slice/02-slice.json +36 -0
  53. package/docs/specs/01-spec/02-slice/02-slice.md +108 -0
  54. package/docs/specs/01-spec/02-slice/CLOSURE_BRIEF.md +88 -0
  55. package/docs/specs/01-spec/02-slice/EXECUTION_BRIEF.md +40 -0
  56. package/docs/specs/01-spec/03-slice/03-slice.json +36 -0
  57. package/docs/specs/01-spec/03-slice/03-slice.md +103 -0
  58. package/docs/specs/01-spec/03-slice/CLOSURE_BRIEF.md +54 -0
  59. package/docs/specs/01-spec/03-slice/EXECUTION_BRIEF.md +39 -0
  60. package/docs/specs/01-spec/04-slice/04-slice.json +36 -0
  61. package/docs/specs/01-spec/04-slice/04-slice.md +107 -0
  62. package/docs/specs/01-spec/04-slice/CLOSURE_BRIEF.md +46 -0
  63. package/docs/specs/01-spec/04-slice/EXECUTION_BRIEF.md +39 -0
  64. package/docs/specs/01-spec/05-slice/05-slice.json +36 -0
  65. package/docs/specs/01-spec/05-slice/05-slice.md +106 -0
  66. package/docs/specs/01-spec/05-slice/CLOSURE_BRIEF.md +84 -0
  67. package/docs/specs/01-spec/05-slice/EXECUTION_BRIEF.md +109 -0
  68. package/docs/specs/01-spec/06-slice/06-slice.json +36 -0
  69. package/docs/specs/01-spec/06-slice/06-slice.md +107 -0
  70. package/docs/specs/01-spec/06-slice/CLOSURE_BRIEF.md +67 -0
  71. package/docs/specs/01-spec/06-slice/EXECUTION_BRIEF.md +39 -0
  72. package/docs/specs/01-spec/07-slice/07-slice.json +36 -0
  73. package/docs/specs/01-spec/07-slice/07-slice.md +105 -0
  74. package/docs/specs/01-spec/07-slice/CLOSURE_BRIEF.md +71 -0
  75. package/docs/specs/01-spec/07-slice/EXECUTION_BRIEF.md +39 -0
  76. package/docs/specs/01-spec/08-slice/08-slice.json +36 -0
  77. package/docs/specs/01-spec/08-slice/08-slice.md +105 -0
  78. package/docs/specs/01-spec/08-slice/CLOSURE_BRIEF.md +114 -0
  79. package/docs/specs/01-spec/08-slice/EXECUTION_BRIEF.md +39 -0
  80. package/docs/specs/01-spec/CLOSURE_BRIEF.md +87 -0
  81. package/docs/specs/01-spec/spec.md +197 -0
  82. package/docs/workflows/full-ai-spec-to-pr.md +46 -3
  83. package/i18n/es/docs/GITFLOW_PR_GUIDE.md.template +38 -1
  84. package/package.json +27 -1
  85. package/pr.md +154 -0
  86. package/scripts/package-quiver.sh +82 -2
  87. package/scripts/release-quiver.sh +14 -3
  88. package/specs/[project-name]/slices/pr.md.template +19 -0
  89. package/specs/quiver-v37-cli-i18n-foundation/EVIDENCE_REPORT.md +73 -0
  90. package/specs/quiver-v37-cli-i18n-foundation/EXECUTION_PLAN.md +34 -0
  91. package/specs/quiver-v37-cli-i18n-foundation/SPEC.md +91 -0
  92. package/specs/quiver-v37-cli-i18n-foundation/STATUS.md +29 -0
  93. package/specs/quiver-v37-cli-i18n-foundation/pr.md +97 -0
  94. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/CLOSURE_BRIEF.md +10 -0
  95. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/EXECUTION_BRIEF.md +22 -0
  96. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/slice.json +54 -0
  97. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/CLOSURE_BRIEF.md +30 -0
  98. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/EXECUTION_BRIEF.md +27 -0
  99. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/slice.json +66 -0
  100. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/CLOSURE_BRIEF.md +27 -0
  101. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/EXECUTION_BRIEF.md +26 -0
  102. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/slice.json +62 -0
  103. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/CLOSURE_BRIEF.md +32 -0
  104. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/EXECUTION_BRIEF.md +25 -0
  105. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/slice.json +66 -0
  106. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/CLOSURE_BRIEF.md +30 -0
  107. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/EXECUTION_BRIEF.md +24 -0
  108. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/slice.json +65 -0
  109. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/CLOSURE_BRIEF.md +27 -0
  110. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/EXECUTION_BRIEF.md +23 -0
  111. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/slice.json +67 -0
  112. package/specs/quiver-v38-cli-i18n-read-only-commands/EVIDENCE_REPORT.md +69 -0
  113. package/specs/quiver-v38-cli-i18n-read-only-commands/EXECUTION_PLAN.md +25 -0
  114. package/specs/quiver-v38-cli-i18n-read-only-commands/SPEC.md +52 -0
  115. package/specs/quiver-v38-cli-i18n-read-only-commands/STATUS.md +24 -0
  116. package/specs/quiver-v38-cli-i18n-read-only-commands/pr.md +119 -0
  117. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/CLOSURE_BRIEF.md +10 -0
  118. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/EXECUTION_BRIEF.md +21 -0
  119. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/slice.json +53 -0
  120. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/CLOSURE_BRIEF.md +17 -0
  121. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/EXECUTION_BRIEF.md +23 -0
  122. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/slice.json +69 -0
  123. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/CLOSURE_BRIEF.md +13 -0
  124. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/EXECUTION_BRIEF.md +22 -0
  125. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/slice.json +77 -0
  126. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/CLOSURE_BRIEF.md +12 -0
  127. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/EXECUTION_BRIEF.md +22 -0
  128. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/slice.json +66 -0
  129. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/CLOSURE_BRIEF.md +13 -0
  130. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/EXECUTION_BRIEF.md +22 -0
  131. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/slice.json +61 -0
  132. package/specs/quiver-v39-cli-i18n-setup-onboarding/EVIDENCE_REPORT.md +71 -0
  133. package/specs/quiver-v39-cli-i18n-setup-onboarding/EXECUTION_PLAN.md +25 -0
  134. package/specs/quiver-v39-cli-i18n-setup-onboarding/SPEC.md +53 -0
  135. package/specs/quiver-v39-cli-i18n-setup-onboarding/STATUS.md +24 -0
  136. package/specs/quiver-v39-cli-i18n-setup-onboarding/pr.md +104 -0
  137. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/CLOSURE_BRIEF.md +10 -0
  138. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/EXECUTION_BRIEF.md +21 -0
  139. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/slice.json +53 -0
  140. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/CLOSURE_BRIEF.md +12 -0
  141. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/EXECUTION_BRIEF.md +23 -0
  142. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/slice.json +68 -0
  143. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/CLOSURE_BRIEF.md +12 -0
  144. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/EXECUTION_BRIEF.md +23 -0
  145. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/slice.json +62 -0
  146. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/CLOSURE_BRIEF.md +12 -0
  147. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/EXECUTION_BRIEF.md +22 -0
  148. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/slice.json +72 -0
  149. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/CLOSURE_BRIEF.md +15 -0
  150. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/EXECUTION_BRIEF.md +22 -0
  151. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/slice.json +61 -0
  152. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/EVIDENCE_REPORT.md +50 -0
  153. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/EXECUTION_PLAN.md +25 -0
  154. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/SPEC.md +52 -0
  155. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/STATUS.md +24 -0
  156. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/pr.md +94 -0
  157. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/CLOSURE_BRIEF.md +10 -0
  158. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/EXECUTION_BRIEF.md +21 -0
  159. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/slice.json +53 -0
  160. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/CLOSURE_BRIEF.md +12 -0
  161. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/EXECUTION_BRIEF.md +22 -0
  162. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/slice.json +63 -0
  163. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/CLOSURE_BRIEF.md +10 -0
  164. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/EXECUTION_BRIEF.md +22 -0
  165. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/slice.json +63 -0
  166. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/CLOSURE_BRIEF.md +10 -0
  167. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/EXECUTION_BRIEF.md +22 -0
  168. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/slice.json +72 -0
  169. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/CLOSURE_BRIEF.md +15 -0
  170. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/EXECUTION_BRIEF.md +22 -0
  171. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/slice.json +69 -0
  172. package/specs/quiver-v41-cli-i18n-ai-lifecycle/EVIDENCE_REPORT.md +90 -0
  173. package/specs/quiver-v41-cli-i18n-ai-lifecycle/EXECUTION_PLAN.md +33 -0
  174. package/specs/quiver-v41-cli-i18n-ai-lifecycle/SPEC.md +57 -0
  175. package/specs/quiver-v41-cli-i18n-ai-lifecycle/STATUS.md +26 -0
  176. package/specs/quiver-v41-cli-i18n-ai-lifecycle/pr.md +103 -0
  177. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/CLOSURE_BRIEF.md +10 -0
  178. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/EXECUTION_BRIEF.md +21 -0
  179. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/slice.json +53 -0
  180. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/CLOSURE_BRIEF.md +13 -0
  181. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/EXECUTION_BRIEF.md +22 -0
  182. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/slice.json +68 -0
  183. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/CLOSURE_BRIEF.md +12 -0
  184. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/EXECUTION_BRIEF.md +22 -0
  185. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/slice.json +66 -0
  186. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/CLOSURE_BRIEF.md +12 -0
  187. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/EXECUTION_BRIEF.md +23 -0
  188. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/slice.json +68 -0
  189. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/CLOSURE_BRIEF.md +13 -0
  190. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/EXECUTION_BRIEF.md +23 -0
  191. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/slice.json +72 -0
  192. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/CLOSURE_BRIEF.md +15 -0
  193. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/EXECUTION_BRIEF.md +22 -0
  194. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/slice.json +66 -0
  195. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/CLOSURE_BRIEF.md +11 -0
  196. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/EXECUTION_BRIEF.md +22 -0
  197. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/slice.json +70 -0
  198. package/specs/quiver-v42-cli-i18n-generated-docs/EVIDENCE_REPORT.md +64 -0
  199. package/specs/quiver-v42-cli-i18n-generated-docs/EXECUTION_PLAN.md +26 -0
  200. package/specs/quiver-v42-cli-i18n-generated-docs/SPEC.md +52 -0
  201. package/specs/quiver-v42-cli-i18n-generated-docs/STATUS.md +24 -0
  202. package/specs/quiver-v42-cli-i18n-generated-docs/pr.md +125 -0
  203. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/CLOSURE_BRIEF.md +10 -0
  204. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/EXECUTION_BRIEF.md +21 -0
  205. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/slice.json +53 -0
  206. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/CLOSURE_BRIEF.md +10 -0
  207. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/EXECUTION_BRIEF.md +22 -0
  208. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/slice.json +62 -0
  209. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/CLOSURE_BRIEF.md +11 -0
  210. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/EXECUTION_BRIEF.md +22 -0
  211. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/slice.json +72 -0
  212. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/CLOSURE_BRIEF.md +12 -0
  213. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/EXECUTION_BRIEF.md +22 -0
  214. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/slice.json +60 -0
  215. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/CLOSURE_BRIEF.md +16 -0
  216. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/EXECUTION_BRIEF.md +22 -0
  217. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/slice.json +62 -0
  218. package/specs/quiver-v43-cli-i18n-audit-release-readiness/EVIDENCE_REPORT.md +203 -0
  219. package/specs/quiver-v43-cli-i18n-audit-release-readiness/EXECUTION_PLAN.md +27 -0
  220. package/specs/quiver-v43-cli-i18n-audit-release-readiness/SPEC.md +54 -0
  221. package/specs/quiver-v43-cli-i18n-audit-release-readiness/STATUS.md +24 -0
  222. package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +636 -0
  223. package/specs/quiver-v43-cli-i18n-audit-release-readiness/cross-platform-smoke-matrix.md +35 -0
  224. package/specs/quiver-v43-cli-i18n-audit-release-readiness/pr.md +155 -0
  225. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/CLOSURE_BRIEF.md +10 -0
  226. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/EXECUTION_BRIEF.md +21 -0
  227. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/slice.json +53 -0
  228. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/CLOSURE_BRIEF.md +13 -0
  229. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/EXECUTION_BRIEF.md +23 -0
  230. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/slice.json +62 -0
  231. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/CLOSURE_BRIEF.md +18 -0
  232. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/EXECUTION_BRIEF.md +22 -0
  233. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/slice.json +59 -0
  234. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/CLOSURE_BRIEF.md +15 -0
  235. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/EXECUTION_BRIEF.md +23 -0
  236. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/slice.json +62 -0
  237. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/CLOSURE_BRIEF.md +17 -0
  238. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/EXECUTION_BRIEF.md +24 -0
  239. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/slice.json +66 -0
  240. package/specs/quiver-v44-provider-live-output-tui-lite/EVIDENCE_REPORT.md +18 -0
  241. package/specs/quiver-v44-provider-live-output-tui-lite/EXECUTION_PLAN.md +31 -0
  242. package/specs/quiver-v44-provider-live-output-tui-lite/SPEC.md +118 -0
  243. package/specs/quiver-v44-provider-live-output-tui-lite/STATUS.md +25 -0
  244. package/specs/quiver-v44-provider-live-output-tui-lite/pr.md +92 -0
  245. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/CLOSURE_BRIEF.md +11 -0
  246. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/EXECUTION_BRIEF.md +23 -0
  247. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/slice.json +64 -0
  248. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/CLOSURE_BRIEF.md +10 -0
  249. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/EXECUTION_BRIEF.md +24 -0
  250. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/slice.json +65 -0
  251. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/CLOSURE_BRIEF.md +10 -0
  252. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/EXECUTION_BRIEF.md +24 -0
  253. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/slice.json +70 -0
  254. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/CLOSURE_BRIEF.md +10 -0
  255. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/EXECUTION_BRIEF.md +25 -0
  256. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/slice.json +70 -0
  257. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/CLOSURE_BRIEF.md +10 -0
  258. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/EXECUTION_BRIEF.md +26 -0
  259. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/slice.json +72 -0
  260. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/CLOSURE_BRIEF.md +15 -0
  261. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/EXECUTION_BRIEF.md +26 -0
  262. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/slice.json +75 -0
  263. package/specs/quiver-v45-ci-actions-node24-readiness/EVIDENCE_REPORT.md +30 -0
  264. package/specs/quiver-v45-ci-actions-node24-readiness/EXECUTION_PLAN.md +22 -0
  265. package/specs/quiver-v45-ci-actions-node24-readiness/SPEC.md +49 -0
  266. package/specs/quiver-v45-ci-actions-node24-readiness/STATUS.md +21 -0
  267. package/specs/quiver-v45-ci-actions-node24-readiness/pr.md +67 -0
  268. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/CLOSURE_BRIEF.md +10 -0
  269. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/EXECUTION_BRIEF.md +21 -0
  270. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/slice.json +48 -0
  271. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/CLOSURE_BRIEF.md +14 -0
  272. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/EXECUTION_BRIEF.md +23 -0
  273. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/slice.json +65 -0
  274. package/specs/quiver-v50-audit-trust-foundation/EVIDENCE_REPORT.md +151 -0
  275. package/specs/quiver-v50-audit-trust-foundation/EXECUTION_PLAN.md +34 -0
  276. package/specs/quiver-v50-audit-trust-foundation/SPEC.md +113 -0
  277. package/specs/quiver-v50-audit-trust-foundation/STATUS.md +26 -0
  278. package/specs/quiver-v50-audit-trust-foundation/pr.md +120 -0
  279. package/specs/quiver-v50-audit-trust-foundation/slices/slice-00-audit-baseline-and-resolved-findings/CLOSURE_BRIEF.md +20 -0
  280. package/specs/quiver-v50-audit-trust-foundation/slices/slice-00-audit-baseline-and-resolved-findings/EXECUTION_BRIEF.md +58 -0
  281. package/specs/quiver-v50-audit-trust-foundation/slices/slice-00-audit-baseline-and-resolved-findings/slice.json +57 -0
  282. package/specs/quiver-v50-audit-trust-foundation/slices/slice-01-runtime-minimum-and-package-metadata/CLOSURE_BRIEF.md +24 -0
  283. package/specs/quiver-v50-audit-trust-foundation/slices/slice-01-runtime-minimum-and-package-metadata/EXECUTION_BRIEF.md +67 -0
  284. package/specs/quiver-v50-audit-trust-foundation/slices/slice-01-runtime-minimum-and-package-metadata/slice.json +71 -0
  285. package/specs/quiver-v50-audit-trust-foundation/slices/slice-02-migrate-write-safety-contract/CLOSURE_BRIEF.md +24 -0
  286. package/specs/quiver-v50-audit-trust-foundation/slices/slice-02-migrate-write-safety-contract/EXECUTION_BRIEF.md +71 -0
  287. package/specs/quiver-v50-audit-trust-foundation/slices/slice-02-migrate-write-safety-contract/slice.json +81 -0
  288. package/specs/quiver-v50-audit-trust-foundation/slices/slice-03-security-reporting-channel/CLOSURE_BRIEF.md +22 -0
  289. package/specs/quiver-v50-audit-trust-foundation/slices/slice-03-security-reporting-channel/EXECUTION_BRIEF.md +57 -0
  290. package/specs/quiver-v50-audit-trust-foundation/slices/slice-03-security-reporting-channel/slice.json +56 -0
  291. package/specs/quiver-v50-audit-trust-foundation/slices/slice-04-user-facing-i18n-error-coverage/CLOSURE_BRIEF.md +23 -0
  292. package/specs/quiver-v50-audit-trust-foundation/slices/slice-04-user-facing-i18n-error-coverage/EXECUTION_BRIEF.md +68 -0
  293. package/specs/quiver-v50-audit-trust-foundation/slices/slice-04-user-facing-i18n-error-coverage/slice.json +84 -0
  294. package/specs/quiver-v50-audit-trust-foundation/slices/slice-05-init-analyze-progress-and-summaries/CLOSURE_BRIEF.md +25 -0
  295. package/specs/quiver-v50-audit-trust-foundation/slices/slice-05-init-analyze-progress-and-summaries/EXECUTION_BRIEF.md +73 -0
  296. package/specs/quiver-v50-audit-trust-foundation/slices/slice-05-init-analyze-progress-and-summaries/slice.json +72 -0
  297. package/specs/quiver-v50-audit-trust-foundation/slices/slice-06-contributor-and-architecture-docs/CLOSURE_BRIEF.md +22 -0
  298. package/specs/quiver-v50-audit-trust-foundation/slices/slice-06-contributor-and-architecture-docs/EXECUTION_BRIEF.md +66 -0
  299. package/specs/quiver-v50-audit-trust-foundation/slices/slice-06-contributor-and-architecture-docs/slice.json +74 -0
  300. package/specs/quiver-v50-audit-trust-foundation/slices/slice-07-ci-and-documentation-lint-baseline/CLOSURE_BRIEF.md +29 -0
  301. package/specs/quiver-v50-audit-trust-foundation/slices/slice-07-ci-and-documentation-lint-baseline/EXECUTION_BRIEF.md +74 -0
  302. package/specs/quiver-v50-audit-trust-foundation/slices/slice-07-ci-and-documentation-lint-baseline/slice.json +81 -0
  303. package/specs/quiver-v51-cli-ergonomics-automation-contracts/EVIDENCE_REPORT.md +145 -0
  304. package/specs/quiver-v51-cli-ergonomics-automation-contracts/EXECUTION_PLAN.md +32 -0
  305. package/specs/quiver-v51-cli-ergonomics-automation-contracts/SPEC.md +109 -0
  306. package/specs/quiver-v51-cli-ergonomics-automation-contracts/STATUS.md +25 -0
  307. package/specs/quiver-v51-cli-ergonomics-automation-contracts/pr.md +69 -0
  308. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/CLOSURE_BRIEF.md +20 -0
  309. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/EXECUTION_BRIEF.md +58 -0
  310. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/slice.json +56 -0
  311. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-01-flow-json-compatibility/CLOSURE_BRIEF.md +21 -0
  312. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-01-flow-json-compatibility/EXECUTION_BRIEF.md +61 -0
  313. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-01-flow-json-compatibility/slice.json +68 -0
  314. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/CLOSURE_BRIEF.md +25 -0
  315. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/EXECUTION_BRIEF.md +65 -0
  316. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/pr.md +134 -0
  317. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/slice.json +80 -0
  318. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/CLOSURE_BRIEF.md +31 -0
  319. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/EXECUTION_BRIEF.md +80 -0
  320. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/pr.md +159 -0
  321. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/slice.json +102 -0
  322. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/CLOSURE_BRIEF.md +25 -0
  323. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/EXECUTION_BRIEF.md +74 -0
  324. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/pr.md +147 -0
  325. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/slice.json +91 -0
  326. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/CLOSURE_BRIEF.md +28 -0
  327. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/EXECUTION_BRIEF.md +73 -0
  328. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/pr.md +146 -0
  329. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/slice.json +100 -0
  330. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/CLOSURE_BRIEF.md +36 -0
  331. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md +76 -0
  332. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/pr.md +155 -0
  333. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/slice.json +111 -0
  334. package/specs/quiver-v52-schema-docs-release-hygiene/EVIDENCE_REPORT.md +95 -0
  335. package/specs/quiver-v52-schema-docs-release-hygiene/EXECUTION_PLAN.md +31 -0
  336. package/specs/quiver-v52-schema-docs-release-hygiene/SPEC.md +107 -0
  337. package/specs/quiver-v52-schema-docs-release-hygiene/STATUS.md +22 -0
  338. package/specs/quiver-v52-schema-docs-release-hygiene/pr.md +69 -0
  339. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-00-schema-docs-release-baseline/CLOSURE_BRIEF.md +21 -0
  340. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-00-schema-docs-release-baseline/EXECUTION_BRIEF.md +60 -0
  341. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-00-schema-docs-release-baseline/slice.json +62 -0
  342. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/CLOSURE_BRIEF.md +34 -0
  343. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/EXECUTION_BRIEF.md +71 -0
  344. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/pr.md +146 -0
  345. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/slice.json +106 -0
  346. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/CLOSURE_BRIEF.md +33 -0
  347. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/EXECUTION_BRIEF.md +67 -0
  348. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/pr.md +144 -0
  349. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/slice.json +86 -0
  350. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/CLOSURE_BRIEF.md +38 -0
  351. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/EXECUTION_BRIEF.md +75 -0
  352. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/pr.md +159 -0
  353. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/slice.json +105 -0
  354. package/src/create-quiver/commands/ai.js +485 -307
  355. package/src/create-quiver/commands/changelog.js +93 -0
  356. package/src/create-quiver/commands/config.js +135 -0
  357. package/src/create-quiver/commands/demo.js +2 -2
  358. package/src/create-quiver/commands/evidence.js +39 -6
  359. package/src/create-quiver/commands/flow.js +109 -16
  360. package/src/create-quiver/commands/graph.js +9 -2
  361. package/src/create-quiver/commands/next.js +21 -18
  362. package/src/create-quiver/commands/plan.js +29 -6
  363. package/src/create-quiver/commands/spec.js +94 -70
  364. package/src/create-quiver/index.js +798 -223
  365. package/src/create-quiver/lib/ai/execution-plan.js +23 -20
  366. package/src/create-quiver/lib/ai/executor.js +60 -44
  367. package/src/create-quiver/lib/ai/export-state.js +75 -64
  368. package/src/create-quiver/lib/ai/github.js +29 -23
  369. package/src/create-quiver/lib/ai/run-state.js +28 -25
  370. package/src/create-quiver/lib/ai/spec-templates.js +19 -0
  371. package/src/create-quiver/lib/cli/command-registry.js +71 -0
  372. package/src/create-quiver/lib/cli/parser.js +14 -0
  373. package/src/create-quiver/lib/dashboard.js +154 -111
  374. package/src/create-quiver/lib/demo.js +14 -12
  375. package/src/create-quiver/lib/evidence.js +161 -6
  376. package/src/create-quiver/lib/git.js +99 -0
  377. package/src/create-quiver/lib/handoff.js +16 -7
  378. package/src/create-quiver/lib/i18n/catalog.js +152 -0
  379. package/src/create-quiver/lib/i18n/language.js +279 -0
  380. package/src/create-quiver/lib/i18n/messages/en.js +898 -0
  381. package/src/create-quiver/lib/i18n/messages/es.js +1013 -0
  382. package/src/create-quiver/lib/i18n/read-only-format.js +26 -0
  383. package/src/create-quiver/lib/i18n/templates.js +172 -0
  384. package/src/create-quiver/lib/init-docs.js +19 -5
  385. package/src/create-quiver/lib/init-layout.js +15 -8
  386. package/src/create-quiver/lib/lifecycle.js +72 -67
  387. package/src/create-quiver/lib/readiness.js +131 -110
  388. package/src/create-quiver/lib/renderers/tree.js +9 -6
  389. package/src/create-quiver/lib/spec-worktrees.js +50 -64
  390. package/src/create-quiver/lib/version.js +11 -9
@@ -0,0 +1,93 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ function parseChangelog(content) {
5
+ const lines = String(content || '').split(/\r?\n/);
6
+ const entries = [];
7
+ let current = null;
8
+
9
+ for (const line of lines) {
10
+ const heading = line.match(/^##\s+\[?([^\]\n]+)\]?(?:\s+-\s+(.+))?$/);
11
+ if (heading) {
12
+ if (current) {
13
+ current.body = current.body.trim();
14
+ entries.push(current);
15
+ }
16
+ current = {
17
+ version: heading[1].trim(),
18
+ date: heading[2]?.trim() || null,
19
+ body: '',
20
+ };
21
+ continue;
22
+ }
23
+
24
+ if (current) {
25
+ current.body += `${line}\n`;
26
+ }
27
+ }
28
+
29
+ if (current) {
30
+ current.body = current.body.trim();
31
+ entries.push(current);
32
+ }
33
+
34
+ return entries;
35
+ }
36
+
37
+ function readChangelog(packageRoot) {
38
+ const changelogPath = path.join(packageRoot, 'CHANGELOG.md');
39
+ if (!fs.existsSync(changelogPath)) {
40
+ return { path: changelogPath, entries: [], missing: true };
41
+ }
42
+
43
+ const content = fs.readFileSync(changelogPath, 'utf8');
44
+ return { path: changelogPath, entries: parseChangelog(content), missing: false };
45
+ }
46
+
47
+ function formatHumanChangelog(report) {
48
+ if (report.missing) {
49
+ return 'Quiver changelog\n\nNo local CHANGELOG.md was found in the installed package.\n';
50
+ }
51
+
52
+ const entries = report.entries.slice(0, 3);
53
+ if (entries.length === 0) {
54
+ return 'Quiver changelog\n\nLocal CHANGELOG.md did not contain parseable release entries.\n';
55
+ }
56
+
57
+ const lines = ['Quiver changelog', ''];
58
+ for (const entry of entries) {
59
+ lines.push(`## ${entry.version}${entry.date ? ` - ${entry.date}` : ''}`);
60
+ if (entry.body) {
61
+ lines.push(entry.body);
62
+ }
63
+ lines.push('');
64
+ }
65
+
66
+ return `${lines.join('\n').trimEnd()}\n`;
67
+ }
68
+
69
+ function runChangelog(options = {}) {
70
+ const packageRoot = options.packageRoot || path.resolve(__dirname, '../..', '..');
71
+ const report = readChangelog(packageRoot);
72
+ const payload = {
73
+ schema_version: 1,
74
+ source: report.path,
75
+ missing: report.missing,
76
+ entries: report.entries.slice(0, 10),
77
+ };
78
+
79
+ if (options.json) {
80
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
81
+ return payload;
82
+ }
83
+
84
+ process.stdout.write(formatHumanChangelog(report));
85
+ return payload;
86
+ }
87
+
88
+ module.exports = {
89
+ formatHumanChangelog,
90
+ parseChangelog,
91
+ readChangelog,
92
+ runChangelog,
93
+ };
@@ -0,0 +1,135 @@
1
+ const path = require('path');
2
+
3
+ const {
4
+ DEFAULT_LANGUAGE,
5
+ SUPPORTED_LANGUAGES,
6
+ formatLanguageWarning,
7
+ globalLanguageConfigPath,
8
+ normalizeLanguage,
9
+ projectLanguageConfigPath,
10
+ writeGlobalLanguageConfig,
11
+ writeProjectLanguageConfig,
12
+ } = require('../lib/i18n/language');
13
+ const { createTranslator } = require('../lib/i18n/catalog');
14
+
15
+ function formatError(message) {
16
+ return `create-quiver: ${message}`;
17
+ }
18
+
19
+ function toJsonWarning(warning) {
20
+ return {
21
+ code: warning.code,
22
+ source: warning.source,
23
+ requested_language: warning.requestedLanguage,
24
+ fallback_language: warning.fallbackLanguage,
25
+ supported_languages: warning.supportedLanguages,
26
+ };
27
+ }
28
+
29
+ function formatProjectRelativePath(repoRoot, filePath) {
30
+ return path.relative(repoRoot, filePath).split(path.sep).join('/') || '.';
31
+ }
32
+
33
+ function validateLanguageForSet(language, translator = createTranslator()) {
34
+ const normalized = normalizeLanguage(language);
35
+ if (!normalized || normalized !== String(language || '').trim().toLowerCase()) {
36
+ throw new Error(formatError(translator.t('config.error.unsupported_language', {
37
+ fallback: DEFAULT_LANGUAGE,
38
+ language: language || '<missing>',
39
+ supported: SUPPORTED_LANGUAGES.join(', '),
40
+ })));
41
+ }
42
+ return normalized;
43
+ }
44
+
45
+ function runLanguageShow(repoRoot, options = {}) {
46
+ const resolution = options.languageResolution || {
47
+ language: DEFAULT_LANGUAGE,
48
+ source: 'default',
49
+ warnings: [],
50
+ };
51
+ const warnings = resolution.warnings || [];
52
+
53
+ if (options.json) {
54
+ process.stdout.write(`${JSON.stringify({
55
+ schema_version: 1,
56
+ language: resolution.language,
57
+ source: resolution.source,
58
+ requested_source: resolution.requestedSource || null,
59
+ requested_language: resolution.requestedLanguage || null,
60
+ warnings: warnings.map(toJsonWarning),
61
+ }, null, 2)}\n`);
62
+ return;
63
+ }
64
+
65
+ const lines = [
66
+ 'Quiver config language',
67
+ `Language: ${resolution.language}`,
68
+ `Source: ${resolution.source}`,
69
+ ];
70
+ for (const warning of warnings) {
71
+ lines.push(formatLanguageWarning(warning));
72
+ }
73
+ process.stdout.write(`${lines.join('\n')}\n`);
74
+ }
75
+
76
+ function runLanguageSet(repoRoot, options = {}) {
77
+ const translator = createTranslator(options.language);
78
+ const language = validateLanguageForSet(options.value, translator);
79
+ const global = options.global === true;
80
+ const configPath = global ? globalLanguageConfigPath() : projectLanguageConfigPath(repoRoot);
81
+
82
+ if (global) {
83
+ writeGlobalLanguageConfig(language);
84
+ } else {
85
+ writeProjectLanguageConfig(repoRoot, language);
86
+ }
87
+
88
+ const displayPath = global ? '~/.quiver/config.json' : formatProjectRelativePath(repoRoot, configPath);
89
+ const scope = global ? 'global' : 'project';
90
+
91
+ if (options.json) {
92
+ process.stdout.write(`${JSON.stringify({
93
+ schema_version: 1,
94
+ action: 'set',
95
+ scope,
96
+ language,
97
+ path: displayPath,
98
+ }, null, 2)}\n`);
99
+ return;
100
+ }
101
+
102
+ process.stdout.write([
103
+ 'Quiver config language updated',
104
+ `Scope: ${scope}`,
105
+ `Path: ${displayPath}`,
106
+ `Language: ${language}`,
107
+ ].join('\n') + '\n');
108
+ }
109
+
110
+ function runConfig(repoRoot, options = {}) {
111
+ const translator = createTranslator(options.language);
112
+ if (options.section !== 'language') {
113
+ throw new Error(formatError(translator.t('config.error.unsupported_section', {
114
+ section: options.section || '(missing)',
115
+ })));
116
+ }
117
+
118
+ if (options.command === 'show') {
119
+ runLanguageShow(repoRoot, options);
120
+ return;
121
+ }
122
+
123
+ if (options.command === 'set') {
124
+ runLanguageSet(repoRoot, options);
125
+ return;
126
+ }
127
+
128
+ throw new Error(formatError(translator.t('config.error.unsupported_language_command', {
129
+ command: options.command || '(missing)',
130
+ })));
131
+ }
132
+
133
+ module.exports = {
134
+ runConfig,
135
+ };
@@ -8,12 +8,12 @@ function runDemo(options = {}) {
8
8
  const plan = buildDemoPlan(options.targetRoot, { demo: options.demo });
9
9
 
10
10
  if (options.dryRun) {
11
- console.log(formatDemoPlan(plan, { dryRun: true }));
11
+ console.log(formatDemoPlan(plan, { dryRun: true, language: options.language }));
12
12
  return plan;
13
13
  }
14
14
 
15
15
  writeDemoPlan(plan);
16
- console.log(formatDemoPlan(plan));
16
+ console.log(formatDemoPlan(plan, { language: options.language }));
17
17
  return plan;
18
18
  }
19
19
 
@@ -1,5 +1,6 @@
1
1
  const path = require('path');
2
- const { runEvidenceCommand } = require('../lib/evidence');
2
+ const { listEvidenceFiles, runEvidenceCommand, showEvidenceFile } = require('../lib/evidence');
3
+ const { createTranslator } = require('../lib/i18n/catalog');
3
4
 
4
5
  function formatOutputPath(repoRoot, outputPath) {
5
6
  const relativeOutput = path.relative(repoRoot, outputPath).split(path.sep).join('/');
@@ -11,22 +12,54 @@ function formatOutputPath(repoRoot, outputPath) {
11
12
  }
12
13
 
13
14
  function runEvidence(repoRoot, options = {}) {
15
+ const translator = createTranslator(options.language);
14
16
  const command = options.command || '';
17
+ if (options.subcommand === 'list') {
18
+ const evidence = listEvidenceFiles(repoRoot);
19
+ if (options.json) {
20
+ process.stdout.write(`${JSON.stringify({ evidence }, null, 2)}\n`);
21
+ return { evidence, exitCode: 0 };
22
+ }
23
+
24
+ console.log(translator.t('evidence.list.title'));
25
+ if (evidence.length === 0) {
26
+ console.log(translator.t('evidence.list.empty'));
27
+ return { evidence, exitCode: 0 };
28
+ }
29
+
30
+ for (const item of evidence) {
31
+ console.log(`- ${item.path} (${translator.t('evidence.exit_code', { code: item.exit_code ?? '-' })})`);
32
+ }
33
+ return { evidence, exitCode: 0 };
34
+ }
35
+
36
+ if (options.subcommand === 'show') {
37
+ const evidence = showEvidenceFile(repoRoot, options.target);
38
+ if (options.json) {
39
+ process.stdout.write(`${JSON.stringify(evidence, null, 2)}\n`);
40
+ return { evidence, exitCode: 0 };
41
+ }
42
+
43
+ process.stdout.write(evidence.content);
44
+ return { evidence, exitCode: 0 };
45
+ }
46
+
15
47
  if (options.subcommand !== 'run') {
16
- throw new Error('create-quiver: missing evidence subcommand. Use: npx create-quiver evidence run -- <command>');
48
+ throw new Error(`create-quiver: ${translator.t('evidence.error.missing_subcommand')}`);
17
49
  }
18
50
 
19
51
  const result = runEvidenceCommand(repoRoot, command, {
52
+ missingCommandMessage: `create-quiver: ${translator.t('evidence.error.missing_command')}`,
20
53
  maxOutput: options.maxOutput,
21
54
  outputPath: options.output,
22
55
  spawnSync: options.spawnSync,
23
56
  });
24
57
  const displayOutput = formatOutputPath(repoRoot, result.outputPath);
25
58
 
26
- console.log('Quiver evidence recorded');
27
- console.log(`- Command: ${result.record.command}`);
28
- console.log(`- Exit code: ${result.exitCode}`);
29
- console.log(`- Output: ${displayOutput}`);
59
+ console.log(translator.t('evidence.recorded'));
60
+ console.log(`- ${translator.t('evidence.command', { command: result.record.command })}`);
61
+ console.log(`- ${translator.t('evidence.exit_code', { code: result.exitCode })}`);
62
+ console.log(`- ${translator.t('evidence.output', { path: displayOutput })}`);
30
63
 
31
64
  return result;
32
65
  }
@@ -5,6 +5,7 @@ const { readPhaseApproval } = require('../lib/approvals');
5
5
  const { approvalCandidateCommand, buildApprovalCandidateReport, formatCandidateSummary } = require('../lib/ai/approval-candidates');
6
6
  const { readPlanReview } = require('../lib/ai/plan-review');
7
7
  const { listAgentProfiles } = require('../lib/agent-profiles');
8
+ const { translatorForHuman } = require('../lib/i18n/read-only-format');
8
9
  const { readProjectScanStatus } = require('../lib/project-scan');
9
10
  const { buildGraph, naturalNumberFromSliceId, readAllSlices } = require('../lib/slice-graph');
10
11
  const { hasQuiverInitializationEvidence, readState } = require('../lib/state');
@@ -257,6 +258,7 @@ function baseReport({ stage, label, blockers = [], nextCommand, suggestedCommand
257
258
  label,
258
259
  blockers,
259
260
  nextCommand,
261
+ next_command: nextCommand,
260
262
  suggestedCommands,
261
263
  facts,
262
264
  };
@@ -617,38 +619,129 @@ function detectFlowState(projectRoot) {
617
619
  });
618
620
  }
619
621
 
620
- function formatFlowReport(report) {
622
+ function formatFlowBlocker(blocker, translator) {
623
+ const text = String(blocker || '');
624
+ if (text === 'Quiver has not been initialized in this project.') {
625
+ return translator.t('flow.blocker.not_initialized');
626
+ }
627
+ if (text === 'Acceptance criteria draft exists but is not approved.') {
628
+ return translator.t('flow.blocker.acceptance_draft');
629
+ }
630
+ if (text === 'Acceptance criteria changed after approval.') {
631
+ return translator.t('flow.blocker.acceptance_stale');
632
+ }
633
+ if (text === 'Technical plan draft exists but has not been reviewed for production readiness.') {
634
+ return translator.t('flow.blocker.technical_plan_review_needed');
635
+ }
636
+ if (text === 'Technical plan review blocks approval.') {
637
+ return translator.t('flow.blocker.technical_plan_review_blocked');
638
+ }
639
+ if (text === 'Technical plan draft was reviewed but is not approved.') {
640
+ return translator.t('flow.blocker.technical_plan_draft');
641
+ }
642
+ if (text === 'Technical plan changed after approval and needs a fresh production review.') {
643
+ return translator.t('flow.blocker.technical_plan_changed_review_needed');
644
+ }
645
+ if (text === 'Technical plan changed after approval and latest review blocks approval.') {
646
+ return translator.t('flow.blocker.technical_plan_changed_review_blocked');
647
+ }
648
+ if (text === 'Technical plan changed after approval and the latest draft was reviewed.') {
649
+ return translator.t('flow.blocker.technical_plan_changed_reviewed');
650
+ }
651
+ if (text === 'Later slices are blocked until slice-00 is completed and committed.') {
652
+ return translator.t('flow.blocker.slice_00_required');
653
+ }
654
+ if (text === 'No ready slice was found. Review dependencies and statuses.') {
655
+ return translator.t('flow.blocker.no_ready_slice');
656
+ }
657
+ const missingDoc = text.match(/^Missing (docs\/[^.]+\.md)\.$/);
658
+ if (missingDoc) {
659
+ return translator.t('flow.blocker.missing_doc', { file: missingDoc[1] });
660
+ }
661
+ const missingProfiles = text.match(/^Missing (.+) agent profile(s?)\.$/);
662
+ if (missingProfiles) {
663
+ return translator.t('flow.blocker.missing_agent_profiles', { roles: missingProfiles[1] });
664
+ }
665
+ const planReviewStatus = text.match(/^Plan review status is (.+)\.$/);
666
+ if (planReviewStatus) {
667
+ return translator.t('flow.blocker.plan_review_status', { status: planReviewStatus[1] });
668
+ }
669
+ const couldNotReadSlices = text.match(/^Could not read slices: (.+)$/);
670
+ if (couldNotReadSlices) {
671
+ return translator.t('flow.blocker.could_not_read_slices', { error: couldNotReadSlices[1] });
672
+ }
673
+ if (text === 'No slice.json files found for the detected specs.') {
674
+ return translator.t('flow.blocker.no_slice_json');
675
+ }
676
+ const graphNotReady = text.match(/^Slice graph is not ready: (.+)$/);
677
+ if (graphNotReady) {
678
+ return translator.t('flow.blocker.slice_graph_not_ready', { error: graphNotReady[1] });
679
+ }
680
+ return text;
681
+ }
682
+
683
+ function formatFlowContextSource(contextSource, translator) {
684
+ const source = contextSource || {};
685
+ if (source.status === 'fresh') {
686
+ return translator.t('flow.context_source.fresh', {
687
+ path: source.artifactPath,
688
+ updatedAt: source.scanUpdatedAt,
689
+ });
690
+ }
691
+ if (source.status === 'legacy') {
692
+ return translator.t('flow.context_source.legacy', {
693
+ path: source.artifactPath,
694
+ updatedAt: source.scanUpdatedAt,
695
+ });
696
+ }
697
+ if (source.status === 'stale') {
698
+ return translator.t('flow.context_source.stale', { path: source.artifactPath });
699
+ }
700
+ if (source.status === 'partial' && source.artifactPath && !source.projectMapPath) {
701
+ return translator.t('flow.context_source.partial_scan_only', { path: source.artifactPath });
702
+ }
703
+ if (source.status === 'partial' && !source.artifactPath && source.projectMapPath) {
704
+ return translator.t('flow.context_source.partial_map_only');
705
+ }
706
+ if (source.status === 'invalid') {
707
+ return translator.t('flow.context_source.invalid', { error: source.error });
708
+ }
709
+ return translator.t('flow.context_source.missing');
710
+ }
711
+
712
+ function formatFlowReport(report, options = {}) {
713
+ const translator = translatorForHuman(options);
621
714
  const lines = [
622
- 'Quiver guided flow',
715
+ translator.t('flow.title'),
623
716
  '',
624
- 'Command path:',
625
- '- Bootstrap and remote use: npx create-quiver <command>',
626
- '- Short alias after local install: quiver <command>',
627
- `- Generated project script: ${report.facts.flowScriptCommand}`,
717
+ `${translator.t('flow.command_path')}:`,
718
+ `- ${translator.t('flow.bootstrap_remote')}: npx create-quiver <command>`,
719
+ `- ${translator.t('flow.short_alias')}: quiver <command>`,
720
+ `- ${translator.t('flow.generated_script')}: ${report.facts.flowScriptCommand}`,
628
721
  '',
629
- `Package manager: ${report.facts.packageManager}`,
630
- `Stage: ${report.label}`,
631
- `Next safe command: ${report.nextCommand}`,
632
- `Context source: ${report.facts.contextSource.summary}`,
722
+ `${translator.t('flow.package_manager')}: ${report.facts.packageManager}`,
723
+ `${translator.t('flow.stage')}: ${translator.t(`flow.stage.${report.stage}`)}`,
724
+ `${translator.t('flow.next_safe_command')}: ${report.nextCommand}`,
725
+ `${translator.t('flow.context_source')}: ${formatFlowContextSource(report.facts.contextSource, translator)}`,
633
726
  ];
634
727
 
635
728
  if (report.blockers.length > 0) {
636
- lines.push('', 'Blockers:');
729
+ lines.push('', `${translator.t('flow.blockers')}:`);
637
730
  for (const blocker of report.blockers) {
638
- lines.push(`- ${blocker}`);
731
+ lines.push(`- ${formatFlowBlocker(blocker, translator)}`);
639
732
  }
640
733
  }
641
734
 
642
- lines.push('', 'Suggested sequence:');
735
+ lines.push('', `${translator.t('flow.suggested_sequence')}:`);
643
736
  for (const command of report.suggestedCommands) {
644
737
  lines.push(`- ${command}`);
645
738
  }
646
739
 
647
740
  if (report.facts.specSlugs.length > 0) {
648
- lines.push('', `Specs found: ${report.facts.specSlugs.join(', ')}`);
741
+ lines.push('', `${translator.t('flow.specs_found')}: ${report.facts.specSlugs.join(', ')}`);
649
742
  }
650
743
 
651
- lines.push('', 'Safety: this command is read-only and does not call AI providers.');
744
+ lines.push('', translator.t('flow.safety_read_only'));
652
745
 
653
746
  return `${lines.join('\n')}\n`;
654
747
  }
@@ -661,7 +754,7 @@ async function runFlow(repoRoot, options = {}) {
661
754
  return report;
662
755
  }
663
756
 
664
- process.stdout.write(formatFlowReport(report));
757
+ process.stdout.write(formatFlowReport(report, options));
665
758
  return report;
666
759
  }
667
760
 
@@ -3,6 +3,7 @@ const { computeLevels, detectFileConflicts } = require('../lib/slice-graph');
3
3
  const { renderDotGraph } = require('../lib/renderers/dot');
4
4
  const { renderMermaidGraph } = require('../lib/renderers/mermaid');
5
5
  const { renderTreeGraph, isUnicodeEnabled } = require('../lib/renderers/tree');
6
+ const { createTranslator } = require('../lib/i18n/catalog');
6
7
 
7
8
  function toGraphNode(node) {
8
9
  return {
@@ -69,9 +70,14 @@ function collectGraph(repoRoot, options = {}) {
69
70
  }
70
71
 
71
72
  function formatHumanGraph(report, options = {}) {
73
+ const translator = createTranslator(options.language);
72
74
  const format = options.format || 'tree';
75
+ if (format === 'tree' && typeof options.level === 'number' && (!Array.isArray(report.levels) || report.levels.length === 0)) {
76
+ return `${translator.t('graph.empty.level', { level: options.level })}\n`;
77
+ }
73
78
  const sharedOptions = {
74
79
  showConflicts: options.showConflicts === true,
80
+ language: options.language,
75
81
  unicode: options.unicode === true || isUnicodeEnabled(options),
76
82
  };
77
83
 
@@ -87,12 +93,13 @@ function formatHumanGraph(report, options = {}) {
87
93
  return renderDotGraph(report, sharedOptions);
88
94
  }
89
95
 
90
- throw new Error(`create-quiver: unsupported graph format: ${format}`);
96
+ throw new Error(`create-quiver: ${translator.t('graph.error.unsupported_format', { format })}`);
91
97
  }
92
98
 
93
99
  function runGraph(repoRoot, options = {}) {
100
+ const translator = createTranslator(options.language);
94
101
  if (options.format && !['tree', 'mermaid', 'dot'].includes(options.format)) {
95
- throw new Error(`create-quiver: unsupported graph format: ${options.format}`);
102
+ throw new Error(`create-quiver: ${translator.t('graph.error.unsupported_format', { format: options.format })}`);
96
103
  }
97
104
 
98
105
  const report = collectGraph(repoRoot, options);
@@ -1,6 +1,7 @@
1
1
  const path = require('path');
2
2
  const readline = require('readline');
3
3
  const { collectPlan } = require('./plan');
4
+ const { formatStatus, translatorForHuman } = require('../lib/i18n/read-only-format');
4
5
  const { startSlice } = require('../lib/lifecycle');
5
6
 
6
7
  function toStartSliceCommand(slicePath) {
@@ -34,15 +35,16 @@ function collectNext(repoRoot, options = {}) {
34
35
  }
35
36
 
36
37
  function formatHumanNext(report, options = {}) {
37
- const lines = [options.allReady ? 'Ready slices' : 'Next ready slice'];
38
+ const translator = translatorForHuman(options);
39
+ const lines = [options.allReady ? translator.t('next.title.ready') : translator.t('next.title.next')];
38
40
 
39
41
  if (!report.next) {
40
- lines.push('No ready slices found.');
42
+ lines.push(translator.t('next.empty.ready'));
41
43
  if (report.include_completed && report.history.length > 0) {
42
44
  lines.push('');
43
- lines.push('Historical slices included by --include-completed:');
45
+ lines.push(`${translator.t('next.history_title')}:`);
44
46
  for (const item of report.history) {
45
- lines.push(`- ${item.ref} (${item.status})`);
47
+ lines.push(`- ${item.ref} (${formatStatus(item.status, translator)})`);
46
48
  }
47
49
  }
48
50
  return `${lines.join('\n')}\n`;
@@ -55,25 +57,25 @@ function formatHumanNext(report, options = {}) {
55
57
  if (options.allReady) {
56
58
  lines.push('');
57
59
  lines.push(`[${index + 1}] ${item.ref}`);
58
- lines.push(`Title: ${item.title}`);
59
- lines.push(`Status: ${item.status}`);
60
- lines.push(`Start: ${command}`);
60
+ lines.push(`${translator.t('next.label.title')}: ${item.title}`);
61
+ lines.push(`${translator.t('next.label.status')}: ${formatStatus(item.status, translator)}`);
62
+ lines.push(`${translator.t('next.label.start')}: ${command}`);
61
63
  } else {
62
- lines.push(`Slice: ${item.ref}`);
63
- lines.push(`Title: ${item.title}`);
64
- lines.push(`Status: ${item.status}`);
65
- lines.push(`Start: ${command}`);
64
+ lines.push(`${translator.t('next.label.slice')}: ${item.ref}`);
65
+ lines.push(`${translator.t('next.label.title')}: ${item.title}`);
66
+ lines.push(`${translator.t('next.label.status')}: ${formatStatus(item.status, translator)}`);
67
+ lines.push(`${translator.t('next.label.start')}: ${command}`);
66
68
  if (report.all_ready.length > 1) {
67
- lines.push(`Also ready: ${report.all_ready.slice(1).map((candidate) => candidate.ref).join(', ')}`);
69
+ lines.push(`${translator.t('next.label.also_ready')}: ${report.all_ready.slice(1).map((candidate) => candidate.ref).join(', ')}`);
68
70
  }
69
71
  }
70
72
  }
71
73
 
72
74
  if (report.include_completed && report.history.length > 0) {
73
75
  lines.push('');
74
- lines.push('Historical slices included by --include-completed:');
76
+ lines.push(`${translator.t('next.history_title')}:`);
75
77
  for (const item of report.history) {
76
- lines.push(`- ${item.ref} (${item.status})`);
78
+ lines.push(`- ${item.ref} (${formatStatus(item.status, translator)})`);
77
79
  }
78
80
  }
79
81
 
@@ -104,6 +106,7 @@ function promptConfirm(message, io = {}) {
104
106
 
105
107
  async function runNext(repoRoot, options = {}) {
106
108
  const report = collectNext(repoRoot, options);
109
+ const translator = translatorForHuman(options);
107
110
  const isTTY = options.isTTY || {
108
111
  stdin: Boolean(process.stdin.isTTY),
109
112
  stdout: Boolean(process.stdout.isTTY),
@@ -115,17 +118,17 @@ async function runNext(repoRoot, options = {}) {
115
118
  }
116
119
 
117
120
  if (!report.next) {
118
- process.stdout.write('No ready slices found.\n');
121
+ process.stdout.write(`${translator.t('next.empty.ready')}\n`);
119
122
  return report;
120
123
  }
121
124
 
122
- const confirmed = await (options.promptConfirm || promptConfirm)(`Start slice ${report.next.ref}?`);
125
+ const confirmed = await (options.promptConfirm || promptConfirm)(translator.t('next.prompt.start', { ref: report.next.ref }));
123
126
  if (confirmed) {
124
127
  const slicePath = path.resolve(repoRoot, report.next.slice_path);
125
128
  await Promise.resolve((options.startSliceFn || startSlice)(slicePath, { allowDraft: true }));
126
- process.stdout.write(`Started: ${report.next.ref}\n`);
129
+ process.stdout.write(`${translator.t('next.started', { ref: report.next.ref })}\n`);
127
130
  } else {
128
- process.stdout.write('Aborted.\n');
131
+ process.stdout.write(`${translator.t('next.aborted')}\n`);
129
132
  }
130
133
  return report;
131
134
  }