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
@@ -2,6 +2,7 @@ const fs = require('node:fs');
2
2
  const path = require('node:path');
3
3
 
4
4
  const { collectLifecycleExport } = require('./ai/export-state');
5
+ const { createTranslator } = require('./i18n/catalog');
5
6
  const {
6
7
  collectActiveSliceState,
7
8
  filterSlicesForExecution,
@@ -41,6 +42,36 @@ class DashboardError extends Error {
41
42
  }
42
43
  }
43
44
 
45
+ function translatorForOptions(options = {}) {
46
+ return createTranslator(options.json ? 'en' : options.language);
47
+ }
48
+
49
+ function formatStatus(status, translator) {
50
+ const key = `status.${String(status || '').replace(/-/g, '_')}`;
51
+ const translated = translator.t(key);
52
+ return translated.startsWith('[missing:') ? String(status || '') : translated;
53
+ }
54
+
55
+ function formatWarningMessage(warning, specSlug, translator) {
56
+ if (warning.code === 'NO_SPECS_FOUND') {
57
+ return translator.t('dashboard.warning.no_specs_found');
58
+ }
59
+ if (warning.code === 'NO_VISIBLE_SLICES') {
60
+ return specSlug
61
+ ? translator.t('dashboard.warning.no_visible_slices_for_spec', { spec: specSlug })
62
+ : translator.t('dashboard.warning.no_visible_slices');
63
+ }
64
+ return warning.message;
65
+ }
66
+
67
+ function translateIfCatalogKey(value, translator) {
68
+ const text = String(value || '');
69
+ if (!text.startsWith('dashboard.')) {
70
+ return text;
71
+ }
72
+ return translator.t(text);
73
+ }
74
+
44
75
  function compareRefs(left, right) {
45
76
  return String(left || '').localeCompare(String(right || ''));
46
77
  }
@@ -405,6 +436,7 @@ function buildErrorPayload(error) {
405
436
  }
406
437
 
