create-quiver 0.15.3 → 0.15.4

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 (236) hide show
  1. package/.github/workflows/ci.yml +3 -0
  2. package/AGENTS.md.es.template +37 -0
  3. package/docs/AI_CONTEXT.md.es.template +35 -0
  4. package/docs/AI_ONBOARDING_PROMPT.md.es.template +22 -0
  5. package/docs/CLI_UX_GUIDE.md +46 -0
  6. package/docs/COMMANDS.md.es.template +28 -0
  7. package/docs/CONTEXTO.md.es.template +33 -0
  8. package/docs/DECISIONS.md.es.template +17 -0
  9. package/docs/GITFLOW_PR_GUIDE.md.es.template +25 -0
  10. package/docs/INDEX.md +10 -1
  11. package/docs/INDEX.md.es.template +36 -0
  12. package/docs/STATUS.md.es.template +28 -0
  13. package/docs/SUPPORT_MATRIX.md.es.template +22 -0
  14. package/docs/TESTING_GUIDE_FOR_AI.md.es.template +19 -0
  15. package/docs/TROUBLESHOOTING.md.es.template +35 -0
  16. package/docs/WORKFLOW.md.es.template +29 -0
  17. package/docs/ai/LESSONS.md.es.template +24 -0
  18. package/docs/getting-started/installation.md +19 -0
  19. package/docs/reference/commands.md +55 -1
  20. package/package.json +1 -1
  21. package/specs/quiver-v37-cli-i18n-foundation/EVIDENCE_REPORT.md +73 -0
  22. package/specs/quiver-v37-cli-i18n-foundation/EXECUTION_PLAN.md +34 -0
  23. package/specs/quiver-v37-cli-i18n-foundation/SPEC.md +91 -0
  24. package/specs/quiver-v37-cli-i18n-foundation/STATUS.md +29 -0
  25. package/specs/quiver-v37-cli-i18n-foundation/pr.md +97 -0
  26. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/CLOSURE_BRIEF.md +10 -0
  27. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/EXECUTION_BRIEF.md +22 -0
  28. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/slice.json +54 -0
  29. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/CLOSURE_BRIEF.md +30 -0
  30. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/EXECUTION_BRIEF.md +27 -0
  31. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/slice.json +66 -0
  32. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/CLOSURE_BRIEF.md +27 -0
  33. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/EXECUTION_BRIEF.md +26 -0
  34. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/slice.json +62 -0
  35. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/CLOSURE_BRIEF.md +32 -0
  36. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/EXECUTION_BRIEF.md +25 -0
  37. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/slice.json +66 -0
  38. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/CLOSURE_BRIEF.md +30 -0
  39. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/EXECUTION_BRIEF.md +24 -0
  40. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/slice.json +65 -0
  41. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/CLOSURE_BRIEF.md +27 -0
  42. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/EXECUTION_BRIEF.md +23 -0
  43. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/slice.json +67 -0
  44. package/specs/quiver-v38-cli-i18n-read-only-commands/EVIDENCE_REPORT.md +69 -0
  45. package/specs/quiver-v38-cli-i18n-read-only-commands/EXECUTION_PLAN.md +25 -0
  46. package/specs/quiver-v38-cli-i18n-read-only-commands/SPEC.md +52 -0
  47. package/specs/quiver-v38-cli-i18n-read-only-commands/STATUS.md +24 -0
  48. package/specs/quiver-v38-cli-i18n-read-only-commands/pr.md +119 -0
  49. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/CLOSURE_BRIEF.md +10 -0
  50. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/EXECUTION_BRIEF.md +21 -0
  51. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/slice.json +53 -0
  52. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/CLOSURE_BRIEF.md +17 -0
  53. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/EXECUTION_BRIEF.md +23 -0
  54. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/slice.json +69 -0
  55. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/CLOSURE_BRIEF.md +13 -0
  56. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/EXECUTION_BRIEF.md +22 -0
  57. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/slice.json +77 -0
  58. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/CLOSURE_BRIEF.md +12 -0
  59. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/EXECUTION_BRIEF.md +22 -0
  60. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/slice.json +66 -0
  61. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/CLOSURE_BRIEF.md +13 -0
  62. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/EXECUTION_BRIEF.md +22 -0
  63. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/slice.json +61 -0
  64. package/specs/quiver-v39-cli-i18n-setup-onboarding/EVIDENCE_REPORT.md +71 -0
  65. package/specs/quiver-v39-cli-i18n-setup-onboarding/EXECUTION_PLAN.md +25 -0
  66. package/specs/quiver-v39-cli-i18n-setup-onboarding/SPEC.md +53 -0
  67. package/specs/quiver-v39-cli-i18n-setup-onboarding/STATUS.md +24 -0
  68. package/specs/quiver-v39-cli-i18n-setup-onboarding/pr.md +104 -0
  69. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/CLOSURE_BRIEF.md +10 -0
  70. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/EXECUTION_BRIEF.md +21 -0
  71. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/slice.json +53 -0
  72. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/CLOSURE_BRIEF.md +12 -0
  73. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/EXECUTION_BRIEF.md +23 -0
  74. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/slice.json +68 -0
  75. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/CLOSURE_BRIEF.md +12 -0
  76. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/EXECUTION_BRIEF.md +23 -0
  77. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/slice.json +62 -0
  78. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/CLOSURE_BRIEF.md +12 -0
  79. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/EXECUTION_BRIEF.md +22 -0
  80. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/slice.json +72 -0
  81. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/CLOSURE_BRIEF.md +15 -0
  82. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/EXECUTION_BRIEF.md +22 -0
  83. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/slice.json +61 -0
  84. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/EVIDENCE_REPORT.md +50 -0
  85. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/EXECUTION_PLAN.md +25 -0
  86. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/SPEC.md +52 -0
  87. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/STATUS.md +24 -0
  88. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/pr.md +94 -0
  89. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/CLOSURE_BRIEF.md +10 -0
  90. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/EXECUTION_BRIEF.md +21 -0
  91. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/slice.json +53 -0
  92. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/CLOSURE_BRIEF.md +12 -0
  93. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/EXECUTION_BRIEF.md +22 -0
  94. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/slice.json +63 -0
  95. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/CLOSURE_BRIEF.md +10 -0
  96. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/EXECUTION_BRIEF.md +22 -0
  97. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/slice.json +63 -0
  98. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/CLOSURE_BRIEF.md +10 -0
  99. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/EXECUTION_BRIEF.md +22 -0
  100. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/slice.json +72 -0
  101. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/CLOSURE_BRIEF.md +15 -0
  102. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/EXECUTION_BRIEF.md +22 -0
  103. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/slice.json +69 -0
  104. package/specs/quiver-v41-cli-i18n-ai-lifecycle/EVIDENCE_REPORT.md +90 -0
  105. package/specs/quiver-v41-cli-i18n-ai-lifecycle/EXECUTION_PLAN.md +33 -0
  106. package/specs/quiver-v41-cli-i18n-ai-lifecycle/SPEC.md +57 -0
  107. package/specs/quiver-v41-cli-i18n-ai-lifecycle/STATUS.md +26 -0
  108. package/specs/quiver-v41-cli-i18n-ai-lifecycle/pr.md +103 -0
  109. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/CLOSURE_BRIEF.md +10 -0
  110. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/EXECUTION_BRIEF.md +21 -0
  111. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/slice.json +53 -0
  112. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/CLOSURE_BRIEF.md +13 -0
  113. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/EXECUTION_BRIEF.md +22 -0
  114. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/slice.json +68 -0
  115. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/CLOSURE_BRIEF.md +12 -0
  116. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/EXECUTION_BRIEF.md +22 -0
  117. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/slice.json +66 -0
  118. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/CLOSURE_BRIEF.md +12 -0
  119. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/EXECUTION_BRIEF.md +23 -0
  120. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/slice.json +68 -0
  121. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/CLOSURE_BRIEF.md +13 -0
  122. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/EXECUTION_BRIEF.md +23 -0
  123. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/slice.json +72 -0
  124. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/CLOSURE_BRIEF.md +15 -0
  125. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/EXECUTION_BRIEF.md +22 -0
  126. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/slice.json +66 -0
  127. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/CLOSURE_BRIEF.md +11 -0
  128. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/EXECUTION_BRIEF.md +22 -0
  129. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/slice.json +70 -0
  130. package/specs/quiver-v42-cli-i18n-generated-docs/EVIDENCE_REPORT.md +64 -0
  131. package/specs/quiver-v42-cli-i18n-generated-docs/EXECUTION_PLAN.md +26 -0
  132. package/specs/quiver-v42-cli-i18n-generated-docs/SPEC.md +52 -0
  133. package/specs/quiver-v42-cli-i18n-generated-docs/STATUS.md +24 -0
  134. package/specs/quiver-v42-cli-i18n-generated-docs/pr.md +125 -0
  135. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/CLOSURE_BRIEF.md +10 -0
  136. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/EXECUTION_BRIEF.md +21 -0
  137. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/slice.json +53 -0
  138. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/CLOSURE_BRIEF.md +10 -0
  139. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/EXECUTION_BRIEF.md +22 -0
  140. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/slice.json +62 -0
  141. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/CLOSURE_BRIEF.md +11 -0
  142. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/EXECUTION_BRIEF.md +22 -0
  143. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/slice.json +72 -0
  144. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/CLOSURE_BRIEF.md +12 -0
  145. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/EXECUTION_BRIEF.md +22 -0
  146. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/slice.json +60 -0
  147. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/CLOSURE_BRIEF.md +16 -0
  148. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/EXECUTION_BRIEF.md +22 -0
  149. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/slice.json +62 -0
  150. package/specs/quiver-v43-cli-i18n-audit-release-readiness/EVIDENCE_REPORT.md +203 -0
  151. package/specs/quiver-v43-cli-i18n-audit-release-readiness/EXECUTION_PLAN.md +27 -0
  152. package/specs/quiver-v43-cli-i18n-audit-release-readiness/SPEC.md +54 -0
  153. package/specs/quiver-v43-cli-i18n-audit-release-readiness/STATUS.md +24 -0
  154. package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +545 -0
  155. package/specs/quiver-v43-cli-i18n-audit-release-readiness/cross-platform-smoke-matrix.md +35 -0
  156. package/specs/quiver-v43-cli-i18n-audit-release-readiness/pr.md +155 -0
  157. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/CLOSURE_BRIEF.md +10 -0
  158. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/EXECUTION_BRIEF.md +21 -0
  159. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/slice.json +53 -0
  160. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/CLOSURE_BRIEF.md +13 -0
  161. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/EXECUTION_BRIEF.md +23 -0
  162. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/slice.json +62 -0
  163. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/CLOSURE_BRIEF.md +18 -0
  164. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/EXECUTION_BRIEF.md +22 -0
  165. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/slice.json +59 -0
  166. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/CLOSURE_BRIEF.md +15 -0
  167. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/EXECUTION_BRIEF.md +23 -0
  168. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/slice.json +62 -0
  169. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/CLOSURE_BRIEF.md +17 -0
  170. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/EXECUTION_BRIEF.md +24 -0
  171. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/slice.json +66 -0
  172. package/specs/quiver-v44-provider-live-output-tui-lite/EVIDENCE_REPORT.md +18 -0
  173. package/specs/quiver-v44-provider-live-output-tui-lite/EXECUTION_PLAN.md +31 -0
  174. package/specs/quiver-v44-provider-live-output-tui-lite/SPEC.md +118 -0
  175. package/specs/quiver-v44-provider-live-output-tui-lite/STATUS.md +25 -0
  176. package/specs/quiver-v44-provider-live-output-tui-lite/pr.md +92 -0
  177. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/CLOSURE_BRIEF.md +11 -0
  178. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/EXECUTION_BRIEF.md +23 -0
  179. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/slice.json +64 -0
  180. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/CLOSURE_BRIEF.md +10 -0
  181. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/EXECUTION_BRIEF.md +24 -0
  182. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/slice.json +65 -0
  183. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/CLOSURE_BRIEF.md +10 -0
  184. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/EXECUTION_BRIEF.md +24 -0
  185. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/slice.json +70 -0
  186. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/CLOSURE_BRIEF.md +10 -0
  187. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/EXECUTION_BRIEF.md +25 -0
  188. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/slice.json +70 -0
  189. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/CLOSURE_BRIEF.md +10 -0
  190. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/EXECUTION_BRIEF.md +26 -0
  191. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/slice.json +72 -0
  192. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/CLOSURE_BRIEF.md +15 -0
  193. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/EXECUTION_BRIEF.md +26 -0
  194. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/slice.json +75 -0
  195. package/specs/quiver-v45-ci-actions-node24-readiness/EVIDENCE_REPORT.md +30 -0
  196. package/specs/quiver-v45-ci-actions-node24-readiness/EXECUTION_PLAN.md +22 -0
  197. package/specs/quiver-v45-ci-actions-node24-readiness/SPEC.md +49 -0
  198. package/specs/quiver-v45-ci-actions-node24-readiness/STATUS.md +21 -0
  199. package/specs/quiver-v45-ci-actions-node24-readiness/pr.md +67 -0
  200. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/CLOSURE_BRIEF.md +10 -0
  201. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/EXECUTION_BRIEF.md +21 -0
  202. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/slice.json +48 -0
  203. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/CLOSURE_BRIEF.md +14 -0
  204. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/EXECUTION_BRIEF.md +23 -0
  205. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/slice.json +65 -0
  206. package/src/create-quiver/commands/ai.js +485 -307
  207. package/src/create-quiver/commands/config.js +124 -0
  208. package/src/create-quiver/commands/demo.js +2 -2
  209. package/src/create-quiver/commands/evidence.js +6 -4
  210. package/src/create-quiver/commands/flow.js +108 -16
  211. package/src/create-quiver/commands/graph.js +1 -0
  212. package/src/create-quiver/commands/next.js +21 -18
  213. package/src/create-quiver/commands/plan.js +23 -6
  214. package/src/create-quiver/commands/spec.js +66 -57
  215. package/src/create-quiver/index.js +514 -139
  216. package/src/create-quiver/lib/ai/execution-plan.js +23 -20
  217. package/src/create-quiver/lib/ai/executor.js +60 -44
  218. package/src/create-quiver/lib/ai/export-state.js +75 -64
  219. package/src/create-quiver/lib/ai/github.js +24 -21
  220. package/src/create-quiver/lib/ai/run-state.js +28 -25
  221. package/src/create-quiver/lib/dashboard.js +154 -111
  222. package/src/create-quiver/lib/demo.js +14 -12
  223. package/src/create-quiver/lib/handoff.js +16 -7
  224. package/src/create-quiver/lib/i18n/catalog.js +152 -0
  225. package/src/create-quiver/lib/i18n/language.js +279 -0
  226. package/src/create-quiver/lib/i18n/messages/en.js +853 -0
  227. package/src/create-quiver/lib/i18n/messages/es.js +968 -0
  228. package/src/create-quiver/lib/i18n/read-only-format.js +26 -0
  229. package/src/create-quiver/lib/i18n/templates.js +172 -0
  230. package/src/create-quiver/lib/init-docs.js +18 -4
  231. package/src/create-quiver/lib/init-layout.js +6 -0
  232. package/src/create-quiver/lib/lifecycle.js +53 -46
  233. package/src/create-quiver/lib/readiness.js +77 -67
  234. package/src/create-quiver/lib/renderers/tree.js +9 -6
  235. package/src/create-quiver/lib/spec-worktrees.js +34 -30
  236. package/src/create-quiver/lib/version.js +11 -9
