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.
Files changed (83) hide show
  1. package/.claude/settings.local.json +45 -0
  2. package/.github/workflows/ci.yml +2 -2
  3. package/BACKLOG.md +139 -0
  4. package/CHANGELOG.md +13 -1
  5. package/README.md +31 -1
  6. package/README_FOR_AI.md +25 -13
  7. package/ROADMAP.md +28 -6
  8. package/docs/AI_ONBOARDING_PROMPT.md.template +4 -0
  9. package/docs/COMMANDS.md.template +25 -0
  10. package/docs/INDEX.md.template +2 -0
  11. package/docs/SUPPORT_MATRIX.md.template +9 -0
  12. package/docs/WORKFLOW.md.template +4 -0
  13. package/docs/examples/graph.md.template +62 -0
  14. package/docs/examples/next.md.template +27 -0
  15. package/docs/examples/plan.md.template +28 -0
  16. package/package.json +5 -2
  17. package/package.template.json +8 -3
  18. package/scripts/check-slice-readiness.sh +6 -4
  19. package/scripts/init-docs.sh +57 -9
  20. package/specs/[project-name]/HANDOFF.md.template +37 -0
  21. package/specs/[project-name]/slices/slice-template/slice.json +5 -0
  22. package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-01-project-scan-command/slice.json +1 -1
  23. package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-02-ai-onboarding-prompt/slice.json +1 -1
  24. package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-03-doctor-readme-adoption-flow/slice.json +1 -1
  25. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-01-cross-platform-support-contract/slice.json +1 -1
  26. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-02-node-init-docs-runtime/slice.json +1 -1
  27. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-03-node-migrate-analyze-doctor-flow/slice.json +1 -1
  28. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-04-node-slice-lifecycle-commands/slice.json +1 -1
  29. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-05-generated-project-scripts-and-migration/slice.json +1 -1
  30. package/specs/quiver-v13-token-efficient-ai-context/EVIDENCE_REPORT.md +1 -1
  31. package/specs/quiver-v13-token-efficient-ai-context/SPEC.md +1 -1
  32. package/specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md +26 -0
  33. package/specs/quiver-v15-init-required-before-migrate/SPEC.md +66 -0
  34. package/specs/quiver-v15-init-required-before-migrate/STATUS.md +26 -0
  35. package/specs/quiver-v15-init-required-before-migrate/slices/slice-01-migrate-initialization-precondition/slice.json +65 -0
  36. package/specs/quiver-v15-init-required-before-migrate/slices/slice-02-doctor-not-initialized-guidance/slice.json +61 -0
  37. package/specs/quiver-v15-init-required-before-migrate/slices/slice-03-docs-smokes-init-before-migrate/slice.json +64 -0
  38. package/specs/quiver-v16-handoff-contract/EVIDENCE_REPORT.md +26 -0
  39. package/specs/quiver-v16-handoff-contract/SPEC.md +68 -0
  40. package/specs/quiver-v16-handoff-contract/STATUS.md +26 -0
  41. package/specs/quiver-v16-handoff-contract/slices/slice-01-handoff-template-and-contract/slice.json +66 -0
  42. package/specs/quiver-v16-handoff-contract/slices/slice-02-check-handoff-command/slice.json +70 -0
  43. package/specs/quiver-v16-handoff-contract/slices/slice-03-handoff-scaffold-optional/slice.json +67 -0
  44. package/specs/quiver-v17-orchestration-foundation/EVIDENCE_REPORT.md +32 -0
  45. package/specs/quiver-v17-orchestration-foundation/SPEC.md +79 -0
  46. package/specs/quiver-v17-orchestration-foundation/STATUS.md +31 -0
  47. package/specs/quiver-v17-orchestration-foundation/slices/slice-01-ci-matrix-verified/slice.json +68 -0
  48. package/specs/quiver-v17-orchestration-foundation/slices/slice-02-slice-graph-library/slice.json +65 -0
  49. package/specs/quiver-v17-orchestration-foundation/slices/slice-03-depends-on-validation/slice.json +72 -0
  50. package/specs/quiver-v18-slice-orchestration/EVIDENCE_REPORT.md +38 -0
  51. package/specs/quiver-v18-slice-orchestration/SPEC.md +91 -0
  52. package/specs/quiver-v18-slice-orchestration/STATUS.md +33 -0
  53. package/specs/quiver-v18-slice-orchestration/slices/slice-01-plan-command/slice.json +79 -0
  54. package/specs/quiver-v18-slice-orchestration/slices/slice-02-graph-mvp-tree/slice.json +75 -0
  55. package/specs/quiver-v18-slice-orchestration/slices/slice-03-graph-extended-formats/slice.json +70 -0
  56. package/specs/quiver-v18-slice-orchestration/slices/slice-04-next-command/slice.json +73 -0
  57. package/specs/quiver-v18-stabilization/EVIDENCE_REPORT.md +26 -0
  58. package/specs/quiver-v18-stabilization/SPEC.md +62 -0
  59. package/specs/quiver-v18-stabilization/STATUS.md +30 -0
  60. package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/CLOSURE_BRIEF.md +29 -0
  61. package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/EXECUTION_BRIEF.md +134 -0
  62. package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/slice.json +56 -0
  63. package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/CLOSURE_BRIEF.md +29 -0
  64. package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/EXECUTION_BRIEF.md +118 -0
  65. package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/slice.json +57 -0
  66. package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/CLOSURE_BRIEF.md +23 -0
  67. package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/EXECUTION_BRIEF.md +73 -0
  68. package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/slice.json +49 -0
  69. package/src/create-quiver/commands/graph.js +97 -0
  70. package/src/create-quiver/commands/next.js +134 -0
  71. package/src/create-quiver/commands/plan.js +205 -0
  72. package/src/create-quiver/index.js +179 -2
  73. package/src/create-quiver/lib/handoff.js +104 -0
  74. package/src/create-quiver/lib/init-docs.js +71 -13
  75. package/src/create-quiver/lib/json.js +14 -0
  76. package/src/create-quiver/lib/lifecycle.js +3 -2
  77. package/src/create-quiver/lib/readiness.js +55 -1
  78. package/src/create-quiver/lib/renderers/dot.js +129 -0
  79. package/src/create-quiver/lib/renderers/mermaid.js +119 -0
  80. package/src/create-quiver/lib/renderers/tree.js +116 -0
  81. package/src/create-quiver/lib/slice-graph.js +453 -0
  82. package/src/create-quiver/lib/slice.js +2 -1
  83. 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.7.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": "./bin/create-quiver.js"
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",
@@ -2,17 +2,22 @@
2
2
  "name": "quiver-docs-template",
