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.
- 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/.quiver/runs/run-2026-06-09t19-14-39z/approvals.json +5 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/decisions.md +2 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/requirement.md +0 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/docs/INDEX.md +97 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/manifest.json +61 -0
- package/.quiver/runs/run-2026-06-09t19-14-39z/state.json +28 -0
- package/ACTIVE_SLICES.md +43 -0
- package/ARCHITECTURE.md +133 -0
- package/CHANGELOG.md +12 -0
- package/CONTRIBUTING.md +174 -9
- package/README.md +10 -1
- package/ROADMAP.md +4 -0
- package/SECURITY.md +9 -2
- package/auditoria-ux-ui-performance-documentacion.md +705 -0
- package/copys-landing-page.md +244 -0
- package/docs/AI_CONTEXT.md.es.template +3 -1
- package/docs/AI_CONTEXT.md.template +3 -1
- package/docs/CLI_UX_GUIDE.md +9 -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 +1 -0
- 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/ai/ACTIVE_SLICE.md +61 -0
- package/docs/getting-started/installation.md +7 -0
- package/docs/reference/commands.md +104 -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/pr.md +154 -0
- package/scripts/package-quiver.sh +82 -2
- package/scripts/release-quiver.sh +14 -3
- package/specs/[project-name]/slices/pr.md.template +19 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +91 -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/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 +294 -94
- 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 +71 -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,146 @@
|
|
|
1
|
+
# PR - QUIVER-51-05 - Evidence robustness and path safety
|
|
2
|
+
|
|
3
|
+
## Title
|
|
4
|
+
|
|
5
|
+
QUIVER-51-05 evidence robustness and path safety
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
Hardens `evidence run/list/show` for production failure modes without changing the existing evidence Markdown contract. The slice preserves child exit codes, writes evidence on failures, records signal metadata, enforces safe project-local output/read paths, keeps redaction/truncation behavior, and documents JSON list/show usage.
|
|
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: functional CLI behavior, tests, docs, and audit matrix coverage.
|
|
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
|
+
- Preserve `evidence run` child exit-code behavior for successful and failing commands.
|
|
33
|
+
- Keep writing evidence when the wrapped command exits with a non-zero status.
|
|
34
|
+
- Record signal termination metadata and return standard `128 + signal` exit codes for signaled processes.
|
|
35
|
+
- Add safe `evidence list` and `evidence show` helpers with parseable `--json` output.
|
|
36
|
+
- Reject output/read path traversal and symlink escapes before execution or reads.
|
|
37
|
+
- Preserve redaction and truncation.
|
|
38
|
+
- Update CLI help, command docs, and i18n audit matrix coverage.
|
|
39
|
+
|
|
40
|
+
## Files
|
|
41
|
+
|
|
42
|
+
- `src/create-quiver/commands/evidence.js`
|
|
43
|
+
- `src/create-quiver/lib/evidence.js`
|
|
44
|
+
- `src/create-quiver/index.js`
|
|
45
|
+
- `src/create-quiver/lib/i18n/messages/en.js`
|
|
46
|
+
- `src/create-quiver/lib/i18n/messages/es.js`
|
|
47
|
+
- `tests/commands/cli-contract.test.js`
|
|
48
|
+
- `tests/commands/evidence.test.js`
|
|
49
|
+
- `tests/lib/evidence.test.js`
|
|
50
|
+
- `docs/reference/commands.md`
|
|
51
|
+
- `docs/COMMANDS.md.template`
|
|
52
|
+
- `specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json`
|
|
53
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/STATUS.md`
|
|
54
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/EVIDENCE_REPORT.md`
|
|
55
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/slice.json`
|
|
56
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/CLOSURE_BRIEF.md`
|
|
57
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/pr.md`
|
|
58
|
+
|
|
59
|
+
## How to Test (DETAILED - REQUIRED)
|
|
60
|
+
|
|
61
|
+
### Required Environment
|
|
62
|
+
|
|
63
|
+
- Node.js supported by the repo.
|
|
64
|
+
- npm.
|
|
65
|
+
- Git.
|
|
66
|
+
|
|
67
|
+
### Worktree Access
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
cd /Users/fabrijk/Documents/Work/Proyectos\ Personales/nika/frameworks/quiver
|
|
71
|
+
git switch feature/QUIVER-51-05-v51-evidence-robustness
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Run the Project
|
|
75
|
+
|
|
76
|
+
No runtime server is required. This is CLI behavior, tests, docs, and spec evidence.
|
|
77
|
+
|
|
78
|
+
### Use Cases
|
|
79
|
+
|
|
80
|
+
#### Case 1: failing command still writes evidence
|
|
81
|
+
|
|
82
|
+
1. Run `node bin/create-quiver.js evidence run --output .quiver/evidence/failure.md -- node -e "console.error('failing command'); process.exit(7)"`.
|
|
83
|
+
2. Inspect `.quiver/evidence/failure.md`.
|
|
84
|
+
|
|
85
|
+
**Expected result:** CLI exits with code `7`; evidence file exists and contains `Exit code: 7` plus captured stderr.
|
|
86
|
+
|
|
87
|
+
#### Case 2: JSON list/show contract
|
|
88
|
+
|
|
89
|
+
1. Run `node bin/create-quiver.js evidence run -- node -e "console.log('json evidence')"`.
|
|
90
|
+
2. Run `node bin/create-quiver.js evidence list --json`.
|
|
91
|
+
3. Run `node bin/create-quiver.js evidence show <path-from-list> --json`.
|
|
92
|
+
4. Parse both JSON outputs.
|
|
93
|
+
|
|
94
|
+
**Expected result:** both commands emit parseable JSON; `show` includes the evidence content and parsed metadata.
|
|
95
|
+
|
|
96
|
+
#### Case 3: unsafe output path is rejected before command execution
|
|
97
|
+
|
|
98
|
+
1. Run `node bin/create-quiver.js evidence run --output ../escape.md -- node -e "require('fs').writeFileSync('marker.txt','ran')"`.
|
|
99
|
+
2. Inspect the project root and parent directory.
|
|
100
|
+
|
|
101
|
+
**Expected result:** CLI exits with an error before running the child command; no `marker.txt` or escaped evidence file is created.
|
|
102
|
+
|
|
103
|
+
#### Case 4: signal metadata
|
|
104
|
+
|
|
105
|
+
**Prerequisite:** signal behavior is covered by unit tests with a mocked `spawnSync` result.
|
|
106
|
+
|
|
107
|
+
1. Run `node --test tests/lib/evidence.test.js`.
|
|
108
|
+
2. Inspect the `runEvidenceCommand records signal metadata and signal exit code` test.
|
|
109
|
+
|
|
110
|
+
**Expected result:** signaled process records `Signal: SIGTERM` and returns exit code `143`.
|
|
111
|
+
|
|
112
|
+
### Technical Verification
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
node --test tests/commands/evidence.test.js
|
|
116
|
+
node --test tests/lib/evidence.test.js
|
|
117
|
+
node --test tests/commands/evidence.test.js tests/lib/evidence.test.js tests/lib/i18n-catalog.test.js tests/commands/cli-contract.test.js
|
|
118
|
+
node --test tests/commands/i18n-audit-matrix.test.js tests/commands/evidence.test.js tests/lib/evidence.test.js tests/lib/i18n-catalog.test.js tests/commands/cli-contract.test.js
|
|
119
|
+
node --test
|
|
120
|
+
npm run docs:check
|
|
121
|
+
git diff --check
|
|
122
|
+
node bin/create-quiver.js spec validate specs/quiver-v51-cli-ergonomics-automation-contracts
|
|
123
|
+
node bin/create-quiver.js check-slice specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/slice.json --local --gate validation
|
|
124
|
+
node bin/create-quiver.js check-scope specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/slice.json --base main --strict
|
|
125
|
+
node bin/create-quiver.js check-pr specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/slice.json --base main
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Evidence
|
|
129
|
+
|
|
130
|
+
- `node --test tests/commands/evidence.test.js tests/lib/evidence.test.js tests/lib/i18n-catalog.test.js tests/commands/cli-contract.test.js`: passed, 38 tests.
|
|
131
|
+
- `node --test tests/commands/i18n-audit-matrix.test.js tests/commands/evidence.test.js tests/lib/evidence.test.js tests/lib/i18n-catalog.test.js tests/commands/cli-contract.test.js`: passed, 40 tests.
|
|
132
|
+
- `node --test`: passed, 638 tests.
|
|
133
|
+
- `npm run docs:check`: passed.
|
|
134
|
+
- `git diff --check`: passed.
|
|
135
|
+
|
|
136
|
+
## Rollback
|
|
137
|
+
|
|
138
|
+
1. Revert this slice commit with `git revert <commit-sha>`.
|
|
139
|
+
2. Run the technical verification commands above.
|
|
140
|
+
3. Confirm `evidence run` returns to the previous baseline behavior and `evidence list/show` docs/help changes are removed.
|
|
141
|
+
|
|
142
|
+
## Risks / Notes
|
|
143
|
+
|
|
144
|
+
- Path checks intentionally reject traversal and symlink escapes for explicit output/read paths.
|
|
145
|
+
- `evidence run` still uses synchronous direct child execution with `shell: false`; this avoids introducing shell-created child processes.
|
|
146
|
+
- Redaction remains best effort; users should avoid commands that deliberately print secrets.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-05-evidence-robustness-path-safety",
|
|
3
|
+
"ticket": "QUIVER-51-05",
|
|
4
|
+
"type": "feature",
|
|
5
|
+
"title": "Evidence robustness and path safety",
|
|
6
|
+
"objective": "Make evidence run/list/show robust for failures, signals, output limits, redaction, JSON, and safe paths.",
|
|
7
|
+
"description": "Hardens evidence commands while preserving existing output and exit-code contracts.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v51-evidence-robustness",
|
|
12
|
+
"branch_name": "feature/QUIVER-51-05-v51-evidence-robustness"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/commands/evidence.js",
|
|
16
|
+
"src/create-quiver/lib/evidence.js",
|
|
17
|
+
"src/create-quiver/index.js",
|
|
18
|
+
"src/create-quiver/lib/i18n/messages/en.js",
|
|
19
|
+
"src/create-quiver/lib/i18n/messages/es.js",
|
|
20
|
+
"tests/commands/cli-contract.test.js",
|
|
21
|
+
"tests/commands/evidence.test.js",
|
|
22
|
+
"tests/lib/evidence.test.js",
|
|
23
|
+
"docs/COMMANDS.md.template",
|
|
24
|
+
"docs/reference/commands.md",
|
|
25
|
+
"specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json",
|
|
26
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/**"
|
|
27
|
+
],
|
|
28
|
+
"expected_read_paths": [
|
|
29
|
+
"src/create-quiver/commands/evidence.js",
|
|
30
|
+
"src/create-quiver/lib/evidence.js",
|
|
31
|
+
"src/create-quiver/index.js",
|
|
32
|
+
"src/create-quiver/lib/i18n/messages/en.js",
|
|
33
|
+
"src/create-quiver/lib/i18n/messages/es.js",
|
|
34
|
+
"tests/commands/cli-contract.test.js",
|
|
35
|
+
"tests/commands/evidence.test.js",
|
|
36
|
+
"tests/lib/evidence.test.js",
|
|
37
|
+
"docs/reference/commands.md",
|
|
38
|
+
"docs/COMMANDS.md.template",
|
|
39
|
+
"specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json"
|
|
40
|
+
],
|
|
41
|
+
"allowed_write_paths": [
|
|
42
|
+
"src/create-quiver/commands/evidence.js",
|
|
43
|
+
"src/create-quiver/lib/evidence.js",
|
|
44
|
+
"src/create-quiver/index.js",
|
|
45
|
+
"src/create-quiver/lib/i18n/messages/en.js",
|
|
46
|
+
"src/create-quiver/lib/i18n/messages/es.js",
|
|
47
|
+
"tests/commands/cli-contract.test.js",
|
|
48
|
+
"tests/commands/evidence.test.js",
|
|
49
|
+
"tests/lib/evidence.test.js",
|
|
50
|
+
"docs/COMMANDS.md.template",
|
|
51
|
+
"docs/reference/commands.md",
|
|
52
|
+
"specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json",
|
|
53
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/STATUS.md",
|
|
54
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/EVIDENCE_REPORT.md",
|
|
55
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/CLOSURE_BRIEF.md",
|
|
56
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/slice.json",
|
|
57
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-05-evidence-robustness-path-safety/pr.md"
|
|
58
|
+
],
|
|
59
|
+
"depends_on": [
|
|
60
|
+
"slice-00-cli-contract-baseline"
|
|
61
|
+
],
|
|
62
|
+
"parallel_safe": "no",
|
|
63
|
+
"parallel_safe_reason": "Evidence run async/signal/path behavior is sensitive and should be isolated.",
|
|
64
|
+
"must": [
|
|
65
|
+
"Preserve child exit code behavior.",
|
|
66
|
+
"Document and test signal behavior.",
|
|
67
|
+
"Keep evidence writing on command failure.",
|
|
68
|
+
"Preserve redaction and truncation.",
|
|
69
|
+
"Define and enforce safe output/read path policy."
|
|
70
|
+
],
|
|
71
|
+
"not_included": [
|
|
72
|
+
"Changing evidence storage format unless compatible and documented.",
|
|
73
|
+
"Dashboard integration."
|
|
74
|
+
],
|
|
75
|
+
"acceptance": [
|
|
76
|
+
"Failing commands preserve exit codes and write evidence.",
|
|
77
|
+
"Signals do not leave orphan child processes.",
|
|
78
|
+
"Path traversal and symlink escape are covered.",
|
|
79
|
+
"JSON list/show remain parseable.",
|
|
80
|
+
"Secrets stay redacted."
|
|
81
|
+
],
|
|
82
|
+
"tests": [
|
|
83
|
+
"node --test tests/commands/evidence.test.js",
|
|
84
|
+
"node --test tests/lib/evidence.test.js",
|
|
85
|
+
"node --test tests/commands/i18n-audit-matrix.test.js",
|
|
86
|
+
"node --test tests/commands/cli-contract.test.js",
|
|
87
|
+
"npm run docs:check",
|
|
88
|
+
"node --test",
|
|
89
|
+
"git diff --check"
|
|
90
|
+
],
|
|
91
|
+
"validation_hints": [
|
|
92
|
+
"If replacing spawnSync with spawn, preserve existing CLI exit-code behavior."
|
|
93
|
+
],
|
|
94
|
+
"estimated_hours": 8,
|
|
95
|
+
"status": "completed",
|
|
96
|
+
"blocked_reason": null,
|
|
97
|
+
"actual_hours": 4,
|
|
98
|
+
"started_at": "2026-06-02T17:05:00-0300",
|
|
99
|
+
"completed_at": "2026-06-02T17:24:19-0300"
|
|
100
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-06 namespace compatibility and Windows npm scripts
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Implemented namespace compatibility and portable script hardening for the final v51 slice.
|
|
6
|
+
|
|
7
|
+
- Added canonical `slice` and `handoff` namespace parsing in the CLI while reusing existing command handlers.
|
|
8
|
+
- Preserved legacy top-level aliases with deprecation guidance on stderr only.
|
|
9
|
+
- Kept machine-readable JSON stdout clean by suppressing legacy warnings for `--json`.
|
|
10
|
+
- Added PowerShell-safe root `quiver:*` package scripts and updated generated project scripts to canonical namespaces.
|
|
11
|
+
- Added Windows CI smoke coverage for canonical namespace commands and portable npm script usage.
|
|
12
|
+
- Updated README, contributing guidance, command reference, generated command template, i18n audit matrix, and Spanish help descriptions.
|
|
13
|
+
|
|
14
|
+
## Validation
|
|
15
|
+
|
|
16
|
+
- [x] `node --test tests/commands/slice-namespace.test.js tests/commands/handoff-namespace.test.js tests/commands/parser-contract.test.js tests/commands/cli-contract.test.js tests/lib/init-layout.test.js tests/commands/i18n-audit-matrix.test.js tests/lib/i18n-catalog.test.js`
|
|
17
|
+
- [x] `npm ci`
|
|
18
|
+
- [x] `node bin/create-quiver.js slice check --local specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/slice.json`
|
|
19
|
+
- [x] `node bin/create-quiver.js handoff check specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md`
|
|
20
|
+
- [x] `npm run quiver:check-handoff -- specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md`
|
|
21
|
+
- [x] `npm run docs:check`
|
|
22
|
+
- [x] `git diff --check`
|
|
23
|
+
- [x] `node --test`
|
|
24
|
+
|
|
25
|
+
## Closure Conditions
|
|
26
|
+
|
|
27
|
+
- [x] Canonical and legacy commands remain compatible.
|
|
28
|
+
- [x] Warnings remain stderr-only.
|
|
29
|
+
- [x] JSON stdout stays clean for automation.
|
|
30
|
+
- [x] Windows PowerShell path is covered by CI smoke configuration.
|
|
31
|
+
- [x] Portable package scripts are available without removing Bash legacy scripts.
|
|
32
|
+
- [x] Lockfile synchronization checked; no package-lock update was required.
|
|
33
|
+
|
|
34
|
+
## Open Items
|
|
35
|
+
|
|
36
|
+
- Local Windows shell execution was not run on this macOS workspace; CI now performs the Windows PowerShell smoke.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-06 namespace compatibility and Windows npm scripts
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Canonical `slice` and `handoff` namespaces exist. This slice protects compatibility and provides a portable path for Windows users.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Preserve canonical/legacy namespace compatibility and make recommended npm scripts portable.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- Slice/handoff namespace parity.
|
|
14
|
+
- Legacy alias warnings.
|
|
15
|
+
- JSON stdout cleanliness.
|
|
16
|
+
- Package scripts and docs.
|
|
17
|
+
- Windows `pwsh` validation.
|
|
18
|
+
|
|
19
|
+
## Acceptance Criteria
|
|
20
|
+
|
|
21
|
+
- Canonical commands and aliases remain behaviorally equivalent.
|
|
22
|
+
- Legacy warnings go only to stderr and are suppressed for JSON where required.
|
|
23
|
+
- Recommended npm/CLI paths work under Windows PowerShell.
|
|
24
|
+
- Bash-only scripts are replaced, wrapped, or clearly documented as legacy.
|
|
25
|
+
- Lockfile is synchronized if package metadata changes.
|
|
26
|
+
|
|
27
|
+
## Expected Files To Modify
|
|
28
|
+
|
|
29
|
+
- `package.json`
|
|
30
|
+
- `package-lock.json`
|
|
31
|
+
- `src/create-quiver/index.js`
|
|
32
|
+
- `src/create-quiver/commands/slice.js`
|
|
33
|
+
- `src/create-quiver/commands/handoff.js`
|
|
34
|
+
- `tests/commands/slice-namespace.test.js`
|
|
35
|
+
- `tests/commands/handoff-namespace.test.js`
|
|
36
|
+
- `tests/commands/parser-contract.test.js`
|
|
37
|
+
- `.github/workflows/ci.yml`
|
|
38
|
+
- `README.md`
|
|
39
|
+
- `CONTRIBUTING.md`
|
|
40
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/EVIDENCE_REPORT.md`
|
|
41
|
+
|
|
42
|
+
## Validations Required
|
|
43
|
+
|
|
44
|
+
- `node --test tests/commands/slice-namespace.test.js`
|
|
45
|
+
- `node --test tests/commands/handoff-namespace.test.js`
|
|
46
|
+
- `node --test tests/commands/parser-contract.test.js`
|
|
47
|
+
- `npm ci`
|
|
48
|
+
- `node --test`
|
|
49
|
+
- `git diff --check`
|
|
50
|
+
|
|
51
|
+
## Risks
|
|
52
|
+
|
|
53
|
+
- Breaking legacy users.
|
|
54
|
+
- Marking Bash scripts portable when they are not.
|
|
55
|
+
- Lockfile drift.
|
|
56
|
+
|
|
57
|
+
## Dependencies
|
|
58
|
+
|
|
59
|
+
- Depends on `slice-00-cli-contract-baseline`.
|
|
60
|
+
|
|
61
|
+
## Instructions For Executor
|
|
62
|
+
|
|
63
|
+
1. Treat current namespace behavior as compatibility contract.
|
|
64
|
+
2. Validate stdout/stderr behavior.
|
|
65
|
+
3. Provide a Windows PowerShell-supported command path.
|
|
66
|
+
4. Do not remove aliases.
|
|
67
|
+
|
|
68
|
+
## Completion Checklist
|
|
69
|
+
|
|
70
|
+
- [ ] Acceptance criteria satisfied.
|
|
71
|
+
- [ ] Required validations run or blockers documented.
|
|
72
|
+
- [ ] Closure brief updated.
|
|
73
|
+
|
|
74
|
+
## Conditions Of Closure
|
|
75
|
+
|
|
76
|
+
- Namespace compatibility is protected and Windows users have a supported path.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# PR - QUIVER-51-06 - Namespace compatibility and Windows npm scripts
|
|
2
|
+
|
|
3
|
+
## Title
|
|
4
|
+
|
|
5
|
+
QUIVER-51-06 namespace compatibility and Windows npm scripts
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
Adds canonical `slice` and `handoff` CLI namespaces while preserving legacy aliases, protects JSON stdout from deprecation warnings, and makes recommended package scripts portable for PowerShell users. Existing Bash scripts remain available as legacy compatibility paths.
|
|
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: functional CLI behavior, package scripts, tests, docs, audit matrix, and CI smoke coverage.
|
|
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 canonical `slice start|check|pr|scope|cleanup|refresh-active` parser support.
|
|
33
|
+
- Add canonical `handoff check|new` parser support.
|
|
34
|
+
- Preserve legacy top-level aliases including `start-slice`, `check-slice`, `check-pr`, `check-scope`, `cleanup-slice`, `refresh-active-slices`, `check-handoff`, and `new-handoff`.
|
|
35
|
+
- Emit legacy alias guidance to stderr only, and suppress it for `--json`.
|
|
36
|
+
- Add portable root `quiver:*` npm scripts that use the Node CLI entrypoint.
|
|
37
|
+
- Keep existing Bash scripts as legacy compatibility scripts.
|
|
38
|
+
- Update generated project package scripts to use canonical namespaces.
|
|
39
|
+
- Update Windows CI smoke coverage for canonical namespaces and portable package scripts.
|
|
40
|
+
- Update command docs, onboarding docs, generated command template, Spanish help descriptions, and i18n audit matrix coverage.
|
|
41
|
+
|
|
42
|
+
## Files
|
|
43
|
+
|
|
44
|
+
- `.github/workflows/ci.yml`
|
|
45
|
+
- `CONTRIBUTING.md`
|
|
46
|
+
- `README.md`
|
|
47
|
+
- `docs/COMMANDS.md.template`
|
|
48
|
+
- `docs/reference/commands.md`
|
|
49
|
+
- `package.json`
|
|
50
|
+
- `src/create-quiver/index.js`
|
|
51
|
+
- `src/create-quiver/lib/i18n/messages/es.js`
|
|
52
|
+
- `src/create-quiver/lib/init-layout.js`
|
|
53
|
+
- `tests/commands/cli-contract.test.js`
|
|
54
|
+
- `tests/commands/handoff-namespace.test.js`
|
|
55
|
+
- `tests/commands/parser-contract.test.js`
|
|
56
|
+
- `tests/commands/slice-namespace.test.js`
|
|
57
|
+
- `tests/lib/init-layout.test.js`
|
|
58
|
+
- `specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json`
|
|
59
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/STATUS.md`
|
|
60
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/EVIDENCE_REPORT.md`
|
|
61
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/slice.json`
|
|
62
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/CLOSURE_BRIEF.md`
|
|
63
|
+
- `specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/pr.md`
|
|
64
|
+
|
|
65
|
+
## How to Test (DETAILED - REQUIRED)
|
|
66
|
+
|
|
67
|
+
### Required Environment
|
|
68
|
+
|
|
69
|
+
- Node.js supported by the repo.
|
|
70
|
+
- npm.
|
|
71
|
+
- Git.
|
|
72
|
+
|
|
73
|
+
### Worktree Access
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
cd /Users/fabrijk/Documents/Work/Proyectos\ Personales/nika/frameworks/quiver
|
|
77
|
+
git switch feature/QUIVER-51-06-v51-namespace-windows-scripts
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Run the Project
|
|
81
|
+
|
|
82
|
+
No runtime server is required. This is CLI behavior, package script, docs, CI configuration, and spec evidence.
|
|
83
|
+
|
|
84
|
+
### Use Cases
|
|
85
|
+
|
|
86
|
+
#### Case 1: canonical slice namespace
|
|
87
|
+
|
|
88
|
+
1. Run `node bin/create-quiver.js slice check --local specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/slice.json`.
|
|
89
|
+
2. Inspect stdout and stderr.
|
|
90
|
+
|
|
91
|
+
**Expected result:** command succeeds with the same behavior as the legacy `check-slice` command and no legacy warning appears.
|
|
92
|
+
|
|
93
|
+
#### Case 2: legacy alias warning stays automation-safe
|
|
94
|
+
|
|
95
|
+
1. Run `node bin/create-quiver.js check-slice --local specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/slice.json`.
|
|
96
|
+
2. Run `node bin/create-quiver.js check-slice --json --local specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/slice.json`.
|
|
97
|
+
3. Parse JSON stdout from the second command.
|
|
98
|
+
|
|
99
|
+
**Expected result:** legacy human command emits deprecation guidance on stderr only; JSON stdout remains parseable and does not include the warning.
|
|
100
|
+
|
|
101
|
+
#### Case 3: canonical handoff namespace and portable npm script
|
|
102
|
+
|
|
103
|
+
1. Run `node bin/create-quiver.js handoff check specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md`.
|
|
104
|
+
2. Run `npm run quiver:check-handoff -- specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md`.
|
|
105
|
+
|
|
106
|
+
**Expected result:** both commands succeed using the canonical handoff path without requiring Bash.
|
|
107
|
+
|
|
108
|
+
#### Case 4: unsupported namespace subcommand fails before execution
|
|
109
|
+
|
|
110
|
+
1. Run `node bin/create-quiver.js slice unknown specs/example/slice.json`.
|
|
111
|
+
2. Run `node bin/create-quiver.js handoff unknown specs/example/EXECUTION_BRIEF.md`.
|
|
112
|
+
|
|
113
|
+
**Expected result:** both commands fail with parser-level unsupported subcommand errors before command execution.
|
|
114
|
+
|
|
115
|
+
### Technical Verification
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
node --test tests/commands/slice-namespace.test.js
|
|
119
|
+
node --test tests/commands/handoff-namespace.test.js
|
|
120
|
+
node --test tests/commands/parser-contract.test.js
|
|
121
|
+
node --test tests/commands/slice-namespace.test.js tests/commands/handoff-namespace.test.js tests/commands/parser-contract.test.js tests/commands/cli-contract.test.js tests/lib/init-layout.test.js tests/commands/i18n-audit-matrix.test.js tests/lib/i18n-catalog.test.js
|
|
122
|
+
npm ci
|
|
123
|
+
node bin/create-quiver.js slice check --local specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/slice.json
|
|
124
|
+
node bin/create-quiver.js handoff check specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md
|
|
125
|
+
npm run quiver:check-handoff -- specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md
|
|
126
|
+
node --test
|
|
127
|
+
npm run docs:check
|
|
128
|
+
git diff --check
|
|
129
|
+
node bin/create-quiver.js spec validate specs/quiver-v51-cli-ergonomics-automation-contracts
|
|
130
|
+
node bin/create-quiver.js check-slice specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/slice.json --local --gate validation
|
|
131
|
+
node bin/create-quiver.js check-scope specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/slice.json --base main --strict
|
|
132
|
+
node bin/create-quiver.js check-pr specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/slice.json --base main
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Evidence
|
|
136
|
+
|
|
137
|
+
- `node --test tests/commands/slice-namespace.test.js tests/commands/handoff-namespace.test.js tests/commands/parser-contract.test.js tests/commands/cli-contract.test.js tests/lib/init-layout.test.js tests/commands/i18n-audit-matrix.test.js tests/lib/i18n-catalog.test.js`: passed, 40 tests.
|
|
138
|
+
- `npm ci`: passed; no package-lock update required.
|
|
139
|
+
- `node bin/create-quiver.js slice check --local specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-00-cli-contract-baseline/slice.json && node bin/create-quiver.js handoff check specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md && npm run quiver:check-handoff -- specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/EXECUTION_BRIEF.md`: passed after dependency installation.
|
|
140
|
+
- `npm run docs:check`: passed.
|
|
141
|
+
- `git diff --check`: passed.
|
|
142
|
+
- `node --test`: passed, 646 tests.
|
|
143
|
+
|
|
144
|
+
## Rollback
|
|
145
|
+
|
|
146
|
+
1. Revert this slice commit with `git revert <commit-sha>`.
|
|
147
|
+
2. Run the technical verification commands above.
|
|
148
|
+
3. Confirm legacy aliases still work and canonical namespace additions, portable script updates, docs, tests, and CI smoke changes are removed.
|
|
149
|
+
|
|
150
|
+
## Risks / Notes
|
|
151
|
+
|
|
152
|
+
- Legacy aliases intentionally remain available; this PR does not remove or hard-fail legacy command names.
|
|
153
|
+
- Deprecation guidance is intentionally not printed for JSON mode to preserve machine-readable stdout.
|
|
154
|
+
- Local Windows shell execution was not run on this macOS workspace; the Windows PowerShell smoke is configured in CI.
|
|
155
|
+
- Existing Bash scripts are retained as legacy paths, while recommended `quiver:*` scripts use Node CLI entrypoints.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-06-namespace-compatibility-windows-scripts",
|
|
3
|
+
"ticket": "QUIVER-51-06",
|
|
4
|
+
"type": "quality",
|
|
5
|
+
"title": "Namespace compatibility and Windows npm scripts",
|
|
6
|
+
"objective": "Preserve canonical/legacy namespace compatibility and make recommended npm scripts portable.",
|
|
7
|
+
"description": "Protects slice/handoff aliases and replaces or documents Bash-only npm scripts so Windows PowerShell users have a supported path.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v51-namespace-windows-scripts",
|
|
12
|
+
"branch_name": "feature/QUIVER-51-06-v51-namespace-windows-scripts"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
".github/workflows/ci.yml",
|
|
16
|
+
"CONTRIBUTING.md",
|
|
17
|
+
"README.md",
|
|
18
|
+
"docs/COMMANDS.md.template",
|
|
19
|
+
"docs/reference/commands.md",
|
|
20
|
+
"package.json",
|
|
21
|
+
"src/create-quiver/index.js",
|
|
22
|
+
"src/create-quiver/lib/i18n/messages/es.js",
|
|
23
|
+
"src/create-quiver/lib/init-layout.js",
|
|
24
|
+
"tests/commands/cli-contract.test.js",
|
|
25
|
+
"tests/commands/handoff-namespace.test.js",
|
|
26
|
+
"tests/commands/parser-contract.test.js",
|
|
27
|
+
"tests/commands/slice-namespace.test.js",
|
|
28
|
+
"tests/lib/init-layout.test.js",
|
|
29
|
+
"specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json",
|
|
30
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/STATUS.md",
|
|
31
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/EVIDENCE_REPORT.md",
|
|
32
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/CLOSURE_BRIEF.md",
|
|
33
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/slice.json",
|
|
34
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/pr.md"
|
|
35
|
+
],
|
|
36
|
+
"expected_read_paths": [
|
|
37
|
+
".github/workflows/ci.yml",
|
|
38
|
+
"CONTRIBUTING.md",
|
|
39
|
+
"README.md",
|
|
40
|
+
"docs/COMMANDS.md.template",
|
|
41
|
+
"docs/reference/commands.md",
|
|
42
|
+
"package.json",
|
|
43
|
+
"src/create-quiver/index.js",
|
|
44
|
+
"src/create-quiver/lib/i18n/messages/es.js",
|
|
45
|
+
"src/create-quiver/lib/init-layout.js",
|
|
46
|
+
"tests/commands/cli-contract.test.js",
|
|
47
|
+
"tests/lib/init-layout.test.js",
|
|
48
|
+
"specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json"
|
|
49
|
+
],
|
|
50
|
+
"allowed_write_paths": [
|
|
51
|
+
".github/workflows/ci.yml",
|
|
52
|
+
"CONTRIBUTING.md",
|
|
53
|
+
"README.md",
|
|
54
|
+
"docs/COMMANDS.md.template",
|
|
55
|
+
"docs/reference/commands.md",
|
|
56
|
+
"package.json",
|
|
57
|
+
"src/create-quiver/index.js",
|
|
58
|
+
"src/create-quiver/lib/i18n/messages/es.js",
|
|
59
|
+
"src/create-quiver/lib/init-layout.js",
|
|
60
|
+
"tests/commands/cli-contract.test.js",
|
|
61
|
+
"tests/commands/handoff-namespace.test.js",
|
|
62
|
+
"tests/commands/parser-contract.test.js",
|
|
63
|
+
"tests/commands/slice-namespace.test.js",
|
|
64
|
+
"tests/lib/init-layout.test.js",
|
|
65
|
+
"specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json",
|
|
66
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/STATUS.md",
|
|
67
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/EVIDENCE_REPORT.md",
|
|
68
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/CLOSURE_BRIEF.md",
|
|
69
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/slice.json",
|
|
70
|
+
"specs/quiver-v51-cli-ergonomics-automation-contracts/slices/slice-06-namespace-compatibility-windows-scripts/pr.md"
|
|
71
|
+
],
|
|
72
|
+
"depends_on": [
|
|
73
|
+
"slice-00-cli-contract-baseline"
|
|
74
|
+
],
|
|
75
|
+
"parallel_safe": "no",
|
|
76
|
+
"parallel_safe_reason": "Touches package scripts and compatibility aliases; should be isolated with CI evidence.",
|
|
77
|
+
"must": [
|
|
78
|
+
"Preserve slice and handoff canonical namespaces.",
|
|
79
|
+
"Preserve legacy aliases with stderr-only warnings.",
|
|
80
|
+
"Keep JSON stdout clean.",
|
|
81
|
+
"Replace, wrap, or document Bash-only scripts as legacy.",
|
|
82
|
+
"Validate recommended commands under Windows pwsh."
|
|
83
|
+
],
|
|
84
|
+
"not_included": [
|
|
85
|
+
"Removing legacy aliases.",
|
|
86
|
+
"Removing Bash scripts without compatibility plan."
|
|
87
|
+
],
|
|
88
|
+
"acceptance": [
|
|
89
|
+
"Canonical and legacy commands remain behaviorally equivalent.",
|
|
90
|
+
"Deprecation warnings are stderr-only and suppressed for JSON as required.",
|
|
91
|
+
"Recommended npm/CLI paths work in Windows pwsh.",
|
|
92
|
+
"package-lock.json is synchronized if package.json changes."
|
|
93
|
+
],
|
|
94
|
+
"tests": [
|
|
95
|
+
"node --test tests/commands/slice-namespace.test.js",
|
|
96
|
+
"node --test tests/commands/handoff-namespace.test.js",
|
|
97
|
+
"node --test tests/commands/parser-contract.test.js",
|
|
98
|
+
"npm ci",
|
|
99
|
+
"node --test",
|
|
100
|
+
"git diff --check"
|
|
101
|
+
],
|
|
102
|
+
"validation_hints": [
|
|
103
|
+
"Do not remove old Bash scripts unless the compatibility story is explicit."
|
|
104
|
+
],
|
|
105
|
+
"estimated_hours": 6,
|
|
106
|
+
"status": "completed",
|
|
107
|
+
"blocked_reason": null,
|
|
108
|
+
"actual_hours": 5,
|
|
109
|
+
"started_at": "2026-06-02T21:35:00-0300",
|
|
110
|
+
"completed_at": "2026-06-02T22:26:31-0300"
|
|
111
|
+
}
|