specdacular 0.6.1 → 0.6.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 CHANGED
@@ -8,11 +8,8 @@ Plan features specific enough that an agent can implement without asking questio
8
8
  npx specdacular
9
9
  ```
10
10
 
11
- > [!CAUTION]
12
- > **Early Discovery Phase.** This project is actively evolving as we explore workflow patterns for AI-assisted feature planning. Commands, file formats, and conventions change frequently between versions. We aim to provide backwards-compatible migrations, but breaking changes may occur. Pin to a specific version if stability matters to you.
13
-
14
- > [!WARNING]
15
- > **Open Source Software.** This is maintained by a small team in their free time. It installs slash commands and workflow files into your `.claude/` directory. Always use version control. Review what gets installed. Back up your work. The software is provided "as is" without warranty of any kind. By using this tool, you accept full responsibility for any changes it makes to your project.
11
+ > [!NOTE]
12
+ > **Early Discovery Phase.** Commands and conventions may change between versions. Pin to a specific version if stability matters to you.
16
13
 
17
14
  ---
18
15
 
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: specd:config
3
+ description: Create or update .specd/config.json with commit settings
4
+ argument-hint: ""
5
+ allowed-tools:
6
+ - Read
7
+ - Write
8
+ - Bash
9
+ - AskUserQuestion
10
+ ---
11
+
12
+ <objective>
13
+ Create or update `.specd/config.json` with global specd settings.
14
+
15
+ Currently supports:
16
+ - `auto_commit_docs` — Whether to auto-commit `.specd/` file changes (default: true)
17
+ - `auto_commit_code` — Whether to auto-commit implementation code changes (default: true)
18
+ </objective>
19
+
20
+ <execution_context>
21
+ @~/.claude/specdacular/workflows/config.md
22
+ </execution_context>
@@ -47,6 +47,7 @@ Display available specdacular commands and usage guidance.
47
47
 
48
48
  | Command | Description |
49
49
  |---------|-------------|
50
+ | `/specd:config` | Create or update `.specd/config.json` with commit settings |
50
51
  | `/specd:status [--all]` | Show feature status dashboard |
51
52
  | `/specd:blueprint [name] [sub]` | Generate visual blueprint (wireframes, diagrams) |
52
53
  | `/specd:update` | Update Specdacular to the latest version |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specdacular",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "description": "Feature planning system for existing codebases. Map, understand, and plan features in large projects.",
5
5
  "bin": {
6
6
  "specdacular": "bin/install.js"
@@ -0,0 +1,112 @@
1
+ <purpose>
2
+ Create or update `.specd/config.json` with global specd settings.
3
+
4
+ Supports:
5
+ - `auto_commit_docs` — Whether to auto-commit `.specd/` file changes (default: true)
6
+ - `auto_commit_code` — Whether to auto-commit implementation code changes (default: true)
7
+
8
+ Preserves any existing fields in the config file (e.g., `type` for orchestrator mode).
9
+ </purpose>
10
+
11
+ <process>
12
+
13
+ <step name="check_existing">
14
+ Check if `.specd/config.json` already exists.
15
+
16
+ ```bash
17
+ [ -f ".specd/config.json" ] && echo "exists" || echo "missing"
18
+ ```
19
+
20
+ **If exists:**
21
+ Read the file and parse current values.
22
+
23
+ ```
24
+ Current `.specd/config.json`:
25
+
26
+ - `auto_commit_docs`: {value or "not set"}
27
+ - `auto_commit_code`: {value or "not set"}
28
+ {any other fields shown as context}
29
+ ```
30
+
31
+ **If missing:**
32
+ ```
33
+ No `.specd/config.json` found. Will create one with commit settings.
34
+ ```
35
+
36
+ Continue to ask_settings.
37
+ </step>
38
+
39
+ <step name="ask_settings">
40
+ Ask user for preferred commit settings.
41
+
42
+ Use AskUserQuestion:
43
+ - header: "Commit Settings"
44
+ - question: "Which auto-commit settings do you want?"
45
+ - options:
46
+ - "Both on (default)" — `auto_commit_docs: true, auto_commit_code: true`
47
+ - "Docs only" — `auto_commit_docs: true, auto_commit_code: false`
48
+ - "Code only" — `auto_commit_docs: false, auto_commit_code: true`
49
+ - "Both off" — `auto_commit_docs: false, auto_commit_code: false`
50
+
51
+ Map the selection to values:
52
+ - "Both on (default)": `auto_commit_docs = true`, `auto_commit_code = true`
53
+ - "Docs only": `auto_commit_docs = true`, `auto_commit_code = false`
54
+ - "Code only": `auto_commit_docs = false`, `auto_commit_code = true`
55
+ - "Both off": `auto_commit_docs = false`, `auto_commit_code = false`
56
+
57
+ Continue to write_config.
58
+ </step>
59
+
60
+ <step name="write_config">
61
+ Write the config file, preserving any existing fields.
62
+
63
+ **If `.specd/config.json` exists:**
64
+ Read the existing JSON. Merge `auto_commit_docs` and `auto_commit_code` into it, preserving all other fields.
65
+
66
+ **If `.specd/config.json` does not exist:**
67
+ Create `.specd/` directory if needed, then write new config with just the commit settings.
68
+
69
+ **Ensure `.specd/` directory exists:**
70
+ ```bash
71
+ mkdir -p .specd
72
+ ```
73
+
74
+ **Write config:**
75
+ Write `.specd/config.json` with the merged content. Example:
76
+ ```json
77
+ {
78
+ "auto_commit_docs": true,
79
+ "auto_commit_code": true
80
+ }
81
+ ```
82
+
83
+ Continue to confirm.
84
+ </step>
85
+
86
+ <step name="confirm">
87
+ Show the final config to the user.
88
+
89
+ ```
90
+ Config written to `.specd/config.json`:
91
+
92
+ {display full JSON content}
93
+
94
+ **Settings:**
95
+ - Auto-commit docs (.specd/ files): {on|off}
96
+ - Auto-commit code (implementation): {on|off}
97
+
98
+ These settings apply to all specd workflows in this project.
99
+ To change later, run `/specd:config` again.
100
+ ```
101
+
102
+ End workflow.
103
+ </step>
104
+
105
+ </process>
106
+
107
+ <success_criteria>
108
+ - [ ] `.specd/config.json` exists with `auto_commit_docs` and `auto_commit_code` fields
109
+ - [ ] Existing config fields preserved (not overwritten)
110
+ - [ ] User confirmed settings via AskUserQuestion
111
+ - [ ] Final config displayed to user
112
+ </success_criteria>
@@ -312,6 +312,23 @@ Continue to commit.
312
312
  <step name="commit">
313
313
  Commit the discussion updates.
314
314
 
315
+ **First, check auto-commit setting. Run this command:**
316
+
317
+ ```bash
318
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_docs": true}'
319
+ ```
320
+
321
+ Read the output. If `auto_commit_docs` is `false`, do NOT run the git commands below. Instead print:
322
+
323
+ ```
324
+ Auto-commit disabled for docs — changes not committed.
325
+ Modified files: .specd/features/{feature-name}/CONTEXT.md, DECISIONS.md, STATE.md, config.json
326
+ ```
327
+
328
+ Then skip ahead to completion.
329
+
330
+ **Only if `auto_commit_docs` is `true` or not set (default), run:**
331
+
315
332
  ```bash
