Skip to content

Commit 2664510

Browse files
authored
Merge pull request #491 from github/quizme
Update with extra commands
2 parents bc101a4 + a4b86f7 commit 2664510

File tree

9 files changed

+325
-20
lines changed

9 files changed

+325
-20
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ All notable changes to the Specify CLI will be documented in this file.
77
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
88
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
99

10+
## [0.0.17] - 2025-09-22
11+
12+
### Added
13+
14+
- New `/clarify` command template to surface up to 5 targeted clarification questions for an existing spec and persist answers into a Clarifications section in the spec.
15+
- New `/analyze` command template providing a non-destructive cross-artifact discrepancy and alignment report (spec, clarifications, plan, tasks, constitution) inserted after `/tasks` and before `/implement`.
16+
- Note: Constitution rules are explicitly treated as non-negotiable; any conflict is a CRITICAL finding requiring artifact remediation, not weakening of principles.
17+
1018
## [0.0.16] - 2025-09-22
1119

1220
### Added

README.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,10 @@ After running `specify init`, your AI coding agent will have access to these sla
206206
|-----------------|-----------------------------------------------------------------------|
207207
| `/constitution` | Create or update project governing principles and development guidelines |
208208
| `/specify` | Define what you want to build (requirements and user stories) |
209+
| `/clarify` | Clarify underspecified areas (must be run before `/plan` unless explicitly skipped; formerly `/quizme`) |
209210
| `/plan` | Create technical implementation plans with your chosen tech stack |
210211
| `/tasks` | Generate actionable task lists for implementation |
212+
| `/analyze` | Cross-artifact consistency & coverage analysis (run after /tasks, before /implement) |
211213
| `/implement` | Execute all tasks to build the feature according to the plan |
212214

