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.
Files changed (97) hide show
  1. package/README.md +1 -0
  2. package/README_FOR_AI.md +6 -4
  3. package/docs/CLI_UX_GUIDE.md +1 -1
  4. package/docs/COMMANDS.md.template +14 -3
  5. package/docs/INDEX.md +87 -0
  6. package/docs/WORKFLOW.md.template +2 -2
  7. package/docs/reference/commands.md +13 -1
  8. package/package.json +3 -1
  9. package/specs/quiver-v34-cli-dashboard-status/EVIDENCE_REPORT.md +119 -0
  10. package/specs/quiver-v34-cli-dashboard-status/EXECUTION_PLAN.md +77 -0
  11. package/specs/quiver-v34-cli-dashboard-status/SPEC.md +152 -0
  12. package/specs/quiver-v34-cli-dashboard-status/STATUS.md +29 -0
  13. package/specs/quiver-v34-cli-dashboard-status/pr.md +99 -0
  14. package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/CLOSURE_BRIEF.md +19 -0
  15. package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/EXECUTION_BRIEF.md +49 -0
  16. package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/slice.json +68 -0
  17. package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/CLOSURE_BRIEF.md +19 -0
  18. package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/EXECUTION_BRIEF.md +53 -0
  19. package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/slice.json +78 -0
  20. package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/CLOSURE_BRIEF.md +19 -0
  21. package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/EXECUTION_BRIEF.md +53 -0
  22. package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/slice.json +82 -0
  23. package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/CLOSURE_BRIEF.md +19 -0
  24. package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/EXECUTION_BRIEF.md +54 -0
  25. package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/slice.json +77 -0
  26. package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/CLOSURE_BRIEF.md +19 -0
  27. package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/EXECUTION_BRIEF.md +54 -0
  28. package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/slice.json +88 -0
  29. package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/CLOSURE_BRIEF.md +26 -0
  30. package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/EXECUTION_BRIEF.md +57 -0
  31. package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/slice.json +85 -0
  32. package/specs/quiver-v35-compact-dashboard-version-ux/EVIDENCE_REPORT.md +43 -0
  33. package/specs/quiver-v35-compact-dashboard-version-ux/EXECUTION_PLAN.md +85 -0
  34. package/specs/quiver-v35-compact-dashboard-version-ux/SPEC.md +147 -0
  35. package/specs/quiver-v35-compact-dashboard-version-ux/STATUS.md +33 -0
  36. package/specs/quiver-v35-compact-dashboard-version-ux/pr.md +106 -0
  37. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/CLOSURE_BRIEF.md +19 -0
  38. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/EXECUTION_BRIEF.md +38 -0
  39. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/slice.json +64 -0
  40. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/CLOSURE_BRIEF.md +19 -0
  41. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/EXECUTION_BRIEF.md +49 -0
  42. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/slice.json +80 -0
  43. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/CLOSURE_BRIEF.md +19 -0
  44. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/EXECUTION_BRIEF.md +48 -0
  45. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/slice.json +73 -0
  46. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/CLOSURE_BRIEF.md +19 -0
  47. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/EXECUTION_BRIEF.md +48 -0
  48. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/slice.json +72 -0
  49. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/CLOSURE_BRIEF.md +19 -0
  50. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/EXECUTION_BRIEF.md +49 -0
  51. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/slice.json +82 -0
  52. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/CLOSURE_BRIEF.md +19 -0
  53. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/EXECUTION_BRIEF.md +50 -0
  54. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/slice.json +90 -0
  55. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/CLOSURE_BRIEF.md +21 -0
  56. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/EXECUTION_BRIEF.md +51 -0
  57. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/slice.json +85 -0
  58. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/CLOSURE_BRIEF.md +20 -0
  59. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/EXECUTION_BRIEF.md +49 -0
  60. package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/slice.json +79 -0
  61. package/specs/quiver-v36-ai-run-watch-portable/EVIDENCE_REPORT.md +33 -0
  62. package/specs/quiver-v36-ai-run-watch-portable/EXECUTION_PLAN.md +39 -0
  63. package/specs/quiver-v36-ai-run-watch-portable/SPEC.md +166 -0
  64. package/specs/quiver-v36-ai-run-watch-portable/STATUS.md +31 -0
  65. package/specs/quiver-v36-ai-run-watch-portable/pr.md +78 -0
  66. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/CLOSURE_BRIEF.md +19 -0
  67. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/EXECUTION_BRIEF.md +43 -0
  68. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/slice.json +61 -0
  69. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/CLOSURE_BRIEF.md +18 -0
  70. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/EXECUTION_BRIEF.md +43 -0
  71. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/slice.json +65 -0
  72. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/CLOSURE_BRIEF.md +18 -0
  73. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/EXECUTION_BRIEF.md +43 -0
  74. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/slice.json +66 -0
  75. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/CLOSURE_BRIEF.md +18 -0
  76. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/EXECUTION_BRIEF.md +41 -0
  77. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/slice.json +71 -0
  78. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/CLOSURE_BRIEF.md +18 -0
  79. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/EXECUTION_BRIEF.md +44 -0
  80. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/slice.json +73 -0
  81. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/CLOSURE_BRIEF.md +18 -0
  82. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/EXECUTION_BRIEF.md +44 -0
  83. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/slice.json +71 -0
  84. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/CLOSURE_BRIEF.md +19 -0
  85. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/EXECUTION_BRIEF.md +45 -0
  86. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/slice.json +77 -0
  87. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/CLOSURE_BRIEF.md +22 -0
  88. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/EXECUTION_BRIEF.md +46 -0
  89. package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/slice.json +87 -0
  90. package/src/create-quiver/commands/dashboard.js +31 -0
  91. package/src/create-quiver/index.js +97 -2
  92. package/src/create-quiver/lib/cli/ux-flags.js +6 -0
  93. package/src/create-quiver/lib/dashboard.js +896 -0
  94. package/src/create-quiver/lib/init-docs.js +6 -0
  95. package/src/create-quiver/lib/init-layout.js +2 -0
  96. package/src/create-quiver/lib/project-state-resolver.js +22 -2
  97. 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.
@@ -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) {