create-quiver 0.15.4 → 0.17.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 +76 -0
- package/.markdown-link-check.json +15 -0
- package/.markdownlint.json +11 -0
- package/ARCHITECTURE.md +133 -0
- package/CHANGELOG.md +16 -0
- package/CONTRIBUTING.md +174 -9
- package/README.md +17 -2
- package/README_FOR_AI.md +4 -1
- package/ROADMAP.md +4 -0
- package/SECURITY.md +9 -2
- package/docs/AI_CONTEXT.md.es.template +3 -1
- package/docs/AI_CONTEXT.md.template +3 -1
- package/docs/CLI_UX_GUIDE.md +20 -1
- package/docs/COMMANDS.md.template +20 -6
- package/docs/GITFLOW_PR_GUIDE.md +73 -11
- package/docs/GITFLOW_PR_GUIDE.md.es.template +61 -2
- package/docs/GITFLOW_PR_GUIDE.md.template +72 -10
- package/docs/INDEX.md +6 -1
- package/docs/QUICK.md.template +2 -1
- package/docs/STANDARD.md.template +2 -1
- package/docs/WORKFLOW.md.es.template +3 -1
- package/docs/WORKFLOW.md.template +6 -4
- package/docs/getting-started/installation.md +7 -0
- package/docs/reference/commands.md +138 -6
- 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/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-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +122 -1
- package/specs/quiver-v46-deep-project-analysis/EVIDENCE_REPORT.md +94 -0
- package/specs/quiver-v46-deep-project-analysis/EXECUTION_PLAN.md +26 -0
- package/specs/quiver-v46-deep-project-analysis/SPEC.md +157 -0
- package/specs/quiver-v46-deep-project-analysis/STATUS.md +26 -0
- package/specs/quiver-v46-deep-project-analysis/pr.md +131 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-00-analysis-contract-foundation/CLOSURE_BRIEF.md +14 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-00-analysis-contract-foundation/EXECUTION_BRIEF.md +41 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-00-analysis-contract-foundation/slice.json +61 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-01-stack-agnostic-discovery-sampling/CLOSURE_BRIEF.md +22 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-01-stack-agnostic-discovery-sampling/EXECUTION_BRIEF.md +33 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-01-stack-agnostic-discovery-sampling/slice.json +80 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-02-provider-analysis-json-contract/CLOSURE_BRIEF.md +21 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-02-provider-analysis-json-contract/EXECUTION_BRIEF.md +34 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-02-provider-analysis-json-contract/slice.json +79 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-03-doc-proposal-review-safe-writes/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-03-doc-proposal-review-safe-writes/EXECUTION_BRIEF.md +33 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-03-doc-proposal-review-safe-writes/slice.json +79 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-04-validation-docs-release-readiness/CLOSURE_BRIEF.md +20 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-04-validation-docs-release-readiness/EXECUTION_BRIEF.md +32 -0
- package/specs/quiver-v46-deep-project-analysis/slices/slice-04-validation-docs-release-readiness/slice.json +85 -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 +521 -0
- package/src/create-quiver/commands/changelog.js +93 -0
- package/src/create-quiver/commands/config.js +16 -5
- package/src/create-quiver/commands/evidence.js +33 -2
- package/src/create-quiver/commands/flow.js +1 -0
- package/src/create-quiver/commands/graph.js +8 -2
- package/src/create-quiver/commands/plan.js +6 -0
- package/src/create-quiver/commands/spec.js +28 -13
- package/src/create-quiver/index.js +408 -98
- package/src/create-quiver/lib/ai/analyze-project-discovery.js +387 -0
- package/src/create-quiver/lib/ai/analyze-project-docs.js +364 -0
- package/src/create-quiver/lib/ai/analyze-project-parser.js +277 -0
- package/src/create-quiver/lib/ai/analyze-project-prompts.js +214 -0
- package/src/create-quiver/lib/ai/analyze-project-review.js +99 -0
- package/src/create-quiver/lib/ai/analyze-project-sampling.js +402 -0
- package/src/create-quiver/lib/ai/analyze-project-schema.js +92 -0
- package/src/create-quiver/lib/ai/analyze-project-validation.js +309 -0
- package/src/create-quiver/lib/ai/artifacts.js +4 -1
- package/src/create-quiver/lib/ai/github.js +5 -2
- package/src/create-quiver/lib/ai/spec-templates.js +19 -0
- package/src/create-quiver/lib/cli/command-registry.js +72 -0
- package/src/create-quiver/lib/cli/parser.js +14 -0
- package/src/create-quiver/lib/evidence.js +161 -6
- package/src/create-quiver/lib/git.js +99 -0
- package/src/create-quiver/lib/i18n/messages/en.js +52 -7
- package/src/create-quiver/lib/i18n/messages/es.js +54 -9
- package/src/create-quiver/lib/init-docs.js +1 -1
- package/src/create-quiver/lib/init-layout.js +9 -8
- package/src/create-quiver/lib/lifecycle.js +24 -26
- package/src/create-quiver/lib/readiness.js +67 -56
- package/src/create-quiver/lib/spec-worktrees.js +16 -34
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - Spec 01
|
|
2
|
+
|
|
3
|
+
## Resultado
|
|
4
|
+
|
|
5
|
+
Spec 01 cerrada como iniciativa de recuperacion segura de ramas y extraccion incremental sin regresiones.
|
|
6
|
+
|
|
7
|
+
El cierre es documental y operativo. No ejecuta limpieza de ramas, no elimina refs, no hace merge adicional, no hace rebase y no cambia comportamiento runtime.
|
|
8
|
+
|
|
9
|
+
## Base de cierre
|
|
10
|
+
|
|
11
|
+
| Dato | Valor |
|
|
12
|
+
|---|---|
|
|
13
|
+
| Fecha de cierre | 2026-06-09 |
|
|
14
|
+
| Base usada | `origin/main` |
|
|
15
|
+
| SHA base al crear rama de cierre | `fd62e8b` |
|
|
16
|
+
| Rama de cierre | `chore/QUIVER-01-final-closure` |
|
|
17
|
+
| Estado local relevante | `pr.md` sigue untracked y queda fuera del cierre |
|
|
18
|
+
|
|
19
|
+
## Estado por slice
|
|
20
|
+
|
|
21
|
+
| Slice | Estado | Evidencia |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| `01-slice` | Cerrado | Snapshot inicial de ramas documentado |
|
|
24
|
+
| `02-slice` | Cerrado | Baseline de comportamiento documentado |
|
|
25
|
+
| `03-slice` | Cerrado | Contrato de no regresion documentado |
|
|
26
|
+
| `04-slice` | Cerrado | Matriz de extraccion documentada |
|
|
27
|
+
| `05-slice` | Mergeado | Commit `96b9fad` contenido en `origin/main` |
|
|
28
|
+
| `06-slice` | Mergeado | PR `#110`; commit `28e6e8b` contenido en `origin/main` |
|
|
29
|
+
| `07-slice` | Mergeado | PR `#111`; commit `564b37d` contenido en `origin/main` |
|
|
30
|
+
| `08-slice` | Mergeado | PR `#112`; commit `dde1347` contenido en `origin/main` |
|
|
31
|
+
|
|
32
|
+
## Cambios integrados
|
|
33
|
+
|
|
34
|
+
- Parser y command registry extraidos de forma incremental.
|
|
35
|
+
- Wrapper read-only `changelog` integrado con help, docs generadas y tests contractuales.
|
|
36
|
+
- Gate de docs/tests/evidencia formalizado para futuros cambios de CLI.
|
|
37
|
+
- Plan de limpieza controlada de ramas documentado con snapshot remoto fresco.
|
|
38
|
+
|
|
39
|
+
## Funcionalidad existente
|
|
40
|
+
|
|
41
|
+
- No se quito funcionalidad existente.
|
|
42
|
+
- No se eliminaron aliases.
|
|
43
|
+
- No se modifico `package.json` ni versionado dentro del cierre.
|
|
44
|
+
- `status` top-level sigue sin habilitarse para evitar colision con `ai status` y `spec status`.
|
|
45
|
+
- Las acciones destructivas sobre ramas siguen bloqueadas hasta aprobacion explicita.
|
|
46
|
+
|
|
47
|
+
## Validaciones y evidencia consolidada
|
|
48
|
+
|
|
49
|
+
| Area | Evidencia |
|
|
50
|
+
|---|---|
|
|
51
|
+
| Parser/registry | Tests contractuales del `05-slice` ejecutados antes de merge |
|
|
52
|
+
| `changelog` | `node --test tests/commands/parser-contract.test.js tests/commands/cli-contract.test.js` paso con `17/17` |
|
|
53
|
+
| Docs generadas | `npm run docs:commands:check` paso antes del PR `#110` |
|
|
54
|
+
| Changelog | `npm run changelog:check` paso antes del PR `#110` |
|
|
55
|
+
| Limpieza de ramas | Solo snapshot y propuesta; no se ejecuto delete/prune |
|
|
56
|
+
|
|
57
|
+
## Decisiones finales
|
|
58
|
+
|
|
59
|
+
- `origin/main` queda como base segura para ramas nuevas.
|
|
60
|
+
- `main` local no debe usarse como base mientras siga divergida.
|
|
61
|
+
- `feature/QUIVER-46-49-cli-modernization` sigue siendo fuente historica y tiene manejo separado por PR abierto detectado en el `08-slice`.
|
|
62
|
+
- Ramas con `ahead=0` no quedan automaticamente autorizadas para eliminar.
|
|
63
|
+
- Cualquier limpieza local/remota requiere aprobacion posterior por rama o grupo claramente listado.
|
|
64
|
+
|
|
65
|
+
## Acciones no ejecutadas
|
|
66
|
+
|
|
67
|
+
No se ejecuto ninguno de estos comandos:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
git branch -d <branch>
|
|
71
|
+
git branch -D <branch>
|
|
72
|
+
git push origin --delete <branch>
|
|
73
|
+
git remote prune origin
|
|
74
|
+
git merge
|
|
75
|
+
git rebase
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Pendientes o riesgos residuales
|
|
79
|
+
|
|
80
|
+
- `pr.md` queda local sin trackear como archivo auxiliar de PR; no fue eliminado.
|
|
81
|
+
- La limpieza de ramas sigue pendiente de aprobacion explicita.
|
|
82
|
+
- El estado de PRs abiertos y ramas remotas puede cambiar; antes de limpiar, repetir `git fetch origin`, `git ls-remote --heads origin` y `gh pr list`.
|
|
83
|
+
- Politicas externas de proteccion de ramas no son completamente visibles desde Git local.
|
|
84
|
+
|
|
85
|
+
## Recomendacion
|
|
86
|
+
|
|
87
|
+
Cerrar esta spec con un PR documental. Despues del merge, decidir por separado si se autoriza limpieza de ramas por grupo, empezando por `git remote prune origin --dry-run` y sin borrar nada hasta nueva aprobacion.
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Spec 01 - Recuperacion segura de ramas y extraccion incremental sin regresiones
|
|
2
|
+
|
|
3
|
+
## 1. Resumen general
|
|
4
|
+
|
|
5
|
+
Esta spec define el proceso para analizar ramas abiertas, recuperar valor tecnico de ramas antiguas o conflictivas y evitar que la integracion rompa el proyecto. La iniciativa no implementa codigo por si misma. Establece criterios, gates y handoffs para que cualquier implementacion futura sea incremental, verificable y reversible.
|
|
6
|
+
|
|
7
|
+
La base operativa segura es `origin/main`, sujeta a verificacion de frescura del snapshot antes de ejecutar acciones finales. La rama local `main` no debe usarse como base mientras continue divergida de `origin/main`.
|
|
8
|
+
|
|
9
|
+
La rama `feature/QUIVER-46-49-cli-modernization` se considera fuente de extraccion parcial, no candidata a merge completo. Cualquier rama con `ahead=0` debe tratarse como sin delta pendiente, pero no como automaticamente eliminable.
|
|
10
|
+
|
|
11
|
+
## 2. Objetivo
|
|
12
|
+
|
|
13
|
+
Crear un marco de decision y ejecucion para:
|
|
14
|
+
|
|
15
|
+
- Clasificar ramas locales y remotas sin modificar el working tree.
|
|
16
|
+
- Evitar merges grandes, cherry-picks amplios o cambios disruptivos.
|
|
17
|
+
- Preservar toda funcionalidad existente.
|
|
18
|
+
- Documentar cualquier modificacion de comportamiento con matriz antes/despues.
|
|
19
|
+
- Extraer valor de ramas conflictivas en slices pequenos, revisables y testeables.
|
|
20
|
+
- Requerir aprobacion explicita antes de eliminar ramas o implementar codigo.
|
|
21
|
+
|
|
22
|
+
## 3. Contexto
|
|
23
|
+
|
|
24
|
+
El repositorio tiene multiples ramas locales y remotas abiertas. Varias ramas ya estan incluidas en `origin/main`, otras estan atrasadas, algunas contienen backups, drafts o cambios conflictivos. El analisis inicial identifico que `feature/QUIVER-46-49-cli-modernization` contiene una modernizacion amplia de CLI con conflictos textuales y riesgo semantico.
|
|
25
|
+
|
|
26
|
+
La prioridad es evitar fixes parciales. Antes de modificar parser, comandos, documentacion generada, tests o scripts, debe existir un baseline verificable del comportamiento actual.
|
|
27
|
+
|
|
28
|
+
## 4. Problema u oportunidad que se aborda
|
|
29
|
+
|
|
30
|
+
El problema es que integrar ramas antiguas o grandes puede:
|
|
31
|
+
|
|
32
|
+
- Reintroducir decisiones obsoletas.
|
|
33
|
+
- Romper comandos existentes sin conflicto textual.
|
|
34
|
+
- Cambiar salidas `--json`, exit codes, aliases, flags o side effects.
|
|
35
|
+
- Generar documentacion inconsistente con la CLI real.
|
|
36
|
+
- Mezclar refactors con bumps de version o cambios de package.
|
|
37
|
+
- Eliminar ramas utiles por interpretar `ahead=0` como eliminable.
|
|
38
|
+
|
|
39
|
+
La oportunidad es convertir el estado de ramas en un backlog controlado, con extraccion selectiva y evidencia por slice.
|
|
40
|
+
|
|
41
|
+
## 5. Alcance
|
|
42
|
+
|
|
43
|
+
Incluye:
|
|
44
|
+
|
|
45
|
+
- Snapshot verificable de ramas.
|
|
46
|
+
- Clasificacion de ramas con estados diferenciados.
|
|
47
|
+
- Baseline de comportamiento actual.
|
|
48
|
+
- Contrato de no regresion.
|
|
49
|
+
- Matriz de extraccion desde ramas conflictivas.
|
|
50
|
+
- Plan de parser y command registry con compatibilidad completa.
|
|
51
|
+
- Plan de extraccion de comandos y wrappers.
|
|
52
|
+
- Plan de docs, tests y evidencia.
|
|
53
|
+
- Plan de limpieza controlada de ramas con aprobacion explicita.
|
|
54
|
+
- Handoffs por slice: `EXECUTION_BRIEF.md` y `CLOSURE_BRIEF.md`.
|
|
55
|
+
|
|
56
|
+
## 6. Fuera de alcance
|
|
57
|
+
|
|
58
|
+
No incluye:
|
|
59
|
+
|
|
60
|
+
- Implementar codigo.
|
|
61
|
+
- Hacer merge, rebase, push o cherry-pick.
|
|
62
|
+
- Eliminar ramas.
|
|
63
|
+
- Cambiar `package.json`, `package-lock.json` o version durante los slices de extraccion inicial.
|
|
64
|
+
- Resolver conflictos automaticamente.
|
|
65
|
+
- Ejecutar acciones destructivas.
|
|
66
|
+
- Tomar decisiones remotas finales sin verificar frescura del snapshot.
|
|
67
|
+
|
|
68
|
+
## 7. Actores involucrados
|
|
69
|
+
|
|
70
|
+
- Tech Lead: define criterios, riesgos y aprobaciones.
|
|
71
|
+
- Implementador futuro: ejecuta slices aprobados.
|
|
72
|
+
- Reviewer: valida no regresion y coherencia de cambios.
|
|
73
|
+
- Maintainer del repo: aprueba limpieza de ramas y cambios de comportamiento.
|
|
74
|
+
- Usuarios de CLI: consumidores directos de comandos, flags, salidas y archivos generados.
|
|
75
|
+
- Automatizaciones/CI: consumidores de exit codes, `--json`, scripts y outputs estables.
|
|
76
|
+
|
|
77
|
+
## 8. Requerimientos funcionales
|
|
78
|
+
|
|
79
|
+
- FR-01: El proceso debe identificar rama base, SHA base, fecha del snapshot y frescura del dato.
|
|
80
|
+
- FR-02: Cada rama debe clasificarse como `sin delta`, `merge candidata`, `extraccion candidata`, `cerrable`, `eliminable con aprobacion`, `protegida/no tocar`, `historica` o `requiere revision`.
|
|
81
|
+
- FR-03: Toda rama conflictiva debe distinguir conflicto textual, semantico y de contrato.
|
|
82
|
+
- FR-04: Antes de extraer codigo debe existir baseline de comportamiento actual.
|
|
83
|
+
- FR-05: El baseline debe cubrir comandos, aliases, flags, `--help`, `--json`, exit codes, stdout, stderr, archivos generados, scripts, exports internos, templates y docs generadas.
|
|
84
|
+
- FR-06: Ninguna funcionalidad existente puede quitarse sin aprobacion explicita.
|
|
85
|
+
- FR-07: Si una funcionalidad se modifica, debe documentarse que hacia antes, por que cambia, cual es la mejora y como se valida.
|
|
86
|
+
- FR-08: La extraccion desde ramas viejas debe clasificar cada hallazgo como `extraer codigo`, `extraer concepto`, `rehacer` o `descartar`.
|
|
87
|
+
- FR-09: Parser y command registry deben tratarse como cambios transversales de alto riesgo.
|
|
88
|
+
- FR-10: Cualquier limpieza de ramas requiere aprobacion explicita por rama o grupo claramente listado.
|
|
89
|
+
|
|
90
|
+
## 9. Requerimientos no funcionales
|
|
91
|
+
|
|
92
|
+
- NFR-01: El proceso debe ser auditable y reproducible.
|
|
93
|
+
- NFR-02: Los slices deben ser pequenos, revisables y con gates claros.
|
|
94
|
+
- NFR-03: Los comandos Git sugeridos deben ser read-only salvo aprobacion explicita.
|
|
95
|
+
- NFR-04: La documentacion debe ser apta para humanos y agentes.
|
|
96
|
+
- NFR-05: La implementacion futura debe ser reversible mediante rollback definido por slice.
|
|
97
|
+
- NFR-06: La evidencia debe distinguir validado, no validado y pendiente.
|
|
98
|
+
|
|
99
|
+
## 10. Reglas de negocio
|
|
100
|
+
|
|
101
|
+
- BR-01: `origin/main` es la unica base recomendada para nuevas ramas, sujeto a snapshot fresco.
|
|
102
|
+
- BR-02: `main` local divergida no es base segura.
|
|
103
|
+
- BR-03: `ahead=0` no autoriza eliminacion.
|
|
104
|
+
- BR-04: `merge-tree` no es suficiente para declarar una rama segura.
|
|
105
|
+
- BR-05: Cambios de parser, package, i18n, docs generadas, CI o tests son riesgo alto aunque no haya conflicto textual.
|
|
106
|
+
- BR-06: No se deben mezclar refactors con bumps de version.
|
|
107
|
+
- BR-07: No se debe hacer cherry-pick completo de commits grandes sin analisis previo.
|
|
108
|
+
- BR-08: Cada cambio de comando requiere matriz antes/despues.
|
|
109
|
+
- BR-09: Cada slice debe poder cerrarse con evidencia o quedar explicitamente bloqueado.
|
|
110
|
+
- BR-10: Implementar codigo requiere pedido explicito posterior.
|
|
111
|
+
|
|
112
|
+
## 11. Flujo general
|
|
113
|
+
|
|
114
|
+
1. Tomar snapshot verificable de ramas y base.
|
|
115
|
+
2. Clasificar ramas con evidencia y riesgo.
|
|
116
|
+
3. Construir baseline del comportamiento actual.
|
|
117
|
+
4. Definir contrato de no regresion.
|
|
118
|
+
5. Evaluar ramas candidatas para extraccion parcial.
|
|
119
|
+
6. Planificar parser/command registry contra baseline.
|
|
120
|
+
7. Planificar comandos/wrappers con matriz antes/despues.
|
|
121
|
+
8. Alinear docs, tests y evidencia.
|
|
122
|
+
9. Proponer limpieza de ramas sin ejecutarla.
|
|
123
|
+
|
|
124
|
+
## 12. Entradas y salidas relevantes
|
|
125
|
+
|
|
126
|
+
Entradas:
|
|
127
|
+
|
|
128
|
+
- Refs locales y remotos.
|
|
129
|
+
- `origin/main` y su SHA.
|
|
130
|
+
- Resultado de `git diff`, `git log`, `git cherry`, `git merge-base` y `git merge-tree`.
|
|
131
|
+
- Baseline de comandos CLI.
|
|
132
|
+
- Requerimientos aprobados por el usuario.
|
|
133
|
+
|
|
134
|
+
Salidas:
|
|
135
|
+
|
|
136
|
+
- Inventario de ramas clasificado.
|
|
137
|
+
- Baseline de comportamiento actual.
|
|
138
|
+
- Contrato de no regresion.
|
|
139
|
+
- Matriz de extraccion.
|
|
140
|
+
- Handoffs por slice.
|
|
141
|
+
- Recomendaciones de limpieza pendientes de aprobacion.
|
|
142
|
+
|
|
143
|
+
## 13. Dependencias
|
|
144
|
+
|
|
145
|
+
- Git disponible localmente.
|
|
146
|
+
- Refs remotos presentes en el repo local.
|
|
147
|
+
- Posible `fetch` futuro si se aprueba verificar frescura remota.
|
|
148
|
+
- Conocimiento de comandos CLI actuales.
|
|
149
|
+
- Tests existentes y documentacion del repo.
|
|
150
|
+
|
|
151
|
+
## 14. Riesgos, restricciones o consideraciones
|
|
152
|
+
|
|
153
|
+
- Snapshot remoto puede estar desactualizado.
|
|
154
|
+
- Algunas ramas pueden ser historicas o protegidas.
|
|
155
|
+
- Ramas antiguas pueden contener ideas utiles con codigo obsoleto.
|
|
156
|
+
- Parser/registry puede romper toda la CLI.
|
|
157
|
+
- Tests nuevos pueden reemplazar cobertura vieja sin equivalencia.
|
|
158
|
+
- Docs generadas pueden divergir de la CLI real.
|
|
159
|
+
- Cambios de `--json`, exit codes o side effects pueden romper automatizaciones.
|
|
160
|
+
|
|
161
|
+
## 15. Estrategia de slicing
|
|
162
|
+
|
|
163
|
+
La estrategia prioriza reduccion de riesgo antes de extraccion tecnica. Primero se documenta el estado de ramas, despues se establece el baseline de comportamiento, luego el contrato de no regresion y recien despues se planifican extracciones.
|
|
164
|
+
|
|
165
|
+
Los slices son documentales y preparatorios. No implementan codigo. Cada slice incluye handoffs para ejecucion futura.
|
|
166
|
+
|
|
167
|
+
## 16. Roadmap de slices
|
|
168
|
+
|
|
169
|
+
| Slice | Nombre | Objetivo |
|
|
170
|
+
|---|---|---|
|
|
171
|
+
| `01-slice` | Snapshot verificable de ramas | Crear inventario confiable y clasificable. |
|
|
172
|
+
| `02-slice` | Baseline de comportamiento actual | Saber que no se puede romper. |
|
|
173
|
+
| `03-slice` | Contrato de no regresion | Convertir compatibilidad en reglas verificables. |
|
|
174
|
+
| `04-slice` | Matriz de extraccion por rama | Decidir que rescatar, rehacer o descartar. |
|
|
175
|
+
| `05-slice` | Parser y command registry | Planificar cambio transversal con gates completos. |
|
|
176
|
+
| `06-slice` | Comandos y wrappers | Planificar extraccion por comando con antes/despues. |
|
|
177
|
+
| `07-slice` | Docs, tests y evidencia | Alinear pruebas y documentacion con comportamiento real. |
|
|
178
|
+
| `08-slice` | Limpieza controlada de ramas | Proponer cierre/eliminacion solo con aprobacion. |
|
|
179
|
+
|
|
180
|
+
## 17. Supuestos, pendientes y preguntas abiertas
|
|
181
|
+
|
|
182
|
+
Supuestos:
|
|
183
|
+
|
|
184
|
+
- El snapshot actual sirve para planificar, pero acciones finales requieren verificacion de frescura.
|
|
185
|
+
- La prioridad es estabilidad sobre velocidad de integracion.
|
|
186
|
+
- No se implementara codigo hasta una instruccion explicita posterior.
|
|
187
|
+
|
|
188
|
+
Pendientes:
|
|
189
|
+
|
|
190
|
+
- Confirmar si se permitira `fetch` antes de acciones remotas finales.
|
|
191
|
+
- Definir si hay ramas protegidas por politica externa al repo local.
|
|
192
|
+
- Definir comandos criticos de CLI si el baseline no puede cubrir todos en una primera pasada.
|
|
193
|
+
|
|
194
|
+
Preguntas abiertas:
|
|
195
|
+
|
|
196
|
+
- Que ramas deben conservarse como historicas aunque no tengan delta?
|
|
197
|
+
- Que nivel de evidencia se exigira para aprobar cambios en `--json`?
|
|
@@ -236,6 +236,7 @@ Qué hace:
|
|
|
236
236
|
## 14. Validar antes del PR
|
|
237
237
|
|
|
238
238
|
```bash
|
|
239
|
+
npx --yes create-quiver@latest check-pr specs/<spec-slug>/slices/<slice-id>/slice.json
|
|
239
240
|
npx --yes create-quiver@latest spec validate specs/<spec-slug> --strict
|
|
240
241
|
npx --yes create-quiver@latest next --all-ready --spec <spec-slug>
|
|
241
242
|
git diff --check
|
|
@@ -243,8 +244,9 @@ git diff --check
|
|
|
243
244
|
|
|
244
245
|
Qué hace:
|
|
245
246
|
|
|
247
|
+
- valida que el slice tenga cuerpo de PR y secciones requeridas;
|
|
246
248
|
- confirma que el paquete de spec esté completo;
|
|
247
|
-
- confirma
|
|
249
|
+
- confirma el estado de los slices de la spec;
|
|
248
250
|
- revisa whitespace.
|
|
249
251
|
|
|
250
252
|
También corré validaciones propias del proyecto:
|
|
@@ -257,7 +259,26 @@ npm run lint
|
|
|
257
259
|
|
|
258
260
|
Usá solo los scripts que existan en el proyecto.
|
|
259
261
|
|
|
260
|
-
## 15.
|
|
262
|
+
## 15. Preparar el PR
|
|
263
|
+
|
|
264
|
+
Regla de política:
|
|
265
|
+
|
|
266
|
+
- un slice equivale a un PR por defecto;
|
|
267
|
+
- un PR agrupado sólo aplica a 2-3 slices docs-only, research-only o limpieza mecánica de bajo riesgo;
|
|
268
|
+
- no agrupes cambios de comportamiento, UI, backend, refactor, performance, Supabase, Edge Functions, auth, storage, preview, tests o CI que afecten gates.
|
|
269
|
+
|
|
270
|
+
Para PR individual de slice, usá el `pr.md` del slice como cuerpo del PR y mantené evidencia separada:
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
gh pr create \
|
|
274
|
+
--draft \
|
|
275
|
+
--title "<slice title>" \
|
|
276
|
+
--body-file specs/<spec-slug>/slices/<slice-id>/pr.md \
|
|
277
|
+
--base <base-branch> \
|
|
278
|
+
--head <current-branch>
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Para PRs agrupados permitidos o PRs documentales que usan el cuerpo generado de spec, primero previsualizá con Quiver:
|
|
261
282
|
|
|
262
283
|
```bash
|
|
263
284
|
npx --yes create-quiver@latest ai pr \
|
|
@@ -280,6 +301,18 @@ Adaptá `--identity-file` a la ruta real de tu máquina, por ejemplo `~/ssh/gith
|
|
|
280
301
|
|
|
281
302
|
## 16. Crear el pull request
|
|
282
303
|
|
|
304
|
+
Para PR individual de slice, crealo con `gh` usando el cuerpo del slice:
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
gh pr create \
|
|
308
|
+
--title "<slice title>" \
|
|
309
|
+
--body-file specs/<spec-slug>/slices/<slice-id>/pr.md \
|
|
310
|
+
--base <base-branch> \
|
|
311
|
+
--head <current-branch>
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
Para PRs agrupados permitidos o documentales que usan `specs/<spec-slug>/pr.md`, podés usar Quiver:
|
|
315
|
+
|
|
283
316
|
```bash
|
|
284
317
|
npx --yes create-quiver@latest ai pr \
|
|
285
318
|
--create \
|
|
@@ -293,10 +326,20 @@ Qué hace:
|
|
|
293
326
|
|
|
294
327
|
- abre el PR usando `gh`;
|
|
295
328
|
- usa el cuerpo generado en `pr.md`;
|
|
296
|
-
-
|
|
329
|
+
- aplica preflight antes de crear el PR.
|
|
330
|
+
|
|
331
|
+
Merge:
|
|
332
|
+
|
|
333
|
+
- el merge humano es el default;
|
|
334
|
+
- el agente puede crear el PR, corregir CI, monitorear checks y marcarlo como listo;
|
|
335
|
+
- no uses auto-merge asistido salvo autorización explícita para ese PR o para una categoría documentada;
|
|
336
|
+
- el auto-merge asistido sólo aplica a docs-only o chore-only de bajo riesgo, sin runtime, sin configuración productiva, con checks verdes y sin comentarios pendientes;
|
|
337
|
+
- el auto-merge asistido está prohibido para UI, Supabase, Edge Functions, auth, storage, preview, performance, refactors y cambios con rollback dudoso.
|
|
297
338
|
|
|
298
339
|
## 17. Después del merge
|
|
299
340
|
|
|
341
|
+
Usá este cierre sólo después de que el último PR de la spec haya sido mergeado.
|
|
342
|
+
|
|
300
343
|
```bash
|
|
301
344
|
npx --yes create-quiver@latest spec close specs/<spec-slug> --dry-run
|
|
302
345
|
npx --yes create-quiver@latest spec close specs/<spec-slug>
|
|
@@ -1,4 +1,41 @@
|
|
|
1
1
|
# Guía de Git y PR
|
|
2
2
|
|
|
3
|
-
Usá un branch, un worktree y un PR por slice.
|
|
3
|
+
Usá un branch, un worktree y un PR por slice por defecto.
|
|
4
4
|
|
|
5
|
+
## Regla base
|
|
6
|
+
|
|
7
|
+
- Un slice equivale a un commit.
|
|
8
|
+
- Un slice equivale a un PR por defecto.
|
|
9
|
+
- Un spec puede generar múltiples PRs.
|
|
10
|
+
- Los PRs agrupados son excepciones y deben cumplir la política de agrupación.
|
|
11
|
+
|
|
12
|
+
## PR individual obligatorio
|
|
13
|
+
|
|
14
|
+
Abrí un PR individual para cualquier slice que incluya:
|
|
15
|
+
|
|
16
|
+
- código funcional;
|
|
17
|
+
- UI/UX;
|
|
18
|
+
- Supabase, Edge Functions, auth o storage;
|
|
19
|
+
- preview o comportamiento de deploy;
|
|
20
|
+
- performance o code-splitting;
|
|
21
|
+
- refactors;
|
|
22
|
+
- tests o CI que afecten gates.
|
|
23
|
+
|
|
24
|
+
## PR agrupado permitido
|
|
25
|
+
|
|
26
|
+
Un PR agrupado está permitido sólo si:
|
|
27
|
+
|
|
28
|
+
- incluye como máximo 2-3 slices;
|
|
29
|
+
- todos los slices son docs-only, research-only o limpieza mecánica de bajo riesgo;
|
|
30
|
+
- no cambia comportamiento;
|
|
31
|
+
- no mezcla docs con UI, backend, refactor o performance;
|
|
32
|
+
- cada slice mantiene evidencia separada;
|
|
33
|
+
- el PR completo puede revertirse sin dejar estado parcial.
|
|
34
|
+
|
|
35
|
+
## Merge y auto-merge
|
|
36
|
+
|
|
37
|
+
- El merge humano es el default.
|
|
38
|
+
- Los agentes IA pueden crear PRs, corregir CI, monitorear checks y marcar PRs como listos.
|
|
39
|
+
- El auto-merge asistido sólo está permitido con autorización humana explícita para ese PR o para una categoría documentada.
|
|
40
|
+
- El auto-merge asistido sólo aplica a PRs docs-only o chore-only de bajo riesgo, sin runtime, sin configuración productiva, con checks verdes y sin comentarios pendientes.
|
|
41
|
+
- El auto-merge asistido está prohibido para UI, Supabase, Edge Functions, auth, storage, preview, performance, refactors y cambios con rollback dudoso.
|
package/package.json
CHANGED
|
@@ -1,20 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-quiver",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Quiver CLI for scaffolding projects from the packaged template",
|
|
6
6
|
"license": "MIT",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=20.12.0"
|
|
9
|
+
},
|
|
7
10
|
"bin": {
|
|
8
11
|
"create-quiver": "bin/create-quiver.js",
|
|
9
12
|
"quiver": "bin/create-quiver.js"
|
|
10
13
|
},
|
|
11
14
|
"scripts": {
|
|
15
|
+
"test": "node scripts/ci/run-node-tests.js",
|
|
16
|
+
"test:ci": "node scripts/ci/run-node-tests.js",
|
|
17
|
+
"docs:lint": "node scripts/ci/check-docs-markdown.js",
|
|
18
|
+
"docs:links": "node scripts/ci/check-doc-links.js",
|
|
19
|
+
"docs:commands:write": "node scripts/ci/check-command-reference.js --write",
|
|
20
|
+
"docs:commands:check": "node scripts/ci/check-command-reference.js --check",
|
|
21
|
+
"docs:check": "npm run docs:lint && npm run docs:links && npm run docs:commands:check",
|
|
22
|
+
"changelog:check": "node scripts/ci/check-changelog.js",
|
|
23
|
+
"schema:slice:check": "node scripts/ci/check-slice-schema.js",
|
|
12
24
|
"check:slice": "bash tools/scripts/check-slice-readiness.sh",
|
|
13
25
|
"check:pr": "bash tools/scripts/check-pr-readiness.sh",
|
|
14
26
|
"start:slice": "bash tools/scripts/start-slice.sh",
|
|
15
27
|
"cleanup:slice": "bash tools/scripts/cleanup-slice.sh",
|
|
16
28
|
"migrate": "bash tools/scripts/migrate-project.sh",
|
|
17
29
|
"quiver:version": "npx create-quiver version",
|
|
30
|
+
"quiver:migrate": "node bin/create-quiver.js migrate",
|
|
18
31
|
"quiver:analyze": "npx create-quiver analyze",
|
|
19
32
|
"quiver:flow": "npx create-quiver flow",
|
|
20
33
|
"quiver:dashboard": "npx create-quiver dashboard",
|
|
@@ -45,6 +58,14 @@
|
|
|
45
58
|
"quiver:spec:status": "npx create-quiver spec status",
|
|
46
59
|
"quiver:spec:validate": "npx create-quiver spec validate",
|
|
47
60
|
"quiver:spec:close": "npx create-quiver spec close",
|
|
61
|
+
"quiver:start-slice": "node bin/create-quiver.js slice start",
|
|
62
|
+
"quiver:check-slice": "node bin/create-quiver.js slice check",
|
|
63
|
+
"quiver:check-pr": "node bin/create-quiver.js slice pr",
|
|
64
|
+
"quiver:check-scope": "node bin/create-quiver.js slice scope",
|
|
65
|
+
"quiver:cleanup-slice": "node bin/create-quiver.js slice cleanup",
|
|
66
|
+
"quiver:refresh-active-slices": "node bin/create-quiver.js slice refresh-active",
|
|
67
|
+
"quiver:check-handoff": "node bin/create-quiver.js handoff check",
|
|
68
|
+
"quiver:new-handoff": "node bin/create-quiver.js handoff new",
|
|
48
69
|
"package:quiver": "bash scripts/package-quiver.sh",
|
|
49
70
|
"smoke:create-quiver": "bash scripts/ci/smoke-create-quiver.sh",
|
|
50
71
|
"smoke:doctor-fixtures": "node scripts/ci/smoke-doctor-fixtures.js",
|
|
@@ -55,5 +76,10 @@
|
|
|
55
76
|
"dependencies": {
|
|
56
77
|
"@clack/prompts": "^1.4.0",
|
|
57
78
|
"zod": "^4.4.3"
|
|
79
|
+
},
|
|
80
|
+
"devDependencies": {
|
|
81
|
+
"ajv": "^8.18.0",
|
|
82
|
+
"markdown-link-check": "^3.14.2",
|
|
83
|
+
"markdownlint-cli2": "^0.22.1"
|
|
58
84
|
}
|
|
59
85
|
}
|
|
@@ -6,6 +6,9 @@ repo_root="$(git rev-parse --show-toplevel)"
|
|
|
6
6
|
temp_root="$(mktemp -d "${TMPDIR:-/tmp}/quiver-pack.XXXXXX")"
|
|
7
7
|
pack_dir="$temp_root/pack"
|
|
8
8
|
npm_cache="$temp_root/npm-cache"
|
|
9
|
+
install_root="$temp_root/install-root"
|
|
10
|
+
dry_run_target="$temp_root/dry-run-project"
|
|
11
|
+
cli_version="$(node -p 'require(process.argv[1]).version' "$repo_root/package.json")"
|
|
9
12
|
|
|
10
13
|
cleanup() {
|
|
11
14
|
rm -rf "$temp_root"
|
|
@@ -15,13 +18,14 @@ trap cleanup EXIT
|
|
|
15
18
|
|
|
16
19
|
mkdir -p "$pack_dir"
|
|
17
20
|
mkdir -p "$npm_cache"
|
|
21
|
+
mkdir -p "$install_root"
|
|
18
22
|
|
|
19
23
|
pack_json="$(
|
|
20
24
|
cd "$repo_root" && npm_config_cache="$npm_cache" npm pack --json --pack-destination "$pack_dir"
|
|
21
25
|
)"
|
|
22
26
|
|
|
23
27
|
tarball_name="$(
|
|
24
|
-
node -e 'const data = JSON.parse(
|
|
28
|
+
printf '%s\n' "$pack_json" | node -e 'const fs = require("node:fs"); const data = JSON.parse(fs.readFileSync(0, "utf8")); process.stdout.write(data[0].filename);'
|
|
25
29
|
)"
|
|
26
30
|
tarball_path="$pack_dir/$tarball_name"
|
|
27
31
|
|
|
@@ -68,6 +72,41 @@ require_absent() {
|
|
|
68
72
|
fi
|
|
69
73
|
}
|
|
70
74
|
|
|
75
|
+
reject_forbidden_content_patterns() {
|
|
76
|
+
local path
|
|
77
|
+
|
|
78
|
+
while IFS= read -r path; do
|
|
79
|
+
case "$path" in
|
|
80
|
+
package/package-lock.json|\
|
|
81
|
+
package/CLI_ANALYSIS.md|\
|
|
82
|
+
package/REQUERIMIENTOS_DERIVADOS_DE_AUDITORIA.md|\
|
|
83
|
+
package/Documentation_Report.pdf|\
|
|
84
|
+
package/WORKTREE_CONTEXT.md|\
|
|
85
|
+
package/.DS_Store|\
|
|
86
|
+
package/*/.DS_Store|\
|
|
87
|
+
package/*.pdf|\
|
|
88
|
+
package/.env|\
|
|
89
|
+
package/.env.*|\
|
|
90
|
+
package/.npmrc|\
|
|
91
|
+
package/.npm/*|\
|
|
92
|
+
package/.ssh/*|\
|
|
93
|
+
package/ssh/*|\
|
|
94
|
+
package/*.pem|\
|
|
95
|
+
package/*.key|\
|
|
96
|
+
package/.claude/*|\
|
|
97
|
+
package/.codex/*|\
|
|
98
|
+
package/.quiver/*|\
|
|
99
|
+
package/.worktrees/*|\
|
|
100
|
+
package/tests/*|\
|
|
101
|
+
package/examples/*|\
|
|
102
|
+
package/scripts/ci/*)
|
|
103
|
+
echo "FAIL: el paquete incluye contenido fuera del contrato: $path" >&2
|
|
104
|
+
exit 1
|
|
105
|
+
;;
|
|
106
|
+
esac
|
|
107
|
+
done <<<"$contents"
|
|
108
|
+
}
|
|
109
|
+
|
|
71
110
|
required_paths=(
|
|
72
111
|
"package/package.json"
|
|
73
112
|
"package/bin/create-quiver.js"
|
|
@@ -93,6 +132,9 @@ required_paths=(
|
|
|
93
132
|
"package/.github/ISSUE_TEMPLATE/feature_request.md"
|
|
94
133
|
"package/.github/workflows/ci.yml"
|
|
95
134
|
"package/docs/INDEX.md.template"
|
|
135
|
+
"package/docs/reference/commands.md"
|
|
136
|
+
"package/docs/schema/slice.schema.json"
|
|
137
|
+
"package/docs/reference/slice-schema.md"
|
|
96
138
|
"package/docs/DOCUMENTATION_GUIDE.md.template"
|
|
97
139
|
"package/docs/WORKFLOW.md.template"
|
|
98
140
|
"package/docs/SUPPORT_MATRIX.md.template"
|
|
@@ -127,8 +169,16 @@ done
|
|
|
127
169
|
|
|
128
170
|
excluded_paths=(
|
|
129
171
|
"package/package-lock.json"
|
|
172
|
+
"package/CLI_ANALYSIS.md"
|
|
173
|
+
"package/REQUERIMIENTOS_DERIVADOS_DE_AUDITORIA.md"
|
|
174
|
+
"package/Documentation_Report.pdf"
|
|
175
|
+
"package/.DS_Store"
|
|
176
|
+
"package/WORKTREE_CONTEXT.md"
|
|
130
177
|
"package/tests/"
|
|
131
178
|
"package/examples/"
|
|
179
|
+
"package/.claude/"
|
|
180
|
+
"package/.codex/"
|
|
181
|
+
"package/.quiver/"
|
|
132
182
|
"package/.worktrees/"
|
|
133
183
|
"package/specs/quiver-v01/"
|
|
134
184
|
"package/specs/quiver-v02-bootstrap-hardening/"
|
|
@@ -144,4 +194,34 @@ for path in "${excluded_paths[@]}"; do
|
|
|
144
194
|
fi
|
|
145
195
|
done
|
|
146
196
|
|
|
147
|
-
|
|
197
|
+
reject_forbidden_content_patterns
|
|
198
|
+
|
|
199
|
+
npm_config_cache="$npm_cache" npm install --prefix "$install_root" "$tarball_path" --ignore-scripts --no-audit --no-fund >/dev/null
|
|
200
|
+
installed_cli="$install_root/node_modules/create-quiver/bin/create-quiver.js"
|
|
201
|
+
|
|
202
|
+
if [[ ! -f "$installed_cli" ]]; then
|
|
203
|
+
echo "FAIL: no se encontró el CLI instalado en $installed_cli" >&2
|
|
204
|
+
exit 1
|
|
205
|
+
fi
|
|
206
|
+
|
|
207
|
+
installed_semver="$(node "$installed_cli" --version)"
|
|
208
|
+
if [[ "$installed_semver" != "$cli_version" ]]; then
|
|
209
|
+
echo "FAIL: el CLI instalado devolvió versión '$installed_semver', esperada '$cli_version'" >&2
|
|
210
|
+
exit 1
|
|
211
|
+
fi
|
|
212
|
+
|
|
213
|
+
installed_help="$(node "$installed_cli" --help)"
|
|
214
|
+
if [[ "$installed_help" != *"version [--json]"* ]] \
|
|
215
|
+
|| [[ "$installed_help" != *"spec create"* ]] \
|
|
216
|
+
|| [[ "$installed_help" != *"slice start|check|pr|scope|cleanup|refresh-active"* ]]; then
|
|
217
|
+
echo "FAIL: la ayuda del CLI instalado no expone comandos públicos esperados" >&2
|
|
218
|
+
exit 1
|
|
219
|
+
fi
|
|
220
|
+
|
|
221
|
+
node "$installed_cli" init --dry-run --name "Package Smoke" --dir "$dry_run_target" --skip-install >/dev/null
|
|
222
|
+
if [[ -e "$dry_run_target" ]]; then
|
|
223
|
+
echo "FAIL: init --dry-run del CLI instalado escribió en $dry_run_target" >&2
|
|
224
|
+
exit 1
|
|
225
|
+
fi
|
|
226
|
+
|
|
227
|
+
printf 'Package smoke passed: %s (installed CLI smoke passed)\n' "$tarball_name"
|
|
@@ -11,12 +11,15 @@ usage() {
|
|
|
11
11
|
Usage: scripts/release-quiver.sh [patch|minor|major|x.y.z] [--publish | --publish-current]
|
|
12
12
|
|
|
13
13
|
By default the script performs a release dry run:
|
|
14
|
+
- validates changelog, docs, and schema gates
|
|
14
15
|
- validates the installer smoke
|
|
15
|
-
- validates the package artifact
|
|
16
|
+
- validates the package artifact and installed CLI smoke
|
|
16
17
|
- prints the versioning and publish commands to run next
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
Publishing remains manually guarded. Pass --publish only with
|
|
20
|
+
QUIVER_ALLOW_NPM_PUBLISH=1 to run npm version and npm publish after the smoke
|
|
21
|
+
checks pass. Pass --publish-current with the same environment guard to publish
|
|
22
|
+
the current package version without forcing a patch bump.
|
|
20
23
|
EOF
|
|
21
24
|
}
|
|
22
25
|
|
|
@@ -50,6 +53,14 @@ if [[ -n "$(git status --porcelain)" ]]; then
|
|
|
50
53
|
exit 1
|
|
51
54
|
fi
|
|
52
55
|
|
|
56
|
+
if [[ "$publish" == "true" && "${QUIVER_ALLOW_NPM_PUBLISH:-}" != "1" ]]; then
|
|
57
|
+
echo "FAIL: publishing requires QUIVER_ALLOW_NPM_PUBLISH=1. Run the dry-run first and publish manually unless this release is explicitly authorized." >&2
|
|
58
|
+
exit 1
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
npm run changelog:check
|
|
62
|
+
npm run docs:check
|
|
63
|
+
npm run schema:slice:check
|
|
53
64
|
bash scripts/ci/smoke-create-quiver.sh
|
|
54
65
|
bash scripts/package-quiver.sh
|
|
55
66
|
|
|
@@ -8,6 +8,25 @@
|
|
|
8
8
|
|
|
9
9
|
[Brief summary of what was implemented and why]
|
|
10
10
|
|
|
11
|
+
## PR Policy
|
|
12
|
+
|
|
13
|
+
- [ ] One slice only.
|
|
14
|
+
- [ ] Grouped PR exception: at most 2-3 slices, all docs-only, research-only, or low-risk mechanical cleanup.
|
|
15
|
+
- [ ] No behavior changes in a grouped PR.
|
|
16
|
+
- [ ] No mixed docs with UI, backend, refactor, or performance work.
|
|
17
|
+
- [ ] Separate evidence for each included slice.
|
|
18
|
+
- [ ] Whole PR is revertible without leaving partial state.
|
|
19
|
+
|
|
20
|
+
Individual PR required when this slice includes functional code, UI/UX, Supabase, Edge Functions, auth, storage, preview, performance/code-splitting, refactors, or tests/CI changes that affect gates.
|
|
21
|
+
|
|
22
|
+
### Merge Policy
|
|
23
|
+
|
|
24
|
+
- [ ] Human merge expected.
|
|
25
|
+
- [ ] Assisted auto-merge explicitly authorized for this PR or documented category.
|
|
26
|
+
- [ ] Assisted auto-merge conditions met: docs-only or chore-only, low risk, no runtime changes, no production configuration changes, green checks, and no pending comments.
|
|
27
|
+
|
|
28
|
+
Assisted auto-merge is prohibited for UI, Supabase, Edge Functions, auth, storage, preview, performance, refactors, and changes with doubtful rollback.
|
|
29
|
+
|
|
11
30
|
## Scope
|
|
12
31
|
|
|
13
32
|
- [Included change 1]
|