create-quiver 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +45 -0
- package/.github/workflows/ci.yml +2 -2
- package/BACKLOG.md +139 -0
- package/CHANGELOG.md +13 -1
- package/README.md +31 -1
- package/README_FOR_AI.md +25 -13
- package/ROADMAP.md +28 -6
- package/docs/AI_ONBOARDING_PROMPT.md.template +4 -0
- package/docs/COMMANDS.md.template +25 -0
- package/docs/INDEX.md.template +2 -0
- package/docs/SUPPORT_MATRIX.md.template +9 -0
- package/docs/WORKFLOW.md.template +4 -0
- 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 +5 -2
- package/package.template.json +8 -3
- package/scripts/check-slice-readiness.sh +6 -4
- package/scripts/init-docs.sh +57 -9
- package/specs/[project-name]/HANDOFF.md.template +37 -0
- package/specs/[project-name]/slices/slice-template/slice.json +5 -0
- 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/slices/slice-01-cross-platform-support-contract/slice.json +1 -1
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-02-node-init-docs-runtime/slice.json +1 -1
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-03-node-migrate-analyze-doctor-flow/slice.json +1 -1
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-04-node-slice-lifecycle-commands/slice.json +1 -1
- package/specs/quiver-v12-cross-platform-native-runtime/slices/slice-05-generated-project-scripts-and-migration/slice.json +1 -1
- package/specs/quiver-v13-token-efficient-ai-context/EVIDENCE_REPORT.md +1 -1
- package/specs/quiver-v13-token-efficient-ai-context/SPEC.md +1 -1
- 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 +179 -2
- package/src/create-quiver/lib/handoff.js +104 -0
- package/src/create-quiver/lib/init-docs.js +71 -13
- package/src/create-quiver/lib/json.js +14 -0
- package/src/create-quiver/lib/lifecycle.js +3 -2
- package/src/create-quiver/lib/readiness.js +55 -1
- 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/slice-graph.js +453 -0
- package/src/create-quiver/lib/slice.js +2 -1
- package/src/create-quiver/lib/state.js +50 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-04-next-command",
|
|
3
|
+
"ticket": "QUIVER-04",
|
|
4
|
+
"type": "feat",
|
|
5
|
+
"title": "`quiver:next` Command",
|
|
6
|
+
"objective": "Ship `npx create-quiver next` and `quiver:next` as the daily entry point that answers \"what do I work on right now?\" with an optional `--auto-start` shortcut behind an interactive confirmation.",
|
|
7
|
+
"description": "`quiver:next` prints the top-1 ready slice by default (the first node returned by `quiver:plan --only-ready`). With `--all-ready`, it lists the whole first level. With `--auto-start`, it prompts the user to confirm and then runs `start-slice` on the suggested slice; the prompt is mandatory on TTY and the command refuses to auto-start on a non-TTY to avoid surprises in CI.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "next-command",
|
|
12
|
+
"branch_name": "feature/QUIVER-04-next-command"
|
|
13
|
+
},
|
|
14
|
+
"must": [
|
|
15
|
+
"Create `src/create-quiver/commands/next.js` that reuses the plan ordering",
|
|
16
|
+
"Default output: print the top-1 slice plus the exact `start-slice` command to copy",
|
|
17
|
+
"Flag `--all-ready`: list every slice at the first unblocked level",
|
|
18
|
+
"Flag `--auto-start`: read a `y/N` prompt on TTY, run `start-slice` on `y`, refuse on non-TTY",
|
|
19
|
+
"Flag `--json`: emit `{ next: Slice | null, all_ready: Slice[] }`",
|
|
20
|
+
"Register `next` in `bin/create-quiver.js` and add `quiver:next` to `package.json`",
|
|
21
|
+
"Create `docs/examples/next.md` showing both read-only and `--auto-start` flows",
|
|
22
|
+
"Add a `docs/COMMANDS.md` row and update `README.md` npm scripts list",
|
|
23
|
+
"Add a `CHANGELOG.md` entry"
|
|
24
|
+
],
|
|
25
|
+
"not_included": [
|
|
26
|
+
"Silent auto-start without confirmation",
|
|
27
|
+
"Auto-start on non-TTY environments",
|
|
28
|
+
"Automatic branch merging or PR creation after the slice is started"
|
|
29
|
+
],
|
|
30
|
+
"acceptance": [
|
|
31
|
+
"`npx create-quiver next` prints a single slice and the exact `start-slice` command; running it twice returns the same slice",
|
|
32
|
+
"`npx create-quiver next --all-ready` prints every slice in level 0",
|
|
33
|
+
"`npx create-quiver next --auto-start` on a TTY prompts `Start slice X? [y/N]` and only proceeds on `y`",
|
|
34
|
+
"`npx create-quiver next --auto-start` on a non-TTY exits non-zero with a clear message and does not start anything",
|
|
35
|
+
"`--json` output is valid and parseable"
|
|
36
|
+
],
|
|
37
|
+
"files": [
|
|
38
|
+
"src/create-quiver/commands/next.js",
|
|
39
|
+
"bin/create-quiver.js",
|
|
40
|
+
"package.json",
|
|
41
|
+
"docs/examples/next.md",
|
|
42
|
+
"docs/COMMANDS.md",
|
|
43
|
+
"README.md",
|
|
44
|
+
"CHANGELOG.md",
|
|
45
|
+
"tests/commands/next.test.js",
|
|
46
|
+
"specs/quiver-v18-slice-orchestration/slices/slice-04-next-command/slice.json"
|
|
47
|
+
],
|
|
48
|
+
"tests": [
|
|
49
|
+
"node --test tests/commands/next.test.js",
|
|
50
|
+
"node bin/create-quiver.js next --json > /tmp/quiver-next.json",
|
|
51
|
+
"node -e \"const n=require('/tmp/quiver-next.json'); if(!('next' in n)) process.exit(1)\"",
|
|
52
|
+
"git diff --check"
|
|
53
|
+
],
|
|
54
|
+
"documentation": [
|
|
55
|
+
"docs/examples/next.md",
|
|
56
|
+
"docs/COMMANDS.md",
|
|
57
|
+
"README.md",
|
|
58
|
+
"CHANGELOG.md"
|
|
59
|
+
],
|
|
60
|
+
"dependencies": ["slice-01-plan-command"],
|
|
61
|
+
"assumptions": [
|
|
62
|
+
"Users accept that `next` is a suggestion and not a commitment",
|
|
63
|
+
"Interactive TTY prompts are acceptable in CLI tools for destructive actions",
|
|
64
|
+
"`start-slice` already handles worktree creation and is idempotent enough to tolerate re-runs"
|
|
65
|
+
],
|
|
66
|
+
"estimated_hours": 3,
|
|
67
|
+
"actual_hours": 4,
|
|
68
|
+
"status": "completed",
|
|
69
|
+
"blocked_reason": null,
|
|
70
|
+
"ready_at": null,
|
|
71
|
+
"started_at": "2026-04-24T00:00:00Z",
|
|
72
|
+
"completed_at": "2026-04-24T00:00:00Z"
|
|
73
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Quiver v0.18 Stabilization — Evidence Report
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v18-stabilization
|
|
4
|
+
**Date:** 2026-05-12
|
|
5
|
+
**Status:** Completed
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
3/3 slices completados. `quiver:plan` exit 0 en el propio repo, ROADMAP sin `(unreleased)`, drafts branch publicada en origin con SHA verificado.
|
|
10
|
+
|
|
11
|
+
## Slice Evidence
|
|
12
|
+
|
|
13
|
+
| Slice | Status | Evidence |
|
|
14
|
+
|-------|--------|----------|
|
|
15
|
+
| slice-01 | Completed | PR #54 merged 2026-05-12. `node --test tests/**/*.test.js` → 32/32 pass. `node bin/create-quiver.js plan` → exit 0, 8 slices, 40h. `plan --json` → valid JSON con `plan`, `critical_path`, `total_hours`. Commit: `11c821e`. |
|
|
16
|
+
| slice-02 | Completed | PR #56 merged 2026-05-12. `grep 'unreleased' ROADMAP.md` → sin match. `grep 'v0.6 (shipped)' ROADMAP.md` → match. ~29 branches merged eliminados + 2 backups + 4 worktrees stale prunados. |
|
|
17
|
+
| slice-03 | Completed | Push directo 2026-05-12. SHA local `13eab96e4d0a9e34ba1ea1add3b969603eda255c` = SHA remoto. Sin PR (rama de referencia, no candidata a merge). |
|
|
18
|
+
|
|
19
|
+
## Final Evidence
|
|
20
|
+
|
|
21
|
+
- `npx create-quiver plan` → exit 0, 8 slices, 40h. ✓
|
|
22
|
+
- `npx create-quiver plan --json` → JSON válido con `plan`, `critical_path`, `total_hours`. ✓
|
|
23
|
+
- `git branch | grep backup` → sin output. ✓
|
|
24
|
+
- `ROADMAP.md` → `v0.6 (shipped)`, sin `(unreleased)`. ✓
|
|
25
|
+
- `git ls-remote origin drafts/v19-v22-orchestration-followups` → `13eab96e4d0a9e34ba1ea1add3b969603eda255c`. ✓
|
|
26
|
+
- `node --test tests/**/*.test.js` → 32/32 pass. ✓
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Quiver v0.18 Stabilization
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-05-12
|
|
4
|
+
**Status:** Ready
|
|
5
|
+
|
|
6
|
+
Slice numbering resets here: this spec starts at `slice-01` and does not continue any previous spec's numbering.
|
|
7
|
+
|
|
8
|
+
## Objective
|
|
9
|
+
|
|
10
|
+
Close the three loose ends left after v18 merged: fix a crash in `slice-graph.js` that blocks the v18 validation checkpoint, clean up stale local branches and an unclosed ROADMAP entry, and publish the parked draft specs to origin once the checkpoint passes.
|
|
11
|
+
|
|
12
|
+
## Context
|
|
13
|
+
|
|
14
|
+
v17 and v18 shipped all planned slices and closed their PRs. During the post-merge smoke test, `npx create-quiver plan` was found to crash on the Quiver repo itself with `SliceGraphError: Missing dependency reference(s)`. The root cause is a one-line normalization bug in `slice-graph.js`: slices with the legacy `"dependencies"` field using bare spec names (e.g. `"quiver-v01"`) get expanded to an invalid ref that the graph validator then rejects. The fix is minimal and non-breaking.
|
|
15
|
+
|
|
16
|
+
The remaining two slices are housekeeping: one commit to close the `v0.6 (unreleased)` entry in ROADMAP and delete stale local branches; one `git push` to publish the parked v19–v22 draft specs once the v18 human checkpoint is confirmed.
|
|
17
|
+
|
|
18
|
+
## Scope
|
|
19
|
+
|
|
20
|
+
### Included
|
|
21
|
+
|
|
22
|
+
- Fix `normalizeDependencyRef` in `src/create-quiver/lib/slice-graph.js` to silently drop legacy spec-name bare deps.
|
|
23
|
+
- Add a test case covering the legacy format.
|
|
24
|
+
- Close `v0.6 (unreleased)` in `ROADMAP.md`.
|
|
25
|
+
- Delete local stale branches (merged + backup branches).
|
|
26
|
+
- Publish `drafts/v19-v22-orchestration-followups` to origin (gated by human checkpoint).
|
|
27
|
+
|
|
28
|
+
### Excluded
|
|
29
|
+
|
|
30
|
+
- Any change to the output or behavior of `plan`, `graph`, or `next` beyond the crash fix.
|
|
31
|
+
- Changes to slice.json schema or validation rules beyond the legacy-dep case.
|
|
32
|
+
- Version bump — this spec does not increment the package version.
|
|
33
|
+
- Any v19 work — that starts only after the checkpoint of this spec passes.
|
|
34
|
+
|
|
35
|
+
## Slices
|
|
36
|
+
|
|
37
|
+
| Slice | Title | Status | Estimated hours |
|
|
38
|
+
|-------|-------|--------|-----------------|
|
|
39
|
+
| slice-01 | Fix legacy dependency resolution in `slice-graph.js` | Ready | 0.5 |
|
|
40
|
+
| slice-02 | Close v0.6 in ROADMAP and clean stale branches | Ready | 0.3 |
|
|
41
|
+
| [GATE] | Human checkpoint: v18 real-use validation | — | 1–2 weeks |
|
|
42
|
+
| slice-03 | Publish `drafts/v19-v22-orchestration-followups` to origin | Blocked by gate | 0.1 |
|
|
43
|
+
|
|
44
|
+
## Gate — Human Checkpoint
|
|
45
|
+
|
|
46
|
+
slice-03 is blocked until the maintainer:
|
|
47
|
+
1. Uses `quiver:plan`, `quiver:graph`, and `quiver:next` in at least one real work cycle.
|
|
48
|
+
2. Records an observation in `specs/quiver-v18-slice-orchestration/EVIDENCE_REPORT.md`.
|
|
49
|
+
3. Confirms the checkpoint explicitly before delegating slice-03.
|
|
50
|
+
|
|
51
|
+
## Definition of Done
|
|
52
|
+
|
|
53
|
+
- `npx create-quiver plan` exits 0 on the Quiver repo.
|
|
54
|
+
- `npx create-quiver plan --json` returns valid JSON.
|
|
55
|
+
- `ROADMAP.md` no longer has `v0.6 (unreleased)`.
|
|
56
|
+
- `git branch` has no backup or already-merged stale branches.
|
|
57
|
+
- `origin/drafts/v19-v22-orchestration-followups` exists and matches local SHA.
|
|
58
|
+
- All existing tests pass.
|
|
59
|
+
|
|
60
|
+
## Validation Checkpoint
|
|
61
|
+
|
|
62
|
+
This spec's checkpoint passes when all three slices are merged/executed and the human gate is confirmed. There is no usage-time requirement beyond the gate — this is stabilization, not a new feature.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Quiver v0.18 Stabilization — Status
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v18-stabilization
|
|
4
|
+
**Last updated:** 2026-05-12
|
|
5
|
+
|
|
6
|
+
Slice numbering is local to this spec. The first slice is `slice-01`.
|
|
7
|
+
|
|
8
|
+
## Status
|
|
9
|
+
|
|
10
|
+
| Slice | Title | Status | PR | Estimated hours | Actual hours |
|
|
11
|
+
|-------|-------|--------|----|-----------------|--------------|
|
|
12
|
+
| slice-01 | Fix legacy dependency resolution in `slice-graph.js` | Completed | #54 | 0.5 | 0.5 |
|
|
13
|
+
| slice-02 | Close v0.6 in ROADMAP and clean stale branches | Completed | #56 | 0.3 | 0.1 |
|
|
14
|
+
| slice-03 | Publish `drafts/v19-v22-orchestration-followups` | Completed | — | 0.1 | 0.1 |
|
|
15
|
+
|
|
16
|
+
## Progress
|
|
17
|
+
|
|
18
|
+
- Completed slices: 3 / 3
|
|
19
|
+
- Estimated hours: 0.9
|
|
20
|
+
- Actual hours: 0.7
|
|
21
|
+
|
|
22
|
+
## Blockers
|
|
23
|
+
|
|
24
|
+
_None — spec complete._
|
|
25
|
+
|
|
26
|
+
## Dependencies
|
|
27
|
+
|
|
28
|
+
- slice-01 has no dependencies (can run immediately)
|
|
29
|
+
- slice-02 has no dependencies (can run immediately, parallel to slice-01)
|
|
30
|
+
- slice-03 depends on human gate confirmation — not on slice-01 or slice-02 in code, but run last
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# CLOSURE BRIEF — slice-01: Fix legacy dependency resolution
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v18-stabilization
|
|
4
|
+
**Slice:** slice-01-fix-legacy-dependency-resolution
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Checklist antes de abrir el PR
|
|
9
|
+
|
|
10
|
+
- [ ] `node --test tests/` → exit 0, sin tests en rojo.
|
|
11
|
+
- [ ] `node bin/create-quiver.js plan` → exit 0, imprime el plan del repo.
|
|
12
|
+
- [ ] `node bin/create-quiver.js plan --json` → JSON válido con `plan`, `critical_path`, `total_hours`.
|
|
13
|
+
- [ ] `git diff --stat` muestra exactamente dos archivos: `src/create-quiver/lib/slice-graph.js` y el archivo de test.
|
|
14
|
+
- [ ] El test nuevo cubre: (a) legacy bare dep no tira error, (b) nuevo formato `depends_on` sigue funcionando.
|
|
15
|
+
- [ ] El commit tiene un mensaje que explica el *por qué* (ver EXECUTION_BRIEF).
|
|
16
|
+
|
|
17
|
+
## Checklist del PR
|
|
18
|
+
|
|
19
|
+
- [ ] Branch: `bugfix/QUIVER-01-fix-legacy-dependency-resolution` → `main`.
|
|
20
|
+
- [ ] Título del PR: `bugfix(QUIVER-01): ignore legacy bare spec deps in normalizeDependencyRef`.
|
|
21
|
+
- [ ] Body del PR sigue las secciones del `docs/GITFLOW_PR_GUIDE.md.template`: Title, Summary, Scope, Files, How to Test, Evidence, Rollback, Risks / Notes.
|
|
22
|
+
- [ ] En "Evidence": incluir la salida de `npx create-quiver plan` (primeras líneas) y `npx create-quiver plan --json | head`.
|
|
23
|
+
- [ ] En "Rollback": `git revert HEAD --no-edit` es suficiente.
|
|
24
|
+
- [ ] En "Risks / Notes": mencionar que el drop silencioso es intencional y que los slices legacy ya están completados.
|
|
25
|
+
|
|
26
|
+
## Post-merge
|
|
27
|
+
|
|
28
|
+
- [ ] Actualizar `specs/quiver-v18-stabilization/STATUS.md`: slice-01 → `Completed`, agregar número de PR y `actual_hours`.
|
|
29
|
+
- [ ] Actualizar `specs/quiver-v18-stabilization/EVIDENCE_REPORT.md`: registrar evidencia del slice.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# EXECUTION BRIEF — slice-01: Fix legacy dependency resolution
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v18-stabilization
|
|
4
|
+
**Slice:** slice-01-fix-legacy-dependency-resolution
|
|
5
|
+
**Estimated time:** 30 min
|
|
6
|
+
**Branch:** `bugfix/QUIVER-01-fix-legacy-dependency-resolution` from `main`
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Contexto
|
|
11
|
+
|
|
12
|
+
`npx create-quiver plan` crashea en el repo de Quiver con:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
SliceGraphError: Missing dependency reference(s):
|
|
16
|
+
quiver-v02-bootstrap-hardening/slice-01-path-remote-safety -> quiver-v02-bootstrap-hardening/quiver-v01
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Causa:** `normalizeDependencyRef` en `src/create-quiver/lib/slice-graph.js` (línea ~65) toma el valor bare `"quiver-v01"` del campo legacy `"dependencies"`, no encuentra `/`, y devuelve `"quiver-v02-bootstrap-hardening/quiver-v01"`. Ese ref no existe en el mapa de slices → `buildGraph` tira error.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## El único archivo que tocás
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
src/create-quiver/lib/slice-graph.js
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Cambio exacto
|
|
32
|
+
|
|
33
|
+
Localizá la función `normalizeDependencyRef`. Actualmente luce así:
|
|
34
|
+
|
|
35
|
+
```js
|
|
36
|
+
function normalizeDependencyRef(slice, dependency) {
|
|
37
|
+
const dep = String(dependency || '').trim();
|
|
38
|
+
if (!dep) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (dep.includes('/')) {
|
|
43
|
+
return dep;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (!slice || !slice.specSlug) {
|
|
47
|
+
return dep;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return `${slice.specSlug}/${dep}`;
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Agregá una sola guarda antes del `return` final:
|
|
55
|
+
|
|
56
|
+
```js
|
|
57
|
+
function normalizeDependencyRef(slice, dependency) {
|
|
58
|
+
const dep = String(dependency || '').trim();
|
|
59
|
+
if (!dep) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (dep.includes('/')) {
|
|
64
|
+
return dep;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (!slice || !slice.specSlug) {
|
|
68
|
+
return dep;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Legacy format: bare spec names (no 'slice-' prefix) are spec-level deps already
|
|
72
|
+
// satisfied by definition. Return null so they are filtered and not validated.
|
|
73
|
+
if (!dep.startsWith('slice-')) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return `${slice.specSlug}/${dep}`;
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Eso es todo el cambio funcional.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Test a agregar
|
|
86
|
+
|
|
87
|
+
Ubicá `tests/lib/slice-graph.test.js` (o el archivo de test existente para slice-graph). Agregá un caso que cubra:
|
|
88
|
+
|
|
89
|
+
1. Un slice con `"dependencies": ["quiver-v01"]` (formato legacy bare) no tira error en `buildGraph` y no produce aristas para ese dep.
|
|
90
|
+
2. Un slice con `"depends_on": ["other-spec/slice-01-foo"]` sigue produciendo la arista correcta (regresión).
|
|
91
|
+
|
|
92
|
+
Seguí el estilo de los tests existentes en ese archivo.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Verificación antes de commitear
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# 1. Todos los tests pasan
|
|
100
|
+
node --test tests/
|
|
101
|
+
|
|
102
|
+
# 2. El comando ya no crashea
|
|
103
|
+
node bin/create-quiver.js plan
|
|
104
|
+
|
|
105
|
+
# 3. JSON válido
|
|
106
|
+
node bin/create-quiver.js plan --json | node -e \
|
|
107
|
+
"const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')); \
|
|
108
|
+
if(!Array.isArray(d.plan)||typeof d.total_hours!=='number') process.exit(1); \
|
|
109
|
+
console.log('ok:', d.plan.length, 'slices')"
|
|
110
|
+
|
|
111
|
+
# 4. Diff limpio — solo los dos archivos esperados
|
|
112
|
+
git diff --stat HEAD
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Restricciones
|
|
118
|
+
|
|
119
|
+
- **No** toques `buildGraph`, `inferDependencies`, ni ninguna otra función.
|
|
120
|
+
- **No** agregues warnings ni logs para los deps descartados — el drop es silencioso.
|
|
121
|
+
- **No** edites ningún `slice.json` de specs antiguas.
|
|
122
|
+
- **No** cambies el comportamiento del nuevo formato `"depends_on"` con `spec/slice-id`.
|
|
123
|
+
- **Un solo commit.** Mensaje sugerido:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
bugfix(QUIVER-01): ignore legacy bare spec deps in normalizeDependencyRef
|
|
127
|
+
|
|
128
|
+
Old slice.json files use "dependencies": ["quiver-vNN"] with bare spec names.
|
|
129
|
+
normalizeDependencyRef was expanding them to "spec-slug/quiver-vNN" which
|
|
130
|
+
doesn't match any slice, causing buildGraph to throw MISSING_DEPENDENCY.
|
|
131
|
+
|
|
132
|
+
Guard: values without '/' that don't start with 'slice-' are spec-level refs
|
|
133
|
+
already satisfied — return null so they are filtered before graph validation.
|
|
134
|
+
```
|
package/specs/quiver-v18-stabilization/slices/slice-01-fix-legacy-dependency-resolution/slice.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-01-fix-legacy-dependency-resolution",
|
|
3
|
+
"ticket": "QUIVER-01",
|
|
4
|
+
"type": "bugfix",
|
|
5
|
+
"title": "Fix legacy dependency resolution in `slice-graph.js`",
|
|
6
|
+
"objective": "Make `npx create-quiver plan` exit 0 on the Quiver repo by ignoring bare spec-name values in the legacy `\"dependencies\"` field instead of crashing with `MISSING_DEPENDENCY`.",
|
|
7
|
+
"description": "Old slice.json files (v01–v16) declare cross-spec dependencies with bare spec names in a `\"dependencies\"` array, e.g. `[\"quiver-v01\"]`. The `normalizeDependencyRef` function in `slice-graph.js` expands bare values by prepending the current spec slug, producing refs like `quiver-v02-bootstrap-hardening/quiver-v01`. These refs do not match any slice key, causing `buildGraph` to throw `SliceGraphError: Missing dependency reference(s)`. The fix is one guard: if a bare value does not start with `slice-`, it is a spec-level legacy ref and must be returned as null (filtered). The new `\"depends_on\"` format with full `spec/slice-id` paths is unaffected.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "bugfix",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "fix-legacy-dependency-resolution",
|
|
12
|
+
"branch_name": "bugfix/QUIVER-01-fix-legacy-dependency-resolution"
|
|
13
|
+
},
|
|
14
|
+
"must": [
|
|
15
|
+
"Add a guard in `normalizeDependencyRef` that returns `null` when the bare dependency value does not start with `slice-`",
|
|
16
|
+
"Leave all other logic in `normalizeDependencyRef` and `buildGraph` unchanged",
|
|
17
|
+
"Add a unit test that exercises the legacy `\"dependencies\": [\"quiver-vNN\"]` format and confirms no error is thrown and no edge is produced",
|
|
18
|
+
"Run `node --test tests/` and confirm all tests pass",
|
|
19
|
+
"Run `npx create-quiver plan` on the Quiver repo and confirm exit 0"
|
|
20
|
+
],
|
|
21
|
+
"not_included": [
|
|
22
|
+
"Changing the output or behavior of `plan`, `graph`, or `next`",
|
|
23
|
+
"Migrating old slice.json files to the new `depends_on` format",
|
|
24
|
+
"Adding warnings or notices for legacy deps — silent drop is intentional",
|
|
25
|
+
"Any other file besides `src/create-quiver/lib/slice-graph.js` and `tests/`"
|
|
26
|
+
],
|
|
27
|
+
"acceptance": [
|
|
28
|
+
"`npx create-quiver plan` exits 0 on the Quiver repo",
|
|
29
|
+
"`npx create-quiver plan --json` returns valid JSON with `plan`, `critical_path`, and `total_hours`",
|
|
30
|
+
"A test with `\"dependencies\": [\"quiver-v01\"]` does not throw and produces zero edges for that dep",
|
|
31
|
+
"A test with `\"depends_on\": [\"other-spec/slice-01-foo\"]` still produces the expected edge (regression)",
|
|
32
|
+
"`node --test tests/` exits 0"
|
|
33
|
+
],
|
|
34
|
+
"files": [
|
|
35
|
+
"src/create-quiver/lib/slice-graph.js",
|
|
36
|
+
"tests/lib/slice-graph.test.js"
|
|
37
|
+
],
|
|
38
|
+
"tests": [
|
|
39
|
+
"node --test tests/",
|
|
40
|
+
"node bin/create-quiver.js plan > /dev/null",
|
|
41
|
+
"node bin/create-quiver.js plan --json | node -e \"const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')); if(!Array.isArray(d.plan)) process.exit(1)\""
|
|
42
|
+
],
|
|
43
|
+
"documentation": [],
|
|
44
|
+
"depends_on": [],
|
|
45
|
+
"assumptions": [
|
|
46
|
+
"All old slices using bare spec names in `\"dependencies\"` are already completed — silently dropping them causes no operational loss",
|
|
47
|
+
"No slice uses a bare dep that starts with `slice-` and refers to a different spec (would be an ambiguous format)"
|
|
48
|
+
],
|
|
49
|
+
"estimated_hours": 0.5,
|
|
50
|
+
"actual_hours": 0.5,
|
|
51
|
+
"status": "completed",
|
|
52
|
+
"blocked_reason": null,
|
|
53
|
+
"ready_at": "2026-05-12T00:00:00Z",
|
|
54
|
+
"started_at": "2026-05-12T00:00:00Z",
|
|
55
|
+
"completed_at": "2026-05-12T00:00:00Z"
|
|
56
|
+
}
|
package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/CLOSURE_BRIEF.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# CLOSURE BRIEF — slice-02: ROADMAP v0.6 y limpieza de branches
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v18-stabilization
|
|
4
|
+
**Slice:** slice-02-roadmap-and-branch-cleanup
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Checklist antes de abrir el PR
|
|
9
|
+
|
|
10
|
+
- [ ] `grep 'unreleased' ROADMAP.md` → retorna vacío (exit 1 en grep, que es lo correcto).
|
|
11
|
+
- [ ] `grep 'v0.6 (shipped)' ROADMAP.md` → retorna match.
|
|
12
|
+
- [ ] `git branch | grep backup` → retorna vacío.
|
|
13
|
+
- [ ] `git branch --merged main` → lista solo `main` (y `develop` si aplica). No hay branches de feature/docs/ci/test.
|
|
14
|
+
- [ ] `git diff --stat HEAD` → solo `ROADMAP.md`.
|
|
15
|
+
|
|
16
|
+
## Checklist del PR
|
|
17
|
+
|
|
18
|
+
- [ ] Branch: `docs/QUIVER-02-close-v06-roadmap` → `main`.
|
|
19
|
+
- [ ] Título: `docs(QUIVER-02): close v0.6 as shipped in ROADMAP`.
|
|
20
|
+
- [ ] Body del PR sigue las secciones del `docs/GITFLOW_PR_GUIDE.md.template`.
|
|
21
|
+
- [ ] En "Summary": mencionar ambas acciones (ROADMAP edit + branch cleanup local).
|
|
22
|
+
- [ ] En "Scope": aclarar que la limpieza de branches es local-only, sin diff.
|
|
23
|
+
- [ ] En "How to Test": `grep 'unreleased' ROADMAP.md` debe retornar sin match.
|
|
24
|
+
- [ ] En "Rollback": `git revert HEAD --no-edit` restaura ROADMAP.md. Las branches borradas no se recuperan automáticamente (pero estaban mergeadas, sin trabajo único).
|
|
25
|
+
|
|
26
|
+
## Post-merge
|
|
27
|
+
|
|
28
|
+
- [ ] Actualizar `specs/quiver-v18-stabilization/STATUS.md`: slice-02 → `Completed`, agregar PR y `actual_hours`.
|
|
29
|
+
- [ ] Actualizar `specs/quiver-v18-stabilization/EVIDENCE_REPORT.md`: registrar evidencia.
|
package/specs/quiver-v18-stabilization/slices/slice-02-roadmap-and-branch-cleanup/EXECUTION_BRIEF.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# EXECUTION BRIEF — slice-02: ROADMAP v0.6 y limpieza de branches
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v18-stabilization
|
|
4
|
+
**Slice:** slice-02-roadmap-and-branch-cleanup
|
|
5
|
+
**Estimated time:** 20 min
|
|
6
|
+
**Branch:** `docs/QUIVER-02-close-v06-roadmap` from `main`
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Contexto
|
|
11
|
+
|
|
12
|
+
Dos fuentes de ruido a eliminar:
|
|
13
|
+
|
|
14
|
+
1. `ROADMAP.md` tiene `## v0.6 (unreleased)` aunque su scope (Node-native runtime, `quiver:*` scripts) fue absorbido y publicado en v0.7. Es una entrada engañosa.
|
|
15
|
+
2. El repo tiene ~35 branches locales que son backup artifacts o branches de PRs ya mergeados a main. No bloquean nada, pero añaden ruido a `git branch`.
|
|
16
|
+
|
|
17
|
+
**La limpieza de branches es local y no produce commit.** El único artefacto que va al PR es el cambio en `ROADMAP.md`.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Parte A — Limpieza de branches (local, sin commit)
|
|
22
|
+
|
|
23
|
+
### Paso 1: Listar branches ya merged a main
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
git branch --merged main
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Deberías ver una lista larga. Anotá mentalmente las excepciones que NO debes borrar:
|
|
30
|
+
- `main`
|
|
31
|
+
- `develop`
|
|
32
|
+
- `drafts/v19-v22-orchestration-followups`
|
|
33
|
+
|
|
34
|
+
Todo lo demás en esa lista es candidato a eliminar.
|
|
35
|
+
|
|
36
|
+
### Paso 2: Verificar que no hay trabajo no mergeado en esas branches
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
git branch --no-merged main
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Si aparece algo inesperado que no sean las tres excepciones de arriba, revisalo antes de borrar. Si hay dudas, no borrés esa branch.
|
|
43
|
+
|
|
44
|
+
### Paso 3: Borrar branches mergeadas (una por una o en lote)
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Borra todas las merged excepto main/develop/drafts de un golpe:
|
|
48
|
+
git branch --merged main \
|
|
49
|
+
| grep -vE "^\*|^ main$|^ develop$|^ drafts/" \
|
|
50
|
+
| xargs git branch -d
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Paso 4: Borrar las dos branches de backup explícitamente
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git branch -d backup/main-before-reconcile-20260512-094512
|
|
57
|
+
git branch -d backup/main-before-reconcile-20260512-094712
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Paso 5: Verificar
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
git branch | wc -l # debería ser significativamente menor que 35
|
|
64
|
+
git branch | grep backup # debe retornar vacío
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Parte B — ROADMAP.md (sí va al PR)
|
|
70
|
+
|
|
71
|
+
### El único cambio
|
|
72
|
+
|
|
73
|
+
En `ROADMAP.md`, localizá la sección:
|
|
74
|
+
|
|
75
|
+
```markdown
|
|
76
|
+
## v0.6 (unreleased)
|
|
77
|
+
|
|
78
|
+
- Cross-platform CI matrix (macOS, Linux, Windows) for Node-native runtime
|
|
79
|
+
- Node-native generated project npm scripts (`quiver:*`)
|
|
80
|
+
- Additive migration support for existing projects
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Reemplazá el encabezado y agregá la nota:
|
|
84
|
+
|
|
85
|
+
```markdown
|
|
86
|
+
## v0.6 (shipped)
|
|
87
|
+
|
|
88
|
+
> Scope absorbed into v0.7. Node-native runtime and `quiver:*` npm scripts
|
|
89
|
+
> landed together with the token-efficient context pack work.
|
|
90
|
+
|
|
91
|
+
- Cross-platform CI matrix (macOS, Linux, Windows) for Node-native runtime
|
|
92
|
+
- Node-native generated project npm scripts (`quiver:*`)
|
|
93
|
+
- Additive migration support for existing projects
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Nada más. No toques ninguna otra sección.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Commit y PR
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
git add ROADMAP.md
|
|
104
|
+
git commit -m "docs(QUIVER-02): close v0.6 as shipped in ROADMAP"
|
|
105
|
+
git push origin docs/QUIVER-02-close-v06-roadmap
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Abrí el PR con `gh pr create` apuntando a `main`. El body del PR documenta ambas partes (aunque la limpieza de branches no tiene diff, mencionala en el Summary para trazabilidad).
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Restricciones
|
|
113
|
+
|
|
114
|
+
- **No** toques ninguna otra sección de ROADMAP.md.
|
|
115
|
+
- **No** borres branches en origin — solo local.
|
|
116
|
+
- **No** borres `drafts/v19-v22-orchestration-followups` ni `develop` ni `main`.
|
|
117
|
+
- **No** agregues nada a CHANGELOG.md — este cambio no es una feature.
|
|
118
|
+
- El diff del PR debe mostrar solo `ROADMAP.md`.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-02-roadmap-and-branch-cleanup",
|
|
3
|
+
"ticket": "QUIVER-02",
|
|
4
|
+
"type": "chore",
|
|
5
|
+
"title": "Close v0.6 in ROADMAP and clean stale local branches",
|
|
6
|
+
"objective": "Remove two sources of noise: the `v0.6 (unreleased)` entry in ROADMAP.md (the scope shipped in v0.7) and ~35 stale local branches that are already merged to main or are backup artifacts.",
|
|
7
|
+
"description": "v0.6 was never formally closed in ROADMAP.md even though its scope (Node-native runtime, `quiver:*` scripts) landed in v0.7. The entry currently reads `v0.6 (unreleased)`, which is misleading. Additionally, 35 local branches accumulate since earlier in development — two are explicit backup branches created today, the rest are feature/docs/ci branches whose PRs were merged to main months ago. The branch cleanup is a local-only operation with no commit. The ROADMAP fix is a one-line edit that goes in a docs PR.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "docs",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "close-v06-roadmap",
|
|
12
|
+
"branch_name": "docs/QUIVER-02-close-v06-roadmap"
|
|
13
|
+
},
|
|
14
|
+
"must": [
|
|
15
|
+
"Edit `ROADMAP.md`: replace `## v0.6 (unreleased)` with `## v0.6 (shipped)` and add a one-line note: scope (Node-native runtime, `quiver:*` npm scripts) was absorbed and shipped as part of v0.7",
|
|
16
|
+
"Delete locally: `backup/main-before-reconcile-20260512-094512` and `backup/main-before-reconcile-20260512-094712`",
|
|
17
|
+
"Delete locally all branches returned by `git branch --merged main` except `main`, `develop`, and `drafts/v19-v22-orchestration-followups`",
|
|
18
|
+
"Confirm no branch with unmerged work is deleted — run `git branch --no-merged main` and verify the list before deleting anything",
|
|
19
|
+
"Commit only `ROADMAP.md` — branch cleanup produces no commit"
|
|
20
|
+
],
|
|
21
|
+
"not_included": [
|
|
22
|
+
"Editing any other section of ROADMAP.md",
|
|
23
|
+
"Deleting branches on origin — local cleanup only",
|
|
24
|
+
"Closing or editing CHANGELOG.md",
|
|
25
|
+
"Any source code changes"
|
|
26
|
+
],
|
|
27
|
+
"acceptance": [
|
|
28
|
+
"`grep 'unreleased' ROADMAP.md` returns no match",
|
|
29
|
+
"`grep 'v0.6 (shipped)' ROADMAP.md` returns a match",
|
|
30
|
+
"`git branch` shows no `backup/*` branches",
|
|
31
|
+
"`git branch --merged main` returns only `main` (and `develop` if present) — no stale feature/docs/ci branches",
|
|
32
|
+
"PR diff contains only `ROADMAP.md` changes"
|
|
33
|
+
],
|
|
34
|
+
"files": [
|
|
35
|
+
"ROADMAP.md"
|
|
36
|
+
],
|
|
37
|
+
"tests": [
|
|
38
|
+
"grep -c 'unreleased' ROADMAP.md | grep -q '^0$'",
|
|
39
|
+
"git branch --merged main",
|
|
40
|
+
"git branch | grep backup | wc -l | grep -q '^0$'"
|
|
41
|
+
],
|
|
42
|
+
"documentation": [
|
|
43
|
+
"ROADMAP.md"
|
|
44
|
+
],
|
|
45
|
+
"depends_on": [],
|
|
46
|
+
"assumptions": [
|
|
47
|
+
"All branches returned by `git branch --merged main` (except main/develop/drafts) are safe to delete — they were created from merged PRs",
|
|
48
|
+
"No branch other than `drafts/v19-v22-orchestration-followups` contains uncommitted or unmerged work worth preserving"
|
|
49
|
+
],
|
|
50
|
+
"estimated_hours": 0.3,
|
|
51
|
+
"actual_hours": 0.1,
|
|
52
|
+
"status": "completed",
|
|
53
|
+
"blocked_reason": null,
|
|
54
|
+
"ready_at": "2026-05-12T00:00:00Z",
|
|
55
|
+
"started_at": "2026-05-12T00:00:00Z",
|
|
56
|
+
"completed_at": "2026-05-12T00:00:00Z"
|
|
57
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# CLOSURE BRIEF — slice-03: Publicar rama de drafts
|
|
2
|
+
|
|
3
|
+
**Spec:** quiver-v18-stabilization
|
|
4
|
+
**Slice:** slice-03-publish-drafts-branch
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Checklist de cierre (sin PR)
|
|
9
|
+
|
|
10
|
+
- [ ] Gate confirmada: el mantenedor declaró explícitamente que el checkpoint de v18 pasó.
|
|
11
|
+
- [ ] `git ls-remote origin drafts/v19-v22-orchestration-followups` retorna un SHA no vacío.
|
|
12
|
+
- [ ] El SHA remoto coincide con `git rev-parse drafts/v19-v22-orchestration-followups`.
|
|
13
|
+
- [ ] No se abrió ningún PR para esta rama.
|
|
14
|
+
|
|
15
|
+
## Post-ejecución
|
|
16
|
+
|
|
17
|
+
- [ ] Actualizar `specs/quiver-v18-stabilization/STATUS.md`: slice-03 → `Completed`, `actual_hours: 0.1`.
|
|
18
|
+
- [ ] Actualizar `specs/quiver-v18-stabilization/EVIDENCE_REPORT.md`: registrar SHA y fecha de push.
|
|
19
|
+
- [ ] Si todos los slices de esta spec están `Completed`, actualizar el campo `Status` del EVIDENCE_REPORT a `Completed`.
|
|
20
|
+
|
|
21
|
+
## Nota sobre el checkpoint de v18
|
|
22
|
+
|
|
23
|
+
Una vez que este slice cierra, la spec `quiver-v18-stabilization` está completa. El siguiente paso en el BACKLOG es la promoción de v19 (Project Visibility) desde la rama de drafts a una spec activa. Ese es un proceso editorial del mantenedor, no un slice de esta spec.
|