create-quiver 0.6.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 (120) hide show
  1. package/.claude/settings.local.json +45 -0
  2. package/.github/workflows/ci.yml +9 -32
  3. package/AGENTS.md.template +41 -0
  4. package/BACKLOG.md +139 -0
  5. package/CHANGELOG.md +17 -0
  6. package/README.md +68 -14
  7. package/README_FOR_AI.md +48 -16
  8. package/ROADMAP.md +100 -0
  9. package/docs/AI_CONTEXT.md.template +19 -26
  10. package/docs/AI_ONBOARDING_PROMPT.md.template +16 -0
  11. package/docs/COMMANDS.md.template +25 -0
  12. package/docs/CONTEXTO.md.template +4 -17
  13. package/docs/DECISIONS.md.template +18 -0
  14. package/docs/DEEP.md.template +34 -0
  15. package/docs/DOCUMENTATION_GUIDE.md.template +9 -7
  16. package/docs/GITFLOW_PR_GUIDE.md.template +7 -0
  17. package/docs/INDEX.md.template +11 -0
  18. package/docs/QUICK.md.template +27 -0
  19. package/docs/STANDARD.md.template +49 -0
  20. package/docs/STATUS.md.template +2 -2
  21. package/docs/SUPPORT_MATRIX.md.template +16 -4
  22. package/docs/TESTING_GUIDE_FOR_AI.md.template +4 -3
  23. package/docs/TROUBLESHOOTING.md.template +14 -0
  24. package/docs/WORKFLOW.md.template +21 -4
  25. package/docs/examples/graph.md.template +62 -0
  26. package/docs/examples/next.md.template +27 -0
  27. package/docs/examples/plan.md.template +28 -0
  28. package/package.json +6 -2
  29. package/package.template.json +16 -0
  30. package/scripts/check-slice-readiness.sh +6 -4
  31. package/scripts/cleanup-slice.sh +2 -172
  32. package/scripts/init-docs.sh +147 -26
  33. package/scripts/package-quiver.sh +5 -0
  34. package/scripts/start-slice.sh +3 -425
  35. package/specs/[project-name]/EVIDENCE_REPORT.md.template +3 -1
  36. package/specs/[project-name]/HANDOFF.md.template +37 -0
  37. package/specs/[project-name]/slices/slice-template/slice.json +7 -2
  38. package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-01-project-scan-command/slice.json +1 -1
  39. package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-02-ai-onboarding-prompt/slice.json +1 -1
  40. package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-03-doctor-readme-adoption-flow/slice.json +1 -1
  41. package/specs/quiver-v12-cross-platform-native-runtime/EVIDENCE_REPORT.md +30 -0
  42. package/specs/quiver-v12-cross-platform-native-runtime/SPEC.md +86 -0
  43. package/specs/quiver-v12-cross-platform-native-runtime/STATUS.md +29 -0
  44. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-01-cross-platform-support-contract/slice.json +69 -0
  45. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-02-node-init-docs-runtime/slice.json +76 -0
  46. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-03-node-migrate-analyze-doctor-flow/slice.json +74 -0
  47. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-04-node-slice-lifecycle-commands/slice.json +81 -0
  48. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-05-generated-project-scripts-and-migration/slice.json +78 -0
  49. package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-06-cross-platform-ci-release-readiness/slice.json +74 -0
  50. package/specs/quiver-v13-token-efficient-ai-context/EVIDENCE_REPORT.md +28 -0
  51. package/specs/quiver-v13-token-efficient-ai-context/SPEC.md +68 -0
  52. package/specs/quiver-v13-token-efficient-ai-context/STATUS.md +26 -0
  53. package/specs/quiver-v13-token-efficient-ai-context/slices/slice-01-token-efficient-ai-modes-guidance/slice.json +65 -0
  54. package/specs/quiver-v13-token-efficient-ai-context/slices/slice-02-decision-log-context-checkpoint/slice.json +64 -0
  55. package/specs/quiver-v13-token-efficient-ai-context/slices/slice-03-project-map-reading-order/slice.json +66 -0
  56. package/specs/quiver-v14-tiered-context-pack/EVIDENCE_REPORT.md +42 -0
  57. package/specs/quiver-v14-tiered-context-pack/SPEC.md +116 -0
  58. package/specs/quiver-v14-tiered-context-pack/STATUS.md +35 -0
  59. package/specs/quiver-v14-tiered-context-pack/slices/slice-01-tiered-context-pack/slice.json +77 -0
  60. package/specs/quiver-v14-tiered-context-pack/slices/slice-02-agents-md-router/slice.json +74 -0
  61. package/specs/quiver-v14-tiered-context-pack/slices/slice-03-active-slice-lifecycle/slice.json +74 -0
  62. package/specs/quiver-v14-tiered-context-pack/slices/slice-04-dedup-frontmatter/slice.json +83 -0
  63. package/specs/quiver-v14-tiered-context-pack/slices/slice-05-doctor-smokes-tiered-pack/slice.json +84 -0
  64. package/specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md +26 -0
  65. package/specs/quiver-v15-init-required-before-migrate/SPEC.md +66 -0
  66. package/specs/quiver-v15-init-required-before-migrate/STATUS.md +26 -0
  67. package/specs/quiver-v15-init-required-before-migrate/slices/slice-01-migrate-initialization-precondition/slice.json +65 -0
  68. package/specs/quiver-v15-init-required-before-migrate/slices/slice-02-doctor-not-initialized-guidance/slice.json +61 -0
  69. package/specs/quiver-v15-init-required-before-migrate/slices/slice-03-docs-smokes-init-before-migrate/slice.json +64 -0
  70. package/specs/quiver-v16-handoff-contract/EVIDENCE_REPORT.md +26 -0
  71. package/specs/quiver-v16-handoff-contract/SPEC.md +68 -0
  72. package/specs/quiver-v16-handoff-contract/STATUS.md +26 -0
  73. package/specs/quiver-v16-handoff-contract/slices/slice-01-handoff-template-and-contract/slice.json +66 -0
  74. package/specs/quiver-v16-handoff-contract/slices/slice-02-check-handoff-command/slice.json +70 -0
  75. package/specs/quiver-v16-handoff-contract/slices/slice-03-handoff-scaffold-optional/slice.json +67 -0
  76. package/specs/quiver-v17-orchestration-foundation/EVIDENCE_REPORT.md +32 -0
  77. package/specs/quiver-v17-orchestration-foundation/SPEC.md +79 -0
  78. package/specs/quiver-v17-orchestration-foundation/STATUS.md +31 -0
  79. package/specs/quiver-v17-orchestration-foundation/slices/slice-01-ci-matrix-verified/slice.json +68 -0
  80. package/specs/quiver-v17-orchestration-foundation/slices/slice-02-slice-graph-library/slice.json +65 -0
  81. package/specs/quiver-v17-orchestration-foundation/slices/slice-03-depends-on-validation/slice.json +72 -0
  82. package/specs/quiver-v18-slice-orchestration/EVIDENCE_REPORT.md +38 -0
  83. package/specs/quiver-v18-slice-orchestration/SPEC.md +91 -0
  84. package/specs/quiver-v18-slice-orchestration/STATUS.md +33 -0
  85. package/specs/quiver-v18-slice-orchestration/slices/slice-01-plan-command/slice.json +79 -0
  86. package/specs/quiver-v18-slice-orchestration/slices/slice-02-graph-mvp-tree/slice.json +75 -0
  87. package/specs/quiver-v18-slice-orchestration/slices/slice-03-graph-extended-formats/slice.json +70 -0
  88. package/specs/quiver-v18-slice-orchestration/slices/slice-04-next-command/slice.json +73 -0
  89. package/specs/quiver-v18-stabilization/EVIDENCE_REPORT.md +26 -0
  90. package/specs/quiver-v18-stabilization/SPEC.md +62 -0
  91. package/specs/quiver-v18-stabilization/STATUS.md +30 -0
  92. package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/CLOSURE_BRIEF.md +29 -0
  93. package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/EXECUTION_BRIEF.md +134 -0
  94. package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/slice.json +56 -0
  95. package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/CLOSURE_BRIEF.md +29 -0
  96. package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/EXECUTION_BRIEF.md +118 -0
  97. package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/slice.json +57 -0
  98. package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/CLOSURE_BRIEF.md +23 -0
  99. package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/EXECUTION_BRIEF.md +73 -0
  100. package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/slice.json +49 -0
  101. package/src/create-quiver/commands/graph.js +97 -0
  102. package/src/create-quiver/commands/next.js +134 -0
  103. package/src/create-quiver/commands/plan.js +205 -0
  104. package/src/create-quiver/index.js +476 -123
  105. package/src/create-quiver/lib/analyze.js +9 -0
  106. package/src/create-quiver/lib/doctor.js +212 -0
  107. package/src/create-quiver/lib/git.js +154 -0
  108. package/src/create-quiver/lib/handoff.js +104 -0
  109. package/src/create-quiver/lib/init-docs.js +674 -0
  110. package/src/create-quiver/lib/json.js +14 -0
  111. package/src/create-quiver/lib/lifecycle.js +479 -0
  112. package/src/create-quiver/lib/paths.js +19 -0
  113. package/src/create-quiver/lib/readiness.js +354 -0
  114. package/src/create-quiver/lib/renderers/dot.js +129 -0
  115. package/src/create-quiver/lib/renderers/mermaid.js +119 -0
  116. package/src/create-quiver/lib/renderers/tree.js +116 -0
  117. package/src/create-quiver/lib/scope.js +5 -0
  118. package/src/create-quiver/lib/slice-graph.js +453 -0
  119. package/src/create-quiver/lib/slice.js +195 -0
  120. package/src/create-quiver/lib/state.js +139 -0