213215
### Environment Variables
@@ -392,9 +394,19 @@ At this stage, your project folder contents should resemble the following:
392394
└── tasks-template.md
393395
```
394396

395-
### **STEP 3:** Functional specification clarification
397+
### **STEP 3:** Functional specification clarification (required before planning)
396398

397-
With the baseline specification created, you can go ahead and clarify any of the requirements that were not captured properly within the first shot attempt. For example, you could use a prompt like this within the same Claude Code session:
399+
With the baseline specification created, you can go ahead and clarify any of the requirements that were not captured properly within the first shot attempt.
400+
401+
You should run the structured clarification workflow **before** creating a technical plan to reduce rework downstream.
402+
403+
Preferred order:
404+
1. Use `/clarify` (structured) – sequential, coverage-based questioning that records answers in a Clarifications section.
405+
2. Optionally follow up with ad-hoc free-form refinement if something still feels vague.
406+
407+
If you intentionally want to skip clarification (e.g., spike or exploratory prototype), explicitly state that so the agent doesn't block on missing clarifications.
408+
409+
Example free-form refinement prompt (after `/clarify` if still needed):
398410

399411
```text
400412
For each sample project or project that you create there should be a variable number of tasks between 5 and 15

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "specify-cli"
3-
version = "0.0.16"
3+
version = "0.0.17"
44
description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)."
55
requires-python = ">=3.11"
66
dependencies = [

scripts/bash/check-prerequisites.sh

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,20 @@ source "$SCRIPT_DIR/common.sh"
8282
eval $(get_feature_paths)
8383
check_feature_branch "$CURRENT_BRANCH" "$HAS_GIT" || exit 1
8484

85-
# If paths-only mode, output paths and exit
85+
# If paths-only mode, output paths and exit (support JSON + paths-only combined)
8686
if $PATHS_ONLY; then
87-
echo "REPO_ROOT: $REPO_ROOT"
88-
echo "BRANCH: $CURRENT_BRANCH"
89-
echo "FEATURE_DIR: $FEATURE_DIR"
90-
echo "FEATURE_SPEC: $FEATURE_SPEC"
91-
echo "IMPL_PLAN: $IMPL_PLAN"
92-
echo "TASKS: $TASKS"
87+
if $JSON_MODE; then
88+
# Minimal JSON paths payload (no validation performed)
89+
printf '{"REPO_ROOT":"%s","BRANCH":"%s","FEATURE_DIR":"%s","FEATURE_SPEC":"%s","IMPL_PLAN":"%s","TASKS":"%s"}\n' \
90+
"$REPO_ROOT" "$CURRENT_BRANCH" "$FEATURE_DIR" "$FEATURE_SPEC" "$IMPL_PLAN" "$TASKS"
91+
else
92+
echo "REPO_ROOT: $REPO_ROOT"
93+
echo "BRANCH: $CURRENT_BRANCH"
94+
echo "FEATURE_DIR: $FEATURE_DIR"
95+
echo "FEATURE_SPEC: $FEATURE_SPEC"
96+
echo "IMPL_PLAN: $IMPL_PLAN"
97+
echo "TASKS: $TASKS"
98+
fi
9399
exit 0
94100
fi
95101

scripts/powershell/check-prerequisites.ps1

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,25 @@ if (-not (Test-FeatureBranch -Branch $paths.CURRENT_BRANCH -HasGit:$paths.HAS_GI
6363
exit 1
6464
}
6565

66-
# If paths-only mode, output paths and exit
66+
# If paths-only mode, output paths and exit (support combined -Json -PathsOnly)
6767
if ($PathsOnly) {
68-
Write-Output "REPO_ROOT: $($paths.REPO_ROOT)"
69-
Write-Output "BRANCH: $($paths.CURRENT_BRANCH)"
70-
Write-Output "FEATURE_DIR: $($paths.FEATURE_DIR)"
71-
Write-Output "FEATURE_SPEC: $($paths.FEATURE_SPEC)"
72-
Write-Output "IMPL_PLAN: $($paths.IMPL_PLAN)"
73-
Write-Output "TASKS: $($paths.TASKS)"
68+
if ($Json) {
69+
[PSCustomObject]@{
70+
REPO_ROOT = $paths.REPO_ROOT
71+
BRANCH = $paths.CURRENT_BRANCH
72+
FEATURE_DIR = $paths.FEATURE_DIR
73+
FEATURE_SPEC = $paths.FEATURE_SPEC
74+
IMPL_PLAN = $paths.IMPL_PLAN
75+
TASKS = $paths.TASKS
76+
} | ConvertTo-Json -Compress
77+
} else {
78+
Write-Output "REPO_ROOT: $($paths.REPO_ROOT)"
79+
Write-Output "BRANCH: $($paths.CURRENT_BRANCH)"
80+
Write-Output "FEATURE_DIR: $($paths.FEATURE_DIR)"
81+
Write-Output "FEATURE_SPEC: $($paths.FEATURE_SPEC)"
82+
Write-Output "IMPL_PLAN: $($paths.IMPL_PLAN)"
83+
Write-Output "TASKS: $($paths.TASKS)"
84+
}
7485
exit 0
7586
}
7687

src/specify_cli/__init__.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,9 +1060,11 @@ def init(
10601060
steps_lines.append(f"{step_num}. Start using slash commands with your AI agent:")
10611061
steps_lines.append(" 2.1 [cyan]/constitution[/] - Establish project principles")
10621062
steps_lines.append(" 2.2 [cyan]/specify[/] - Create specifications")
1063-
steps_lines.append(" 2.3 [cyan]/plan[/] - Create implementation plans")
1064-
steps_lines.append(" 2.4 [cyan]/tasks[/] - Generate actionable tasks")
1065-
steps_lines.append(" 2.5 [cyan]/implement[/] - Execute implementation")
1063+
steps_lines.append(" 2.3 [cyan]/clarify[/] - Clarify and de-risk specification (run before [cyan]/plan[/cyan])")
1064+
steps_lines.append(" 2.4 [cyan]/plan[/] - Create implementation plans")
1065+
steps_lines.append(" 2.5 [cyan]/tasks[/] - Generate actionable tasks")
1066+
steps_lines.append(" 2.6 [cyan]/analyze[/] - Validate alignment & surface inconsistencies (read-only)")
1067+
steps_lines.append(" 2.7 [cyan]/implement[/] - Execute implementation")
10661068

10671069
steps_panel = Panel("\n".join(steps_lines), title="Next Steps", border_style="cyan", padding=(1,2))
10681070
console.print()

templates/commands/analyze.md

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
---
2+
description: Perform a non-destructive cross-artifact consistency and quality analysis across spec.md, plan.md, and tasks.md after task generation.
3+
scripts:
4+
sh: scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks
5+
ps: scripts/powershell/check-prerequisites.ps1 -Json -RequireTasks -IncludeTasks
6+
---
7+
8+
The user input to you can be provided directly by the agent or as a command argument - you **MUST** consider it before proceeding with the prompt (if not empty).
9+
10+
User input:
11+
12+
$ARGUMENTS
13+
14+
Goal: Identify inconsistencies, duplications, ambiguities, and underspecified items across the three core artifacts (`spec.md`, `plan.md`, `tasks.md`) before implementation. This command MUST run only after `/tasks` has successfully produced a complete `tasks.md`.
15+
16+
STRICTLY READ-ONLY: Do **not** modify any files. Output a structured analysis report. Offer an optional remediation plan (user must explicitly approve before any follow-up editing commands would be invoked manually).
17+
18+
Constitution Authority: The project constitution (`/memory/constitution.md`) is **non-negotiable** within this analysis scope. Constitution conflicts are automatically CRITICAL and require adjustment of the spec, plan, or tasks—not dilution, reinterpretation, or silent ignoring of the principle. If a principle itself needs to change, that must occur in a separate, explicit constitution update outside `/analyze`.
19+
20+
Execution steps:
21+
22+
1. Run `{SCRIPT}` once from repo root and parse JSON for FEATURE_DIR and AVAILABLE_DOCS. Derive absolute paths:
23+
- SPEC = FEATURE_DIR/spec.md
24+
- PLAN = FEATURE_DIR/plan.md
25+
- TASKS = FEATURE_DIR/tasks.md
26+
Abort with an error message if any required file is missing (instruct the user to run missing prerequisite command).
27+
28+
2. Load artifacts:
29+
- Parse spec.md sections: Overview/Context, Functional Requirements, Non-Functional Requirements, User Stories, Edge Cases (if present).
30+
- Parse plan.md: Architecture/stack choices, Data Model references, Phases, Technical constraints.
31+
- Parse tasks.md: Task IDs, descriptions, phase grouping, parallel markers [P], referenced file paths.
32+
- Load constitution `/memory/constitution.md` for principle validation.
33+
34+
3. Build internal semantic models:
35+
- Requirements inventory: Each functional + non-functional requirement with a stable key (derive slug based on imperative phrase; e.g., "User can upload file" -> `user-can-upload-file`).
36+
- User story/action inventory.
37+
- Task coverage mapping: Map each task to one or more requirements or stories (inference by keyword / explicit reference patterns like IDs or key phrases).
38+
- Constitution rule set: Extract principle names and any MUST/SHOULD normative statements.
39+
40+
4. Detection passes:
41+
A. Duplication detection:
42+
- Identify near-duplicate requirements. Mark lower-quality phrasing for consolidation.
43+
B. Ambiguity detection:
44+
- Flag vague adjectives (fast, scalable, secure, intuitive, robust) lacking measurable criteria.
45+
- Flag unresolved placeholders (TODO, TKTK, ???, <placeholder>, etc.).
46+
C. Underspecification:
47+
- Requirements with verbs but missing object or measurable outcome.
48+
- User stories missing acceptance criteria alignment.
49+
- Tasks referencing files or components not defined in spec/plan.
50+
D. Constitution alignment:
51+
- Any requirement or plan element conflicting with a MUST principle.
52+
- Missing mandated sections or quality gates from constitution.
53+
E. Coverage gaps:
54+
- Requirements with zero associated tasks.
55+
- Tasks with no mapped requirement/story.
56+
- Non-functional requirements not reflected in tasks (e.g., performance, security).
57+
F. Inconsistency:
58+
- Terminology drift (same concept named differently across files).
59+
- Data entities referenced in plan but absent in spec (or vice versa).
60+
- Task ordering contradictions (e.g., integration tasks before foundational setup tasks without dependency note).
61+
- Conflicting requirements (e.g., one requires to use Next.js while other says to use Vue as the framework).
62+
63+
5. Severity assignment heuristic:
64+
- CRITICAL: Violates constitution MUST, missing core spec artifact, or requirement with zero coverage that blocks baseline functionality.
65+
- HIGH: Duplicate or conflicting requirement, ambiguous security/performance attribute, untestable acceptance criterion.
66+
- MEDIUM: Terminology drift, missing non-functional task coverage, underspecified edge case.
67+
- LOW: Style/wording improvements, minor redundancy not affecting execution order.
68+
69+
6. Produce a Markdown report (no file writes) with sections:
70+
71+
### Specification Analysis Report
72+
| ID | Category | Severity | Location(s) | Summary | Recommendation |
73+
|----|----------|----------|-------------|---------|----------------|
74+
| A1 | Duplication | HIGH | spec.md:L120-134 | Two similar requirements ... | Merge phrasing; keep clearer version |
75+
(Add one row per finding; generate stable IDs prefixed by category initial.)
76+
77+
Additional subsections:
78+
- Coverage Summary Table:
79+
| Requirement Key | Has Task? | Task IDs | Notes |
80+
- Constitution Alignment Issues (if any)
81+
- Unmapped Tasks (if any)
82+
- Metrics:
83+
* Total Requirements
84+
* Total Tasks
85+
* Coverage % (requirements with >=1 task)
86+
* Ambiguity Count
87+
* Duplication Count
88+
* Critical Issues Count
89+
90+
7. At end of report, output a concise Next Actions block:
91+
- If CRITICAL issues exist: Recommend resolving before `/implement`.
92+
- If only LOW/MEDIUM: User may proceed, but provide improvement suggestions.
93+
- Provide explicit command suggestions: e.g., "Run /specify with refinement", "Run /plan to adjust architecture", "Manually edit tasks.md to add coverage for 'performance-metrics'".
94+
95+
8. Ask the user: "Would you like me to suggest concrete remediation edits for the top N issues?" (Do NOT apply them automatically.)
96+
97+
Behavior rules:
98+
- NEVER modify files.
99+
- NEVER hallucinate missing sections—if absent, report them.
100+
- KEEP findings deterministic: if rerun without changes, produce consistent IDs and counts.
101+
- LIMIT total findings in the main table to 50; aggregate remainder in a summarized overflow note.
102+
- If zero issues found, emit a success report with coverage statistics and proceed recommendation.
103+
104+
Context: {ARGS}

0 commit comments

Comments
 (0)