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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const { relativePosixPath } = require('../lib/paths');
|
|
2
|
+
const { formatStatus, translatorForHuman } = require('../lib/i18n/read-only-format');
|
|
2
3
|
const { filterSlicesForExecution, resolveProjectState } = require('../lib/project-state-resolver');
|
|
3
4
|
const { topoSort } = require('../lib/slice-graph');
|
|
4
5
|
|
|
@@ -147,13 +148,21 @@ function collectPlan(repoRoot, options = {}) {
|
|
|
147
148
|
}
|
|
148
149
|
|
|
149
150
|
function formatHumanPlan(report, options = {}) {
|
|
151
|
+
const translator = translatorForHuman(options);
|
|
150
152
|
const unicode = Boolean(options.unicode) || /UTF-8/i.test(process.env.LANG || '');
|
|
151
|
-
const title = options.onlyReady
|
|
153
|
+
const title = options.onlyReady
|
|
154
|
+
? translator.t('plan.title.ready')
|
|
155
|
+
: (report.include_completed ? translator.t('plan.title.including_completed') : translator.t('plan.title'));
|
|
152
156
|
const pathSeparator = unicode ? ' → ' : ' -> ';
|
|
153
|
-
const lines = [
|
|
157
|
+
const lines = [
|
|
158
|
+
title,
|
|
159
|
+
`${translator.t('plan.total_hours')}: ${report.total_hours}`,
|
|
160
|
+
`${translator.t('plan.critical_path')}: ${report.critical_path.length > 0 ? report.critical_path.join(pathSeparator) : '-'}`,
|
|
161
|
+
'',
|
|
162
|
+
];
|
|
154
163
|
|
|
155
164
|
if (report.plan.length === 0) {
|
|
156
|
-
lines.push(report.include_completed ? '
|
|
165
|
+
lines.push(report.include_completed ? translator.t('plan.empty.filtered') : translator.t('plan.empty.pending'));
|
|
157
166
|
return `${lines.join('\n')}\n`;
|
|
158
167
|
}
|
|
159
168
|
|
|
@@ -163,21 +172,35 @@ function formatHumanPlan(report, options = {}) {
|
|
|
163
172
|
item.ref,
|
|
164
173
|
item.title,
|
|
165
174
|
`${item.hours}`,
|
|
166
|
-
item.status,
|
|
175
|
+
formatStatus(item.status, translator),
|
|
167
176
|
]);
|
|
168
177
|
|
|
178
|
+
const headers = [
|
|
179
|
+
translator.t('plan.header.index'),
|
|
180
|
+
translator.t('plan.header.ticket'),
|
|
181
|
+
translator.t('plan.header.spec_slice'),
|
|
182
|
+
translator.t('plan.header.title'),
|
|
183
|
+
translator.t('plan.header.hours'),
|
|
184
|
+
translator.t('plan.header.status'),
|
|
185
|
+
];
|
|
169
186
|
const widths = rows[0].map((_, colIndex) => Math.max(
|
|
170
187
|
rows.reduce((max, row) => Math.max(max, row[colIndex].length), 0),
|
|
171
|
-
[
|
|
188
|
+
headers[colIndex].length,
|
|
172
189
|
));
|
|
173
190
|
|
|
174
|
-
lines.push(
|
|
191
|
+
lines.push(headers.map((label, index) => label.padEnd(widths[index])).join(' '));
|
|
175
192
|
lines.push(widths.map((width) => '-'.repeat(width)).join(' '));
|
|
176
193
|
|
|
177
194
|
for (const row of rows) {
|
|
178
195
|
lines.push(row.map((value, index) => value.padEnd(widths[index])).join(' '));
|
|
179
196
|
}
|
|
180
197
|
|
|
198
|
+
const missingEstimateCount = report.plan.filter((item) => Number(item.hours) <= 0).length;
|
|
199
|
+
if (missingEstimateCount > 0) {
|
|
200
|
+
lines.push('');
|
|
201
|
+
lines.push(translator.t('plan.missing_estimates_note', { count: missingEstimateCount }));
|
|
202
|
+
}
|
|
203
|
+
|
|
181
204
|
return `${lines.join('\n')}\n`;
|
|
182
205
|
}
|
|
183
206
|
|
|
@@ -5,6 +5,7 @@ const { checkHandoff } = require('../lib/handoff');
|
|
|
5
5
|
const { openEditor } = require('../lib/cli/editor');
|
|
6
6
|
const { selectOption } = require('../lib/cli/selectors');
|
|
7
7
|
const { createUx } = require('../lib/cli/ux');
|
|
8
|
+
const { createTranslator } = require('../lib/i18n/catalog');
|
|
8
9
|
const { parseJsonWithComments } = require('../lib/json');
|
|
9
10
|
const { assertPathInsideRoot, validateProjectRelativePaths } = require('../lib/paths');
|
|
10
11
|
const { buildApprovalCandidateReport, formatReviewSummary } = require('../lib/ai/approval-candidates');
|
|
@@ -23,18 +24,22 @@ function toRelativePosix(root, filePath) {
|
|
|
23
24
|
return path.relative(root, filePath).split(path.sep).join('/');
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
function readInputText(repoRoot, inputPath) {
|
|
27
|
+
function readInputText(repoRoot, inputPath, options = {}) {
|
|
28
|
+
const translator = createTranslator(options.language);
|
|
27
29
|
const resolved = path.resolve(repoRoot, inputPath || '');
|
|
28
30
|
if (!inputPath || !fs.existsSync(resolved)) {
|
|
29
|
-
throw new Error(formatError(
|
|
31
|
+
throw new Error(formatError(translator.t('spec.error.missing_approved_plan_input', {
|
|
32
|
+
path: inputPath || '<default>',
|
|
33
|
+
})));
|
|
30
34
|
}
|
|
31
35
|
return fs.readFileSync(resolved, 'utf8');
|
|
32
36
|
}
|
|
33
37
|
|
|
34
|
-
function resolveSpecDir(repoRoot, specInput) {
|
|
38
|
+
function resolveSpecDir(repoRoot, specInput, options = {}) {
|
|
39
|
+
const translator = createTranslator(options.language);
|
|
35
40
|
const value = String(specInput || '').trim();
|
|
36
41
|
if (!value) {
|
|
37
|
-
throw new Error(formatError('
|
|
42
|
+
throw new Error(formatError(translator.t('spec.error.missing_directory_validate')));
|
|
38
43
|
}
|
|
39
44
|
|
|
40
45
|
const candidates = [
|
|
@@ -50,7 +55,7 @@ function resolveSpecDir(repoRoot, specInput) {
|
|
|
50
55
|
}
|
|
51
56
|
}
|
|
52
57
|
|
|
53
|
-
throw new Error(formatError(
|
|
58
|
+
throw new Error(formatError(translator.t('spec.error.directory_not_found', { path: value })));
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
function findSliceJsonFiles(specDir) {
|
|
@@ -141,7 +146,7 @@ function missingGitFields(git) {
|
|
|
141
146
|
|
|
142
147
|
function buildSpecValidationReport(repoRoot, specInput, options = {}) {
|
|
143
148
|
const strict = options.strict === true;
|
|
144
|
-
const specDir = resolveSpecDir(repoRoot, specInput);
|
|
149
|
+
const specDir = resolveSpecDir(repoRoot, specInput, options);
|
|
145
150
|
const relativeSpecDir = toRelativePosix(repoRoot, specDir);
|
|
146
151
|
const specSlug = path.basename(specDir);
|
|
147
152
|
const errors = [];
|
|
@@ -270,45 +275,49 @@ function buildSpecValidationReport(repoRoot, specInput, options = {}) {
|
|
|
270
275
|
};
|
|
271
276
|
}
|
|
272
277
|
|
|
273
|
-
function formatSpecValidationReport(report) {
|
|
278
|
+
function formatSpecValidationReport(report, options = {}) {
|
|
279
|
+
const translator = createTranslator(options.language);
|
|
274
280
|
const lines = [
|
|
275
|
-
'
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
281
|
+
translator.t('spec_validate.title'),
|
|
282
|
+
translator.t('spec_validate.spec', { path: report.specDir }),
|
|
283
|
+
translator.t('spec_validate.slices', { count: report.slices }),
|
|
284
|
+
translator.t('spec_validate.strict', { value: report.strict ? translator.t('common.yes') : translator.t('common.no') }),
|
|
279
285
|
];
|
|
280
286
|
|
|
281
287
|
if (report.checked.length > 0) {
|
|
282
|
-
lines.push('
|
|
288
|
+
lines.push(translator.t('spec_validate.checked_files'));
|
|
283
289
|
for (const file of report.checked) {
|
|
284
290
|
lines.push(`- ${file}`);
|
|
285
291
|
}
|
|
286
292
|
}
|
|
287
293
|
|
|
288
294
|
if (report.warnings.length > 0) {
|
|
289
|
-
lines.push('
|
|
295
|
+
lines.push(translator.t('spec_validate.warnings'));
|
|
290
296
|
for (const warning of report.warnings) {
|
|
291
297
|
lines.push(`- ${warning}`);
|
|
292
298
|
}
|
|
293
299
|
}
|
|
294
300
|
|
|
295
301
|
if (report.errors.length > 0) {
|
|
296
|
-
lines.push('
|
|
302
|
+
lines.push(translator.t('spec_validate.errors'));
|
|
297
303
|
for (const error of report.errors) {
|
|
298
304
|
lines.push(`- ${error}`);
|
|
299
305
|
}
|
|
300
306
|
}
|
|
301
307
|
|
|
302
|
-
lines.push(report.ok ? '
|
|
308
|
+
lines.push(report.ok ? translator.t('spec_validate.result.pass') : translator.t('spec_validate.result.fail'));
|
|
303
309
|
return `${lines.join('\n')}\n`;
|
|
304
310
|
}
|
|
305
311
|
|
|
306
312
|
function runValidateSpec(repoRoot, specInput, options = {}) {
|
|
307
313
|
const report = buildSpecValidationReport(repoRoot, specInput, options);
|
|
308
|
-
process.stdout.write(formatSpecValidationReport(report));
|
|
314
|
+
process.stdout.write(formatSpecValidationReport(report, options));
|
|
309
315
|
|
|
310
316
|
if (!report.ok) {
|
|
311
|
-
const
|
|
317
|
+
const translator = createTranslator(options.language);
|
|
318
|
+
const error = new Error(formatError(translator.t('spec.error.validate_failed', {
|
|
319
|
+
path: report.specDir,
|
|
320
|
+
})));
|
|
312
321
|
error.code = 'SPEC_VALIDATE_FAILED';
|
|
313
322
|
error.details = report;
|
|
314
323
|
throw error;
|
|
@@ -320,7 +329,7 @@ function runValidateSpec(repoRoot, specInput, options = {}) {
|
|
|
320
329
|
function buildSpecCreatePreview(repoRoot, options = {}) {
|
|
321
330
|
const resolved = resolveReviewedTechnicalPlanInput(repoRoot, options.input || undefined);
|
|
322
331
|
const inputPath = resolved.inputPath;
|
|
323
|
-
const inputText = readInputText(repoRoot, inputPath);
|
|
332
|
+
const inputText = readInputText(repoRoot, inputPath, options);
|
|
324
333
|
const manifest = buildSpecGenerationManifest({
|
|
325
334
|
inputPath,
|
|
326
335
|
inputText,
|
|
@@ -331,7 +340,9 @@ function buildSpecCreatePreview(repoRoot, options = {}) {
|
|
|
331
340
|
const relativeSpecDir = toRelativePosix(repoRoot, preview.specDir);
|
|
332
341
|
|
|
333
342
|
if (fs.existsSync(preview.specDir)) {
|
|
334
|
-
throw new Error(formatError(
|
|
343
|
+
throw new Error(formatError(createTranslator(options.language).t('spec.error.directory_already_exists', {
|
|
344
|
+
path: relativeSpecDir,
|
|
345
|
+
})));
|
|
335
346
|
}
|
|
336
347
|
|
|
337
348
|
return {
|
|
@@ -342,9 +353,10 @@ function buildSpecCreatePreview(repoRoot, options = {}) {
|
|
|
342
353
|
};
|
|
343
354
|
}
|
|
344
355
|
|
|
345
|
-
function formatNextCommands(specDir) {
|
|
356
|
+
function formatNextCommands(specDir, options = {}) {
|
|
357
|
+
const translator = createTranslator(options.language);
|
|
346
358
|
return [
|
|
347
|
-
'
|
|
359
|
+
translator.t('spec_create.next_safe_commands'),
|
|
348
360
|
`- npx create-quiver spec start ${specDir}`,
|
|
349
361
|
`- npx create-quiver spec status ${specDir}`,
|
|
350
362
|
'- npx create-quiver next',
|
|
@@ -352,14 +364,15 @@ function formatNextCommands(specDir) {
|
|
|
352
364
|
];
|
|
353
365
|
}
|
|
354
366
|
|
|
355
|
-
function formatSpecCreateDryRun(preview) {
|
|
367
|
+
function formatSpecCreateDryRun(preview, options = {}) {
|
|
368
|
+
const translator = createTranslator(options.language);
|
|
356
369
|
const lines = [
|
|
357
|
-
'
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
370
|
+
translator.t('spec_create.title.dry_run'),
|
|
371
|
+
translator.t('spec_create.label.slug', { slug: preview.manifest.slug }),
|
|
372
|
+
translator.t('spec_create.label.title', { title: preview.manifest.title }),
|
|
373
|
+
translator.t('spec_create.label.input_file', { path: preview.inputPath }),
|
|
374
|
+
translator.t('spec_create.label.target', { path: preview.relativeSpecDir }),
|
|
375
|
+
translator.t('spec_create.label.planned_files', { count: preview.preview.files.length }),
|
|
363
376
|
];
|
|
364
377
|
|
|
365
378
|
for (const file of preview.preview.files) {
|
|
@@ -367,28 +380,29 @@ function formatSpecCreateDryRun(preview) {
|
|
|
367
380
|
}
|
|
368
381
|
|
|
369
382
|
if (preview.reviewRequested) {
|
|
370
|
-
lines.push('
|
|
383
|
+
lines.push(translator.t('spec_create.review_requested.dry_run'));
|
|
371
384
|
}
|
|
372
385
|
|
|
373
|
-
lines.push(...formatNextCommands(preview.relativeSpecDir));
|
|
374
|
-
lines.push('
|
|
386
|
+
lines.push(...formatNextCommands(preview.relativeSpecDir, options));
|
|
387
|
+
lines.push(translator.t('spec_create.no_files_written_dry_run'));
|
|
375
388
|
return `${lines.join('\n')}\n`;
|
|
376
389
|
}
|
|
377
390
|
|
|
378
|
-
function formatSpecCreateResult(result, repoRoot) {
|
|
391
|
+
function formatSpecCreateResult(result, repoRoot, options = {}) {
|
|
392
|
+
const translator = createTranslator(options.language);
|
|
379
393
|
const relativeSpecDir = toRelativePosix(repoRoot, result.specDir);
|
|
380
394
|
const lines = [
|
|
381
|
-
'
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
395
|
+
translator.t('spec_create.title.created'),
|
|
396
|
+
translator.t('spec_create.label.slug', { slug: result.manifest.slug }),
|
|
397
|
+
translator.t('spec_create.label.target', { path: relativeSpecDir }),
|
|
398
|
+
translator.t('spec_create.label.files_written', { count: result.files.length }),
|
|
385
399
|
];
|
|
386
400
|
|
|
387
401
|
for (const filePath of result.files) {
|
|
388
402
|
lines.push(`- ${toRelativePosix(repoRoot, filePath)}`);
|
|
389
403
|
}
|
|
390
404
|
|
|
391
|
-
lines.push(...formatNextCommands(relativeSpecDir));
|
|
405
|
+
lines.push(...formatNextCommands(relativeSpecDir, options));
|
|
392
406
|
return `${lines.join('\n')}\n`;
|
|
393
407
|
}
|
|
394
408
|
|
|
@@ -397,24 +411,27 @@ function createSpecReviewFile(preview, options = {}) {
|
|
|
397
411
|
const reviewDir = options.reviewDir || fs.mkdtempSync(path.join(os.tmpdir(), 'quiver-spec-create-review-'));
|
|
398
412
|
const reviewPath = path.join(reviewDir, 'spec-create-preview.md');
|
|
399
413
|
fs.mkdirSync(reviewDir, { recursive: true });
|
|
400
|
-
fs.writeFileSync(reviewPath, formatSpecCreateDryRun({ ...preview, reviewRequested: false }));
|
|
414
|
+
fs.writeFileSync(reviewPath, formatSpecCreateDryRun({ ...preview, reviewRequested: false }, options));
|
|
401
415
|
return reviewPath;
|
|
402
416
|
}
|
|
403
417
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
418
|
+
function specMethodologyOptions(translator) {
|
|
419
|
+
return [
|
|
420
|
+
{
|
|
421
|
+
label: 'WDD + SDD',
|
|
422
|
+
value: 'wdd-sdd',
|
|
423
|
+
hint: translator.t('spec_create.methodology.wdd_sdd.hint'),
|
|
424
|
+
default: true,
|
|
425
|
+
},
|
|
426
|
+
];
|
|
427
|
+
}
|
|
412
428
|
|
|
413
429
|
async function resolveInteractiveSpecCreateOptions(repoRoot, preview, options = {}) {
|
|
414
430
|
if (options.interactive !== true) {
|
|
415
431
|
return options;
|
|
416
432
|
}
|
|
417
433
|
|
|
434
|
+
const translator = createTranslator(options.language);
|
|
418
435
|
const ux = options.ux || createUx({
|
|
419
436
|
interactive: true,
|
|
420
437
|
promptConfirm: options.promptConfirm,
|
|
@@ -425,7 +442,7 @@ async function resolveInteractiveSpecCreateOptions(repoRoot, preview, options =
|
|
|
425
442
|
});
|
|
426
443
|
|
|
427
444
|
if (!ux.mode.usePrompts) {
|
|
428
|
-
throw new Error(formatError('
|
|
445
|
+
throw new Error(formatError(translator.t('spec_create.error.interactive_tty_required')));
|
|
429
446
|
}
|
|
430
447
|
|
|
431
448
|
const selectorOptions = {
|
|
@@ -443,20 +460,20 @@ async function resolveInteractiveSpecCreateOptions(repoRoot, preview, options =
|
|
|
443
460
|
const technicalPlanCandidates = buildApprovalCandidateReport(repoRoot, 'technical-plan');
|
|
444
461
|
const approvedVersion = technicalPlanCandidates.approved?.version
|
|
445
462
|
? `v${technicalPlanCandidates.approved.version}`
|
|
446
|
-
: 'approved';
|
|
463
|
+
: translator.t('status.approved');
|
|
447
464
|
const reviewSummary = formatReviewSummary(technicalPlanCandidates.review);
|
|
448
|
-
const selectedMethodology = await selectOption('
|
|
465
|
+
const selectedMethodology = await selectOption(translator.t('spec_create.prompt.methodology'), specMethodologyOptions(translator), {
|
|
449
466
|
...selectorOptions,
|
|
450
467
|
defaultValue: 'wdd-sdd',
|
|
451
468
|
flag: '--methodology',
|
|
452
469
|
name: 'methodology',
|
|
453
470
|
value: options.methodology || '',
|
|
454
471
|
});
|
|
455
|
-
const selectedInput = await selectOption('
|
|
472
|
+
const selectedInput = await selectOption(translator.t('spec_create.prompt.input'), [
|
|
456
473
|
{
|
|
457
474
|
label: preview.inputPath,
|
|
458
475
|
value: preview.inputPath,
|
|
459
|
-
hint: ['
|
|
476
|
+
hint: [translator.t('spec_create.input.approved_plan_hint'), approvedVersion, reviewSummary].filter(Boolean).join(', '),
|
|
460
477
|
default: true,
|
|
461
478
|
},
|
|
462
479
|
], {
|
|
@@ -466,17 +483,17 @@ async function resolveInteractiveSpecCreateOptions(repoRoot, preview, options =
|
|
|
466
483
|
name: 'approved technical plan input',
|
|
467
484
|
value: options.input || '',
|
|
468
485
|
});
|
|
469
|
-
const selectedReview = await selectOption('
|
|
486
|
+
const selectedReview = await selectOption(translator.t('spec_create.prompt.review'), [
|
|
470
487
|
{
|
|
471
|
-
label: '
|
|
488
|
+
label: translator.t('spec_create.review.direct.label'),
|
|
472
489
|
value: 'direct',
|
|
473
|
-
hint: '
|
|
490
|
+
hint: translator.t('spec_create.review.direct.hint'),
|
|
474
491
|
default: options.review !== true,
|
|
475
492
|
},
|
|
476
493
|
{
|
|
477
|
-
label: '
|
|
494
|
+
label: translator.t('spec_create.review.editor.label'),
|
|
478
495
|
value: 'review',
|
|
479
|
-
hint: '
|
|
496
|
+
hint: translator.t('spec_create.review.editor.hint'),
|
|
480
497
|
default: options.review === true,
|
|
481
498
|
},
|
|
482
499
|
], {
|
|
@@ -487,14 +504,14 @@ async function resolveInteractiveSpecCreateOptions(repoRoot, preview, options =
|
|
|
487
504
|
});
|
|
488
505
|
|
|
489
506
|
ux.summary([
|
|
490
|
-
{ label: '
|
|
491
|
-
{ label: '
|
|
492
|
-
{ label: '
|
|
493
|
-
{ label: '
|
|
494
|
-
{ label: '
|
|
495
|
-
{ label: '
|
|
496
|
-
{ label: '
|
|
497
|
-
], { title: '
|
|
507
|
+
{ label: translator.t('spec_create.summary.spec'), value: preview.manifest.slug },
|
|
508
|
+
{ label: translator.t('spec_create.summary.methodology'), value: selectedMethodology.label },
|
|
509
|
+
{ label: translator.t('spec_create.summary.input'), value: selectedInput.value },
|
|
510
|
+
{ label: translator.t('spec_create.summary.technical_plan'), value: [translator.t('status.approved'), approvedVersion, reviewSummary].filter(Boolean).join(', ') },
|
|
511
|
+
{ label: translator.t('spec_create.summary.target'), value: preview.relativeSpecDir },
|
|
512
|
+
{ label: translator.t('spec_create.summary.planned_files'), value: preview.preview.files.length },
|
|
513
|
+
{ label: translator.t('spec_create.summary.review'), value: selectedReview.value === 'review' ? translator.t('spec_create.summary.review_editor') : translator.t('spec_create.summary.review_direct') },
|
|
514
|
+
], { title: translator.t('spec_create.summary.title') });
|
|
498
515
|
|
|
499
516
|
return {
|
|
500
517
|
...options,
|
|
@@ -520,7 +537,7 @@ async function confirmSpecCreate(message, options = {}) {
|
|
|
520
537
|
});
|
|
521
538
|
const confirmed = await ux.promptConfirm(message, { initialValue: false });
|
|
522
539
|
if (!confirmed) {
|
|
523
|
-
throw new Error(formatError('
|
|
540
|
+
throw new Error(formatError(createTranslator(options.language).t('spec_create.error.approval_declined')));
|
|
524
541
|
}
|
|
525
542
|
}
|
|
526
543
|
|
|
@@ -534,7 +551,9 @@ async function reviewSpecCreatePreview(repoRoot, preview, options = {}) {
|
|
|
534
551
|
const canOpenEditor = hasEditorRunner || options.stdinIsTTY === true || (options.stdinIsTTY !== false && Boolean(process.stdin.isTTY));
|
|
535
552
|
|
|
536
553
|
if (!canOpenEditor) {
|
|
537
|
-
throw new Error(formatError(
|
|
554
|
+
throw new Error(formatError(createTranslator(options.language).t('spec_create.error.review_tty_required', {
|
|
555
|
+
path: reviewPath,
|
|
556
|
+
})));
|
|
538
557
|
}
|
|
539
558
|
|
|
540
559
|
const editorResult = hasEditorRunner
|
|
@@ -542,7 +561,11 @@ async function reviewSpecCreatePreview(repoRoot, preview, options = {}) {
|
|
|
542
561
|
: openEditor(reviewPath, { cwd: repoRoot, env: options.env || process.env });
|
|
543
562
|
|
|
544
563
|
if (!editorResult || editorResult.ok !== true) {
|
|
545
|
-
|
|
564
|
+
const translator = createTranslator(options.language);
|
|
565
|
+
throw new Error(formatError(translator.t('spec_create.error.review_canceled', {
|
|
566
|
+
path: reviewPath,
|
|
567
|
+
reason: editorResult?.reason || translator.t('spec_create.error.review_canceled.default_reason'),
|
|
568
|
+
})));
|
|
546
569
|
}
|
|
547
570
|
|
|
548
571
|
return reviewPath;
|
|
@@ -551,9 +574,10 @@ async function reviewSpecCreatePreview(repoRoot, preview, options = {}) {
|
|
|
551
574
|
async function runCreateSpec(repoRoot, options = {}) {
|
|
552
575
|
const preview = buildSpecCreatePreview(repoRoot, options);
|
|
553
576
|
const resolvedOptions = await resolveInteractiveSpecCreateOptions(repoRoot, preview, options);
|
|
577
|
+
const languageOptions = { language: resolvedOptions.language };
|
|
554
578
|
|
|
555
579
|
if (resolvedOptions.dryRun) {
|
|
556
|
-
process.stdout.write(formatSpecCreateDryRun({ ...preview, reviewRequested: resolvedOptions.review === true }));
|
|
580
|
+
process.stdout.write(formatSpecCreateDryRun({ ...preview, reviewRequested: resolvedOptions.review === true }, languageOptions));
|
|
557
581
|
return {
|
|
558
582
|
task: 'spec-create',
|
|
559
583
|
dryRun: true,
|
|
@@ -564,13 +588,13 @@ async function runCreateSpec(repoRoot, options = {}) {
|
|
|
564
588
|
}
|
|
565
589
|
|
|
566
590
|
const reviewPath = await reviewSpecCreatePreview(repoRoot, preview, resolvedOptions);
|
|
567
|
-
await confirmSpecCreate(
|
|
591
|
+
await confirmSpecCreate(createTranslator(resolvedOptions.language).t('spec_create.confirm_create', { slug: preview.manifest.slug }), resolvedOptions);
|
|
568
592
|
|
|
569
593
|
const result = generateSpecArtifacts(repoRoot, {
|
|
570
594
|
input: resolvedOptions.input || preview.inputPath,
|
|
571
595
|
specSlug: resolvedOptions.specSlug,
|
|
572
596
|
});
|
|
573
|
-
process.stdout.write(formatSpecCreateResult(result, repoRoot));
|
|
597
|
+
process.stdout.write(formatSpecCreateResult(result, repoRoot, languageOptions));
|
|
574
598
|
|
|
575
599
|
return {
|
|
576
600
|
task: 'spec-create',
|