@@ -0,0 +1,33 @@
1
+ # Quiver v0.18 Spec Status
2
+
3
+ **Spec:** quiver-v18-slice-orchestration
4
+ **Last updated:** 2026-04-24
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 | `quiver:plan` Command | Completed | https://github.com/FabriJuncal/quiver/pull/49 | 5 | 5 |
13
+ | slice-02 | `quiver:graph` MVP Tree | Completed | https://github.com/FabriJuncal/quiver/pull/50 | 4 | 4 |
14
+ | slice-03 | `quiver:graph` Extended Formats | Completed | https://github.com/FabriJuncal/quiver/pull/51 | 2 | 2 |
15
+ | slice-04 | `quiver:next` Command | Completed | https://github.com/FabriJuncal/quiver/pull/52 | 3 | 4 |
16
+
17
+ ## Progress
18
+
19
+ - Completed slices: 4 / 4
20
+ - Estimated hours: 14
21
+ - Actual hours: 15
22
+
23
+ ## Blockers
24
+
25
+ | Slice | Blocker | Since | Action needed |
26
+ |-------|---------|-------|---------------|
27
+ | - | - | - | - |
28
+
29
+ ## Dependencies
30
+
31
+ - All slices depend on `quiver-v17-orchestration-foundation/slice-02-slice-graph-library`
32
+ - slice-03 depends on slice-02 (extends graph output with new formats)
33
+ - slice-04 depends on slice-01 (reuses plan ordering for "next")
@@ -0,0 +1,79 @@
1
+ {
2
+ "slice_id": "slice-01-plan-command",
3
+ "ticket": "QUIVER-01",
4
+ "type": "feat",
5
+ "title": "`quiver:plan` Command",
6
+ "objective": "Ship `npx create-quiver plan` and `quiver:plan` that print the sequential execution order of all pending slices, the critical path, and the total hours, with `--json` for tooling integration.",
7
+ "description": "The plan command answers \"what do I work on next, and in what order?\" across every spec in the repo. It reads all `slice.json` files, drops completed and skipped slices, builds the dependency graph using the v17 library, topologically sorts the remaining nodes, and prints the result. The command is read-only, deterministic, and cross-platform.",
8
+ "git": {
9
+ "branch_type": "feature",
10
+ "base_branch": "main",
11
+ "branch_slug": "plan-command",
12
+ "branch_name": "feature/QUIVER-01-plan-command"
13
+ },
14
+ "must": [
15
+ "Create `src/create-quiver/commands/plan.js` that wires up `readAllSlices`, `inferDependencies`, `buildGraph`, and `topoSort` from the v17 library",
16
+ "Implement critical path detection by walking the longest-hours chain in the DAG",
17
+ "Implement `--spec <slug>`, `--only-ready`, and `--json` flags",
18
+ "Register `plan` in `bin/create-quiver.js` and add `quiver:plan` to `package.json`",
19
+ "Print human output with ASCII by default, Unicode only when `process.env.LANG` includes `UTF-8` or `--unicode` is passed",
20
+ "Respect `NO_COLOR` and `!isTTY` when deciding whether to emit colors",
21
+ "Create `docs/examples/plan.md` with input and representative output",
22
+ "Add a `COMMANDS.md` row for plan",
23
+ "Update `README.md` npm scripts list and `README_FOR_AI.md` reading order if relevant",
24
+ "Add a `CHANGELOG.md` entry"
25
+ ],
26
+ "not_included": [
27
+ "Auto-starting slices (handled by `next --auto-start`)",
28
+ "Rendering a graph tree (handled in slice-02)",
29
+ "Status dashboards (handled in v19)"
30
+ ],
31
+ "acceptance": [
32
+ "`npx create-quiver plan` returns exit 0 and prints a non-empty plan in the Quiver repo",
33
+ "`npx create-quiver plan --json` produces valid JSON with `plan`, `critical_path`, and `total_hours` fields",
34
+ "`npx create-quiver plan --only-ready` returns only slices with no pending predecessors",
35
+ "`npx create-quiver plan --spec quiver-v14-tiered-context-pack` returns only that spec's slices",
36
+ "Introducing a cycle in a test fixture causes exit code 1 with a message naming the cycle",
37
+ "Running under `CI=true TERM=dumb NO_COLOR=1` produces ASCII output without color codes",
38
+ "`docs/examples/plan.md` exists with a real example block",
39
+ "`docs/COMMANDS.md` has a row naming `plan` with OS support listed"
40
+ ],
41
+ "files": [
42
+ "src/create-quiver/commands/plan.js",
43
+ "bin/create-quiver.js",
44
+ "package.json",
45
+ "docs/examples/plan.md",
46
+ "docs/COMMANDS.md",
47
+ "README.md",
48
+ "README_FOR_AI.md",
49
+ "CHANGELOG.md",
50
+ "tests/commands/plan.test.js",
51
+ "specs/quiver-v18-slice-orchestration/slices/slice-01-plan-command/slice.json"
52
+ ],
53
+ "tests": [
54
+ "node --test tests/commands/plan.test.js",
55
+ "node bin/create-quiver.js plan --json > /tmp/quiver-plan.json",
56
+ "node -e \"const p=require('/tmp/quiver-plan.json'); if(!Array.isArray(p.plan)||typeof p.total_hours!=='number') process.exit(1)\"",
57
+ "git diff --check"
58
+ ],
59
+ "documentation": [
60
+ "docs/examples/plan.md",
61
+ "docs/COMMANDS.md",
62
+ "README.md",
63
+ "README_FOR_AI.md",
64
+ "CHANGELOG.md"
65
+ ],
66
+ "dependencies": ["quiver-v17-orchestration-foundation/slice-02-slice-graph-library"],
67
+ "assumptions": [
68
+ "`readAllSlices` is fast enough to run on every invocation without caching",
69
+ "A single critical-path metric (longest hours chain) is sufficient for now",
70
+ "Humans reading the default output prefer ASCII over Unicode box-drawing by default"
71
+ ],
72
+ "estimated_hours": 5,
73
+ "actual_hours": 5,
74
+ "status": "completed",
75
+ "blocked_reason": null,
76
+ "ready_at": null,
77
+ "started_at": null,
78
+ "completed_at": null
79
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "slice_id": "slice-02-graph-mvp-tree",
3
+ "ticket": "QUIVER-02",
4
+ "type": "feat",
5
+ "title": "`quiver:graph` MVP Tree",
6
+ "objective": "Ship `npx create-quiver graph --format tree` and `quiver:graph` that print the dependency tree of pending slices, grouped by parallel level, with optional `--show-conflicts` and `--level <n>` flags.",
7
+ "description": "Given the library returns levels and conflict groups, this slice focuses on rendering a readable ASCII tree that makes parallel-safe lots obvious. Mermaid and DOT formats are deferred to slice-03; the MVP keeps the surface small. Conflict markers use `⚠` with UTF-8 locale and a plain `!` as fallback.",
8
+ "git": {
9
+ "branch_type": "feature",
10
+ "base_branch": "main",
11
+ "branch_slug": "graph-mvp-tree",
12
+ "branch_name": "feature/QUIVER-02-graph-mvp-tree"
13
+ },
14
+ "must": [
15
+ "Create `src/create-quiver/commands/graph.js` with a `--format tree` default",
16
+ "Render one section per topological level, with slices that can run in parallel listed together",
17
+ "Mark file conflicts between same-level slices with a conflict symbol and a brief list of shared paths when `--show-conflicts` is set",
18
+ "Implement `--level <n>` to focus on a single level",
19
+ "Implement `--json` to emit `{ levels: Slice[][], conflicts: ConflictGroup[] }`",
20
+ "Register `graph` in `bin/create-quiver.js` and add `quiver:graph` to `package.json`",
21
+ "Create `docs/examples/graph.md` with input and representative ASCII output",
22
+ "Add a `docs/COMMANDS.md` row and update `README.md` npm scripts list",
23
+ "Add a `CHANGELOG.md` entry"
24
+ ],
25
+ "not_included": [
26
+ "Mermaid and DOT formats (handled in slice-03)",
27
+ "Editing or starting any slice (read-only)",
28
+ "Rendering file contents; only slice IDs, titles, hours, and shared paths"
29
+ ],
30
+ "acceptance": [
31
+ "`npx create-quiver graph` prints a tree grouped by level with counts of parallel lots",
32
+ "`npx create-quiver graph --show-conflicts` marks slices that intersect on `files[]`",
33
+ "`npx create-quiver graph --level 0` prints only the first level",
34
+ "`npx create-quiver graph --json` produces valid JSON with `levels` and `conflicts` arrays",
35
+ "Output is ASCII by default; with `LANG=en_US.UTF-8` or `--unicode`, Unicode box-drawing is used",
36
+ "`docs/examples/graph.md` exists with a real example"
37
+ ],
38
+ "files": [
39
+ "src/create-quiver/commands/graph.js",
40
+ "src/create-quiver/lib/renderers/tree.js",
41
+ "bin/create-quiver.js",
42
+ "package.json",
43
+ "docs/examples/graph.md",
44
+ "docs/COMMANDS.md",
45
+ "README.md",
46
+ "CHANGELOG.md",
47
+ "tests/commands/graph.test.js",
48
+ "specs/quiver-v18-slice-orchestration/slices/slice-02-graph-mvp-tree/slice.json"
49
+ ],
50
+ "tests": [
51
+ "node --test tests/commands/graph.test.js",
52
+ "node bin/create-quiver.js graph --json > /tmp/quiver-graph.json",
53
+ "node -e \"const g=require('/tmp/quiver-graph.json'); if(!Array.isArray(g.levels)) process.exit(1)\"",
54
+ "git diff --check"
55
+ ],
56
+ "documentation": [
57
+ "docs/examples/graph.md",
58
+ "docs/COMMANDS.md",
59
+ "README.md",
60
+ "CHANGELOG.md"
61
+ ],
62
+ "dependencies": ["quiver-v17-orchestration-foundation/slice-02-slice-graph-library", "slice-01-plan-command"],
63
+ "assumptions": [
64
+ "Two slices on the same level that intersect on `files[]` are effectively serialized in practice; warning is enough, no hard block",
65
+ "ASCII tree is readable for repos with fewer than 50 pending slices; larger repos may justify paging later",
66
+ "Graphviz is not assumed to be installed"
67
+ ],
68
+ "estimated_hours": 4,
69
+ "actual_hours": 4,
70
+ "status": "completed",
71
+ "blocked_reason": null,
72
+ "ready_at": null,
73
+ "started_at": null,
74
+ "completed_at": null
75
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "slice_id": "slice-03-graph-extended-formats",
3
+ "ticket": "QUIVER-03",
4
+ "type": "feat",
5
+ "title": "`quiver:graph` Extended Formats (Mermaid, DOT)",
6
+ "objective": "Extend `quiver:graph` with `--format mermaid` and `--format dot` so dependency graphs can be pasted into GitHub markdown (Mermaid) or rendered with Graphviz (DOT) for documentation and slide decks.",
7
+ "description": "Once the ASCII tree is working, adding machine-renderable formats is cheap: both are templated serializations of the same levels and conflicts data. Mermaid is the primary target for PR descriptions; DOT unlocks Graphviz pipelines and high-resolution exports. Neither format requires external binaries to be present; Graphviz is only needed by the end user if they want to render DOT.",
8
+ "git": {
9
+ "branch_type": "feature",
10
+ "base_branch": "main",
11
+ "branch_slug": "graph-extended-formats",
12
+ "branch_name": "feature/QUIVER-03-graph-extended-formats"
13
+ },
14
+ "must": [
15
+ "Add a Mermaid renderer at `src/create-quiver/lib/renderers/mermaid.js` producing a `flowchart TD` block",
16
+ "Add a DOT renderer at `src/create-quiver/lib/renderers/dot.js` producing valid `digraph` source",
17
+ "Wire both renderers to `quiver:graph --format mermaid` and `quiver:graph --format dot`",
18
+ "Update `docs/examples/graph.md` with sample Mermaid and DOT outputs and a note about GitHub's Mermaid support",
19
+ "Add a `docs/COMMANDS.md` note covering the new formats",
20
+ "Add a `CHANGELOG.md` entry"
21
+ ],
22
+ "not_included": [
23
+ "Auto-rendering DOT to PNG (Graphviz binary not assumed)",
24
+ "Interactive web visualizer",
25
+ "Per-spec subgraphs in Mermaid (flat layout is enough for now)"
26
+ ],
27
+ "acceptance": [
28
+ "`npx create-quiver graph --format mermaid` prints a valid `flowchart TD` block starting with ```` ```mermaid ```` fence",
29
+ "Pasting the output into a GitHub markdown preview renders the graph",
30
+ "`npx create-quiver graph --format dot` prints valid DOT source starting with `digraph`",
31
+ "`echo $(node bin/create-quiver.js graph --format dot) | dot -Tsvg` produces SVG when Graphviz is installed (test runs conditionally)",
32
+ "`docs/examples/graph.md` shows both formats"
33
+ ],
34
+ "files": [
35
+ "src/create-quiver/commands/graph.js",
36
+ "src/create-quiver/lib/renderers/mermaid.js",
37
+ "src/create-quiver/lib/renderers/dot.js",
38
+ "docs/examples/graph.md",
39
+ "docs/COMMANDS.md",
40
+ "CHANGELOG.md",
41
+ "tests/lib/renderers/mermaid.test.js",
42
+ "tests/lib/renderers/dot.test.js",
43
+ "specs/quiver-v18-slice-orchestration/slices/slice-03-graph-extended-formats/slice.json"
44
+ ],
45
+ "tests": [
46
+ "node --test tests/lib/renderers/mermaid.test.js",
47
+ "node --test tests/lib/renderers/dot.test.js",
48
+ "node bin/create-quiver.js graph --format mermaid | head -n 1 | grep -q mermaid",
49
+ "node bin/create-quiver.js graph --format dot | head -n 1 | grep -q digraph",
50
+ "git diff --check"
51
+ ],
52
+ "documentation": [
53
+ "docs/examples/graph.md",
54
+ "docs/COMMANDS.md",
55
+ "CHANGELOG.md"
56
+ ],
57
+ "dependencies": ["slice-02-graph-mvp-tree"],
58
+ "assumptions": [
59
+ "GitHub continues to render Mermaid in markdown",
60
+ "DOT identifiers sanitized from slice IDs are stable enough not to collide",
61
+ "Users who want PNG/SVG have Graphviz installed locally; Quiver does not bundle it"
62
+ ],
63
+ "estimated_hours": 2,
64
+ "actual_hours": 2,
65
+ "status": "completed",
66
+ "blocked_reason": null,
67
+ "ready_at": null,
68
+ "started_at": null,
69
+ "completed_at": "2026-04-24T00:00:00Z"
70
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "slice_id": "slice-04-next-command",
3
+ "ticket": "QUIVER-04",
4
+ "type": "feat",
5
+ "title": "`quiver:next` Command",
6
+ "objective": "Ship `npx create-quiver next` and `quiver:next` as the daily entry point that answers \"what do I work on right now?\" with an optional `--auto-start` shortcut behind an interactive confirmation.",
7
+ "description": "`quiver:next` prints the top-1 ready slice by default (the first node returned by `quiver:plan --only-ready`). With `--all-ready`, it lists the whole first level. With `--auto-start`, it prompts the user to confirm and then runs `start-slice` on the suggested slice; the prompt is mandatory on TTY and the command refuses to auto-start on a non-TTY to avoid surprises in CI.",
8
+ "git": {
9
+ "branch_type": "feature",
10
+ "base_branch": "main",
11
+ "branch_slug": "next-command",
12
+ "branch_name": "feature/QUIVER-04-next-command"
13
+ },
14
+ "must": [
15
+ "Create `src/create-quiver/commands/next.js` that reuses the plan ordering",
16
+ "Default output: print the top-1 slice plus the exact `start-slice` command to copy",
17
+ "Flag `--all-ready`: list every slice at the first unblocked level",
18
+ "Flag `--auto-start`: read a `y/N` prompt on TTY, run `start-slice` on `y`, refuse on non-TTY",
19
+ "Flag `--json`: emit `{ next: Slice | null, all_ready: Slice[] }`",
20
+ "Register `next` in `bin/create-quiver.js` and add `quiver:next` to `package.json`",
21
+ "Create `docs/examples/next.md` showing both read-only and `--auto-start` flows",
22
+ "Add a `docs/COMMANDS.md` row and update `README.md` npm scripts list",
23
+ "Add a `CHANGELOG.md` entry"
24
+ ],
25
+ "not_included": [
26
+ "Silent auto-start without confirmation",
27
+ "Auto-start on non-TTY environments",
28
+ "Automatic branch merging or PR creation after the slice is started"
29
+ ],
30
+ "acceptance": [
31
+ "`npx create-quiver next` prints a single slice and the exact `start-slice` command; running it twice returns the same slice",
32
+ "`npx create-quiver next --all-ready` prints every slice in level 0",
33
+ "`npx create-quiver next --auto-start` on a TTY prompts `Start slice X? [y/N]` and only proceeds on `y`",
34
+ "`npx create-quiver next --auto-start` on a non-TTY exits non-zero with a clear message and does not start anything",
35
+ "`--json` output is valid and parseable"
36
+ ],
37
+ "files": [
38
+ "src/create-quiver/commands/next.js",
39
+ "bin/create-quiver.js",
40
+ "package.json",
41
+ "docs/examples/next.md",
42
+ "docs/COMMANDS.md",
43
+ "README.md",
44
+ "CHANGELOG.md",
45
+ "tests/commands/next.test.js",
46
+ "specs/quiver-v18-slice-orchestration/slices/slice-04-next-command/slice.json"
47
+ ],
48
+ "tests": [
49
+ "node --test tests/commands/next.test.js",
50
+ "node bin/create-quiver.js next --json > /tmp/quiver-next.json",
51
+ "node -e \"const n=require('/tmp/quiver-next.json'); if(!('next' in n)) process.exit(1)\"",
52
+ "git diff --check"
53
+ ],
54
+ "documentation": [
55
+ "docs/examples/next.md",
56
+ "docs/COMMANDS.md",
57
+ "README.md",
58
+ "CHANGELOG.md"
59
+ ],
60
+ "dependencies": ["slice-01-plan-command"],
61
+ "assumptions": [
62
+ "Users accept that `next` is a suggestion and not a commitment",
63
+ "Interactive TTY prompts are acceptable in CLI tools for destructive actions",
64
+ "`start-slice` already handles worktree creation and is idempotent enough to tolerate re-runs"
65
+ ],
66
+ "estimated_hours": 3,
67
+ "actual_hours": 4,
68
+ "status": "completed",
69
+ "blocked_reason": null,
70
+ "ready_at": null,
71
+ "started_at": "2026-04-24T00:00:00Z",
72
+ "completed_at": "2026-04-24T00:00:00Z"
73
+ }
@@ -0,0 +1,26 @@
1
+ # Quiver v0.18 Stabilization — Evidence Report
2
+
3
+ **Spec:** quiver-v18-stabilization
4
+ **Date:** 2026-05-12
5
+ **Status:** Completed
6
+
7
+ ## Summary
8
+
9
+ 3/3 slices completados. `quiver:plan` exit 0 en el propio repo, ROADMAP sin `(unreleased)`, drafts branch publicada en origin con SHA verificado.
10
+
11
+ ## Slice Evidence
12
+
13
+ | Slice | Status | Evidence |
14
+ |-------|--------|----------|
15
+ | slice-01 | Completed | PR #54 merged 2026-05-12. `node --test tests/**/*.test.js` → 32/32 pass. `node bin/create-quiver.js plan` → exit 0, 8 slices, 40h. `plan --json` → valid JSON con `plan`, `critical_path`, `total_hours`. Commit: `11c821e`. |
16
+ | slice-02 | Completed | PR #56 merged 2026-05-12. `grep 'unreleased' ROADMAP.md` → sin match. `grep 'v0.6 (shipped)' ROADMAP.md` → match. ~29 branches merged eliminados + 2 backups + 4 worktrees stale prunados. |
17
+ | slice-03 | Completed | Push directo 2026-05-12. SHA local `13eab96e4d0a9e34ba1ea1add3b969603eda255c` = SHA remoto. Sin PR (rama de referencia, no candidata a merge). |
18
+
19
+ ## Final Evidence
20
+
21
+ - `npx create-quiver plan` → exit 0, 8 slices, 40h. ✓
22
+ - `npx create-quiver plan --json` → JSON válido con `plan`, `critical_path`, `total_hours`. ✓
23
+ - `git branch | grep backup` → sin output. ✓
24
+ - `ROADMAP.md` → `v0.6 (shipped)`, sin `(unreleased)`. ✓
25
+ - `git ls-remote origin drafts/v19-v22-orchestration-followups` → `13eab96e4d0a9e34ba1ea1add3b969603eda255c`. ✓
26
+ - `node --test tests/**/*.test.js` → 32/32 pass. ✓
@@ -0,0 +1,62 @@
1
+ # Quiver v0.18 Stabilization
2
+
3
+ **Date:** 2026-05-12
4
+ **Status:** Ready
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
+ Close the three loose ends left after v18 merged: fix a crash in `slice-graph.js` that blocks the v18 validation checkpoint, clean up stale local branches and an unclosed ROADMAP entry, and publish the parked draft specs to origin once the checkpoint passes.
11
+
12
+ ## Context
13
+
14
+ v17 and v18 shipped all planned slices and closed their PRs. During the post-merge smoke test, `npx create-quiver plan` was found to crash on the Quiver repo itself with `SliceGraphError: Missing dependency reference(s)`. The root cause is a one-line normalization bug in `slice-graph.js`: slices with the legacy `"dependencies"` field using bare spec names (e.g. `"quiver-v01"`) get expanded to an invalid ref that the graph validator then rejects. The fix is minimal and non-breaking.
15
+
16
+ The remaining two slices are housekeeping: one commit to close the `v0.6 (unreleased)` entry in ROADMAP and delete stale local branches; one `git push` to publish the parked v19–v22 draft specs once the v18 human checkpoint is confirmed.
17
+
18
+ ## Scope
19
+
20
+ ### Included
21
+
22
+ - Fix `normalizeDependencyRef` in `src/create-quiver/lib/slice-graph.js` to silently drop legacy spec-name bare deps.
23
+ - Add a test case covering the legacy format.
24
+ - Close `v0.6 (unreleased)` in `ROADMAP.md`.
25
+ - Delete local stale branches (merged + backup branches).
26
+ - Publish `drafts/v19-v22-orchestration-followups` to origin (gated by human checkpoint).
27
+
28
+ ### Excluded
29
+
30
+ - Any change to the output or behavior of `plan`, `graph`, or `next` beyond the crash fix.
31
+ - Changes to slice.json schema or validation rules beyond the legacy-dep case.
32
+ - Version bump — this spec does not increment the package version.
33
+ - Any v19 work — that starts only after the checkpoint of this spec passes.
34
+
35
+ ## Slices
36
+
37
+ | Slice | Title | Status | Estimated hours |
38
+ |-------|-------|--------|-----------------|
39
+ | slice-01 | Fix legacy dependency resolution in `slice-graph.js` | Ready | 0.5 |
40
+ | slice-02 | Close v0.6 in ROADMAP and clean stale branches | Ready | 0.3 |
41
+ | [GATE] | Human checkpoint: v18 real-use validation | — | 1–2 weeks |
42
+ | slice-03 | Publish `drafts/v19-v22-orchestration-followups` to origin | Blocked by gate | 0.1 |
43
+
44
+ ## Gate — Human Checkpoint
45
+
46
+ slice-03 is blocked until the maintainer:
47
+ 1. Uses `quiver:plan`, `quiver:graph`, and `quiver:next` in at least one real work cycle.
48
+ 2. Records an observation in `specs/quiver-v18-slice-orchestration/EVIDENCE_REPORT.md`.
49
+ 3. Confirms the checkpoint explicitly before delegating slice-03.
50
+
51
+ ## Definition of Done
52
+
53
+ - `npx create-quiver plan` exits 0 on the Quiver repo.
54
+ - `npx create-quiver plan --json` returns valid JSON.
55
+ - `ROADMAP.md` no longer has `v0.6 (unreleased)`.
56
+ - `git branch` has no backup or already-merged stale branches.
57
+ - `origin/drafts/v19-v22-orchestration-followups` exists and matches local SHA.
58
+ - All existing tests pass.
59
+
60
+ ## Validation Checkpoint
61
+
62
+ This spec's checkpoint passes when all three slices are merged/executed and the human gate is confirmed. There is no usage-time requirement beyond the gate — this is stabilization, not a new feature.
@@ -0,0 +1,30 @@
1
+ # Quiver v0.18 Stabilization — Status
2
+
3
+ **Spec:** quiver-v18-stabilization
4
+ **Last updated:** 2026-05-12
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 | Fix legacy dependency resolution in `slice-graph.js` | Completed | #54 | 0.5 | 0.5 |
13
+ | slice-02 | Close v0.6 in ROADMAP and clean stale branches | Completed | #56 | 0.3 | 0.1 |
14
+ | slice-03 | Publish `drafts/v19-v22-orchestration-followups` | Completed | — | 0.1 | 0.1 |
15
+
16
+ ## Progress
17
+
18
+ - Completed slices: 3 / 3
19
+ - Estimated hours: 0.9
20
+ - Actual hours: 0.7
21
+
22
+ ## Blockers
23
+
24
+ _None — spec complete._
25
+
26
+ ## Dependencies
27
+
28
+ - slice-01 has no dependencies (can run immediately)
29
+ - slice-02 has no dependencies (can run immediately, parallel to slice-01)
30
+ - slice-03 depends on human gate confirmation — not on slice-01 or slice-02 in code, but run last
@@ -0,0 +1,29 @@
1
+ # CLOSURE BRIEF — slice-01: Fix legacy dependency resolution
2
+
3
+ **Spec:** quiver-v18-stabilization
4
+ **Slice:** slice-01-fix-legacy-dependency-resolution
5
+
6
+ ---
7
+
8
+ ## Checklist antes de abrir el PR
9
+
10
+ - [ ] `node --test tests/` → exit 0, sin tests en rojo.
11
+ - [ ] `node bin/create-quiver.js plan` → exit 0, imprime el plan del repo.
12
+ - [ ] `node bin/create-quiver.js plan --json` → JSON válido con `plan`, `critical_path`, `total_hours`.
13
+ - [ ] `git diff --stat` muestra exactamente dos archivos: `src/create-quiver/lib/slice-graph.js` y el archivo de test.
14
+ - [ ] El test nuevo cubre: (a) legacy bare dep no tira error, (b) nuevo formato `depends_on` sigue funcionando.
15
+ - [ ] El commit tiene un mensaje que explica el *por qué* (ver EXECUTION_BRIEF).
16
+
17
+ ## Checklist del PR
18
+
19
+ - [ ] Branch: `bugfix/QUIVER-01-fix-legacy-dependency-resolution` → `main`.
20
+ - [ ] Título del PR: `bugfix(QUIVER-01): ignore legacy bare spec deps in normalizeDependencyRef`.
21
+ - [ ] Body del PR sigue las secciones del `docs/GITFLOW_PR_GUIDE.md.template`: Title, Summary, Scope, Files, How to Test, Evidence, Rollback, Risks / Notes.
22
+ - [ ] En "Evidence": incluir la salida de `npx create-quiver plan` (primeras líneas) y `npx create-quiver plan --json | head`.
23
+ - [ ] En "Rollback": `git revert HEAD --no-edit` es suficiente.
24
+ - [ ] En "Risks / Notes": mencionar que el drop silencioso es intencional y que los slices legacy ya están completados.
25
+
26
+ ## Post-merge
27
+
28
+ - [ ] Actualizar `specs/quiver-v18-stabilization/STATUS.md`: slice-01 → `Completed`, agregar número de PR y `actual_hours`.
29
+ - [ ] Actualizar `specs/quiver-v18-stabilization/EVIDENCE_REPORT.md`: registrar evidencia del slice.
@@ -0,0 +1,134 @@
1
+ # EXECUTION BRIEF — slice-01: Fix legacy dependency resolution
2
+
3
+ **Spec:** quiver-v18-stabilization
4
+ **Slice:** slice-01-fix-legacy-dependency-resolution
5
+ **Estimated time:** 30 min
6
+ **Branch:** `bugfix/QUIVER-01-fix-legacy-dependency-resolution` from `main`
7
+
8
+ ---
9
+
10
+ ## Contexto
11
+
12
+ `npx create-quiver plan` crashea en el repo de Quiver con:
13
+
14
+ ```
15
+ SliceGraphError: Missing dependency reference(s):
16
+ quiver-v02-bootstrap-hardening/slice-01-path-remote-safety -> quiver-v02-bootstrap-hardening/quiver-v01
17
+ ```
18
+
19
+ **Causa:** `normalizeDependencyRef` en `src/create-quiver/lib/slice-graph.js` (línea ~65) toma el valor bare `"quiver-v01"` del campo legacy `"dependencies"`, no encuentra `/`, y devuelve `"quiver-v02-bootstrap-hardening/quiver-v01"`. Ese ref no existe en el mapa de slices → `buildGraph` tira error.
20
+
21
+ ---
22
+
23
+ ## El único archivo que tocás
24
+
25
+ ```
26
+ src/create-quiver/lib/slice-graph.js
27
+ ```
28
+
29
+ ---
30
+
31
+ ## Cambio exacto
32
+
33
+ Localizá la función `normalizeDependencyRef`. Actualmente luce así:
34
+
35
+ ```js
36
+ function normalizeDependencyRef(slice, dependency) {
37
+ const dep = String(dependency || '').trim();
38
+ if (!dep) {
39
+ return null;
40
+ }
41
+
42
+ if (dep.includes('/')) {
43
+ return dep;
44
+ }
45
+
46
+ if (!slice || !slice.specSlug) {
47
+ return dep;
48
+ }
49
+
50
+ return `${slice.specSlug}/${dep}`;
51
+ }
52
+ ```
53
+
54
+ Agregá una sola guarda antes del `return` final:
55
+
56
+ ```js
57
+ function normalizeDependencyRef(slice, dependency) {
58
+ const dep = String(dependency || '').trim();
59
+ if (!dep) {
60
+ return null;
61
+ }
62
+
63
+ if (dep.includes('/')) {
64
+ return dep;
65
+ }
66
+
67
+ if (!slice || !slice.specSlug) {
68
+ return dep;
69
+ }
70
+
71
+ // Legacy format: bare spec names (no 'slice-' prefix) are spec-level deps already
72
+ // satisfied by definition. Return null so they are filtered and not validated.
73
+ if (!dep.startsWith('slice-')) {
74
+ return null;
75
+ }
76
+
77
+ return `${slice.specSlug}/${dep}`;
78
+ }
79
+ ```
80
+
81
+ Eso es todo el cambio funcional.
82
+
83
+ ---
84
+
85
+ ## Test a agregar
86
+
87
+ Ubicá `tests/lib/slice-graph.test.js` (o el archivo de test existente para slice-graph). Agregá un caso que cubra:
88
+
89
+ 1. Un slice con `"dependencies": ["quiver-v01"]` (formato legacy bare) no tira error en `buildGraph` y no produce aristas para ese dep.
90
+ 2. Un slice con `"depends_on": ["other-spec/slice-01-foo"]` sigue produciendo la arista correcta (regresión).
91
+
92
+ Seguí el estilo de los tests existentes en ese archivo.
93
+
94
+ ---
95
+
96
+ ## Verificación antes de commitear
97
+
98
+ ```bash
99
+ # 1. Todos los tests pasan
100
+ node --test tests/
101
+
102
+ # 2. El comando ya no crashea
103
+ node bin/create-quiver.js plan
104
+
105
+ # 3. JSON válido
106
+ node bin/create-quiver.js plan --json | node -e \
107
+ "const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')); \
108
+ if(!Array.isArray(d.plan)||typeof d.total_hours!=='number') process.exit(1); \
109
+ console.log('ok:', d.plan.length, 'slices')"
110
+
111
+ # 4. Diff limpio — solo los dos archivos esperados
112
+ git diff --stat HEAD
113
+ ```
114
+
115
+ ---
116
+
117
+ ## Restricciones
118
+
119
+ - **No** toques `buildGraph`, `inferDependencies`, ni ninguna otra función.
120
+ - **No** agregues warnings ni logs para los deps descartados — el drop es silencioso.
121
+ - **No** edites ningún `slice.json` de specs antiguas.
122
+ - **No** cambies el comportamiento del nuevo formato `"depends_on"` con `spec/slice-id`.
123
+ - **Un solo commit.** Mensaje sugerido:
124
+
125
+ ```
126
+ bugfix(QUIVER-01): ignore legacy bare spec deps in normalizeDependencyRef
127
+
128
+ Old slice.json files use "dependencies": ["quiver-vNN"] with bare spec names.
129
+ normalizeDependencyRef was expanding them to "spec-slug/quiver-vNN" which
130
+ doesn't match any slice, causing buildGraph to throw MISSING_DEPENDENCY.
131
+
132
+ Guard: values without '/' that don't start with 'slice-' are spec-level refs
133
+ already satisfied — return null so they are filtered before graph validation.
134
+ ```