create-quiver 0.15.2 → 0.15.3
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/README.md +1 -0
- package/README_FOR_AI.md +6 -4
- package/docs/CLI_UX_GUIDE.md +1 -1
- package/docs/COMMANDS.md.template +14 -3
- package/docs/INDEX.md +87 -0
- package/docs/WORKFLOW.md.template +2 -2
- package/docs/reference/commands.md +13 -1
- package/package.json +3 -1
- package/specs/quiver-v34-cli-dashboard-status/EVIDENCE_REPORT.md +119 -0
- package/specs/quiver-v34-cli-dashboard-status/EXECUTION_PLAN.md +77 -0
- package/specs/quiver-v34-cli-dashboard-status/SPEC.md +152 -0
- package/specs/quiver-v34-cli-dashboard-status/STATUS.md +29 -0
- package/specs/quiver-v34-cli-dashboard-status/pr.md +99 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/slice.json +68 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/EXECUTION_BRIEF.md +53 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/slice.json +78 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/EXECUTION_BRIEF.md +53 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/slice.json +82 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/EXECUTION_BRIEF.md +54 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/slice.json +77 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/EXECUTION_BRIEF.md +54 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/slice.json +88 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/CLOSURE_BRIEF.md +26 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/EXECUTION_BRIEF.md +57 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/slice.json +85 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/EVIDENCE_REPORT.md +43 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/EXECUTION_PLAN.md +85 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/SPEC.md +147 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/STATUS.md +33 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/pr.md +106 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/EXECUTION_BRIEF.md +38 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/slice.json +64 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/slice.json +80 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/EXECUTION_BRIEF.md +48 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/slice.json +73 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/EXECUTION_BRIEF.md +48 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/slice.json +72 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/slice.json +82 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/EXECUTION_BRIEF.md +50 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/slice.json +90 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/CLOSURE_BRIEF.md +21 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/EXECUTION_BRIEF.md +51 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/slice.json +85 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/CLOSURE_BRIEF.md +20 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/slice.json +79 -0
- package/specs/quiver-v36-ai-run-watch-portable/EVIDENCE_REPORT.md +33 -0
- package/specs/quiver-v36-ai-run-watch-portable/EXECUTION_PLAN.md +39 -0
- package/specs/quiver-v36-ai-run-watch-portable/SPEC.md +166 -0
- package/specs/quiver-v36-ai-run-watch-portable/STATUS.md +31 -0
- package/specs/quiver-v36-ai-run-watch-portable/pr.md +78 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/EXECUTION_BRIEF.md +43 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/slice.json +61 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/EXECUTION_BRIEF.md +43 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/slice.json +65 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/EXECUTION_BRIEF.md +43 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/slice.json +66 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/EXECUTION_BRIEF.md +41 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/slice.json +71 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/EXECUTION_BRIEF.md +44 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/slice.json +73 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/EXECUTION_BRIEF.md +44 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/slice.json +71 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/EXECUTION_BRIEF.md +45 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/slice.json +77 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/CLOSURE_BRIEF.md +22 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/EXECUTION_BRIEF.md +46 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/slice.json +87 -0
- package/src/create-quiver/commands/dashboard.js +31 -0
- package/src/create-quiver/index.js +97 -2
- package/src/create-quiver/lib/cli/ux-flags.js +6 -0
- package/src/create-quiver/lib/dashboard.js +896 -0
- package/src/create-quiver/lib/init-docs.js +6 -0
- package/src/create-quiver/lib/init-layout.js +2 -0
- package/src/create-quiver/lib/project-state-resolver.js +22 -2
- package/src/create-quiver/lib/version.js +157 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-05-main-progress-user-guidance",
|
|
3
|
+
"ticket": "QUIVER-36-05",
|
|
4
|
+
"type": "feature",
|
|
5
|
+
"title": "Main progress and user guidance",
|
|
6
|
+
"objective": "Show run id and watch command in the main human UX while preserving automation-safe output modes.",
|
|
7
|
+
"description": "Updates planner-oriented live AI commands to surface the generated run id, keep stable progress, and guide users to the portable watcher.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v36-main-progress-user-guidance",
|
|
12
|
+
"branch_name": "feature/QUIVER-36-05-v36-main-progress-user-guidance"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/commands/ai.js",
|
|
16
|
+
"src/create-quiver/lib/cli/ux.js",
|
|
17
|
+
"tests/commands/ai-plan.test.js",
|
|
18
|
+
"tests/commands/ai-revise.test.js",
|
|
19
|
+
"tests/commands/ai-run-watch.test.js"
|
|
20
|
+
],
|
|
21
|
+
"expected_read_paths": [
|
|
22
|
+
"src/create-quiver/commands/ai.js",
|
|
23
|
+
"src/create-quiver/lib/ai/run-state.js",
|
|
24
|
+
"src/create-quiver/lib/ai/run-events.js",
|
|
25
|
+
"src/create-quiver/lib/cli/ux.js",
|
|
26
|
+
"specs/quiver-v36-ai-run-watch-portable/SPEC.md"
|
|
27
|
+
],
|
|
28
|
+
"allowed_write_paths": [
|
|
29
|
+
"src/create-quiver/commands/ai.js",
|
|
30
|
+
"src/create-quiver/lib/cli/ux.js",
|
|
31
|
+
"tests/commands/ai-plan.test.js",
|
|
32
|
+
"tests/commands/ai-revise.test.js",
|
|
33
|
+
"tests/commands/ai-run-watch.test.js",
|
|
34
|
+
"specs/quiver-v36-ai-run-watch-portable/**"
|
|
35
|
+
],
|
|
36
|
+
"depends_on": [
|
|
37
|
+
"slice-03-provider-streaming-integration",
|
|
38
|
+
"slice-04-ai-run-watch-command"
|
|
39
|
+
],
|
|
40
|
+
"parallel_safe": "never",
|
|
41
|
+
"parallel_safe_reason": "Depends on the completed provider streaming and watcher contracts to avoid partial user guidance.",
|
|
42
|
+
"must": [
|
|
43
|
+
"Show the generated run id in human TTY output.",
|
|
44
|
+
"Show the exact watch command for the current run.",
|
|
45
|
+
"Keep raw provider output out of the main terminal by default.",
|
|
46
|
+
"Preserve CI, no-TTY, --json, --print-prompt, and --dry-run behavior.",
|
|
47
|
+
"Update run status on provider failure or main-command cancellation."
|
|
48
|
+
],
|
|
49
|
+
"not_included": [
|
|
50
|
+
"Watcher implementation.",
|
|
51
|
+
"Provider event persistence.",
|
|
52
|
+
"Documentation updates."
|
|
53
|
+
],
|
|
54
|
+
"acceptance": [
|
|
55
|
+
"Users can copy the displayed watch command and observe the same run.",
|
|
56
|
+
"Machine-readable output contains no human headings, spinners, or colors.",
|
|
57
|
+
"Dry-run and print-prompt do not create unexpected live run artifacts.",
|
|
58
|
+
"Failure and cancellation guidance is actionable and redacted."
|
|
59
|
+
],
|
|
60
|
+
"tests": [
|
|
61
|
+
"node --test tests/commands/ai-plan.test.js tests/commands/ai-revise.test.js tests/commands/ai-run-watch.test.js",
|
|
62
|
+
"git diff --check"
|
|
63
|
+
],
|
|
64
|
+
"validation_hints": [
|
|
65
|
+
"Test TTY and no-TTY paths separately.",
|
|
66
|
+
"Test provider failure and SIGINT after run creation."
|
|
67
|
+
],
|
|
68
|
+
"estimated_hours": 4,
|
|
69
|
+
"status": "planned",
|
|
70
|
+
"blocked_reason": null
|
|
71
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-06 Docs and generated guidance
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Pending implementation.
|
|
6
|
+
|
|
7
|
+
## Validation
|
|
8
|
+
|
|
9
|
+
- [ ] `node --test tests/commands/cli-contract.test.js tests/lib/init-docs.test.js`
|
|
10
|
+
- [ ] `npx create-quiver spec validate specs/quiver-v36-ai-run-watch-portable --strict`
|
|
11
|
+
- [ ] `git diff --check`
|
|
12
|
+
|
|
13
|
+
## Pending
|
|
14
|
+
|
|
15
|
+
- Update docs after public runtime behavior is implemented.
|
|
16
|
+
|
|
17
|
+
## Remaining Risks
|
|
18
|
+
|
|
19
|
+
- Documentation can drift if generated templates are not updated with the same examples as canonical docs.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-06 Docs and generated guidance
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
The watcher introduces public commands, artifacts, and safety expectations. User-facing docs and generated project guidance must match the implemented behavior.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Document `ai run watch`, run artifacts, JSONL mode, portability limits, and safe usage in canonical docs and generated guidance.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- CLI UX documentation
|
|
14
|
+
- AI guidance documentation
|
|
15
|
+
- Command reference documentation
|
|
16
|
+
- Generated docs/templates
|
|
17
|
+
- Notes for legacy runs, stale runs, JSONL, and security
|
|
18
|
+
|
|
19
|
+
## Acceptance Criteria
|
|
20
|
+
|
|
21
|
+
- Docs explain what the Quiver run id is and that it is not a provider session id.
|
|
22
|
+
- Docs include `npx create-quiver ai run watch --run <run-id>`.
|
|
23
|
+
- Docs include `npx create-quiver ai run watch --latest`.
|
|
24
|
+
- Docs include JSONL usage and state that `--json` emits JSONL only.
|
|
25
|
+
- Docs explain completed, failed, canceled, stale, legacy, and missing-run behavior at a user level.
|
|
26
|
+
- Docs explicitly state Quiver does not embed provider TUIs or require terminal multiplexers.
|
|
27
|
+
- Generated guidance matches public command behavior.
|
|
28
|
+
- Missing `docs/INDEX.md` debt is not hidden if the documentation workflow requires index updates.
|
|
29
|
+
|
|
30
|
+
## Technical Plan Summary
|
|
31
|
+
|
|
32
|
+
Update docs after runtime behavior stabilizes, then update generated guidance/templates so new projects receive the same command references.
|
|
33
|
+
|
|
34
|
+
## Restrictions
|
|
35
|
+
|
|
36
|
+
- Do not document behavior that has not been implemented.
|
|
37
|
+
- Do not add architecture claims that contradict the SPEC.
|
|
38
|
+
- Do not duplicate large sections across docs when a command reference link is enough.
|
|
39
|
+
|
|
40
|
+
## Completion Checklist
|
|
41
|
+
|
|
42
|
+
- [ ] Canonical docs updated.
|
|
43
|
+
- [ ] Generated guidance updated.
|
|
44
|
+
- [ ] Command examples verified.
|
|
45
|
+
- [ ] Documentation debt captured if `docs/INDEX.md` remains absent.
|
package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/slice.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-06-docs-generated-guidance",
|
|
3
|
+
"ticket": "QUIVER-36-06",
|
|
4
|
+
"type": "documentation",
|
|
5
|
+
"title": "Docs and generated guidance",
|
|
6
|
+
"objective": "Document the portable watcher in canonical docs, command references, and generated guidance.",
|
|
7
|
+
"description": "Adds user-facing and generated documentation for run ids, watch commands, JSONL mode, artifacts, portability, and safety expectations.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "docs",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v36-docs-generated-guidance",
|
|
12
|
+
"branch_name": "docs/QUIVER-36-06-v36-docs-generated-guidance"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"docs/CLI_UX_GUIDE.md",
|
|
16
|
+
"README_FOR_AI.md",
|
|
17
|
+
"docs/reference/commands.md",
|
|
18
|
+
"docs/COMMANDS.md.template",
|
|
19
|
+
"src/create-quiver/lib/init-docs.js",
|
|
20
|
+
"tests/commands/cli-contract.test.js",
|
|
21
|
+
"tests/lib/init-docs.test.js"
|
|
22
|
+
],
|
|
23
|
+
"expected_read_paths": [
|
|
24
|
+
"docs/CLI_UX_GUIDE.md",
|
|
25
|
+
"README_FOR_AI.md",
|
|
26
|
+
"docs/reference/commands.md",
|
|
27
|
+
"docs/COMMANDS.md.template",
|
|
28
|
+
"src/create-quiver/lib/init-docs.js",
|
|
29
|
+
"specs/quiver-v36-ai-run-watch-portable/SPEC.md"
|
|
30
|
+
],
|
|
31
|
+
"allowed_write_paths": [
|
|
32
|
+
"docs/CLI_UX_GUIDE.md",
|
|
33
|
+
"README_FOR_AI.md",
|
|
34
|
+
"docs/reference/commands.md",
|
|
35
|
+
"docs/COMMANDS.md.template",
|
|
36
|
+
"src/create-quiver/lib/init-docs.js",
|
|
37
|
+
"tests/commands/cli-contract.test.js",
|
|
38
|
+
"tests/lib/init-docs.test.js",
|
|
39
|
+
"specs/quiver-v36-ai-run-watch-portable/**"
|
|
40
|
+
],
|
|
41
|
+
"depends_on": [
|
|
42
|
+
"slice-04-ai-run-watch-command",
|
|
43
|
+
"slice-05-main-progress-user-guidance"
|
|
44
|
+
],
|
|
45
|
+
"parallel_safe": "conditional",
|
|
46
|
+
"parallel_safe_reason": "Can proceed after command behavior is stable; generated docs and canonical docs should be updated in one pass.",
|
|
47
|
+
"must": [
|
|
48
|
+
"Document run id semantics.",
|
|
49
|
+
"Document --run and --latest usage.",
|
|
50
|
+
"Document JSONL-only behavior for --json.",
|
|
51
|
+
"Document stale, legacy, completed, failed, canceled, and missing-run behavior.",
|
|
52
|
+
"Document that Quiver does not embed provider TUIs or require terminal multiplexers.",
|
|
53
|
+
"Update generated guidance/templates with matching command examples."
|
|
54
|
+
],
|
|
55
|
+
"not_included": [
|
|
56
|
+
"Runtime behavior changes.",
|
|
57
|
+
"Spec redesign."
|
|
58
|
+
],
|
|
59
|
+
"acceptance": [
|
|
60
|
+
"Docs match the implemented public CLI behavior.",
|
|
61
|
+
"Generated guidance includes the same essential watcher commands.",
|
|
62
|
+
"No docs claim platform-specific terminal automation as core behavior.",
|
|
63
|
+
"Documentation debt around missing docs/INDEX.md is surfaced if still applicable."
|
|
64
|
+
],
|
|
65
|
+
"tests": [
|
|
66
|
+
"node --test tests/commands/cli-contract.test.js tests/lib/init-docs.test.js",
|
|
67
|
+
"npx create-quiver spec validate specs/quiver-v36-ai-run-watch-portable --strict",
|
|
68
|
+
"git diff --check"
|
|
69
|
+
],
|
|
70
|
+
"validation_hints": [
|
|
71
|
+
"Generate a fresh sandbox project and inspect AI guidance files.",
|
|
72
|
+
"Check that documented commands are accepted by CLI parsing tests."
|
|
73
|
+
],
|
|
74
|
+
"estimated_hours": 3,
|
|
75
|
+
"status": "planned",
|
|
76
|
+
"blocked_reason": null
|
|
77
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-07 Tests and cross-platform readiness
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Pending implementation.
|
|
6
|
+
|
|
7
|
+
## Validation
|
|
8
|
+
|
|
9
|
+
- [ ] `node --test tests/**/*.test.js`
|
|
10
|
+
- [ ] `git diff --check`
|
|
11
|
+
- [ ] `npx create-quiver spec validate specs/quiver-v36-ai-run-watch-portable --strict`
|
|
12
|
+
- [ ] `npm run package:quiver`
|
|
13
|
+
- [ ] `npm run smoke:create-quiver`
|
|
14
|
+
- [ ] `node scripts/ci/smoke-cross-platform.js`
|
|
15
|
+
|
|
16
|
+
## Pending
|
|
17
|
+
|
|
18
|
+
- Execute after runtime and docs slices are complete.
|
|
19
|
+
|
|
20
|
+
## Remaining Risks
|
|
21
|
+
|
|
22
|
+
- Cross-platform behavior can regress if validation depends on POSIX-only shell behavior instead of Node-based smoke coverage.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-07 Tests and cross-platform readiness
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
The feature changes long-running AI command observability and touches persistence, redaction, command UX, and docs. Final validation must prove the full workflow is production-ready across supported terminals and platforms.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Add and run final automated validation, package smoke tests, and cross-platform smoke coverage for the portable watcher.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- Focused unit and command tests
|
|
14
|
+
- Integration-style simulated provider streaming tests
|
|
15
|
+
- Package smoke validation
|
|
16
|
+
- Cross-platform smoke script updates
|
|
17
|
+
- Final evidence report updates
|
|
18
|
+
|
|
19
|
+
## Acceptance Criteria
|
|
20
|
+
|
|
21
|
+
- Tests cover path traversal and malformed run ids.
|
|
22
|
+
- Tests cover missing run, `--latest`, completed, failed, canceled, stale, and legacy runs.
|
|
23
|
+
- Tests cover partial JSONL lines during append.
|
|
24
|
+
- Tests cover split secrets, ANSI/control character sanitization, and log truncation.
|
|
25
|
+
- Tests cover no-TTY, CI, JSON, dry-run, and print-prompt behavior.
|
|
26
|
+
- Tests cover paths with spaces.
|
|
27
|
+
- Simulated provider streaming proves stdout/stderr capture, event persistence, cancellation, and failure handling.
|
|
28
|
+
- Package smoke proves `npx create-quiver ai run watch ...` resolves from the packaged CLI.
|
|
29
|
+
- Final evidence records commands run and any remaining risks.
|
|
30
|
+
|
|
31
|
+
## Technical Plan Summary
|
|
32
|
+
|
|
33
|
+
Close gaps left by earlier slices with targeted tests first, then run full project validation and package smokes. Prefer deterministic local simulations over external provider calls.
|
|
34
|
+
|
|
35
|
+
## Restrictions
|
|
36
|
+
|
|
37
|
+
- Do not require real provider credentials for validation.
|
|
38
|
+
- Do not require `tmux`, `zellij`, Windows Terminal automation, or `node-pty`.
|
|
39
|
+
- Do not rely on platform-specific shell syntax in required smoke tests.
|
|
40
|
+
|
|
41
|
+
## Completion Checklist
|
|
42
|
+
|
|
43
|
+
- [ ] Focused tests added or updated.
|
|
44
|
+
- [ ] Cross-platform smoke covers watcher behavior.
|
|
45
|
+
- [ ] Package smoke covers packaged command resolution.
|
|
46
|
+
- [ ] Evidence report updated with command results.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-07-tests-cross-platform-readiness",
|
|
3
|
+
"ticket": "QUIVER-36-07",
|
|
4
|
+
"type": "validation",
|
|
5
|
+
"title": "Tests and cross-platform readiness",
|
|
6
|
+
"objective": "Prove the portable watcher is covered by automated tests, package smoke, and cross-platform smoke validation.",
|
|
7
|
+
"description": "Adds final coverage for persistence, watcher behavior, security, automation modes, package execution, and platform portability.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "test",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v36-tests-cross-platform-readiness",
|
|
12
|
+
"branch_name": "test/QUIVER-36-07-v36-tests-cross-platform-readiness"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"tests/commands/ai-run-watch.test.js",
|
|
16
|
+
"tests/commands/ai-plan.test.js",
|
|
17
|
+
"tests/lib/ai-run-state.test.js",
|
|
18
|
+
"tests/lib/ai-run-events.test.js",
|
|
19
|
+
"tests/lib/ai-provider-streaming.test.js",
|
|
20
|
+
"scripts/ci/smoke-create-quiver.sh",
|
|
21
|
+
"scripts/ci/smoke-cross-platform.js",
|
|
22
|
+
"specs/quiver-v36-ai-run-watch-portable/EVIDENCE_REPORT.md"
|
|
23
|
+
],
|
|
24
|
+
"expected_read_paths": [
|
|
25
|
+
"tests/commands/ai-run-watch.test.js",
|
|
26
|
+
"tests/commands/ai-plan.test.js",
|
|
27
|
+
"tests/lib/ai-run-state.test.js",
|
|
28
|
+
"tests/lib/ai-run-events.test.js",
|
|
29
|
+
"scripts/ci/smoke-create-quiver.sh",
|
|
30
|
+
"scripts/ci/smoke-cross-platform.js",
|
|
31
|
+
"specs/quiver-v36-ai-run-watch-portable/SPEC.md"
|
|
32
|
+
],
|
|
33
|
+
"allowed_write_paths": [
|
|
34
|
+
"tests/commands/ai-run-watch.test.js",
|
|
35
|
+
"tests/commands/ai-plan.test.js",
|
|
36
|
+
"tests/lib/ai-run-state.test.js",
|
|
37
|
+
"tests/lib/ai-run-events.test.js",
|
|
38
|
+
"tests/lib/ai-provider-streaming.test.js",
|
|
39
|
+
"scripts/ci/smoke-create-quiver.sh",
|
|
40
|
+
"scripts/ci/smoke-cross-platform.js",
|
|
41
|
+
"specs/quiver-v36-ai-run-watch-portable/**"
|
|
42
|
+
],
|
|
43
|
+
"depends_on": [
|
|
44
|
+
"slice-02-event-writer-redacted-logs",
|
|
45
|
+
"slice-03-provider-streaming-integration",
|
|
46
|
+
"slice-04-ai-run-watch-command",
|
|
47
|
+
"slice-05-main-progress-user-guidance",
|
|
48
|
+
"slice-06-docs-generated-guidance"
|
|
49
|
+
],
|
|
50
|
+
"parallel_safe": "never",
|
|
51
|
+
"parallel_safe_reason": "Final readiness must run after runtime and docs behavior stabilizes.",
|
|
52
|
+
"must": [
|
|
53
|
+
"Cover path traversal and malformed run ids.",
|
|
54
|
+
"Cover missing, latest, completed, failed, canceled, stale, and legacy runs.",
|
|
55
|
+
"Cover partial JSONL lines.",
|
|
56
|
+
"Cover split secrets, ANSI/control sanitization, and log truncation.",
|
|
57
|
+
"Cover no-TTY, CI, JSON, dry-run, and print-prompt behavior.",
|
|
58
|
+
"Cover paths with spaces.",
|
|
59
|
+
"Cover simulated provider streaming for stdout, stderr, cancellation, and failure.",
|
|
60
|
+
"Run package smoke and cross-platform smoke."
|
|
61
|
+
],
|
|
62
|
+
"not_included": [
|
|
63
|
+
"Real provider credential tests.",
|
|
64
|
+
"Publishing to npm."
|
|
65
|
+
],
|
|
66
|
+
"acceptance": [
|
|
67
|
+
"Required validation commands complete or documented blockers are recorded.",
|
|
68
|
+
"No required smoke depends on a terminal multiplexer.",
|
|
69
|
+
"Evidence report lists final commands and outcomes.",
|
|
70
|
+
"All P0 safety criteria from the SPEC have automated coverage."
|
|
71
|
+
],
|
|
72
|
+
"tests": [
|
|
73
|
+
"node --test tests/**/*.test.js",
|
|
74
|
+
"git diff --check",
|
|
75
|
+
"npx create-quiver spec validate specs/quiver-v36-ai-run-watch-portable --strict",
|
|
76
|
+
"npm run package:quiver",
|
|
77
|
+
"npm run smoke:create-quiver",
|
|
78
|
+
"node scripts/ci/smoke-cross-platform.js"
|
|
79
|
+
],
|
|
80
|
+
"validation_hints": [
|
|
81
|
+
"Use simulated providers instead of external AI CLIs.",
|
|
82
|
+
"Run package smoke from a path containing spaces."
|
|
83
|
+
],
|
|
84
|
+
"estimated_hours": 6,
|
|
85
|
+
"status": "planned",
|
|
86
|
+
"blocked_reason": null
|
|
87
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const {
|
|
2
|
+
buildErrorPayload,
|
|
3
|
+
collectDashboardReport,
|
|
4
|
+
formatHumanDashboard,
|
|
5
|
+
normalizeDashboardOptions,
|
|
6
|
+
} = require('../lib/dashboard');
|
|
7
|
+
|
|
8
|
+
function runDashboard(repoRoot, options = {}) {
|
|
9
|
+
try {
|
|
10
|
+
normalizeDashboardOptions(options);
|
|
11
|
+
const report = collectDashboardReport(repoRoot, options);
|
|
12
|
+
if (options.json) {
|
|
13
|
+
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
|
14
|
+
return report;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
process.stdout.write(formatHumanDashboard(report, options));
|
|
18
|
+
return report;
|
|
19
|
+
} catch (error) {
|
|
20
|
+
if (options.json) {
|
|
21
|
+
process.stdout.write(`${JSON.stringify(buildErrorPayload(error), null, 2)}\n`);
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = {
|
|
30
|
+
runDashboard,
|
|
31
|
+
};
|
|
@@ -35,6 +35,7 @@ const {
|
|
|
35
35
|
runSpecsList: runAiSpecsList,
|
|
36
36
|
runTraceReport: runAiTraceReport,
|
|
37
37
|
} = require('./commands/ai');
|
|
38
|
+
const { runDashboard } = require('./commands/dashboard');
|
|
38
39
|
const { runDemo } = require('./commands/demo');
|
|
39
40
|
const { runPrepare } = require('./commands/prepare');
|
|
40
41
|
const { runEvidence } = require('./commands/evidence');
|
|
@@ -43,6 +44,7 @@ const { runGraph } = require('./commands/graph');
|
|
|
43
44
|
const { runNext } = require('./commands/next');
|
|
44
45
|
const { runPlan } = require('./commands/plan');
|
|
45
46
|
const { runCreateSpec, runValidateSpec } = require('./commands/spec');
|
|
47
|
+
const { collectVersionReport, formatHumanVersionReport } = require('./lib/version');
|
|
46
48
|
const { buildInitLayout, formatInitLayoutPlan } = require('./lib/init-layout');
|
|
47
49
|
const {
|
|
48
50
|
formatInstallSelfCommand,
|
|
@@ -82,7 +84,9 @@ function formatError(message) {
|
|
|
82
84
|
|
|
83
85
|
const SUPPORTED_COMMAND_MODES = new Set([
|
|
84
86
|
'init',
|
|
87
|
+
'version',
|
|
85
88
|
'flow',
|
|
89
|
+
'dashboard',
|
|
86
90
|
'plan',
|
|
87
91
|
'graph',
|
|
88
92
|
'next',
|
|
@@ -152,6 +156,8 @@ const COMMAND_HELP_GROUPS = [
|
|
|
152
156
|
['analyze', 'Scan the project and write docs/PROJECT_MAP.md plus .quiver scan data.'],
|
|
153
157
|
['doctor', 'Validate the Quiver layout, generated docs, environment, and next safe steps.'],
|
|
154
158
|
['flow', 'Show the read-only guided workflow stage, blockers, and next safe command.'],
|
|
159
|
+
['dashboard', 'Show compact read-only project, spec, slice, run, approval, and agent status.'],
|
|
160
|
+
['version', 'Show a Quiver-branded version report; use --json for metadata.'],
|
|
155
161
|
['prepare', 'Run setup diagnostics for providers, GitHub, SSH, and project readiness.'],
|
|
156
162
|
['migrate', 'Upgrade an already initialized Quiver project to the current contract.'],
|
|
157
163
|
],
|
|
@@ -251,6 +257,8 @@ function printUsage() {
|
|
|
251
257
|
npx create-quiver init [options]
|
|
252
258
|
npx create-quiver analyze [options]
|
|
253
259
|
npx create-quiver flow [options]
|
|
260
|
+
npx create-quiver dashboard [options]
|
|
261
|
+
npx create-quiver version [--json]
|
|
254
262
|
npx create-quiver plan [options]
|
|
255
263
|
npx create-quiver ai <task> [options]
|
|
256
264
|
npx create-quiver ai run create --input <requirements.md>
|
|
@@ -294,12 +302,15 @@ ${formatCommandHelpGroups()}
|
|
|
294
302
|
Options:
|
|
295
303
|
-n, --name <project-name> Project name to generate
|
|
296
304
|
-d, --dir <target-dir> Target directory to scaffold into or inspect
|
|
297
|
-
--spec <slug> Restrict plan output to one spec
|
|
305
|
+
--spec <slug> Restrict plan, graph, next, or dashboard output to one spec
|
|
298
306
|
--format <name> Graph or AI export output format (tree, mermaid, dot, json, markdown)
|
|
299
307
|
--show-conflicts Show shared file paths in graph output
|
|
300
308
|
--level <n> Restrict graph output to one level
|
|
301
309
|
--json Emit machine-readable JSON
|
|
302
|
-
--include-completed Include completed slices in plan, graph, or next history output
|
|
310
|
+
--include-completed Include completed slices in dashboard, plan, graph, or next history output
|
|
311
|
+
--details Show the full human dashboard report
|
|
312
|
+
--section <name> Show one human dashboard section
|
|
313
|
+
--limit <n> Limit dashboard human lists (1-100)
|
|
303
314
|
--only-ready Show only slices with no pending dependencies
|
|
304
315
|
--all-ready List every ready slice returned by next
|
|
305
316
|
--auto-start Prompt for confirmation and run start-slice on next
|
|
@@ -345,6 +356,11 @@ Examples:
|
|
|
345
356
|
npx create-quiver --name "My Project"
|
|
346
357
|
npx create-quiver --name "My Project" --dir ./my-project
|
|
347
358
|
cd ./my-project && npx create-quiver flow
|
|
359
|
+
cd ./my-project && npx create-quiver dashboard
|
|
360
|
+
cd ./my-project && npx create-quiver dashboard --section slices --limit 10
|
|
361
|
+
cd ./my-project && npx create-quiver dashboard --json
|
|
362
|
+
cd ./my-project && npx create-quiver version
|
|
363
|
+
cd ./my-project && npx create-quiver version --json
|
|
348
364
|
cd ./my-project && npx create-quiver analyze
|
|
349
365
|
cd ./my-project && npx create-quiver plan --json
|
|
350
366
|
cd ./my-project && npx create-quiver ai onboard --dry-run
|
|
@@ -437,6 +453,10 @@ function parseArgs(argv) {
|
|
|
437
453
|
interactive: false,
|
|
438
454
|
review: false,
|
|
439
455
|
includeCompleted: false,
|
|
456
|
+
dashboardDetails: false,
|
|
457
|
+
dashboardSection: '',
|
|
458
|
+
dashboardLimit: null,
|
|
459
|
+
dashboardOptionErrors: [],
|
|
440
460
|
onlyReady: false,
|
|
441
461
|
allReady: false,
|
|
442
462
|
autoStart: false,
|
|
@@ -700,6 +720,33 @@ function parseArgs(argv) {
|
|
|
700
720
|
continue;
|
|
701
721
|
}
|
|
702
722
|
|
|
723
|
+
if (arg === '--details') {
|
|
724
|
+
result.dashboardDetails = true;
|
|
725
|
+
continue;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
if (arg === '--section') {
|
|
729
|
+
const value = args[index + 1];
|
|
730
|
+
if (!value || String(value).startsWith('--')) {
|
|
731
|
+
result.dashboardOptionErrors.push('missing value for --section');
|
|
732
|
+
continue;
|
|
733
|
+
}
|
|
734
|
+
result.dashboardSection = value;
|
|
735
|
+
index += 1;
|
|
736
|
+
continue;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
if (arg === '--limit') {
|
|
740
|
+
const value = args[index + 1];
|
|
741
|
+
if (!value || String(value).startsWith('--')) {
|
|
742
|
+
result.dashboardOptionErrors.push('missing value for --limit');
|
|
743
|
+
continue;
|
|
744
|
+
}
|
|
745
|
+
result.dashboardLimit = value;
|
|
746
|
+
index += 1;
|
|
747
|
+
continue;
|
|
748
|
+
}
|
|
749
|
+
|
|
703
750
|
if (arg === '--show-conflicts') {
|
|
704
751
|
result.showConflicts = true;
|
|
705
752
|
continue;
|
|
@@ -1049,6 +1096,14 @@ function parseArgs(argv) {
|
|
|
1049
1096
|
if (positional.length > 0) {
|
|
1050
1097
|
throw new Error(formatError('flow does not accept positional arguments'));
|
|
1051
1098
|
}
|
|
1099
|
+
} else if (result.mode === 'version') {
|
|
1100
|
+
if (positional.length > 0) {
|
|
1101
|
+
throw new Error(formatError('version does not accept positional arguments'));
|
|
1102
|
+
}
|
|
1103
|
+
} else if (result.mode === 'dashboard') {
|
|
1104
|
+
if (positional.length > 0) {
|
|
1105
|
+
throw new Error(formatError('dashboard does not accept positional arguments; use --spec <slug>'));
|
|
1106
|
+
}
|
|
1052
1107
|
} else if (result.mode === 'ai') {
|
|
1053
1108
|
if (!result.aiCommand && positional.length > 0) {
|
|
1054
1109
|
result.aiCommand = positional.shift();
|
|
@@ -1142,6 +1197,14 @@ function parseArgs(argv) {
|
|
|
1142
1197
|
throw new Error(formatError('too many positional arguments'));
|
|
1143
1198
|
}
|
|
1144
1199
|
|
|
1200
|
+
const requestedDashboardFlags = [];
|
|
1201
|
+
if (result.dashboardDetails) requestedDashboardFlags.push('--details');
|
|
1202
|
+
if (result.dashboardSection || result.dashboardOptionErrors.some((error) => error.includes('--section'))) requestedDashboardFlags.push('--section');
|
|
1203
|
+
if (result.dashboardLimit !== null || result.dashboardOptionErrors.some((error) => error.includes('--limit'))) requestedDashboardFlags.push('--limit');
|
|
1204
|
+
if (result.mode !== 'dashboard' && requestedDashboardFlags.length > 0) {
|
|
1205
|
+
throw new Error(formatError(`${requestedDashboardFlags.join(', ')} ${requestedDashboardFlags.length === 1 ? 'is' : 'are'} only supported by dashboard. Use: npx create-quiver dashboard ${requestedDashboardFlags[0]}${requestedDashboardFlags[0] === '--section' ? ' <name>' : requestedDashboardFlags[0] === '--limit' ? ' <n>' : ''}`));
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1145
1208
|
return result;
|
|
1146
1209
|
}
|
|
1147
1210
|
|
|
@@ -2827,6 +2890,37 @@ async function run(argv) {
|
|
|
2827
2890
|
return;
|
|
2828
2891
|
}
|
|
2829
2892
|
|
|
2893
|
+
if (args.mode === 'dashboard') {
|
|
2894
|
+
runDashboard(process.cwd(), {
|
|
2895
|
+
details: args.dashboardDetails,
|
|
2896
|
+
includeCompleted: args.includeCompleted,
|
|
2897
|
+
json: args.json,
|
|
2898
|
+
limit: args.dashboardLimit,
|
|
2899
|
+
noColor: args.noColor,
|
|
2900
|
+
optionErrors: args.dashboardOptionErrors,
|
|
2901
|
+
section: args.dashboardSection,
|
|
2902
|
+
specSlug: args.specSlug,
|
|
2903
|
+
});
|
|
2904
|
+
return;
|
|
2905
|
+
}
|
|
2906
|
+
|
|
2907
|
+
if (args.mode === 'version') {
|
|
2908
|
+
const report = collectVersionReport(process.cwd(), {
|
|
2909
|
+
cliVersion: CLI_VERSION,
|
|
2910
|
+
env: process.env,
|
|
2911
|
+
});
|
|
2912
|
+
if (args.json) {
|
|
2913
|
+
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
|
2914
|
+
} else {
|
|
2915
|
+
process.stdout.write(formatHumanVersionReport(report, {
|
|
2916
|
+
env: process.env,
|
|
2917
|
+
noColor: args.noColor,
|
|
2918
|
+
stdoutIsTTY: Boolean(process.stdout.isTTY),
|
|
2919
|
+
}));
|
|
2920
|
+
}
|
|
2921
|
+
return;
|
|
2922
|
+
}
|
|
2923
|
+
|
|
2830
2924
|
if (args.mode === 'plan') {
|
|
2831
2925
|
runPlan(process.cwd(), {
|
|
2832
2926
|
includeCompleted: args.includeCompleted,
|
|
@@ -3396,6 +3490,7 @@ async function run(argv) {
|
|
|
3396
3490
|
module.exports = {
|
|
3397
3491
|
resolveInteractiveInitOptions,
|
|
3398
3492
|
runAnalyze,
|
|
3493
|
+
runDashboard,
|
|
3399
3494
|
runDoctor,
|
|
3400
3495
|
runFlow,
|
|
3401
3496
|
runMigrate,
|
|
@@ -47,6 +47,12 @@ const UX_FLAG_MATRIX = Object.freeze({
|
|
|
47
47
|
review: false,
|
|
48
48
|
note: 'execution strategy confirmation and future selectors',
|
|
49
49
|
}),
|
|
50
|
+
dashboard: Object.freeze({
|
|
51
|
+
withPlanner: false,
|
|
52
|
+
interactive: false,
|
|
53
|
+
review: false,
|
|
54
|
+
note: 'read-only consolidated project status',
|
|
55
|
+
}),
|
|
50
56
|
});
|
|
51
57
|
|
|
52
58
|
function formatError(message) {
|