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,70 @@
1
+ {
2
+ "slice_id": "slice-02-check-handoff-command",
3
+ "ticket": "QUIVER-02",
4
+ "type": "feature",
5
+ "title": "Check Handoff Command",
6
+ "objective": "Add a lightweight validator for HANDOFF artifacts so the contract is machine-checkable.",
7
+ "description": "Once the handoff contract exists, Quiver should be able to validate that a concrete handoff lives in the canonical location and contains the required sections. This slice adds `create-quiver check-handoff <path>` with clear failures for missing files, wrong placement, and missing headings.",
8
+ "git": {
9
+ "branch_type": "feature",
10
+ "base_branch": "main",
11
+ "branch_slug": "check-handoff-command",
12
+ "branch_name": "feature/QUIVER-02-check-handoff-command"
13
+ },
14
+ "must": [
15
+ "Add `create-quiver check-handoff <path>` to the CLI",
16
+ "Fail non-zero when the target file does not exist",
17
+ "Fail non-zero when the target file is not located at the canonical `specs/<spec-slug>/HANDOFF.md` path",
18
+ "Fail non-zero when any required section heading is missing",
19
+ "Allow extra sections as long as the required headings are present",
20
+ "Add smoke coverage for both passing and failing examples"
21
+ ],
22
+ "not_included": [
23
+ "Automatic handoff creation",
24
+ "Doctor warnings",
25
+ "Semantic validation of handoff quality"
26
+ ],
27
+ "acceptance": [
28
+ "A valid `specs/<spec-slug>/HANDOFF.md` passes `create-quiver check-handoff <path>`",
29
+ "A missing handoff path exits non-zero with a clear message",
30
+ "A handoff missing one required section exits non-zero and names the missing heading",
31
+ "A handoff outside the canonical `specs/<spec-slug>/HANDOFF.md` path exits non-zero with a placement error",
32
+ "Smoke coverage proves both valid and invalid cases"
33
+ ],
34
+ "files": [
35
+ "src/create-quiver/index.js",
36
+ "src/create-quiver/lib/handoff.js",
37
+ "scripts/ci/smoke-cross-platform.js",
38
+ "README.md",
39
+ "README_FOR_AI.md",
40
+ "specs/quiver-v16-handoff-contract/SPEC.md",
41
+ "specs/quiver-v16-handoff-contract/STATUS.md",
42
+ "specs/quiver-v16-handoff-contract/EVIDENCE_REPORT.md",
43
+ "specs/quiver-v16-handoff-contract/slices/slice-02-check-handoff-command/slice.json"
44
+ ],
45
+ "tests": [
46
+ "node -c src/create-quiver/index.js",
47
+ "node -c src/create-quiver/lib/handoff.js",
48
+ "node bin/create-quiver.js check-handoff /tmp/quiver-valid-handoff/specs/sample-spec/HANDOFF.md",
49
+ "node bin/create-quiver.js check-handoff /tmp/quiver-invalid-handoff/specs/sample-spec/HANDOFF.md",
50
+ "git diff --check"
51
+ ],
52
+ "documentation": [
53
+ "README.md",
54
+ "README_FOR_AI.md"
55
+ ],
56
+ "dependencies": [
57
+ "slice-01-handoff-template-and-contract"
58
+ ],
59
+ "assumptions": [
60
+ "Structure validation is enough for the first version; semantic quality can stay a human review concern",
61
+ "The validator should enforce canonical placement so the contract stays discoverable"
62
+ ],
63
+ "estimated_hours": 3,
64
+ "actual_hours": 2,
65
+ "status": "completed",
66
+ "blocked_reason": null,
67
+ "ready_at": "2026-04-23T00:00:00Z",
68
+ "started_at": "2026-04-23T00:00:00Z",
69
+ "completed_at": "2026-04-23T00:00:00Z"
70
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "slice_id": "slice-03-handoff-scaffold-optional",
3
+ "ticket": "QUIVER-03",
4
+ "type": "feature",
5
+ "title": "Handoff Scaffold Optional",
6
+ "objective": "Optionally add a scaffold command for handoffs after the contract and validator already exist.",
7
+ "description": "If the handoff contract proves useful, Quiver can add a convenience command to create `specs/<spec-slug>/HANDOFF.md` from the canonical template. This slice stays intentionally small and must not become a larger orchestration feature.",
8
+ "git": {
9
+ "branch_type": "feature",
10
+ "base_branch": "main",
11
+ "branch_slug": "handoff-scaffold-optional",
12
+ "branch_name": "feature/QUIVER-03-handoff-scaffold-optional"
13
+ },
14
+ "must": [
15
+ "Add `create-quiver new-handoff <spec-slug>`",
16
+ "Generate `specs/<spec-slug>/HANDOFF.md` from `specs/[project-name]/HANDOFF.md.template`",
17
+ "Refuse to overwrite an existing handoff unless a future explicit force flag is added in another spec",
18
+ "Keep the scaffold aligned with the validator contract and required headings",
19
+ "Document the command as optional convenience rather than a mandatory workflow step"
20
+ ],
21
+ "not_included": [
22
+ "Force overwrite flags",
23
+ "Automatic creation of handoffs during init, migrate, or doctor",
24
+ "Any new state machine for handoff lifecycle"
25
+ ],
26
+ "acceptance": [
27
+ "Running `create-quiver new-handoff sample-spec` creates `specs/sample-spec/HANDOFF.md` in the canonical location",
28
+ "The generated handoff passes `create-quiver check-handoff specs/sample-spec/HANDOFF.md`",
29
+ "Running the command again without deleting the file exits non-zero and preserves the existing handoff",
30
+ "README and AI docs describe the scaffold as optional convenience"
31
+ ],
32
+ "files": [
33
+ "src/create-quiver/index.js",
34
+ "src/create-quiver/lib/handoff.js",
35
+ "README.md",
36
+ "README_FOR_AI.md",
37
+ "specs/quiver-v16-handoff-contract/SPEC.md",
38
+ "specs/quiver-v16-handoff-contract/STATUS.md",
39
+ "specs/quiver-v16-handoff-contract/EVIDENCE_REPORT.md",
40
+ "specs/quiver-v16-handoff-contract/slices/slice-03-handoff-scaffold-optional/slice.json"
41
+ ],
42
+ "tests": [
43
+ "node -c src/create-quiver/index.js",
44
+ "node -c src/create-quiver/lib/handoff.js",
45
+ "node bin/create-quiver.js new-handoff sample-spec",
46
+ "node bin/create-quiver.js check-handoff specs/sample-spec/HANDOFF.md",
47
+ "git diff --check"
48
+ ],
49
+ "documentation": [
50
+ "README.md",
51
+ "README_FOR_AI.md"
52
+ ],
53
+ "dependencies": [
54
+ "slice-01-handoff-template-and-contract"
55
+ ],
56
+ "assumptions": [
57
+ "The scaffold remains optional and should not be built before the contract is clear",
58
+ "Convenience is valuable only if the generated file stays perfectly aligned with the validator"
59
+ ],
60
+ "estimated_hours": 2,
61
+ "actual_hours": 2,
62
+ "status": "completed",
63
+ "blocked_reason": null,
64
+ "ready_at": "2026-04-23T00:00:00Z",
65
+ "started_at": "2026-04-23T00:00:00Z",
66
+ "completed_at": "2026-04-23T00:00:00Z"
67
+ }
@@ -0,0 +1,32 @@
1
+ # Quiver v0.17 Evidence Report
2
+
3
+ **Spec:** quiver-v17-orchestration-foundation
4
+ **Date:** 2026-04-23
5
+ **Status:** Completed
6
+
7
+ ## Summary
8
+
9
+ This spec installs the cross-platform foundation and shared graph library used by every orchestration command in v18–v22. It does not ship a user-facing command. The primary measurable outcome is that the graph library returns the correct topological order and parallel levels for the existing Quiver repo, and that the CI matrix is green on macOS, Linux, and Windows.
10
+
11
+ ## Slice Evidence
12
+
13
+ | Slice | Status | Evidence |
14
+ |-------|--------|----------|
15
+ | slice-01 | Completed | CI matrix runs macOS + Linux + Windows; a Windows path guard validates `path.win32` handling and the authoring rules docs are generated |
16
+ | slice-02 | Completed | `src/create-quiver/lib/slice-graph.js` exports the six documented functions; unit tests cover empty repos, heuristic inference, explicit overrides, cross-spec deps, cycle detection, and conflict grouping |
17
+ | slice-03 | Completed | `check-slice` rejects `depends_on: ["nonexistent/slice-99"]`, rejects cycles, and requires `parallel_safe_reason` when `parallel_safe: "never"` |
18
+
19
+ ## Required Final Evidence
20
+
21
+ - `.github/workflows/ci.yml` shows `macos-latest`, `ubuntu-latest`, `windows-latest` in the matrix and all three are green
22
+ - `node -e "const g=require('./src/create-quiver/lib/slice-graph'); console.log(g.readAllSlices('.').length)"` returns a non-zero count on all three OS
23
+ - Unit tests for `buildGraph`, `topoSort`, `computeLevels`, and `detectFileConflicts` pass on all three OS
24
+ - `check-slice` output demonstrates the new `depends_on` validation rules
25
+ - `docs/COMMANDS.md` exists with a header table and at least one reserved command row
26
+ - `docs/SUPPORT_MATRIX.md` contains the cross-platform authoring rules section
27
+
28
+ ## Validation Checkpoint (Post-Merge)
29
+
30
+ - A dry-run of `readAllSlices` against the Quiver repo returns every existing slice without throwing
31
+ - The maintainer confirms the library is usable before starting v18
32
+ - At least one reviewer on a second machine confirms the CI matrix works locally
@@ -0,0 +1,79 @@
1
+ # Quiver v0.17 - Orchestration Foundation
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
+ Lay the cross-platform foundation and shared graph library required by every subsequent orchestration command (`plan`, `graph`, `next`, `status`, `estimate`, `lint-spec`, `cost`, `diff-pack`, `replay`, `archive`, `blame-slice`). No user-facing command is shipped here; this spec exists to make the following specs cheap to build and safe on macOS, Linux, and Windows.
11
+
12
+ ## Context
13
+
14
+ The orchestration roadmap (v18–v22) introduces ~13 new commands that all need to read slices, infer dependencies, compute execution levels, and detect file conflicts. Without a shared library those commands re-implement the same logic three or four times. Without a verified cross-platform CI matrix, any new command is fragile on Windows. This spec consolidates both concerns into one foundation.
15
+
16
+ ## Scope
17
+
18
+ ### Included
19
+
20
+ - Verify or introduce a CI matrix that runs macOS, Linux, and Windows for all Quiver tests
21
+ - Create `src/create-quiver/lib/slice-graph.js` with a stable API: `readAllSlices`, `inferDependencies`, `buildGraph`, `topoSort`, `computeLevels`, `detectFileConflicts`
22
+ - Support optional `depends_on` and `parallel_safe` fields in `slice.json`, with heuristic inference as the fallback
23
+ - Extend `check-slice` to validate `depends_on` when declared (existence, no cycles, reason when `parallel_safe: "never"`)
24
+ - Create `docs/COMMANDS.md` as the canonical command reference table, initially empty beyond the plan row
25
+ - Publish cross-platform authoring rules in `docs/SUPPORT_MATRIX.md` for all subsequent commands
26
+
27
+ ### Excluded
28
+
29
+ - Any user-facing orchestration command (deferred to v18)
30
+ - A full slice JSON Schema file (only the new optional fields are validated)
31
+ - Parallelism enforcement or locking (library returns groups; commands decide)
32
+ - Any change to existing slice contents beyond optional new fields
33
+
34
+ ## Cross-Platform Authoring Rules
35
+
36
+ Every subsequent orchestration command must follow these rules, enforced by code review and CI:
37
+
38
+ - No shell invocations for logic — Node.js `fs`, `path`, and `child_process` with `shell: false`
39
+ - Paths use `path.join` and `path.sep`; output may normalize to `/` for human readability
40
+ - Write files with `\n`; read tolerating `\r\n`
41
+ - `--json` is the primary contract; human output is cortesy and may vary
42
+ - Colors only when `process.stdout.isTTY && !process.env.NO_COLOR`
43
+ - Unicode glyphs only when `process.env.LANG` includes `UTF-8` or the user passes `--unicode`; ASCII fallback otherwise
44
+ - Optional external tools (`gh`, `graphviz`) detected with a cross-platform probe; degrade with a clear message if absent
45
+
46
+ ## Graph Library Contract
47
+
48
+ `src/create-quiver/lib/slice-graph.js` exports:
49
+
50
+ ```js
51
+ readAllSlices(rootDir) // → Slice[] (from specs/*/slices/*/slice.json)
52
+ inferDependencies(slices) // → Slice[] with implicit depends_on[]
53
+ buildGraph(slices) // → { nodes, edges, cycles: [] }
54
+ topoSort(graph) // → Slice[] (throws on cycle)
55
+ computeLevels(graph) // → Slice[][] (each level is a parallel lot)
56
+ detectFileConflicts(slicesInLevel)// → ConflictGroup[]
57
+ ```
58
+
59
+ Dependency inference rule: within a single spec, `slice-NN` implicitly depends on all lower-numbered slices in the same spec that share at least one entry in `files[]`. An explicit `depends_on` array in `slice.json` overrides the heuristic.
60
+
61
+ ## Slices
62
+
63
+ | Slice | Title | Status | Spec |
64
+ |-------|-------|--------|------|
65
+ | 01 | Cross-Platform CI Matrix Verified | Completed | [slice-01](./slices/slice-01-ci-matrix-verified/slice.json) |
66
+ | 02 | Slice Graph Library | Completed | [slice-02](./slices/slice-02-slice-graph-library/slice.json) |
67
+ | 03 | Optional `depends_on` Validation | Completed | [slice-03](./slices/slice-03-depends-on-validation/slice.json) |
68
+
69
+ ## Definition of Done
70
+
71
+ - `.github/workflows/ci.yml` runs tests on `macos-latest`, `ubuntu-latest`, and `windows-latest` and is green on all three
72
+ - `src/create-quiver/lib/slice-graph.js` exists with the six documented exports and tests for each
73
+ - `check-slice` rejects `depends_on` entries pointing at nonexistent slices and cycles, and requires `parallel_safe_reason` when `parallel_safe: "never"` is declared
74
+ - `docs/COMMANDS.md` exists with a header table and a row reserved for the plan command
75
+ - `docs/SUPPORT_MATRIX.md` documents the cross-platform authoring rules above
76
+
77
+ ## Validation Checkpoint
78
+
79
+ Before v18 is started, the graph library must pass its own unit tests on all three OS targets, and a dry-run of `readAllSlices(repoRoot)` against the current Quiver repo must return every existing slice without throwing.
@@ -0,0 +1,31 @@
1
+ # Quiver v0.17 Spec Status
2
+
3
+ **Spec:** quiver-v17-orchestration-foundation
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 | Cross-Platform CI Matrix Verified | Completed | https://github.com/FabriJuncal/quiver/pull/46 | 4 | 4 |
13
+ | slice-02 | Slice Graph Library | Completed | https://github.com/FabriJuncal/quiver/pull/46 | 5 | 5 |
14
+ | slice-03 | Optional `depends_on` Validation | Completed | https://github.com/FabriJuncal/quiver/pull/48 | 2 | 2 |
15
+
16
+ ## Progress
17
+
18
+ - Completed slices: 3 / 3
19
+ - Estimated hours: 11
20
+ - Actual hours: 11
21
+
22
+ ## Blockers
23
+
24
+ | Slice | Blocker | Since | Action needed |
25
+ |-------|---------|-------|---------------|
26
+ | - | - | - | - |
27
+
28
+ ## Dependencies
29
+
30
+ - slice-02 depends on slice-01 (library assumes CI will validate it cross-platform)
31
+ - slice-03 depends on slice-02 (validation uses the library's graph functions)
@@ -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.