316
333
  git add .specd/features/{feature-name}/CONTEXT.md .specd/features/{feature-name}/DECISIONS.md .specd/features/{feature-name}/STATE.md .specd/features/{feature-name}/config.json
317
334
  git commit -m "docs({feature-name}): discussion session {N}
@@ -81,7 +81,8 @@ Continue to load_context.
81
81
  Load ALL context needed for execution.
82
82
 
83
83
  **Read feature context:**
84
- - `config.json` — Feature settings (check `execution.auto_commit`)
84
+ - `config.json` — Feature settings
85
+ - `.specd/config.json` — Global settings (check `auto_commit_code` and `auto_commit_docs`)
85
86
  - `STATE.md` — Current progress, completed plans
86
87
  - `DECISIONS.md` — Constraints to follow during implementation
87
88
  - `RESEARCH.md` — Implementation notes, pitfalls (if exists)
@@ -180,7 +181,8 @@ Feature execution finished. Review:
180
181
  - Phase RESEARCH.md: patterns identified
181
182
 
182
183
  **Settings:**
183
- - Auto-commit: {yes | no} (from config.json)
184
+ - Auto-commit code: {yes | no} (from .specd/config.json, default: yes)
185
+ - Auto-commit docs: {yes | no} (from .specd/config.json, default: yes)
184
186
 
185
187
  **Next plan:** {plans/phase-XX/YY-PLAN.md}
186
188
  **Objective:** {one-line from plan}
@@ -328,23 +330,26 @@ Use AskUserQuestion:
328
330
 
