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,68 @@
1
+ {
2
+ "slice_id": "slice-01-ci-matrix-verified",
3
+ "ticket": "QUIVER-01",
4
+ "type": "ops",
5
+ "title": "Cross-Platform CI Matrix Verified",
6
+ "objective": "Ensure `.github/workflows/ci.yml` runs on macOS, Linux, and Windows and is green on all three, so every subsequent orchestration command can rely on the matrix instead of adding its own.",
7
+ "description": "Every command in v18 through v22 is Node-first and must behave identically on macOS, Linux, and Windows. Today some tests assume POSIX shells, `/` path separators, or UTF-8 output. This slice either confirms the existing CI matrix already covers the three OS targets or introduces the missing job(s), and adds a negative test that fails on Windows if paths are hardcoded with `/`.",
8
+ "git": {
9
+ "branch_type": "feature",
10
+ "base_branch": "main",
11
+ "branch_slug": "ci-matrix-verified",
12
+ "branch_name": "feature/QUIVER-01-ci-matrix-verified"
13
+ },
14
+ "must": [
15
+ "Confirm or add `macos-latest`, `ubuntu-latest`, and `windows-latest` entries in the `.github/workflows/ci.yml` matrix",
16
+ "Add a guard test that fails on Windows when a path in the codebase is hardcoded with `/` instead of `path.sep`",
17
+ "Document the cross-platform authoring rules in `docs/SUPPORT_MATRIX.md` (no shell invocations for logic, `path.join`, EOL handling, JSON-first, TTY-aware color, Unicode opt-in)",
18
+ "Create `docs/COMMANDS.md` with a header table and a reserved row for `quiver:plan`",
19
+ "Add a `CHANGELOG.md` entry noting the foundation for orchestration commands"
20
+ ],
21
+ "not_included": [
22
+ "Introducing any new user-facing command",
23
+ "Building `lib/slice-graph.js` (handled in slice-02)",
24
+ "Validating `depends_on` (handled in slice-03)",
25
+ "Removing existing Bash wrappers (legacy path remains until runtime slices land)"
26
+ ],
27
+ "acceptance": [
28
+ "`.github/workflows/ci.yml` shows a matrix with `macos-latest`, `ubuntu-latest`, and `windows-latest`",
29
+ "The matrix is green on all three OS in the PR that lands this slice",
30
+ "A deliberate regression using `/` hardcoded paths fails on Windows CI and passes after fixing",
31
+ "`docs/SUPPORT_MATRIX.md` contains a section named `Cross-Platform Authoring Rules` with the six rules",
32
+ "`docs/COMMANDS.md` exists with a table header `| Command | Purpose | OS | Since |` and at least one reserved row for `quiver:plan`"
33
+ ],
34
+ "files": [
35
+ ".github/workflows/ci.yml",
36
+ "docs/SUPPORT_MATRIX.md",
37
+ "docs/COMMANDS.md",
38
+ "CHANGELOG.md",
39
+ "specs/quiver-v17-orchestration-foundation/SPEC.md",
40
+ "specs/quiver-v17-orchestration-foundation/STATUS.md",
41
+ "specs/quiver-v17-orchestration-foundation/EVIDENCE_REPORT.md",
42
+ "specs/quiver-v17-orchestration-foundation/slices/slice-01-ci-matrix-verified/slice.json"
43
+ ],
44
+ "tests": [
45
+ "node -e \"const fs=require('fs'); const y=fs.readFileSync('.github/workflows/ci.yml','utf8'); if(!y.includes('macos-latest')||!y.includes('ubuntu-latest')||!y.includes('windows-latest')) process.exit(1)\"",
46
+ "test -f docs/SUPPORT_MATRIX.md",
47
+ "test -f docs/COMMANDS.md",
48
+ "git diff --check"
49
+ ],
50
+ "documentation": [
51
+ "docs/SUPPORT_MATRIX.md",
52
+ "docs/COMMANDS.md",
53
+ "CHANGELOG.md"
54
+ ],
55
+ "dependencies": [],
56
+ "assumptions": [
57
+ "GitHub Actions continues to offer `windows-latest` runners at no extra cost",
58
+ "Existing tests are shell-agnostic enough to pass on Windows after the matrix flip",
59
+ "A single smoke on each OS is sufficient; no need for full matrix fan-out per test"
60
+ ],
61
+ "estimated_hours": 4,
62
+ "actual_hours": null,
63
+ "status": "completed",
64
+ "blocked_reason": null,
65
+ "ready_at": null,
66
+ "started_at": null,
67
+ "completed_at": "2026-04-23T00:00:00Z"
68
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "slice_id": "slice-02-slice-graph-library",
3
+ "ticket": "QUIVER-02",
4
+ "type": "feat",
5
+ "title": "Slice Graph Library",
6
+ "objective": "Introduce `src/create-quiver/lib/slice-graph.js` as the single shared dependency of every orchestration command, exposing a stable API to read slices, infer dependencies, build a graph, topologically sort, compute parallel levels, and detect file conflicts.",
7
+ "description": "All v18–v22 commands must read `slice.json` files, understand ordering, and identify parallel-safe groups. Without a library each command re-implements this. This slice builds the library, includes heuristic dependency inference (numeric order within a spec, intersected with `files[]` overlap) and honors explicit `depends_on` when present. The library is pure Node and deterministic so it works identically on all three OS.",
8
+ "git": {
9
+ "branch_type": "feature",
10
+ "base_branch": "main",
11
+ "branch_slug": "slice-graph-library",
12
+ "branch_name": "feature/QUIVER-02-slice-graph-library"
13
+ },
14
+ "must": [
15
+ "Create `src/create-quiver/lib/slice-graph.js` exporting `readAllSlices`, `inferDependencies`, `buildGraph`, `topoSort`, `computeLevels`, `detectFileConflicts`",
16
+ "Implement heuristic dependency inference: within a spec, `slice-NN` depends on any lower-numbered sibling that shares at least one entry in `files[]`",
17
+ "Honor explicit `depends_on` in `slice.json` when present (overrides heuristic)",
18
+ "Detect cycles in `topoSort` and throw a typed error with the cycle path",
19
+ "Implement `computeLevels` as a repeated Kahn pass: each level is the set of nodes with no pending predecessors",
20
+ "Implement `detectFileConflicts` by grouping slices in a level whose `files[]` intersect",
21
+ "Add unit tests under `tests/lib/slice-graph.test.js` covering: empty repo, single spec, cross-spec deps, explicit `depends_on`, cycle, disjoint vs intersecting files",
22
+ "Document the API at the top of `src/create-quiver/lib/slice-graph.js` and cross-link from `docs/COMMANDS.md`"
23
+ ],
24
+ "not_included": [
25
+ "Any CLI-facing command (handled from slice-18 onward)",
26
+ "Validating `depends_on` at `check-slice` time (handled in slice-03)",
27
+ "Rendering trees, mermaid, or DOT output (handled in v18)",
28
+ "Enforcing parallelism at runtime (library is advisory)"
29
+ ],
30
+ "acceptance": [
31
+ "`require('./src/create-quiver/lib/slice-graph')` exposes all six documented functions",
32
+ "`readAllSlices('.')` against the Quiver repo returns a non-zero slice count and does not throw",
33
+ "Unit tests pass on macOS, Linux, and Windows",
34
+ "A test fixture with a cycle causes `topoSort` to throw an error whose message includes every node in the cycle",
35
+ "A test fixture with two slices that touch disjoint files places them at the same level"
36
+ ],
37
+ "files": [
38
+ "src/create-quiver/lib/slice-graph.js",
39
+ "tests/lib/slice-graph.test.js",
40
+ "docs/COMMANDS.md",
41
+ "specs/quiver-v17-orchestration-foundation/slices/slice-02-slice-graph-library/slice.json"
42
+ ],
43
+ "tests": [
44
+ "node --test tests/lib/slice-graph.test.js",
45
+ "node -e \"const g=require('./src/create-quiver/lib/slice-graph'); if(g.readAllSlices('.').length===0) process.exit(1)\"",
46
+ "git diff --check"
47
+ ],
48
+ "documentation": [
49
+ "src/create-quiver/lib/slice-graph.js",
50
+ "docs/COMMANDS.md"
51
+ ],
52
+ "dependencies": ["slice-01-ci-matrix-verified"],
53
+ "assumptions": [
54
+ "Heuristic inference by numeric order + file overlap is accurate enough for existing specs; edge cases escalate to explicit `depends_on`",
55
+ "`node --test` is available in the Node version required by the project",
56
+ "Reading every `slice.json` at startup is cheap enough not to warrant caching yet"
57
+ ],
58
+ "estimated_hours": 5,
59
+ "actual_hours": null,
60
+ "status": "completed",
61
+ "blocked_reason": null,
62
+ "ready_at": "2026-04-23T00:00:00Z",
63
+ "started_at": "2026-04-23T00:00:00Z",
64
+ "completed_at": "2026-04-23T00:00:00Z"
65
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "slice_id": "slice-03-depends-on-validation",
3
+ "ticket": "QUIVER-03",
4
+ "type": "feat",
5
+ "title": "Optional `depends_on` Validation",
6
+ "objective": "Extend `check-slice` so when a slice declares `depends_on` or `parallel_safe` the values are validated against the real filesystem, preventing typos, dead references, and missing justifications from reaching execution.",
7
+ "description": "Heuristic inference covers most cases, but specs that need explicit dependencies (cross-spec, non-sequential, or overriding file-overlap inference) should be validated up front. This slice adds three validation rules to `check-slice`: each `depends_on` target must resolve to an existing `slice.json`; the set of declared deps must be acyclic with the graph built so far; and `parallel_safe: \"never\"` requires a non-empty `parallel_safe_reason`.",
8
+ "git": {
9
+ "branch_type": "feature",
10
+ "base_branch": "main",
11
+ "branch_slug": "depends-on-validation",
12
+ "branch_name": "feature/QUIVER-03-depends-on-validation"
13
+ },
14
+ "must": [
15
+ "Extend `check-slice` to validate optional `depends_on` entries point to existing `<spec-slug>/<slice-id>` combinations",
16
+ "Detect cycles introduced by newly declared `depends_on` using the shared slice graph library",
17
+ "Require a non-empty `parallel_safe_reason` when `parallel_safe: \"never\"` is declared",
18
+ "Update `specs/[project-name]/slice-template/slice.json` with the new optional fields, commented out",
19
+ "Update `docs/COMMANDS.md` with a paragraph describing the new validations",
20
+ "Add a `CHANGELOG.md` entry"
21
+ ],
22
+ "not_included": [
23
+ "Enforcing `depends_on` at `start-slice` time beyond the existing checks",
24
+ "Auto-filling `depends_on` from heuristic inference (commands can do this read-only)",
25
+ "Introducing a full JSON Schema (only these fields are validated)"
26
+ ],
27
+ "acceptance": [
28
+ "A slice with `depends_on: [\"nonexistent/slice-99\"]` causes `check-slice` to exit non-zero with a clear message naming the missing path",
29
+ "A slice that creates a cycle with an existing declaration causes `check-slice` to exit non-zero and print the cycle",
30
+ "A slice with `parallel_safe: \"never\"` and no `parallel_safe_reason` fails; adding a reason makes it pass",
31
+ "A slice with no `depends_on` field continues to pass without changes",
32
+ "The slice template shows the new fields as commented-out examples"
33
+ ],
34
+ "files": [
35
+ "src/create-quiver/lib/json.js",
36
+ "src/create-quiver/lib/readiness.js",
37
+ "src/create-quiver/lib/slice-graph.js",
38
+ "src/create-quiver/lib/slice.js",
39
+ "specs/[project-name]/slice-template/slice.json",
40
+ "docs/COMMANDS.md",
41
+ "CHANGELOG.md",
42
+ "tests/lib/check-slice.test.js",
43
+ "scripts/check-slice-readiness.sh",
44
+ "scripts/ci/smoke-create-quiver.sh",
45
+ "scripts/ci/smoke-cross-platform.js",
46
+ "scripts/ci/smoke-init-docs.sh",
47
+ ".github/workflows/ci.yml",
48
+ "specs/quiver-v17-orchestration-foundation/slices/slice-03-depends-on-validation/slice.json"
49
+ ],
50
+ "tests": [
51
+ "node --test tests/lib/check-slice.test.js",
52
+ "git diff --check"
53
+ ],
54
+ "documentation": [
55
+ "docs/COMMANDS.md",
56
+ "CHANGELOG.md",
57
+ "specs/[project-name]/slice-template/slice.json"
58
+ ],
59
+ "dependencies": ["slice-02-slice-graph-library"],
60
+ "assumptions": [
61
+ "`check-slice` already exists as the validation entry point",
62
+ "Slice IDs across specs are unique enough to form `<spec-slug>/<slice-id>` keys",
63
+ "The validation implementation lives in `src/create-quiver/lib/readiness.js` or an equivalent shared gate module"
64
+ ],
65
+ "estimated_hours": 2,
66
+ "actual_hours": 2,
67
+ "status": "completed",
68
+ "blocked_reason": null,
69
+ "ready_at": "2026-04-23T00:00:00Z",
70
+ "started_at": "2026-04-23T00:00:00Z",
71
+ "completed_at": "2026-04-23T00:00:00Z"
72
+ }
@@ -0,0 +1,38 @@
1
+ # Quiver v0.18 Evidence Report
2
+
3
+ **Spec:** quiver-v18-slice-orchestration
4
+ **Date:** 2026-04-24
5
+ **Status:** Completed
6
+
7
+ ## Summary
8
+
9
+ This spec delivers the three user-facing orchestration commands: `plan`, `graph`, and `next`. All are read-only by default; `next --auto-start` is the only path that mutates state, and only under TTY confirmation. The measurable outcome is that a maintainer coordinating multiple agents can identify the correct next slice and the current parallel-safe lots without running custom scripts.
10
+
11
+ ## Slice Evidence
12
+
13
+ | Slice | Status | Evidence |
14
+ |-------|--------|----------|
15
+ | slice-01 | Completed | `quiver:plan` prints the topological order of pending slices; `--json` is a valid parseable payload; critical path is calculated; docs/examples/plan.md exists |
16
+ | slice-02 | Completed | `quiver:graph --format tree` prints an ASCII tree; `--show-conflicts` flags intersecting files; ASCII fallback works without UTF-8 locale |
17
+ | slice-03 | Completed | `quiver:graph --format mermaid` prints a fenced Mermaid flowchart; `--format dot` prints valid DOT source and the docs show both formats |
18
+ | slice-04 | Completed | `quiver:next` prints one slice; `--all-ready` prints the whole first level; `--auto-start` requires confirmation on TTY and refuses on non-TTY |
19
+
20
+ ## Required Final Evidence
21
+
22
+ - `npx create-quiver plan` returns exit 0 on the Quiver repo and prints the expected number of pending slices
23
+ - `npx create-quiver plan --json` returns valid JSON with `plan`, `critical_path`, and `total_hours` keys
24
+ - `npx create-quiver graph --format tree` renders an ASCII tree on macOS, Linux, and Windows CI
25
+ - `npx create-quiver graph --format mermaid` output pastes directly into a GitHub issue comment and renders
26
+ - `npx create-quiver next` prints a slice without side effects; running it twice returns the same slice
27
+ - `npx create-quiver next --all-ready` prints every slice in the first unblocked level
28
+ - `npx create-quiver next --auto-start` on a TTY prompts before running `start-slice`; on non-TTY returns a non-zero exit
29
+ - `npx create-quiver next --json` returns valid JSON with `next` and `all_ready`
30
+ - `docs/examples/plan.md`, `docs/examples/graph.md`, and `docs/examples/next.md` contain real input and output
31
+ - `docs/COMMANDS.md` has rows for all three commands with OS columns showing macOS/Linux/Windows
32
+ - `README.md` "Project NPM Scripts" lists `quiver:plan`, `quiver:graph`, `quiver:next`
33
+
34
+ ## Validation Checkpoint (Post-Merge)
35
+
36
+ - `quiver:plan` is used at least once per day for one week of real work on Quiver
37
+ - At least one external user reports whether `quiver:graph --format mermaid` matches their expectations
38
+ - Decision to scope v19 (`status`, `estimate`, `lint-spec`) is made only after this evidence is collected
@@ -0,0 +1,91 @@
1
+ # Quiver v0.18 - Slice Orchestration
2
+
3
+ **Date:** 2026-04-23
4
+ **Status:** Draft
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
+ Ship the three commands that answer the core multi-agent question "what should I work on now, and what can run in parallel?": `quiver:plan` (sequential order), `quiver:graph` (dependency and parallelism tree), and `quiver:next` (single ready slice). Together they let a maintainer coordinate planning-tier and execution-tier models without guessing.
11
+
12
+ ## Context
13
+
14
+ With the v17 foundation in place (CI matrix, shared graph library, optional `depends_on` validation), the user-facing commands are thin wrappers around the library. The main deliverables here are the output formats, flag ergonomics, and documentation. `quiver:next` never takes destructive action by default: it prints a suggestion and only optionally runs `start-slice` behind a confirmation prompt.
15
+
16
+ ## Scope
17
+
18
+ ### Included
19
+
20
+ - `quiver:plan` — topological order of pending slices across all specs, with critical path and total hours
21
+ - `quiver:graph` — dependency tree with parallel lots, conflict detection, and multiple output formats
22
+ - `quiver:next` — next ready slice (or all ready slices), with optional `--auto-start` behind a TTY confirmation
23
+ - Entries in `docs/COMMANDS.md`, examples in `docs/examples/`, `package.json` `quiver:*` scripts, `README.md` and `README_FOR_AI.md` updates for each command
24
+ - `CHANGELOG.md` entries
25
+
26
+ ### Excluded
27
+
28
+ - A status dashboard (deferred to v19)
29
+ - Token cost estimation (deferred to v20)
30
+ - Archiving completed specs (deferred to v21)
31
+ - Automatic locking of parallel slices (commands are advisory)
32
+
33
+ ## Commands
34
+
35
+ ### `quiver:plan`
36
+
37
+ Topological order across all specs with pending slices. Output modes:
38
+
39
+ - Default: human-readable table with `[N] TICKET spec/slice title hours status`
40
+ - `--json`: `{ plan: Slice[], critical_path: SliceId[], total_hours: number }`
41
+ - `--only-ready`: filter to slices with no pending dependencies
42
+ - `--spec <slug>`: restrict to a single spec
43
+
44
+ Exit codes: 0 ok, 1 cycle detected, 2 invalid repo state.
45
+
46
+ ### `quiver:graph`
47
+
48
+ Dependency and parallelism view. Output modes:
49
+
50
+ - `--format tree` (default): ASCII tree grouped by level, with `⚠` markers on file conflicts (`+--` fallback without Unicode)
51
+ - `--format mermaid`: Mermaid `flowchart TD` block pastable into GitHub
52
+ - `--format dot`: Graphviz DOT source
53
+ - `--show-conflicts`: highlight intersections of `files[]`
54
+ - `--level <n>`: focus on one topological level
55
+ - `--json`: structured output
56
+
57
+ ### `quiver:next`
58
+
59
+ Single-slice suggestion. Output modes:
60
+
61
+ - Default: top-1 ready slice plus the exact `start-slice` command to copy
62
+ - `--all-ready`: list every slice at the first unblocked level
63
+ - `--auto-start`: prompt for confirmation (requires TTY) and run `start-slice` on accept
64
+ - `--json`: `{ next: Slice | null, all_ready: Slice[] }`
65
+
66
+ ## Slices
67
+
68
+ | Slice | Title | Status | Spec |
69
+ |-------|-------|--------|------|
70
+ | 01 | `quiver:plan` Command | Completed | [slice-01](./slices/slice-01-plan-command/slice.json) |
71
+ | 02 | `quiver:graph` MVP Tree | Completed | [slice-02](./slices/slice-02-graph-mvp-tree/slice.json) |
72
+ | 03 | `quiver:graph` Extended Formats | Completed | [slice-03](./slices/slice-03-graph-extended-formats/slice.json) |
73
+ | 04 | `quiver:next` Command | Completed | [slice-04](./slices/slice-04-next-command/slice.json) |
74
+
75
+ ## Definition of Done
76
+
77
+ - `npx create-quiver plan` prints the sequential plan and `--json` produces a valid parseable object
78
+ - `npx create-quiver graph --format tree` prints a correct tree; `--show-conflicts` marks shared files
79
+ - `npx create-quiver graph --format mermaid` output pastes directly into a GitHub markdown block
80
+ - `npx create-quiver next` prints the next ready slice without side effects
81
+ - `npx create-quiver next --all-ready` prints every ready slice in the first unblocked level
82
+ - `npx create-quiver next --auto-start` requires confirmation on TTY and refuses on non-TTY
83
+ - `npx create-quiver next --json` produces a valid parseable object with `next` and `all_ready`
84
+ - Each command has a `docs/examples/<command>.md` page with input and representative output
85
+ - `docs/COMMANDS.md` has rows for all three commands with OS support and example link
86
+ - `README.md` "Project NPM Scripts" lists `quiver:plan`, `quiver:graph`, `quiver:next`
87
+ - All three commands run green on macOS, Linux, and Windows in CI
88
+
89
+ ## Validation Checkpoint
90
+
91
+ Before v19 is started, `quiver:plan` must be used at least once per day for one week during real work on Quiver itself. If the maintainer does not reach for it, v19 is rescoped before it is written.
@@ -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
+ }