@@ -0,0 +1,124 @@
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
+
14
+ function formatError(message) {
15
+ return `create-quiver: ${message}`;
16
+ }
17
+
18
+ function toJsonWarning(warning) {
19
+ return {
20
+ code: warning.code,
21
+ source: warning.source,
22
+ requested_language: warning.requestedLanguage,
23
+ fallback_language: warning.fallbackLanguage,
24
+ supported_languages: warning.supportedLanguages,
25
+ };
26
+ }
27
+
28
+ function formatProjectRelativePath(repoRoot, filePath) {
29
+ return path.relative(repoRoot, filePath).split(path.sep).join('/') || '.';
30
+ }
31
+
32
+ function validateLanguageForSet(language) {
33
+ const normalized = normalizeLanguage(language);
34
+ if (!normalized || normalized !== String(language || '').trim().toLowerCase()) {
35
+ throw new Error(formatError(`unsupported language: ${language || '<missing>'}. Supported languages: ${SUPPORTED_LANGUAGES.join(', ')}. Run: npx create-quiver config language set ${DEFAULT_LANGUAGE}`));
36
+ }
37
+ return normalized;
38
+ }
39
+
40
+ function runLanguageShow(repoRoot, options = {}) {
41
+ const resolution = options.languageResolution || {
42
+ language: DEFAULT_LANGUAGE,
43
+ source: 'default',
44
+ warnings: [],
45
+ };
46
+ const warnings = resolution.warnings || [];
47
+
48
+ if (options.json) {
49
+ process.stdout.write(`${JSON.stringify({
50
+ schema_version: 1,
51
+ language: resolution.language,
52
+ source: resolution.source,
53
+ requested_source: resolution.requestedSource || null,
54
+ requested_language: resolution.requestedLanguage || null,
55
+ warnings: warnings.map(toJsonWarning),
56
+ }, null, 2)}\n`);
57
+ return;
58
+ }
59
+
60
+ const lines = [
61
+ 'Quiver config language',
62
+ `Language: ${resolution.language}`,
63
+ `Source: ${resolution.source}`,
64
+ ];
65
+ for (const warning of warnings) {
66
+ lines.push(formatLanguageWarning(warning));
67
+ }
68
+ process.stdout.write(`${lines.join('\n')}\n`);
69
+ }
70
+
71
+ function runLanguageSet(repoRoot, options = {}) {
72
+ const language = validateLanguageForSet(options.value);
73
+ const global = options.global === true;
74
+ const configPath = global ? globalLanguageConfigPath() : projectLanguageConfigPath(repoRoot);
75
+
76
+ if (global) {
77
+ writeGlobalLanguageConfig(language);
78
+ } else {
79
+ writeProjectLanguageConfig(repoRoot, language);
80
+ }
81
+
82
+ const displayPath = global ? '~/.quiver/config.json' : formatProjectRelativePath(repoRoot, configPath);
83
+ const scope = global ? 'global' : 'project';
84
+
85
+ if (options.json) {
86
+ process.stdout.write(`${JSON.stringify({
87
+ schema_version: 1,
88
+ action: 'set',
89
+ scope,
90
+ language,
91
+ path: displayPath,
92
+ }, null, 2)}\n`);
93
+ return;
94
+ }
95
+
96
+ process.stdout.write([
97
+ 'Quiver config language updated',
98
+ `Scope: ${scope}`,
99
+ `Path: ${displayPath}`,
100
+ `Language: ${language}`,
101
+ ].join('\n') + '\n');
102
+ }
103
+
104
+ function runConfig(repoRoot, options = {}) {
105
+ if (options.section !== 'language') {
106
+ throw new Error(formatError(`unsupported config section: ${options.section || '(missing)'}. Supported sections: language`));
107
+ }
108
+
109
+ if (options.command === 'show') {
110
+ runLanguageShow(repoRoot, options);
111
+ return;
112
+ }
113
+
114
+ if (options.command === 'set') {
115
+ runLanguageSet(repoRoot, options);
116
+ return;
117
+ }
118
+
119
+ throw new Error(formatError(`unsupported config language command: ${options.command || '(missing)'}. Supported commands: show, set`));
120
+ }
121
+
122
+ module.exports = {
123
+ runConfig,
124
+ };
@@ -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
2
  const { runEvidenceCommand } = 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,6 +12,7 @@ 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 || '';