329
331
  ### 5. Commit task (if auto_commit enabled)
330
332
 
331
- **Check config.json `execution.auto_commit`:**
333
+ **First, check auto-commit setting. Run this command:**
332
334
 
333
- **If auto_commit is true:**
334
335
  ```bash
335
- git add {files from task}
336
- git commit -m "feat({feature}): {task description}"
336
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_code": true}'
337
337
  ```
338
338
 
339
- **If auto_commit is false:**
340
- - Do NOT commit
341
- - Show message:
339
+ Read the output. If `auto_commit_code` is `false`, do NOT run the git commands below. Instead print:
340
+
342
341
  ```
343
- Task {N} complete. Changes ready for review.
344
- Files modified: {file list}
342
+ Auto-commit disabled for code changes not committed.
343
+ Modified files: {files from task}
344
+ ```
345
+
346
+ Then skip to step 6.
345
347
 
346
- Commit when ready:
347
- git add {files} && git commit -m "feat({feature}): {task description}"
348
+ **Only if `auto_commit_code` is `true` or not set (default), run:**
349
+
350
+ ```bash
351
+ git add {files from task}
352
+ git commit -m "feat({feature}): {task description}"
348
353
  ```
349
354
 
350
355
  ### 6. Update STATE.md
@@ -381,18 +386,27 @@ Mark plan complete and suggest next.
381
386
 
382
387
  3. Update stage progress checkboxes
383
388
 
384
- **Commit STATE.md update (if auto_commit enabled):**
389
+ **Commit STATE.md update. First, check auto-commit setting. Run this command:**
390
+
391
+ ```bash
392
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_docs": true}'
393
+ ```
394
+
395
+ Read the output. If `auto_commit_docs` is `false`, do NOT run the git commands below. Instead print:
396
+
397
+ ```
398
+ Auto-commit disabled for docs — STATE.md changes not committed.
399
+ ```
400
+
401
+ Then skip ahead to "Find next plan".
402
+
403
+ **Only if `auto_commit_docs` is `true` or not set (default), run:**
385
404
 
386
- **If auto_commit is true:**
387
405
  ```bash
388
406
  git add .specd/features/{feature}/STATE.md
389
407
  git commit -m "docs({feature}): complete plan {phase-XX/YY}"
390
408
  ```
391
409
 
392
- **If auto_commit is false:**
393
- - Do NOT commit
394
- - Include STATE.md in the list of modified files for user to review
395
-
396
410
  **Find next plan:**
397
411
  - Check ROADMAP.md for next plan in sequence
398
412
  - Or next phase if current phase complete
@@ -356,7 +356,24 @@ Continue to commit_codebase_map.
356
356
  </step>
357
357
 
358
358
  <step name="commit_codebase_map">
359
- Commit the codebase map:
359
+ Commit the codebase map.
360
+
361
+ **First, check auto-commit setting. Run this command:**
362
+
363
+ ```bash
364
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_docs": true}'
365
+ ```
366
+
367
+ Read the output. If `auto_commit_docs` is `false`, do NOT run the git commands below. Instead print:
368
+
369
+ ```
370
+ Auto-commit disabled for docs — changes not committed.
371
+ Modified files: .specd/codebase/*.md
372
+ ```
373
+
374
+ Then skip ahead to completion.
375
+
376
+ **Only if `auto_commit_docs` is `true` or not set (default), run:**
360
377
 
361
378
  ```bash
362
379
  git add .specd/codebase/*.md .specd/config.json
@@ -641,6 +641,23 @@ Continue to commit.
641
641
  <step name="commit">
642
642
  Commit the feature initialization.
643
643
 
644
+ **First, check auto-commit setting. Run this command:**
645
+
646
+ ```bash
647
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_docs": true}'
648
+ ```
649
+
650
+ Read the output. If `auto_commit_docs` is `false`, do NOT run the git commands below. Instead print:
651
+
652
+ ```
653
+ Auto-commit disabled for docs — changes not committed.
654
+ Modified files: .specd/features/{feature-name}/
655
+ ```
656
+
657
+ Then skip ahead to completion.
658
+
659
+ **Only if `auto_commit_docs` is `true` or not set (default), run:**
660
+
644
661
  ```bash
645
662
  git add .specd/features/{feature-name}/
646
663
  git commit -m "docs({feature-name}): initialize feature
@@ -592,6 +592,23 @@ Set `stage` to `"complete"`.
592
592
  **Update STATE.md:**
593
593
  Set stage to `complete`.
594
594
 
