create-quiver 0.7.0 → 0.8.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/.claude/settings.local.json +45 -0
- package/.github/workflows/ci.yml +2 -2
- package/BACKLOG.md +139 -0
- package/CHANGELOG.md +13 -1
- package/README.md +31 -1
- package/README_FOR_AI.md +25 -13
- package/ROADMAP.md +28 -6
- package/docs/AI_ONBOARDING_PROMPT.md.template +4 -0
- package/docs/COMMANDS.md.template +25 -0
- package/docs/INDEX.md.template +2 -0
- package/docs/SUPPORT_MATRIX.md.template +9 -0
- package/docs/WORKFLOW.md.template +4 -0
- package/docs/examples/graph.md.template +62 -0
- package/docs/examples/next.md.template +27 -0
- package/docs/examples/plan.md.template +28 -0
- package/package.json +5 -2
- package/package.template.json +8 -3
- package/scripts/check-slice-readiness.sh +6 -4
- package/scripts/init-docs.sh +57 -9
- package/specs/[project-name]/HANDOFF.md.template +37 -0
- package/specs/[project-name]/slices/slice-template/slice.json +5 -0
- package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-01-project-scan-command/slice.json +1 -1
- package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-02-ai-onboarding-prompt/slice.json +1 -1
- package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-03-doctor-readme-adoption-flow/slice.json +1 -1
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-01-cross-platform-support-contract/slice.json +1 -1
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-02-node-init-docs-runtime/slice.json +1 -1
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-03-node-migrate-analyze-doctor-flow/slice.json +1 -1
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-04-node-slice-lifecycle-commands/slice.json +1 -1
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-05-generated-project-scripts-and-migration/slice.json +1 -1
- package/specs/quiver-v13-token-efficient-ai-context/EVIDENCE_REPORT.md +1 -1
- package/specs/quiver-v13-token-efficient-ai-context/SPEC.md +1 -1
- package/specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md +26 -0
- package/specs/quiver-v15-init-required-before-migrate/SPEC.md +66 -0
- package/specs/quiver-v15-init-required-before-migrate/STATUS.md +26 -0
- package/specs/quiver-v15-init-required-before-migrate/slices/slice-01-migrate-initialization-precondition/slice.json +65 -0
- package/specs/quiver-v15-init-required-before-migrate/slices/slice-02-doctor-not-initialized-guidance/slice.json +61 -0
- package/specs/quiver-v15-init-required-before-migrate/slices/slice-03-docs-smokes-init-before-migrate/slice.json +64 -0
- package/specs/quiver-v16-handoff-contract/EVIDENCE_REPORT.md +26 -0
- package/specs/quiver-v16-handoff-contract/SPEC.md +68 -0
- package/specs/quiver-v16-handoff-contract/STATUS.md +26 -0
- package/specs/quiver-v16-handoff-contract/slices/slice-01-handoff-template-and-contract/slice.json +66 -0
- package/specs/quiver-v16-handoff-contract/slices/slice-02-check-handoff-command/slice.json +70 -0
- package/specs/quiver-v16-handoff-contract/slices/slice-03-handoff-scaffold-optional/slice.json +67 -0
- package/specs/quiver-v17-orchestration-foundation/EVIDENCE_REPORT.md +32 -0
- package/specs/quiver-v17-orchestration-foundation/SPEC.md +79 -0
- package/specs/quiver-v17-orchestration-foundation/STATUS.md +31 -0
- package/specs/quiver-v17-orchestration-foundation/slices/slice-01-ci-matrix-verified/slice.json +68 -0
- package/specs/quiver-v17-orchestration-foundation/slices/slice-02-slice-graph-library/slice.json +65 -0
- package/specs/quiver-v17-orchestration-foundation/slices/slice-03-depends-on-validation/slice.json +72 -0
- package/specs/quiver-v18-slice-orchestration/EVIDENCE_REPORT.md +38 -0
- package/specs/quiver-v18-slice-orchestration/SPEC.md +91 -0
- package/specs/quiver-v18-slice-orchestration/STATUS.md +33 -0
- package/specs/quiver-v18-slice-orchestration/slices/slice-01-plan-command/slice.json +79 -0
- package/specs/quiver-v18-slice-orchestration/slices/slice-02-graph-mvp-tree/slice.json +75 -0
- package/specs/quiver-v18-slice-orchestration/slices/slice-03-graph-extended-formats/slice.json +70 -0
- package/specs/quiver-v18-slice-orchestration/slices/slice-04-next-command/slice.json +73 -0
- package/specs/quiver-v18-stabilization/EVIDENCE_REPORT.md +26 -0
- package/specs/quiver-v18-stabilization/SPEC.md +62 -0
- package/specs/quiver-v18-stabilization/STATUS.md +30 -0
- package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/CLOSURE_BRIEF.md +29 -0
- package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/EXECUTION_BRIEF.md +134 -0
- package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/slice.json +56 -0
- package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/CLOSURE_BRIEF.md +29 -0
- package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/EXECUTION_BRIEF.md +118 -0
- package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/slice.json +57 -0
- package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/CLOSURE_BRIEF.md +23 -0
- package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/EXECUTION_BRIEF.md +73 -0
- package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/slice.json +49 -0
- package/src/create-quiver/commands/graph.js +97 -0
- package/src/create-quiver/commands/next.js +134 -0
- package/src/create-quiver/commands/plan.js +205 -0
- package/src/create-quiver/index.js +179 -2
- package/src/create-quiver/lib/handoff.js +104 -0
- package/src/create-quiver/lib/init-docs.js +71 -13
- package/src/create-quiver/lib/json.js +14 -0
- package/src/create-quiver/lib/lifecycle.js +3 -2
- package/src/create-quiver/lib/readiness.js +55 -1
- package/src/create-quiver/lib/renderers/dot.js +129 -0
- package/src/create-quiver/lib/renderers/mermaid.js +119 -0
- package/src/create-quiver/lib/renderers/tree.js +116 -0
- package/src/create-quiver/lib/slice-graph.js +453 -0
- package/src/create-quiver/lib/slice.js +2 -1
- package/src/create-quiver/lib/state.js +50 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Plan Example
|
|
2
|
+
|
|
3
|
+
Use `plan` to inspect the pending slice order before starting implementation work.
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx create-quiver plan
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Representative Output
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
Quiver plan
|
|
15
|
+
Total hours: 10
|
|
16
|
+
Critical path: spec-a/slice-01-alpha -> spec-a/slice-02-beta -> spec-b/slice-01-delta
|
|
17
|
+
|
|
18
|
+
[N] TICKET SPEC/SLICE TITLE HOURS STATUS
|
|
19
|
+
--- ------- -------------------- -------------------- ----- ------
|
|
20
|
+
[1] QUIVER-1 spec-a/slice-01-alpha Alpha 2 draft
|
|
21
|
+
[2] QUIVER-1 spec-a/slice-02-beta Beta 5 draft
|
|
22
|
+
[3] QUIVER-1 spec-b/slice-01-delta Delta 3 draft
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Notes
|
|
26
|
+
|
|
27
|
+
- The exact order depends on the repo's current pending graph.
|
|
28
|
+
- Use `--json` when another tool needs the plan, critical path, or total hours.
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-quiver",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Quiver CLI for scaffolding projects from the packaged template",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|
|
8
|
-
"create-quiver": "
|
|
8
|
+
"create-quiver": "bin/create-quiver.js"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
11
|
"check:slice": "bash tools/scripts/check-slice-readiness.sh",
|
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
"start:slice": "bash tools/scripts/start-slice.sh",
|
|
14
14
|
"cleanup:slice": "bash tools/scripts/cleanup-slice.sh",
|
|
15
15
|
"migrate": "bash tools/scripts/migrate-project.sh",
|
|
16
|
+
"quiver:plan": "npx create-quiver plan",
|
|
17
|
+
"quiver:graph": "npx create-quiver graph",
|
|
18
|
+
"quiver:next": "npx create-quiver next",
|
|
16
19
|
"package:quiver": "bash scripts/package-quiver.sh",
|
|
17
20
|
"smoke:create-quiver": "bash scripts/ci/smoke-create-quiver.sh",
|
|
18
21
|
"smoke:tiered-pack": "bash scripts/ci/smoke-tiered-pack.sh",
|
package/package.template.json
CHANGED
|
@@ -2,17 +2,22 @@
|
|
|
2
2
|
"name": "quiver-docs-template",
|
|
3
3
|
"private": true,
|
|
4
4
|
"scripts": {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
"quiver:migrate": "npx create-quiver migrate",
|
|
6
|
+
"quiver:analyze": "npx create-quiver analyze",
|
|
7
|
+
"quiver:plan": "npx create-quiver plan",
|
|
8
|
+
"quiver:graph": "npx create-quiver graph",
|
|
9
|
+
"quiver:next": "npx create-quiver next",
|
|
10
|
+
"quiver:doctor": "npx create-quiver doctor",
|
|
8
11
|
"quiver:start-slice": "npx create-quiver start-slice",
|
|
9
12
|
"quiver:check-slice": "npx create-quiver check-slice",
|
|
10
13
|
"quiver:check-pr": "npx create-quiver check-pr",
|
|
14
|
+
"quiver:check-handoff": "npx create-quiver check-handoff",
|
|
11
15
|
"quiver:cleanup-slice": "npx create-quiver cleanup-slice",
|
|
12
16
|
"quiver:check-scope": "npx create-quiver check-scope",
|
|
13
17
|
"quiver:refresh-active-slices": "npx create-quiver refresh-active-slices",
|
|
14
18
|
"check:slice": "bash tools/scripts/check-slice-readiness.sh",
|
|
15
19
|
"check:pr": "bash tools/scripts/check-pr-readiness.sh",
|
|
20
|
+
"check-handoff": "npx create-quiver check-handoff",
|
|
16
21
|
"start:slice": "bash tools/scripts/start-slice.sh",
|
|
17
22
|
"cleanup:slice": "bash tools/scripts/cleanup-slice.sh",
|
|
18
23
|
"check:scope": "bash tools/scripts/check-scope.sh",
|
|
@@ -82,11 +82,12 @@ slice_rel="${slice_abs#$repo_root/}"
|
|
|
82
82
|
slice_meta=()
|
|
83
83
|
while IFS= read -r line; do
|
|
84
84
|
slice_meta+=("$line")
|
|
85
|
-
done < <(node - "$slice_abs" "$slice_rel" <<'NODE'
|
|
85
|
+
done < <(node - "$slice_abs" "$slice_rel" "$repo_root" <<'NODE'
|
|
86
86
|
const fs = require('fs');
|
|
87
87
|
const path = require('path');
|
|
88
88
|
|
|
89
|
-
const [slicePath, sliceRel] = process.argv.slice(2);
|
|
89
|
+
const [slicePath, sliceRel, repoRoot] = process.argv.slice(2);
|
|
90
|
+
const { parseJsonWithComments } = require(path.join(repoRoot, 'src', 'create-quiver', 'lib', 'json'));
|
|
90
91
|
|
|
91
92
|
function fail(message) {
|
|
92
93
|
console.error(`Error: ${message}`);
|
|
@@ -95,7 +96,7 @@ function fail(message) {
|
|
|
95
96
|
|
|
96
97
|
let json;
|
|
97
98
|
try {
|
|
98
|
-
json =
|
|
99
|
+
json = parseJsonWithComments(fs.readFileSync(slicePath, 'utf8'));
|
|
99
100
|
} catch (error) {
|
|
100
101
|
fail(`No se pudo parsear '${slicePath}' como JSON: ${error.message}`);
|
|
101
102
|
}
|
|
@@ -175,6 +176,7 @@ const cp = require('child_process');
|
|
|
175
176
|
|
|
176
177
|
const [repoRoot, currentBranch, currentFilesB64] = process.argv.slice(2);
|
|
177
178
|
const currentFiles = JSON.parse(Buffer.from(currentFilesB64, 'base64').toString('utf8'));
|
|
179
|
+
const { parseJsonWithComments } = require(path.join(repoRoot, 'src', 'create-quiver', 'lib', 'json'));
|
|
178
180
|
|
|
179
181
|
function run(cmd, cwd = repoRoot) {
|
|
180
182
|
try {
|
|
@@ -201,7 +203,7 @@ function walkSlices(rootDir, acc) {
|
|
|
201
203
|
}
|
|
202
204
|
|
|
203
205
|
if (entry.isFile() && entry.name === 'slice.json' && fullPath.includes(`${path.sep}slices${path.sep}`)) {
|
|
204
|
-
const json =
|
|
206
|
+
const json = parseJsonWithComments(fs.readFileSync(fullPath, 'utf8'));
|
|
205
207
|
const branchName = json.git?.branch_name;
|
|
206
208
|
if (!branchName) {
|
|
207
209
|
continue;
|
package/scripts/init-docs.sh
CHANGED
|
@@ -50,6 +50,9 @@ PRIMARY_INSTALL="npm install"
|
|
|
50
50
|
PRIMARY_DEV="npm run quiver:analyze"
|
|
51
51
|
PRIMARY_TEST="npm test"
|
|
52
52
|
ANALYZE_COMMAND="npx create-quiver analyze"
|
|
53
|
+
PLAN_COMMAND="npx create-quiver plan"
|
|
54
|
+
GRAPH_COMMAND="npx create-quiver graph"
|
|
55
|
+
NEXT_COMMAND="npx create-quiver next"
|
|
53
56
|
DOCTOR_COMMAND="npx create-quiver doctor"
|
|
54
57
|
START_SLICE_COMMAND="npx create-quiver start-slice <slice.json>"
|
|
55
58
|
CHECK_SLICE_COMMAND="npx create-quiver check-slice <slice.json>"
|
|
@@ -192,12 +195,17 @@ copy_file_if_missing() {
|
|
|
192
195
|
# Copiar templates de docs/
|
|
193
196
|
copy_template_keep_name "docs-template/AGENTS.md.template" "AGENTS.md"
|
|
194
197
|
copy_template "docs-template/docs/INDEX.md.template" "docs/INDEX.md"
|
|
198
|
+
copy_template "docs-template/docs/COMMANDS.md.template" "docs/COMMANDS.md"
|
|
195
199
|
copy_template "docs-template/docs/QUICK.md.template" "docs/ai/QUICK.md"
|
|
196
200
|
copy_template "docs-template/docs/STANDARD.md.template" "docs/ai/STANDARD.md"
|
|
197
201
|
copy_template "docs-template/docs/DEEP.md.template" "docs/ai/DEEP.md"
|
|
202
|
+
copy_template "docs-template/docs/examples/plan.md.template" "docs/examples/plan.md"
|
|
203
|
+
copy_template "docs-template/docs/examples/graph.md.template" "docs/examples/graph.md"
|
|
204
|
+
copy_template "docs-template/docs/examples/next.md.template" "docs/examples/next.md"
|
|
198
205
|
copy_template "docs-template/docs/DECISIONS.md.template" "docs/DECISIONS.md"
|
|
199
206
|
copy_template "docs-template/docs/AI_CONTEXT.md.template" "docs/AI_CONTEXT.md"
|
|
200
207
|
copy_template "docs-template/docs/AI_ONBOARDING_PROMPT.md.template" "docs/AI_ONBOARDING_PROMPT.md"
|
|
208
|
+
copy_template "docs-template/specs/[project-name]/HANDOFF.md.template" "specs/$PROJECT_SLUG/HANDOFF.md"
|
|
201
209
|
copy_template "docs-template/docs/CONTEXTO.md.template" "docs/CONTEXTO.md"
|
|
202
210
|
copy_template "docs-template/docs/STATUS.md.template" "docs/STATUS.md"
|
|
203
211
|
copy_template "docs-template/docs/WORKFLOW.md.template" "docs/WORKFLOW.md"
|
|
@@ -488,8 +496,11 @@ Run Quiver from this project root. Do not install it globally.
|
|
|
488
496
|
|
|
489
497
|
\`\`\`bash
|
|
490
498
|
npm install
|
|
491
|
-
|
|
492
|
-
|
|
499
|
+
$ANALYZE_COMMAND
|
|
500
|
+
$PLAN_COMMAND
|
|
501
|
+
$GRAPH_COMMAND
|
|
502
|
+
$DOCTOR_COMMAND
|
|
503
|
+
$NEXT_COMMAND
|
|
493
504
|
\`\`\`
|
|
494
505
|
|
|
495
506
|
If this project needs a pinned Quiver version, install it as a devDependency:
|
|
@@ -506,17 +517,27 @@ The generated project includes \`quiver:*\` npm scripts that call the Node CLI a
|
|
|
506
517
|
|
|
507
518
|
\`\`\`bash
|
|
508
519
|
npm run quiver:analyze
|
|
520
|
+
npm run quiver:plan
|
|
521
|
+
npm run quiver:graph
|
|
522
|
+
npm run quiver:next
|
|
509
523
|
npm run quiver:doctor
|
|
510
524
|
npm run quiver:migrate
|
|
511
525
|
npm run quiver:start-slice -- specs/$PROJECT_SLUG/slices/slice-01/slice.json
|
|
512
526
|
npm run quiver:check-slice -- specs/$PROJECT_SLUG/slices/slice-01/slice.json
|
|
513
527
|
npm run quiver:check-pr -- specs/$PROJECT_SLUG/slices/slice-01/slice.json
|
|
528
|
+
npm run quiver:check-handoff -- specs/$PROJECT_SLUG/HANDOFF.md
|
|
514
529
|
npm run quiver:cleanup-slice -- specs/$PROJECT_SLUG/slices/slice-01/slice.json
|
|
515
530
|
npm run quiver:check-scope -- specs/$PROJECT_SLUG/slices/slice-01/slice.json
|
|
516
531
|
npm run quiver:refresh-active-slices
|
|
517
532
|
\`\`\`
|
|
518
533
|
|
|
534
|
+
The \`quiver:graph\` script prints the tree view by default; use \`npx create-quiver graph --format mermaid\` for PR-ready Markdown and \`--format dot\` when you want Graphviz source.
|
|
535
|
+
The \`quiver:next\` script points to the next ready slice and can auto-start it behind a confirmation prompt.
|
|
536
|
+
Use \`npx create-quiver next --all-ready\` when you want the full ready level instead of a single suggestion.
|
|
519
537
|
The legacy Bash wrappers remain in \`tools/scripts/\` for compatibility, but new project-level automation should prefer the \`quiver:*\` scripts and the direct \`npx create-quiver ...\` commands below.
|
|
538
|
+
\`npm run check-handoff -- specs/$PROJECT_SLUG/HANDOFF.md\` is available as a legacy-friendly alias for the handoff validator.
|
|
539
|
+
If a new bounded transfer is needed, scaffold \`specs/$PROJECT_SLUG/HANDOFF.md\` with \`npx create-quiver new-handoff $PROJECT_SLUG\` and validate it with \`npx create-quiver check-handoff specs/$PROJECT_SLUG/HANDOFF.md\`.
|
|
540
|
+
For exceptional context transfers between agents or phases, a dedicated \`HANDOFF.md\` can live alongside the usual spec and docs files.
|
|
520
541
|
|
|
521
542
|
## Cross-Platform Support
|
|
522
543
|
|
|
@@ -529,8 +550,20 @@ If the project already existed before this Quiver version, upgrade it from the p
|
|
|
529
550
|
\`\`\`bash
|
|
530
551
|
cd /path/to/your-project
|
|
531
552
|
npx create-quiver migrate
|
|
532
|
-
|
|
533
|
-
|
|
553
|
+
$ANALYZE_COMMAND
|
|
554
|
+
$PLAN_COMMAND
|
|
555
|
+
$GRAPH_COMMAND
|
|
556
|
+
$NEXT_COMMAND
|
|
557
|
+
$DOCTOR_COMMAND
|
|
558
|
+
\`\`\`
|
|
559
|
+
|
|
560
|
+
Use \`$GRAPH_COMMAND --format mermaid\` for GitHub-friendly graph embeds or \`$GRAPH_COMMAND --format dot\` for Graphviz pipelines.
|
|
561
|
+
|
|
562
|
+
Exportable graph formats are available when you need a PR-ready Mermaid block or Graphviz source:
|
|
563
|
+
|
|
564
|
+
\`\`\`bash
|
|
565
|
+
$GRAPH_COMMAND --format mermaid
|
|
566
|
+
$GRAPH_COMMAND --format dot
|
|
534
567
|
\`\`\`
|
|
535
568
|
|
|
536
569
|
If your team prefers a pinned local dependency, update the package first and then run the same flow:
|
|
@@ -539,9 +572,14 @@ If your team prefers a pinned local dependency, update the package first and the
|
|
|
539
572
|
npm install --save-dev create-quiver@latest
|
|
540
573
|
npx create-quiver migrate
|
|
541
574
|
npx create-quiver analyze
|
|
575
|
+
npx create-quiver plan
|
|
576
|
+
npx create-quiver graph
|
|
577
|
+
npx create-quiver next
|
|
542
578
|
npx create-quiver doctor
|
|
543
579
|
\`\`\`
|
|
544
580
|
|
|
581
|
+
The tree output remains the default, but Mermaid and DOT are available on demand for exported docs and slide decks.
|
|
582
|
+
|
|
545
583
|
## AI Context Onboarding
|
|
546
584
|
|
|
547
585
|
Lee \`AGENTS.md\` primero y después \`docs/AI_ONBOARDING_PROMPT.md\` tras el análisis.
|
|
@@ -555,6 +593,7 @@ Prepare the project context docs and report assumptions, risks, and files change
|
|
|
555
593
|
\`\`\`
|
|
556
594
|
|
|
557
595
|
Review the AI changes to docs/AI_CONTEXT.md, docs/CONTEXTO.md, docs/STATUS.md, and specs/$PROJECT_SLUG/SPEC.md before starting implementation work.
|
|
596
|
+
If the work was explicitly transferred through a handoff artifact, read \`specs/$PROJECT_SLUG/HANDOFF.md\` before implementation.
|
|
558
597
|
|
|
559
598
|
## Decision Log
|
|
560
599
|
|
|
@@ -564,15 +603,21 @@ Record durable decisions in \`docs/DECISIONS.md\` so future AI agents do not re-
|
|
|
564
603
|
|
|
565
604
|
1. Review or refine specs/$PROJECT_SLUG/SPEC.md.
|
|
566
605
|
2. Create the first slice from specs/$PROJECT_SLUG/slices/slice-template/slice.json.
|
|
567
|
-
3.
|
|
568
|
-
4.
|
|
569
|
-
5.
|
|
606
|
+
3. Review the plan with \`$PLAN_COMMAND\` or \`npm run quiver:plan\`.
|
|
607
|
+
4. Inspect the graph with \`$GRAPH_COMMAND\` or \`npm run quiver:graph\`.
|
|
608
|
+
5. Check the next ready slice with \`$NEXT_COMMAND\` or \`npm run quiver:next\`.
|
|
609
|
+
6. Start work with \`$START_SLICE_COMMAND\` or \`npm run quiver:start-slice -- <slice.json>\`.
|
|
610
|
+
7. Make one commit per slice.
|
|
611
|
+
8. Open one PR per spec.
|
|
570
612
|
|
|
571
613
|
## Verification Checklist
|
|
572
614
|
|
|
573
615
|
- [ ] npm install completes
|
|
574
|
-
- [ ]
|
|
575
|
-
- [ ]
|
|
616
|
+
- [ ] $ANALYZE_COMMAND completes
|
|
617
|
+
- [ ] $PLAN_COMMAND completes
|
|
618
|
+
- [ ] $GRAPH_COMMAND completes
|
|
619
|
+
- [ ] $NEXT_COMMAND completes
|
|
620
|
+
- [ ] $DOCTOR_COMMAND completes
|
|
576
621
|
- [ ] AI agent executed docs/AI_ONBOARDING_PROMPT.md
|
|
577
622
|
- [ ] Context docs were reviewed before the first slice
|
|
578
623
|
|
|
@@ -581,6 +626,9 @@ Record durable decisions in \`docs/DECISIONS.md\` so future AI agents do not re-
|
|
|
581
626
|
- [AI Context](./docs/AI_CONTEXT.md) - Contexto resumido para IA
|
|
582
627
|
- [Decision Log](./docs/DECISIONS.md) - Decisiones durables del proyecto
|
|
583
628
|
- [AI Onboarding Prompt](./docs/AI_ONBOARDING_PROMPT.md) - Handoff exacto para agentes después del análisis
|
|
629
|
+
- [Handoff](./specs/$PROJECT_SLUG/HANDOFF.md) - Transferencia excepcional entre agentes o fases
|
|
630
|
+
- [Check Handoff](./docs/WORKFLOW.md) - Valida el handoff con \`npx create-quiver check-handoff\`
|
|
631
|
+
- [Commands](./docs/COMMANDS.md) - Tabla canónica de comandos de orquestación
|
|
584
632
|
- [Contexto](./docs/CONTEXTO.md) - Qué es $PROJECT_NAME
|
|
585
633
|
- [Workflow](./docs/WORKFLOW.md) - Cómo implementar
|
|
586
634
|
- [Support Matrix](./docs/SUPPORT_MATRIX.md) - Qué entornos están soportados
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Handoff - {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
**Date:** {{FECHA}}
|
|
4
|
+
**Project:** {{PROJECT_NAME}}
|
|
5
|
+
**Slug:** {{PROJECT_SLUG}}
|
|
6
|
+
|
|
7
|
+
This handoff is an exceptional transfer artifact. Use it when work needs to move between agents or between planning and execution with bounded context.
|
|
8
|
+
|
|
9
|
+
## Background
|
|
10
|
+
|
|
11
|
+
Describe the situation that requires a handoff and the current state of the work.
|
|
12
|
+
|
|
13
|
+
## What you will change
|
|
14
|
+
|
|
15
|
+
List the exact files, modules, docs, or workflows that should change.
|
|
16
|
+
|
|
17
|
+
## Validation checklist
|
|
18
|
+
|
|
19
|
+
List the commands, checks, or observations that prove the handoff was completed correctly.
|
|
20
|
+
|
|
21
|
+
## Out of scope
|
|
22
|
+
|
|
23
|
+
List anything that should not be touched in this handoff.
|
|
24
|
+
|
|
25
|
+
## Expected deliverable
|
|
26
|
+
|
|
27
|
+
Describe the concrete output expected from the recipient.
|
|
28
|
+
|
|
29
|
+
## Constraints
|
|
30
|
+
|
|
31
|
+
List the rules, assumptions, and boundaries the recipient must follow.
|
|
32
|
+
|
|
33
|
+
## Notes
|
|
34
|
+
|
|
35
|
+
- Handoffs are orthogonal to specs and slices.
|
|
36
|
+
- Do not use this file to introduce a new `slice.json` type.
|
|
37
|
+
- If the work is large enough to need a durable plan, prefer a spec instead.
|
|
@@ -44,6 +44,11 @@
|
|
|
44
44
|
"lib/module/file.ts",
|
|
45
45
|
"components/Component.tsx"
|
|
46
46
|
],
|
|
47
|
+
// "depends_on": [
|
|
48
|
+
// "slice-01-previous"
|
|
49
|
+
// ],
|
|
50
|
+
// "parallel_safe": "never",
|
|
51
|
+
// "parallel_safe_reason": "Explain why this slice cannot run in parallel."
|
|
47
52
|
"tests": [
|
|
48
53
|
"tests/e2e/module/test.spec.ts",
|
|
49
54
|
"tests/unit/module/test.test.ts"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Quiver v0.15 Evidence Report
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v15-init-required-before-migrate
|
|
4
|
+
**Date:** 2026-04-23
|
|
5
|
+
**Status:** Completed
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
This spec hardens `migrate` so it only upgrades projects that were already initialized by Quiver. The key outcome is that migration stops behaving like a hidden bootstrap path.
|
|
10
|
+
|
|
11
|
+
## Slice Evidence
|
|
12
|
+
|
|
13
|
+
| Slice | Status | Evidence |
|
|
14
|
+
|-------|--------|----------|
|
|
15
|
+
| slice-01 | Completed | `runMigrate()` now fails before any writes when a repo lacks Quiver initialization evidence; `src/create-quiver/lib/state.js` recognizes both initialized state metadata and strong legacy Quiver markers; `scripts/ci/smoke-create-quiver.sh` now proves that migrate fails for plain or malformed repos and still succeeds for legacy Quiver projects |
|
|
16
|
+
| slice-02 | Completed | `doctor` now fails early with an init-first message when the repo has no Quiver initialization evidence; the smoke suite proves that plain repos and malformed state get `Run init first`, while legacy Quiver projects still receive migration guidance |
|
|
17
|
+
| slice-03 | Completed | `README.md`, `README_FOR_AI.md`, and the generated README contract in `src/create-quiver/lib/init-docs.js` now state that `migrate` is only for already initialized Quiver projects; shell and cross-platform smokes assert the generated docs keep that wording |
|
|
18
|
+
|
|
19
|
+
## Required Final Evidence
|
|
20
|
+
|
|
21
|
+
- Running `npx create-quiver migrate` in a repo without Quiver initialization evidence fails before creating docs
|
|
22
|
+
- The failure message points to `npx create-quiver --name "Project Name"`
|
|
23
|
+
- Running `migrate` in an initialized or legacy Quiver project still succeeds
|
|
24
|
+
- `doctor` can explain the difference between "not initialized" and "needs migration"
|
|
25
|
+
- README and generated docs reflect the new contract
|
|
26
|
+
- Smokes cover both the failing and successful flows
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Quiver v0.15 - Init Required Before Migrate
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-04-23
|
|
4
|
+
**Status:** Completed
|
|
5
|
+
|
|
6
|
+
Slice numbering resets here: this spec starts at `slice-01` and does not continue any previous spec's numbering.
|
|
7
|
+
|
|
8
|
+
## Objective
|
|
9
|
+
|
|
10
|
+
Make `create-quiver migrate` refuse to run unless the target project was previously initialized by Quiver, so migration stops being an implicit bootstrap path.
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
|
|
14
|
+
### Included
|
|
15
|
+
|
|
16
|
+
- Require Quiver initialization metadata before `migrate` touches the filesystem
|
|
17
|
+
- Keep the failure non-destructive: if the precondition fails, no docs or templates are created
|
|
18
|
+
- Teach `doctor` to distinguish a project that was never initialized from one that only needs migration
|
|
19
|
+
- Document the new contract in README and generated docs
|
|
20
|
+
- Add smokes that prove `migrate` fails before init and succeeds after init
|
|
21
|
+
|
|
22
|
+
### Excluded
|
|
23
|
+
|
|
24
|
+
- A fallback bootstrap mode inside `migrate`
|
|
25
|
+
- New CLI commands for repair or force-migration
|
|
26
|
+
- Reworking `init`, `analyze`, or slice lifecycle semantics beyond the migration precondition
|
|
27
|
+
- Publishing a release as part of this spec
|
|
28
|
+
|
|
29
|
+
## Contract Change
|
|
30
|
+
|
|
31
|
+
The supported flows become:
|
|
32
|
+
|
|
33
|
+
For a new project:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx create-quiver --name "Project Name"
|
|
37
|
+
npx create-quiver analyze
|
|
38
|
+
npx create-quiver doctor
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
For an existing Quiver project:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx create-quiver migrate
|
|
45
|
+
npx create-quiver analyze
|
|
46
|
+
npx create-quiver doctor
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
If the project was never initialized by Quiver, `migrate` must fail with a clear message that points back to `npx create-quiver --name "Project Name"`. Legacy Quiver projects that predate `.quiver/state.json` must still be recognized from their generated workflow markers.
|
|
50
|
+
|
|
51
|
+
## Slices
|
|
52
|
+
|
|
53
|
+
| Slice | Title | Status | Spec |
|
|
54
|
+
|-------|-------|--------|------|
|
|
55
|
+
| 01 | Migrate Initialization Precondition | Completed | [slice-01](./slices/slice-01-migrate-initialization-precondition/slice.json) |
|
|
56
|
+
| 02 | Doctor Not-Initialized Guidance | Completed | [slice-02](./slices/slice-02-doctor-not-initialized-guidance/slice.json) |
|
|
57
|
+
| 03 | Docs and Smokes for Init Before Migrate | Completed | [slice-03](./slices/slice-03-docs-smokes-init-before-migrate/slice.json) |
|
|
58
|
+
|
|
59
|
+
## Definition of Done
|
|
60
|
+
|
|
61
|
+
- `migrate` fails before any file writes when Quiver initialization evidence is missing
|
|
62
|
+
- The failure message tells the developer to run `npx create-quiver --name "Project Name"`
|
|
63
|
+
- Initialized projects and legacy Quiver projects still migrate successfully
|
|
64
|
+
- `doctor` distinguishes not-initialized from not-migrated states
|
|
65
|
+
- README and generated docs explain that `migrate` is only for previously initialized projects
|
|
66
|
+
- Smokes cover both the failing and successful paths
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Quiver v0.15 Spec Status
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v15-init-required-before-migrate
|
|
4
|
+
**Last updated:** 2026-04-23
|
|
5
|
+
|
|
6
|
+
Slice numbering is local to this spec. The first slice is `slice-01`.
|
|
7
|
+
|
|
8
|
+
## Status
|
|
9
|
+
|
|
10
|
+
| Slice | Title | Status | PR | Estimated hours | Actual hours |
|
|
11
|
+
|-------|-------|--------|----|-----------------|--------------|
|
|
12
|
+
| slice-01 | Migrate Initialization Precondition | Completed | - | 3 | 2 |
|
|
13
|
+
| slice-02 | Doctor Not-Initialized Guidance | Completed | - | 2 | 1 |
|
|
14
|
+
| slice-03 | Docs and Smokes for Init Before Migrate | Completed | - | 3 | 1 |
|
|
15
|
+
|
|
16
|
+
## Progress
|
|
17
|
+
|
|
18
|
+
- Completed slices: 3 / 3
|
|
19
|
+
- Estimated hours: 8
|
|
20
|
+
- Actual hours: 4
|
|
21
|
+
|
|
22
|
+
## Blockers
|
|
23
|
+
|
|
24
|
+
| Slice | Blocker | Since | Action needed |
|
|
25
|
+
|-------|---------|-------|---------------|
|
|
26
|
+
| - | - | - | - |
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-01-migrate-initialization-precondition",
|
|
3
|
+
"ticket": "QUIVER-01",
|
|
4
|
+
"type": "feature",
|
|
5
|
+
"title": "Migrate Initialization Precondition",
|
|
6
|
+
"objective": "Block `migrate` unless the target project was previously initialized by Quiver.",
|
|
7
|
+
"description": "Today `migrate` can create Quiver docs in a repo that never ran `create-quiver --name ...`, which makes migration act like an undocumented bootstrap path. This slice adds a hard precondition based on Quiver initialization evidence and makes the failure non-destructive while preserving migration for legacy Quiver projects.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "init-before-migrate-precondition",
|
|
12
|
+
"branch_name": "feature/QUIVER-01-init-before-migrate-precondition"
|
|
13
|
+
},
|
|
14
|
+
"must": [
|
|
15
|
+
"Teach `runMigrate()` to fail before any filesystem writes when the project has no durable evidence of a prior Quiver initialization",
|
|
16
|
+
"The precondition must accept either initialized state metadata or strong legacy Quiver markers from previously generated projects",
|
|
17
|
+
"The error must tell the developer to run `npx create-quiver --name \"Project Name\"`",
|
|
18
|
+
"The failure path must not create `docs/`, `docs-template/`, or `.quiver/`"
|
|
19
|
+
],
|
|
20
|
+
"not_included": [
|
|
21
|
+
"Changing `doctor` guidance",
|
|
22
|
+
"Updating README or generated docs",
|
|
23
|
+
"Adding repair or force flags"
|
|
24
|
+
],
|
|
25
|
+
"acceptance": [
|
|
26
|
+
"Running `npx create-quiver migrate` in a repo without Quiver initialization evidence exits non-zero",
|
|
27
|
+
"Running `npx create-quiver migrate` in a repo with malformed or incomplete Quiver state and no legacy Quiver markers exits non-zero",
|
|
28
|
+
"The failure message includes `npx create-quiver --name \"Project Name\"`",
|
|
29
|
+
"A previously initialized project can still migrate successfully",
|
|
30
|
+
"A legacy Quiver project missing `.quiver/state.json` can still migrate successfully",
|
|
31
|
+
"The failing path does not create Quiver docs or template directories"
|
|
32
|
+
],
|
|
33
|
+
"files": [
|
|
34
|
+
"src/create-quiver/index.js",
|
|
35
|
+
"src/create-quiver/lib/state.js",
|
|
36
|
+
"scripts/ci/smoke-create-quiver.sh",
|
|
37
|
+
"specs/quiver-v15-init-required-before-migrate/SPEC.md",
|
|
38
|
+
"specs/quiver-v15-init-required-before-migrate/STATUS.md",
|
|
39
|
+
"specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md",
|
|
40
|
+
"specs/quiver-v15-init-required-before-migrate/slices/slice-01-migrate-initialization-precondition/slice.json"
|
|
41
|
+
],
|
|
42
|
+
"tests": [
|
|
43
|
+
"node -c src/create-quiver/index.js",
|
|
44
|
+
"node -c src/create-quiver/lib/state.js",
|
|
45
|
+
"bash scripts/ci/smoke-create-quiver.sh",
|
|
46
|
+
"git diff --check"
|
|
47
|
+
],
|
|
48
|
+
"documentation": [
|
|
49
|
+
"specs/quiver-v15-init-required-before-migrate/SPEC.md",
|
|
50
|
+
"specs/quiver-v15-init-required-before-migrate/STATUS.md",
|
|
51
|
+
"specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md"
|
|
52
|
+
],
|
|
53
|
+
"dependencies": [],
|
|
54
|
+
"assumptions": [
|
|
55
|
+
"A combination of state metadata and generated Quiver markers is enough to distinguish legacy Quiver repos from unrelated repos",
|
|
56
|
+
"Blocking before writes is more important than preserving the current bootstrap-like behavior"
|
|
57
|
+
],
|
|
58
|
+
"estimated_hours": 3,
|
|
59
|
+
"actual_hours": 2,
|
|
60
|
+
"status": "completed",
|
|
61
|
+
"blocked_reason": null,
|
|
62
|
+
"ready_at": null,
|
|
63
|
+
"started_at": "2026-04-23",
|
|
64
|
+
"completed_at": "2026-04-23"
|
|
65
|
+
}
|