create-quiver 0.15.4 → 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.
Files changed (179) hide show
  1. package/.github/pull_request_template.md +17 -0
  2. package/.github/workflows/ci.yml +76 -0
  3. package/.markdown-link-check.json +15 -0
  4. package/.markdownlint.json +11 -0
  5. package/.quiver/runs/run-2026-06-09t19-14-39z/approvals.json +5 -0
  6. package/.quiver/runs/run-2026-06-09t19-14-39z/decisions.md +2 -0
  7. package/.quiver/runs/run-2026-06-09t19-14-39z/requirement.md +0 -0
  8. package/.quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/docs/INDEX.md +97 -0
  9. package/.quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/manifest.json +61 -0
  10. package/.quiver/runs/run-2026-06-09t19-14-39z/state.json +28 -0
  11. package/ACTIVE_SLICES.md +43 -0
  12. package/ARCHITECTURE.md +133 -0
  13. package/CHANGELOG.md +12 -0
  14. package/CONTRIBUTING.md +174 -9
  15. package/README.md +10 -1
  16. package/ROADMAP.md +4 -0
  17. package/SECURITY.md +9 -2
  18. package/auditoria-ux-ui-performance-documentacion.md +705 -0
  19. package/copys-landing-page.md +244 -0
  20. package/docs/AI_CONTEXT.md.es.template +3 -1
  21. package/docs/AI_CONTEXT.md.template +3 -1
  22. package/docs/CLI_UX_GUIDE.md +9 -1
  23. package/docs/COMMANDS.md.template +20 -6
  24. package/docs/GITFLOW_PR_GUIDE.md +73 -11
  25. package/docs/GITFLOW_PR_GUIDE.md.es.template +61 -2
  26. package/docs/GITFLOW_PR_GUIDE.md.template +72 -10
  27. package/docs/INDEX.md +1 -0
  28. package/docs/QUICK.md.template +2 -1
  29. package/docs/STANDARD.md.template +2 -1
  30. package/docs/WORKFLOW.md.es.template +3 -1
  31. package/docs/WORKFLOW.md.template +6 -4
  32. package/docs/ai/ACTIVE_SLICE.md +61 -0
  33. package/docs/getting-started/installation.md +7 -0
  34. package/docs/reference/commands.md +104 -6
  35. package/docs/reference/slice-schema.md +37 -0
  36. package/docs/schema/slice.schema.json +221 -0
  37. package/docs/specs/01-spec/01-slice/01-slice.json +36 -0
  38. package/docs/specs/01-spec/01-slice/01-slice.md +106 -0
  39. package/docs/specs/01-spec/01-slice/CLOSURE_BRIEF.md +80 -0
  40. package/docs/specs/01-spec/01-slice/EXECUTION_BRIEF.md +39 -0
  41. package/docs/specs/01-spec/02-slice/02-slice.json +36 -0
  42. package/docs/specs/01-spec/02-slice/02-slice.md +108 -0
  43. package/docs/specs/01-spec/02-slice/CLOSURE_BRIEF.md +88 -0
  44. package/docs/specs/01-spec/02-slice/EXECUTION_BRIEF.md +40 -0
  45. package/docs/specs/01-spec/03-slice/03-slice.json +36 -0
  46. package/docs/specs/01-spec/03-slice/03-slice.md +103 -0
  47. package/docs/specs/01-spec/03-slice/CLOSURE_BRIEF.md +54 -0
  48. package/docs/specs/01-spec/03-slice/EXECUTION_BRIEF.md +39 -0
  49. package/docs/specs/01-spec/04-slice/04-slice.json +36 -0
  50. package/docs/specs/01-spec/04-slice/04-slice.md +107 -0
  51. package/docs/specs/01-spec/04-slice/CLOSURE_BRIEF.md +46 -0
  52. package/docs/specs/01-spec/04-slice/EXECUTION_BRIEF.md +39 -0
  53. package/docs/specs/01-spec/05-slice/05-slice.json +36 -0
  54. package/docs/specs/01-spec/05-slice/05-slice.md +106 -0
  55. package/docs/specs/01-spec/05-slice/CLOSURE_BRIEF.md +84 -0
  56. package/docs/specs/01-spec/05-slice/EXECUTION_BRIEF.md +109 -0
  57. package/docs/specs/01-spec/06-slice/06-slice.json +36 -0
  58. package/docs/specs/01-spec/06-slice/06-slice.md +107 -0
  59. package/docs/specs/01-spec/06-slice/CLOSURE_BRIEF.md +67 -0
  60. package/docs/specs/01-spec/06-slice/EXECUTION_BRIEF.md +39 -0
  61. package/docs/specs/01-spec/07-slice/07-slice.json +36 -0
  62. package/docs/specs/01-spec/07-slice/07-slice.md +105 -0
  63. package/docs/specs/01-spec/07-slice/CLOSURE_BRIEF.md +71 -0
  64. package/docs/specs/01-spec/07-slice/EXECUTION_BRIEF.md +39 -0
  65. package/docs/specs/01-spec/08-slice/08-slice.json +36 -0
  66. package/docs/specs/01-spec/08-slice/08-slice.md +105 -0
  67. package/docs/specs/01-spec/08-slice/CLOSURE_BRIEF.md +114 -0
  68. package/docs/specs/01-spec/08-slice/EXECUTION_BRIEF.md +39 -0
  69. package/docs/specs/01-spec/CLOSURE_BRIEF.md +87 -0
  70. package/docs/specs/01-spec/spec.md +197 -0
  71. package/docs/workflows/full-ai-spec-to-pr.md +46 -3
  72. package/i18n/es/docs/GITFLOW_PR_GUIDE.md.template +38 -1
  73. package/package.json +27 -1
  74. package/pr.md +154 -0
  75. package/scripts/package-quiver.sh +82 -2
  76. package/scripts/release-quiver.sh +14 -3
  77. package/specs/[project-name]/slices/pr.md.template +19 -0
  78. package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +91 -0
  79. package/specs/quiver-v50-audit-trust-foundation/EVIDENCE_REPORT.md +151 -0
  80. package/specs/quiver-v50-audit-trust-foundation/EXECUTION_PLAN.md +34 -0
  81. package/specs/quiver-v50-audit-trust-foundation/SPEC.md +113 -0
  82. package/specs/quiver-v50-audit-trust-foundation/STATUS.md +26 -0
  83. package/specs/quiver-v50-audit-trust-foundation/pr.md +120 -0
  84. package/specs/quiver-v50-audit-trust-foundation/slices/slice-00-audit-baseline-and-resolved-findings/CLOSURE_BRIEF.md +20 -0
  85. package/specs/quiver-v50-audit-trust-foundation/slices/slice-00-audit-baseline-and-resolved-findings/EXECUTION_BRIEF.md +58 -0
  86. package/specs/quiver-v50-audit-trust-foundation/slices/slice-00-audit-baseline-and-resolved-findings/slice.json +57 -0
  87. package/specs/quiver-v50-audit-trust-foundation/slices/slice-01-runtime-minimum-and-package-metadata/CLOSURE_BRIEF.md +24 -0
  88. package/specs/quiver-v50-audit-trust-foundation/slices/slice-01-runtime-minimum-and-package-metadata/EXECUTION_BRIEF.md +67 -0
  89. package/specs/quiver-v50-audit-trust-foundation/slices/slice-01-runtime-minimum-and-package-metadata/slice.json +71 -0
  90. package/specs/quiver-v50-audit-trust-foundation/slices/slice-02-migrate-write-safety-contract/CLOSURE_BRIEF.md +24 -0
  91. package/specs/quiver-v50-audit-trust-foundation/slices/slice-02-migrate-write-safety-contract/EXECUTION_BRIEF.md +71 -0
  92. package/specs/quiver-v50-audit-trust-foundation/slices/slice-02-migrate-write-safety-contract/slice.json +81 -0
  93. package/specs/quiver-v50-audit-trust-foundation/slices/slice-03-security-reporting-channel/CLOSURE_BRIEF.md +22 -0
  94. package/specs/quiver-v50-audit-trust-foundation/slices/slice-03-security-reporting-channel/EXECUTION_BRIEF.md +57 -0
  95. package/specs/quiver-v50-audit-trust-foundation/slices/slice-03-security-reporting-channel/slice.json +56 -0
  96. package/specs/quiver-v50-audit-trust-foundation/slices/slice-04-user-facing-i18n-error-coverage/CLOSURE_BRIEF.md +23 -0
  97. package/specs/quiver-v50-audit-trust-foundation/slices/slice-04-user-facing-i18n-error-coverage/EXECUTION_BRIEF.md +68 -0
  98. package/specs/quiver-v50-audit-trust-foundation/slices/slice-04-user-facing-i18n-error-coverage/slice.json +84 -0
  99. package/specs/quiver-v50-audit-trust-foundation/slices/slice-05-init-analyze-progress-and-summaries/CLOSURE_BRIEF.md +25 -0
  100. package/specs/quiver-v50-audit-trust-foundation/slices/slice-05-init-analyze-progress-and-summaries/EXECUTION_BRIEF.md +73 -0
  101. package/specs/quiver-v50-audit-trust-foundation/slices/slice-05-init-analyze-progress-and-summaries/slice.json +72 -0
  102. package/specs/quiver-v50-audit-trust-foundation/slices/slice-06-contributor-and-architecture-docs/CLOSURE_BRIEF.md +22 -0
  103. package/specs/quiver-v50-audit-trust-foundation/slices/slice-06-contributor-and-architecture-docs/EXECUTION_BRIEF.md +66 -0
  104. package/specs/quiver-v50-audit-trust-foundation/slices/slice-06-contributor-and-architecture-docs/slice.json +74 -0
  105. package/specs/quiver-v50-audit-trust-foundation/slices/slice-07-ci-and-documentation-lint-baseline/CLOSURE_BRIEF.md +29 -0
  106. package/specs/quiver-v50-audit-trust-foundation/slices/slice-07-ci-and-documentation-lint-baseline/EXECUTION_BRIEF.md +74 -0
  107. package/specs/quiver-v50-audit-trust-foundation/slices/slice-07-ci-and-documentation-lint-baseline/slice.json +81 -0
  108. package/specs/quiver-v51-cli-ergonomics-automation-contracts/EVIDENCE_REPORT.md +145 -0
  109. package/specs/quiver-v51-cli-ergonomics-automation-contracts/EXECUTION_PLAN.md +32 -0
  110. package/specs/quiver-v51-cli-ergonomics-automation-contracts/SPEC.md +109 -0
  111. package/specs/quiver-v51-cli-ergonomics-automation-contracts/STATUS.md +25 -0
  112. package/specs/quiver-v51-cli-ergonomics-automation-contracts/pr.md +69 -0
  113. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/CLOSURE_BRIEF.md +20 -0
  114. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/EXECUTION_BRIEF.md +58 -0
  115. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/slice.json +56 -0
  116. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-01-flow-json-compatibility/CLOSURE_BRIEF.md +21 -0
  117. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-01-flow-json-compatibility/EXECUTION_BRIEF.md +61 -0
  118. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-01-flow-json-compatibility/slice.json +68 -0
  119. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/CLOSURE_BRIEF.md +25 -0
  120. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/EXECUTION_BRIEF.md +65 -0
  121. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/pr.md +134 -0
  122. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-02-dashboard-section-validation-i18n/slice.json +80 -0
  123. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/CLOSURE_BRIEF.md +31 -0
  124. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/EXECUTION_BRIEF.md +80 -0
  125. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/pr.md +159 -0
  126. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-03-base-branch-resolution-policy/slice.json +102 -0
  127. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/CLOSURE_BRIEF.md +25 -0
  128. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/EXECUTION_BRIEF.md +74 -0
  129. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/pr.md +147 -0
  130. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-04-next-plan-graph-ux-edge-cases/slice.json +91 -0
  131. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/CLOSURE_BRIEF.md +28 -0
  132. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/EXECUTION_BRIEF.md +73 -0
  133. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/pr.md +146 -0
  134. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/slice.json +100 -0
  135. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/CLOSURE_BRIEF.md +36 -0
  136. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md +76 -0
  137. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/pr.md +155 -0
  138. package/specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/slice.json +111 -0
  139. package/specs/quiver-v52-schema-docs-release-hygiene/EVIDENCE_REPORT.md +95 -0
  140. package/specs/quiver-v52-schema-docs-release-hygiene/EXECUTION_PLAN.md +31 -0
  141. package/specs/quiver-v52-schema-docs-release-hygiene/SPEC.md +107 -0
  142. package/specs/quiver-v52-schema-docs-release-hygiene/STATUS.md +22 -0
  143. package/specs/quiver-v52-schema-docs-release-hygiene/pr.md +69 -0
  144. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-00-schema-docs-release-baseline/CLOSURE_BRIEF.md +21 -0
  145. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-00-schema-docs-release-baseline/EXECUTION_BRIEF.md +60 -0
  146. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-00-schema-docs-release-baseline/slice.json +62 -0
  147. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/CLOSURE_BRIEF.md +34 -0
  148. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/EXECUTION_BRIEF.md +71 -0
  149. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/pr.md +146 -0
  150. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-01-json-schema-for-slice-json/slice.json +106 -0
  151. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/CLOSURE_BRIEF.md +33 -0
  152. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/EXECUTION_BRIEF.md +67 -0
  153. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/pr.md +144 -0
  154. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-02-generated-cli-reference/slice.json +86 -0
  155. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/CLOSURE_BRIEF.md +38 -0
  156. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/EXECUTION_BRIEF.md +75 -0
  157. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/pr.md +159 -0
  158. package/specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/slice.json +105 -0
  159. package/src/create-quiver/commands/changelog.js +93 -0
  160. package/src/create-quiver/commands/config.js +16 -5
  161. package/src/create-quiver/commands/evidence.js +33 -2
  162. package/src/create-quiver/commands/flow.js +1 -0
  163. package/src/create-quiver/commands/graph.js +8 -2
  164. package/src/create-quiver/commands/plan.js +6 -0
  165. package/src/create-quiver/commands/spec.js +28 -13
  166. package/src/create-quiver/index.js +294 -94
  167. package/src/create-quiver/lib/ai/github.js +5 -2
  168. package/src/create-quiver/lib/ai/spec-templates.js +19 -0
  169. package/src/create-quiver/lib/cli/command-registry.js +71 -0
  170. package/src/create-quiver/lib/cli/parser.js +14 -0
  171. package/src/create-quiver/lib/evidence.js +161 -6
  172. package/src/create-quiver/lib/git.js +99 -0
  173. package/src/create-quiver/lib/i18n/messages/en.js +52 -7
  174. package/src/create-quiver/lib/i18n/messages/es.js +54 -9
  175. package/src/create-quiver/lib/init-docs.js +1 -1
  176. package/src/create-quiver/lib/init-layout.js +9 -8
  177. package/src/create-quiver/lib/lifecycle.js +24 -26
  178. package/src/create-quiver/lib/readiness.js +67 -56
  179. package/src/create-quiver/lib/spec-worktrees.js +16 -34
