create-quiver 0.15.3 → 0.15.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +3 -0
- package/AGENTS.md.es.template +37 -0
- package/docs/AI_CONTEXT.md.es.template +35 -0
- package/docs/AI_ONBOARDING_PROMPT.md.es.template +22 -0
- package/docs/CLI_UX_GUIDE.md +46 -0
- package/docs/COMMANDS.md.es.template +28 -0
- package/docs/CONTEXTO.md.es.template +33 -0
- package/docs/DECISIONS.md.es.template +17 -0
- package/docs/GITFLOW_PR_GUIDE.md.es.template +25 -0
- package/docs/INDEX.md +10 -1
- package/docs/INDEX.md.es.template +36 -0
- package/docs/STATUS.md.es.template +28 -0
- package/docs/SUPPORT_MATRIX.md.es.template +22 -0
- package/docs/TESTING_GUIDE_FOR_AI.md.es.template +19 -0
- package/docs/TROUBLESHOOTING.md.es.template +35 -0
- package/docs/WORKFLOW.md.es.template +29 -0
- package/docs/ai/LESSONS.md.es.template +24 -0
- package/docs/getting-started/installation.md +19 -0
- package/docs/reference/commands.md +55 -1
- package/package.json +1 -1
- package/specs/quiver-v37-cli-i18n-foundation/EVIDENCE_REPORT.md +73 -0
- package/specs/quiver-v37-cli-i18n-foundation/EXECUTION_PLAN.md +34 -0
- package/specs/quiver-v37-cli-i18n-foundation/SPEC.md +91 -0
- package/specs/quiver-v37-cli-i18n-foundation/STATUS.md +29 -0
- package/specs/quiver-v37-cli-i18n-foundation/pr.md +97 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/slice.json +54 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/CLOSURE_BRIEF.md +30 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/EXECUTION_BRIEF.md +27 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/slice.json +66 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/CLOSURE_BRIEF.md +27 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/EXECUTION_BRIEF.md +26 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/slice.json +62 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/CLOSURE_BRIEF.md +32 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/EXECUTION_BRIEF.md +25 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/slice.json +66 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/CLOSURE_BRIEF.md +30 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/EXECUTION_BRIEF.md +24 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/slice.json +65 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/CLOSURE_BRIEF.md +27 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/slice.json +67 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/EVIDENCE_REPORT.md +69 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/EXECUTION_PLAN.md +25 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/SPEC.md +52 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/STATUS.md +24 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/pr.md +119 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/slice.json +53 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/CLOSURE_BRIEF.md +17 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/slice.json +69 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/CLOSURE_BRIEF.md +13 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/slice.json +77 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/slice.json +66 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/CLOSURE_BRIEF.md +13 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/slice.json +61 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/EVIDENCE_REPORT.md +71 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/EXECUTION_PLAN.md +25 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/SPEC.md +53 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/STATUS.md +24 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/pr.md +104 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/slice.json +53 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/slice.json +68 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/slice.json +62 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/slice.json +72 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/CLOSURE_BRIEF.md +15 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/slice.json +61 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/EVIDENCE_REPORT.md +50 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/EXECUTION_PLAN.md +25 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/SPEC.md +52 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/STATUS.md +24 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/pr.md +94 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/slice.json +53 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/slice.json +63 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/slice.json +63 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/slice.json +72 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/CLOSURE_BRIEF.md +15 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/slice.json +69 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/EVIDENCE_REPORT.md +90 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/EXECUTION_PLAN.md +33 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/SPEC.md +57 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/STATUS.md +26 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/pr.md +103 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/slice.json +53 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/CLOSURE_BRIEF.md +13 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/slice.json +68 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/slice.json +66 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/slice.json +68 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/CLOSURE_BRIEF.md +13 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/slice.json +72 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/CLOSURE_BRIEF.md +15 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/slice.json +66 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/CLOSURE_BRIEF.md +11 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/slice.json +70 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/EVIDENCE_REPORT.md +64 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/EXECUTION_PLAN.md +26 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/SPEC.md +52 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/STATUS.md +24 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/pr.md +125 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/slice.json +53 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/slice.json +62 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/CLOSURE_BRIEF.md +11 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/slice.json +72 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/slice.json +60 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/CLOSURE_BRIEF.md +16 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/slice.json +62 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/EVIDENCE_REPORT.md +203 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/EXECUTION_PLAN.md +27 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/SPEC.md +54 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/STATUS.md +24 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +545 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/cross-platform-smoke-matrix.md +35 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/pr.md +155 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/slice.json +53 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/CLOSURE_BRIEF.md +13 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/slice.json +62 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/slice.json +59 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/CLOSURE_BRIEF.md +15 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/slice.json +62 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/CLOSURE_BRIEF.md +17 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/EXECUTION_BRIEF.md +24 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/slice.json +66 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/EVIDENCE_REPORT.md +18 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/EXECUTION_PLAN.md +31 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/SPEC.md +118 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/STATUS.md +25 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/pr.md +92 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/CLOSURE_BRIEF.md +11 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/slice.json +64 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/EXECUTION_BRIEF.md +24 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/slice.json +65 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/EXECUTION_BRIEF.md +24 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/slice.json +70 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/EXECUTION_BRIEF.md +25 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/slice.json +70 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/EXECUTION_BRIEF.md +26 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/slice.json +72 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/CLOSURE_BRIEF.md +15 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/EXECUTION_BRIEF.md +26 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/slice.json +75 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/EVIDENCE_REPORT.md +30 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/EXECUTION_PLAN.md +22 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/SPEC.md +49 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/STATUS.md +21 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/pr.md +67 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/slice.json +48 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/CLOSURE_BRIEF.md +14 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/slice.json +65 -0
- package/src/create-quiver/commands/ai.js +485 -307
- package/src/create-quiver/commands/config.js +124 -0
- package/src/create-quiver/commands/demo.js +2 -2
- package/src/create-quiver/commands/evidence.js +6 -4
- package/src/create-quiver/commands/flow.js +108 -16
- package/src/create-quiver/commands/graph.js +1 -0
- package/src/create-quiver/commands/next.js +21 -18
- package/src/create-quiver/commands/plan.js +23 -6
- package/src/create-quiver/commands/spec.js +66 -57
- package/src/create-quiver/index.js +514 -139
- package/src/create-quiver/lib/ai/execution-plan.js +23 -20
- package/src/create-quiver/lib/ai/executor.js +60 -44
- package/src/create-quiver/lib/ai/export-state.js +75 -64
- package/src/create-quiver/lib/ai/github.js +24 -21
- package/src/create-quiver/lib/ai/run-state.js +28 -25
- package/src/create-quiver/lib/dashboard.js +154 -111
- package/src/create-quiver/lib/demo.js +14 -12
- package/src/create-quiver/lib/handoff.js +16 -7
- package/src/create-quiver/lib/i18n/catalog.js +152 -0
- package/src/create-quiver/lib/i18n/language.js +279 -0
- package/src/create-quiver/lib/i18n/messages/en.js +853 -0
- package/src/create-quiver/lib/i18n/messages/es.js +968 -0
- package/src/create-quiver/lib/i18n/read-only-format.js +26 -0
- package/src/create-quiver/lib/i18n/templates.js +172 -0
- package/src/create-quiver/lib/init-docs.js +18 -4
- package/src/create-quiver/lib/init-layout.js +6 -0
- package/src/create-quiver/lib/lifecycle.js +53 -46
- package/src/create-quiver/lib/readiness.js +77 -67
- package/src/create-quiver/lib/renderers/tree.js +9 -6
- package/src/create-quiver/lib/spec-worktrees.js +34 -30
- 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
|
-
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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 `-
|
|
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('
|
|
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
|
|
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
|
-
'
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
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, '
|
|
682
|
-
pushSignalSection(lines, report, '
|
|
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(
|
|
685
|
-
lines.push(
|
|
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
|
-
'
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
735
|
-
pushLimitedList(lines, report, 'warnings', report.warnings, limit, (warning) => `${warning.code}: ${warning.
|
|
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('
|
|
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('
|
|
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('
|
|
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
|
-
'
|
|
756
|
-
`-
|
|
757
|
-
`-
|
|
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('
|
|
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
|
-
'
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
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
|
-
'
|
|
779
|
-
`-
|
|
780
|
-
`-
|
|
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
|
-
'
|
|
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(`-
|
|
830
|
+
lines.push(`- ${translator.t('dashboard.start')}: ${report.next_ready.start_slice_command}`);
|
|
788
831
|
} else {
|
|
789
|
-
lines.push('
|
|
832
|
+
lines.push(`- ${translator.t('common.none')}`);
|
|
790
833
|
}
|
|
791
834
|
|
|
792
|
-
lines.push('', '
|
|
835
|
+
lines.push('', translator.t('dashboard.specs'));
|
|
793
836
|
if (report.specs.length === 0) {
|
|
794
|
-
lines.push('
|
|
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('', '
|
|
844
|
+
lines.push('', translator.t('dashboard.slices'));
|
|
802
845
|
if (report.slices.length === 0) {
|
|
803
|
-
lines.push('
|
|
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('', '
|
|
853
|
+
lines.push('', translator.t('dashboard.blockers'));
|
|
811
854
|
if (report.blockers.length === 0) {
|
|
812
|
-
lines.push('
|
|
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('', '
|
|
862
|
+
lines.push('', translator.t('dashboard.warnings'));
|
|
820
863
|
if (report.warnings.length === 0) {
|
|
821
|
-
lines.push('
|
|
864
|
+
lines.push(`- ${translator.t('common.none')}`);
|
|
822
865
|
} else {
|
|
823
866
|
for (const warning of report.warnings) {
|
|
824
|
-
lines.push(`- ${warning.code}: ${warning.
|
|
867
|
+
lines.push(`- ${warning.code}: ${formatWarningMessage(warning, report.source_metadata.spec_filter, translator)}`);
|
|
825
868
|
}
|
|
826
869
|
}
|
|
827
870
|
|
|
828
|
-
lines.push('', '
|
|
871
|
+
lines.push('', translator.t('dashboard.agents'));
|
|
829
872
|
if (report.agents.length === 0) {
|
|
830
|
-
lines.push('
|
|
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('', '
|
|
880
|
+
lines.push('', translator.t('dashboard.approvals'));
|
|
838
881
|
if (report.approvals.length === 0) {
|
|
839
|
-
lines.push('
|
|
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('', '
|
|
889
|
+
lines.push('', translator.t('dashboard.runs'));
|
|
847
890
|
if (report.runs.length === 0) {
|
|
848
|
-
lines.push('
|
|
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
|
-
'
|
|
858
|
-
`-
|
|
859
|
-
`-
|
|
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
|
-
'
|
|
904
|
+
translator.t('dashboard.next_safe_commands'),
|
|
862
905
|
);
|
|
863
906
|
|
|
864
907
|
if (report.next_steps.length === 0) {
|
|
865
|
-
lines.push('
|
|
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 ? '
|
|
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(`-
|
|
778
|
-
lines.push(`-
|
|
779
|
-
lines.push(`-
|
|
780
|
-
lines.push(`-
|
|
781
|
-
lines.push(`-
|
|
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('
|
|
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('
|
|
790
|
+
lines.push(`- ${translator.t('common.none')}`);
|
|
789
791
|
}
|
|
790
792
|
lines.push('');
|
|
791
|
-
lines.push('
|
|
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('
|
|
798
|
+
lines.push(`- ${translator.t('common.none')}`);
|
|
797
799
|
}
|
|
798
800
|
|
|
799
801
|
if (options.dryRun) {
|
|
800
802
|
lines.push('');
|
|
801
|
-
lines.push('
|
|
803
|
+
lines.push(translator.t('demo.no_files_written'));
|
|
802
804
|
} else {
|
|
803
805
|
lines.push('');
|
|
804
|
-
lines.push('
|
|
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');
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
|
+
const { createTranslator } = require('./i18n/catalog');
|
|
3
4
|
|
|
4
5
|
const REQUIRED_HEADINGS = [
|
|
5
6
|
'## Background',
|
|
@@ -141,23 +142,31 @@ function formatMinimalTemplate(kind) {
|
|
|
141
142
|
return lines.join('\n').trimEnd();
|
|
142
143
|
}
|
|
143
144
|
|
|
144
|
-
function formatMissingSectionsError(resolved, missingSections) {
|
|
145
|
+
function formatMissingSectionsError(resolved, missingSections, options = {}) {
|
|
146
|
+
const translator = createTranslator(options.language);
|
|
145
147
|
return [
|
|
146
|
-
`create-quiver: ${
|
|
148
|
+
`create-quiver: ${translator.t('handoff.error.missing_sections', {
|
|
149
|
+
sections: missingSections.join(', '),
|
|
150
|
+
subject: translator.t(`handoff.subject.${resolved.kind}`),
|
|
151
|
+
})}`,
|
|
147
152
|
'',
|
|
148
|
-
'
|
|
153
|
+
translator.t('handoff.accepted_headings'),
|
|
149
154
|
formatAliasGuidance(resolved.kind),
|
|
150
155
|
'',
|
|
151
|
-
'
|
|
156
|
+
translator.t('handoff.minimal_template'),
|
|
152
157
|
formatMinimalTemplate(resolved.kind),
|
|
153
158
|
].join('\n');
|
|
154
159
|
}
|
|
155
160
|
|
|
156
|
-
function checkHandoff(handoffInput, repoRoot = process.cwd()) {
|
|
161
|
+
function checkHandoff(handoffInput, repoRoot = process.cwd(), options = {}) {
|
|
157
162
|
const resolved = resolveHandoffPath(repoRoot, handoffInput);
|
|
163
|
+
const translator = createTranslator(options.language);
|
|
158
164
|
|
|
159
165
|
if (!fs.existsSync(resolved.absolutePath)) {
|
|
160
|
-
throw new Error(`create-quiver:
|
|
166
|
+
throw new Error(`create-quiver: ${translator.t('handoff.error.missing_file', {
|
|
167
|
+
path: resolved.relativePath,
|
|
168
|
+
subject: translator.t(`handoff.subject.${resolved.kind}`),
|
|
169
|
+
})}`);
|
|
161
170
|
}
|
|
162
171
|
|
|
163
172
|
const text = fs.readFileSync(resolved.absolutePath, 'utf8');
|
|
@@ -165,7 +174,7 @@ function checkHandoff(handoffInput, repoRoot = process.cwd()) {
|
|
|
165
174
|
? validateHandoffSections(text)
|
|
166
175
|
: validateBriefSections(text, resolved.kind);
|
|
167
176
|
if (missingSections.length > 0) {
|
|
168
|
-
throw new Error(formatMissingSectionsError(resolved, missingSections));
|
|
177
|
+
throw new Error(formatMissingSectionsError(resolved, missingSections, options));
|
|
169
178
|
}
|
|
170
179
|
|
|
171
180
|
return resolved;
|