15
17
  if (options.subcommand !== 'run') {
16
18
  throw new Error('create-quiver: missing evidence subcommand. Use: npx create-quiver evidence run -- <command>');
@@ -23,10 +25,10 @@ function runEvidence(repoRoot, options = {}) {
23
25
  });
24
26
  const displayOutput = formatOutputPath(repoRoot, result.outputPath);
25
27
 
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}`);
28
+ console.log(translator.t('evidence.recorded'));
29
+ console.log(`- ${translator.t('evidence.command', { command: result.record.command })}`);
30
+ console.log(`- ${translator.t('evidence.exit_code', { code: result.exitCode })}`);
31
+ console.log(`- ${translator.t('evidence.output', { path: displayOutput })}`);
30
32
 
31
33
  return result;
32
34
  }
@@ -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');
@@ -617,38 +618,129 @@ function detectFlowState(projectRoot) {
617
618
  });
618
619
  }
619
620
 
620
- function formatFlowReport(report) {
621
+ function formatFlowBlocker(blocker, translator) {
622
+ const text = String(blocker || '');
623
+ if (text === 'Quiver has not been initialized in this project.') {
624
+ return translator.t('flow.blocker.not_initialized');
625
+ }
626
+ if (text === 'Acceptance criteria draft exists but is not approved.') {
627
+ return translator.t('flow.blocker.acceptance_draft');
628
+ }
629
+ if (text === 'Acceptance criteria changed after approval.') {
630
+ return translator.t('flow.blocker.acceptance_stale');
631
+ }
632
+ if (text === 'Technical plan draft exists but has not been reviewed for production readiness.') {
633
+ return translator.t('flow.blocker.technical_plan_review_needed');
634
+ }
635
+ if (text === 'Technical plan review blocks approval.') {
636
+ return translator.t('flow.blocker.technical_plan_review_blocked');
637
+ }
638
+ if (text === 'Technical plan draft was reviewed but is not approved.') {
639
+ return translator.t('flow.blocker.technical_plan_draft');
640
+ }
641
+ if (text === 'Technical plan changed after approval and needs a fresh production review.') {
642
+ return translator.t('flow.blocker.technical_plan_changed_review_needed');
643
+ }
644
+ if (text === 'Technical plan changed after approval and latest review blocks approval.') {
645
+ return translator.t('flow.blocker.technical_plan_changed_review_blocked');
646
+ }
647
+ if (text === 'Technical plan changed after approval and the latest draft was reviewed.') {
648
+ return translator.t('flow.blocker.technical_plan_changed_reviewed');
649
+ }
650
+ if (text === 'Later slices are blocked until slice-00 is completed and committed.') {
651
+ return translator.t('flow.blocker.slice_00_required');
652
+ }
653
+ if (text === 'No ready slice was found. Review dependencies and statuses.') {
654
+ return translator.t('flow.blocker.no_ready_slice');
655
+ }
656
+ const missingDoc = text.match(/^Missing (docs\/[^.]+\.md)\.$/);
657
+ if (missingDoc) {
658
+ return translator.t('flow.blocker.missing_doc', { file: missingDoc[1] });
659
+ }
660
+ const missingProfiles = text.match(/^Missing (.+) agent profile(s?)\.$/);
661
+ if (missingProfiles) {
662
+ return translator.t('flow.blocker.missing_agent_profiles', { roles: missingProfiles[1] });
663
+ }
664
+ const planReviewStatus = text.match(/^Plan review status is (.+)\.$/);
665
+ if (planReviewStatus) {
666
+ return translator.t('flow.blocker.plan_review_status', { status: planReviewStatus[1] });
667
+ }
668
+ const couldNotReadSlices = text.match(/^Could not read slices: (.+)$/);
669
+ if (couldNotReadSlices) {
670
+ return translator.t('flow.blocker.could_not_read_slices', { error: couldNotReadSlices[1] });
671
+ }
672
+ if (text === 'No slice.json files found for the detected specs.') {
673
+ return translator.t('flow.blocker.no_slice_json');
674
+ }
675
+ const graphNotReady = text.match(/^Slice graph is not ready: (.+)$/);
676
+ if (graphNotReady) {
677
+ return translator.t('flow.blocker.slice_graph_not_ready', { error: graphNotReady[1] });
678
+ }
679
+ return text;
680
+ }
681
+
682
+ function formatFlowContextSource(contextSource, translator) {
683
+ const source = contextSource || {};
684
+ if (source.status === 'fresh') {
685
+ return translator.t('flow.context_source.fresh', {
686
+ path: source.artifactPath,
687
+ updatedAt: source.scanUpdatedAt,
688
+ });
689
+ }
690
+ if (source.status === 'legacy') {
691
+ return translator.t('flow.context_source.legacy', {
692
+ path: source.artifactPath,
693
+ updatedAt: source.scanUpdatedAt,
694
+ });
695
+ }
696
+ if (source.status === 'stale') {
697
+ return translator.t('flow.context_source.stale', { path: source.artifactPath });
698
+ }
699
+ if (source.status === 'partial' && source.artifactPath && !source.projectMapPath) {
700
+ return translator.t('flow.context_source.partial_scan_only', { path: source.artifactPath });
701
+ }
702
+ if (source.status === 'partial' && !source.artifactPath && source.projectMapPath) {
703
+ return translator.t('flow.context_source.partial_map_only');
704
+ }
705
+ if (source.status === 'invalid') {
706
+ return translator.t('flow.context_source.invalid', { error: source.error });
707
+ }
708
+ return translator.t('flow.context_source.missing');
709
+ }
710
+
711
+ function formatFlowReport(report, options = {}) {
712
+ const translator = translatorForHuman(options);
621
713
  const lines = [
622
- 'Quiver guided flow',
714
+ translator.t('flow.title'),
623
715
  '',
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}`,
716
+ `${translator.t('flow.command_path')}:`,
717
+ `- ${translator.t('flow.bootstrap_remote')}: npx create-quiver <command>`,
718
+ `- ${translator.t('flow.short_alias')}: quiver <command>`,
719
+ `- ${translator.t('flow.generated_script')}: ${report.facts.flowScriptCommand}`,
628
720
  '',