3
3
  "private": true,
4
4
  "scripts": {
5
- "quiver:migrate": "npx create-quiver migrate",
6
- "quiver:analyze": "npx create-quiver analyze",
7
- "quiver:doctor": "npx create-quiver doctor",
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 = JSON.parse(fs.readFileSync(slicePath, 'utf8'));
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 = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
206
+ const json = parseJsonWithComments(fs.readFileSync(fullPath, 'utf8'));
205
207
  const branchName = json.git?.branch_name;
206
208
  if (!branchName) {
207
209
  continue;
@@ -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
- npx create-quiver analyze
492
- npx create-quiver doctor
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
- npx create-quiver analyze
533
- npx create-quiver doctor
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. Start work with \`npx create-quiver start-slice <slice.json>\` or \`npm run quiver:start-slice -- <slice.json>\`.
568
- 4. Make one commit per slice.
569
- 5. Open one PR per spec.
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
- - [ ] npx create-quiver analyze completes
575
- - [ ] npx create-quiver doctor completes
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"
@@ -65,7 +65,7 @@
65
65
  ],
66
66
  "estimated_hours": 4,
67
67
  "actual_hours": 0,
68
- "status": "draft",
68
+ "status": "completed",
69
69
  "blocked_reason": null,
70
70
  "ready_at": null,
71
71
  "started_at": null,
@@ -74,7 +74,7 @@
74
74
  ],
75
75
  "estimated_hours": 3,
76
76
  "actual_hours": 0,
77
- "status": "draft",
77
+ "status": "completed",
78
78
  "blocked_reason": null,
79
79
  "ready_at": null,
80
80
  "started_at": null,
@@ -68,7 +68,7 @@
68
68
  ],
69
69
  "estimated_hours": 2,
70
70
  "actual_hours": 0,
71
- "status": "draft",
71
+ "status": "completed",
72
72
  "blocked_reason": null,
73
73
  "ready_at": null,
74
74
  "started_at": null,
@@ -61,7 +61,7 @@
61
61
  ],
62
62
  "estimated_hours": 3,
63
63
  "actual_hours": null,
64
- "status": "draft",
64
+ "status": "completed",
65
65
  "blocked_reason": null,
66
66
  "ready_at": null,
67
67
  "started_at": null,
@@ -68,7 +68,7 @@
68
68
  ],
69
69
  "estimated_hours": 8,
70
70
  "actual_hours": null,
71
- "status": "draft",
71
+ "status": "completed",
72
72
  "blocked_reason": null,
73
73
  "ready_at": null,
74
74
  "started_at": null,
@@ -66,7 +66,7 @@
66
66
  ],
67
67
  "estimated_hours": 5,
68
68
  "actual_hours": null,
69
- "status": "draft",
69
+ "status": "completed",
70
70
  "blocked_reason": null,
71
71
  "ready_at": null,
72
72
  "started_at": null,
@@ -73,7 +73,7 @@
73
73
  ],
74
74
  "estimated_hours": 10,
75
75
  "actual_hours": null,
76
- "status": "draft",
76
+ "status": "completed",
77
77
  "blocked_reason": null,
78
78
  "ready_at": null,
79
79
  "started_at": null,
@@ -70,7 +70,7 @@
70
70
  ],
71
71
  "estimated_hours": 5,
72
72
  "actual_hours": null,
73
- "status": "draft",
73
+ "status": "completed",
74
74
  "blocked_reason": null,
75
75
  "ready_at": null,
76
76
  "started_at": null,
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Spec:** quiver-v13-token-efficient-ai-context
4
4
  **Date:** 2026-04-23
5
- **Status:** Draft
5
+ **Status:** Completed
6
6
 
7
7
  ## Summary
8
8
 
@@ -1,7 +1,7 @@
1
1
  # Quiver v0.13 - Token-Efficient AI Context
2
2
 
3
3
  **Date:** 2026-04-23
4
- **Status:** Draft
4
+ **Status:** Completed
5
5
 
6
6
  Slice numbering resets here: this spec starts at `slice-01` and does not continue any previous spec's numbering.
7
7
 
@@ -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
+ }