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.
- package/.claude/settings.local.json +45 -0
- package/.github/workflows/ci.yml +9 -32
- package/AGENTS.md.template +41 -0
- package/BACKLOG.md +139 -0
- package/CHANGELOG.md +17 -0
- package/README.md +68 -14
- package/README_FOR_AI.md +48 -16
- package/ROADMAP.md +100 -0
- package/docs/AI_CONTEXT.md.template +19 -26
- package/docs/AI_ONBOARDING_PROMPT.md.template +16 -0
- package/docs/COMMANDS.md.template +25 -0
- package/docs/CONTEXTO.md.template +4 -17
- package/docs/DECISIONS.md.template +18 -0
- package/docs/DEEP.md.template +34 -0
- package/docs/DOCUMENTATION_GUIDE.md.template +9 -7
- package/docs/GITFLOW_PR_GUIDE.md.template +7 -0
- package/docs/INDEX.md.template +11 -0
- package/docs/QUICK.md.template +27 -0
- package/docs/STANDARD.md.template +49 -0
- package/docs/STATUS.md.template +2 -2
- package/docs/SUPPORT_MATRIX.md.template +16 -4
- package/docs/TESTING_GUIDE_FOR_AI.md.template +4 -3
- package/docs/TROUBLESHOOTING.md.template +14 -0
- package/docs/WORKFLOW.md.template +21 -4
- package/docs/examples/graph.md.template +62 -0
- package/docs/examples/next.md.template +27 -0
- package/docs/examples/plan.md.template +28 -0
- package/package.json +6 -2
- package/package.template.json +16 -0
- package/scripts/check-slice-readiness.sh +6 -4
- package/scripts/cleanup-slice.sh +2 -172
- package/scripts/init-docs.sh +147 -26
- package/scripts/package-quiver.sh +5 -0
- package/scripts/start-slice.sh +3 -425
- package/specs/[project-name]/EVIDENCE_REPORT.md.template +3 -1
- package/specs/[project-name]/HANDOFF.md.template +37 -0
- package/specs/[project-name]/slices/slice-template/slice.json +7 -2
- package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-01-project-scan-command/slice.json +1 -1
- package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-02-ai-onboarding-prompt/slice.json +1 -1
- package/specs/quiver-v08-agent-onboarding-analysis/slices/slice-03-doctor-readme-adoption-flow/slice.json +1 -1
- package/specs/quiver-v12-cross-platform-native-runtime/EVIDENCE_REPORT.md +30 -0
- package/specs/quiver-v12-cross-platform-native-runtime/SPEC.md +86 -0
- package/specs/quiver-v12-cross-platform-native-runtime/STATUS.md +29 -0
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-01-cross-platform-support-contract/slice.json +69 -0
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-02-node-init-docs-runtime/slice.json +76 -0
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-03-node-migrate-analyze-doctor-flow/slice.json +74 -0
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-04-node-slice-lifecycle-commands/slice.json +81 -0
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-05-generated-project-scripts-and-migration/slice.json +78 -0
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-06-cross-platform-ci-release-readiness/slice.json +74 -0
- package/specs/quiver-v13-token-efficient-ai-context/EVIDENCE_REPORT.md +28 -0
- package/specs/quiver-v13-token-efficient-ai-context/SPEC.md +68 -0
- package/specs/quiver-v13-token-efficient-ai-context/STATUS.md +26 -0
- package/specs/quiver-v13-token-efficient-ai-context/slices/slice-01-token-efficient-ai-modes-guidance/slice.json +65 -0
- package/specs/quiver-v13-token-efficient-ai-context/slices/slice-02-decision-log-context-checkpoint/slice.json +64 -0
- package/specs/quiver-v13-token-efficient-ai-context/slices/slice-03-project-map-reading-order/slice.json +66 -0
- package/specs/quiver-v14-tiered-context-pack/EVIDENCE_REPORT.md +42 -0
- package/specs/quiver-v14-tiered-context-pack/SPEC.md +116 -0
- package/specs/quiver-v14-tiered-context-pack/STATUS.md +35 -0
- package/specs/quiver-v14-tiered-context-pack/slices/slice-01-tiered-context-pack/slice.json +77 -0
- package/specs/quiver-v14-tiered-context-pack/slices/slice-02-agents-md-router/slice.json +74 -0
- package/specs/quiver-v14-tiered-context-pack/slices/slice-03-active-slice-lifecycle/slice.json +74 -0
- package/specs/quiver-v14-tiered-context-pack/slices/slice-04-dedup-frontmatter/slice.json +83 -0
- package/specs/quiver-v14-tiered-context-pack/slices/slice-05-doctor-smokes-tiered-pack/slice.json +84 -0
- package/specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md +26 -0
- package/specs/quiver-v15-init-required-before-migrate/SPEC.md +66 -0
- package/specs/quiver-v15-init-required-before-migrate/STATUS.md +26 -0
- package/specs/quiver-v15-init-required-before-migrate/slices/slice-01-migrate-initialization-precondition/slice.json +65 -0
- package/specs/quiver-v15-init-required-before-migrate/slices/slice-02-doctor-not-initialized-guidance/slice.json +61 -0
- package/specs/quiver-v15-init-required-before-migrate/slices/slice-03-docs-smokes-init-before-migrate/slice.json +64 -0
- package/specs/quiver-v16-handoff-contract/EVIDENCE_REPORT.md +26 -0
- package/specs/quiver-v16-handoff-contract/SPEC.md +68 -0
- package/specs/quiver-v16-handoff-contract/STATUS.md +26 -0
- package/specs/quiver-v16-handoff-contract/slices/slice-01-handoff-template-and-contract/slice.json +66 -0
- package/specs/quiver-v16-handoff-contract/slices/slice-02-check-handoff-command/slice.json +70 -0
- package/specs/quiver-v16-handoff-contract/slices/slice-03-handoff-scaffold-optional/slice.json +67 -0
- package/specs/quiver-v17-orchestration-foundation/EVIDENCE_REPORT.md +32 -0
- package/specs/quiver-v17-orchestration-foundation/SPEC.md +79 -0
- package/specs/quiver-v17-orchestration-foundation/STATUS.md +31 -0
- package/specs/quiver-v17-orchestration-foundation/slices/slice-01-ci-matrix-verified/slice.json +68 -0
- package/specs/quiver-v17-orchestration-foundation/slices/slice-02-slice-graph-library/slice.json +65 -0
- package/specs/quiver-v17-orchestration-foundation/slices/slice-03-depends-on-validation/slice.json +72 -0
- package/specs/quiver-v18-slice-orchestration/EVIDENCE_REPORT.md +38 -0
- package/specs/quiver-v18-slice-orchestration/SPEC.md +91 -0
- package/specs/quiver-v18-slice-orchestration/STATUS.md +33 -0
- package/specs/quiver-v18-slice-orchestration/slices/slice-01-plan-command/slice.json +79 -0
- package/specs/quiver-v18-slice-orchestration/slices/slice-02-graph-mvp-tree/slice.json +75 -0
- package/specs/quiver-v18-slice-orchestration/slices/slice-03-graph-extended-formats/slice.json +70 -0
- package/specs/quiver-v18-slice-orchestration/slices/slice-04-next-command/slice.json +73 -0
- package/specs/quiver-v18-stabilization/EVIDENCE_REPORT.md +26 -0
- package/specs/quiver-v18-stabilization/SPEC.md +62 -0
- package/specs/quiver-v18-stabilization/STATUS.md +30 -0
- package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/CLOSURE_BRIEF.md +29 -0
- package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/EXECUTION_BRIEF.md +134 -0
- package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/slice.json +56 -0
- package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/CLOSURE_BRIEF.md +29 -0
- package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/EXECUTION_BRIEF.md +118 -0
- package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/slice.json +57 -0
- package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/CLOSURE_BRIEF.md +23 -0
- package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/EXECUTION_BRIEF.md +73 -0
- package/specs/quiver-v18-stabilization/slices/slice-03-publish-drafts-branch/slice.json +49 -0
- package/src/create-quiver/commands/graph.js +97 -0
- package/src/create-quiver/commands/next.js +134 -0
- package/src/create-quiver/commands/plan.js +205 -0
- package/src/create-quiver/index.js +476 -123
- package/src/create-quiver/lib/analyze.js +9 -0
- package/src/create-quiver/lib/doctor.js +212 -0
- package/src/create-quiver/lib/git.js +154 -0
- package/src/create-quiver/lib/handoff.js +104 -0
- package/src/create-quiver/lib/init-docs.js +674 -0
- package/src/create-quiver/lib/json.js +14 -0
- package/src/create-quiver/lib/lifecycle.js +479 -0
- package/src/create-quiver/lib/paths.js +19 -0
- package/src/create-quiver/lib/readiness.js +354 -0
- package/src/create-quiver/lib/renderers/dot.js +129 -0
- package/src/create-quiver/lib/renderers/mermaid.js +119 -0
- package/src/create-quiver/lib/renderers/tree.js +116 -0
- package/src/create-quiver/lib/scope.js +5 -0
- package/src/create-quiver/lib/slice-graph.js +453 -0
- package/src/create-quiver/lib/slice.js +195 -0
- 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
|
+
}
|
package/specs/quiver-v16-handoff-contract/slices/slice-03-handoff-scaffold-optional/slice.json
ADDED
|
@@ -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)
|
package/specs/quiver-v17-orchestration-foundation/slices/slice-01-ci-matrix-verified/slice.json
ADDED
|
@@ -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
|
+
}
|
package/specs/quiver-v17-orchestration-foundation/slices/slice-02-slice-graph-library/slice.json
ADDED
|
@@ -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
|
+
}
|
package/specs/quiver-v17-orchestration-foundation/slices/slice-03-depends-on-validation/slice.json
ADDED
|
@@ -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.
|