629
- `Package manager: ${report.facts.packageManager}`,
630
- `Stage: ${report.label}`,
631
- `Next safe command: ${report.nextCommand}`,
632
- `Context source: ${report.facts.contextSource.summary}`,
721
+ `${translator.t('flow.package_manager')}: ${report.facts.packageManager}`,
722
+ `${translator.t('flow.stage')}: ${translator.t(`flow.stage.${report.stage}`)}`,
723
+ `${translator.t('flow.next_safe_command')}: ${report.nextCommand}`,
724
+ `${translator.t('flow.context_source')}: ${formatFlowContextSource(report.facts.contextSource, translator)}`,
633
725
  ];
634
726
 
635
727
  if (report.blockers.length > 0) {
636
- lines.push('', 'Blockers:');
728
+ lines.push('', `${translator.t('flow.blockers')}:`);
637
729
  for (const blocker of report.blockers) {
638
- lines.push(`- ${blocker}`);
730
+ lines.push(`- ${formatFlowBlocker(blocker, translator)}`);
639
731
  }
640
732
  }
641
733
 
642
- lines.push('', 'Suggested sequence:');
734
+ lines.push('', `${translator.t('flow.suggested_sequence')}:`);
643
735
  for (const command of report.suggestedCommands) {
644
736
  lines.push(`- ${command}`);
645
737
  }
