create-quiver 0.15.3 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/pull_request_template.md +17 -0
- package/.github/workflows/ci.yml +79 -0
- package/.markdown-link-check.json +15 -0
- package/.markdownlint.json +11 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/approvals.json +5 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/decisions.md +2 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/requirement.md +0 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/docs/INDEX.md +97 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/manifest.json +61 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/state.json +28 -0
- package/ACTIVE_SLICES.md +43 -0
- package/AGENTS.md.es.template +37 -0
- package/ARCHITECTURE.md +133 -0
- package/CHANGELOG.md +12 -0
- package/CONTRIBUTING.md +174 -9
- package/README.md +10 -1
- package/ROADMAP.md +4 -0
- package/SECURITY.md +9 -2
- package/auditoria-ux-ui-performance-documentacion.md +705 -0
- package/copys-landing-page.md +244 -0
- package/docs/AI_CONTEXT.md.es.template +37 -0
- package/docs/AI_CONTEXT.md.template +3 -1
- package/docs/AI_ONBOARDING_PROMPT.md.es.template +22 -0
- package/docs/CLI_UX_GUIDE.md +55 -1
- package/docs/COMMANDS.md.es.template +28 -0
- package/docs/COMMANDS.md.template +20 -6
- package/docs/CONTEXTO.md.es.template +33 -0
- package/docs/DECISIONS.md.es.template +17 -0
- package/docs/GITFLOW_PR_GUIDE.md +73 -11
- package/docs/GITFLOW_PR_GUIDE.md.es.template +84 -0
- package/docs/GITFLOW_PR_GUIDE.md.template +72 -10
- package/docs/INDEX.md +11 -1
- package/docs/INDEX.md.es.template +36 -0
- package/docs/QUICK.md.template +2 -1
- package/docs/STANDARD.md.template +2 -1
- 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 +31 -0
- package/docs/WORKFLOW.md.template +6 -4
- package/docs/ai/ACTIVE_SLICE.md +61 -0
- package/docs/ai/LESSONS.md.es.template +24 -0
- package/docs/getting-started/installation.md +26 -0
- package/docs/reference/commands.md +159 -7
- package/docs/reference/slice-schema.md +37 -0
- package/docs/schema/slice.schema.json +221 -0
- package/docs/specs/01-spec/01-slice/01-slice.json +36 -0
- package/docs/specs/01-spec/01-slice/01-slice.md +106 -0
- package/docs/specs/01-spec/01-slice/CLOSURE_BRIEF.md +80 -0
- package/docs/specs/01-spec/01-slice/EXECUTION_BRIEF.md +39 -0
- package/docs/specs/01-spec/02-slice/02-slice.json +36 -0
- package/docs/specs/01-spec/02-slice/02-slice.md +108 -0
- package/docs/specs/01-spec/02-slice/CLOSURE_BRIEF.md +88 -0
- package/docs/specs/01-spec/02-slice/EXECUTION_BRIEF.md +40 -0
- package/docs/specs/01-spec/03-slice/03-slice.json +36 -0
- package/docs/specs/01-spec/03-slice/03-slice.md +103 -0
- package/docs/specs/01-spec/03-slice/CLOSURE_BRIEF.md +54 -0
- package/docs/specs/01-spec/03-slice/EXECUTION_BRIEF.md +39 -0
- package/docs/specs/01-spec/04-slice/04-slice.json +36 -0
- package/docs/specs/01-spec/04-slice/04-slice.md +107 -0
- package/docs/specs/01-spec/04-slice/CLOSURE_BRIEF.md +46 -0
- package/docs/specs/01-spec/04-slice/EXECUTION_BRIEF.md +39 -0
- package/docs/specs/01-spec/05-slice/05-slice.json +36 -0
- package/docs/specs/01-spec/05-slice/05-slice.md +106 -0
- package/docs/specs/01-spec/05-slice/CLOSURE_BRIEF.md +84 -0
- package/docs/specs/01-spec/05-slice/EXECUTION_BRIEF.md +109 -0
- package/docs/specs/01-spec/06-slice/06-slice.json +36 -0
- package/docs/specs/01-spec/06-slice/06-slice.md +107 -0
- package/docs/specs/01-spec/06-slice/CLOSURE_BRIEF.md +67 -0
- package/docs/specs/01-spec/06-slice/EXECUTION_BRIEF.md +39 -0
- package/docs/specs/01-spec/07-slice/07-slice.json +36 -0
- package/docs/specs/01-spec/07-slice/07-slice.md +105 -0
- package/docs/specs/01-spec/07-slice/CLOSURE_BRIEF.md +71 -0
- package/docs/specs/01-spec/07-slice/EXECUTION_BRIEF.md +39 -0
- package/docs/specs/01-spec/08-slice/08-slice.json +36 -0
- package/docs/specs/01-spec/08-slice/08-slice.md +105 -0
- package/docs/specs/01-spec/08-slice/CLOSURE_BRIEF.md +114 -0
- package/docs/specs/01-spec/08-slice/EXECUTION_BRIEF.md +39 -0
- package/docs/specs/01-spec/CLOSURE_BRIEF.md +87 -0
- package/docs/specs/01-spec/spec.md +197 -0
- package/docs/workflows/full-ai-spec-to-pr.md +46 -3
- package/i18n/es/docs/GITFLOW_PR_GUIDE.md.template +38 -1
- package/package.json +27 -1
- package/pr.md +154 -0
- package/scripts/package-quiver.sh +82 -2
- package/scripts/release-quiver.sh +14 -3
- package/specs/[project-name]/slices/pr.md.template +19 -0
- 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 +636 -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/specs/quiver-v50-audit-trust-foundation/EVIDENCE_REPORT.md +151 -0
- package/specs/quiver-v50-audit-trust-foundation/EXECUTION_PLAN.md +34 -0
- package/specs/quiver-v50-audit-trust-foundation/SPEC.md +113 -0
- package/specs/quiver-v50-audit-trust-foundation/STATUS.md +26 -0
- package/specs/quiver-v50-audit-trust-foundation/pr.md +120 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-00-audit-baseline-and-resolved-findings/CLOSURE_BRIEF.md +20 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-00-audit-baseline-and-resolved-findings/EXECUTION_BRIEF.md +58 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-00-audit-baseline-and-resolved-findings/slice.json +57 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-01-runtime-minimum-and-package-metadata/CLOSURE_BRIEF.md +24 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-01-runtime-minimum-and-package-metadata/EXECUTION_BRIEF.md +67 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-01-runtime-minimum-and-package-metadata/slice.json +71 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-02-migrate-write-safety-contract/CLOSURE_BRIEF.md +24 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-02-migrate-write-safety-contract/EXECUTION_BRIEF.md +71 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-02-migrate-write-safety-contract/slice.json +81 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-03-security-reporting-channel/CLOSURE_BRIEF.md +22 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-03-security-reporting-channel/EXECUTION_BRIEF.md +57 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-03-security-reporting-channel/slice.json +56 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-04-user-facing-i18n-error-coverage/CLOSURE_BRIEF.md +23 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-04-user-facing-i18n-error-coverage/EXECUTION_BRIEF.md +68 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-04-user-facing-i18n-error-coverage/slice.json +84 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-05-init-analyze-progress-and-summaries/CLOSURE_BRIEF.md +25 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-05-init-analyze-progress-and-summaries/EXECUTION_BRIEF.md +73 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-05-init-analyze-progress-and-summaries/slice.json +72 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-06-contributor-and-architecture-docs/CLOSURE_BRIEF.md +22 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-06-contributor-and-architecture-docs/EXECUTION_BRIEF.md +66 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-06-contributor-and-architecture-docs/slice.json +74 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-07-ci-and-documentation-lint-baseline/CLOSURE_BRIEF.md +29 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-07-ci-and-documentation-lint-baseline/EXECUTION_BRIEF.md +74 -0
- package/specs/quiver-v50-audit-trust-foundation/slices/slice-07-ci-and-documentation-lint-baseline/slice.json +81 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/EVIDENCE_REPORT.md +145 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/EXECUTION_PLAN.md +32 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/SPEC.md +109 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/STATUS.md +25 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/pr.md +69 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/CLOSURE_BRIEF.md +20 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/EXECUTION_BRIEF.md +58 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/slice.json +56 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-01-flow-json-compatibility/CLOSURE_BRIEF.md +21 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-01-flow-json-compatibility/EXECUTION_BRIEF.md +61 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-01-flow-json-compatibility/slice.json +68 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/CLOSURE_BRIEF.md +25 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/EXECUTION_BRIEF.md +65 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/pr.md +134 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/slice.json +80 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/CLOSURE_BRIEF.md +31 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/EXECUTION_BRIEF.md +80 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/pr.md +159 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/slice.json +102 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/CLOSURE_BRIEF.md +25 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/EXECUTION_BRIEF.md +74 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/pr.md +147 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/slice.json +91 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/CLOSURE_BRIEF.md +28 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/EXECUTION_BRIEF.md +73 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/pr.md +146 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/slice.json +100 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/CLOSURE_BRIEF.md +36 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md +76 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/pr.md +155 -0
- package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/slice.json +111 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/EVIDENCE_REPORT.md +95 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/EXECUTION_PLAN.md +31 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/SPEC.md +107 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/STATUS.md +22 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/pr.md +69 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-00-schema-docs-release-baseline/CLOSURE_BRIEF.md +21 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-00-schema-docs-release-baseline/EXECUTION_BRIEF.md +60 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-00-schema-docs-release-baseline/slice.json +62 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/CLOSURE_BRIEF.md +34 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/EXECUTION_BRIEF.md +71 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/pr.md +146 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/slice.json +106 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/CLOSURE_BRIEF.md +33 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/EXECUTION_BRIEF.md +67 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/pr.md +144 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/slice.json +86 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/CLOSURE_BRIEF.md +38 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/EXECUTION_BRIEF.md +75 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/pr.md +159 -0
- package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/slice.json +105 -0
- package/src/create-quiver/commands/ai.js +485 -307
- package/src/create-quiver/commands/changelog.js +93 -0
- package/src/create-quiver/commands/config.js +135 -0
- package/src/create-quiver/commands/demo.js +2 -2
- package/src/create-quiver/commands/evidence.js +39 -6
- package/src/create-quiver/commands/flow.js +109 -16
- package/src/create-quiver/commands/graph.js +9 -2
- package/src/create-quiver/commands/next.js +21 -18
- package/src/create-quiver/commands/plan.js +29 -6
- package/src/create-quiver/commands/spec.js +94 -70
- package/src/create-quiver/index.js +798 -223
- 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 +29 -23
- package/src/create-quiver/lib/ai/run-state.js +28 -25
- package/src/create-quiver/lib/ai/spec-templates.js +19 -0
- package/src/create-quiver/lib/cli/command-registry.js +71 -0
- package/src/create-quiver/lib/cli/parser.js +14 -0
- package/src/create-quiver/lib/dashboard.js +154 -111
- package/src/create-quiver/lib/demo.js +14 -12
- package/src/create-quiver/lib/evidence.js +161 -6
- package/src/create-quiver/lib/git.js +99 -0
- 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 +898 -0
- package/src/create-quiver/lib/i18n/messages/es.js +1013 -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 +19 -5
- package/src/create-quiver/lib/init-layout.js +15 -8
- package/src/create-quiver/lib/lifecycle.js +72 -67
- package/src/create-quiver/lib/readiness.js +131 -110
- package/src/create-quiver/lib/renderers/tree.js +9 -6
- package/src/create-quiver/lib/spec-worktrees.js +50 -64
- 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');
|