specpro-cli 0.1.0__py3-none-any.whl
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.
- specpro_cli/__init__.py +16 -0
- specpro_cli/assets/commands/specpro.analyze.md +1102 -0
- specpro_cli/assets/commands/specpro.checklist.md +335 -0
- specpro_cli/assets/commands/specpro.clarify.md +581 -0
- specpro_cli/assets/commands/specpro.constitution.md +488 -0
- specpro_cli/assets/commands/specpro.feature.md +115 -0
- specpro_cli/assets/commands/specpro.implement.md +1881 -0
- specpro_cli/assets/commands/specpro.manual-test.md +206 -0
- specpro_cli/assets/commands/specpro.plan.md +3284 -0
- specpro_cli/assets/commands/specpro.qc.md +1489 -0
- specpro_cli/assets/commands/specpro.scenarios.md +154 -0
- specpro_cli/assets/commands/specpro.specify.md +1449 -0
- specpro_cli/assets/commands/specpro.status.md +863 -0
- specpro_cli/assets/commands/specpro.tasks.md +1207 -0
- specpro_cli/assets/commands/specpro.test-implement.md +462 -0
- specpro_cli/assets/commands/specpro.test-plan.md +383 -0
- specpro_cli/assets/commands/specpro.user-manual.md +178 -0
- specpro_cli/assets/scripts/bash/check-anti-coupling.sh +293 -0
- specpro_cli/assets/scripts/bash/check-prerequisites.sh +176 -0
- specpro_cli/assets/scripts/bash/common.sh +88 -0
- specpro_cli/assets/scripts/bash/create-new-feature.sh +336 -0
- specpro_cli/assets/scripts/bash/qc-auto-fix.sh +121 -0
- specpro_cli/assets/scripts/bash/setup-plan.sh +60 -0
- specpro_cli/assets/scripts/bash/verify-cumulative-records.sh +203 -0
- specpro_cli/assets/scripts/bash/verify-deliverables-tracked.sh +147 -0
- specpro_cli/assets/scripts/bash/verify-deployment.sh +239 -0
- specpro_cli/assets/scripts/bash/verify-frontmatter-yaml.sh +63 -0
- specpro_cli/assets/scripts/bash/verify-ledger.sh +376 -0
- specpro_cli/assets/scripts/bash/verify-shapes.sh +1082 -0
- specpro_cli/assets/scripts/git-hooks/pre-commit +243 -0
- specpro_cli/assets/scripts/install-git-hooks.sh +67 -0
- specpro_cli/assets/scripts/powershell/check-anti-coupling.ps1 +249 -0
- specpro_cli/assets/scripts/powershell/check-prerequisites.ps1 +148 -0
- specpro_cli/assets/scripts/powershell/common.ps1 +95 -0
- specpro_cli/assets/scripts/powershell/create-new-feature.ps1 +229 -0
- specpro_cli/assets/scripts/powershell/qc-auto-fix.ps1 +110 -0
- specpro_cli/assets/scripts/powershell/setup-plan.ps1 +61 -0
- specpro_cli/assets/scripts/powershell/verify-cumulative-records.ps1 +133 -0
- specpro_cli/assets/scripts/powershell/verify-deliverables-tracked.ps1 +112 -0
- specpro_cli/assets/scripts/powershell/verify-deployment.ps1 +278 -0
- specpro_cli/assets/scripts/powershell/verify-frontmatter-yaml.ps1 +56 -0
- specpro_cli/assets/scripts/powershell/verify-ledger.ps1 +383 -0
- specpro_cli/assets/scripts/powershell/verify-shapes.ps1 +978 -0
- specpro_cli/assets/templates/agent-context-template.md +49 -0
- specpro_cli/assets/templates/assumptions-template.md +248 -0
- specpro_cli/assets/templates/checklist-template.md +40 -0
- specpro_cli/assets/templates/clarifications-template.md +155 -0
- specpro_cli/assets/templates/constitution-template.md +50 -0
- specpro_cli/assets/templates/feature-spec-template.md +66 -0
- specpro_cli/assets/templates/plan-overview-template.md +150 -0
- specpro_cli/assets/templates/plan-template.md +387 -0
- specpro_cli/assets/templates/protocol-golden-bytes-guide.md +195 -0
- specpro_cli/assets/templates/requirements-template.md +356 -0
- specpro_cli/assets/templates/spec-template.md +267 -0
- specpro_cli/assets/templates/tasks-template.md +252 -0
- specpro_cli/assets/templates/test-tasks-template.md +174 -0
- specpro_cli/cli/__init__.py +5 -0
- specpro_cli/cli/cmd_init.py +416 -0
- specpro_cli/cli/cmd_remove.py +122 -0
- specpro_cli/cli/entry.py +181 -0
- specpro_cli/integrations/__init__.py +36 -0
- specpro_cli/integrations/base.py +601 -0
- specpro_cli/integrations/claude/__init__.py +101 -0
- specpro_cli/integrations/copilot/__init__.py +153 -0
- specpro_cli/integrations/cursor_agent/__init__.py +51 -0
- specpro_cli/integrations/gemini/__init__.py +44 -0
- specpro_cli/integrations/opencode/__init__.py +48 -0
- specpro_cli/integrations/qodercli/__init__.py +54 -0
- specpro_cli/integrations/registry.py +88 -0
- specpro_cli/packaged/__init__.py +5 -0
- specpro_cli/packaged/sync.py +106 -0
- specpro_cli-0.1.0.dist-info/METADATA +117 -0
- specpro_cli-0.1.0.dist-info/RECORD +76 -0
- specpro_cli-0.1.0.dist-info/WHEEL +4 -0
- specpro_cli-0.1.0.dist-info/entry_points.txt +2 -0
- specpro_cli-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,863 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Display a comprehensive dashboard of project status, Lifecycle tracking, and quality metrics.
|
|
3
|
+
handoffs: []
|
|
4
|
+
writes: []
|
|
5
|
+
# Read-only: this command produces no artifact.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## User Input
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
$ARGUMENTS
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
You **MUST** consider the user input before proceeding (if not empty).
|
|
15
|
+
|
|
16
|
+
**Rerun safety โ read-only** โ ๏ธ [settled 2026-09-13]:
|
|
17
|
+
|
|
18
|
+
This command **writes no project artifact**. It reads the artifacts and renders a dashboard. The shared rerun rule (*detect the artifact; absent โ initial, present โ incremental; overwriting requires explicit AND re-confirmed intent*) governs the commands that produce them.
|
|
19
|
+
|
|
20
|
+
The dashboard is derived output: it is never a source, and refreshing it never replaces anything.
|
|
21
|
+
|
|
22
|
+
> **Why a shared rule rather than per-command courtesy**: nine of the twelve non-implementation commands already had some protection, but each wrote it its own way, and three had none โ not by decision, but because the discipline had no shared carrier. The rule everywhere else is: **detect the artifact; absent โ initial, present โ incremental; overwriting requires explicit AND re-confirmed intent.** This command's read-only posture means it never triggers the third clause.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Scope Resolution ๐ (FR-063 / T050 ยท v0.23)
|
|
26
|
+
|
|
27
|
+
1. **ไฝ็จๅๅคๅฎ**: ๅฝๅๅทฅไฝ็ฎๅฝไฝไบ `specs/fNNN-็ฎ็งฐ/` ๅ
โ **feature ไฝ็จๅ**(่ฏปๅ่ๅด = ๆฌ feature ็ฎๅฝ,็ฑ `check-prerequisites.sh` ็ไฝ็จๅๆ็ฅ่งฃๆ);ไฝไบไปๅบๆ นๆ `specs/` ๆ น โ **ๆฏไฝ็จๅ**(่ฏปๅๆฏ่งๆ ผ้พ)ใfeature ไฝ็จๅๅ
MUST NOT ๅๆฏไบง็ฉโโๅฏไธไพๅค:**ๅ็ฐ็ป่ฎฐ**(ๅฐ่ดฆ่ทฏ็ฑ,`[specify]`/`[plan]` ๅๅบ)ใ
|
|
28
|
+
2. **ๆฐไผ่ฏ้ฆๆฌกๆง่ก**: ่ฅ `specs/features.md` ๅญๅจไธๅซ `active` ่กใ่็จๆทๆชๆๆไฝ็จๅ โ **่ฏข้ฎ็จๆท**ๅจๆฏไฝ็จๅ่ฟๆฏๆไธช feature ๅ
ๅทฅไฝ,MUST NOT ่ช่กๆ้ใ
|
|
29
|
+
3. ๆฌๅฝไปค็ไบง็ฉ่ทฏๅพ้ไน่งฃๆ:feature ไฝ็จๅไธ่ฝ `<feature ็ฎๅฝ>/`,ๆฏไฝ็จๅไธ่ฝ `specs/`ใ
|
|
30
|
+
|
|
31
|
+
## Outline
|
|
32
|
+
|
|
33
|
+
Goal: Provide a visual, comprehensive status dashboard showing all aspects of the specification-driven development workflow, including Lifecycle tracking, quality metrics, and progress indicators.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Execution Steps
|
|
38
|
+
|
|
39
|
+
**Step 1: Setup**: Run `.specpro/scripts/bash/check-prerequisites.sh --json` from repo root and parse paths.
|
|
40
|
+
|
|
41
|
+
**Step 2: Load specification status**:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Load spec.md
|
|
45
|
+
FEATURE_SPEC="specs/spec.md"
|
|
46
|
+
|
|
47
|
+
# Extract version
|
|
48
|
+
# Format contract: version line is a bold text line `**Version**: X.Y.Z`
|
|
49
|
+
SPEC_VERSION=$(grep '^\*\*Version\*\*:' "$FEATURE_SPEC" | head -1 | awk '{print $2}')
|
|
50
|
+
|
|
51
|
+
# Extract update statistics
|
|
52
|
+
# โ ๏ธ **The User-Story heading is `### US1 - [Brief Title] (Priority: P1)`** โ see
|
|
53
|
+
# `templates/spec-template.md`. It was never `### User Story`, so this count was **0 on
|
|
54
|
+
# every spec built from the template** and the panel showed "0" for a file with 11 stories
|
|
55
|
+
# (T094/ISS-63). โ ๏ธ Same defect appears in `qc.md`'s `check_cp002` (count AND its
|
|
56
|
+
# line-number lookup) and in `specpro.specify.md`'s existing-spec statistics โ all four
|
|
57
|
+
# move together, or the next reader writes the predicate from whichever copy they find.
|
|
58
|
+
US_COUNT=$(grep -cE '^### US[0-9]+ ' "$FEATURE_SPEC" 2>/dev/null || true)
|
|
59
|
+
: "${US_COUNT:=0}"
|
|
60
|
+
# FR line format contract: indented bold list item (see spec-template).
|
|
61
|
+
# qc and status MUST stay consistent. Anchored on the trailing colon to
|
|
62
|
+
# avoid matching FR mentions in prose. Supports sub-numbers like FR-xxxA.
|
|
63
|
+
# โ ๏ธ `|| echo "0"` was WRONG even here, where the PATTERN is right: `grep -c` prints `0`
|
|
64
|
+
# AND exits 1, so the idiom produced the two-line string "0\n0". `|| true` + `:=` keeps the
|
|
65
|
+
# value a single number (T093/T094).
|
|
66
|
+
FR_COUNT=$(grep -cE '^[[:space:]]*- \*\*FR-[0-9]+[A-E]?\*\*:' "$FEATURE_SPEC" 2>/dev/null || true)
|
|
67
|
+
: "${FR_COUNT:=0}"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Step 3: Parse Lifecycle fields**:
|
|
71
|
+
|
|
72
|
+
```markdown
|
|
73
|
+
Load spec.md and extract ALL Lifecycle fields:
|
|
74
|
+
- User Stories: ID, Title, Priority, Lifecycle: [specify] [plan] [tasks]
|
|
75
|
+
- Functional Requirements: ID, Title, Lifecycle: [specify] [plan] [tasks]
|
|
76
|
+
<!-- โ ๏ธ **Those two are the whole list** (`T249` / `ISS-225`): a third line here used to name
|
|
77
|
+
`Constitution Constraints: Text, Lifecycle: [specify] [plan] [tasks]`, and **that section
|
|
78
|
+
carries no `**Lifecycle**:` field** โ the template emits none, so the line described a
|
|
79
|
+
class this scan would look for and never find. Adjudication + evidence:
|
|
80
|
+
`commands/specpro.specify.md` โ *Lifecycle Update Rules* (`T239` / `ISS-212`).
|
|
81
|
+
โ ๏ธ **Do not add it back**, and do not "fix" it by giving that section the field โ
|
|
82
|
+
nothing parses a constraint's lifecycle, so it would be a value with no consumer.
|
|
83
|
+
The counting below is **per segment** (specify / plan / tasks), not per class, so it is
|
|
84
|
+
unaffected by the removal. -->
|
|
85
|
+
|
|
86
|
+
โ ๏ธ CRITICAL: Use NEW status labels (create/update/delete/processed/deprecated):
|
|
87
|
+
- **specify**: create | update | delete | processed | deprecated
|
|
88
|
+
- **plan**: create | update | delete | processed | deprecated
|
|
89
|
+
- **tasks**: create | update | delete | processed | deprecated
|
|
90
|
+
|
|
91
|
+
Calculate statistics:
|
|
92
|
+
- Specify stage: How many items per specifyStatus (create, update, delete, processed, deprecated)
|
|
93
|
+
- Plan stage: How many items per planStatus (create, update, delete, processed, deprecated)
|
|
94
|
+
- Tasks stage: How many items per tasksStatus (create, update, delete, processed, deprecated)
|
|
95
|
+
- Overall completion: Percentage of items with planStatus = processed AND tasksStatus = processed
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Step 4: Load quality checklist** (if exists):
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
QUALITY_CHECKLIST="specs/checklists/requirements.md"
|
|
102
|
+
|
|
103
|
+
if [[ -f "$QUALITY_CHECKLIST" ]]; then
|
|
104
|
+
# Extract quality score
|
|
105
|
+
# โ ๏ธ **่ฏปๆธ
ๅ็ๅฎๆบๅธฆ็้ฃไธไธชๅญๆฎต**๏ผ`T174`๏ผ๏ผๆฌ่ๆญคๅ่ฏป็ๆฏ `Overall Quality` ๅคๅ ไธไธช
|
|
106
|
+
# `[0-9]/[0-9]` ็**ๅๆฐๅฝข** โโ ่ `templates/requirements-template.md` **ไปไธไบงๅบ่ฟไธชๅญๆฎต**๏ผ
|
|
107
|
+
# ้ฃไธชๅฝข็ถๅจๆฌไปๅบ็ไปปไฝๆธ
ๅไธ้ฝๅน้
ไธๅฐใๆธ
ๅ็ๆญฃๆ็ๆฏ๏ผ`**Status**: PASS|BLOCK`ใ
|
|
108
|
+
# `**Total Items**`ใ`**Passed**`ใ`**Failed**`๏ผไปฅๅ้ๆก็ `**Status**: x|โ Skipped|โ Failed`ใ
|
|
109
|
+
QUALITY_STATUS=$(grep -m1 -oE '\*\*Status\*\*: *[A-Z]+' "$QUALITY_CHECKLIST" | sed 's/.*: *//')
|
|
110
|
+
QUALITY_TOTAL=$(grep -m1 -oE '\*\*Total Items\*\*: *[0-9]+' "$QUALITY_CHECKLIST" | grep -oE '[0-9]+')
|
|
111
|
+
QUALITY_PASSED=$(grep -m1 -oE '\*\*Passed\*\*: *[0-9]+' "$QUALITY_CHECKLIST" | grep -oE '[0-9]+')
|
|
112
|
+
QUALITY_SCORE="${QUALITY_PASSED:-?}/${QUALITY_TOTAL:-?}"
|
|
113
|
+
|
|
114
|
+
# Count issues
|
|
115
|
+
# โ ๏ธ ๅคฑ่ดฅๆฐๅๆธ
ๅ่ชๅทฑๅ็ `**Failed**`๏ผไธๅ `โ FAIL` ๅญ้ข๏ผ`T174`๏ผโโ ๅ่
ๆฒกๆ็ไบง่
ใ
|
|
116
|
+
FAIL_COUNT=$(grep -m1 -oE '\*\*Failed\*\*: *[0-9]+' "$QUALITY_CHECKLIST" | grep -oE '[0-9]+')
|
|
117
|
+
: "${FAIL_COUNT:=0}"
|
|
118
|
+
# โ ๏ธ **`โ ๏ธ WARNING` ่ฟไธ็ฑปๅจๆธ
ๅ้ๆ นๆฌไธๅญๅจ**๏ผๆจกๆฟๅชๆ PASS|BLOCK ไธ x|โ Skipped|โ Failed
|
|
119
|
+
# ไธ็งๅๅผ๏ผๆฒกๆ warning ๆกฃใโ ้ฃไธช่ฎกๆฐ**ๆฐธ่ฟไธบ 0**๏ผ่ไธไธชๆไธบ 0 ็ๆๆ ่ฏป่ตทๆฅๅ"ๆฒกๆ่ญฆๅ"ใ
|
|
120
|
+
# โ ๅ ๆๅฎ๏ผ่ไธๆฏไฟ็ไธไธชๅชไผ่ฟๅ 0 ็ๆฐ๏ผ`T174`๏ผใ
|
|
121
|
+
else
|
|
122
|
+
QUALITY_SCORE="N/A"
|
|
123
|
+
FAIL_COUNT="0"
|
|
124
|
+
QUALITY_STATUS="(no checklist)"
|
|
125
|
+
fi
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Step 5: Load contract coverage**:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
CONTRACTS_DIR="specs/contracts/"
|
|
132
|
+
|
|
133
|
+
if [[ -d "$CONTRACTS_DIR" ]]; then
|
|
134
|
+
# Count contracts by User Story
|
|
135
|
+
P1_CONTRACTS=$(find "$CONTRACTS_DIR" -name "*.md" -exec grep -l "Priority.*P1" {} \; 2>/dev/null | wc -l)
|
|
136
|
+
P2_CONTRACTS=$(find "$CONTRACTS_DIR" -name "*.md" -exec grep -l "Priority.*P2" {} \; 2>/dev/null | wc -l)
|
|
137
|
+
P3_CONTRACTS=$(find "$CONTRACTS_DIR" -name "*.md" -exec grep -l "Priority.*P3" {} \; 2>/dev/null | wc -l)
|
|
138
|
+
|
|
139
|
+
TOTAL_CONTRACTS=$(find "$CONTRACTS_DIR" -name "*.md" | wc -l)
|
|
140
|
+
else
|
|
141
|
+
P1_CONTRACTS=0
|
|
142
|
+
P2_CONTRACTS=0
|
|
143
|
+
P3_CONTRACTS=0
|
|
144
|
+
TOTAL_CONTRACTS=0
|
|
145
|
+
fi
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Step 6: Load tasks status**:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
TASKS_FILE="specs/tasks.md"
|
|
152
|
+
|
|
153
|
+
if [[ -f "$TASKS_FILE" ]]; then
|
|
154
|
+
# Count total tasks
|
|
155
|
+
TOTAL_TASKS=$(grep -c "^- \[ \]" "$TASKS_FILE" 2>/dev/null || true)
|
|
156
|
+
: "${TOTAL_TASKS:=0}"
|
|
157
|
+
COMPLETED_TASKS=$(grep -c "^- \[x\]" "$TASKS_FILE" 2>/dev/null || true)
|
|
158
|
+
: "${COMPLETED_TASKS:=0}"
|
|
159
|
+
|
|
160
|
+
# Calculate completion percentage
|
|
161
|
+
if [[ $TOTAL_TASKS -gt 0 ]]; then
|
|
162
|
+
TASK_PERCENT=$((COMPLETED_TASKS * 100 / TOTAL_TASKS))
|
|
163
|
+
else
|
|
164
|
+
TASK_PERCENT=0
|
|
165
|
+
fi
|
|
166
|
+
else
|
|
167
|
+
TOTAL_TASKS=0
|
|
168
|
+
COMPLETED_TASKS=0
|
|
169
|
+
TASK_PERCENT=0
|
|
170
|
+
fi
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Step 6.2: Load test tasks status** ๐ (if exists):
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
TEST_TASKS_FILE="specs/test-tasks.md"
|
|
177
|
+
|
|
178
|
+
if [[ -f "$TEST_TASKS_FILE" ]]; then
|
|
179
|
+
TEST_TASKS_EXISTS=true
|
|
180
|
+
|
|
181
|
+
# Count high-level test tasks by prefix (INF/IT/CE/AE), EXCLUDING [DELETED] stale entries
|
|
182
|
+
REMAINING_TEST_TASKS=$(grep -E "^- \[ \] (INF|IT|CE|AE)-" "$TEST_TASKS_FILE" 2>/dev/null | grep -cv "\[DELETED\]" || true)
|
|
183
|
+
: "${REMAINING_TEST_TASKS:=0}"
|
|
184
|
+
COMPLETED_TEST_TASKS=$(grep -E "^- \[x\] (INF|IT|CE|AE)-" "$TEST_TASKS_FILE" 2>/dev/null | grep -cv "\[DELETED\]" || true)
|
|
185
|
+
: "${COMPLETED_TEST_TASKS:=0}"
|
|
186
|
+
|
|
187
|
+
# Completion percentage (over done + pending)
|
|
188
|
+
TEST_TASK_TOTAL=$((REMAINING_TEST_TASKS + COMPLETED_TEST_TASKS))
|
|
189
|
+
if [[ $TEST_TASK_TOTAL -gt 0 ]]; then
|
|
190
|
+
TEST_TASK_PERCENT=$((COMPLETED_TEST_TASKS * 100 / TEST_TASK_TOTAL))
|
|
191
|
+
else
|
|
192
|
+
TEST_TASK_PERCENT=0
|
|
193
|
+
fi
|
|
194
|
+
|
|
195
|
+
# Coverage matrix stats โ โ ๏ธ anchor the status column at END OF LINE (`| <status> |$`):
|
|
196
|
+
# the status column is the LAST cell of each matrix row. Plain substring matches FALSE-count
|
|
197
|
+
# layer cells (a pending-impl row has 4 layer cells reading "| pending-impl |"). The optional `( \(.*\))?`
|
|
198
|
+
# group absorbs annotated statuses like "not-started (decode sub-item pending)". Do NOT use `[^|]*$`-
|
|
199
|
+
# style classes here โ they over-match across cells.
|
|
200
|
+
MATRIX_FR_TOTAL=$(grep -cE "^\| FR-[0-9]+[A-E]? \|" "$TEST_TASKS_FILE" 2>/dev/null || true)
|
|
201
|
+
: "${MATRIX_FR_TOTAL:=0}"
|
|
202
|
+
MATRIX_FR_PENDING_IMPL=$(grep -cE "\| pending-impl \|$" "$TEST_TASKS_FILE" 2>/dev/null || true)
|
|
203
|
+
: "${MATRIX_FR_PENDING_IMPL:=0}"
|
|
204
|
+
MATRIX_FR_MANUAL=$(grep -cE "\| manual \|$" "$TEST_TASKS_FILE" 2>/dev/null || true)
|
|
205
|
+
: "${MATRIX_FR_MANUAL:=0}"
|
|
206
|
+
MATRIX_FR_NOT_APPLICABLE=$(grep -cE "\| not-applicable \|$" "$TEST_TASKS_FILE" 2>/dev/null || true)
|
|
207
|
+
: "${MATRIX_FR_NOT_APPLICABLE:=0}"
|
|
208
|
+
MATRIX_FR_DEPRECATED=$(grep -cE "\| deprecated \|$" "$TEST_TASKS_FILE" 2>/dev/null || true)
|
|
209
|
+
: "${MATRIX_FR_DEPRECATED:=0}"
|
|
210
|
+
MATRIX_FR_NOT_STARTED=$(grep -cE "\| not-started( \(.*\))? \|$" "$TEST_TASKS_FILE" 2>/dev/null || true)
|
|
211
|
+
: "${MATRIX_FR_NOT_STARTED:=0}"
|
|
212
|
+
MATRIX_FR_IN_PROGRESS=$(grep -cE "\| in-progress( \(.*\))? \|$" "$TEST_TASKS_FILE" 2>/dev/null || true)
|
|
213
|
+
: "${MATRIX_FR_IN_PROGRESS:=0}"
|
|
214
|
+
MATRIX_FR_COMPLETED=$(grep -cE "\| completed( \(.*\))? \|$" "$TEST_TASKS_FILE" 2>/dev/null || true)
|
|
215
|
+
: "${MATRIX_FR_COMPLETED:=0}"
|
|
216
|
+
|
|
217
|
+
# Active FRs = rows this workflow tracks to completion
|
|
218
|
+
# (excludes planning verdicts: pending-impl / manual / not-applicable / deprecated)
|
|
219
|
+
MATRIX_FR_ACTIVE=$((MATRIX_FR_TOTAL - MATRIX_FR_PENDING_IMPL - MATRIX_FR_MANUAL - MATRIX_FR_NOT_APPLICABLE - MATRIX_FR_DEPRECATED))
|
|
220
|
+
else
|
|
221
|
+
TEST_TASKS_EXISTS=false
|
|
222
|
+
fi
|
|
223
|
+
|
|
224
|
+
# ๐ Lightweight alerts for the Test Task Progress section (S5 โ status stays read-only;
|
|
225
|
+
# these are hints, not a health score; thresholds adjustable).
|
|
226
|
+
S5_WARN_PENDING_IMPL=false
|
|
227
|
+
S5_WARN_LAGGING=false
|
|
228
|
+
TESTPLAN_LAST_RUN="N/A"
|
|
229
|
+
|
|
230
|
+
if [[ "$TEST_TASKS_EXISTS" == "true" ]]; then
|
|
231
|
+
# Alert 1: large backlog of FRs planned but never implemented
|
|
232
|
+
if [[ $MATRIX_FR_PENDING_IMPL -gt 10 ]]; then
|
|
233
|
+
S5_WARN_PENDING_IMPL=true
|
|
234
|
+
fi
|
|
235
|
+
|
|
236
|
+
# Alert 2: execution-tracked FRs exist but the matrix has not been refreshed
|
|
237
|
+
# for more than 7 days. `find -mtime -7` (POSIX) = modified within 7 days;
|
|
238
|
+
# empty result โ stale. test-tasks.md mtime doubles as "last test-plan run".
|
|
239
|
+
if [[ $((MATRIX_FR_NOT_STARTED + MATRIX_FR_IN_PROGRESS)) -gt 0 ]]; then
|
|
240
|
+
if [[ -z "$(find "$TEST_TASKS_FILE" -mtime -7 2>/dev/null)" ]]; then
|
|
241
|
+
S5_WARN_LAGGING=true
|
|
242
|
+
# โ ๏ธ ๅ
ๅบ้พๅฟ
้กปๅจ**ๅไธ่กๅ
**๏ผๅฅ็บฆ่งๅไบ็่ฑๅ
็ปๅ็ฌฌ 2 ๆก๏ผ๏ผ่ทจ่ก if/else ไธ็ฎ
|
|
243
|
+
# ๅ
ๅบ้พใไธ่ฑๅ
โโ ่ `stat -c` ๆฏ GNU ไธๆ๏ผmacOS ็ BSD `stat` ไธ่ฎคใ
|
|
244
|
+
# `||` ็ไผๅ
็บงไฝไบ็ฎก้๏ผๆ
ๅณๅๆฏ `stat -c โฆ | cut โฆ` ไธๆดๆก๏ผๆญฃๆฏ่ฆ็๏ผใ
|
|
245
|
+
TESTPLAN_LAST_RUN=$(stat -f '%Sm' -t '%Y-%m-%d' "$TEST_TASKS_FILE" 2>/dev/null || stat -c %y "$TEST_TASKS_FILE" 2>/dev/null | cut -d' ' -f1)
|
|
246
|
+
TESTPLAN_LAST_RUN=${TESTPLAN_LAST_RUN:-N/A}
|
|
247
|
+
fi
|
|
248
|
+
fi
|
|
249
|
+
fi
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Step 6.5: Load analysis results** ๐ (if exists):
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
ANALYSIS_DIR="specs/analysis/"
|
|
256
|
+
|
|
257
|
+
if [[ -d "$ANALYSIS_DIR" ]]; then
|
|
258
|
+
# Find most recent analysis
|
|
259
|
+
# Portable: `ls -t` instead of GNU-only `find -printf '%T+'`
|
|
260
|
+
LATEST_ANALYSIS=$(ls -t "$ANALYSIS_DIR"analysis-*.md 2>/dev/null | head -1)
|
|
261
|
+
|
|
262
|
+
if [[ -f "$LATEST_ANALYSIS" ]]; then
|
|
263
|
+
# Extract metrics from latest analysis
|
|
264
|
+
# Portable mtime โ โ ๏ธ **ๅ่ก**ๅ
ๅบ้พ๏ผBSD ไผๅ
ใGNU ๅ
ๅบ๏ผใ่ทจ่ก็ if/else **ไธๆฏ**
|
|
265
|
+
# ๅ
ๅบ้พใไธ่ฑๅ
๏ผๅฅ็บฆ่งๅไบ่ฑๅ
็ปๅ็ฌฌ 2 ๆก๏ผ๏ผ่ `stat -c` ๆฏ GNU ไธๆใ
|
|
266
|
+
ANALYSIS_DATE=$(stat -f '%Sm' -t '%Y-%m-%d %H:%M:%S' "$LATEST_ANALYSIS" 2>/dev/null || stat -c %y "$LATEST_ANALYSIS" 2>/dev/null | cut -d'.' -f1)
|
|
267
|
+
|
|
268
|
+
# Parse JSON metrics snapshot
|
|
269
|
+
CRITICAL_COUNT=$(grep -o '"critical": [0-9]*' "$LATEST_ANALYSIS" | head -1 | grep -o '[0-9]*' || true)
|
|
270
|
+
: "${CRITICAL_COUNT:=0}"
|
|
271
|
+
HIGH_COUNT=$(grep -o '"high": [0-9]*' "$LATEST_ANALYSIS" | head -1 | grep -o '[0-9]*' || true)
|
|
272
|
+
: "${HIGH_COUNT:=0}"
|
|
273
|
+
MEDIUM_COUNT=$(grep -o '"medium": [0-9]*' "$LATEST_ANALYSIS" | head -1 | grep -o '[0-9]*' || true)
|
|
274
|
+
: "${MEDIUM_COUNT:=0}"
|
|
275
|
+
LOW_COUNT=$(grep -o '"low": [0-9]*' "$LATEST_ANALYSIS" | head -1 | grep -o '[0-9]*' || true)
|
|
276
|
+
: "${LOW_COUNT:=0}"
|
|
277
|
+
COVERAGE_PERCENT=$(grep -o '"coverage_percent": [0-9]*' "$LATEST_ANALYSIS" | head -1 | grep -o '[0-9]*' || true)
|
|
278
|
+
: "${COVERAGE_PERCENT:=0}"
|
|
279
|
+
|
|
280
|
+
# Test-First violations
|
|
281
|
+
TEST_FIRST_HIGH=$(grep -o '"high_risk": [0-9]*' "$LATEST_ANALYSIS" | head -1 | grep -o '[0-9]*' || true)
|
|
282
|
+
: "${TEST_FIRST_HIGH:=0}"
|
|
283
|
+
TEST_FIRST_MEDIUM=$(grep -o '"medium_risk": [0-9]*' "$LATEST_ANALYSIS" | head -1 | grep -o '[0-9]*' || true)
|
|
284
|
+
: "${TEST_FIRST_MEDIUM:=0}"
|
|
285
|
+
|
|
286
|
+
# Check for trend data (multiple analyses)
|
|
287
|
+
ANALYSIS_COUNT=$(find "$ANALYSIS_DIR" -name "analysis-*.md" -type f | wc -l)
|
|
288
|
+
|
|
289
|
+
# Load trend data if available
|
|
290
|
+
if [[ $ANALYSIS_COUNT -gt 1 ]]; then
|
|
291
|
+
# Extract trend table from latest analysis
|
|
292
|
+
TREND_TABLE=$(sed -n '/## Quality Trend/,/^\*\*Improvement\*\*/p' "$LATEST_ANALYSIS" | head -n -1)
|
|
293
|
+
else
|
|
294
|
+
TREND_TABLE=""
|
|
295
|
+
fi
|
|
296
|
+
else
|
|
297
|
+
ANALYSIS_DATE="N/A"
|
|
298
|
+
CRITICAL_COUNT="N/A"
|
|
299
|
+
HIGH_COUNT="N/A"
|
|
300
|
+
MEDIUM_COUNT="N/A"
|
|
301
|
+
LOW_COUNT="N/A"
|
|
302
|
+
COVERAGE_PERCENT="N/A"
|
|
303
|
+
TEST_FIRST_HIGH="N/A"
|
|
304
|
+
TEST_FIRST_MEDIUM="N/A"
|
|
305
|
+
TREND_TABLE=""
|
|
306
|
+
fi
|
|
307
|
+
else
|
|
308
|
+
ANALYSIS_DATE="No analysis run"
|
|
309
|
+
CRITICAL_COUNT="N/A"
|
|
310
|
+
HIGH_COUNT="N/A"
|
|
311
|
+
MEDIUM_COUNT="N/A"
|
|
312
|
+
LOW_COUNT="N/A"
|
|
313
|
+
COVERAGE_PERCENT="N/A"
|
|
314
|
+
TEST_FIRST_HIGH="N/A"
|
|
315
|
+
TEST_FIRST_MEDIUM="N/A"
|
|
316
|
+
TREND_TABLE=""
|
|
317
|
+
fi
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Step 6.7: Derived dashboard metrics** ๐ (Overall Completion, artifact timestamps, recommended actions):
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
PLAN_FILE="specs/plan.md"
|
|
324
|
+
|
|
325
|
+
# --- Overall Completion ---
|
|
326
|
+
# Per Implementation Notes formula: percentage of items with planStatus = processed
|
|
327
|
+
# AND tasksStatus = processed. Grounded format: every US/FR carries exactly one
|
|
328
|
+
# `**Lifecycle**:` line (indented bold line under its item), so the denominator is
|
|
329
|
+
# the count of Lifecycle lines and the numerator those carrying both plan:processed
|
|
330
|
+
# and tasks:processed.
|
|
331
|
+
LIFECYCLE_TOTAL=$(grep -cE '\*\*Lifecycle\*\*:' "$FEATURE_SPEC" 2>/dev/null || true)
|
|
332
|
+
: "${LIFECYCLE_TOTAL:=0}"
|
|
333
|
+
LIFECYCLE_DONE=$(grep -cE '\*\*Lifecycle\*\*:.*\[plan:processed\]\[tasks:processed\]' "$FEATURE_SPEC" 2>/dev/null || true)
|
|
334
|
+
: "${LIFECYCLE_DONE:=0}"
|
|
335
|
+
if [[ $LIFECYCLE_TOTAL -gt 0 ]]; then
|
|
336
|
+
OVERALL_PERCENT=$((LIFECYCLE_DONE * 100 / LIFECYCLE_TOTAL))
|
|
337
|
+
else
|
|
338
|
+
OVERALL_PERCENT=0
|
|
339
|
+
fi
|
|
340
|
+
|
|
341
|
+
# --- Per-stage counts for the Lifecycle Summary table (`T231` / `ISS-204` / user ruling 2026-09-20) ---
|
|
342
|
+
# โ ๏ธ **Read as STATE, from the one artifact that carries the fields** โ same discipline as Rule 1
|
|
343
|
+
# below (`T246`): `spec.md` is the only carrier, and the anchor is the field's own line start, so
|
|
344
|
+
# prose that merely *mentions* a marker is not counted.
|
|
345
|
+
LIFECYCLE_FIELD_STAGE='^[[:space:]]*\*\*Lifecycle\*\*:'
|
|
346
|
+
TOTAL=$LIFECYCLE_TOTAL
|
|
347
|
+
PLAN_PROCESSED=$(grep -cE "${LIFECYCLE_FIELD_STAGE}.*\[plan:processed\]" "$FEATURE_SPEC" 2>/dev/null || true)
|
|
348
|
+
: "${PLAN_PROCESSED:=0}"
|
|
349
|
+
PLAN_PENDING=$(grep -cE "${LIFECYCLE_FIELD_STAGE}.*\[plan:(create|update|delete)\]" "$FEATURE_SPEC" 2>/dev/null || true)
|
|
350
|
+
: "${PLAN_PENDING:=0}"
|
|
351
|
+
TASK_PROCESSED=$(grep -cE "${LIFECYCLE_FIELD_STAGE}.*\[tasks:processed\]" "$FEATURE_SPEC" 2>/dev/null || true)
|
|
352
|
+
: "${TASK_PROCESSED:=0}"
|
|
353
|
+
TASK_PENDING=$(grep -cE "${LIFECYCLE_FIELD_STAGE}.*\[tasks:(create|update|delete)\]" "$FEATURE_SPEC" 2>/dev/null || true)
|
|
354
|
+
: "${TASK_PENDING:=0}"
|
|
355
|
+
pct() { [ "${2:-0}" -gt 0 ] && echo $(( $1 * 100 / $2 )) || echo 0; }
|
|
356
|
+
PLAN_PCT=$(pct "$PLAN_PROCESSED" "$TOTAL")
|
|
357
|
+
TASK_PCT=$(pct "$TASK_PROCESSED" "$TOTAL")
|
|
358
|
+
# โ ๏ธ **The Spec row has no processed/pending pair, and that is a conclusion, not a gap** (`T246`):
|
|
359
|
+
# `[specify:โฆ]` records **how an item entered** the spec (`FR-046`), and its terminal value
|
|
360
|
+
# `[specify:processed]` **has no writer anywhere in the toolchain** โ that segment cannot express
|
|
361
|
+
# "done" or "outstanding", so the row renders `N/A` with this reason. **Do not synthesise a number
|
|
362
|
+
# for it** โ a fabricated count reads exactly like a real one.
|
|
363
|
+
SPEC_PROCESSED="N/A"; SPEC_PENDING="N/A"; SPEC_PCT="N/A"
|
|
364
|
+
NEW_ITEMS_LIST=$(grep -cE "${LIFECYCLE_FIELD_STAGE}.*\[specify:create\]" "$FEATURE_SPEC" 2>/dev/null || true)
|
|
365
|
+
MODIFIED_ITEMS_LIST=$(grep -cE "${LIFECYCLE_FIELD_STAGE}.*\[specify:update\]" "$FEATURE_SPEC" 2>/dev/null || true)
|
|
366
|
+
DELETED_ITEMS_LIST=$(grep -cE "${LIFECYCLE_FIELD_STAGE}.*\[specify:delete\]" "$FEATURE_SPEC" 2>/dev/null || true)
|
|
367
|
+
DEPRECATED_ITEMS_LIST=$(grep -cE "${LIFECYCLE_FIELD_STAGE}.*deprecated\]" "$FEATURE_SPEC" 2>/dev/null || true)
|
|
368
|
+
: "${NEW_ITEMS_LIST:=0}"; : "${MODIFIED_ITEMS_LIST:=0}"
|
|
369
|
+
: "${DELETED_ITEMS_LIST:=0}"; : "${DEPRECATED_ITEMS_LIST:=0}"
|
|
370
|
+
|
|
371
|
+
# --- Last artifact update timestamps (Recent Activity) ---
|
|
372
|
+
# Portable mtime: BSD `stat -f` first, fall back to GNU `stat -c`
|
|
373
|
+
last_mtime() {
|
|
374
|
+
local f="$1"
|
|
375
|
+
if [[ ! -f "$f" ]]; then
|
|
376
|
+
echo "N/A"; return
|
|
377
|
+
fi
|
|
378
|
+
local ts
|
|
379
|
+
# โ ๏ธ **ๅ่ก**ๅ
ๅบ้พ๏ผBSD ไผๅ
ใGNU ๅ
ๅบ๏ผโโ ่ทจ่ก็ if/else ไธๆฏๅ
ๅบ้พใไธ่ฑๅ
ใ
|
|
380
|
+
ts=$(stat -f '%Sm' -t '%Y-%m-%d %H:%M' "$f" 2>/dev/null || stat -c %y "$f" 2>/dev/null | cut -d'.' -f1)
|
|
381
|
+
echo "${ts:-N/A}"
|
|
382
|
+
}
|
|
383
|
+
LAST_SPEC_UPDATE=$(last_mtime "$FEATURE_SPEC")
|
|
384
|
+
LAST_PLAN_UPDATE=$(last_mtime "$PLAN_FILE")
|
|
385
|
+
LAST_TASKS_UPDATE=$(last_mtime "$TASKS_FILE")
|
|
386
|
+
|
|
387
|
+
# --- Recommended Actions (Next Steps) ---
|
|
388
|
+
# Rule table: every matching rule contributes one action line; none match โ "No pending actions".
|
|
389
|
+
RECOMMENDED_ACTIONS=""
|
|
390
|
+
|
|
391
|
+
# Rule 1: pending Lifecycle items โ read as STATE, from the ONE artifact that carries the fields
|
|
392
|
+
# โ ๏ธ **Three corrections, one finding** (`T246` / `ISS-219`, ๅฝขๆ 4 ็ๆดปๅฎไพ). The rule used to
|
|
393
|
+
# count markers and got **73 on a fully-settled project**; the acceptance criterion it must meet
|
|
394
|
+
# is `spec.md` โ US9 scenario 6 (a settled project MUST NOT be reported as pending, and a
|
|
395
|
+
# genuinely-unprocessed item MUST be).
|
|
396
|
+
# โ **The fields live in `FEATURE_SPEC` only** โ the three segments sit on the spec items.
|
|
397
|
+
# Measured: `spec.md` 73 `**Lifecycle**:` lines ยท `plan.md` **0** ยท `tasks.md` 3 (and those
|
|
398
|
+
# three are PROSE inside task descriptions, not fields). The old form read each segment out
|
|
399
|
+
# of a different file โ `PLAN_PENDING_COUNT` was **structurally 0** โ it read a file that
|
|
400
|
+
# carries no field at all, and a zero from an empty scan is indistinguishable from a real 0.
|
|
401
|
+
# โก **Line-start anchor** (`^[[:space:]]*\*\*Lifecycle\*\*:`). Without it the scan counts any
|
|
402
|
+
# prose that *mentions* the field โ and this repository has such prose in both files (a task
|
|
403
|
+
# description quoting a defect, an acceptance scenario citing an example). A mention is not
|
|
404
|
+
# an item.
|
|
405
|
+
# โข **The `specify` segment is NOT a pending signal** โ `FR-046`: "ๆ ่ฎฐ่ฎฐๅฝ็ๆฏใไธไธชๆก็ฎๆไน
|
|
406
|
+
# ่ฟๆฅ็ใ๏ผไธๆฏใๅฎ็ฐๅจๅจๅชใ". `[specify:create|update|delete]` records *entry mode*, so a
|
|
407
|
+
# predicate over it matches **every** item (measured 73/73), and its terminal value
|
|
408
|
+
# `[specify:processed]` has **no writer anywhere in the tree** โ that segment cannot express
|
|
409
|
+
# "pending". `plan` / `tasks` CAN: their terminal values are written by `/specpro-plan` and
|
|
410
|
+
# `/specpro-tasks` respectively. โ ๏ธ **Do not restore a `SPEC_PENDING_COUNT` term** โ a count
|
|
411
|
+
# over entry mode is not a count of anything owed.
|
|
412
|
+
LIFECYCLE_FIELD='^[[:space:]]*\*\*Lifecycle\*\*:'
|
|
413
|
+
PLAN_PENDING_COUNT=$(grep -cE "${LIFECYCLE_FIELD}.*\[plan:(create|update|delete)\]" "$FEATURE_SPEC" 2>/dev/null || true)
|
|
414
|
+
: "${PLAN_PENDING_COUNT:=0}"
|
|
415
|
+
TASKS_PENDING_COUNT=$(grep -cE "${LIFECYCLE_FIELD}.*\[tasks:(create|update|delete)\]" "$FEATURE_SPEC" 2>/dev/null || true)
|
|
416
|
+
: "${TASKS_PENDING_COUNT:=0}"
|
|
417
|
+
LIFECYCLE_PENDING=$((PLAN_PENDING_COUNT + TASKS_PENDING_COUNT))
|
|
418
|
+
if [[ $LIFECYCLE_PENDING -gt 0 ]]; then
|
|
419
|
+
RECOMMENDED_ACTIONS+="- Run \`/specpro-plan\` or \`/specpro-tasks\` to process $LIFECYCLE_PENDING pending Lifecycle item(s)
|
|
420
|
+
"
|
|
421
|
+
fi
|
|
422
|
+
|
|
423
|
+
# Rule 2: open quality checklist issues
|
|
424
|
+
if [[ ${FAIL_COUNT:-0} -gt 0 ]]; then
|
|
425
|
+
RECOMMENDED_ACTIONS+="- Resolve ${FAIL_COUNT} checklist issue(s) via \`/specpro-qc\`
|
|
426
|
+
"
|
|
427
|
+
fi
|
|
428
|
+
|
|
429
|
+
# Rule 3: no high-level test plan
|
|
430
|
+
if [[ "$TEST_TASKS_EXISTS" != "true" ]]; then
|
|
431
|
+
RECOMMENDED_ACTIONS+="- Run \`/specpro-test-plan\` to build the coverage matrix
|
|
432
|
+
"
|
|
433
|
+
fi
|
|
434
|
+
|
|
435
|
+
# Rule 4: analysis missing or stale (> 30 days). POSIX `-mtime` keeps this portable.
|
|
436
|
+
ANALYSIS_RECENT=""
|
|
437
|
+
if [[ -d "$ANALYSIS_DIR" ]]; then
|
|
438
|
+
ANALYSIS_RECENT=$(find "$ANALYSIS_DIR" -name "analysis-*.md" -mtime -30 2>/dev/null | head -1)
|
|
439
|
+
fi
|
|
440
|
+
if [[ -z "$ANALYSIS_RECENT" ]]; then
|
|
441
|
+
RECOMMENDED_ACTIONS+="- Run \`/specpro-analyze\` (last analysis missing or older than 30 days)
|
|
442
|
+
"
|
|
443
|
+
fi
|
|
444
|
+
|
|
445
|
+
[[ -z "$RECOMMENDED_ACTIONS" ]] && RECOMMENDED_ACTIONS="- No pending actions"
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**Step 7: Generate dashboard**:
|
|
449
|
+
|
|
450
|
+
```markdown
|
|
451
|
+
## ๐ Project Status Dashboard
|
|
452
|
+
|
|
453
|
+
**Specification**: Version $SPEC_VERSION
|
|
454
|
+
**Last Updated**: $(date +%Y-%m-%d)
|
|
455
|
+
**Working Directory**: $(pwd)
|
|
456
|
+
|
|
457
|
+
---
|
|
458
|
+
|
|
459
|
+
### ๐๏ธ Feature Registry Overview (FR-018 ยท v0.23)
|
|
460
|
+
|
|
461
|
+
่ฏปๅ `specs/features.md`(็ป่ฎฐๆไปถ,feature ๆบๅถๅฏไธ็ป่ฎฐ่ฝฝไฝ)ใ**ๆฏไธช feature ็่ฟๅบฆ็ฑๅฎ่ชๅทฑ็ไบง็ฉๆจๅฏผ**(`specs/fNNN-็ฎ็งฐ/` ๅ
spec/plan/tasks ็ๅพ้ๆ),ไธ่ฏปๆฏ่งๆ ผ้พ:
|
|
462
|
+
|
|
463
|
+
```text
|
|
464
|
+
Feature Registry: N feature(s)
|
|
465
|
+
f001 <name> [active] spec โ plan โ tasks โโโโ 12/18
|
|
466
|
+
f002 <name> [delivered] spec โ plan โ tasks โ ไบคไปๅฎๆ
|
|
467
|
+
โ ๏ธ ็ผบไปถ: f003 ็ผบ plan.md
|
|
468
|
+
โ ๏ธ ๅญคๅฟ: specs/f004-x/ ็ฎๅฝๅญๅจไฝๆช็ป่ฎฐ
|
|
469
|
+
โ ๏ธ ๅคฑ่: ็ป่ฎฐๅซ f005 ไฝ็ฎๅฝไธๅญๅจ
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
**ไธ็ฑปไธ่ดๆงๅ็ฐ**(FR-018,ๅๅ): โ **ๅจๅๆ ็ฎๅฝ** ยท โก **ๆ็ฎๅฝๆชๅจๅ** ยท โข **็ผบไปถ**(็ผบ spec/plan/tasks ไปปไธ้กน)ใไปปไธๅ็ฐ MUST ๅๅบๅนถๆ ๆณจ,ไธ้้ปใ
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
### ๐ฏ Overall Progress
|
|
477
|
+
|
|
478
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
479
|
+
โ Specification: Example Plugin Architecture โ
|
|
480
|
+
โ Version: $SPEC_VERSION โ
|
|
481
|
+
โ User Stories: $US_COUNT โ
|
|
482
|
+
โ Functional Requirements: $FR_COUNT โ
|
|
483
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
484
|
+
|
|
485
|
+
**Overall Completion**: $OVERALL_PERCENT%
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
489
|
+
### ๐ Lifecycle Summary
|
|
490
|
+
|
|
491
|
+
โโโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
|
|
492
|
+
โ Stage โ Total โ Processed โ Pending โ Percentage โ
|
|
493
|
+
โโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโค
|
|
494
|
+
โ **Spec** โ $TOTAL โ $SPEC_PROCESSED โ $SPEC_PENDING โ $SPEC_PCT% โ
|
|
495
|
+
โ **Plan** โ $TOTAL โ $PLAN_PROCESSED โ $PLAN_PENDING โ $PLAN_PCT% โ
|
|
496
|
+
โ **Tasks** โ $TOTAL โ $TASK_PROCESSED โ $TASK_PENDING โ $TASK_PCT% โ
|
|
497
|
+
โโโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโ
|
|
498
|
+
|
|
499
|
+
**Legend**:
|
|
500
|
+
- **Total**: Number of items (User Stories + FRs)
|
|
501
|
+
- **Processed**: Items with specifyStatus/planStatus/tasksStatus = "processed"
|
|
502
|
+
- **Pending**: Items with specifyStatus/planStatus/tasksStatus = "create" or "update" or "delete"
|
|
503
|
+
- **Percentage**: Processed / Total * 100
|
|
504
|
+
|
|
505
|
+
---
|
|
506
|
+
|
|
507
|
+
### ๐ Modified Items (Need Re-processing)
|
|
508
|
+
|
|
509
|
+
**New Items** (specifyStatus = create, planStatus/tasksStatus = create):
|
|
510
|
+
$NEW_ITEMS_LIST
|
|
511
|
+
|
|
512
|
+
**Modified Items** (specifyStatus/planStatus/tasksStatus = update):
|
|
513
|
+
$MODIFIED_ITEMS_LIST
|
|
514
|
+
|
|
515
|
+
**Deleted Items** (specifyStatus/planStatus/tasksStatus = delete):
|
|
516
|
+
$DELETED_ITEMS_LIST
|
|
517
|
+
|
|
518
|
+
**Action Required**:
|
|
519
|
+
```
|
|
520
|
+
```
|
|
521
|
+
$specpro.plan # Re-plan modified items
|
|
522
|
+
$specpro.tasks # Re-breakdown modified items
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
### โ ๏ธ Deprecated Items
|
|
528
|
+
|
|
529
|
+
$DEPRECATED_ITEMS_LIST
|
|
530
|
+
|
|
531
|
+
---
|
|
532
|
+
|
|
533
|
+
### โ
Quality Status
|
|
534
|
+
|
|
535
|
+
**Quality** (from `specs/checklists/requirements.md`): $QUALITY_STATUS โ $QUALITY_SCORE passed
|
|
536
|
+
|
|
537
|
+
**Issues**:
|
|
538
|
+
- โ Failed: $FAIL_COUNT (ๆธ
ๅ็ `**Failed**` ๅญๆฎต๏ผโ ๏ธ **ๆฒกๆ warning ๆกฃ** โโ ๆจกๆฟๅชๆไธ็งๅๅผ)
|
|
539
|
+
|
|
540
|
+
**Defect status** (FR-050 โ see the wording rule below the dashboard sections): [**ๆ ๅทฒ็ฅ็ผบ้ท** โ
|
|
541
|
+
<N> shapes all exercised, 0 hits | <N> known instance(s) | โ ๏ธ **coverage incomplete** โ <M> shape(s)
|
|
542
|
+
could not be exercised at all, so that part is **unproven, NOT clean**]
|
|
543
|
+
โ ๏ธ The counts above measure the **artifacts**; this line is the only place the **tool's** defect status
|
|
544
|
+
is stated, and it may be written as ใๆ ๅทฒ็ฅ็ผบ้ทใ **only** with the coverage declaration attached.
|
|
545
|
+
|
|
546
|
+
**Quality Checklist**: specs/checklists/requirements.md *(Produced by /specpro-qc)*
|
|
547
|
+
|
|
548
|
+
---
|
|
549
|
+
|
|
550
|
+
**็ผบ้ท็ถๆ็่กจ่ฟฐ่งๅ** โ ๏ธ [FR-050 โโ ๆฌๆฎตๅจไธคไธชๅฝไปค้**้ๅญ็ธๅ**๏ผ`specpro.status.md` ยท `specpro.analyze.md`๏ผ๏ผๆนไธๅค MUST ๅ่ฝฎๆนๅฆไธๅค๏ผๅฆๅๅฎๅฐฑๆฏๅฎๆ้ฒ็้ฃ็งๅๅ๏ผๅฝขๆ 3๏ผ]
|
|
551
|
+
|
|
552
|
+
**ไปปไฝใๆๆฒกๆ็ผบ้ทใ็้่ฟฐ MUST ่กจ่ฟฐไธบใๆ ๅทฒ็ฅ็ผบ้ทใ๏ผMUST NOT ่กจ่ฟฐไธบใๆ ็ผบ้ทใใ** ไธค่
ๆฏไธๅ็ๆญ่จ๏ผๅชๆๅ่
ๅฏๆ ธ้ช๏ผ
|
|
553
|
+
|
|
554
|
+
| ่กจ่ฟฐ | ๅฎๅฃฐ็งฐไปไน | ๅฏๅฆๆ ธ้ช |
|
|
555
|
+
|---|---|---|
|
|
556
|
+
| **ๆ ๅทฒ็ฅ็ผบ้ท** | **็ป่ฎฐ่กจไธญๆฏไธไธชๅฝขๆ้ฝๅทฒๅฏนๅฎ่ท่ฟๆฃๅบ๏ผไธๅทฒ็ฅๅฎไพไธบ้ถ** | โ
ๅฏๆ ธ้ช โโ ้่ทๆฃๅบๅณๅพ็ป่ฎบ |
|
|
557
|
+
| **ๆ ็ผบ้ท** | ไธไธชๅ
ณไบ**ๆช่ขซๆฃ่ง็้ฃไธ้จๅ**็ๆญ่จ | โ ไธๅฏๆ ธ้ช โโ ๆฒกๆไบบๅฏนๅฎๅ่ฟๆต้ |
|
|
558
|
+
|
|
559
|
+
**ๅฎไนๅณๅคๆฎ**๏ผๅชๆๅฝ**ๆฏไธไธชๅฝขๆ้ฝๅทฒ่ขซๆฃๅบ่ฟ**๏ผๆฒกๆไธไธช่ฝ `โ`๏ผ**ไธๅฝไธญๆฐไธบ้ถ**ๆถ๏ผๆๅฏไปฅ่กจ่ฟฐไธบใๆ ๅทฒ็ฅ็ผบ้ทใ๏ผๅฆๅ MUST ๅๅบๆชๆฃ่ง็้ฃ้จๅใ
|
|
560
|
+
|
|
561
|
+
โ ๏ธ **MUST ้้่ฆ็ๅฃฐๆ**๏ผไปปไฝ็ผบ้ท็ถๆ้่ฟฐ MUST ๅฃฐๆ**ๆ่ฆ็็่ๅด** โโ ๅชไบๅฝขๆๆฃๅบ่ฟใๅชไบ**ๆฒก่ฝๆฃๅบ**๏ผ`โ`๏ผใโ ๏ธ **ใๆฒกๆๆๅฐใไธใๆฒกๆๆฌ ่ดฆใๆฏไธคๅฅไธๅ็่ฏ๏ผ่ๅ่
ไธใๅฟไบ็ใๆ ไปๅบๅ**๏ผ`FR-036` ๅฏน่ฆ็ไธปๅผ ๆฝๅ ็ๆฏๅไธๆก็บชๅพ๏ผ**ๅฃฐ็งฐ้่ฟ่ๅบ็บฟๆช่ฆ็๏ผไธๆๆ้่ฟ**๏ผใ
|
|
562
|
+
|
|
563
|
+
โ ๏ธ **ๅทฅๅ
ทไพงๆฅๅ็จ่ฑๆ๏ผๅไธๆญ่จ็
งๆญคๅฏนๅบ**๏ผ`no known instance` โ
/ `no defects` ยท `defect-free` โใไธคไธชๅฝขๆ่ฏด็ๆฏ**ๅไธไปถไบ**๏ผๅชๅจ่ฏญ่จไธไธๅ โโ ่ฅๅช้ไฝไธญๆ้ฃไธไพง๏ผ่ฑๆๆฅๅไผ**็
งๆงๅฃฐ็งฐใๆ ็ผบ้ทใ่ๆฒกๆไปปไฝไธ่ฅฟๆฅ้**๏ผๅฝขๆ 3๏ผใ
|
|
564
|
+
|
|
565
|
+
**ๆบๅถ๏ผๅฏๅค่ท็ๅฝขๆ๏ผ**๏ผ`scripts/bash/verify-shapes.sh`๏ผPowerShell ๅฏน็ญ๏ผ`scripts/powershell/verify-shapes.ps1`๏ผๅฐฑๆฏ่ฟๆกๅคๆฎ็่ฝฝไฝ โโ ๆถๅฐพๆฅๅ็ปๅบ `N hit`๏ผๅทฒ็ฅๅฎไพๆฐ๏ผไธ `M not executable`๏ผๆฒก่ท่ตทๆฅ็็ปๆฐ๏ผใ**ๅฝไธญๆฐไธไธบ้ถ โ ไธๅพ่กจ่ฟฐไธบใๆ ๅทฒ็ฅ็ผบ้ทใ๏ผๆ `โ` โ MUST ่ฟๅธฆๅฃฐๆ้ฃไธ้จๅๆช่ฏๅฎ๏ผ่ไธๆฏๅนฒๅใ**
|
|
566
|
+
|
|
567
|
+
### ๐ Cross-Artifact Analysis ๐
|
|
568
|
+
|
|
569
|
+
**Last Analysis**: $ANALYSIS_DATE
|
|
570
|
+
|
|
571
|
+
**Issue Summary**:
|
|
572
|
+
- ๐ด CRITICAL: $CRITICAL_COUNT
|
|
573
|
+
- ๐ HIGH: $HIGH_COUNT
|
|
574
|
+
- ๐ก MEDIUM: $MEDIUM_COUNT
|
|
575
|
+
- ๐ข LOW: $LOW_COUNT
|
|
576
|
+
|
|
577
|
+
**Coverage**: $COVERAGE_PERCENT%
|
|
578
|
+
|
|
579
|
+
**Test-First Compliance** (Constitution Article IV):
|
|
580
|
+
- High-Risk Violations: $TEST_FIRST_HIGH
|
|
581
|
+
- Medium-Risk Violations: $TEST_FIRST_MEDIUM
|
|
582
|
+
|
|
583
|
+
**Analysis Directory**: specs/analysis/
|
|
584
|
+
|
|
585
|
+
**Actions**:
|
|
586
|
+
```bash
|
|
587
|
+
# Run new analysis
|
|
588
|
+
/specpro-analyze
|
|
589
|
+
|
|
590
|
+
# Save for trend tracking
|
|
591
|
+
/specpro-analyze --persist
|
|
592
|
+
|
|
593
|
+
# Quick summary
|
|
594
|
+
/specpro-analyze --summary
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
**Quality Trend** ๐ (if multiple analyses exist):
|
|
598
|
+
$TREND_TABLE
|
|
599
|
+
|
|
600
|
+
---
|
|
601
|
+
|
|
602
|
+
### ๐ Contract Coverage
|
|
603
|
+
|
|
604
|
+
**Total Contracts**: $TOTAL_CONTRACTS
|
|
605
|
+
|
|
606
|
+
**Contracts by Priority** (generated counts):
|
|
607
|
+
โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
|
|
608
|
+
โ Priority โ Generated โ
|
|
609
|
+
โโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
|
|
610
|
+
โ P1 โ $P1_CONTRACTS โ
|
|
611
|
+
โ P2 โ $P2_CONTRACTS โ
|
|
612
|
+
โ P3 โ $P3_CONTRACTS โ
|
|
613
|
+
โโโโโโโโโโโโดโโโโโโโโโโโโโโโโ
|
|
614
|
+
|
|
615
|
+
> Required baseline not defined โ add a contract plan (required counts per priority)
|
|
616
|
+
> to plan.md to enable coverage % tracking.
|
|
617
|
+
|
|
618
|
+
**Contract Directory**: specs/contracts/
|
|
619
|
+
|
|
620
|
+
---
|
|
621
|
+
|
|
622
|
+
### โ
Task Progress
|
|
623
|
+
|
|
624
|
+
**Total Tasks**: $TOTAL_TASKS
|
|
625
|
+
**Completed**: $COMPLETED_TASKS
|
|
626
|
+
**Remaining**: $((TOTAL_TASKS - COMPLETED_TASKS))
|
|
627
|
+
|
|
628
|
+
**Task Completion**: $TASK_PERCENT%
|
|
629
|
+
|
|
630
|
+
```text
|
|
631
|
+
[โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ] $TASK_PERCENT%
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
**Tasks File**: specs/tasks.md
|
|
635
|
+
|
|
636
|
+
---
|
|
637
|
+
|
|
638
|
+
### ๐งช Test Task Progress ๐
|
|
639
|
+
|
|
640
|
+
<!-- Render this section only when specs/test-tasks.md exists.
|
|
641
|
+
If TEST_TASKS_EXISTS=false, show:
|
|
642
|
+
"> โน๏ธ No high-level test plan found (specs/test-tasks.md).
|
|
643
|
+
> Run `/specpro-test-plan` to generate the coverage matrix and integration / E2E test tasks."
|
|
644
|
+
and skip the stats below. -->
|
|
645
|
+
|
|
646
|
+
**Total Test Tasks**: $TEST_TASK_TOTAL (INF + IT + CE + AE)
|
|
647
|
+
**Completed**: $COMPLETED_TEST_TASKS
|
|
648
|
+
**Remaining**: $REMAINING_TEST_TASKS
|
|
649
|
+
<!-- โ ๏ธ ๅ้ๅไธๅ
ถๅซไน๏ผ`T174`๏ผ๏ผๆฌ่กๆญคๅ่ฏป็ๆฏ `TOTAL_TEST_TASKS`๏ผ่ๅฎ็ๅฎไน**ๅชๆฐ `- [ ]`**
|
|
650
|
+
โ ๅฎ่ฃ
็ๆฏ**ๅฉไฝ**๏ผไธๆฏๆป้๏ผๆป้ๆฏ `TEST_TASK_TOTAL = ๅฉไฝ + ๅทฒๅฎๆ`๏ผใ
|
|
651
|
+
ไธคไธช `**Remaining**` ็็ฎๆณๆฌๆฅๅฐฑๆฏๅไธไธชๆๆ๏ผ`$((ๆป้ - ๅทฒๅฎๆ))` โก ๅฉไฝ๏ผ๏ผ
|
|
652
|
+
้็ๆฏ**ๅๅญ**๏ผๅๅญๅไบ โ ไธไธไธช่ฏป็ไบบไผๆๅฎๅฝๆป้็จใๅทฒๆนๅไธบ `REMAINING_TEST_TASKS`ใ -->
|
|
653
|
+
|
|
654
|
+
**Test Task Completion**: $TEST_TASK_PERCENT%
|
|
655
|
+
|
|
656
|
+
```text
|
|
657
|
+
[โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ] $TEST_TASK_PERCENT%
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
**Coverage Matrix** (specs/test-tasks.md):
|
|
661
|
+
- FRs tracked: $MATRIX_FR_TOTAL | **Active** (execution-tracked): $MATRIX_FR_ACTIVE
|
|
662
|
+
- Execution states: not-started $MATRIX_FR_NOT_STARTED | in-progress $MATRIX_FR_IN_PROGRESS | completed $MATRIX_FR_COMPLETED
|
|
663
|
+
- Planning verdicts: pending-impl $MATRIX_FR_PENDING_IMPL | manual $MATRIX_FR_MANUAL | not-applicable $MATRIX_FR_NOT_APPLICABLE | deprecated $MATRIX_FR_DEPRECATED
|
|
664
|
+
|
|
665
|
+
**Test Tasks File**: specs/test-tasks.md
|
|
666
|
+
**Planned by**: /specpro-test-plan | **Executed by**: /specpro-test-implement
|
|
667
|
+
|
|
668
|
+
<!-- Lightweight alerts (S5): render ONLY the lines whose condition holds; skip both if none. -->
|
|
669
|
+
<!-- If S5_WARN_PENDING_IMPL == true:
|
|
670
|
+
โ ๏ธ $MATRIX_FR_PENDING_IMPL FRs awaiting implementation (pending-impl) โ consider an incremental /specpro-test-plan pass -->
|
|
671
|
+
<!-- If S5_WARN_LAGGING == true:
|
|
672
|
+
โ ๏ธ Test execution lagging (last run $TESTPLAN_LAST_RUN) โ re-run /specpro-test-implement to advance open FRs -->
|
|
673
|
+
|
|
674
|
+
---
|
|
675
|
+
|
|
676
|
+
### ๐
Recent Activity
|
|
677
|
+
|
|
678
|
+
**Last Plan Update**: $LAST_PLAN_UPDATE
|
|
679
|
+
**Last Tasks Update**: $LAST_TASKS_UPDATE
|
|
680
|
+
**Last Spec Update**: $LAST_SPEC_UPDATE
|
|
681
|
+
|
|
682
|
+
---
|
|
683
|
+
|
|
684
|
+
### ๐ Next Steps
|
|
685
|
+
|
|
686
|
+
Based on current status:
|
|
687
|
+
|
|
688
|
+
**Recommended Actions**:
|
|
689
|
+
$RECOMMENDED_ACTIONS
|
|
690
|
+
|
|
691
|
+
---
|
|
692
|
+
|
|
693
|
+
## Dashboard Legend
|
|
694
|
+
|
|
695
|
+
**Status Indicators**:
|
|
696
|
+
- โ
**Complete**: All items processed
|
|
697
|
+
- โ ๏ธ **In Progress**: Some items pending
|
|
698
|
+
- โ **Blocking**: Issues need attention
|
|
699
|
+
- ๐ **On Track**: Good progress
|
|
700
|
+
|
|
701
|
+
**Lifecycle Status Codes** (NEW - create/update/delete/processed/deprecated):
|
|
702
|
+
- **create**: New item, never processed
|
|
703
|
+
- **update**: Item changed since last processing (needs re-processing)
|
|
704
|
+
- **delete**: Item marked for deletion (will be removed)
|
|
705
|
+
- **processed**: Item successfully processed at this stage
|
|
706
|
+
- **deprecated**: Item removed from active development
|
|
707
|
+
|
|
708
|
+
**Lifecycle Stage Mapping**:
|
|
709
|
+
- **[specify]**: Specification stage (spec.md status)
|
|
710
|
+
- **[plan]**: Planning stage (plan.md status)
|
|
711
|
+
- **[tasks]**: Implementation stage (tasks.md status)
|
|
712
|
+
|
|
713
|
+
โ ๏ธ **The example must be a value combination that can actually occur** (`T247` / `ISS-220`). This used to read `[specify:processed][plan:update][tasks:create]` โ `processed` is **never written to the `specify` segment by anything** (measured: 0 occurrences across the tree, and the segments that DO reach `processed` are `plan` and `tasks`, written by `/specpro-plan` and `/specpro-tasks`). โ The example taught a shape the toolchain cannot produce, and a reader copying it would write a field nobody maintains.
|
|
714
|
+
|
|
715
|
+
**Example**: `**Lifecycle**: [specify:update][plan:processed][tasks:processed]`
|
|
716
|
+
- Specification: update (item content changed since it entered the spec)
|
|
717
|
+
- Planning: processed (design has caught up with that change)
|
|
718
|
+
- Tasks: processed (task breakdown has caught up too)
|
|
719
|
+
|
|
720
|
+
---
|
|
721
|
+
|
|
722
|
+
**Generated**: $(date)
|
|
723
|
+
**Command**: /specpro-status
|
|
724
|
+
```
|
|
725
|
+
|
|
726
|
+
**Step 8: Display dashboard**:
|
|
727
|
+
- Output the formatted dashboard
|
|
728
|
+
- Use markdown tables for structured data
|
|
729
|
+
- Use progress bars for visual completion
|
|
730
|
+
- Use emoji for quick scanning
|
|
731
|
+
|
|
732
|
+
---
|
|
733
|
+
|
|
734
|
+
## Examples
|
|
735
|
+
|
|
736
|
+
### Example 1: New Project (No Processing)
|
|
737
|
+
|
|
738
|
+
```markdown
|
|
739
|
+
## ๐ Project Status Dashboard
|
|
740
|
+
|
|
741
|
+
**Specification**: Version 0.1
|
|
742
|
+
**Last Updated**: 2026-02-07
|
|
743
|
+
|
|
744
|
+
### ๐ฏ Overall Progress
|
|
745
|
+
**Overall Completion**: 0%
|
|
746
|
+
|
|
747
|
+
### ๐ Lifecycle Summary
|
|
748
|
+
โโโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
|
|
749
|
+
โ Stage โ Total โ Processed โ Pending โ
|
|
750
|
+
โโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโค
|
|
751
|
+
โ specify โ 161 โ 0 โ 161 (100%) โ
|
|
752
|
+
โ plan โ 161 โ 0 โ 161 (100%) โ
|
|
753
|
+
โ tasks โ 161 โ 0 โ 161 (100%) โ
|
|
754
|
+
โโโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโ
|
|
755
|
+
|
|
756
|
+
### ๐ Modified Items (Need Re-processing)
|
|
757
|
+
**New Items**: 161 (all items - specifyStatus=create)
|
|
758
|
+
|
|
759
|
+
**Recommended Actions**:
|
|
760
|
+
1. Run /specpro-plan to start planning
|
|
761
|
+
2. Run /specpro-tasks after planning complete
|
|
762
|
+
```
|
|
763
|
+
|
|
764
|
+
### Example 2: In Progress Project
|
|
765
|
+
|
|
766
|
+
```markdown
|
|
767
|
+
## ๐ Project Status Dashboard
|
|
768
|
+
|
|
769
|
+
**Specification**: Version 1.1.1
|
|
770
|
+
**Last Updated**: 2026-02-07
|
|
771
|
+
|
|
772
|
+
### ๐ฏ Overall Progress
|
|
773
|
+
**Overall Completion**: 97%
|
|
774
|
+
|
|
775
|
+
### ๐ Lifecycle Summary
|
|
776
|
+
โโโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
|
|
777
|
+
โ Stage โ Total โ Processed โ Pending โ
|
|
778
|
+
โโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโค
|
|
779
|
+
โ specify โ 161 โ 161 โ 0 (0%) โ
|
|
780
|
+
โ plan โ 161 โ 157 โ 4 (3%) โ
|
|
781
|
+
โ tasks โ 161 โ 157 โ 4 (3%) โ
|
|
782
|
+
โโโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโ
|
|
783
|
+
|
|
784
|
+
### ๐ Modified Items (Need Re-processing)
|
|
785
|
+
**New Items** (specifyStatus=create):
|
|
786
|
+
- FR-xxxA: [encoder implementation]
|
|
787
|
+
- FR-xxxB: [protocol extensions]
|
|
788
|
+
- FR-xxxC: [automatic sub-encoding]
|
|
789
|
+
- FR-xxxD: [performance tuning]
|
|
790
|
+
|
|
791
|
+
**Modified Items** (specifyStatus=update):
|
|
792
|
+
None
|
|
793
|
+
|
|
794
|
+
**Deleted Items** (specifyStatus=delete):
|
|
795
|
+
None
|
|
796
|
+
|
|
797
|
+
### ๐ Next Steps
|
|
798
|
+
**Recommended**:
|
|
799
|
+
1. Run /specpro-plan to process 4 new items (specifyStatus=create)
|
|
800
|
+
2. Run /specpro-tasks to regenerate tasks
|
|
801
|
+
3. Continue implementation
|
|
802
|
+
```
|
|
803
|
+
|
|
804
|
+
---
|
|
805
|
+
|
|
806
|
+
## Use Cases
|
|
807
|
+
|
|
808
|
+
1. **Quick Status Check**: Get instant overview of project progress
|
|
809
|
+
2. **Before Planning**: See what needs to be planned
|
|
810
|
+
3. **Before Implementation**: Verify all prerequisites are met
|
|
811
|
+
4. **Team Meetings**: Share project status with team
|
|
812
|
+
5. **Progress Tracking**: Monitor completion over time
|
|
813
|
+
|
|
814
|
+
---
|
|
815
|
+
|
|
816
|
+
## Integration with Other Commands
|
|
817
|
+
|
|
818
|
+
- **/specpro-status** โ Display dashboard (this command)
|
|
819
|
+
- **/specpro-plan** โ Update planStatus, see changes in dashboard
|
|
820
|
+
- **/specpro-tasks** โ Update tasksStatus, see changes in dashboard
|
|
821
|
+
- **/specpro-specify** โ Update all Lifecycle fields (specify/plan/tasks), see changes in dashboard
|
|
822
|
+
- **/specpro-analyze** โ Run cross-artifact analysis, populate analysis section in dashboard ๐
|
|
823
|
+
|
|
824
|
+
---
|
|
825
|
+
|
|
826
|
+
## Implementation Notes
|
|
827
|
+
|
|
828
|
+
**Parsing Lifecycle Fields** (NEW format):
|
|
829
|
+
- Use regex to extract: `**Lifecycle**: \[specify:(.*?)\]\[plan:(.*?)\]\[tasks:(.*?)\]`
|
|
830
|
+
โ ๏ธ **็ป้ดๆ ็ฉบๆ ผ**๏ผ`T174`๏ผ๏ผๆฌ่ๆญคๅๅ็ๆฏ `\] \[` โโ ่ฆๆฑไธ็ปไน้ด**ๆ็ฉบๆ ผ**๏ผ่ `templates/spec-template.md`
|
|
831
|
+
ไธ `commands/specpro.specify.md` ๅๅ
ฅ็ๆฏ**็ดง้ป**ๅฝขๅผ `[specify:create][plan:create][tasks:create]` โ ้ๅญๆง่กๆถ
|
|
832
|
+
่ฟไธชๆญฃๅ**ๅจๆฌไปๅบ็ๅ
จ้จไบง็ฉไธ้ฝๅน้
ไธๅฐ**๏ผ่ๅน้
ไธๅฐไธใ่ฏฅ้กนๆฒกๆ Lifecycle ๅญๆฎตใๅๅฝขใ
|
|
833
|
+
โ ๏ธ **ไธ้ข้ฃๅฏนๅๅผไบ 2026-09-20 ๆดๆญฃ**๏ผ`T243` / `ISS-216`๏ผ๏ผๆฌ่ๆญคๅๆ"็ดง้ปๅฝขๅผ"ไธพไพไธบ**ไธไธชๆฎตไธญๅไธคไธชไธบ็ฉบ**็ๅๆณ๏ผ
|
|
834
|
+
่้ฃๆฏ **`T143` ไฟฎๅคไนๅ**็ๆจกๆฟๅฝขๆ โโ ๅฎๆต `commands/specpro.specify.md` ๅ็ๆฏไธไธชๆฎต**้ฝๅ `create`**๏ผ**6 ๅค**๏ผ๏ผ
|
|
835
|
+
็ฉบๅผ **0 ๅค**ใ**่ฏฅๆณจ็่งๅฏ๏ผ"็ป้ดๆ ็ฉบๆ ผ"๏ผ่ชๅงๆ็ซ๏ผ้็ๅชๆฏๅฎๅผ็ๅๅผใ**
|
|
836
|
+
โ ๏ธ **ๆญคๅคๅปๆไธๆ้ฃไธไธช็ฉบๆฎต็
งๆๅบๆฅ** โโ `templates/spec-template.md` โ `## Change Summary` ็่งๅ่ฏดๅพๅพ็ดๆฅ๏ผ
|
|
837
|
+
ใ**do not quote what was removed**, not even as a quotation in backticks โโ a value sitting in prose is
|
|
838
|
+
**indistinguishable from a real Lifecycle field to any mechanical reader** (a `grep`, a leg count, a
|
|
839
|
+
propagation scan)ใใ**ๆฌ่ฝฎ็ฌฌไธ็ๆญฃๆฏ็
งๆไบๅฎ**๏ผ้ๅ่ขซ่ชๆฅๆๅไธๆก่งๅๆนๆใ
|
|
840
|
+
- Group 1: specifyStatus (create | update | delete | processed | deprecated)
|
|
841
|
+
- Group 2: planStatus (create | update | delete | processed | deprecated)
|
|
842
|
+
- Group 3: tasksStatus (create | update | delete | processed | deprecated)
|
|
843
|
+
|
|
844
|
+
โ ๏ธ IMPORTANT: Single system-wide vocabulary โ create | update | delete | processed | deprecated.
|
|
845
|
+
No legacy verb labels exist anywhere in the toolchain (create is the only "new item" tag,
|
|
846
|
+
update the only "changed item" tag): the Lifecycle field is the only status carrier, and
|
|
847
|
+
Change Summary entries use the same tags (changed items only).
|
|
848
|
+
- **create**: New item
|
|
849
|
+
- **update**: Modified item (needs re-processing downstream)
|
|
850
|
+
- **delete**: Item to be deleted
|
|
851
|
+
- **processed**: Successfully processed at this stage
|
|
852
|
+
- **deprecated**: Removed from development
|
|
853
|
+
|
|
854
|
+
**Color Coding** (for terminal output):
|
|
855
|
+
- โ
Green: Complete, on track
|
|
856
|
+
- โ ๏ธ Yellow: Warnings, in progress
|
|
857
|
+
- โ Red: Blocking issues
|
|
858
|
+
- ๐ Blue: Information
|
|
859
|
+
|
|
860
|
+
**Performance**:
|
|
861
|
+
- Dashboard generation: <1 second
|
|
862
|
+
- Minimal I/O (read 4-5 files)
|
|
863
|
+
- No external dependencies
|