646
738
 
647
739
  if (report.facts.specSlugs.length > 0) {
648
- lines.push('', `Specs found: ${report.facts.specSlugs.join(', ')}`);
740
+ lines.push('', `${translator.t('flow.specs_found')}: ${report.facts.specSlugs.join(', ')}`);
649
741
  }
650
742
 
651
- lines.push('', 'Safety: this command is read-only and does not call AI providers.');
743
+ lines.push('', translator.t('flow.safety_read_only'));
652
744
 
653
745
  return `${lines.join('\n')}\n`;
654
746
  }
@@ -661,7 +753,7 @@ async function runFlow(repoRoot, options = {}) {
661
753
  return report;
662
754
  }
663
755
 
664
- process.stdout.write(formatFlowReport(report));
756
+ process.stdout.write(formatFlowReport(report, options));
665
757
  return report;
666
758
  }
667
759
 
@@ -72,6 +72,7 @@ function formatHumanGraph(report, options = {}) {
72
72
  const format = options.format || 'tree';
73
73
  const sharedOptions = {
74
74
  showConflicts: options.showConflicts === true,
75
+ language: options.language,
75
76
  unicode: options.unicode === true || isUnicodeEnabled(options),
76
77
  };
77
78
 
@@ -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
  }
@@ -1,4 +1,5 @@
1
1
  const { relativePosixPath } = require('../lib/paths');
