@leeovery/claude-technical-workflows 2.1.32 → 2.1.34
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 +15 -5
- package/agents/implementation-analysis-task-writer.md +3 -2
- package/agents/review-findings-synthesizer.md +112 -0
- package/agents/review-product-assessor.md +2 -2
- package/agents/review-task-verifier.md +5 -3
- package/package.json +1 -1
- package/skills/migrate/scripts/migrations/008-review-directory-structure.sh +106 -0
- package/skills/start-review/SKILL.md +48 -16
- package/skills/start-review/references/display-plans.md +9 -1
- package/skills/start-review/references/invoke-skill.md +35 -1
- package/skills/start-review/references/select-plans.md +30 -1
- package/skills/start-review/scripts/discovery.sh +138 -0
- package/skills/technical-implementation/references/invoke-task-writer.md +1 -0
- package/skills/technical-planning/references/output-formats/tick/authoring.md +13 -6
- package/skills/technical-review/SKILL.md +11 -25
- package/skills/technical-review/references/invoke-product-assessor.md +2 -2
- package/skills/technical-review/references/invoke-review-synthesizer.md +64 -0
- package/skills/technical-review/references/invoke-review-task-writer.md +44 -0
- package/skills/technical-review/references/invoke-task-verifiers.md +14 -6
- package/skills/technical-review/references/produce-review.md +27 -0
- package/skills/technical-review/references/review-actions-loop.md +303 -0
package/README.md
CHANGED
|
@@ -110,7 +110,7 @@ Each phase produces documents that feed the next. Here's the journey:
|
|
|
110
110
|
|
|
111
111
|
**Implementation** — Executes plans via strict TDD. Tests first, then code, commit after each task. Per-task approval gates keep you in control, with auto-mode available when you trust the flow.
|
|
112
112
|
|
|
113
|
-
**Review** — Validates the implementation against spec and plan. Catches drift, missing requirements, and quality issues.
|
|
113
|
+
**Review** — Validates the implementation against spec and plan. Catches drift, missing requirements, and quality issues. Findings can be synthesized into remediation tasks that feed back into implementation, closing the review-implementation loop.
|
|
114
114
|
|
|
115
115
|
### Standalone Skills
|
|
116
116
|
|
|
@@ -231,8 +231,12 @@ docs/workflow/
|
|
|
231
231
|
├── implementation/ # Phase 5 — directory per topic
|
|
232
232
|
│ └── {topic}/
|
|
233
233
|
│ └── tracking.md # Progress, gates, current task
|
|
234
|
-
└── review/ # Phase 6 —
|
|
235
|
-
└── {topic}
|
|
234
|
+
└── review/ # Phase 6 — versioned per review
|
|
235
|
+
└── {topic}/
|
|
236
|
+
└── r1/
|
|
237
|
+
├── review.md # Review summary and verdict
|
|
238
|
+
├── qa-task-1.md # Per-task QA verification
|
|
239
|
+
└── product-assessment.md # Holistic product assessment
|
|
236
240
|
```
|
|
237
241
|
|
|
238
242
|
Research starts with `exploration.md` and splits into topic files as themes emerge. From specification onwards, each topic gets its own directory. Planning task storage varies by [output format](#output-formats) — the tree above shows local-markdown; Tick and Linear store tasks externally.
|
|
@@ -269,12 +273,15 @@ skills/
|
|
|
269
273
|
|
|
270
274
|
agents/
|
|
271
275
|
├── review-task-verifier.md # Verifies single task implementation for review
|
|
276
|
+
├── review-findings-synthesizer.md # Synthesizes review findings into remediation tasks
|
|
272
277
|
├── implementation-task-executor.md # TDD executor for single plan tasks
|
|
273
278
|
├── implementation-task-reviewer.md # Post-task review for spec conformance
|
|
274
279
|
├── planning-phase-designer.md # Design phases from specification
|
|
275
280
|
├── planning-task-designer.md # Break phases into task lists
|
|
276
281
|
├── planning-task-author.md # Write full task detail
|
|
277
|
-
|
|
282
|
+
├── planning-dependency-grapher.md # Analyze task dependencies and priorities
|
|
283
|
+
├── planning-review-traceability.md # Spec-to-plan traceability analysis
|
|
284
|
+
└── planning-review-integrity.md # Plan structural quality review
|
|
278
285
|
|
|
279
286
|
tests/
|
|
280
287
|
└── scripts/ # Shell script tests for discovery and migrations
|
|
@@ -310,7 +317,7 @@ Sequential skills that expect files from previous phases and pass content to pro
|
|
|
310
317
|
| [**/start-specification**](skills/start-specification/) | Start a specification session from existing discussion(s). Automatically analyses multiple discussions for natural groupings and consolidates them into unified specifications. |
|
|
311
318
|
| [**/start-planning**](skills/start-planning/) | Start a planning session from an existing specification. Creates implementation plans with phases, tasks, and acceptance criteria. Supports multiple output formats. |
|
|
312
319
|
| [**/start-implementation**](skills/start-implementation/) | Start implementing a plan. Executes tasks via strict TDD, committing after each passing test. |
|
|
313
|
-
| [**/start-review**](skills/start-review/) | Start reviewing completed work. Validates implementation against plan tasks and acceptance criteria.
|
|
320
|
+
| [**/start-review**](skills/start-review/) | Start reviewing completed work. Validates implementation against plan tasks and acceptance criteria. Findings can be synthesized into remediation tasks. |
|
|
314
321
|
|
|
315
322
|
#### Utility Skills
|
|
316
323
|
|
|
@@ -354,6 +361,9 @@ Subagents that skills can spawn for parallel task execution.
|
|
|
354
361
|
| [**planning-task-designer**](agents/planning-task-designer.md) | technical-planning | Breaks a single phase into a task list with edge cases. |
|
|
355
362
|
| [**planning-task-author**](agents/planning-task-author.md) | technical-planning | Writes full detail for a single plan task. |
|
|
356
363
|
| [**planning-dependency-grapher**](agents/planning-dependency-grapher.md) | technical-planning | Analyzes authored tasks to establish internal dependencies and priorities. |
|
|
364
|
+
| [**planning-review-traceability**](agents/planning-review-traceability.md) | technical-planning | Spec-to-plan traceability analysis. |
|
|
365
|
+
| [**planning-review-integrity**](agents/planning-review-integrity.md) | technical-planning | Plan structural quality review. |
|
|
366
|
+
| [**review-findings-synthesizer**](agents/review-findings-synthesizer.md) | technical-review | Synthesizes review findings into normalized remediation tasks for plan integration. |
|
|
357
367
|
|
|
358
368
|
## Requirements
|
|
359
369
|
|
|
@@ -19,6 +19,7 @@ You receive via the orchestrator's prompt:
|
|
|
19
19
|
4. **Plan format reading adapter path** — how to read tasks from the plan (for determining next phase number)
|
|
20
20
|
5. **Plan format authoring adapter path** — how to create tasks in the plan
|
|
21
21
|
6. **plan-index-schema.md** — Canonical plan index structure
|
|
22
|
+
7. **Phase label** — the label for the new phase (e.g., "Analysis (Cycle 1)", "Review Remediation (Cycle 1)")
|
|
22
23
|
|
|
23
24
|
## Your Process
|
|
24
25
|
|
|
@@ -35,10 +36,10 @@ The Plan Index File (`docs/workflow/planning/{topic}/plan.md`) is the single sou
|
|
|
35
36
|
|
|
36
37
|
Append at the end of the Plan Index File body, following the **Phase Entry** and **Task Table** templates from plan-index-schema:
|
|
37
38
|
|
|
38
|
-
- Phase heading: `### Phase {N}:
|
|
39
|
+
- Phase heading: `### Phase {N}: {phase_label}`
|
|
39
40
|
- Phase `status`: `approved` (pre-approved by user in approval gate)
|
|
40
41
|
- Phase `ext_id`: external identifier for the phase from the output format
|
|
41
|
-
- Phase goal: `Address findings from
|
|
42
|
+
- Phase goal: `Address findings from {phase_label}.`
|
|
42
43
|
- Omit `approved_at` and acceptance criteria (analysis phases don't use them)
|
|
43
44
|
- Task `Status`: `authored` (task files are fully written)
|
|
44
45
|
- Task `Ext ID`: external identifier for the task from the output format
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-findings-synthesizer
|
|
3
|
+
description: Synthesizes review findings into normalized tasks. Reads review files (QA verifications and product assessment), deduplicates, groups, normalizes using task template, and writes a staging file for orchestrator approval. Invoked by technical-review skill after review actions are initiated.
|
|
4
|
+
tools: Read, Write, Glob, Grep
|
|
5
|
+
model: opus
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Review Findings: Synthesizer
|
|
9
|
+
|
|
10
|
+
You locate the review findings files using the provided paths, then read them, deduplicate and group findings, normalize into tasks, and write a staging file for user approval.
|
|
11
|
+
|
|
12
|
+
## Your Input
|
|
13
|
+
|
|
14
|
+
You receive via the orchestrator's prompt:
|
|
15
|
+
|
|
16
|
+
1. **Review scope** — single or multi, with plan list
|
|
17
|
+
2. **Review paths** — paths to `r{N}/` directories containing review summary, QA files, and product assessment
|
|
18
|
+
3. **Specification path(s)** — the validated specification(s) for context
|
|
19
|
+
4. **Cycle number** — which review remediation cycle this is
|
|
20
|
+
|
|
21
|
+
## Your Process
|
|
22
|
+
|
|
23
|
+
1. **Read review summary(ies)** — extract verdict, required changes, recommendations from each `review.md`
|
|
24
|
+
2. **Read all QA files** — read every `qa-task-*.md` across all review paths. Extract BLOCKING ISSUES and significant NON-BLOCKING NOTES with their file:line references
|
|
25
|
+
3. **Read product assessment(s)** — extract ROBUSTNESS, GAPS, and STRENGTHENING findings from `product-assessment.md`
|
|
26
|
+
4. **Tag each finding with source plan** — use the directory structure of QA files to identify which plan each finding belongs to. For multi-plan reviews, QA files are stored in per-plan subdirectories within the review. Product assessment findings: tag by plan where identifiable; mark as `cross-cutting` otherwise
|
|
27
|
+
5. **Deduplicate** — same issue found in QA + product assessment → one finding, note all sources
|
|
28
|
+
6. **Group related findings** — multiple findings about the same concern become one task (e.g., 3 QA findings about missing error handling in the same module = 1 "add error handling" task)
|
|
29
|
+
7. **Filter** — discard low-severity non-blocking findings unless they cluster into a pattern. Never discard high-severity or blocking findings.
|
|
30
|
+
8. **Normalize** — convert each group into a task using the canonical task template (Problem / Solution / Outcome / Do / Acceptance Criteria / Tests)
|
|
31
|
+
9. **Write report** — output to `docs/workflow/implementation/{primary-topic}/review-report-c{cycle}.md`
|
|
32
|
+
10. **Write staging file** — if actionable tasks exist, write to `docs/workflow/implementation/{primary-topic}/review-tasks-c{cycle}.md` with `status: pending` for each task
|
|
33
|
+
|
|
34
|
+
## Report Format
|
|
35
|
+
|
|
36
|
+
Write the report file with this structure:
|
|
37
|
+
|
|
38
|
+
```markdown
|
|
39
|
+
---
|
|
40
|
+
scope: {scope description}
|
|
41
|
+
cycle: {N}
|
|
42
|
+
source: review
|
|
43
|
+
total_findings: {N}
|
|
44
|
+
deduplicated_findings: {N}
|
|
45
|
+
proposed_tasks: {N}
|
|
46
|
+
---
|
|
47
|
+
# Review Report: {Scope} (Cycle {N})
|
|
48
|
+
|
|
49
|
+
## Summary
|
|
50
|
+
{2-3 sentence overview of findings}
|
|
51
|
+
|
|
52
|
+
## Discarded Findings
|
|
53
|
+
- {title} — {reason for discarding}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Staging File Format
|
|
57
|
+
|
|
58
|
+
Write the staging file with this structure:
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
---
|
|
62
|
+
scope: {scope description}
|
|
63
|
+
cycle: {N}
|
|
64
|
+
source: review
|
|
65
|
+
total_proposed: {N}
|
|
66
|
+
gate_mode: gated
|
|
67
|
+
---
|
|
68
|
+
# Review Tasks: {Scope} (Cycle {N})
|
|
69
|
+
|
|
70
|
+
## Task 1: {title}
|
|
71
|
+
status: pending
|
|
72
|
+
severity: high
|
|
73
|
+
plan: {plan-topic}
|
|
74
|
+
sources: qa-task-3, product-assessment
|
|
75
|
+
|
|
76
|
+
**Problem**: {what the review found}
|
|
77
|
+
**Solution**: {what to fix}
|
|
78
|
+
**Outcome**: {what success looks like}
|
|
79
|
+
**Do**: {step-by-step implementation instructions}
|
|
80
|
+
**Acceptance Criteria**:
|
|
81
|
+
- {criterion}
|
|
82
|
+
**Tests**:
|
|
83
|
+
- {test description}
|
|
84
|
+
|
|
85
|
+
## Task 2: {title}
|
|
86
|
+
status: pending
|
|
87
|
+
...
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Hard Rules
|
|
91
|
+
|
|
92
|
+
**MANDATORY. No exceptions.**
|
|
93
|
+
|
|
94
|
+
1. **No new features** — only address issues found in the review. Every proposed task must trace back to a specific review finding.
|
|
95
|
+
2. **Never discard blocking** — blocking issues from QA always become proposed tasks.
|
|
96
|
+
3. **Self-contained tasks** — every proposed task must be independently executable. No task should depend on another proposed task.
|
|
97
|
+
4. **Faithful synthesis** — do not invent findings. Every proposed task must trace back to at least one QA finding or product assessment observation.
|
|
98
|
+
5. **No git writes** — do not commit or stage. Writing the report and staging files are your only file writes.
|
|
99
|
+
6. **Plan tagging** — every task must have a `plan:` field identifying which plan it belongs to. This is critical for multi-plan reviews where tasks are created in different plans.
|
|
100
|
+
|
|
101
|
+
## Your Output
|
|
102
|
+
|
|
103
|
+
Return a brief status to the orchestrator:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
STATUS: tasks_proposed | clean
|
|
107
|
+
TASKS_PROPOSED: {N}
|
|
108
|
+
SUMMARY: {1-2 sentences}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
- `tasks_proposed`: tasks written to staging file — orchestrator should present for approval
|
|
112
|
+
- `clean`: no actionable findings — orchestrator should report clean result
|
|
@@ -42,7 +42,7 @@ You receive via the orchestrator's prompt:
|
|
|
42
42
|
3. **Read plan(s)** — understand what was built and the scope of each plan
|
|
43
43
|
4. **Read all implementation files** — understand the full picture
|
|
44
44
|
5. **Assess as a product** — evaluate holistically against focus areas
|
|
45
|
-
6. **Write findings** to `docs/workflow/review/{
|
|
45
|
+
6. **Write findings** to `docs/workflow/review/{scope}/r{N}/product-assessment.md`
|
|
46
46
|
|
|
47
47
|
For multi-plan/full-product scope, use a descriptive scope name (e.g., `full-product` or a hyphenated list of topic names).
|
|
48
48
|
|
|
@@ -59,7 +59,7 @@ For multi-plan/full-product scope, use a descriptive scope name (e.g., `full-pro
|
|
|
59
59
|
|
|
60
60
|
## Output File Format
|
|
61
61
|
|
|
62
|
-
Write to `docs/workflow/review/{
|
|
62
|
+
Write to `docs/workflow/review/{scope}/r{N}/product-assessment.md`:
|
|
63
63
|
|
|
64
64
|
```
|
|
65
65
|
SCOPE: {single-plan | multi-plan | full-product}
|
|
@@ -17,8 +17,10 @@ You receive:
|
|
|
17
17
|
3. **Plan path**: The full plan for additional context
|
|
18
18
|
4. **Project skill paths**: Relevant `.claude/skills/` paths for framework conventions
|
|
19
19
|
5. **Review checklist path**: Path to the review checklist (`skills/technical-review/references/review-checklist.md`) — read this for detailed verification criteria
|
|
20
|
-
6. **
|
|
21
|
-
7. **
|
|
20
|
+
6. **Review scope**: Scope directory name for output path
|
|
21
|
+
7. **Review number**: Version number (e.g., 1 for `r1/`)
|
|
22
|
+
8. **Plan topic**: For multi-plan reviews, the plan-specific subdirectory name
|
|
23
|
+
9. **Task index**: Sequential number for this task (used for output file naming)
|
|
22
24
|
|
|
23
25
|
## Your Task
|
|
24
26
|
|
|
@@ -86,7 +88,7 @@ Review the implementation as a senior architect would:
|
|
|
86
88
|
|
|
87
89
|
## Output File Format
|
|
88
90
|
|
|
89
|
-
Write to `docs/workflow/review/{
|
|
91
|
+
Write to `docs/workflow/review/{scope}/r{N}/qa-task-{index}.md`:
|
|
90
92
|
|
|
91
93
|
```
|
|
92
94
|
TASK: [Task name/description]
|
package/package.json
CHANGED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# 008-review-directory-structure.sh
|
|
4
|
+
#
|
|
5
|
+
# Moves existing flat review files into a versioned r1/ directory structure.
|
|
6
|
+
#
|
|
7
|
+
# Previous layout:
|
|
8
|
+
# review/
|
|
9
|
+
# ├── tick-core.md # Summary at root
|
|
10
|
+
# ├── tick-core/ # QA files + product assessment
|
|
11
|
+
# │ ├── qa-task-1.md
|
|
12
|
+
# │ └── product-assessment.md
|
|
13
|
+
# ├── doctor-installation-migration.md # Multi-plan summary
|
|
14
|
+
# ├── installation/ # Per-plan QA (ambiguous)
|
|
15
|
+
# │ └── qa-task-1.md
|
|
16
|
+
#
|
|
17
|
+
# New layout:
|
|
18
|
+
# review/
|
|
19
|
+
# ├── tick-core/
|
|
20
|
+
# │ └── r1/
|
|
21
|
+
# │ ├── review.md
|
|
22
|
+
# │ ├── qa-task-1.md
|
|
23
|
+
# │ └── product-assessment.md
|
|
24
|
+
# ├── doctor-installation-migration/
|
|
25
|
+
# │ └── r1/
|
|
26
|
+
# │ ├── review.md
|
|
27
|
+
# │ ├── product-assessment.md
|
|
28
|
+
# │ └── installation/
|
|
29
|
+
# │ └── qa-task-1.md
|
|
30
|
+
#
|
|
31
|
+
# Idempotent: skips if r1/ already exists.
|
|
32
|
+
#
|
|
33
|
+
# This script is sourced by migrate.sh and has access to:
|
|
34
|
+
# - is_migrated "filepath" "migration_id"
|
|
35
|
+
# - record_migration "filepath" "migration_id"
|
|
36
|
+
# - report_update "filepath" "description"
|
|
37
|
+
# - report_skip "filepath"
|
|
38
|
+
#
|
|
39
|
+
|
|
40
|
+
MIGRATION_ID="008"
|
|
41
|
+
REVIEW_DIR="docs/workflow/review"
|
|
42
|
+
|
|
43
|
+
# Skip if no review directory
|
|
44
|
+
if [ ! -d "$REVIEW_DIR" ]; then
|
|
45
|
+
return 0
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
for review_file in "$REVIEW_DIR"/*.md; do
|
|
49
|
+
[ -f "$review_file" ] || continue
|
|
50
|
+
|
|
51
|
+
scope=$(basename "$review_file" .md)
|
|
52
|
+
scope_dir="$REVIEW_DIR/$scope"
|
|
53
|
+
r1_dir="$scope_dir/r1"
|
|
54
|
+
|
|
55
|
+
# Use the review file as migration tracking key
|
|
56
|
+
if is_migrated "$review_file" "$MIGRATION_ID"; then
|
|
57
|
+
report_skip "$review_file"
|
|
58
|
+
continue
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# Skip if r1/ already exists (idempotent)
|
|
62
|
+
if [ -d "$r1_dir" ]; then
|
|
63
|
+
record_migration "$review_file" "$MIGRATION_ID"
|
|
64
|
+
report_skip "$review_file"
|
|
65
|
+
continue
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
# Create r1/ directory
|
|
69
|
+
mkdir -p "$r1_dir"
|
|
70
|
+
|
|
71
|
+
# Move the summary file to r1/review.md
|
|
72
|
+
mv "$review_file" "$r1_dir/review.md"
|
|
73
|
+
moved=1
|
|
74
|
+
|
|
75
|
+
# If a matching directory exists, move its contents into r1/
|
|
76
|
+
if [ -d "$scope_dir" ]; then
|
|
77
|
+
# Move qa-task-*.md files
|
|
78
|
+
for qa_file in "$scope_dir"/qa-task-*.md; do
|
|
79
|
+
[ -f "$qa_file" ] || continue
|
|
80
|
+
mv "$qa_file" "$r1_dir/"
|
|
81
|
+
moved=$((moved + 1))
|
|
82
|
+
done
|
|
83
|
+
|
|
84
|
+
# Move product-assessment.md
|
|
85
|
+
if [ -f "$scope_dir/product-assessment.md" ]; then
|
|
86
|
+
mv "$scope_dir/product-assessment.md" "$r1_dir/"
|
|
87
|
+
moved=$((moved + 1))
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
# Move per-plan QA subdirectories (multi-plan reviews)
|
|
91
|
+
for subdir in "$scope_dir"/*/; do
|
|
92
|
+
[ -d "$subdir" ] || continue
|
|
93
|
+
subdir_name=$(basename "$subdir")
|
|
94
|
+
# Skip the r1 directory we just created
|
|
95
|
+
[ "$subdir_name" = "r1" ] && continue
|
|
96
|
+
# Only move directories that contain qa-task files
|
|
97
|
+
if ls -1 "$subdir"/qa-task-*.md >/dev/null 2>&1; then
|
|
98
|
+
mv "$subdir" "$r1_dir/"
|
|
99
|
+
moved=$((moved + 1))
|
|
100
|
+
fi
|
|
101
|
+
done
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
record_migration "$r1_dir/review.md" "$MIGRATION_ID"
|
|
105
|
+
report_update "$r1_dir/review.md" "migrated to r1/ structure ($moved items)"
|
|
106
|
+
done
|
|
@@ -77,10 +77,16 @@ Parse the discovery output to understand:
|
|
|
77
77
|
- `files` - list of plans with: name, topic, status, date, format, specification, specification_exists, plan_id (if present)
|
|
78
78
|
- `count` - total number of plans
|
|
79
79
|
|
|
80
|
+
**From `reviews` section:**
|
|
81
|
+
- `exists` - whether any reviews exist
|
|
82
|
+
- `entries` - list of reviews with: scope, type, plans, versions, latest_version, latest_verdict, latest_path, has_synthesis
|
|
83
|
+
|
|
80
84
|
**From `state` section:**
|
|
81
85
|
- `scenario` - one of: `"no_plans"`, `"single_plan"`, `"multiple_plans"`
|
|
82
86
|
- `implemented_count` - plans with implementation_status != "none"
|
|
83
87
|
- `completed_count` - plans with implementation_status == "completed"
|
|
88
|
+
- `reviewed_plan_count` - plans that have been reviewed
|
|
89
|
+
- `all_reviewed` - whether all implemented plans have reviews
|
|
84
90
|
|
|
85
91
|
**IMPORTANT**: Use ONLY this script for discovery. Do NOT run additional bash commands (ls, head, cat, etc.) to gather state - the script provides everything needed.
|
|
86
92
|
|
|
@@ -110,9 +116,50 @@ to build it.
|
|
|
110
116
|
|
|
111
117
|
**STOP.** Do not proceed — terminal condition.
|
|
112
118
|
|
|
119
|
+
#### If all_reviewed is true
|
|
120
|
+
|
|
121
|
+
All implemented plans have been reviewed.
|
|
122
|
+
|
|
123
|
+
> *Output the next fenced block as a code block:*
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
Review Overview
|
|
127
|
+
|
|
128
|
+
All {N} implemented plans have been reviewed.
|
|
129
|
+
|
|
130
|
+
1. {topic:(titlecase)}
|
|
131
|
+
└─ Review: r{N} ({verdict})
|
|
132
|
+
└─ Synthesis: @if(has_synthesis) completed @else pending @endif
|
|
133
|
+
|
|
134
|
+
2. ...
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
· · · · · · · · · · · ·
|
|
141
|
+
All plans have been reviewed.
|
|
142
|
+
|
|
143
|
+
- **`a`/`analysis`** — Synthesize findings from existing reviews into tasks
|
|
144
|
+
- **`r`/`re-review`** — Re-review a plan (creates new review version)
|
|
145
|
+
|
|
146
|
+
Select an option:
|
|
147
|
+
· · · · · · · · · · · ·
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**STOP.** Wait for user response.
|
|
151
|
+
|
|
152
|
+
#### If analysis
|
|
153
|
+
|
|
154
|
+
→ Proceed to **Step 4** with scope set to "analysis".
|
|
155
|
+
|
|
156
|
+
#### If re-review
|
|
157
|
+
|
|
158
|
+
→ Proceed to **Step 3**, incrementing the review version for the selected plan.
|
|
159
|
+
|
|
113
160
|
#### If scenario is "single_plan" or "multiple_plans"
|
|
114
161
|
|
|
115
|
-
Plans exist.
|
|
162
|
+
Plans exist (some may have reviews, some may not).
|
|
116
163
|
|
|
117
164
|
→ Proceed to **Step 3** to present options.
|
|
118
165
|
|
|
@@ -136,19 +183,4 @@ Load **[select-plans.md](references/select-plans.md)** and follow its instructio
|
|
|
136
183
|
|
|
137
184
|
## Step 5: Invoke the Skill
|
|
138
185
|
|
|
139
|
-
Before invoking the processing skill, save a session bookmark.
|
|
140
|
-
|
|
141
|
-
> *Output the next fenced block as a code block:*
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
Saving session state so Claude can pick up where it left off if the conversation is compacted.
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
```bash
|
|
148
|
-
.claude/hooks/workflows/write-session-state.sh \
|
|
149
|
-
"{topic}" \
|
|
150
|
-
"skills/technical-review/SKILL.md" \
|
|
151
|
-
"docs/workflow/review/{topic}.md"
|
|
152
|
-
```
|
|
153
|
-
|
|
154
186
|
Load **[invoke-skill.md](references/invoke-skill.md)** and follow its instructions as written.
|
|
@@ -21,6 +21,7 @@ Review Overview
|
|
|
21
21
|
└─ Plan: concluded ({format})
|
|
22
22
|
└─ Implementation: {impl_status:[completed|in-progress]}
|
|
23
23
|
└─ Spec: {spec:[exists|missing]}
|
|
24
|
+
└─ Review: @if(has_review) r{N} ({verdict}) @else (none) @endif
|
|
24
25
|
|
|
25
26
|
2. ...
|
|
26
27
|
```
|
|
@@ -54,6 +55,10 @@ Key:
|
|
|
54
55
|
Implementation status:
|
|
55
56
|
completed — all tasks implemented
|
|
56
57
|
in-progress — implementation still ongoing
|
|
58
|
+
|
|
59
|
+
Review status:
|
|
60
|
+
r{N} — review version number
|
|
61
|
+
(none) — not yet reviewed
|
|
57
62
|
```
|
|
58
63
|
|
|
59
64
|
**Then route based on what's reviewable:**
|
|
@@ -90,11 +95,14 @@ Scope: single
|
|
|
90
95
|
|
|
91
96
|
```
|
|
92
97
|
· · · · · · · · · · · ·
|
|
93
|
-
What
|
|
98
|
+
What would you like to do?
|
|
94
99
|
|
|
95
100
|
- **`s`/`single`** — Review one plan's implementation
|
|
96
101
|
- **`m`/`multi`** — Review selected plans together (cross-cutting)
|
|
97
102
|
- **`a`/`all`** — Review all implemented plans (full product)
|
|
103
|
+
@if(has_any_review) - **`analysis`** — Synthesize findings from existing reviews into tasks @endif
|
|
104
|
+
|
|
105
|
+
Select an option:
|
|
98
106
|
· · · · · · · · · · · ·
|
|
99
107
|
```
|
|
100
108
|
|
|
@@ -6,7 +6,26 @@
|
|
|
6
6
|
|
|
7
7
|
After completing the steps above, this skill's purpose is fulfilled.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Save Session Bookmark
|
|
10
|
+
|
|
11
|
+
> *Output the next fenced block as a code block:*
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
Saving session state so Claude can pick up where it left off if the conversation is compacted.
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
.claude/hooks/workflows/write-session-state.sh \
|
|
19
|
+
"{topic}" \
|
|
20
|
+
"skills/technical-review/SKILL.md" \
|
|
21
|
+
"docs/workflow/review/{scope}/r{N}/review.md"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Invoke the Skill
|
|
27
|
+
|
|
28
|
+
Invoke the [technical-review](../../technical-review/SKILL.md) skill for your next instructions. Do not act on the gathered information until the skill is loaded - it contains the instructions for how to proceed. Use the appropriate handoff format based on the gathered context (review or analysis-only).
|
|
10
29
|
|
|
11
30
|
**Example handoff (single):**
|
|
12
31
|
```
|
|
@@ -30,3 +49,18 @@ Plans:
|
|
|
30
49
|
|
|
31
50
|
Invoke the technical-review skill.
|
|
32
51
|
```
|
|
52
|
+
|
|
53
|
+
**Example handoff (analysis-only):**
|
|
54
|
+
```
|
|
55
|
+
Analysis session for: {scope description}
|
|
56
|
+
Review mode: analysis-only
|
|
57
|
+
Review scope: {single | multi | all}
|
|
58
|
+
Reviews:
|
|
59
|
+
- scope: {scope}
|
|
60
|
+
path: docs/workflow/review/{scope}/r{N}/
|
|
61
|
+
plans: [{plan topics}]
|
|
62
|
+
format: {format}
|
|
63
|
+
specification: {spec path}
|
|
64
|
+
|
|
65
|
+
Invoke the technical-review skill.
|
|
66
|
+
```
|
|
@@ -4,7 +4,36 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
This step only applies for `single` or `
|
|
7
|
+
This step only applies for `single`, `multi`, or `all` scope chosen in Step 3.
|
|
8
|
+
|
|
9
|
+
#### If scope is "analysis"
|
|
10
|
+
|
|
11
|
+
Select which reviews to analyze.
|
|
12
|
+
|
|
13
|
+
#### If multiple reviews exist
|
|
14
|
+
|
|
15
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
· · · · · · · · · · · ·
|
|
19
|
+
Which reviews to analyze?
|
|
20
|
+
|
|
21
|
+
- **`a`/`all`** — All reviewed plans
|
|
22
|
+
- **`s`/`select`** — Choose specific reviews
|
|
23
|
+
|
|
24
|
+
Select an option:
|
|
25
|
+
· · · · · · · · · · · ·
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**STOP.** Wait for user response.
|
|
29
|
+
|
|
30
|
+
If `select`, present numbered list of reviewed plans for the user to choose from (comma-separated numbers).
|
|
31
|
+
|
|
32
|
+
#### If single review exists
|
|
33
|
+
|
|
34
|
+
Automatically proceed with the only available review.
|
|
35
|
+
|
|
36
|
+
→ Proceed to **Step 5**.
|
|
8
37
|
|
|
9
38
|
#### If scope is "all"
|
|
10
39
|
|
|
@@ -9,6 +9,8 @@ set -eo pipefail
|
|
|
9
9
|
|
|
10
10
|
PLAN_DIR="docs/workflow/planning"
|
|
11
11
|
SPEC_DIR="docs/workflow/specification"
|
|
12
|
+
REVIEW_DIR="docs/workflow/review"
|
|
13
|
+
IMPL_DIR="docs/workflow/implementation"
|
|
12
14
|
|
|
13
15
|
# Helper: Extract a frontmatter field value from a file
|
|
14
16
|
# Usage: extract_field <file> <field_name>
|
|
@@ -113,6 +115,134 @@ fi
|
|
|
113
115
|
|
|
114
116
|
echo ""
|
|
115
117
|
|
|
118
|
+
#
|
|
119
|
+
# REVIEWS
|
|
120
|
+
#
|
|
121
|
+
echo "reviews:"
|
|
122
|
+
|
|
123
|
+
reviewed_plan_count=0
|
|
124
|
+
# Track which plan names have been reviewed (space-separated)
|
|
125
|
+
reviewed_plans=""
|
|
126
|
+
|
|
127
|
+
if [ -d "$REVIEW_DIR" ]; then
|
|
128
|
+
# Check for any review directories with r*/review.md
|
|
129
|
+
has_reviews="false"
|
|
130
|
+
for scope_dir in "$REVIEW_DIR"/*/; do
|
|
131
|
+
[ -d "$scope_dir" ] || continue
|
|
132
|
+
if ls -d "$scope_dir"r*/review.md >/dev/null 2>&1; then
|
|
133
|
+
has_reviews="true"
|
|
134
|
+
break
|
|
135
|
+
fi
|
|
136
|
+
done
|
|
137
|
+
|
|
138
|
+
echo " exists: $has_reviews"
|
|
139
|
+
|
|
140
|
+
if [ "$has_reviews" = "true" ]; then
|
|
141
|
+
echo " entries:"
|
|
142
|
+
|
|
143
|
+
for scope_dir in "$REVIEW_DIR"/*/; do
|
|
144
|
+
[ -d "$scope_dir" ] || continue
|
|
145
|
+
scope=$(basename "$scope_dir")
|
|
146
|
+
|
|
147
|
+
# Count r*/ versions
|
|
148
|
+
versions=0
|
|
149
|
+
latest_version=0
|
|
150
|
+
latest_path=""
|
|
151
|
+
for rdir in "$scope_dir"r*/; do
|
|
152
|
+
[ -d "$rdir" ] || continue
|
|
153
|
+
[ -f "${rdir}review.md" ] || continue
|
|
154
|
+
rnum=${rdir##*r}
|
|
155
|
+
rnum=${rnum%/}
|
|
156
|
+
versions=$((versions + 1))
|
|
157
|
+
if [ "$rnum" -gt "$latest_version" ] 2>/dev/null; then
|
|
158
|
+
latest_version=$rnum
|
|
159
|
+
latest_path="$rdir"
|
|
160
|
+
fi
|
|
161
|
+
done
|
|
162
|
+
|
|
163
|
+
[ "$versions" -eq 0 ] && continue
|
|
164
|
+
|
|
165
|
+
# Extract verdict from latest review.md
|
|
166
|
+
latest_verdict=""
|
|
167
|
+
if [ -f "${latest_path}review.md" ]; then
|
|
168
|
+
latest_verdict=$(grep -m1 '\*\*QA Verdict\*\*:' "${latest_path}review.md" 2>/dev/null | \
|
|
169
|
+
sed -E 's/.*\*\*QA Verdict\*\*:[[:space:]]*//' || true)
|
|
170
|
+
fi
|
|
171
|
+
|
|
172
|
+
# Determine type (single/multi) from Scope line
|
|
173
|
+
review_type="single"
|
|
174
|
+
review_plans=""
|
|
175
|
+
if [ -f "${latest_path}review.md" ]; then
|
|
176
|
+
scope_line=$(grep -m1 '\*\*Scope\*\*:' "${latest_path}review.md" 2>/dev/null || true)
|
|
177
|
+
if echo "$scope_line" | grep -qi "multi-plan\|multi plan"; then
|
|
178
|
+
review_type="multi"
|
|
179
|
+
# Extract plan names from parentheses: Multi-Plan (plan1, plan2, plan3)
|
|
180
|
+
review_plans=$(echo "$scope_line" | sed -E 's/.*\(([^)]+)\).*/\1/' | tr ',' '\n' | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$//')
|
|
181
|
+
elif echo "$scope_line" | grep -qi "full product"; then
|
|
182
|
+
review_type="multi"
|
|
183
|
+
fi
|
|
184
|
+
fi
|
|
185
|
+
|
|
186
|
+
# For single-plan reviews, plan name is the scope
|
|
187
|
+
if [ "$review_type" = "single" ]; then
|
|
188
|
+
review_plans="$scope"
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
# Check for synthesis: look for review-tasks-c*.md in implementation dirs
|
|
192
|
+
has_synthesis="false"
|
|
193
|
+
if [ "$review_type" = "single" ]; then
|
|
194
|
+
if ls "$IMPL_DIR/$scope"/review-tasks-c*.md >/dev/null 2>&1; then
|
|
195
|
+
has_synthesis="true"
|
|
196
|
+
fi
|
|
197
|
+
else
|
|
198
|
+
# For multi-plan, check each plan's implementation dir
|
|
199
|
+
for plan_name in $review_plans; do
|
|
200
|
+
plan_name=$(echo "$plan_name" | tr -d '[:space:]')
|
|
201
|
+
if ls "$IMPL_DIR/$plan_name"/review-tasks-c*.md >/dev/null 2>&1; then
|
|
202
|
+
has_synthesis="true"
|
|
203
|
+
break
|
|
204
|
+
fi
|
|
205
|
+
done
|
|
206
|
+
fi
|
|
207
|
+
|
|
208
|
+
# Track reviewed plans
|
|
209
|
+
for plan_name in $review_plans; do
|
|
210
|
+
plan_name=$(echo "$plan_name" | tr -d '[:space:]')
|
|
211
|
+
if ! echo " $reviewed_plans " | grep -q " $plan_name "; then
|
|
212
|
+
reviewed_plans="$reviewed_plans $plan_name"
|
|
213
|
+
reviewed_plan_count=$((reviewed_plan_count + 1))
|
|
214
|
+
fi
|
|
215
|
+
done
|
|
216
|
+
|
|
217
|
+
echo " - scope: \"$scope\""
|
|
218
|
+
echo " type: \"$review_type\""
|
|
219
|
+
# Format plans as YAML array
|
|
220
|
+
printf " plans: ["
|
|
221
|
+
first="true"
|
|
222
|
+
for plan_name in $review_plans; do
|
|
223
|
+
plan_name=$(echo "$plan_name" | tr -d '[:space:]')
|
|
224
|
+
[ -z "$plan_name" ] && continue
|
|
225
|
+
if [ "$first" = "true" ]; then
|
|
226
|
+
printf "\"%s\"" "$plan_name"
|
|
227
|
+
first="false"
|
|
228
|
+
else
|
|
229
|
+
printf ", \"%s\"" "$plan_name"
|
|
230
|
+
fi
|
|
231
|
+
done
|
|
232
|
+
echo "]"
|
|
233
|
+
echo " versions: $versions"
|
|
234
|
+
echo " latest_version: $latest_version"
|
|
235
|
+
echo " latest_verdict: \"$latest_verdict\""
|
|
236
|
+
echo " latest_path: \"$latest_path\""
|
|
237
|
+
echo " has_synthesis: $has_synthesis"
|
|
238
|
+
done
|
|
239
|
+
fi
|
|
240
|
+
else
|
|
241
|
+
echo " exists: false"
|
|
242
|
+
fi
|
|
243
|
+
|
|
244
|
+
echo ""
|
|
245
|
+
|
|
116
246
|
#
|
|
117
247
|
# WORKFLOW STATE SUMMARY
|
|
118
248
|
#
|
|
@@ -122,6 +252,14 @@ echo " has_plans: $([ "$plan_count" -gt 0 ] && echo "true" || echo "false")"
|
|
|
122
252
|
echo " plan_count: $plan_count"
|
|
123
253
|
echo " implemented_count: $implemented_count"
|
|
124
254
|
echo " completed_count: $completed_count"
|
|
255
|
+
echo " reviewed_plan_count: $reviewed_plan_count"
|
|
256
|
+
|
|
257
|
+
# Determine if all implemented plans have been reviewed
|
|
258
|
+
all_reviewed="false"
|
|
259
|
+
if [ "$implemented_count" -gt 0 ] && [ "$reviewed_plan_count" -ge "$implemented_count" ]; then
|
|
260
|
+
all_reviewed="true"
|
|
261
|
+
fi
|
|
262
|
+
echo " all_reviewed: $all_reviewed"
|
|
125
263
|
|
|
126
264
|
# Determine workflow state for routing
|
|
127
265
|
if [ "$plan_count" -eq 0 ]; then
|
|
@@ -20,6 +20,7 @@ Pass via the orchestrator's prompt:
|
|
|
20
20
|
4. **Plan format reading adapter path** — `../../technical-planning/references/output-formats/{format}/reading.md`
|
|
21
21
|
5. **Plan format authoring adapter path** — `../../technical-planning/references/output-formats/{format}/authoring.md`
|
|
22
22
|
6. **plan-index-schema.md** — `../../technical-planning/references/plan-index-schema.md`
|
|
23
|
+
7. **Phase label** — `Analysis (Cycle {N})`
|
|
23
24
|
|
|
24
25
|
---
|
|
25
26
|
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
# Tick: Authoring
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Descriptions: Inline Only
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**CRITICAL**: Always pass descriptions directly as inline quoted strings. Never use workarounds.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
tick create "Title" --parent <id> --description "Full description here.
|
|
9
|
+
|
|
10
|
+
Multi-line content works fine inside double quotes."
|
|
11
|
+
```
|
|
8
12
|
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
**Do NOT**:
|
|
14
|
+
- Use heredocs (`<<'EOF'`) — sandbox blocks the temp files they create
|
|
15
|
+
- Use the Write tool to create temp files — triggers approval prompts outside the project directory
|
|
16
|
+
- Use Bash functions, variables, or subshells to construct the description
|
|
17
|
+
- Write temp files anywhere (including `$TMPDIR`, `/tmp`, or the working directory)
|
|
11
18
|
|
|
12
|
-
|
|
19
|
+
If a description contains double quotes, escape them with `\"`. That's it.
|
|
13
20
|
|
|
14
21
|
## Task Storage
|
|
15
22
|
|
|
@@ -49,6 +49,12 @@ having it provides better context for the review.
|
|
|
49
49
|
|
|
50
50
|
The specification is optional — the review can proceed with just the plan.
|
|
51
51
|
|
|
52
|
+
#### If review mode is "analysis-only"
|
|
53
|
+
|
|
54
|
+
Analysis of existing review findings was requested. The review has already been completed.
|
|
55
|
+
|
|
56
|
+
→ Go directly to **Step 6**.
|
|
57
|
+
|
|
52
58
|
---
|
|
53
59
|
|
|
54
60
|
## Resuming After Context Refresh
|
|
@@ -135,33 +141,13 @@ Load **[invoke-product-assessor.md](references/invoke-product-assessor.md)** and
|
|
|
135
141
|
|
|
136
142
|
## Step 5: Produce Review
|
|
137
143
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
Write the review to `docs/workflow/review/{topic}.md` (single) or `docs/workflow/review/{scope-description}.md` (multi/all).
|
|
141
|
-
|
|
142
|
-
**QA Verdict** (from Step 3):
|
|
143
|
-
- **Approve** — All acceptance criteria met, no blocking issues
|
|
144
|
-
- **Request Changes** — Missing requirements, broken functionality, inadequate tests
|
|
145
|
-
- **Comments Only** — Minor suggestions, non-blocking observations
|
|
144
|
+
Load **[produce-review.md](references/produce-review.md)** and follow its instructions as written.
|
|
146
145
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
Commit: `review({topic}): complete review`
|
|
150
|
-
|
|
151
|
-
Present the review to the user.
|
|
152
|
-
|
|
153
|
-
Your review feedback can be:
|
|
154
|
-
- Addressed by implementation (same or new session)
|
|
155
|
-
- Delegated to an agent for fixes
|
|
156
|
-
- Overridden by user ("ship it anyway")
|
|
157
|
-
|
|
158
|
-
You produce feedback. User decides what to do with it.
|
|
146
|
+
→ Proceed to **Step 6**.
|
|
159
147
|
|
|
160
148
|
---
|
|
161
149
|
|
|
162
|
-
##
|
|
150
|
+
## Step 6: Review Actions
|
|
151
|
+
|
|
152
|
+
Load **[review-actions-loop.md](references/review-actions-loop.md)** and follow its instructions.
|
|
163
153
|
|
|
164
|
-
- **[invoke-task-verifiers.md](references/invoke-task-verifiers.md)** — How to dispatch QA verifier agents
|
|
165
|
-
- **[invoke-product-assessor.md](references/invoke-product-assessor.md)** — How to dispatch the product assessor agent
|
|
166
|
-
- **[template.md](references/template.md)** — Review output structure and verdict guidelines
|
|
167
|
-
- **[review-checklist.md](references/review-checklist.md)** — Per-task verification criteria (read by agents), plan completion checks, writing feedback guidance
|
|
@@ -40,7 +40,7 @@ The assessor receives:
|
|
|
40
40
|
|
|
41
41
|
**STOP.** Do not proceed until the assessor has returned.
|
|
42
42
|
|
|
43
|
-
The assessor writes its findings to `docs/workflow/review/{
|
|
43
|
+
The assessor writes its findings to `docs/workflow/review/{scope}/r{N}/product-assessment.md` and returns a brief status. If the agent fails (error, timeout), record the failure and continue to the review production step with QA findings only.
|
|
44
44
|
|
|
45
45
|
---
|
|
46
46
|
|
|
@@ -54,4 +54,4 @@ FINDINGS_COUNT: {N}
|
|
|
54
54
|
SUMMARY: {1 sentence}
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
-
The full findings are in the output file. Read `docs/workflow/review/{
|
|
57
|
+
The full findings are in the output file. Read `docs/workflow/review/{scope}/r{N}/product-assessment.md` to incorporate into the review document.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Invoke Review Synthesizer
|
|
2
|
+
|
|
3
|
+
*Reference for **[technical-review](../SKILL.md)***
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This step dispatches a `review-findings-synthesizer` agent to read review findings, deduplicate, group, and normalize them into proposed tasks.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Determine Cycle Number
|
|
12
|
+
|
|
13
|
+
Count existing `review-tasks-c*.md` files in `docs/workflow/implementation/{primary-topic}/` and add 1.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
ls docs/workflow/implementation/{primary-topic}/review-tasks-c*.md 2>/dev/null | wc -l
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Invoke the Agent
|
|
22
|
+
|
|
23
|
+
**Agent path**: `../../../agents/review-findings-synthesizer.md`
|
|
24
|
+
|
|
25
|
+
Dispatch **one agent** via the Task tool.
|
|
26
|
+
|
|
27
|
+
The synthesizer receives:
|
|
28
|
+
|
|
29
|
+
1. **Review scope** — single or multi, with plan list
|
|
30
|
+
2. **Review paths** — paths to `r{N}/` directories (include summary, QA directory, product assessment)
|
|
31
|
+
3. **Specification path(s)** — from each plan's frontmatter
|
|
32
|
+
4. **Cycle number** — the review remediation cycle number
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Wait for Completion
|
|
37
|
+
|
|
38
|
+
**STOP.** Do not proceed until the synthesizer has returned.
|
|
39
|
+
|
|
40
|
+
If the agent fails (error, timeout), record the failure and report "synthesis failed" to the user.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Commit Findings
|
|
45
|
+
|
|
46
|
+
Commit the report and staging file (if created):
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
review({scope}): synthesis cycle {N} — findings
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Expected Result
|
|
55
|
+
|
|
56
|
+
The synthesizer returns:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
STATUS: tasks_proposed | clean
|
|
60
|
+
TASKS_PROPOSED: {N}
|
|
61
|
+
SUMMARY: {1-2 sentences}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The full report is at `docs/workflow/implementation/{primary-topic}/review-report-c{N}.md`. If tasks were proposed, the staging file is at `docs/workflow/implementation/{primary-topic}/review-tasks-c{N}.md`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Invoke Review Task Writer
|
|
2
|
+
|
|
3
|
+
*Reference for **[technical-review](../SKILL.md)***
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This step invokes the task writer agent to create plan tasks from approved review findings. It reuses the `implementation-analysis-task-writer` agent with a review-specific phase label.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Determine Format
|
|
12
|
+
|
|
13
|
+
Read the `format` field from the plan's frontmatter (`docs/workflow/planning/{topic}/plan.md`). This determines which output format adapters to pass to the agent.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Invoke the Agent
|
|
18
|
+
|
|
19
|
+
**Agent path**: `../../../agents/implementation-analysis-task-writer.md`
|
|
20
|
+
|
|
21
|
+
Pass via the orchestrator's prompt:
|
|
22
|
+
|
|
23
|
+
1. **Topic name** — the implementation topic (scopes tasks to correct plan)
|
|
24
|
+
2. **Staging file path** — `docs/workflow/implementation/{topic}/review-tasks-c{cycle-number}.md`
|
|
25
|
+
3. **Plan path** — the implementation plan path
|
|
26
|
+
4. **Plan format reading adapter path** — `../../technical-planning/references/output-formats/{format}/reading.md`
|
|
27
|
+
5. **Plan format authoring adapter path** — `../../technical-planning/references/output-formats/{format}/authoring.md`
|
|
28
|
+
6. **plan-index-schema.md** — `../../technical-planning/references/plan-index-schema.md`
|
|
29
|
+
7. **Phase label** — `Review Remediation (Cycle {N})`
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Expected Result
|
|
34
|
+
|
|
35
|
+
The agent creates tasks in the plan for all approved entries in the staging file.
|
|
36
|
+
|
|
37
|
+
Returns a brief status:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
STATUS: complete
|
|
41
|
+
TASKS_CREATED: {N}
|
|
42
|
+
PHASE: {N}
|
|
43
|
+
SUMMARY: {1 sentence}
|
|
44
|
+
```
|
|
@@ -32,10 +32,16 @@ From each plan in scope, list every task across all phases:
|
|
|
32
32
|
|
|
33
33
|
## Create Output Directory
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
Ensure the review output directory exists:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
mkdir -p docs/workflow/review/{
|
|
38
|
+
mkdir -p docs/workflow/review/{scope}/r{N}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
For multi-plan reviews, also create per-plan subdirectories:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
mkdir -p docs/workflow/review/{scope}/r{N}/{plan-topic}
|
|
39
45
|
```
|
|
40
46
|
|
|
41
47
|
---
|
|
@@ -60,8 +66,10 @@ Each verifier receives:
|
|
|
60
66
|
3. **Plan path** — the full plan for phase context
|
|
61
67
|
4. **Project skill paths** — from Step 2 discovery
|
|
62
68
|
5. **Review checklist path** — `skills/technical-review/references/review-checklist.md`
|
|
63
|
-
6. **
|
|
64
|
-
7. **
|
|
69
|
+
6. **Review scope** — scope directory name for output path
|
|
70
|
+
7. **Review number** — version number (e.g., 1 for `r1/`)
|
|
71
|
+
8. **Plan topic** — for multi-plan reviews, the plan-specific subdirectory name
|
|
72
|
+
9. **Task index** — sequential number for file naming (1, 2, 3...)
|
|
65
73
|
|
|
66
74
|
If any verifier fails (error, timeout), record the failure and continue — aggregate what's available.
|
|
67
75
|
|
|
@@ -77,7 +85,7 @@ FINDINGS_COUNT: {N blocking issues}
|
|
|
77
85
|
SUMMARY: {1 sentence}
|
|
78
86
|
```
|
|
79
87
|
|
|
80
|
-
Full findings are written to `docs/workflow/review/{topic}/qa-task-{index}.md
|
|
88
|
+
Full findings are written to `docs/workflow/review/{scope}/r{N}/qa-task-{index}.md` (single-plan) or `docs/workflow/review/{scope}/r{N}/{plan-topic}/qa-task-{index}.md` (multi-plan).
|
|
81
89
|
|
|
82
90
|
---
|
|
83
91
|
|
|
@@ -85,7 +93,7 @@ Full findings are written to `docs/workflow/review/{topic}/qa-task-{index}.md`.
|
|
|
85
93
|
|
|
86
94
|
Once all batches have completed:
|
|
87
95
|
|
|
88
|
-
1. Read all `docs/workflow/review/{topic}/qa-task-*.md`
|
|
96
|
+
1. Read all `docs/workflow/review/{scope}/r{N}/qa-task-*.md` files (and `{scope}/r{N}/{plan-topic}/qa-task-*.md` for multi-plan)
|
|
89
97
|
2. Synthesize findings from file contents:
|
|
90
98
|
- Collect all tasks with `STATUS: Incomplete` or `STATUS: Issues Found` as blocking issues
|
|
91
99
|
- Collect all test issues (under/over-tested)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Produce Review
|
|
2
|
+
|
|
3
|
+
*Reference for **[technical-review](../SKILL.md)***
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Aggregate findings from both stages into a review document using the **[template.md](template.md)**.
|
|
8
|
+
|
|
9
|
+
Write the review to `docs/workflow/review/{scope}/r{N}/review.md`. The review scope `{scope}` is the topic name (single) or a descriptive scope name (multi/all). The review number `r{N}` is passed in from the entry point.
|
|
10
|
+
|
|
11
|
+
**QA Verdict** (from Step 3):
|
|
12
|
+
- **Approve** — All acceptance criteria met, no blocking issues
|
|
13
|
+
- **Request Changes** — Missing requirements, broken functionality, inadequate tests
|
|
14
|
+
- **Comments Only** — Minor suggestions, non-blocking observations
|
|
15
|
+
|
|
16
|
+
**Product Assessment** (from Step 4) — always advisory, presented alongside the verdict.
|
|
17
|
+
|
|
18
|
+
Commit: `review({topic}): complete review`
|
|
19
|
+
|
|
20
|
+
Present the review to the user.
|
|
21
|
+
|
|
22
|
+
Your review feedback can be:
|
|
23
|
+
- Addressed by implementation (same or new session)
|
|
24
|
+
- Delegated to an agent for fixes
|
|
25
|
+
- Overridden by user ("ship it anyway")
|
|
26
|
+
|
|
27
|
+
You produce feedback. User decides what to do with it.
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# Review Actions Loop
|
|
2
|
+
|
|
3
|
+
*Reference for **[technical-review](../SKILL.md)***
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
After a review is complete, this loop synthesizes findings into actionable tasks.
|
|
8
|
+
|
|
9
|
+
Stages A through E run sequentially. Always start at **A. Verdict Gate**.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
A. Verdict gate (check verdicts, offer synthesis)
|
|
13
|
+
B. Dispatch review synthesizer → invoke-review-synthesizer.md
|
|
14
|
+
C. Approval gate (present tasks, approve/skip/comment)
|
|
15
|
+
D. Create tasks in plan → invoke-review-task-writer.md
|
|
16
|
+
E. Re-open implementation + plan mode handoff
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## A. Verdict Gate
|
|
22
|
+
|
|
23
|
+
Check the verdict(s) from the review(s) being analyzed.
|
|
24
|
+
|
|
25
|
+
#### If all verdicts are "Approve" with no required changes
|
|
26
|
+
|
|
27
|
+
> *Output the next fenced block as a code block:*
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
No actionable findings. All reviews passed with no required changes.
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**STOP.** Do not proceed — terminal condition.
|
|
34
|
+
|
|
35
|
+
#### If any verdict is "Request Changes"
|
|
36
|
+
|
|
37
|
+
Blocking issues exist. Synthesis is strongly recommended.
|
|
38
|
+
|
|
39
|
+
> *Output the next fenced block as a code block:*
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
The review found blocking issues that require changes.
|
|
43
|
+
Synthesizing findings into actionable tasks is recommended.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
· · · · · · · · · · · ·
|
|
50
|
+
- **`y`/`yes`** — Synthesize findings into tasks *(recommended)*
|
|
51
|
+
- **`n`/`no`** — Skip synthesis
|
|
52
|
+
|
|
53
|
+
Proceed with synthesis?
|
|
54
|
+
· · · · · · · · · · · ·
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**STOP.** Wait for user response.
|
|
58
|
+
|
|
59
|
+
#### If yes
|
|
60
|
+
|
|
61
|
+
→ Proceed to **B. Dispatch Review Synthesizer**.
|
|
62
|
+
|
|
63
|
+
#### If no
|
|
64
|
+
|
|
65
|
+
**STOP.** Do not proceed — terminal condition.
|
|
66
|
+
|
|
67
|
+
#### If verdict is "Comments Only"
|
|
68
|
+
|
|
69
|
+
Non-blocking improvements only. Synthesis is optional.
|
|
70
|
+
|
|
71
|
+
> *Output the next fenced block as a code block:*
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
The review found non-blocking suggestions only.
|
|
75
|
+
You can synthesize these into tasks or skip.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
· · · · · · · · · · · ·
|
|
82
|
+
- **`y`/`yes`** — Synthesize findings into tasks
|
|
83
|
+
- **`n`/`no`** — Skip synthesis *(default)*
|
|
84
|
+
|
|
85
|
+
Synthesize non-blocking findings?
|
|
86
|
+
· · · · · · · · · · · ·
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**STOP.** Wait for user response.
|
|
90
|
+
|
|
91
|
+
#### If yes
|
|
92
|
+
|
|
93
|
+
→ Proceed to **B. Dispatch Review Synthesizer**.
|
|
94
|
+
|
|
95
|
+
#### If no
|
|
96
|
+
|
|
97
|
+
**STOP.** Do not proceed — terminal condition.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## B. Dispatch Review Synthesizer
|
|
102
|
+
|
|
103
|
+
Load **[invoke-review-synthesizer.md](invoke-review-synthesizer.md)** and follow its instructions.
|
|
104
|
+
|
|
105
|
+
**STOP.** Do not proceed until the synthesizer has returned.
|
|
106
|
+
|
|
107
|
+
#### If STATUS is "clean"
|
|
108
|
+
|
|
109
|
+
> *Output the next fenced block as a code block:*
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
No actionable tasks synthesized.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**STOP.** Do not proceed — terminal condition.
|
|
116
|
+
|
|
117
|
+
#### If STATUS is "tasks_proposed"
|
|
118
|
+
|
|
119
|
+
→ Proceed to **C. Approval Gate**.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## C. Approval Gate
|
|
124
|
+
|
|
125
|
+
Read the staging file from `docs/workflow/implementation/{primary-topic}/review-tasks-c{cycle-number}.md`.
|
|
126
|
+
|
|
127
|
+
Check `gate_mode` in the staging file frontmatter (`gated` or `auto`).
|
|
128
|
+
|
|
129
|
+
Present an overview. For multi-plan reviews, group tasks by plan:
|
|
130
|
+
|
|
131
|
+
> *Output the next fenced block as a code block:*
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
Review synthesis cycle {N}: {K} proposed tasks
|
|
135
|
+
|
|
136
|
+
{plan-topic}:
|
|
137
|
+
1. {title} ({severity})
|
|
138
|
+
2. {title} ({severity})
|
|
139
|
+
|
|
140
|
+
{plan-topic-2}:
|
|
141
|
+
3. {title} ({severity})
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Then present each task with `status: pending` individually:
|
|
145
|
+
|
|
146
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
**Task {current}/{total}: {title}** ({severity}) — Plan: {plan-topic}
|
|
150
|
+
Sources: {sources}
|
|
151
|
+
|
|
152
|
+
**Problem**: {problem}
|
|
153
|
+
**Solution**: {solution}
|
|
154
|
+
**Outcome**: {outcome}
|
|
155
|
+
|
|
156
|
+
**Do**:
|
|
157
|
+
{steps}
|
|
158
|
+
|
|
159
|
+
**Acceptance Criteria**:
|
|
160
|
+
{criteria}
|
|
161
|
+
|
|
162
|
+
**Tests**:
|
|
163
|
+
{tests}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
#### If gate_mode is "gated"
|
|
167
|
+
|
|
168
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
· · · · · · · · · · · ·
|
|
172
|
+
- **`a`/`approve`** — Approve this task
|
|
173
|
+
- **`auto`** — Approve this and all remaining tasks automatically
|
|
174
|
+
- **`s`/`skip`** — Skip this task
|
|
175
|
+
- **Comment** — Revise based on feedback
|
|
176
|
+
· · · · · · · · · · · ·
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**STOP.** Wait for user input.
|
|
180
|
+
|
|
181
|
+
#### If gate_mode is "auto"
|
|
182
|
+
|
|
183
|
+
> *Output the next fenced block as a code block:*
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
Task {current} of {total}: {title} — approved (auto).
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
→ Continue to next task without stopping.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
Process user input:
|
|
194
|
+
|
|
195
|
+
#### If `approve`
|
|
196
|
+
|
|
197
|
+
Update `status: approved` in the staging file.
|
|
198
|
+
|
|
199
|
+
→ Present the next pending task, or proceed to routing below if all tasks processed.
|
|
200
|
+
|
|
201
|
+
#### If `auto`
|
|
202
|
+
|
|
203
|
+
Update `status: approved` in the staging file. Update `gate_mode: auto` in the staging file frontmatter.
|
|
204
|
+
|
|
205
|
+
→ Continue processing remaining tasks without stopping.
|
|
206
|
+
|
|
207
|
+
#### If `skip`
|
|
208
|
+
|
|
209
|
+
Update `status: skipped` in the staging file.
|
|
210
|
+
|
|
211
|
+
→ Present the next pending task, or proceed to routing below if all tasks processed.
|
|
212
|
+
|
|
213
|
+
#### If comment
|
|
214
|
+
|
|
215
|
+
Revise the task content in the staging file based on the user's feedback. Re-present this task.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
After all tasks processed:
|
|
220
|
+
|
|
221
|
+
→ If any tasks have `status: approved`, proceed to **D. Create Tasks in Plan**.
|
|
222
|
+
|
|
223
|
+
→ If all tasks were skipped:
|
|
224
|
+
|
|
225
|
+
Commit the staging file updates:
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
review({scope}): synthesis cycle {N} — tasks skipped
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**STOP.** Do not proceed — terminal condition.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## D. Create Tasks in Plan
|
|
236
|
+
|
|
237
|
+
For each plan that has approved tasks in the staging file, invoke the task writer.
|
|
238
|
+
|
|
239
|
+
Process plans sequentially — each writes to a different plan.
|
|
240
|
+
|
|
241
|
+
For each plan:
|
|
242
|
+
|
|
243
|
+
1. Filter staging file to tasks with `plan: {plan-topic}` and `status: approved`
|
|
244
|
+
2. Load **[invoke-review-task-writer.md](invoke-review-task-writer.md)** and follow its instructions
|
|
245
|
+
3. Wait for the task writer to return before processing the next plan
|
|
246
|
+
|
|
247
|
+
**STOP.** Do not proceed until all task writers have returned.
|
|
248
|
+
|
|
249
|
+
Commit all changes (staging file, plan tasks, Plan Index Files):
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
review({scope}): add review remediation ({K} tasks across {P} plans)
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
→ Proceed to **E. Re-open Implementation + Plan Mode Handoff**.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## E. Re-open Implementation + Plan Mode Handoff
|
|
260
|
+
|
|
261
|
+
For each plan that received new tasks:
|
|
262
|
+
|
|
263
|
+
1. Read the implementation tracking file at `docs/workflow/implementation/{topic}/tracking.md`
|
|
264
|
+
2. Update frontmatter:
|
|
265
|
+
- `status: in-progress`
|
|
266
|
+
- Remove `completed` field (if present)
|
|
267
|
+
- `updated: {today's date}`
|
|
268
|
+
- `analysis_cycle: 0`
|
|
269
|
+
3. Commit tracking changes:
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
review({scope}): re-open implementation tracking
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Then enter plan mode and write the following plan:
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
# Review Actions Complete: {scope}
|
|
279
|
+
|
|
280
|
+
Review findings have been synthesized into {N} implementation tasks.
|
|
281
|
+
|
|
282
|
+
## Summary
|
|
283
|
+
|
|
284
|
+
{Per-plan summary, e.g., "tick-core: 3 tasks in Phase 9", "installation: 1 task in Phase 6"}
|
|
285
|
+
|
|
286
|
+
## Instructions
|
|
287
|
+
|
|
288
|
+
1. Invoke `/start-implementation`
|
|
289
|
+
2. The skill will detect the new tasks and start executing them
|
|
290
|
+
|
|
291
|
+
## Context
|
|
292
|
+
|
|
293
|
+
- Plans updated: {list of plan topics}
|
|
294
|
+
- Tasks created: {total count}
|
|
295
|
+
- Implementation tracking: re-opened for each plan
|
|
296
|
+
|
|
297
|
+
## How to proceed
|
|
298
|
+
|
|
299
|
+
Clear context and continue. Claude will start implementation
|
|
300
|
+
and pick up the new review remediation tasks automatically.
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Exit plan mode. The user will approve and clear context, and the fresh session will pick up with `/start-implementation` routing to the new tasks.
|