595
+ **First, check auto-commit setting. Run this command:**
596
+
597
+ ```bash
598
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_docs": true}'
599
+ ```
600
+
601
+ Read the output. If `auto_commit_docs` is `false`, do NOT run the git commands below. Instead print:
602
+
603
+ ```
604
+ Auto-commit disabled for docs — feature completion not committed.
605
+ Modified files: .specd/features/{name}/config.json, .specd/features/{name}/STATE.md
606
+ ```
607
+
608
+ Then end the workflow.
609
+
610
+ **Only if `auto_commit_docs` is `true` or not set (default), run:**
611
+
595
612
  ```bash
596
613
  git add .specd/features/{name}/config.json .specd/features/{name}/STATE.md
597
614
  git commit -m "docs({feature-name}): feature complete
@@ -609,6 +609,23 @@ Continue to commit.
609
609
  <step name="commit">
610
610
  Commit the roadmap.
611
611
 
612
+ **First, check auto-commit setting. Run this command:**
613
+
614
+ ```bash
615
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_docs": true}'
616
+ ```
617
+
618
+ Read the output. If `auto_commit_docs` is `false`, do NOT run the git commands below. Instead print:
619
+
620
+ ```
621
+ Auto-commit disabled for docs — changes not committed.
622
+ Modified files: .specd/features/{feature-name}/ROADMAP.md, plans/, STATE.md, config.json
623
+ ```
624
+
625
+ Then skip ahead to completion.
626
+
627
+ **Only if `auto_commit_docs` is `true` or not set (default), run:**
628
+
612
629
  ```bash
613
630
  git add .specd/features/{feature-name}/ROADMAP.md .specd/features/{feature-name}/plans/ .specd/features/{feature-name}/STATE.md .specd/features/{feature-name}/config.json
614
631
  git commit -m "docs({feature-name}): create roadmap
@@ -301,6 +301,23 @@ Continue to commit.
301
301
  <step name="commit">
302
302
  Commit the plans.
303
303
 
304
+ **First, check auto-commit setting. Run this command:**
305
+
306
+ ```bash
307
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_docs": true}'
308
+ ```
309
+
310
+ Read the output. If `auto_commit_docs` is `false`, do NOT run the git commands below. Instead print:
311
+
312
+ ```
313
+ Auto-commit disabled for docs — changes not committed.
314
+ Modified files: .specd/features/{feature-name}/plans/phase-{NN}/*-PLAN.md, ROADMAP.md, STATE.md
315
+ ```
316
+
317
+ Then skip ahead to completion.
318
+
319
+ **Only if `auto_commit_docs` is `true` or not set (default), run:**
320
+
304
321
  ```bash
305
322
  git add .specd/features/{feature-name}/plans/phase-{NN}/*-PLAN.md
306
323
  git add .specd/features/{feature-name}/ROADMAP.md
@@ -676,6 +676,23 @@ Continue to commit.
676
676
  <step name="commit">
677
677
  Commit the phase preparation.
678
678
 
679
+ **First, check auto-commit setting. Run this command:**
680
+
681
+ ```bash
682
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_docs": true}'
683
+ ```
684
+
685
+ Read the output. If `auto_commit_docs` is `false`, do NOT run the git commands below. Instead print:
686
+
687
+ ```
688
+ Auto-commit disabled for docs — changes not committed.
689
+ Modified files: .specd/features/{feature}/plans/phase-{NN}/CONTEXT.md, RESEARCH.md (if created), DECISIONS.md
690
+ ```
691
+
692
+ Then skip ahead to completion.
693
+
694
+ **Only if `auto_commit_docs` is `true` or not set (default), run:**
695
+
679
696
  ```bash
680
697
  # Add phase CONTEXT.md
681
698
  git add ".specd/features/{feature}/plans/phase-{NN}/CONTEXT.md"
@@ -515,6 +515,23 @@ Continue to commit.
515
515
  <step name="commit">
516
516
  Commit the phase research.
517
517
 