@@ -0,0 +1,75 @@
1
+ # EXECUTION_BRIEF - slice-03 changelog, package, and release smoke hygiene
2
+
3
+ ## Context
4
+
5
+ Release confidence requires validating the actual npm tarball and installed CLI, not only local source. New schema/docs/scripts must be included or excluded deliberately.
6
+
7
+ ## Objective
8
+
9
+ Formalize changelog handling and validate actual npm package installation behavior.
10
+
11
+ ## Scope
12
+
13
+ - `[Unreleased]` changelog handling.
14
+ - `.npmignore`.
15
+ - Package safety.
16
+ - Tarball contents.
17
+ - Installed tarball smoke.
18
+ - Release script dry-run gates.
19
+
20
+ ## Acceptance Criteria
21
+
22
+ - Package smoke validates required public files.
23
+ - Package smoke rejects forbidden local artifacts.
24
+ - Tarball installs in a temporary project.
25
+ - Installed CLI runs `--version`, `--help`, and one safe dry-run command.
26
+ - Changelog process is documented.
27
+ - npm publish automation remains out of scope unless prerequisites are explicit.
28
+
29
+ ## Expected Files To Modify
30
+
31
+ - `CHANGELOG.md`
32
+ - `.npmignore`
33
+ - `scripts/package-quiver.sh`
34
+ - `scripts/release-quiver.sh`
35
+ - `scripts/ci/**`
36
+ - `package.json`
37
+ - `package-lock.json`
38
+ - `.github/workflows/ci.yml`
39
+ - `CONTRIBUTING.md`
40
+ - `specs/quiver-v52-schema-docs-release-hygiene/EVIDENCE_REPORT.md`
41
+
42
+ ## Validations Required
43
+
44
+ - `npm ci`
45
+ - `node --test`
46
+ - `npm run package:quiver`
47
+ - installed tarball smoke
48
+ - `git diff --check`
49
+
50
+ ## Risks
51
+
52
+ - Publishing local audit artifacts or PDFs.
53
+ - Excluding required public schema/docs.
54
+ - Release script relying on local-only files.
55
+
56
+ ## Dependencies
57
+
58
+ - Depends on `slice-01-json-schema-for-slice-json`.
59
+ - Depends on `slice-02-generated-cli-reference`.
60
+
61
+ ## Instructions For Executor
62
+
63
+ 1. Update package checks after schema/docs decisions are known.
64
+ 2. Validate the installed tarball, not only source checkout.
65
+ 3. Keep publish steps manual unless prerequisites are explicitly present.
66
+
67
+ ## Completion Checklist
68
+
69
+ - [ ] Acceptance criteria satisfied.
70
+ - [ ] Required validations run or blockers documented.
71
+ - [ ] Closure brief updated.
72
+
73
+ ## Conditions Of Closure
74
+
75
+ - Release/package checks catch missing required files and forbidden local artifacts before publish.
@@ -0,0 +1,159 @@
1
+ # PR - QUIVER-52-03 - Changelog, package, and release smoke hygiene
2
+
3
+ ## Title
4
+
5
+ QUIVER-52-03 Changelog, package, and release smoke hygiene
6
+
7
+ ## Summary
8
+
9
+ Formalizes changelog handling and hardens release/package validation. The package smoke now validates required public files, rejects local audit/tool/secret artifacts, installs the generated tarball, and verifies the installed CLI with `--version`, `--help`, and `init --dry-run`. Release dry-run gates now include changelog, docs, schema, installer, package, and installed CLI checks, while publish flags remain explicitly guarded.
10
+
11
+ ## PR Policy
12
+
13
+ - [x] One slice only.
14
+ - [ ] Grouped PR exception: at most 2-3 slices, all docs-only, research-only, or low-risk mechanical cleanup.
15
+ - [x] No behavior changes in a grouped PR.
16
+ - [x] No mixed docs with UI, backend, refactor, or performance work.
17
+ - [x] Separate evidence for this slice is recorded in `EVIDENCE_REPORT.md`.
18
+ - [x] Whole PR is revertible without leaving partial state.
19
+
20
+ Individual PR required classification: release/package gates, CI docs gate, tests affecting validation gates, docs, and slice metadata.
21
+
22
+ ### Merge Policy
23
+
24
+ - [x] 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 not requested.
29
+
30
+ ## Scope
31
+
32
+ - Add `npm run changelog:check`.
33
+ - Add `scripts/ci/check-changelog.js` and focused tests.
34
+ - Update `[Unreleased]` changelog entries.
35
+ - Harden `.npmignore` for local audit, PDF, SSH/key, and local-noise artifacts.
36
+ - Extend `npm run package:quiver` to validate required public files, forbidden local artifacts, installed tarball, installed `--version`, installed `--help`, and installed `init --dry-run`.
37
+ - Wire CI docs job to `npm run docs:check`.
38
+ - Add changelog/docs/schema gates to `scripts/release-quiver.sh`.
39
+ - Require `QUIVER_ALLOW_NPM_PUBLISH=1` for release publish flags.
40
+ - Document changelog/package/release expectations in `CONTRIBUTING.md` and release validation docs.
41
+ - Update v52 status, evidence, closure, slice metadata, and PR body.
42
+
43
+ ## Files
44
+
45
+ - `.github/workflows/ci.yml`
46
+ - `.npmignore`
47
+ - `CHANGELOG.md`
48
+ - `CONTRIBUTING.md`
49
+ - `README.md`
50
+ - `package.json`
51
+ - `scripts/ci/check-changelog.js`
52
+ - `scripts/package-quiver.sh`
53
+ - `scripts/release-quiver.sh`
54
+ - `tests/ci/changelog.test.js`
55
+ - `specs/quiver-v52-schema-docs-release-hygiene/SPEC.md`
56
+ - `specs/quiver-v52-schema-docs-release-hygiene/STATUS.md`
57
+ - `specs/quiver-v52-schema-docs-release-hygiene/EVIDENCE_REPORT.md`
58
+ - `specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/CLOSURE_BRIEF.md`
59
+ - `specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/slice.json`
60
+ - `specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/pr.md`
61
+
62
+ ## How to Test (DETAILED - REQUIRED)
63
+
64
+ ### Required Environment
65
+
66
+ - Node.js supported by the repo.
67
+ - npm.
68
+ - Git.
69
+ - ShellCheck for local shell lint validation.
70
+
71
+ ### Worktree Access
72
+
73
+ ```bash
74
+ cd /Users/fabrijk/Documents/Work/Proyectos\ Personales/nika/frameworks/quiver
75
+ git switch feature/QUIVER-52-03-v52-release-package-hygiene
76
+ ```
77
+
78
+ ### Run the Project
79
+
80
+ No runtime server is required. This is release/package automation, docs, CI gate, tests, and spec evidence.
81
+
82
+ ### Use Cases
83
+
84
+ #### Case 1: validate changelog hygiene
85
+
86
+ 1. Run `npm run changelog:check`.
87
+ 2. Inspect the report.
88
+
89
+ **Expected result:** the checker finds `CHANGELOG.md`, detects `[Unreleased]`, and reports categorized entries.
90
+
91
+ #### Case 2: validate package boundary and installed CLI
92
+
93
+ 1. Run `npm run package:quiver`.
94
+ 2. Inspect the output.
95
+
96
+ **Expected result:** the package smoke requires public files, rejects forbidden local artifacts, installs the tarball, and verifies installed `--version`, `--help`, and `init --dry-run`.
97
+
98
+ #### Case 3: validate release dry-run gates
99
+
100
+ 1. Run `npm run release:quiver`.
101
+ 2. Inspect the gate sequence.
102
+
103
+ **Expected result:** release dry-run requires a clean worktree, then runs changelog, docs, schema, installer smoke, package smoke, and installed CLI checks before printing publish guidance.
104
+
105
+ #### Case 4: verify publish remains guarded
106
+
107
+ 1. Run `bash scripts/release-quiver.sh --help`.
108
+ 2. Review the publish text.
109
+
110
+ **Expected result:** publish flags are documented as requiring `QUIVER_ALLOW_NPM_PUBLISH=1`; publish remains opt-in and human-authorized.
111
+
112
+ ### Technical Verification
113
+
114
+ ```bash
115
+ npm ci
116
+ npm run changelog:check
117
+ node --test tests/ci/changelog.test.js
118
+ bash -n scripts/package-quiver.sh scripts/release-quiver.sh
119
+ shellcheck scripts/package-quiver.sh scripts/release-quiver.sh
120
+ npm run docs:check
121
+ npm run schema:slice:check
122
+ npm run package:quiver
123
+ npm run release:quiver
124
+ node --test
125
+ git diff --check
126
+ node bin/create-quiver.js spec validate specs/quiver-v52-schema-docs-release-hygiene
127
+ node bin/create-quiver.js check-slice specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/slice.json --local --gate validation
128
+ node bin/create-quiver.js check-scope specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/slice.json --base main --strict
129
+ node bin/create-quiver.js check-pr specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/slice.json --base main
130
+ ```
131
+
132
+ ## Evidence
133
+
134
+ - `npm run changelog:check`: passed; 22 `[Unreleased]` entries detected.
135
+ - `node --test tests/ci/changelog.test.js`: passed, 3 tests.
136
+ - `bash -n scripts/package-quiver.sh scripts/release-quiver.sh`: passed.
137
+ - `shellcheck scripts/package-quiver.sh scripts/release-quiver.sh`: passed.
138
+ - `npm run package:quiver`: passed; generated `create-quiver-0.15.3.tgz` and installed CLI smoke passed.
139
+ - `npm run docs:check`: passed, including generated CLI reference drift check.
140
+ - `npm run schema:slice:check`: passed; 266 runtime-valid fixtures validated, 1 historical/non-runtime fixture skipped, 4 invalid fixtures rejected.
141
+ - `npm ci`: passed; 165 packages installed/audited, 0 vulnerabilities reported.
142
+ - `node --test`: passed, 654 tests.
143
+ - `git diff --check`: passed.
144
+ - `node bin/create-quiver.js spec validate specs/quiver-v52-schema-docs-release-hygiene`: passed.
145
+ - `node bin/create-quiver.js check-slice specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/slice.json --local --gate validation`: passed.
146
+ - `npm run release:quiver`: passed; changelog, docs, schema, installer smoke, package smoke, and installed CLI smoke passed before printing manual publish guidance.
147
+
148
+ ## Rollback
149
+
150
+ 1. Revert this slice commit with `git revert <commit-sha>`.
151
+ 2. Run the technical verification commands above.
152
+ 3. Confirm changelog check, installed package smoke, release dry-run gates, CI docs gate change, package exclusions, docs updates, and focused tests are removed.
153
+
154
+ ## Risks / Notes
155
+
156
+ - `npm run package:quiver` now performs an npm install from the generated tarball, so package smoke is intentionally stricter and slightly slower.
157
+ - `scripts/release-quiver.sh --publish` and `--publish-current` now require `QUIVER_ALLOW_NPM_PUBLISH=1` to avoid accidental publish automation.
158
+ - CI docs job now uses `npm run docs:check`, so generated CLI reference drift can fail the docs gate.
159
+ - No package dependency or lockfile update is required.
@@ -0,0 +1,105 @@
1
+ {
2
+ "slice_id": "slice-03-changelog-package-release-smoke-hygiene",
3
+ "ticket": "QUIVER-52-03",
4
+ "type": "automation",
5
+ "title": "Changelog, package, and release smoke hygiene",
6
+ "objective": "Formalize changelog handling and validate actual npm package installation behavior.",
7
+ "description": "Updates release/package smoke gates so new docs/schema/scripts are included or excluded intentionally and installed CLI behavior is verified.",
8
+ "git": {
9
+ "branch_type": "feature",
10
+ "base_branch": "main",
11
+ "branch_slug": "v52-release-package-hygiene",
12
+ "branch_name": "feature/QUIVER-52-03-v52-release-package-hygiene"
13
+ },
14
+ "files": [
15
+ ".github/workflows/ci.yml",
16
+ ".npmignore",
17
+ "CHANGELOG.md",
18
+ "CONTRIBUTING.md",
19
+ "README.md",
20
+ "package.json",
21
+ "scripts/package-quiver.sh",
22
+ "scripts/release-quiver.sh",
23
+ "scripts/ci/check-changelog.js",
24
+ "scripts/ci/smoke-create-quiver.sh",
25
+ "tests/ci/changelog.test.js",
26
+ "specs/quiver-v52-schema-docs-release-hygiene/SPEC.md",
27
+ "specs/quiver-v52-schema-docs-release-hygiene/STATUS.md",
28
+ "specs/quiver-v52-schema-docs-release-hygiene/EVIDENCE_REPORT.md",
29
+ "specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/CLOSURE_BRIEF.md",
30
+ "specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/slice.json",
31
+ "specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/pr.md"
32
+ ],
33
+ "expected_read_paths": [
34
+ "CHANGELOG.md",
35
+ ".npmignore",
36
+ "scripts/package-quiver.sh",
37
+ "scripts/release-quiver.sh",
38
+ "package.json",
39
+ "package-lock.json"
40
+ ],
41
+ "allowed_write_paths": [
42
+ ".github/workflows/ci.yml",
43
+ ".npmignore",
44
+ "CHANGELOG.md",
45
+ "CONTRIBUTING.md",
46
+ "README.md",
47
+ "package.json",
48
+ "scripts/package-quiver.sh",
49
+ "scripts/release-quiver.sh",
50
+ "scripts/ci/check-changelog.js",
51
+ "scripts/ci/smoke-create-quiver.sh",
52
+ "tests/ci/changelog.test.js",
53
+ "specs/quiver-v52-schema-docs-release-hygiene/SPEC.md",
54
+ "specs/quiver-v52-schema-docs-release-hygiene/STATUS.md",
55
+ "specs/quiver-v52-schema-docs-release-hygiene/EVIDENCE_REPORT.md",
56
+ "specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/CLOSURE_BRIEF.md",
57
+ "specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/slice.json",
58
+ "specs/quiver-v52-schema-docs-release-hygiene/slices/slice-03-changelog-package-release-smoke-hygiene/pr.md"
59
+ ],
60
+ "depends_on": [
61
+ "slice-01-json-schema-for-slice-json",
62
+ "slice-02-generated-cli-reference"
63
+ ],
64
+ "parallel_safe": "no",
65
+ "parallel_safe_reason": "Release/package hygiene must include outputs from schema and docs generation slices.",
66
+ "must": [
67
+ "Formalize [Unreleased] changelog handling.",
68
+ "Validate npm pack tarball contents.",
69
+ "Install tarball in a temp project and execute installed CLI.",
70
+ "Update package safety for new public/repo-only files.",
71
+ "Keep npm publish automation out of scope unless prerequisites are explicit."
72
+ ],
73
+ "not_included": [
74
+ "Publishing to npm.",
75
+ "Adding secrets to CI.",
76
+ "Removing manual release safeguards."
77
+ ],
78
+ "acceptance": [
79
+ "Package smoke fails for forbidden local artifacts.",
80
+ "Package smoke fails if required public files are missing.",
81
+ "Installed tarball smoke runs --version, --help, and a safe dry-run command.",
82
+ "Changelog process is documented and coherent."
83
+ ],
84
+ "tests": [
85
+ "npm ci",
86
+ "npm run changelog:check",
87
+ "node --test tests/ci/changelog.test.js",
88
+ "bash -n scripts/package-quiver.sh scripts/release-quiver.sh",
89
+ "shellcheck scripts/package-quiver.sh scripts/release-quiver.sh",
90
+ "npm run docs:check",
91
+ "node --test",
92
+ "npm run package:quiver",
93
+ "npm run release:quiver",
94
+ "git diff --check"
95
+ ],
96
+ "validation_hints": [
97
+ "Explicitly reject audit files, PDFs, tests, worktrees, secrets, .DS_Store, and tool state from the package."
98
+ ],
99
+ "estimated_hours": 6,
100
+ "status": "completed",
101
+ "blocked_reason": null,
102
+ "actual_hours": 5,
103
+ "started_at": "2026-06-03T01:05:00-0300",
104
+ "completed_at": "2026-06-03T01:13:00-0300"
105
+ }
@@ -0,0 +1,93 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ function parseChangelog(content) {
5
+ const lines = String(content || '').split(/\r?\n/);
6
+ const entries = [];
7
+ let current = null;
8
+
9
+ for (const line of lines) {
10
+ const heading = line.match(/^##\s+\[?([^\]\n]+)\]?(?:\s+-\s+(.+))?$/);
11
+ if (heading) {
12
+ if (current) {
13
+ current.body = current.body.trim();
14
+ entries.push(current);
15
+ }
16
+ current = {
17
+ version: heading[1].trim(),
18
+ date: heading[2]?.trim() || null,
19
+ body: '',
20
+ };
21
+ continue;
22
+ }
23
+
24
+ if (current) {
25
+ current.body += `${line}\n`;
26
+ }
27
+ }
28
+
29
+ if (current) {
30
+ current.body = current.body.trim();
31
+ entries.push(current);
32
+ }
33
+
34
+ return entries;
35
+ }
36
+
37
+ function readChangelog(packageRoot) {
38
+ const changelogPath = path.join(packageRoot, 'CHANGELOG.md');
39
+ if (!fs.existsSync(changelogPath)) {
40
+ return { path: changelogPath, entries: [], missing: true };
41
+ }
42
+
43
+ const content = fs.readFileSync(changelogPath, 'utf8');
44
+ return { path: changelogPath, entries: parseChangelog(content), missing: false };
45
+ }
46
+
47
+ function formatHumanChangelog(report) {
48
+ if (report.missing) {
49
+ return 'Quiver changelog\n\nNo local CHANGELOG.md was found in the installed package.\n';
50
+ }
51
+
52
+ const entries = report.entries.slice(0, 3);
53
+ if (entries.length === 0) {
54
+ return 'Quiver changelog\n\nLocal CHANGELOG.md did not contain parseable release entries.\n';
55
+ }
56
+
57
+ const lines = ['Quiver changelog', ''];
58
+ for (const entry of entries) {
59
+ lines.push(`## ${entry.version}${entry.date ? ` - ${entry.date}` : ''}`);
60
+ if (entry.body) {
61
+ lines.push(entry.body);
62
+ }
63
+ lines.push('');
64
+ }
65
+
66
+ return `${lines.join('\n').trimEnd()}\n`;
67
+ }
68
+
69
+ function runChangelog(options = {}) {
70
+ const packageRoot = options.packageRoot || path.resolve(__dirname, '../..', '..');
71
+ const report = readChangelog(packageRoot);
72
+ const payload = {
73
+ schema_version: 1,
74
+ source: report.path,
75
+ missing: report.missing,
76
+ entries: report.entries.slice(0, 10),
77
+ };
78
+
79
+ if (options.json) {
80
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
81
+ return payload;
82
+ }
83
+
84
+ process.stdout.write(formatHumanChangelog(report));
85
+ return payload;
86
+ }
87
+
88
+ module.exports = {
89
+ formatHumanChangelog,
90
+ parseChangelog,
91
+ readChangelog,
92
+ runChangelog,
93
+ };
@@ -10,6 +10,7 @@ const {
10
10
  writeGlobalLanguageConfig,
11
11
  writeProjectLanguageConfig,
12
12
  } = require('../lib/i18n/language');
13
+ const { createTranslator } = require('../lib/i18n/catalog');
13
14
 
14
15
  function formatError(message) {
15
16
  return `create-quiver: ${message}`;
@@ -29,10 +30,14 @@ function formatProjectRelativePath(repoRoot, filePath) {
29
30
  return path.relative(repoRoot, filePath).split(path.sep).join('/') || '.';
30
31
  }
31
32
 
32
- function validateLanguageForSet(language) {
33
+ function validateLanguageForSet(language, translator = createTranslator()) {
33
34
  const normalized = normalizeLanguage(language);
34
35
  if (!normalized || normalized !== String(language || '').trim().toLowerCase()) {
35
- throw new Error(formatError(`unsupported language: ${language || '<missing>'}. Supported languages: ${SUPPORTED_LANGUAGES.join(', ')}. Run: npx create-quiver config language set ${DEFAULT_LANGUAGE}`));
36
+ throw new Error(formatError(translator.t('config.error.unsupported_language', {
37
+ fallback: DEFAULT_LANGUAGE,
38
+ language: language || '<missing>',
39
+ supported: SUPPORTED_LANGUAGES.join(', '),
40
+ })));
36
41
  }
37
42
  return normalized;
38
43
  }
@@ -69,7 +74,8 @@ function runLanguageShow(repoRoot, options = {}) {
69
74
  }
70
75
 
71
76
  function runLanguageSet(repoRoot, options = {}) {
72
- const language = validateLanguageForSet(options.value);
77
+ const translator = createTranslator(options.language);
78
+ const language = validateLanguageForSet(options.value, translator);
73
79
  const global = options.global === true;
74
80
  const configPath = global ? globalLanguageConfigPath() : projectLanguageConfigPath(repoRoot);
75
81
 
@@ -102,8 +108,11 @@ function runLanguageSet(repoRoot, options = {}) {
102
108
  }
103
109
 
104
110
  function runConfig(repoRoot, options = {}) {
111
+ const translator = createTranslator(options.language);
105
112
  if (options.section !== 'language') {
106
- throw new Error(formatError(`unsupported config section: ${options.section || '(missing)'}. Supported sections: language`));
113
+ throw new Error(formatError(translator.t('config.error.unsupported_section', {
114
+ section: options.section || '(missing)',
115
+ })));
107
116
  }
108
117
 
109
118
  if (options.command === 'show') {
@@ -116,7 +125,9 @@ function runConfig(repoRoot, options = {}) {
116
125
  return;
117
126
  }
118
127
 
119
- throw new Error(formatError(`unsupported config language command: ${options.command || '(missing)'}. Supported commands: show, set`));
128
+ throw new Error(formatError(translator.t('config.error.unsupported_language_command', {
129
+ command: options.command || '(missing)',
130
+ })));
120
131
  }
121
132
 
122
133
  module.exports = {
@@ -1,5 +1,5 @@
1
1
  const path = require('path');
2
- const { runEvidenceCommand } = require('../lib/evidence');
2
+ const { listEvidenceFiles, runEvidenceCommand, showEvidenceFile } = require('../lib/evidence');
3
3
  const { createTranslator } = require('../lib/i18n/catalog');
4
4
 
5
5
  function formatOutputPath(repoRoot, outputPath) {
@@ -14,11 +14,42 @@ function formatOutputPath(repoRoot, outputPath) {
14
14
  function runEvidence(repoRoot, options = {}) {
15
15
  const translator = createTranslator(options.language);
16
16
  const command = options.command || '';
17
+ if (options.subcommand === 'list') {
18
+ const evidence = listEvidenceFiles(repoRoot);
19
+ if (options.json) {
20
+ process.stdout.write(`${JSON.stringify({ evidence }, null, 2)}\n`);
21
+ return { evidence, exitCode: 0 };
22
+ }
23
+
24
+ console.log(translator.t('evidence.list.title'));
25
+ if (evidence.length === 0) {
26
+ console.log(translator.t('evidence.list.empty'));
27
+ return { evidence, exitCode: 0 };
28
+ }
29
+
30
+ for (const item of evidence) {
31
+ console.log(`- ${item.path} (${translator.t('evidence.exit_code', { code: item.exit_code ?? '-' })})`);
32
+ }
33
+ return { evidence, exitCode: 0 };
34
+ }
35
+
36
+ if (options.subcommand === 'show') {
37
+ const evidence = showEvidenceFile(repoRoot, options.target);
38
+ if (options.json) {
39
+ process.stdout.write(`${JSON.stringify(evidence, null, 2)}\n`);
40
+ return { evidence, exitCode: 0 };
41
+ }
42
+
43
+ process.stdout.write(evidence.content);
44
+ return { evidence, exitCode: 0 };
45
+ }
46
+
17
47
  if (options.subcommand !== 'run') {
18
- throw new Error('create-quiver: missing evidence subcommand. Use: npx create-quiver evidence run -- <command>');
48
+ throw new Error(`create-quiver: ${translator.t('evidence.error.missing_subcommand')}`);
19
49
  }
20
50
 
21
51
  const result = runEvidenceCommand(repoRoot, command, {
52
+ missingCommandMessage: `create-quiver: ${translator.t('evidence.error.missing_command')}`,
22
53
  maxOutput: options.maxOutput,
23
54
  outputPath: options.output,
24
55
  spawnSync: options.spawnSync,
@@ -258,6 +258,7 @@ function baseReport({ stage, label, blockers = [], nextCommand, suggestedCommand
258
258
  label,
259
259
  blockers,
260
260
  nextCommand,
261
+ next_command: nextCommand,
261
262
  suggestedCommands,
262
263
  facts,
263
264
  };
@@ -3,6 +3,7 @@ const { computeLevels, detectFileConflicts } = require('../lib/slice-graph');
3
3
  const { renderDotGraph } = require('../lib/renderers/dot');
4
4
  const { renderMermaidGraph } = require('../lib/renderers/mermaid');
5
5
  const { renderTreeGraph, isUnicodeEnabled } = require('../lib/renderers/tree');
6
+ const { createTranslator } = require('../lib/i18n/catalog');
6
7
 
7
8
  function toGraphNode(node) {
8
9
  return {
@@ -69,7 +70,11 @@ function collectGraph(repoRoot, options = {}) {
69
70
  }
70
71
 
71
72
  function formatHumanGraph(report, options = {}) {
73
+ const translator = createTranslator(options.language);
72
74
  const format = options.format || 'tree';
75
+ if (format === 'tree' && typeof options.level === 'number' && (!Array.isArray(report.levels) || report.levels.length === 0)) {
76
+ return `${translator.t('graph.empty.level', { level: options.level })}\n`;
77
+ }
73
78
  const sharedOptions = {
74
79
  showConflicts: options.showConflicts === true,
75
80
  language: options.language,
@@ -88,12 +93,13 @@ function formatHumanGraph(report, options = {}) {
88
93
  return renderDotGraph(report, sharedOptions);
89
94
  }
90
95
 
91
- throw new Error(`create-quiver: unsupported graph format: ${format}`);
96
+ throw new Error(`create-quiver: ${translator.t('graph.error.unsupported_format', { format })}`);
92
97
  }
93
98
 
94
99
  function runGraph(repoRoot, options = {}) {
100
+ const translator = createTranslator(options.language);
95
101
  if (options.format && !['tree', 'mermaid', 'dot'].includes(options.format)) {
96
- throw new Error(`create-quiver: unsupported graph format: ${options.format}`);
102
+ throw new Error(`create-quiver: ${translator.t('graph.error.unsupported_format', { format: options.format })}`);
97
103
  }
98
104
 
99
105
  const report = collectGraph(repoRoot, options);
@@ -195,6 +195,12 @@ function formatHumanPlan(report, options = {}) {
195
195
  lines.push(row.map((value, index) => value.padEnd(widths[index])).join(' '));
196
196
  }
197
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
+
198
204
  return `${lines.join('\n')}\n`;
199
205
  }
200
206