create-quiver 0.15.2 → 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 (324) hide show
  1. package/.github/workflows/ci.yml +3 -0
  2. package/AGENTS.md.es.template +37 -0
  3. package/README.md +1 -0
  4. package/README_FOR_AI.md +6 -4
  5. package/docs/AI_CONTEXT.md.es.template +35 -0
  6. package/docs/AI_ONBOARDING_PROMPT.md.es.template +22 -0
  7. package/docs/CLI_UX_GUIDE.md +47 -1
  8. package/docs/COMMANDS.md.es.template +28 -0
  9. package/docs/COMMANDS.md.template +14 -3
  10. package/docs/CONTEXTO.md.es.template +33 -0
  11. package/docs/DECISIONS.md.es.template +17 -0
  12. package/docs/GITFLOW_PR_GUIDE.md.es.template +25 -0
  13. package/docs/INDEX.md +96 -0
  14. package/docs/INDEX.md.es.template +36 -0
  15. package/docs/STATUS.md.es.template +28 -0
  16. package/docs/SUPPORT_MATRIX.md.es.template +22 -0
  17. package/docs/TESTING_GUIDE_FOR_AI.md.es.template +19 -0
  18. package/docs/TROUBLESHOOTING.md.es.template +35 -0
  19. package/docs/WORKFLOW.md.es.template +29 -0
  20. package/docs/WORKFLOW.md.template +2 -2
  21. package/docs/ai/LESSONS.md.es.template +24 -0
  22. package/docs/getting-started/installation.md +19 -0
  23. package/docs/reference/commands.md +68 -2
  24. package/package.json +3 -1
  25. package/specs/quiver-v34-cli-dashboard-status/EVIDENCE_REPORT.md +119 -0
  26. package/specs/quiver-v34-cli-dashboard-status/EXECUTION_PLAN.md +77 -0
  27. package/specs/quiver-v34-cli-dashboard-status/SPEC.md +152 -0
  28. package/specs/quiver-v34-cli-dashboard-status/STATUS.md +29 -0
  29. package/specs/quiver-v34-cli-dashboard-status/pr.md +99 -0
  30. package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/CLOSURE_BRIEF.md +19 -0
  31. package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/EXECUTION_BRIEF.md +49 -0
  32. package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/slice.json +68 -0
  33. package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/CLOSURE_BRIEF.md +19 -0
  34. package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/EXECUTION_BRIEF.md +53 -0
  35. package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/slice.json +78 -0
  36. package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/CLOSURE_BRIEF.md +19 -0
  37. package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/EXECUTION_BRIEF.md +53 -0
  38. package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/slice.json +82 -0
  39. package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/CLOSURE_BRIEF.md +19 -0
  40. package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/EXECUTION_BRIEF.md +54 -0
  41. package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/slice.json +77 -0
  42. package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/CLOSURE_BRIEF.md +19 -0
  43. package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/EXECUTION_BRIEF.md +54 -0
  44. package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/slice.json +88 -0
  45. package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/CLOSURE_BRIEF.md +26 -0
  46. package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/EXECUTION_BRIEF.md +57 -0
  47. package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/slice.json +85 -0
  48. package/specs/quiver-v35-compact-dashboard-version-ux/EVIDENCE_REPORT.md +43 -0
  49. package/specs/quiver-v35-compact-dashboard-version-ux/EXECUTION_PLAN.md +85 -0
  50. package/specs/quiver-v35-compact-dashboard-version-ux/SPEC.md +147 -0
  51. package/specs/quiver-v35-compact-dashboard-version-ux/STATUS.md +33 -0
  52. package/specs/quiver-v35-compact-dashboard-version-ux/pr.md +106 -0
  53. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/CLOSURE_BRIEF.md +19 -0
  54. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/EXECUTION_BRIEF.md +38 -0
  55. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/slice.json +64 -0
  56. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/CLOSURE_BRIEF.md +19 -0
  57. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/EXECUTION_BRIEF.md +49 -0
  58. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/slice.json +80 -0
  59. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/CLOSURE_BRIEF.md +19 -0
  60. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/EXECUTION_BRIEF.md +48 -0
  61. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/slice.json +73 -0
  62. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/CLOSURE_BRIEF.md +19 -0
  63. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/EXECUTION_BRIEF.md +48 -0
  64. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/slice.json +72 -0
  65. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/CLOSURE_BRIEF.md +19 -0
  66. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/EXECUTION_BRIEF.md +49 -0
  67. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/slice.json +82 -0
  68. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/CLOSURE_BRIEF.md +19 -0
  69. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/EXECUTION_BRIEF.md +50 -0
  70. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/slice.json +90 -0
  71. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/CLOSURE_BRIEF.md +21 -0
  72. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/EXECUTION_BRIEF.md +51 -0
  73. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/slice.json +85 -0
  74. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/CLOSURE_BRIEF.md +20 -0
  75. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/EXECUTION_BRIEF.md +49 -0
  76. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/slice.json +79 -0
  77. package/specs/quiver-v36-ai-run-watch-portable/EVIDENCE_REPORT.md +33 -0
  78. package/specs/quiver-v36-ai-run-watch-portable/EXECUTION_PLAN.md +39 -0
  79. package/specs/quiver-v36-ai-run-watch-portable/SPEC.md +166 -0
  80. package/specs/quiver-v36-ai-run-watch-portable/STATUS.md +31 -0
  81. package/specs/quiver-v36-ai-run-watch-portable/pr.md +78 -0
  82. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/CLOSURE_BRIEF.md +19 -0
  83. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/EXECUTION_BRIEF.md +43 -0
  84. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/slice.json +61 -0
  85. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/CLOSURE_BRIEF.md +18 -0
  86. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/EXECUTION_BRIEF.md +43 -0
  87. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/slice.json +65 -0
  88. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/CLOSURE_BRIEF.md +18 -0
  89. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/EXECUTION_BRIEF.md +43 -0
  90. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/slice.json +66 -0
  91. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/CLOSURE_BRIEF.md +18 -0
  92. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/EXECUTION_BRIEF.md +41 -0
  93. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/slice.json +71 -0
  94. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/CLOSURE_BRIEF.md +18 -0
  95. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/EXECUTION_BRIEF.md +44 -0
  96. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/slice.json +73 -0
  97. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/CLOSURE_BRIEF.md +18 -0
  98. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/EXECUTION_BRIEF.md +44 -0
  99. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/slice.json +71 -0
  100. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/CLOSURE_BRIEF.md +19 -0
  101. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/EXECUTION_BRIEF.md +45 -0
  102. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/slice.json +77 -0
  103. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/CLOSURE_BRIEF.md +22 -0
  104. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/EXECUTION_BRIEF.md +46 -0
  105. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/slice.json +87 -0
  106. package/specs/quiver-v37-cli-i18n-foundation/EVIDENCE_REPORT.md +73 -0
  107. package/specs/quiver-v37-cli-i18n-foundation/EXECUTION_PLAN.md +34 -0
  108. package/specs/quiver-v37-cli-i18n-foundation/SPEC.md +91 -0
  109. package/specs/quiver-v37-cli-i18n-foundation/STATUS.md +29 -0
  110. package/specs/quiver-v37-cli-i18n-foundation/pr.md +97 -0
  111. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/CLOSURE_BRIEF.md +10 -0
  112. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/EXECUTION_BRIEF.md +22 -0
  113. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/slice.json +54 -0
  114. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/CLOSURE_BRIEF.md +30 -0
  115. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/EXECUTION_BRIEF.md +27 -0
  116. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/slice.json +66 -0
  117. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/CLOSURE_BRIEF.md +27 -0
  118. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/EXECUTION_BRIEF.md +26 -0
  119. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/slice.json +62 -0
  120. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/CLOSURE_BRIEF.md +32 -0
  121. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/EXECUTION_BRIEF.md +25 -0
  122. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/slice.json +66 -0
  123. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/CLOSURE_BRIEF.md +30 -0
  124. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/EXECUTION_BRIEF.md +24 -0
  125. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/slice.json +65 -0
  126. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/CLOSURE_BRIEF.md +27 -0
  127. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/EXECUTION_BRIEF.md +23 -0
  128. package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/slice.json +67 -0
  129. package/specs/quiver-v38-cli-i18n-read-only-commands/EVIDENCE_REPORT.md +69 -0
  130. package/specs/quiver-v38-cli-i18n-read-only-commands/EXECUTION_PLAN.md +25 -0
  131. package/specs/quiver-v38-cli-i18n-read-only-commands/SPEC.md +52 -0
  132. package/specs/quiver-v38-cli-i18n-read-only-commands/STATUS.md +24 -0
  133. package/specs/quiver-v38-cli-i18n-read-only-commands/pr.md +119 -0
  134. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/CLOSURE_BRIEF.md +10 -0
  135. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/EXECUTION_BRIEF.md +21 -0
  136. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/slice.json +53 -0
  137. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/CLOSURE_BRIEF.md +17 -0
  138. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/EXECUTION_BRIEF.md +23 -0
  139. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/slice.json +69 -0
  140. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/CLOSURE_BRIEF.md +13 -0
  141. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/EXECUTION_BRIEF.md +22 -0
  142. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/slice.json +77 -0
  143. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/CLOSURE_BRIEF.md +12 -0
  144. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/EXECUTION_BRIEF.md +22 -0
  145. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/slice.json +66 -0
  146. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/CLOSURE_BRIEF.md +13 -0
  147. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/EXECUTION_BRIEF.md +22 -0
  148. package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/slice.json +61 -0
  149. package/specs/quiver-v39-cli-i18n-setup-onboarding/EVIDENCE_REPORT.md +71 -0
  150. package/specs/quiver-v39-cli-i18n-setup-onboarding/EXECUTION_PLAN.md +25 -0
  151. package/specs/quiver-v39-cli-i18n-setup-onboarding/SPEC.md +53 -0
  152. package/specs/quiver-v39-cli-i18n-setup-onboarding/STATUS.md +24 -0
  153. package/specs/quiver-v39-cli-i18n-setup-onboarding/pr.md +104 -0
  154. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/CLOSURE_BRIEF.md +10 -0
  155. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/EXECUTION_BRIEF.md +21 -0
  156. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/slice.json +53 -0
  157. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/CLOSURE_BRIEF.md +12 -0
  158. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/EXECUTION_BRIEF.md +23 -0
  159. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/slice.json +68 -0
  160. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/CLOSURE_BRIEF.md +12 -0
  161. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/EXECUTION_BRIEF.md +23 -0
  162. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/slice.json +62 -0
  163. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/CLOSURE_BRIEF.md +12 -0
  164. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/EXECUTION_BRIEF.md +22 -0
  165. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/slice.json +72 -0
  166. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/CLOSURE_BRIEF.md +15 -0
  167. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/EXECUTION_BRIEF.md +22 -0
  168. package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/slice.json +61 -0
  169. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/EVIDENCE_REPORT.md +50 -0
  170. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/EXECUTION_PLAN.md +25 -0
  171. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/SPEC.md +52 -0
  172. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/STATUS.md +24 -0
  173. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/pr.md +94 -0
  174. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/CLOSURE_BRIEF.md +10 -0
  175. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/EXECUTION_BRIEF.md +21 -0
  176. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/slice.json +53 -0
  177. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/CLOSURE_BRIEF.md +12 -0
  178. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/EXECUTION_BRIEF.md +22 -0
  179. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/slice.json +63 -0
  180. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/CLOSURE_BRIEF.md +10 -0
  181. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/EXECUTION_BRIEF.md +22 -0
  182. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/slice.json +63 -0
  183. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/CLOSURE_BRIEF.md +10 -0
  184. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/EXECUTION_BRIEF.md +22 -0
  185. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/slice.json +72 -0
  186. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/CLOSURE_BRIEF.md +15 -0
  187. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/EXECUTION_BRIEF.md +22 -0
  188. package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/slice.json +69 -0
  189. package/specs/quiver-v41-cli-i18n-ai-lifecycle/EVIDENCE_REPORT.md +90 -0
  190. package/specs/quiver-v41-cli-i18n-ai-lifecycle/EXECUTION_PLAN.md +33 -0
  191. package/specs/quiver-v41-cli-i18n-ai-lifecycle/SPEC.md +57 -0
  192. package/specs/quiver-v41-cli-i18n-ai-lifecycle/STATUS.md +26 -0
  193. package/specs/quiver-v41-cli-i18n-ai-lifecycle/pr.md +103 -0
  194. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/CLOSURE_BRIEF.md +10 -0
  195. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/EXECUTION_BRIEF.md +21 -0
  196. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/slice.json +53 -0
  197. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/CLOSURE_BRIEF.md +13 -0
  198. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/EXECUTION_BRIEF.md +22 -0
  199. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/slice.json +68 -0
  200. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/CLOSURE_BRIEF.md +12 -0
  201. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/EXECUTION_BRIEF.md +22 -0
  202. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/slice.json +66 -0
  203. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/CLOSURE_BRIEF.md +12 -0
  204. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/EXECUTION_BRIEF.md +23 -0
  205. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/slice.json +68 -0
  206. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/CLOSURE_BRIEF.md +13 -0
  207. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/EXECUTION_BRIEF.md +23 -0
  208. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/slice.json +72 -0
  209. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/CLOSURE_BRIEF.md +15 -0
  210. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/EXECUTION_BRIEF.md +22 -0
  211. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/slice.json +66 -0
  212. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/CLOSURE_BRIEF.md +11 -0
  213. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/EXECUTION_BRIEF.md +22 -0
  214. package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/slice.json +70 -0
  215. package/specs/quiver-v42-cli-i18n-generated-docs/EVIDENCE_REPORT.md +64 -0
  216. package/specs/quiver-v42-cli-i18n-generated-docs/EXECUTION_PLAN.md +26 -0
  217. package/specs/quiver-v42-cli-i18n-generated-docs/SPEC.md +52 -0
  218. package/specs/quiver-v42-cli-i18n-generated-docs/STATUS.md +24 -0
  219. package/specs/quiver-v42-cli-i18n-generated-docs/pr.md +125 -0
  220. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/CLOSURE_BRIEF.md +10 -0
  221. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/EXECUTION_BRIEF.md +21 -0
  222. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/slice.json +53 -0
  223. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/CLOSURE_BRIEF.md +10 -0
  224. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/EXECUTION_BRIEF.md +22 -0
  225. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/slice.json +62 -0
  226. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/CLOSURE_BRIEF.md +11 -0
  227. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/EXECUTION_BRIEF.md +22 -0
  228. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/slice.json +72 -0
  229. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/CLOSURE_BRIEF.md +12 -0
  230. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/EXECUTION_BRIEF.md +22 -0
  231. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/slice.json +60 -0
  232. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/CLOSURE_BRIEF.md +16 -0
  233. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/EXECUTION_BRIEF.md +22 -0
  234. package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/slice.json +62 -0
  235. package/specs/quiver-v43-cli-i18n-audit-release-readiness/EVIDENCE_REPORT.md +203 -0
  236. package/specs/quiver-v43-cli-i18n-audit-release-readiness/EXECUTION_PLAN.md +27 -0
  237. package/specs/quiver-v43-cli-i18n-audit-release-readiness/SPEC.md +54 -0
  238. package/specs/quiver-v43-cli-i18n-audit-release-readiness/STATUS.md +24 -0
  239. package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +545 -0
  240. package/specs/quiver-v43-cli-i18n-audit-release-readiness/cross-platform-smoke-matrix.md +35 -0
  241. package/specs/quiver-v43-cli-i18n-audit-release-readiness/pr.md +155 -0
  242. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/CLOSURE_BRIEF.md +10 -0
  243. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/EXECUTION_BRIEF.md +21 -0
  244. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/slice.json +53 -0
  245. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/CLOSURE_BRIEF.md +13 -0
  246. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/EXECUTION_BRIEF.md +23 -0
  247. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/slice.json +62 -0
  248. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/CLOSURE_BRIEF.md +18 -0
  249. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/EXECUTION_BRIEF.md +22 -0
  250. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/slice.json +59 -0
  251. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/CLOSURE_BRIEF.md +15 -0
  252. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/EXECUTION_BRIEF.md +23 -0
  253. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/slice.json +62 -0
  254. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/CLOSURE_BRIEF.md +17 -0
  255. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/EXECUTION_BRIEF.md +24 -0
  256. package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/slice.json +66 -0
  257. package/specs/quiver-v44-provider-live-output-tui-lite/EVIDENCE_REPORT.md +18 -0
  258. package/specs/quiver-v44-provider-live-output-tui-lite/EXECUTION_PLAN.md +31 -0
  259. package/specs/quiver-v44-provider-live-output-tui-lite/SPEC.md +118 -0
  260. package/specs/quiver-v44-provider-live-output-tui-lite/STATUS.md +25 -0
  261. package/specs/quiver-v44-provider-live-output-tui-lite/pr.md +92 -0
  262. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/CLOSURE_BRIEF.md +11 -0
  263. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/EXECUTION_BRIEF.md +23 -0
  264. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/slice.json +64 -0
  265. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/CLOSURE_BRIEF.md +10 -0
  266. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/EXECUTION_BRIEF.md +24 -0
  267. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/slice.json +65 -0
  268. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/CLOSURE_BRIEF.md +10 -0
  269. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/EXECUTION_BRIEF.md +24 -0
  270. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/slice.json +70 -0
  271. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/CLOSURE_BRIEF.md +10 -0
  272. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/EXECUTION_BRIEF.md +25 -0
  273. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/slice.json +70 -0
  274. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/CLOSURE_BRIEF.md +10 -0
  275. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/EXECUTION_BRIEF.md +26 -0
  276. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/slice.json +72 -0
  277. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/CLOSURE_BRIEF.md +15 -0
  278. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/EXECUTION_BRIEF.md +26 -0
  279. package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/slice.json +75 -0
  280. package/specs/quiver-v45-ci-actions-node24-readiness/EVIDENCE_REPORT.md +30 -0
  281. package/specs/quiver-v45-ci-actions-node24-readiness/EXECUTION_PLAN.md +22 -0
  282. package/specs/quiver-v45-ci-actions-node24-readiness/SPEC.md +49 -0
  283. package/specs/quiver-v45-ci-actions-node24-readiness/STATUS.md +21 -0
  284. package/specs/quiver-v45-ci-actions-node24-readiness/pr.md +67 -0
  285. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/CLOSURE_BRIEF.md +10 -0
  286. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/EXECUTION_BRIEF.md +21 -0
  287. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/slice.json +48 -0
  288. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/CLOSURE_BRIEF.md +14 -0
  289. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/EXECUTION_BRIEF.md +23 -0
  290. package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/slice.json +65 -0
  291. package/src/create-quiver/commands/ai.js +485 -307
  292. package/src/create-quiver/commands/config.js +124 -0
  293. package/src/create-quiver/commands/dashboard.js +31 -0
  294. package/src/create-quiver/commands/demo.js +2 -2
  295. package/src/create-quiver/commands/evidence.js +6 -4
  296. package/src/create-quiver/commands/flow.js +108 -16
  297. package/src/create-quiver/commands/graph.js +1 -0
  298. package/src/create-quiver/commands/next.js +21 -18
  299. package/src/create-quiver/commands/plan.js +23 -6
  300. package/src/create-quiver/commands/spec.js +66 -57
  301. package/src/create-quiver/index.js +606 -136
  302. package/src/create-quiver/lib/ai/execution-plan.js +23 -20
  303. package/src/create-quiver/lib/ai/executor.js +60 -44
  304. package/src/create-quiver/lib/ai/export-state.js +75 -64
  305. package/src/create-quiver/lib/ai/github.js +24 -21
  306. package/src/create-quiver/lib/ai/run-state.js +28 -25
  307. package/src/create-quiver/lib/cli/ux-flags.js +6 -0
  308. package/src/create-quiver/lib/dashboard.js +939 -0
  309. package/src/create-quiver/lib/demo.js +14 -12
  310. package/src/create-quiver/lib/handoff.js +16 -7
  311. package/src/create-quiver/lib/i18n/catalog.js +152 -0
  312. package/src/create-quiver/lib/i18n/language.js +279 -0
  313. package/src/create-quiver/lib/i18n/messages/en.js +853 -0
  314. package/src/create-quiver/lib/i18n/messages/es.js +968 -0
  315. package/src/create-quiver/lib/i18n/read-only-format.js +26 -0
  316. package/src/create-quiver/lib/i18n/templates.js +172 -0
  317. package/src/create-quiver/lib/init-docs.js +24 -4
  318. package/src/create-quiver/lib/init-layout.js +8 -0
  319. package/src/create-quiver/lib/lifecycle.js +53 -46
  320. package/src/create-quiver/lib/project-state-resolver.js +22 -2
  321. package/src/create-quiver/lib/readiness.js +77 -67
  322. package/src/create-quiver/lib/renderers/tree.js +9 -6
  323. package/src/create-quiver/lib/spec-worktrees.js +34 -30
  324. package/src/create-quiver/lib/version.js +159 -0