518
+ **First, check auto-commit setting. Run this command:**
519
+
520
+ ```bash
521
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_docs": true}'
522
+ ```
523
+
524
+ Read the output. If `auto_commit_docs` is `false`, do NOT run the git commands below. Instead print:
525
+
526
+ ```
527
+ Auto-commit disabled for docs — changes not committed.
528
+ Modified files: .specd/features/{feature}/plans/phase-{NN}/RESEARCH.md, DECISIONS.md
529
+ ```
530
+
531
+ Then skip ahead to completion.
532
+
533
+ **Only if `auto_commit_docs` is `true` or not set (default), run:**
534
+
518
535
  ```bash
519
536
  git add ".specd/features/{feature}/plans/phase-{NN}/RESEARCH.md"
520
537
  git add ".specd/features/{feature}/DECISIONS.md"
@@ -450,7 +450,23 @@ Continue to commit_and_next.
450
450
  <step name="commit_and_next">
451
451
  Commit review changes and suggest next steps.
452
452
 
453
- **Commit changes:**
453
+ **First, check auto-commit setting. Run this command:**
454
+
455
+ ```bash
456
+ cat .specd/config.json 2>/dev/null || echo '{"auto_commit_docs": true}'
457
+ ```
458
+
459
+ Read the output. If `auto_commit_docs` is `false`, do NOT run the git commands below. Instead print:
460
+
461
+ ```
462
+ Auto-commit disabled for docs — changes not committed.
463
+ Modified files: .specd/features/{feature}/STATE.md, DECISIONS.md, CHANGELOG.md, config.json, plans/phase-{NN}/
464
+ ```
465
+
466
+ Then skip ahead to presenting next steps below.
467
+
468
+ **Only if `auto_commit_docs` is `true` or not set (default), run:**
469
+
454
470
  ```bash
455
471
  git add .specd/features/{feature}/STATE.md
456
472
  git add .specd/features/{feature}/DECISIONS.md
@@ -10,17 +10,39 @@
10
10
 
11
11
  Check if `$ARGUMENTS` contains `--all`. If so, completed features will be shown in a separate section.
12
12
 
13
- ### 2. Check for features directory
13
+ ### 2. Detect orchestrator mode
14
+
15
+ Read `.specd/config.json` if it exists.
16
+
17
+ ```bash
18
+ cat .specd/config.json 2>/dev/null
19
+ ```
20
+
21
+ **If config exists and `type` equals `"orchestrator"`:**
22
+ - Set mode = orchestrator
23
+ - Read `projects` array from config.json — each entry has `name` and `path`
24
+ - Continue to step 3
25
+
26
+ **Otherwise (no config, or type != "orchestrator"):**
27
+ - Set mode = project
28
+ - Continue to step 3
29
+
30
+ ### 3. Check for features directory
14
31
 
15
32
  Use Glob to check if `.specd/features/*/config.json` matches anything.
16
33
 
