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
package/specs/quiver-v14-tiered-context-pack/slices/slice-05-doctor-smokes-tiered-pack/slice.json
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-05-doctor-smokes-tiered-pack",
|
|
3
|
+
"ticket": "QUIVER-05",
|
|
4
|
+
"type": "test",
|
|
5
|
+
"title": "Doctor and Smokes for Tiered Pack",
|
|
6
|
+
"objective": "Teach `doctor` to warn when the tiered pack drifts out of contract, and add CI smokes that cover the pack, AGENTS.md, ACTIVE_SLICE lifecycle, and deduplication.",
|
|
7
|
+
"description": "Slices 01-04 introduce new artifacts. Without validation, those artifacts silently decay: QUICK grows past 50 lines, front-matter fields disappear, ACTIVE_SLICE is left orphaned after cleanup, or stack duplication creeps back in. This slice adds lightweight checks in `doctor` and cross-platform smokes in CI so the contract stays enforced. This slice also absorbs the doctor and smoke assertions originally planned for v13 slice-04, which was removed during reconciliation.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "test",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "doctor-smokes-tiered-pack",
|
|
12
|
+
"branch_name": "test/QUIVER-05-doctor-smokes-tiered-pack"
|
|
13
|
+
},
|
|
14
|
+
"must": [
|
|
15
|
+
"Extend `src/create-quiver/lib/doctor.js` (or the doctor logic in `src/create-quiver/index.js`) to print warnings when: QUICK.md exceeds 50 non-empty lines, STANDARD.md exceeds 300 non-empty lines, AGENTS.md is missing any of the six required sections, any file in `docs/ai/` is missing front-matter, `ACTIVE_SLICE.md` exists without any active worktree, or stack information appears in more than one generated file",
|
|
16
|
+
"Warnings are non-fatal: doctor still exits 0 when only warnings are present, and exits non-zero only for existing hard failures",
|
|
17
|
+
"Add a smoke script `scripts/ci/smoke-tiered-pack.sh` that: creates a scratch project, verifies tier files exist and meet size bounds, verifies AGENTS.md sections, runs start-slice and checks ACTIVE_SLICE.md, runs cleanup-slice and checks ACTIVE_SLICE.md is gone, and greps for duplicated stack info",
|
|
18
|
+
"Wire `scripts/ci/smoke-tiered-pack.sh` into the existing `smoke:create-quiver` package script or add a sibling `smoke:tiered-pack` script",
|
|
19
|
+
"Update `.github/workflows/ci.yml` so the new smoke runs on macOS, Linux, and Windows matrix entries",
|
|
20
|
+
"Smoke asserts that docs/DECISIONS.md exists in a freshly generated project",
|
|
21
|
+
"Smoke asserts that docs/PROJECT_MAP.md contains a Suggested Reading Order section",
|
|
22
|
+
"Smoke asserts that generated guidance names all four AI modes (onboarding, implementation, review, debug)",
|
|
23
|
+
"Update specs/[project-name]/EVIDENCE_REPORT.md.template guidance to prefer summarized command evidence (command, exit code, first relevant error, stacktrace, log path) over pasted long logs"
|
|
24
|
+
],
|
|
25
|
+
"not_included": [
|
|
26
|
+
"New diagnostic commands (token-cost, diff-pack are deferred to v15)",
|
|
27
|
+
"Blocking doctor on warnings (they stay informational)",
|
|
28
|
+
"Replacing existing smokes"
|
|
29
|
+
],
|
|
30
|
+
"acceptance": [
|
|
31
|
+
"Running `doctor` on a healthy v14-generated project prints zero warnings and exits 0",
|
|
32
|
+
"Running `doctor` on a project where QUICK.md has 60 non-empty lines prints a warning mentioning the 50-line budget",
|
|
33
|
+
"Running `doctor` on a project where AGENTS.md is missing the Reading Budget section prints a warning naming that section",
|
|
34
|
+
"Running `doctor` on a project where `docs/ai/STANDARD.md` has no front-matter prints a warning for that file",
|
|
35
|
+
"`smoke-tiered-pack.sh` exits 0 against a freshly generated project and non-zero when any check fails",
|
|
36
|
+
"CI matrix entries for macOS, Linux, and Windows execute the new smoke",
|
|
37
|
+
"Smoke fails if DECISIONS.md is missing after init",
|
|
38
|
+
"Smoke fails if PROJECT_MAP.md is missing the Suggested Reading Order section",
|
|
39
|
+
"Smoke fails if any of the four mode names is missing from generated guidance",
|
|
40
|
+
"Generated EVIDENCE_REPORT.md.template prefers summarized command evidence over long logs"
|
|
41
|
+
],
|
|
42
|
+
"files": [
|
|
43
|
+
"src/create-quiver/lib/doctor.js",
|
|
44
|
+
"src/create-quiver/index.js",
|
|
45
|
+
"scripts/ci/smoke-tiered-pack.sh",
|
|
46
|
+
"package.json",
|
|
47
|
+
".github/workflows/ci.yml",
|
|
48
|
+
"specs/[project-name]/EVIDENCE_REPORT.md.template",
|
|
49
|
+
"specs/quiver-v14-tiered-context-pack/SPEC.md",
|
|
50
|
+
"specs/quiver-v14-tiered-context-pack/STATUS.md",
|
|
51
|
+
"specs/quiver-v14-tiered-context-pack/EVIDENCE_REPORT.md",
|
|
52
|
+
"specs/quiver-v14-tiered-context-pack/slices/slice-05-doctor-smokes-tiered-pack/slice.json"
|
|
53
|
+
],
|
|
54
|
+
"tests": [
|
|
55
|
+
"node bin/create-quiver.js --name \"Scratch\" --dir /tmp/quiver-v14-slice-05-smoke",
|
|
56
|
+
"node bin/create-quiver.js doctor --dir /tmp/quiver-v14-slice-05-smoke",
|
|
57
|
+
"bash scripts/ci/smoke-tiered-pack.sh",
|
|
58
|
+
"awk 'NR==1,/^---$/{next} /^---$/{exit} {print}' /tmp/quiver-v14-slice-05-smoke/docs/ai/QUICK.md > /dev/null",
|
|
59
|
+
"git diff --check"
|
|
60
|
+
],
|
|
61
|
+
"documentation": [
|
|
62
|
+
"docs/TESTING_GUIDE_FOR_AI.md.template",
|
|
63
|
+
"README.md"
|
|
64
|
+
],
|
|
65
|
+
"dependencies": [
|
|
66
|
+
"slice-01-tiered-context-pack",
|
|
67
|
+
"slice-02-agents-md-router",
|
|
68
|
+
"slice-03-active-slice-lifecycle",
|
|
69
|
+
"slice-04-dedup-frontmatter"
|
|
70
|
+
],
|
|
71
|
+
"assumptions": [
|
|
72
|
+
"Warnings are more useful than hard failures for stylistic contracts; hard failures belong to migration and file presence checks",
|
|
73
|
+
"A single smoke script is easier to maintain than spreading the checks across the existing smokes",
|
|
74
|
+
"Cross-platform shell differences are already handled by the v12 CI matrix; the new smoke follows the same conventions"
|
|
75
|
+
],
|
|
76
|
+
"estimated_hours": 4,
|
|
77
|
+
"actual_hours": null,
|
|
78
|
+
"status": "completed",
|
|
79
|
+
"blocked_reason": null,
|
|
80
|
+
"ready_at": null,
|
|
81
|
+
"started_at": "2026-04-23",
|
|
82
|
+
"completed_at": "2026-04-23",
|
|
83
|
+
"actual_hours": 5
|
|
84
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Quiver v0.15 Evidence Report
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v15-init-required-before-migrate
|
|
4
|
+
**Date:** 2026-04-23
|
|
5
|
+
**Status:** Completed
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
This spec hardens `migrate` so it only upgrades projects that were already initialized by Quiver. The key outcome is that migration stops behaving like a hidden bootstrap path.
|
|
10
|
+
|
|
11
|
+
## Slice Evidence
|
|
12
|
+
|
|
13
|
+
| Slice | Status | Evidence |
|
|
14
|
+
|-------|--------|----------|
|
|
15
|
+
| slice-01 | Completed | `runMigrate()` now fails before any writes when a repo lacks Quiver initialization evidence; `src/create-quiver/lib/state.js` recognizes both initialized state metadata and strong legacy Quiver markers; `scripts/ci/smoke-create-quiver.sh` now proves that migrate fails for plain or malformed repos and still succeeds for legacy Quiver projects |
|
|
16
|
+
| slice-02 | Completed | `doctor` now fails early with an init-first message when the repo has no Quiver initialization evidence; the smoke suite proves that plain repos and malformed state get `Run init first`, while legacy Quiver projects still receive migration guidance |
|
|
17
|
+
| slice-03 | Completed | `README.md`, `README_FOR_AI.md`, and the generated README contract in `src/create-quiver/lib/init-docs.js` now state that `migrate` is only for already initialized Quiver projects; shell and cross-platform smokes assert the generated docs keep that wording |
|
|
18
|
+
|
|
19
|
+
## Required Final Evidence
|
|
20
|
+
|
|
21
|
+
- Running `npx create-quiver migrate` in a repo without Quiver initialization evidence fails before creating docs
|
|
22
|
+
- The failure message points to `npx create-quiver --name "Project Name"`
|
|
23
|
+
- Running `migrate` in an initialized or legacy Quiver project still succeeds
|
|
24
|
+
- `doctor` can explain the difference between "not initialized" and "needs migration"
|
|
25
|
+
- README and generated docs reflect the new contract
|
|
26
|
+
- Smokes cover both the failing and successful flows
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Quiver v0.15 - Init Required Before Migrate
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-04-23
|
|
4
|
+
**Status:** Completed
|
|
5
|
+
|
|
6
|
+
Slice numbering resets here: this spec starts at `slice-01` and does not continue any previous spec's numbering.
|
|
7
|
+
|
|
8
|
+
## Objective
|
|
9
|
+
|
|
10
|
+
Make `create-quiver migrate` refuse to run unless the target project was previously initialized by Quiver, so migration stops being an implicit bootstrap path.
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
|
|
14
|
+
### Included
|
|
15
|
+
|
|
16
|
+
- Require Quiver initialization metadata before `migrate` touches the filesystem
|
|
17
|
+
- Keep the failure non-destructive: if the precondition fails, no docs or templates are created
|
|
18
|
+
- Teach `doctor` to distinguish a project that was never initialized from one that only needs migration
|
|
19
|
+
- Document the new contract in README and generated docs
|
|
20
|
+
- Add smokes that prove `migrate` fails before init and succeeds after init
|
|
21
|
+
|
|
22
|
+
### Excluded
|
|
23
|
+
|
|
24
|
+
- A fallback bootstrap mode inside `migrate`
|
|
25
|
+
- New CLI commands for repair or force-migration
|
|
26
|
+
- Reworking `init`, `analyze`, or slice lifecycle semantics beyond the migration precondition
|
|
27
|
+
- Publishing a release as part of this spec
|
|
28
|
+
|
|
29
|
+
## Contract Change
|
|
30
|
+
|
|
31
|
+
The supported flows become:
|
|
32
|
+
|
|
33
|
+
For a new project:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx create-quiver --name "Project Name"
|
|
37
|
+
npx create-quiver analyze
|
|
38
|
+
npx create-quiver doctor
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
For an existing Quiver project:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx create-quiver migrate
|
|
45
|
+
npx create-quiver analyze
|
|
46
|
+
npx create-quiver doctor
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
If the project was never initialized by Quiver, `migrate` must fail with a clear message that points back to `npx create-quiver --name "Project Name"`. Legacy Quiver projects that predate `.quiver/state.json` must still be recognized from their generated workflow markers.
|
|
50
|
+
|
|
51
|
+
## Slices
|
|
52
|
+
|
|
53
|
+
| Slice | Title | Status | Spec |
|
|
54
|
+
|-------|-------|--------|------|
|
|
55
|
+
| 01 | Migrate Initialization Precondition | Completed | [slice-01](./slices/slice-01-migrate-initialization-precondition/slice.json) |
|
|
56
|
+
| 02 | Doctor Not-Initialized Guidance | Completed | [slice-02](./slices/slice-02-doctor-not-initialized-guidance/slice.json) |
|
|
57
|
+
| 03 | Docs and Smokes for Init Before Migrate | Completed | [slice-03](./slices/slice-03-docs-smokes-init-before-migrate/slice.json) |
|
|
58
|
+
|
|
59
|
+
## Definition of Done
|
|
60
|
+
|
|
61
|
+
- `migrate` fails before any file writes when Quiver initialization evidence is missing
|
|
62
|
+
- The failure message tells the developer to run `npx create-quiver --name "Project Name"`
|
|
63
|
+
- Initialized projects and legacy Quiver projects still migrate successfully
|
|
64
|
+
- `doctor` distinguishes not-initialized from not-migrated states
|
|
65
|
+
- README and generated docs explain that `migrate` is only for previously initialized projects
|
|
66
|
+
- Smokes cover both the failing and successful paths
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Quiver v0.15 Spec Status
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v15-init-required-before-migrate
|
|
4
|
+
**Last updated:** 2026-04-23
|
|
5
|
+
|
|
6
|
+
Slice numbering is local to this spec. The first slice is `slice-01`.
|
|
7
|
+
|
|
8
|
+
## Status
|
|
9
|
+
|
|
10
|
+
| Slice | Title | Status | PR | Estimated hours | Actual hours |
|
|
11
|
+
|-------|-------|--------|----|-----------------|--------------|
|
|
12
|
+
| slice-01 | Migrate Initialization Precondition | Completed | - | 3 | 2 |
|
|
13
|
+
| slice-02 | Doctor Not-Initialized Guidance | Completed | - | 2 | 1 |
|
|
14
|
+
| slice-03 | Docs and Smokes for Init Before Migrate | Completed | - | 3 | 1 |
|
|
15
|
+
|
|
16
|
+
## Progress
|
|
17
|
+
|
|
18
|
+
- Completed slices: 3 / 3
|
|
19
|
+
- Estimated hours: 8
|
|
20
|
+
- Actual hours: 4
|
|
21
|
+
|
|
22
|
+
## Blockers
|
|
23
|
+
|
|
24
|
+
| Slice | Blocker | Since | Action needed |
|
|
25
|
+
|-------|---------|-------|---------------|
|
|
26
|
+
| - | - | - | - |
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-01-migrate-initialization-precondition",
|
|
3
|
+
"ticket": "QUIVER-01",
|
|
4
|
+
"type": "feature",
|
|
5
|
+
"title": "Migrate Initialization Precondition",
|
|
6
|
+
"objective": "Block `migrate` unless the target project was previously initialized by Quiver.",
|
|
7
|
+
"description": "Today `migrate` can create Quiver docs in a repo that never ran `create-quiver --name ...`, which makes migration act like an undocumented bootstrap path. This slice adds a hard precondition based on Quiver initialization evidence and makes the failure non-destructive while preserving migration for legacy Quiver projects.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "init-before-migrate-precondition",
|
|
12
|
+
"branch_name": "feature/QUIVER-01-init-before-migrate-precondition"
|
|
13
|
+
},
|
|
14
|
+
"must": [
|
|
15
|
+
"Teach `runMigrate()` to fail before any filesystem writes when the project has no durable evidence of a prior Quiver initialization",
|
|
16
|
+
"The precondition must accept either initialized state metadata or strong legacy Quiver markers from previously generated projects",
|
|
17
|
+
"The error must tell the developer to run `npx create-quiver --name \"Project Name\"`",
|
|
18
|
+
"The failure path must not create `docs/`, `docs-template/`, or `.quiver/`"
|
|
19
|
+
],
|
|
20
|
+
"not_included": [
|
|
21
|
+
"Changing `doctor` guidance",
|
|
22
|
+
"Updating README or generated docs",
|
|
23
|
+
"Adding repair or force flags"
|
|
24
|
+
],
|
|
25
|
+
"acceptance": [
|
|
26
|
+
"Running `npx create-quiver migrate` in a repo without Quiver initialization evidence exits non-zero",
|
|
27
|
+
"Running `npx create-quiver migrate` in a repo with malformed or incomplete Quiver state and no legacy Quiver markers exits non-zero",
|
|
28
|
+
"The failure message includes `npx create-quiver --name \"Project Name\"`",
|
|
29
|
+
"A previously initialized project can still migrate successfully",
|
|
30
|
+
"A legacy Quiver project missing `.quiver/state.json` can still migrate successfully",
|
|
31
|
+
"The failing path does not create Quiver docs or template directories"
|
|
32
|
+
],
|
|
33
|
+
"files": [
|
|
34
|
+
"src/create-quiver/index.js",
|
|
35
|
+
"src/create-quiver/lib/state.js",
|
|
36
|
+
"scripts/ci/smoke-create-quiver.sh",
|
|
37
|
+
"specs/quiver-v15-init-required-before-migrate/SPEC.md",
|
|
38
|
+
"specs/quiver-v15-init-required-before-migrate/STATUS.md",
|
|
39
|
+
"specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md",
|
|
40
|
+
"specs/quiver-v15-init-required-before-migrate/slices/slice-01-migrate-initialization-precondition/slice.json"
|
|
41
|
+
],
|
|
42
|
+
"tests": [
|
|
43
|
+
"node -c src/create-quiver/index.js",
|
|
44
|
+
"node -c src/create-quiver/lib/state.js",
|
|
45
|
+
"bash scripts/ci/smoke-create-quiver.sh",
|
|
46
|
+
"git diff --check"
|
|
47
|
+
],
|
|
48
|
+
"documentation": [
|
|
49
|
+
"specs/quiver-v15-init-required-before-migrate/SPEC.md",
|
|
50
|
+
"specs/quiver-v15-init-required-before-migrate/STATUS.md",
|
|
51
|
+
"specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md"
|
|
52
|
+
],
|
|
53
|
+
"dependencies": [],
|
|
54
|
+
"assumptions": [
|
|
55
|
+
"A combination of state metadata and generated Quiver markers is enough to distinguish legacy Quiver repos from unrelated repos",
|
|
56
|
+
"Blocking before writes is more important than preserving the current bootstrap-like behavior"
|
|
57
|
+
],
|
|
58
|
+
"estimated_hours": 3,
|
|
59
|
+
"actual_hours": 2,
|
|
60
|
+
"status": "completed",
|
|
61
|
+
"blocked_reason": null,
|
|
62
|
+
"ready_at": null,
|
|
63
|
+
"started_at": "2026-04-23",
|
|
64
|
+
"completed_at": "2026-04-23"
|
|
65
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-02-doctor-not-initialized-guidance",
|
|
3
|
+
"ticket": "QUIVER-02",
|
|
4
|
+
"type": "feature",
|
|
5
|
+
"title": "Doctor Not-Initialized Guidance",
|
|
6
|
+
"objective": "Make `doctor` explain when a project was never initialized by Quiver.",
|
|
7
|
+
"description": "Once `migrate` is hardened, `doctor` must stop implying that every repo only needs migration. This slice teaches the CLI to distinguish not-initialized from not-migrated projects.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "doctor-not-initialized-guidance",
|
|
12
|
+
"branch_name": "feature/QUIVER-02-doctor-not-initialized-guidance"
|
|
13
|
+
},
|
|
14
|
+
"must": [
|
|
15
|
+
"Update `doctor` so missing init metadata points to `npx create-quiver --name \"Project Name\"` instead of migration",
|
|
16
|
+
"Keep migration guidance for projects that do have init metadata but are missing upgrade artifacts",
|
|
17
|
+
"Do not weaken existing hard failures around missing required files"
|
|
18
|
+
],
|
|
19
|
+
"not_included": [
|
|
20
|
+
"Changing README or generated docs",
|
|
21
|
+
"Changing migrate behavior"
|
|
22
|
+
],
|
|
23
|
+
"acceptance": [
|
|
24
|
+
"A repo without init metadata gets an init-first doctor message",
|
|
25
|
+
"An initialized but outdated repo still gets migration guidance",
|
|
26
|
+
"Healthy initialized projects keep the current doctor success flow"
|
|
27
|
+
],
|
|
28
|
+
"files": [
|
|
29
|
+
"src/create-quiver/index.js",
|
|
30
|
+
"src/create-quiver/lib/doctor.js",
|
|
31
|
+
"scripts/ci/smoke-create-quiver.sh",
|
|
32
|
+
"specs/quiver-v15-init-required-before-migrate/SPEC.md",
|
|
33
|
+
"specs/quiver-v15-init-required-before-migrate/STATUS.md",
|
|
34
|
+
"specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md",
|
|
35
|
+
"specs/quiver-v15-init-required-before-migrate/slices/slice-02-doctor-not-initialized-guidance/slice.json"
|
|
36
|
+
],
|
|
37
|
+
"tests": [
|
|
38
|
+
"node -c src/create-quiver/index.js",
|
|
39
|
+
"node -c src/create-quiver/lib/doctor.js",
|
|
40
|
+
"bash scripts/ci/smoke-create-quiver.sh",
|
|
41
|
+
"git diff --check"
|
|
42
|
+
],
|
|
43
|
+
"documentation": [
|
|
44
|
+
"specs/quiver-v15-init-required-before-migrate/SPEC.md",
|
|
45
|
+
"specs/quiver-v15-init-required-before-migrate/STATUS.md",
|
|
46
|
+
"specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md"
|
|
47
|
+
],
|
|
48
|
+
"dependencies": [
|
|
49
|
+
"slice-01-migrate-initialization-precondition"
|
|
50
|
+
],
|
|
51
|
+
"assumptions": [
|
|
52
|
+
"The init state can be inferred purely from Quiver metadata without guessing from generated files"
|
|
53
|
+
],
|
|
54
|
+
"estimated_hours": 2,
|
|
55
|
+
"actual_hours": 1,
|
|
56
|
+
"status": "completed",
|
|
57
|
+
"blocked_reason": null,
|
|
58
|
+
"ready_at": null,
|
|
59
|
+
"started_at": "2026-04-23",
|
|
60
|
+
"completed_at": "2026-04-23"
|
|
61
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-03-docs-smokes-init-before-migrate",
|
|
3
|
+
"ticket": "QUIVER-03",
|
|
4
|
+
"type": "docs",
|
|
5
|
+
"title": "Docs and Smokes for Init Before Migrate",
|
|
6
|
+
"objective": "Align the public docs and smoke tests with the new init-before-migrate contract.",
|
|
7
|
+
"description": "Once the CLI behavior changes, the README, generated docs, and smoke coverage must reflect the new rule so users do not keep treating `migrate` as a bootstrap path.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "docs",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "docs-smokes-init-before-migrate",
|
|
12
|
+
"branch_name": "docs/QUIVER-03-init-before-migrate-contract"
|
|
13
|
+
},
|
|
14
|
+
"must": [
|
|
15
|
+
"Document that `migrate` is only for projects previously initialized by Quiver",
|
|
16
|
+
"Update generated docs to point non-initialized repos back to `npx create-quiver --name \"Project Name\"`",
|
|
17
|
+
"Add smoke coverage for the fail-before-init path and the success-after-init path"
|
|
18
|
+
],
|
|
19
|
+
"not_included": [
|
|
20
|
+
"Changing CLI semantics beyond messaging and tests"
|
|
21
|
+
],
|
|
22
|
+
"acceptance": [
|
|
23
|
+
"README explains the init-before-migrate contract",
|
|
24
|
+
"Generated docs do not imply that `migrate` bootstraps new repos",
|
|
25
|
+
"Smokes fail if `migrate` succeeds before init"
|
|
26
|
+
],
|
|
27
|
+
"files": [
|
|
28
|
+
"README.md",
|
|
29
|
+
"README_FOR_AI.md",
|
|
30
|
+
"src/create-quiver/lib/init-docs.js",
|
|
31
|
+
"scripts/ci/smoke-create-quiver.sh",
|
|
32
|
+
"scripts/ci/smoke-cross-platform.js",
|
|
33
|
+
"specs/quiver-v15-init-required-before-migrate/SPEC.md",
|
|
34
|
+
"specs/quiver-v15-init-required-before-migrate/STATUS.md",
|
|
35
|
+
"specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md",
|
|
36
|
+
"specs/quiver-v15-init-required-before-migrate/slices/slice-03-docs-smokes-init-before-migrate/slice.json"
|
|
37
|
+
],
|
|
38
|
+
"tests": [
|
|
39
|
+
"bash scripts/ci/smoke-create-quiver.sh",
|
|
40
|
+
"node scripts/ci/smoke-cross-platform.js",
|
|
41
|
+
"git diff --check"
|
|
42
|
+
],
|
|
43
|
+
"documentation": [
|
|
44
|
+
"README.md",
|
|
45
|
+
"README_FOR_AI.md",
|
|
46
|
+
"specs/quiver-v15-init-required-before-migrate/SPEC.md",
|
|
47
|
+
"specs/quiver-v15-init-required-before-migrate/STATUS.md",
|
|
48
|
+
"specs/quiver-v15-init-required-before-migrate/EVIDENCE_REPORT.md"
|
|
49
|
+
],
|
|
50
|
+
"dependencies": [
|
|
51
|
+
"slice-01-migrate-initialization-precondition",
|
|
52
|
+
"slice-02-doctor-not-initialized-guidance"
|
|
53
|
+
],
|
|
54
|
+
"assumptions": [
|
|
55
|
+
"Public docs should describe state-based behavior, not internal implementation details"
|
|
56
|
+
],
|
|
57
|
+
"estimated_hours": 3,
|
|
58
|
+
"actual_hours": 1,
|
|
59
|
+
"status": "completed",
|
|
60
|
+
"blocked_reason": null,
|
|
61
|
+
"ready_at": null,
|
|
62
|
+
"started_at": "2026-04-23",
|
|
63
|
+
"completed_at": "2026-04-23"
|
|
64
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Quiver v0.16 Evidence Report
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v16-handoff-contract
|
|
4
|
+
**Date:** 2026-04-23
|
|
5
|
+
**Status:** Completed
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
This spec will standardize Quiver handoffs as a lightweight artifact for exceptional context transfers. The target outcome is a documented contract with minimal automation, not a new workflow layer.
|
|
10
|
+
|
|
11
|
+
## Slice Evidence
|
|
12
|
+
|
|
13
|
+
| Slice | Status | Evidence |
|
|
14
|
+
|-------|--------|----------|
|
|
15
|
+
| slice-01 | Completed | A canonical `specs/[project-name]/HANDOFF.md.template` now exists, `init-docs` and `scripts/init-docs.sh` copy it into `specs/<project-slug>/HANDOFF.md`, and the docs explain when to use a handoff versus updating a spec or slice directly |
|
|
16
|
+
| slice-02 | Completed | `create-quiver check-handoff <path>` validates path and required sections, returns non-zero on malformed handoffs, and smoke coverage proves both valid and invalid examples |
|
|
17
|
+
| slice-03 | Completed | `create-quiver new-handoff <spec-slug>` generates `specs/<spec-slug>/HANDOFF.md` from the template without overwriting an existing handoff and stays aligned with the validator contract |
|
|
18
|
+
|
|
19
|
+
## Required Final Evidence
|
|
20
|
+
|
|
21
|
+
- A canonical `HANDOFF.md.template` exists under `specs/[project-name]/`
|
|
22
|
+
- Documentation defines the canonical location, lifecycle, and required sections
|
|
23
|
+
- `check-handoff` fails clearly for missing files, wrong paths, and missing required sections
|
|
24
|
+
- A valid `HANDOFF.md` passes validation
|
|
25
|
+
- If `new-handoff` is implemented, it generates a valid handoff in the correct location and refuses accidental overwrite
|
|
26
|
+
- The contract remains separate from `slice.json` types and from `doctor`
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Quiver v0.16 - Handoff Contract
|
|
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
|
+
Formalize a lightweight `HANDOFF.md` contract for exceptional context transfers between humans and agents without turning handoffs into a new slice type or a heavier orchestration system.
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
|
|
14
|
+
### Included
|
|
15
|
+
|
|
16
|
+
- Define a canonical `HANDOFF.md` template and required sections
|
|
17
|
+
- Define the canonical location and lifecycle for handoff artifacts
|
|
18
|
+
- Add a lightweight `check-handoff` command that validates structure and placement
|
|
19
|
+
- Optionally add a `new-handoff` scaffold command for faster creation
|
|
20
|
+
- Document when a handoff should be used and when a normal spec or slice update is enough
|
|
21
|
+
|
|
22
|
+
### Excluded
|
|
23
|
+
|
|
24
|
+
- Adding a new `type` to `slice.json`
|
|
25
|
+
- Integrating handoff checks into `doctor`
|
|
26
|
+
- Persisting handoff state in `.quiver/state.json`
|
|
27
|
+
- Automatic handoff resolution, merging, or workflow orchestration
|
|
28
|
+
- Publishing a release as part of this spec
|
|
29
|
+
|
|
30
|
+
## Organic Evidence
|
|
31
|
+
|
|
32
|
+
- One real handoff already exists at [specs/quiver-v14-tiered-context-pack/HANDOFF.md](../quiver-v14-tiered-context-pack/HANDOFF.md)
|
|
33
|
+
- This spec promotes that pattern into a documented contract without assuming broader automation than the evidence supports
|
|
34
|
+
|
|
35
|
+
## Preconditions
|
|
36
|
+
|
|
37
|
+
- Before executing `slice-01`, align [ROADMAP.md](../../ROADMAP.md) and [BACKLOG.md](../../BACKLOG.md) so they reflect the already completed `v14` and `v15` work
|
|
38
|
+
|
|
39
|
+
## Proposed Contract
|
|
40
|
+
|
|
41
|
+
- Canonical path: `specs/<spec-slug>/HANDOFF.md`
|
|
42
|
+
- Canonical template source: `specs/[project-name]/HANDOFF.md.template`
|
|
43
|
+
- Required sections:
|
|
44
|
+
- `## Background`
|
|
45
|
+
- `## What you will change`
|
|
46
|
+
- `## Validation checklist`
|
|
47
|
+
- `## Out of scope`
|
|
48
|
+
- `## Expected deliverable`
|
|
49
|
+
- `## Constraints`
|
|
50
|
+
- Handoffs are exceptional artifacts for cross-cutting reconciliation, redirection, or bounded transfer of execution context
|
|
51
|
+
- A handoff must not replace `SPEC.md`, `STATUS.md`, `EVIDENCE_REPORT.md`, or `slice.json`
|
|
52
|
+
|
|
53
|
+
## Slices
|
|
54
|
+
|
|
55
|
+
| Slice | Title | Status | Spec |
|
|
56
|
+
|-------|-------|--------|------|
|
|
57
|
+
| 01 | Handoff Template and Contract | Completed | [slice-01](./slices/slice-01-handoff-template-and-contract/slice.json) |
|
|
58
|
+
| 02 | Check Handoff Command | Completed | [slice-02](./slices/slice-02-check-handoff-command/slice.json) |
|
|
59
|
+
| 03 | Handoff Scaffold Optional | Completed | [slice-03](./slices/slice-03-handoff-scaffold-optional/slice.json) |
|
|
60
|
+
|
|
61
|
+
## Definition of Done
|
|
62
|
+
|
|
63
|
+
- Quiver ships a canonical `HANDOFF.md.template` with the required sections
|
|
64
|
+
- The documentation explains where handoffs live, when to create one, and when not to
|
|
65
|
+
- `create-quiver check-handoff <path>` validates the contract and fails clearly on missing sections or wrong placement
|
|
66
|
+
- `create-quiver new-handoff <spec-slug>` can create a handoff from the template without overwriting an existing file
|
|
67
|
+
- No new `slice.json` type or handoff state machine is introduced
|
|
68
|
+
- Smokes cover the validator and, if implemented, the scaffold flow
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Quiver v0.16 Spec Status
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v16-handoff-contract
|
|
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 | Handoff Template and Contract | Completed | - | 3 | 2 |
|
|
13
|
+
| slice-02 | Check Handoff Command | Completed | - | 3 | 2 |
|
|
14
|
+
| slice-03 | Handoff Scaffold Optional | Completed | - | 2 | 2 |
|
|
15
|
+
|
|
16
|
+
## Progress
|
|
17
|
+
|
|
18
|
+
- Completed slices: 3 / 3
|
|
19
|
+
- Estimated hours: 8
|
|
20
|
+
- Actual hours: 6
|
|
21
|
+
|
|
22
|
+
## Blockers
|
|
23
|
+
|
|
24
|
+
| Slice | Blocker | Since | Action needed |
|
|
25
|
+
|-------|---------|-------|---------------|
|
|
26
|
+
| - | - | - | - |
|
package/specs/quiver-v16-handoff-contract/slices/slice-01-handoff-template-and-contract/slice.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-01-handoff-template-and-contract",
|
|
3
|
+
"ticket": "QUIVER-01",
|
|
4
|
+
"type": "docs",
|
|
5
|
+
"title": "Handoff Template and Contract",
|
|
6
|
+
"objective": "Define the canonical HANDOFF artifact, its required sections, and its lifecycle without changing the slice model.",
|
|
7
|
+
"description": "Quiver already has one real handoff artifact, but there is no formal contract yet. This slice standardizes the artifact as `specs/<spec-slug>/HANDOFF.md`, adds a reusable template at `specs/[project-name]/HANDOFF.md.template`, and documents when a handoff is appropriate versus when a normal spec or slice update is enough.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "docs",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "handoff-template-and-contract",
|
|
12
|
+
"branch_name": "docs/QUIVER-01-handoff-template-and-contract"
|
|
13
|
+
},
|
|
14
|
+
"must": [
|
|
15
|
+
"Add `specs/[project-name]/HANDOFF.md.template` with the required sections `Background`, `What you will change`, `Validation checklist`, `Out of scope`, `Expected deliverable`, and `Constraints`",
|
|
16
|
+
"Document the canonical path for concrete handoffs as `specs/<spec-slug>/HANDOFF.md`",
|
|
17
|
+
"Document when a handoff should be used and when a spec, status update, or slice update is the correct tool instead",
|
|
18
|
+
"State explicitly that handoffs do not introduce a new `slice.json` type and do not replace spec artifacts"
|
|
19
|
+
],
|
|
20
|
+
"not_included": [
|
|
21
|
+
"CLI commands",
|
|
22
|
+
"Doctor integration",
|
|
23
|
+
"Handoff state metadata",
|
|
24
|
+
"Automatic handoff generation"
|
|
25
|
+
],
|
|
26
|
+
"acceptance": [
|
|
27
|
+
"The repository contains a canonical `specs/[project-name]/HANDOFF.md.template`",
|
|
28
|
+
"The template contains all six required sections with stable headings",
|
|
29
|
+
"README and AI workflow documentation explain the canonical path and lifecycle for handoffs",
|
|
30
|
+
"The documentation explains that handoffs are exceptional artifacts and not a replacement for `SPEC.md`, `STATUS.md`, `EVIDENCE_REPORT.md`, or `slice.json`"
|
|
31
|
+
],
|
|
32
|
+
"files": [
|
|
33
|
+
"specs/[project-name]/HANDOFF.md.template",
|
|
34
|
+
"README.md",
|
|
35
|
+
"README_FOR_AI.md",
|
|
36
|
+
"docs/WORKFLOW.md.template",
|
|
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-01-handoff-template-and-contract/slice.json"
|
|
41
|
+
],
|
|
42
|
+
"tests": [
|
|
43
|
+
"rg -n \"^## Background$|^## What you will change$|^## Validation checklist$|^## Out of scope$|^## Expected deliverable$|^## Constraints$\" specs/[project-name]/HANDOFF.md.template",
|
|
44
|
+
"rg -n \"HANDOFF.md|handoff\" README.md README_FOR_AI.md docs/WORKFLOW.md.template",
|
|
45
|
+
"git diff --check"
|
|
46
|
+
],
|
|
47
|
+
"documentation": [
|
|
48
|
+
"README.md",
|
|
49
|
+
"README_FOR_AI.md",
|
|
50
|
+
"docs/WORKFLOW.md.template",
|
|
51
|
+
"specs/[project-name]/HANDOFF.md.template"
|
|
52
|
+
],
|
|
53
|
+
"dependencies": [],
|
|
54
|
+
"assumptions": [
|
|
55
|
+
"One organic handoff example is enough to justify a documented contract layer",
|
|
56
|
+
"The first step should define the artifact and its boundaries before adding automation"
|
|
57
|
+
],
|
|
58
|
+
"estimated_hours": 3,
|
|
59
|
+
"actual_hours": null,
|
|
60
|
+
"status": "completed",
|
|
61
|
+
"blocked_reason": null,
|
|
62
|
+
"ready_at": null,
|
|
63
|
+
"started_at": "2026-04-23",
|
|
64
|
+
"completed_at": "2026-04-23",
|
|
65
|
+
"actual_hours": 2
|
|
66
|
+
}
|