2
+ const { formatStatus, translatorForHuman } = require('../lib/i18n/read-only-format');
2
3
  const { filterSlicesForExecution, resolveProjectState } = require('../lib/project-state-resolver');
3
4
  const { topoSort } = require('../lib/slice-graph');
4
5
 
@@ -147,13 +148,21 @@ function collectPlan(repoRoot, options = {}) {
147
148
  }
148
149
 
149
150
  function formatHumanPlan(report, options = {}) {
151
+ const translator = translatorForHuman(options);
150
152
  const unicode = Boolean(options.unicode) || /UTF-8/i.test(process.env.LANG || '');
151
- const title = options.onlyReady ? 'Ready slices' : (report.include_completed ? 'Quiver plan (including completed)' : 'Quiver plan');
153
+ const title = options.onlyReady
154
+ ? translator.t('plan.title.ready')
155
+ : (report.include_completed ? translator.t('plan.title.including_completed') : translator.t('plan.title'));
152
156
  const pathSeparator = unicode ? ' → ' : ' -> ';
153
- const lines = [title, `Total hours: ${report.total_hours}`, `Critical path: ${report.critical_path.length > 0 ? report.critical_path.join(pathSeparator) : '-'}`, ''];
157
+ const lines = [
158
+ title,
159
+ `${translator.t('plan.total_hours')}: ${report.total_hours}`,
160
+ `${translator.t('plan.critical_path')}: ${report.critical_path.length > 0 ? report.critical_path.join(pathSeparator) : '-'}`,
161
+ '',
162
+ ];
154
163
 
155
164
  if (report.plan.length === 0) {
156
- lines.push(report.include_completed ? 'No slices found for the selected filters.' : 'No pending slices found.');
165
+ lines.push(report.include_completed ? translator.t('plan.empty.filtered') : translator.t('plan.empty.pending'));
157
166
  return `${lines.join('\n')}\n`;
158
167
  }
159
168
 
@@ -163,15 +172,23 @@ function formatHumanPlan(report, options = {}) {
163
172
  item.ref,
164
173
  item.title,
165
174
  `${item.hours}`,
166
- item.status,
175
+ formatStatus(item.status, translator),
167
176
  ]);
168
177
 
178
+ const headers = [
179
+ translator.t('plan.header.index'),
180
+ translator.t('plan.header.ticket'),
181
+ translator.t('plan.header.spec_slice'),
182
+ translator.t('plan.header.title'),
183
+ translator.t('plan.header.hours'),
184
+ translator.t('plan.header.status'),
185
+ ];
169
186
  const widths = rows[0].map((_, colIndex) => Math.max(
170
187
  rows.reduce((max, row) => Math.max(max, row[colIndex].length), 0),
171
- ['[N]', 'TICKET', 'SPEC/SLICE', 'TITLE', 'HOURS', 'STATUS'][colIndex].length,
188
+ headers[colIndex].length,
172
189
  ));
173
190
 
174
- lines.push(['[N]', 'TICKET', 'SPEC/SLICE', 'TITLE', 'HOURS', 'STATUS'].map((label, index) => label.padEnd(widths[index])).join(' '));
191
+ lines.push(headers.map((label, index) => label.padEnd(widths[index])).join(' '));
175
192
  lines.push(widths.map((width) => '-'.repeat(width)).join(' '));
176
193
 
177
194
  for (const row of rows) {