@@ -0,0 +1,26 @@
1
+ const { createTranslator } = require('./catalog');
2
+
3
+ function translatorForHuman(options = {}) {
4
+ return createTranslator(options.language);
5
+ }
6
+
7
+ function formatStatus(status, translator = createTranslator()) {
8
+ const key = `status.${String(status || '').replace(/-/g, '_')}`;
9
+ const translated = translator.t(key);
10
+ return translated.startsWith('[missing:') ? String(status || '') : translated;
11
+ }
12
+
13
+ function formatWarningPrefix(message, translator = createTranslator()) {
14
+ const text = String(message || '');
15
+ const match = text.match(/^Warning: (.+)$/);
16
+ if (!match) {
17
+ return text;
18
+ }
19
+ return translator.t('common.warning', { message: match[1] });
20
+ }
21
+
22
+ module.exports = {
23
+ formatStatus,
24
+ formatWarningPrefix,
25
+ translatorForHuman,
26
+ };
@@ -0,0 +1,172 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ const {
5
+ DEFAULT_LANGUAGE,
6
+ SUPPORTED_LANGUAGES,
7
+ normalizeLanguage,
8
+ resolveLanguage,
9
+ } = require('./language');
10
+
11
+ const MACHINE_TEMPLATE_PATHS = new Set([
12
+ 'package.template.json',
13
+ 'specs/[project-name]/slices/slice-template/slice.json',
14
+ ]);
15
+
16
+ function toTemplatePath(relativePath) {
17
+ const normalized = String(relativePath || '').replace(/\\/g, '/').replace(/^\.\//, '');
18
+ if (!normalized || path.isAbsolute(normalized) || normalized.split('/').includes('..')) {
19
+ throw new Error(`invalid template path: ${relativePath}`);
20
+ }
21
+ return normalized;
22
+ }
23
+
24
+ function isHumanTemplatePath(relativePath) {
25
+ const normalized = toTemplatePath(relativePath);
26
+ if (MACHINE_TEMPLATE_PATHS.has(normalized)) {
27
+ return false;
28
+ }
29
+ return normalized.endsWith('.md.template') || normalized.endsWith('.md');
30
+ }
31
+
32
+ function localizedTemplateRelativePath(relativePath, language) {
33
+ const normalized = toTemplatePath(relativePath);
34
+ const resolvedLanguage = normalizeLanguage(language) || DEFAULT_LANGUAGE;
35
+ if (resolvedLanguage === DEFAULT_LANGUAGE || !isHumanTemplatePath(normalized)) {
36
+ return normalized;
37
+ }
38
+
39
+ if (normalized.endsWith('.template')) {
40
+ const withoutTemplateSuffix = normalized.slice(0, -'.template'.length);
41
+ return `${withoutTemplateSuffix}.${resolvedLanguage}.template`;
42
+ }
43
+
44
+ const extension = path.posix.extname(normalized);
45
+ if (!extension) {
46
+ return `${normalized}.${resolvedLanguage}`;
47
+ }
48
+
49
+ return `${normalized.slice(0, -extension.length)}.${resolvedLanguage}${extension}`;
50
+ }
51
+
52
+ function resolveTemplateLanguage(options = {}) {
53
+ return resolveLanguage({
54
+ cliLanguage: options.language || options.cliLanguage,
55
+ env: options.env,
56
+ homeDir: options.homeDir,
57
+ intlLocale: options.intlLocale,
58
+ projectRoot: options.projectRoot,
59
+ });
60
+ }
61
+
62
+ function resolveLocalizedTemplatePath(templateRoot, relativePath, options = {}) {
63
+ const normalized = toTemplatePath(relativePath);
64
+ const templateLanguage = resolveTemplateLanguage(options);
65
+ const requestedLanguage = templateLanguage.language || DEFAULT_LANGUAGE;
66
+ const basePath = path.join(templateRoot, normalized);
67
+ const human = isHumanTemplatePath(normalized);
68
+
69
+ if (!human) {
70
+ return {
71
+ human: false,
72
+ language: '',
73
+ requestedLanguage,
74
+ relativePath: normalized,
75
+ templatePath: basePath,
76
+ localizedRelativePath: normalized,
77
+ fallback: false,
78
+ reason: 'machine-artifact',
79
+ languageSource: templateLanguage.source,
80
+ warnings: templateLanguage.warnings || [],
81
+ };
82
+ }
83
+
84
+ const localizedRelativePath = localizedTemplateRelativePath(normalized, requestedLanguage);
85
+ const localizedPath = path.join(templateRoot, localizedRelativePath);
86
+ if (localizedRelativePath !== normalized && fs.existsSync(localizedPath)) {
87
+ return {
88
+ human: true,
89
+ language: requestedLanguage,
90
+ requestedLanguage,
91
+ relativePath: normalized,
92
+ templatePath: localizedPath,
93
+ localizedRelativePath,
94
+ fallback: false,
95
+ reason: 'localized-template',
96
+ languageSource: templateLanguage.source,
97
+ warnings: templateLanguage.warnings || [],
98
+ };
99
+ }
100
+
101
+ if (fs.existsSync(basePath)) {
102
+ return {
103
+ human: true,
104
+ language: DEFAULT_LANGUAGE,
105
+ requestedLanguage,
106
+ relativePath: normalized,
107
+ templatePath: basePath,
108
+ localizedRelativePath: normalized,
109
+ fallback: requestedLanguage !== DEFAULT_LANGUAGE,
110
+ reason: requestedLanguage === DEFAULT_LANGUAGE ? 'default-template' : 'missing-localized-template',
111
+ languageSource: templateLanguage.source,
112
+ warnings: templateLanguage.warnings || [],
113
+ };
114
+ }
115
+
116
+ throw new Error(`create-quiver: missing template ${normalized} in ${templateRoot}`);
117
+ }
118
+
119
+ function collectLocalizedTemplateCoverage(templateRoot, relativePaths, options = {}) {
120
+ const languages = Array.isArray(options.languages) && options.languages.length > 0
121
+ ? options.languages.map((language) => normalizeLanguage(language)).filter(Boolean)
122
+ : SUPPORTED_LANGUAGES;
123
+ const missing = [];
124
+ const checked = [];
125
+ const skipped = [];
126
+
127
+ for (const relativePath of relativePaths) {
128
+ const normalized = toTemplatePath(relativePath);
129
+ if (!isHumanTemplatePath(normalized)) {
130
+ skipped.push({
131
+ relativePath: normalized,
132
+ reason: 'machine-artifact',
133
+ });
134
+ continue;
135
+ }
136
+
137
+ for (const language of languages) {
138
+ if (language === DEFAULT_LANGUAGE) {
139
+ continue;
140
+ }
141
+ const localizedRelativePath = localizedTemplateRelativePath(normalized, language);
142
+ checked.push({
143
+ language,
144
+ relativePath: normalized,
145
+ localizedRelativePath,
146
+ });
147
+ if (!fs.existsSync(path.join(templateRoot, localizedRelativePath))) {
148
+ missing.push({
149
+ language,
150
+ relativePath: normalized,
151
+ localizedRelativePath,
152
+ });
153
+ }
154
+ }
155
+ }
156
+
157
+ return {
158
+ ok: missing.length === 0,
159
+ checked,
160
+ missing,
161
+ skipped,
162
+ };
163
+ }
164
+
165
+ module.exports = {
166
+ collectLocalizedTemplateCoverage,
167
+ isHumanTemplatePath,
168
+ localizedTemplateRelativePath,
169
+ resolveLocalizedTemplatePath,
170
+ resolveTemplateLanguage,
171
+ toTemplatePath,
172
+ };
@@ -7,6 +7,7 @@ const {
7
7
  quiverInternalPaths,
8
8
  resolveInitPackageScripts,
9
9
  } = require('./init-layout');
10
+ const { resolveLocalizedTemplatePath } = require('./i18n/templates');
10
11
  const { writeState } = require('./state');
11
12
 
12
13
  function ensureDir(dirPath) {
@@ -118,6 +119,17 @@ function copyRenderedFile(sourcePath, destinationPath, replacements, skipIfExist
118
119
  return 'created';
119
120
  }
120
121
 
122
+ function resolveGeneratedTemplatePath(templateRoot, relativePath, options = {}) {
123
+ const basePath = path.join(templateRoot, relativePath);
124
+ if (!fs.existsSync(basePath)) {
125
+ return '';
126
+ }
127
+ return resolveLocalizedTemplatePath(templateRoot, relativePath, {
128
+ language: options.language,
129
+ projectRoot: options.projectRoot,
130
+ }).templatePath;
131
+ }
132
+
121
133
  function copyBinaryFile(sourcePath, destinationPath, skipIfExists) {
122
134
  if (skipIfExists && fs.existsSync(destinationPath)) {
123
135
  return 'skipped';
@@ -398,7 +410,9 @@ npm run quiver:ai:execute-plan -- --dry-run --commit --mode delegated
398
410
  The generated project includes \`quiver:*\` npm scripts that call the Node CLI:
399
411
 
400
412
  \`\`\`bash
413
+ npm run quiver:version
401
414
  npm run quiver:analyze
415
+ npm run quiver:dashboard
402
416
  npm run quiver:prepare -- --dry-run
403
417
  npm run quiver:plan
404
418
  npm run quiver:graph
@@ -504,7 +518,9 @@ Remove \`--dry-run\` only after the phase output is approved and the local provi
504
518
  The generated project includes \`quiver:*\` npm scripts that call the Node CLI and are the preferred repeatable workflow:
505
519
 
506
520
  \`\`\`bash
521
+ npm run quiver:version
507
522
  npm run quiver:analyze
523
+ npm run quiver:dashboard
508
524
  npm run quiver:prepare -- --dry-run
509
525
  npm run quiver:plan
510
526
  npm run quiver:graph
@@ -538,6 +554,8 @@ npm run quiver:refresh-active-slices
538
554
  \`\`\`
539
555
 
540
556
  The \`quiver:graph\` script prints the tree view by default; use \`npx create-quiver graph --format mermaid\` for PR-ready Markdown and \`--format dot\` when you want Graphviz source.
557
+ The \`quiver:version\` script shows the Quiver-branded version report; add \`--json\` for automation while top-level \`--version\` stays semver-only.
558
+ The \`quiver:dashboard\` script shows compact read-only project, spec, slice, run, approval, and agent status by default; use \`--details\` for the full report, \`--section <name>\` for focused inspection, and \`--json\` for automation.
541
559
  The \`quiver:next\` script points to the next ready slice and can auto-start it behind a confirmation prompt.
542
560
  The \`quiver:ai:*\` scripts standardize planner/executor AI flows. Use dry-run first: onboarding and planning dry-runs do not require provider auth, \`quiver:ai:execute-plan -- --dry-run --commit --mode manual\` prints manual prompts, \`--mode delegated\` prints safe waves, \`quiver:ai:inspect\` shows lifecycle state, \`quiver:ai:export -- --format json|markdown\` emits dashboard/agent-friendly state, and \`quiver:ai:pr -- --dry-run\` validates \`gh\`, GitFlow docs, branch/worktree state, SSH inputs, and \`pr.md\` without creating a PR. Add \`--create\` only after reviewing the plan.
543
561
  Use \`quiver:spec:create\`, \`quiver:spec:start\`, \`quiver:spec:status\`, and \`quiver:spec:close\` for one spec generation and worktree per spec.
@@ -680,6 +698,7 @@ function initializeProjectDocs(options) {
680
698
  migrateMode = false,
681
699
  profile = 'default',
682
700
  templateRoot: providedTemplateRoot = '',
701
+ language = '',
683
702
  } = options;
684
703
 
685
704
  const templateRoot = providedTemplateRoot || path.join(projectRoot, 'docs-template');
@@ -741,8 +760,9 @@ function initializeProjectDocs(options) {
741
760
  operations.push({ source: 'packaged templates', destination: '.quiver/templates', result: 'merged' });
742
761
  }
743
762
 
744
- const agentsSourcePath = path.join(templateRoot, 'AGENTS.md.template');
745
- if (fs.existsSync(agentsSourcePath)) {
763
+ const templateLanguageOptions = { language, projectRoot };
764
+ const agentsSourcePath = resolveGeneratedTemplatePath(templateRoot, 'AGENTS.md.template', templateLanguageOptions);
765
+ if (agentsSourcePath) {
746
766
  const agentsDestinationPath = path.join(projectRoot, 'AGENTS.md');
747
767
  const result = copyRenderedFile(agentsSourcePath, agentsDestinationPath, replacements, true);
748
768
  operations.push({ source: 'AGENTS.md.template', destination: 'AGENTS.md', result });
@@ -808,8 +828,8 @@ function initializeProjectDocs(options) {
808
828
  continue;
809
829
  }
810
830
 
811
- const sourcePath = path.join(templateRoot, source);
812
- if (!fs.existsSync(sourcePath)) {
831
+ const sourcePath = resolveGeneratedTemplatePath(templateRoot, source, templateLanguageOptions);
832
+ if (!sourcePath) {
813
833
  continue;
814
834
  }
815
835
 
@@ -125,6 +125,7 @@ function normalizeInitLayoutOptions(options = {}) {
125
125
  dryRun: options.dryRun === true,
126
126
  full,
127
127
  includeTemplates: options.includeTemplates === true,
128
+ language: typeof options.language === 'string' ? options.language : '',
128
129
  legacyScripts: options.legacyScripts === true,
129
130
  minimal,
130
131
  skipInstall: options.skipInstall === true,
@@ -181,8 +182,10 @@ function resolveInitVisibleDirectories(profile, projectSlug) {
181
182
  function resolveInitPackageScripts(profile, options = {}) {
182
183
  const baseScripts = {
183
184
  'quiver:migrate': 'npx create-quiver migrate',
185
+ 'quiver:version': 'npx create-quiver version',
184
186
  'quiver:analyze': 'npx create-quiver analyze',
185
187
  'quiver:flow': 'npx create-quiver flow',
188
+ 'quiver:dashboard': 'npx create-quiver dashboard',
186
189
  'quiver:prepare': 'npx create-quiver prepare',
187
190
  'quiver:plan': 'npx create-quiver plan',
188
191
  'quiver:graph': 'npx create-quiver graph',
@@ -351,6 +354,7 @@ function buildInitLayout(projectRoot, options = {}) {
351
354
  projectSlug,
352
355
  targetRoot: path.resolve(projectRoot),
353
356
  flags: normalized,
357
+ language: normalized.language,
354
358
  operations,
355
359
  ignoredPaths: [...new Set(ignoredPaths)],
356
360
  risks,
@@ -372,6 +376,10 @@ function formatInitLayoutPlan(plan) {
372
376
  lines.push(`- Slug: ${plan.projectSlug}`);
373
377
  lines.push(`- Target: ${plan.targetRoot}`);
374
378
  lines.push(`- Profile: ${plan.profile}`);
379
+ if (plan.language) {
380
+ lines.push(`- Language: ${plan.language}`);
381
+ lines.push('- Language config: write .quiver/config.json');
382
+ }
375
383
  lines.push(`- Entry point: ${entryPoint}`);
376
384
  lines.push(`- Planned create: ${plan.summary.create}`);
377
385
  lines.push(`- Planned update: ${plan.summary.update}`);
@@ -2,6 +2,7 @@ const fs = require('fs');
2
2
  const path = require('path');
3
3
  const { branchDelete, catFileExists, currentBranch, fetchBranch, fetchRemote, hasLocalBranch, hasRemoteBranch, isGitWorktree, isLinkedWorktree, lsRemoteHeads, mergeBaseIsAncestor, revListCount, runGit, statusPorcelain, worktreeAdd, worktreeList, worktreePrune, worktreeRemove } = require('./git');
4
4
  const { parseJsonWithComments } = require('./json');
5
+ const { createTranslator } = require('./i18n/catalog');
5
6
  const { writeFrontMatter } = require('./init-docs');
6
7
  const { withLockSync } = require('./locks');
7
8
  const { relativePosixPath, resolveTargetRoot } = require('./paths');
@@ -12,6 +13,10 @@ function ensureDir(dirPath) {
12
13
  fs.mkdirSync(dirPath, { recursive: true });
13
14
  }
14
15
 
16
+ function lifecycleTranslator(options = {}) {
17
+ return createTranslator(options.language);
18
+ }
19
+
15
20
  function estimateTokenCost(text) {
16
21
  return Math.max(1, Math.ceil(Buffer.byteLength(text, 'utf8') / 4));
17
22
  }
@@ -267,7 +272,7 @@ function refreshActiveSlicesBoard(repoRoot) {
267
272
  return outputPath;
268
273
  }
269
274
 
270
- function resolveBaseRef(repoRoot, baseBranch) {
275
+ function resolveBaseRef(repoRoot, baseBranch, translator = lifecycleTranslator()) {
271
276
  if (hasLocalBranch(repoRoot, baseBranch)) {
272
277
  return baseBranch;
273
278
  }
@@ -279,10 +284,10 @@ function resolveBaseRef(repoRoot, baseBranch) {
279
284
  fetchBranch(repoRoot, baseBranch);
280
285
  return `origin/${baseBranch}`;
281
286
  } catch {
282
- throw new Error(`create-quiver: origin existe pero no se pudo actualizar '${baseBranch}'. Revisa conectividad o crea la rama local '${baseBranch}' antes de correr start-slice.`);
287
+ throw new Error(`create-quiver: ${translator.t('lifecycle.base_ref.fetch_failed', { base: baseBranch })}`);
283
288
  }
284
289
  }
285
- throw new Error(`create-quiver: no se encontró '${baseBranch}' como rama local ni como ref remota 'origin/${baseBranch}'. Crea la rama base localmente o configura origin antes de correr start-slice.`);
290
+ throw new Error(`create-quiver: ${translator.t('lifecycle.base_ref.missing', { base: baseBranch, remoteRef: `origin/${baseBranch}` })}`);
286
291
  }
287
292
 
288
293
  function findExistingWorktreeForBranch(repoRoot, branchName) {
@@ -326,6 +331,7 @@ function formatNestedSliceWorktree(branchName, existingWorktreePath = '') {
326
331
  }
327
332
 
328
333
  function startSlice(sliceInput, options = {}) {
334
+ const translator = lifecycleTranslator(options);
329
335
  const allowDraft = options.allowDraft === true || process.env.ALLOW_DRAFT_SLICE === '1';
330
336
  const repoRoot = runGit(['rev-parse', '--show-toplevel'], process.cwd());
331
337
  const slice = resolveSliceContext(repoRoot, sliceInput);
@@ -338,19 +344,19 @@ function startSlice(sliceInput, options = {}) {
338
344
  validateSliceMetaForStart(slice);
339
345
 
340
346
  if (slice.status === 'blocked') {
341
- throw new Error('create-quiver: el slice esta bloqueado (status=blocked). Resolve el bloqueante antes de iniciar.');
347
+ throw new Error(`create-quiver: ${translator.t('lifecycle.start.error.blocked')}`);
342
348
  }
343
349
  if (slice.status === 'cancelled') {
344
- throw new Error('create-quiver: el slice esta cancelado (status=cancelled).');
350
+ throw new Error(`create-quiver: ${translator.t('lifecycle.start.error.cancelled')}`);
345
351
  }
346
352
  if (slice.status === 'completed') {
347
- console.log('WARN: el slice ya figura como completed. Si realmente corresponde reejecutarlo, cambia el status a in_progress.');
353
+ console.log(translator.t('lifecycle.start.warn.completed'));
348
354
  }
349
355
  if (slice.status === 'draft' && !allowDraft) {
350
- throw new Error("create-quiver: el slice esta en estado 'draft'. Marca el slice como 'ready' o usa --allow-draft para un bootstrap intencional.");
356
+ throw new Error(`create-quiver: ${translator.t('lifecycle.start.error.draft')}`);
351
357
  }
352
358
  if (slice.status === 'draft') {
353
- console.log('WARN: bootstrap intencional para un slice en draft.');
359
+ console.log(translator.t('lifecycle.start.warn.draft'));
354
360
  }
355
361
 
356
362
  return withLockSync(repoRoot, `slice-worktree-${slice.branchName}`, {
@@ -375,19 +381,19 @@ function startSlice(sliceInput, options = {}) {
375
381
  writeWorktreeContext(existingWorktreePath, slice, slice.branchName);
376
382
  const activeSlice = writeActiveSlice(repoRoot, slice);
377
383
  if (activeSlice.replaced) {
378
- console.log('WARN: Reemplazando docs/ai/ACTIVE_SLICE.md existente.');
384
+ console.log(translator.t('lifecycle.active_slice.replaced'));
379
385
  } else {
380
- console.log('Wrote docs/ai/ACTIVE_SLICE.md');
386
+ console.log(translator.t('lifecycle.active_slice.wrote'));
381
387
  }
382
388
  refreshActiveSlicesBoard(repoRoot);
383
- console.log('La rama ya tiene un worktree asociado.');
384
- console.log(`Alias: ${toAlias(slice.ticket)}`);
385
- console.log(`Spec: ${slice.specSlug}`);
386
- console.log(`Slice: ${slice.sliceId}`);
387
- console.log(`Ticket: ${slice.ticket}`);
388
- console.log(`Rama: ${slice.branchName}`);
389
- console.log(`Base: ${slice.baseBranch}`);
390
- console.log(`Worktree: ${existingWorktreePath}`);
389
+ console.log(translator.t('lifecycle.start.existing_worktree'));
390
+ console.log(translator.t('lifecycle.label.alias', { value: toAlias(slice.ticket) }));
391
+ console.log(translator.t('lifecycle.label.spec', { value: slice.specSlug }));
392
+ console.log(translator.t('lifecycle.label.slice', { value: slice.sliceId }));
393
+ console.log(translator.t('lifecycle.label.ticket', { value: slice.ticket }));
394
+ console.log(translator.t('lifecycle.label.branch', { value: slice.branchName }));
395
+ console.log(translator.t('lifecycle.label.base', { value: slice.baseBranch }));
396
+ console.log(translator.t('lifecycle.label.worktree', { value: existingWorktreePath }));
391
397
  return { worktreePath: existingWorktreePath, reused: true };
392
398
  }
393
399
 
@@ -418,35 +424,36 @@ function startSlice(sliceInput, options = {}) {
418
424
  }
419
425
  worktreeAdd(repoRoot, worktreePath, slice.branchName);
420
426
  } else {
421
- const baseRef = resolveBaseRef(repoRoot, slice.baseBranch);
427
+ const baseRef = resolveBaseRef(repoRoot, slice.baseBranch, translator);
422
428
  worktreeAdd(repoRoot, worktreePath, baseRef, { branch: slice.branchName });
423
429
  }
424
430
 
425
431
  writeWorktreeContext(worktreePath, slice, slice.branchName);
426
432
  const activeSlice = writeActiveSlice(repoRoot, slice);
427
433
  if (activeSlice.replaced) {
428
- console.log('WARN: Reemplazando docs/ai/ACTIVE_SLICE.md existente.');
434
+ console.log(translator.t('lifecycle.active_slice.replaced'));
429
435
  } else {
430
- console.log('Wrote docs/ai/ACTIVE_SLICE.md');
436
+ console.log(translator.t('lifecycle.active_slice.wrote'));
431
437
  }
432
438
  refreshActiveSlicesBoard(repoRoot);
433
439
 
434
- console.log('Slice listo para trabajar.');
435
- console.log(`Alias: ${toAlias(slice.ticket)}`);
436
- console.log(`Spec: ${slice.specSlug}`);
437
- console.log(`Slice: ${slice.sliceId}`);
438
- console.log(`Ticket: ${slice.ticket}`);
439
- console.log(`Tipo de rama: ${slice.branchType}`);
440
- console.log(`Base: ${slice.baseBranch}`);
441
- console.log(`Slug: ${slice.branchSlug}`);
442
- console.log(`Rama: ${slice.branchName}`);
443
- console.log(`Worktree: ${worktreePath}`);
444
- console.log(`Contexto: ${worktreePath}/WORKTREE_CONTEXT.md`);
440
+ console.log(translator.t('lifecycle.start.ready'));
441
+ console.log(translator.t('lifecycle.label.alias', { value: toAlias(slice.ticket) }));
442
+ console.log(translator.t('lifecycle.label.spec', { value: slice.specSlug }));
443
+ console.log(translator.t('lifecycle.label.slice', { value: slice.sliceId }));
444
+ console.log(translator.t('lifecycle.label.ticket', { value: slice.ticket }));
445
+ console.log(translator.t('lifecycle.label.branch_type', { value: slice.branchType }));
446
+ console.log(translator.t('lifecycle.label.base', { value: slice.baseBranch }));
447
+ console.log(translator.t('lifecycle.label.slug', { value: slice.branchSlug }));
448
+ console.log(translator.t('lifecycle.label.branch', { value: slice.branchName }));
449
+ console.log(translator.t('lifecycle.label.worktree', { value: worktreePath }));
450
+ console.log(translator.t('lifecycle.label.context', { value: `${worktreePath}/WORKTREE_CONTEXT.md` }));
445
451
  return { worktreePath, reused: false };
446
452
  });
447
453
  }
448
454
 
449
455
  function cleanupSlice(sliceInput, options = {}) {
456
+ const translator = lifecycleTranslator(options);
450
457
  const closeBaseline = options.closeBaseline === true;
451
458
  const discard = options.discard === true;
452
459
  const forceDelete = options.force === true;
@@ -457,18 +464,18 @@ function cleanupSlice(sliceInput, options = {}) {
457
464
  const worktreePath = path.join(worktreesRoot, safeBranchName(slice.branchName));
458
465
 
459
466
  if (slice.isBaseline && !closeBaseline) {
460
- console.log(`INFO: '${slice.sliceId}' es baseline. El worktree queda congelado por default.`);
461
- console.log('INFO: Usa --close-baseline solo cuando la primera ola del spec ya este estable o mergeada.');
467
+ console.log(translator.t('lifecycle.cleanup.baseline.info', { slice: slice.sliceId }));
468
+ console.log(translator.t('lifecycle.cleanup.baseline.close_hint'));
462
469
  return;
463
470
  }
464
471
 
465
472
  if (!discard) {
466
473
  const branch = currentBranch(repoRoot);
467
474
  if (branch !== 'develop') {
468
- throw new Error(`create-quiver: el cleanup normal debe correrse desde develop. Rama actual: ${branch}`);
475
+ throw new Error(`create-quiver: ${translator.t('lifecycle.cleanup.error.branch', { branch })}`);
469
476
  }
470
477
  if (statusPorcelain(repoRoot) !== '') {
471
- throw new Error('create-quiver: el checkout actual no esta limpio. Limpialo antes del cleanup.');
478
+ throw new Error(`create-quiver: ${translator.t('lifecycle.cleanup.error.dirty')}`);
472
479
  }
473
480
 
474
481
  try {
@@ -480,12 +487,12 @@ function cleanupSlice(sliceInput, options = {}) {
480
487
  const localDevelopSha = runGit(['rev-parse', 'HEAD'], repoRoot);
481
488
  const remoteDevelopSha = runGit(['rev-parse', 'origin/develop'], repoRoot);
482
489
  if (localDevelopSha !== remoteDevelopSha) {
483
- throw new Error('create-quiver: develop local no esta actualizado. Ejecuta git pull --ff-only antes del cleanup.');
490
+ throw new Error(`create-quiver: ${translator.t('lifecycle.cleanup.error.develop_stale')}`);
484
491
  }
485
492
 
486
493
  if (hasLocalBranch(repoRoot, slice.branchName)) {
487
494
  if (!mergeBaseIsAncestor(repoRoot, slice.branchName, 'origin/develop')) {
488
- throw new Error(`create-quiver: la rama '${slice.branchName}' no esta mergeada en origin/develop. Usa --discard si el slice se descarta.`);
495
+ throw new Error(`create-quiver: ${translator.t('lifecycle.cleanup.error.unmerged', { branch: slice.branchName })}`);
489
496
  }
490
497
  }
491
498
  }
@@ -493,38 +500,38 @@ function cleanupSlice(sliceInput, options = {}) {
493
500
  const worktreeExists = fs.existsSync(worktreePath);
494
501
  const branchExists = hasLocalBranch(repoRoot, slice.branchName);
495
502
  if (!worktreeExists && !branchExists) {
496
- throw new Error(`create-quiver: no existe worktree ni rama local para '${slice.sliceId}'.`);
503
+ throw new Error(`create-quiver: ${translator.t('lifecycle.cleanup.error.missing', { slice: slice.sliceId })}`);
497
504
  }
498
505
 
499
506
  const removeWorktree = () => worktreeRemove(repoRoot, worktreePath, forceDelete || discard);
500
507
  const removeBranch = () => branchDelete(repoRoot, slice.branchName, forceDelete || discard);
501
508
 
502
509
  if (dryRun) {
503
- console.log(`DRY RUN: slice=${slice.sliceId} branch=${slice.branchName}`);
510
+ console.log(translator.t('lifecycle.cleanup.dry_run.slice', { slice: slice.sliceId, branch: slice.branchName }));
504
511
  if (worktreeExists) {
505
- console.log(`DRY RUN: git worktree remove ${forceDelete || discard ? '--force ' : ''}${worktreePath}`);
512
+ console.log(translator.t('lifecycle.cleanup.dry_run.worktree', { force: forceDelete || discard ? '--force ' : '', path: worktreePath }));
506
513
  }
507
514
  if (branchExists) {
508
- console.log(`DRY RUN: git branch ${forceDelete || discard ? '-D' : '-d'} ${slice.branchName}`);
515
+ console.log(translator.t('lifecycle.cleanup.dry_run.branch', { flag: forceDelete || discard ? '-D' : '-d', branch: slice.branchName }));
509
516
  }
510
517
  return;
511
518
  }
512
519
 
513
520
  if (worktreeExists) {
514
521
  removeWorktree();
515
- console.log(`PASS: Worktree eliminado: ${worktreePath}`);
522
+ console.log(translator.t('lifecycle.cleanup.removed_worktree', { path: worktreePath }));
516
523
  }
517
524
  if (branchExists) {
518
525
  removeBranch();
519
- console.log(`PASS: Rama local eliminada: ${slice.branchName}`);
526
+ console.log(translator.t('lifecycle.cleanup.removed_branch', { branch: slice.branchName }));
520
527
  }
521
528
 
522
529
  if (removeActiveSlice(repoRoot)) {
523
- console.log('PASS: ACTIVE_SLICE.md eliminado');
530
+ console.log(translator.t('lifecycle.cleanup.removed_active_slice'));
524
531
  }
525
532
 
526
533
  refreshActiveSlicesBoard(repoRoot);
527
- console.log(`PASS: Cleanup finalizado para '${slice.sliceId}'.`);
534
+ console.log(translator.t('lifecycle.cleanup.finished', { slice: slice.sliceId }));
528
535
  }
529
536
 
530
537
  module.exports = {
@@ -83,8 +83,28 @@ function safeBuildGraph(slices, allowGraphErrors) {
83
83
  function resolveProjectState(projectRoot, options = {}) {
84
84
  const specSlug = options.specSlug ? String(options.specSlug).trim() : '';
85
85
  const rawSlices = readResolverSlices(projectRoot, specSlug);
86
- const graph = safeBuildGraph(rawSlices, options.allowGraphErrors === true);
87
- const orderedSlices = graph.ok ? topoSort(graph).map(normalizeSliceRecord) : graph.nodes.slice().sort((left, right) => compareRefs(left.ref, right.ref));
86
+ let graph = safeBuildGraph(rawSlices, options.allowGraphErrors === true);
87
+ let orderedSlices;
88
+
89
+ try {
90
+ orderedSlices = graph.ok ? topoSort(graph).map(normalizeSliceRecord) : graph.nodes.slice().sort((left, right) => compareRefs(left.ref, right.ref));
91
+ } catch (error) {
92
+ if (!options.allowGraphErrors || !(error instanceof SliceGraphError)) {
93
+ throw error;
94
+ }
95
+
96
+ graph = {
97
+ ok: false,
98
+ nodes: inferDependencies(rawSlices).map(normalizeSliceRecord),
99
+ edges: [],
100
+ cycles: Array.isArray(graph.cycles) ? graph.cycles : [],
101
+ error: {
102
+ code: error.code,
103
+ message: error.message,
104
+ },
105
+ };
106
+ orderedSlices = graph.nodes.slice().sort((left, right) => compareRefs(left.ref, right.ref));
107
+ }
88
108
 
89
109
  return {
90
110
  graph,