17
- If no matches: output the following and stop:
34
+ **If mode = orchestrator and no root features:**
35
+ Also check sub-project features — scan each project path for `{project-path}/.specd/features/*/config.json`. If features found in sub-projects, continue (there's something to show).
36
+
37
+ **If no features found anywhere:** output the following and stop:
18
38
 
19
39
  ```
20
40
  No features found. Start one with `/specd:feature:new [name]`.
21
41
  ```
22
42
 
23
- ### 3. Gather feature data
43
+ ### 4. Gather feature data
44
+
45
+ #### If mode = project (single-project, unchanged):
24
46
 
25
47
  For each feature directory in `.specd/features/`:
26
48
 
@@ -30,7 +52,32 @@ For each feature directory in `.specd/features/`:
30
52
  - **Plan completion**: From the `Plan Status` table, count rows with Status = `Complete` vs total rows. Format as `completed/total` (e.g. `5/8`). If no Plan Status table or no rows, use `—`.
31
53
  - **Next action**: Extract the first meaningful line from the `## Next Steps` section. Keep it short — take just the **Recommended:** line if present, otherwise the first line. Strip markdown formatting like `**Recommended:**` prefix. Truncate to ~50 chars if needed.
32
54
 
33
- ### 4. Sort features
55
+ #### If mode = orchestrator:
56
+
57
+ **Step 4a: Gather root features (same as single-project).**
58
+
59
+ For each feature directory in `.specd/features/`, extract feature_name, created, stage, plans, next_action using the same logic as single-project mode.
60
+
61
+ **Step 4b: For each root feature, check for sub-project features.**
62
+
63
+ Read each root feature's `config.json`. If it has a `projects` array (orchestrator feature):
64
+
65
+ For each project entry `{name, path}` in the feature's `projects` array:
66
+ 1. Check if `{path}/.specd/features/{feature_name}/` exists
67
+ 2. If yes, read `{path}/.specd/features/{feature_name}/config.json` and `{path}/.specd/features/{feature_name}/STATE.md`
68
+ 3. Extract the same fields: stage (from STATE.md `**Stage:**`), plan completion, next action
69
+ 4. Store as a sub-feature of the parent orchestrator feature, tagged with the project name
70
+
71
+ Mark this root feature as an "orchestrator feature" (has sub-project children).
72
+
73
+ **Step 4c: Scan for standalone sub-project features.**
74
+
75
+ For each project in the repo-level `.specd/config.json` `projects` array:
76
+ 1. Use Glob to find `{project-path}/.specd/features/*/config.json`
77
+ 2. For each feature found, check if it was already captured as a sub-feature of an orchestrator feature in step 4b
78
+ 3. If NOT already captured, gather its data (same extraction logic) and store as a standalone feature, grouped by project name/path
79
+
80
+ ### 5. Sort features
34
81
 
35
82
  Sort active features by stage priority (highest first), then by created date (oldest first):
36
83
 
@@ -39,7 +86,14 @@ Sort active features by stage priority (highest first), then by created date (ol
39
86
  3. `research`
40
87
  4. `discussion` (least advanced)
41
88
 
42
- ### 5. Format output
89
+ **For orchestrator mode:** Apply the same sort to:
90
+ - Root/orchestrator features (the parent rows)
91
+ - Sub-project features within each orchestrator feature
92
+ - Standalone features within each project group
93
+
94
+ ### 6. Format output
95
+
96
+ #### If mode = project (single-project, unchanged):
43
97
 
44
98
  **Count features:** Calculate total count and in-progress count (non-complete).
45
99
 
@@ -80,6 +134,78 @@ Run `/specd:status --all` to include completed features.
80
134
 
81
135
  Where `Completed` date comes from the `**Last Updated:**` field in STATE.md.
82
136
 
83
- ### 6. Output
137
+ #### If mode = orchestrator:
138
+
139
+ **Count features:** Calculate total across root features + standalone sub-project features. In-progress = non-complete/non-abandoned.
140
+
141
+ **Output header:**
142
+
143
+ ```
144
+ # Feature Status
145
+
146
+ _{total} features, {in_progress} in progress — orchestrator mode_
147
+ ```
148
+
149
+ **Active features table (orchestrator features with sub-projects):**
150
+
151
+ For each active root feature (not complete/abandoned, unless `--all`):
152
+
153
+ If it's an orchestrator feature (has sub-project children):
154
+
155
+ ```
156
+ | Feature | Stage | Plans | Created | Next Action |
157
+ |---------|-------|-------|---------|-------------|
158
+ | {name} | {stage} | {plans} | {created} | {next_action} |
159
+ | └ {project-name} | {stage} | {plans} | | {next_action} |
160
+ | └ {project-name} | {stage} | {plans} | | {next_action} |
161
+ ```
162
+
163
+ - Orchestrator feature is the parent row with full data
164
+ - Sub-project rows use `└ {project-name}` in the Feature column
165
+ - Sub-project rows leave Created empty (inherited from parent)
166
+ - Sort sub-project rows by stage priority (same as main sort)
167
+
168
+ If it's a plain root feature (no sub-project children), show it as a normal row (same as single-project).
169
+
170
+ **If standalone sub-project features exist, add a section:**
171
+
172
+ ```
173
+ ### Project Features
174
+ ```
175
+
176
+ For each project that has standalone features:
177
+
178
+ ```
179
+ **{project-name}** ({project-path})
180
+
181
+ | Feature | Stage | Plans | Created | Next Action |
182
+ |---------|-------|-------|---------|-------------|
183
+ | {name} | {stage} | {plans} | {created} | {next_action} |
184
+ ```
185
+
186
+ Only show active standalone features (not complete/abandoned, unless `--all`).
187
+
188
+ **Completed/abandoned features with `--all` flag:**
189
+
190
+ **If `--all` flag is NOT set and there are completed/abandoned features (root or sub-project):**
191
+
192
+ ```
193
+ Run `/specd:status --all` to include completed features.
194
+ ```
195
+
196
+ **If `--all` flag IS set and there are completed/abandoned features, add:**
197
+
198
+ ```
199
+ ### Completed
200
+
201
+ | Feature | Plans | Completed |
202
+ |---------|-------|-----------|
203
+ | {name} | {completed}/{total} | {last_updated} |
204
+ | └ {project-name} | {completed}/{total} | {last_updated} |
205
+ ```
206
+
207
+ Show completed orchestrator features with their sub-project rows indented, and completed standalone sub-project features under their project heading.
208
+
209
+ ### 7. Output
84
210
 
85
211
  Print the formatted dashboard directly. No file writes. No Task agents. No AskUserQuestion.