407
438
  function collectDashboardReport(projectRoot, options = {}) {
439
+ const translator = translatorForOptions(options);
408
440
  const specSlug = options.specSlug ? String(options.specSlug).trim() : '';
409
441
  const includeCompleted = options.includeCompleted === true;
410
442
  const specDirs = listSpecDirectories(projectRoot);
@@ -413,7 +445,7 @@ function collectDashboardReport(projectRoot, options = {}) {
413
445
  if (specSlug && !selectedSpecDir) {
414
446
  throw new DashboardError(
415
447
  'SPEC_NOT_FOUND',
416
- `Spec '${specSlug}' was not found in specs/ or specs-fix/.`,
448
+ translator.t('dashboard.error.spec_not_found', { spec: specSlug }),
417
449
  'npx create-quiver ai specs list',
418
450
  );
419
451
  }
@@ -530,8 +562,8 @@ function collectDashboardReport(projectRoot, options = {}) {
530
562
  };
531
563
  }
532
564
 
533
- function formatProgress(progress) {
534
- return `${progress.completed}/${progress.total} completed, ${progress.open} open, ${progress.blocked} blocked, ${progress.percent}%`;
565
+ function formatProgress(progress, translator = createTranslator()) {
566
+ return `${progress.completed}/${progress.total} ${translator.t('status.completed')}, ${progress.open} ${translator.t('dashboard.open')}, ${progress.blocked} ${translator.t('status.blocked')}, ${progress.percent}%`;
535
567
  }
536
568
 
537
569
  function dashboardOptionError(message, nextCommand = 'npx create-quiver dashboard --help') {
@@ -545,13 +577,13 @@ function parseDashboardLimit(rawLimit, errors) {
545
577
 
546
578
  const value = String(rawLimit).trim();
547
579
  if (!/^[1-9]\d*$/.test(value)) {
548
- errors.push('invalid value for --limit: expected an integer from 1 to 100');
580
+ errors.push('dashboard.limit.invalid');
549
581
  return DEFAULT_DASHBOARD_LIMIT;
550
582
  }
551
583
 
552
584
  const parsed = Number.parseInt(value, 10);
553
585
  if (parsed > MAX_DASHBOARD_LIMIT) {
554
- errors.push('invalid value for --limit: expected an integer from 1 to 100');
586
+ errors.push('dashboard.limit.invalid');
555
587
  return DEFAULT_DASHBOARD_LIMIT;
556
588
  }
557
589
 
@@ -559,6 +591,7 @@ function parseDashboardLimit(rawLimit, errors) {
559
591
  }
560
592
 
561
593
  function normalizeDashboardOptions(options = {}) {
594
+ const translator = translatorForOptions(options);
562
595
  const errors = Array.isArray(options.optionErrors) ? [...options.optionErrors] : [];
563
596
  const details = options.details === true;
564
597
  const section = String(options.section || '').trim();
@@ -566,23 +599,27 @@ function normalizeDashboardOptions(options = {}) {
566
599
  const limit = parseDashboardLimit(options.limit, errors);
567
600
 
568
601
  if (section && !SUPPORTED_DASHBOARD_SECTIONS.includes(section)) {
569
- errors.push(`unsupported dashboard section: ${section}. Supported sections: ${SUPPORTED_DASHBOARD_SECTIONS.join(', ')}`);
602
+ errors.push(translator.t('dashboard.unsupported_section', {
603
+ section,
604
+ sections: SUPPORTED_DASHBOARD_SECTIONS.join(', '),
605
+ }));
570
606
  }
571
607
 
572
608
  if (details && section) {
573
- errors.push('dashboard --details cannot be combined with --section <name>');
609
+ errors.push(translator.t('dashboard.cannot_combine_details_section'));
574
610
  }
575
611
 
576
612
  if (options.json && (details || section || hasLimit || errors.length > 0)) {
577
- errors.push('dashboard --json cannot be combined with human-only flags: --details, --section, --limit');
613
+ errors.push(translator.t('dashboard.json_human_flags'));
578
614
  }
579
615
 
580
616
  if (errors.length > 0) {
581
- throw dashboardOptionError(errors.join(' '));
617
+ throw dashboardOptionError(errors.map((error) => translateIfCatalogKey(error, translator)).join(' '));
582
618
  }
583
619
 
584
620
  return {
585
621
  details,
622
+ language: options.language,
586
623
  limit,
587
624
  section,
588
625
  };
@@ -610,13 +647,16 @@ function dashboardCommand(report, suffix = '') {
610
647
  return parts.join(' ');
611
648
  }
612
649
 
613
- function truncationLine(report, section, hidden) {
614
- return `- + ${hidden} more. Run: ${dashboardCommand(report, `--section ${section}`)}`;
650
+ function truncationLine(report, section, hidden, translator = createTranslator()) {
651
+ return `- ${translator.t('dashboard.more_run', {
652
+ command: dashboardCommand(report, `--section ${section}`),
653
+ count: hidden,
654
+ })}`;
615
655
  }
616
656
 
617
- function pushLimitedList(lines, report, section, items, limit, formatter) {
657
+ function pushLimitedList(lines, report, section, items, limit, formatter, translator = createTranslator()) {
618
658
  if (!items.length) {
619
- lines.push('- none');
659
+ lines.push(`- ${translator.t('common.none')}`);
620
660
  return;
621
661
  }
622
662
 
@@ -626,41 +666,42 @@ function pushLimitedList(lines, report, section, items, limit, formatter) {
626
666
 
627
667
  const hidden = items.length - limit;
628
668
  if (hidden > 0) {
629
- lines.push(truncationLine(report, section, hidden));
669
+ lines.push(truncationLine(report, section, hidden, translator));
630
670
  }
631
671
  }
632
672
 
633
- function formatSpecLine(spec) {
634
- return `${spec.slug}: ${spec.status}, ${spec.progress.percent}% (${spec.progress.completed}/${spec.progress.total})`;
673
+ function formatSpecLine(spec, translator = createTranslator()) {
674
+ return `${spec.slug}: ${formatStatus(spec.status, translator)}, ${spec.progress.percent}% (${spec.progress.completed}/${spec.progress.total})`;
635
675
  }
636
676
 
637
- function formatSliceLine(slice) {
677
+ function formatSliceLine(slice, translator = createTranslator()) {
638
678
  const blocked = slice.blocked_reason ? ` blocked=${truncateText(slice.blocked_reason, 48)}` : '';
639
- return `${slice.ref}: ${slice.status}, ${slice.progress}%${blocked}`;
679
+ return `${slice.ref}: ${formatStatus(slice.status, translator)}, ${slice.progress}%${blocked}`;
640
680
  }
641
681
 
642
- function formatAgentLine(agent) {
643
- return `${agent.role}: ${agent.configured ? agent.provider || 'configured' : 'missing'}`;
682
+ function formatAgentLine(agent, translator = createTranslator()) {
683
+ return `${agent.role}: ${agent.configured ? agent.provider || translator.t('dashboard.configured') : translator.t('dashboard.missing')}`;
644
684
  }
645
685
 
646
- function formatApprovalLine(approval) {
647
- const version = approval.approved_version ? ` approved=v${approval.approved_version}` : '';
648
- return `${approval.phase}: ${approval.status}${version}`;
686
+ function formatApprovalLine(approval, translator = createTranslator()) {
687
+ const version = approval.approved_version ? ` ${translator.t('dashboard.approved')}=v${approval.approved_version}` : '';
688
+ return `${approval.phase}: ${formatStatus(approval.status, translator)}${version}`;
649
689
  }
650
690
 
651
- function formatRunLine(run) {
652
- return `${run.run_id}: ${run.phase} (${run.status})`;
691
+ function formatRunLine(run, translator = createTranslator()) {
692
+ return `${run.run_id}: ${run.phase} (${formatStatus(run.status, translator)})`;
653
693
  }
654
694
 
655
- function pushSignalSection(lines, report, title, section, items, limit, formatter) {
656
- lines.push(`${title}: ${items.length === 0 ? 'none' : ''}`.trimEnd());
695
+ function pushSignalSection(lines, report, title, section, items, limit, formatter, translator = createTranslator()) {
696
+ lines.push(`${title}: ${items.length === 0 ? translator.t('common.none') : ''}`.trimEnd());
657
697
  if (items.length > 0) {
658
- pushLimitedList(lines, report, section, items, limit, formatter);
698
+ pushLimitedList(lines, report, section, items, limit, formatter, translator);
659
699
  }
660
700
  }
661
701
 
662
702
  function formatCompactDashboard(report, options) {
663
- const nextCommand = report.next_steps[0]?.command || 'none';
703
+ const translator = createTranslator(options.language);
704
+ const nextCommand = report.next_steps[0]?.command || translator.t('common.none');
664
705
  const state = report.blockers.length > 0
665
706
  ? 'blocked'
666
707
  : report.warnings.length > 0
@@ -669,38 +710,38 @@ function formatCompactDashboard(report, options) {
669
710
  ? 'ready'
670
711
  : 'idle';
671
712
  const lines = [
672
- 'Quiver Dashboard',
673
- `Project: ${truncateText(report.project.name, 42)} | Layout: ${report.summary.layout} | Filter: ${report.source_metadata.spec_filter || 'all specs'}`,
674
- `State: ${state}`,
675
- `Next safe command: ${nextCommand}`,
676
- `Progress: Global: ${formatProgress(report.global_progress)} | Visible: ${formatProgress(report.visible_progress)}`,
677
- `Counts: specs ${report.summary.specs} (${report.summary.visible_specs} visible), slices ${report.summary.slices} (${report.summary.visible_slices} visible), agents ${report.summary.configured_agents}/${report.summary.agents}, runs ${report.summary.runs}`,
678
- `Next ready slice: ${report.next_ready ? `${report.next_ready.ref} - ${truncateText(report.next_ready.title, 48)}` : 'none'}`,
713
+ translator.t('dashboard.title'),
714
+ `${translator.t('dashboard.project')}: ${truncateText(report.project.name, 42)} | ${translator.t('dashboard.layout')}: ${report.summary.layout} | ${translator.t('dashboard.filter')}: ${report.source_metadata.spec_filter || translator.t('dashboard.all_specs')}`,
715
+ `${translator.t('dashboard.state')}: ${translator.t(`dashboard.state.${state}`)}`,
716
+ `${translator.t('dashboard.next_safe_command')}: ${nextCommand}`,
717
+ `${translator.t('dashboard.progress')}: ${translator.t('dashboard.global')}: ${formatProgress(report.global_progress, translator)} | ${translator.t('dashboard.visible')}: ${formatProgress(report.visible_progress, translator)}`,
718
+ `${translator.t('dashboard.counts')}: ${translator.t('dashboard.specs')} ${report.summary.specs} (${report.summary.visible_specs} ${translator.t('dashboard.visible_count')}), ${translator.t('dashboard.slices')} ${report.summary.slices} (${report.summary.visible_slices} ${translator.t('dashboard.visible_count')}), ${translator.t('dashboard.agents')} ${report.summary.configured_agents}/${report.summary.agents}, ${translator.t('dashboard.runs')} ${report.summary.runs}`,
719
+ `${translator.t('dashboard.next_ready_slice')}: ${report.next_ready ? `${report.next_ready.ref} - ${truncateText(report.next_ready.title, 48)}` : translator.t('common.none')}`,
679
720
  ];
680
721
 
681
- pushSignalSection(lines, report, 'Blockers', 'blockers', report.blockers, options.limit, (blocker) => `${blocker.ref}: ${truncateText(blocker.reason, 70)}`);
682
- pushSignalSection(lines, report, 'Warnings', 'warnings', report.warnings, options.limit, (warning) => `${warning.code}: ${truncateText(warning.message, 70)}`);
722
+ pushSignalSection(lines, report, translator.t('dashboard.blockers'), 'blockers', report.blockers, options.limit, (blocker) => `${blocker.ref}: ${truncateText(blocker.reason, 70)}`, translator);
723
+ pushSignalSection(lines, report, translator.t('dashboard.warnings'), 'warnings', report.warnings, options.limit, (warning) => `${warning.code}: ${truncateText(formatWarningMessage(warning, report.source_metadata.spec_filter, translator), 70)}`, translator);
683
724
 
684
- lines.push(`Active slice: ${report.active_slice.reconciliation.decision} (${truncateText(report.active_slice.reconciliation.reason, 60)})`);
685
- lines.push(`Inspect: ${dashboardCommand(report, '--details')}`);
725
+ lines.push(`${translator.t('dashboard.active_slice')}: ${report.active_slice.reconciliation.decision} (${truncateText(report.active_slice.reconciliation.reason, 60)})`);
726
+ lines.push(`${translator.t('dashboard.inspect')}: ${dashboardCommand(report, '--details')}`);
686
727
  lines.push('');
687
728
  return `${lines.join('\n')}\n`;
688
729
  }
689
730
 
690
- function formatDashboardOverview(report) {
731
+ function formatDashboardOverview(report, translator = createTranslator()) {
691
732
  const lines = [
692
- 'Dashboard Overview',
693
- `Project: ${report.project.name}`,
694
- `Layout: ${report.summary.layout}`,
695
- `Filter: ${report.source_metadata.spec_filter || 'all specs'}`,
696
- `Completed hidden: ${report.source_metadata.include_completed ? 'no' : 'yes'}`,
697
- `Global progress: ${formatProgress(report.global_progress)}`,
698
- `Visible progress: ${formatProgress(report.visible_progress)}`,
699
- `Specs: ${report.summary.specs} (${report.summary.visible_specs} visible)`,
700
- `Slices: ${report.summary.slices} (${report.summary.visible_slices} visible)`,
701
- `Blockers: ${report.summary.blockers}`,
702
- `Warnings: ${report.summary.warnings}`,
703
- `Runs: ${report.summary.runs}`,
733
+ translator.t('dashboard.dashboard_overview'),
734
+ `${translator.t('dashboard.project')}: ${report.project.name}`,
735
+ `${translator.t('dashboard.layout')}: ${report.summary.layout}`,
736
+ `${translator.t('dashboard.filter')}: ${report.source_metadata.spec_filter || translator.t('dashboard.all_specs')}`,
737
+ `${translator.t('dashboard.completed_hidden')}: ${report.source_metadata.include_completed ? translator.t('common.no') : translator.t('common.yes')}`,
738
+ `${translator.t('dashboard.global_progress')}: ${formatProgress(report.global_progress, translator)}`,
739
+ `${translator.t('dashboard.visible_progress')}: ${formatProgress(report.visible_progress, translator)}`,
740
+ `${translator.t('dashboard.specs')}: ${report.summary.specs} (${report.summary.visible_specs} ${translator.t('dashboard.visible_count')})`,
741
+ `${translator.t('dashboard.slices')}: ${report.summary.slices} (${report.summary.visible_slices} ${translator.t('dashboard.visible_count')})`,
742
+ `${translator.t('dashboard.blockers')}: ${report.summary.blockers}`,
743
+ `${translator.t('dashboard.warnings')}: ${report.summary.warnings}`,
744
+ `${translator.t('dashboard.runs')}: ${report.summary.runs}`,
704
745
  '',
705
746
  ];
706
747
 
@@ -708,161 +749,163 @@ function formatDashboardOverview(report) {
708
749
  }
709
750
 
710
751
  function formatDashboardSection(report, options) {
752
+ const translator = createTranslator(options.language);
711
753
  const lines = [];
712
754
  const limit = options.limit;
713
755
 
714
756
  if (options.section === 'overview') {
715
- return formatDashboardOverview(report);
757
+ return formatDashboardOverview(report, translator);
716
758
  }
717
759
 
718
760
  if (options.section === 'specs') {
719
- lines.push('Specs');
720
- pushLimitedList(lines, report, 'specs', report.specs, limit, formatSpecLine);
761
+ lines.push(translator.t('dashboard.specs'));
762
+ pushLimitedList(lines, report, 'specs', report.specs, limit, (spec) => formatSpecLine(spec, translator), translator);
721
763
  }
722
764
 
723
765
  if (options.section === 'slices') {
724
- lines.push('Slices');
725
- pushLimitedList(lines, report, 'slices', report.slices, limit, formatSliceLine);
766
+ lines.push(translator.t('dashboard.slices'));
767
+ pushLimitedList(lines, report, 'slices', report.slices, limit, (slice) => formatSliceLine(slice, translator), translator);
726
768
  }
727
769
 
728
770
  if (options.section === 'blockers') {
729
- lines.push('Blockers');
730
- pushLimitedList(lines, report, 'blockers', report.blockers, limit, (blocker) => `${blocker.ref}: ${blocker.reason}`);
771
+ lines.push(translator.t('dashboard.blockers'));
772
+ pushLimitedList(lines, report, 'blockers', report.blockers, limit, (blocker) => `${blocker.ref}: ${blocker.reason}`, translator);
731
773
  }
732
774
 
733
775
  if (options.section === 'warnings') {
734
- lines.push('Warnings');
735
- pushLimitedList(lines, report, 'warnings', report.warnings, limit, (warning) => `${warning.code}: ${warning.message}`);
776
+ lines.push(translator.t('dashboard.warnings'));
777
+ pushLimitedList(lines, report, 'warnings', report.warnings, limit, (warning) => `${warning.code}: ${formatWarningMessage(warning, report.source_metadata.spec_filter, translator)}`, translator);
736
778
  }
737
779
 
738
780
  if (options.section === 'agents') {
739
- lines.push('Agents');
740
- pushLimitedList(lines, report, 'agents', report.agents, limit, formatAgentLine);
781
+ lines.push(translator.t('dashboard.agents'));
782
+ pushLimitedList(lines, report, 'agents', report.agents, limit, (agent) => formatAgentLine(agent, translator), translator);
741
783
  }
742
784
 
743
785
  if (options.section === 'approvals') {
744
- lines.push('Approvals');
745
- pushLimitedList(lines, report, 'approvals', report.approvals, limit, formatApprovalLine);
786
+ lines.push(translator.t('dashboard.approvals'));
787
+ pushLimitedList(lines, report, 'approvals', report.approvals, limit, (approval) => formatApprovalLine(approval, translator), translator);
746
788
  }
747
789
 
748
790
  if (options.section === 'runs') {
749
- lines.push('Runs');
750
- pushLimitedList(lines, report, 'runs', report.runs, limit, formatRunLine);
791
+ lines.push(translator.t('dashboard.runs'));
792
+ pushLimitedList(lines, report, 'runs', report.runs, limit, (run) => formatRunLine(run, translator), translator);
751
793
  }
752
794
 
753
795
  if (options.section === 'active-slice') {
754
796
  lines.push(
755
- 'Active slice',
756
- `- Sources: ${report.active_slice.sources_count}`,
757
- `- Reconciliation: ${report.active_slice.reconciliation.decision} (${report.active_slice.reconciliation.reason})`,
797
+ translator.t('dashboard.active_slice'),
798
+ `- ${translator.t('dashboard.sources')}: ${report.active_slice.sources_count}`,
799
+ `- ${translator.t('dashboard.reconciliation')}: ${report.active_slice.reconciliation.decision} (${report.active_slice.reconciliation.reason})`,
758
800
  );
759
801
  }
760
802
 
761
803
  if (options.section === 'next-steps') {
762
- lines.push('Next safe commands');
763
- pushLimitedList(lines, report, 'next-steps', report.next_steps, limit, (step) => step.command);
804
+ lines.push(translator.t('dashboard.next_safe_commands'));
805
+ pushLimitedList(lines, report, 'next-steps', report.next_steps, limit, (step) => step.command, translator);
764
806
  }
765
807
 
766
808
  lines.push('');
767
809
  return `${lines.join('\n')}\n`;
768
810
  }
769
811
 
770
- function formatDashboardDetails(report) {
812
+ function formatDashboardDetails(report, options = {}) {
813
+ const translator = createTranslator(options.language);
771
814
  const lines = [
772
- 'Quiver Dashboard',
773
- `Project: ${report.project.name}`,
774
- `Layout: ${report.summary.layout}`,
775
- `Filter: ${report.source_metadata.spec_filter || 'all specs'}`,
776
- `Completed hidden: ${report.source_metadata.include_completed ? 'no' : 'yes'}`,
815
+ translator.t('dashboard.title'),
816
+ `${translator.t('dashboard.project')}: ${report.project.name}`,
817
+ `${translator.t('dashboard.layout')}: ${report.summary.layout}`,
818
+ `${translator.t('dashboard.filter')}: ${report.source_metadata.spec_filter || translator.t('dashboard.all_specs')}`,
819
+ `${translator.t('dashboard.completed_hidden')}: ${report.source_metadata.include_completed ? translator.t('common.no') : translator.t('common.yes')}`,
777
820
  '',
778
- 'Progress',
779
- `- Global: ${formatProgress(report.global_progress)}`,
780
- `- Visible: ${formatProgress(report.visible_progress)}`,
821
+ translator.t('dashboard.progress'),
822
+ `- ${translator.t('dashboard.global')}: ${formatProgress(report.global_progress, translator)}`,
823
+ `- ${translator.t('dashboard.visible')}: ${formatProgress(report.visible_progress, translator)}`,
781
824
  '',
782
- 'Next ready slice',
825
+ translator.t('dashboard.next_ready_slice'),
783
826
  ];
784
827
 
785
828
  if (report.next_ready) {
786
829
  lines.push(`- ${report.next_ready.ref}: ${report.next_ready.title}`);
787
- lines.push(`- Start: ${report.next_ready.start_slice_command}`);
830
+ lines.push(`- ${translator.t('dashboard.start')}: ${report.next_ready.start_slice_command}`);
788
831
  } else {
789
- lines.push('- none');
832
+ lines.push(`- ${translator.t('common.none')}`);
790
833
  }
791
834
 
792
- lines.push('', 'Specs');
835
+ lines.push('', translator.t('dashboard.specs'));
793
836
  if (report.specs.length === 0) {
794
- lines.push('- none');
837
+ lines.push(`- ${translator.t('common.none')}`);
795
838
  } else {
796
839
  for (const spec of report.specs) {
797
- lines.push(`- ${formatSpecLine(spec)}`);
840
+ lines.push(`- ${formatSpecLine(spec, translator)}`);
798
841
  }
799
842
  }
800
843
 
801
- lines.push('', 'Slices');
844
+ lines.push('', translator.t('dashboard.slices'));
802
845
  if (report.slices.length === 0) {
803
- lines.push('- none');
846
+ lines.push(`- ${translator.t('common.none')}`);
804
847
  } else {
805
848
  for (const slice of report.slices) {
806
- lines.push(`- ${formatSliceLine(slice)}`);
849
+ lines.push(`- ${formatSliceLine(slice, translator)}`);
807
850
  }
808
851
  }
809
852
 
810
- lines.push('', 'Blockers');
853
+ lines.push('', translator.t('dashboard.blockers'));
811
854
  if (report.blockers.length === 0) {
812
- lines.push('- none');
855
+ lines.push(`- ${translator.t('common.none')}`);
813
856
  } else {
814
857
  for (const blocker of report.blockers) {
815
858
  lines.push(`- ${blocker.ref}: ${blocker.reason}`);
816
859
  }
817
860
  }
818
861
 
819
- lines.push('', 'Warnings');
862
+ lines.push('', translator.t('dashboard.warnings'));
820
863
  if (report.warnings.length === 0) {
821
- lines.push('- none');
864
+ lines.push(`- ${translator.t('common.none')}`);
822
865
  } else {
823
866
  for (const warning of report.warnings) {
824
- lines.push(`- ${warning.code}: ${warning.message}`);
867
+ lines.push(`- ${warning.code}: ${formatWarningMessage(warning, report.source_metadata.spec_filter, translator)}`);
825
868
  }
826
869
  }
827
870
 
828
- lines.push('', 'Agents');
871
+ lines.push('', translator.t('dashboard.agents'));
829
872
  if (report.agents.length === 0) {
830
- lines.push('- none');
873
+ lines.push(`- ${translator.t('common.none')}`);
831
874
  } else {
832
875
  for (const agent of report.agents) {
833
- lines.push(`- ${formatAgentLine(agent)}`);
876
+ lines.push(`- ${formatAgentLine(agent, translator)}`);
834
877
  }
835
878
  }
836
879
 
837
- lines.push('', 'Approvals');
880
+ lines.push('', translator.t('dashboard.approvals'));
838
881
  if (report.approvals.length === 0) {
839
- lines.push('- none');
882
+ lines.push(`- ${translator.t('common.none')}`);
840
883
  } else {
841
884
  for (const approval of report.approvals) {
842
- lines.push(`- ${formatApprovalLine(approval)}`);
885
+ lines.push(`- ${formatApprovalLine(approval, translator)}`);
843
886
  }
844
887
  }
845
888
 
846
- lines.push('', 'Runs');
889
+ lines.push('', translator.t('dashboard.runs'));
847
890
  if (report.runs.length === 0) {
848
- lines.push('- none');
891
+ lines.push(`- ${translator.t('common.none')}`);
849
892
  } else {
850
893
  for (const run of report.runs) {
851
- lines.push(`- ${formatRunLine(run)}`);
894
+ lines.push(`- ${formatRunLine(run, translator)}`);
852
895
  }
853
896
  }
854
897
 
855
898
  lines.push(
856
899
  '',
857
- 'Active slice',
858
- `- Sources: ${report.active_slice.sources_count}`,
859
- `- Reconciliation: ${report.active_slice.reconciliation.decision} (${report.active_slice.reconciliation.reason})`,
900
+ translator.t('dashboard.active_slice'),
901
+ `- ${translator.t('dashboard.sources')}: ${report.active_slice.sources_count}`,
902
+ `- ${translator.t('dashboard.reconciliation')}: ${report.active_slice.reconciliation.decision} (${report.active_slice.reconciliation.reason})`,
860
903
  '',
861
- 'Next safe commands',
904
+ translator.t('dashboard.next_safe_commands'),
862
905
  );
863
906
 
864
907
  if (report.next_steps.length === 0) {
865
- lines.push('- none');
908
+ lines.push(`- ${translator.t('common.none')}`);
866
909
  } else {
867
910
  for (const step of report.next_steps) {
868
911
  lines.push(`- ${step.command}`);
@@ -876,7 +919,7 @@ function formatDashboardDetails(report) {
876
919
  function formatHumanDashboard(report, options = {}) {
877
920
  const normalized = normalizeDashboardOptions({ ...options, json: false });
878
921
  if (normalized.details) {
879
- return formatDashboardDetails(report);
922
+ return formatDashboardDetails(report, normalized);
880
923
  }
881
924
  if (normalized.section) {
882
925
  return formatDashboardSection(report, normalized);
@@ -6,6 +6,7 @@ const {
6
6
  resolveInitPackageScripts,
7
7
  toProjectSlug,
8
8
  } = require('./init-layout');
9
+ const { createTranslator } = require('./i18n/catalog');
9
10
  const cliPackageJson = require('../../../package.json');
10
11
 
11
12
  const SPEC_VIEWER_DEMO = 'spec-viewer';
@@ -770,38 +771,39 @@ function buildDemoPlan(targetRoot, options = {}) {
770
771
  }
771
772
 
772
773
  function formatDemoPlan(plan, options = {}) {
774
+ const translator = createTranslator(options.language);
773
775
  const lines = [];
774
- const title = options.dryRun ? 'Quiver demo dry-run' : 'Quiver demo created';
776
+ const title = options.dryRun ? translator.t('demo.title.dry_run') : translator.t('demo.title.created');
775
777
 
776
778
  lines.push(title);
777
- lines.push(`- Demo: ${plan.demo}`);
778
- lines.push(`- Project: ${plan.projectName}`);
779
- lines.push(`- Target: ${plan.targetRoot}`);
780
- lines.push(`- Files to create: ${plan.summary.create}`);
781
- lines.push(`- Files to preserve: ${plan.summary.preserve}`);
779
+ lines.push(`- ${translator.t('demo.label.demo', { demo: plan.demo })}`);
780
+ lines.push(`- ${translator.t('demo.label.project', { project: plan.projectName })}`);
781
+ lines.push(`- ${translator.t('demo.label.target', { path: plan.targetRoot })}`);
782
+ lines.push(`- ${translator.t('demo.label.files_to_create', { count: plan.summary.create })}`);
783
+ lines.push(`- ${translator.t('demo.label.files_to_preserve', { count: plan.summary.preserve })}`);
782
784
  lines.push('');
783
- lines.push('Files to create');
785
+ lines.push(translator.t('demo.section.files_to_create'));
784
786
  for (const operation of plan.operations.filter((item) => item.action === 'create')) {
785
787
  lines.push(`- ${operation.path}`);
786
788
  }
787
789
  if (plan.summary.create === 0) {
788
- lines.push('- none');
790
+ lines.push(`- ${translator.t('common.none')}`);
789
791
  }
790
792
  lines.push('');
791
- lines.push('Files to preserve');
793
+ lines.push(translator.t('demo.section.files_to_preserve'));
792
794
  for (const operation of plan.operations.filter((item) => item.action === 'preserve')) {
793
795
  lines.push(`- ${operation.path}`);
794
796
  }
795
797
  if (plan.summary.preserve === 0) {
796
- lines.push('- none');
798
+ lines.push(`- ${translator.t('common.none')}`);
797
799
  }
798
800
 
799
801
  if (options.dryRun) {
800
802
  lines.push('');
801
- lines.push('No files were written.');
803
+ lines.push(translator.t('demo.no_files_written'));
802
804
  } else {
803
805
  lines.push('');
804
- lines.push('Next commands');
806
+ lines.push(translator.t('demo.next_commands'));
805
807
  lines.push(`- cd ${plan.targetRoot}`);
806
808
  lines.push('- npm run validate');
807
809
  lines.push('- npm start');