@leeovery/claude-technical-workflows 2.1.29 → 2.1.31

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.
@@ -18,6 +18,7 @@ You receive via the orchestrator's prompt:
18
18
  3. **Plan path** — the implementation plan path
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
+ 6. **plan-index-schema.md** — Canonical plan index structure
21
22
 
22
23
  ## Your Process
23
24
 
@@ -32,26 +33,17 @@ You receive via the orchestrator's prompt:
32
33
 
33
34
  The Plan Index File (`docs/workflow/planning/{topic}/plan.md`) is the single source of truth for planning progress. After creating task files, you **must** append the new phase and task table to its body.
34
35
 
35
- Append at the end of the Plan Index File body:
36
+ Append at the end of the Plan Index File body, following the **Phase Entry** and **Task Table** templates from plan-index-schema:
36
37
 
37
- ```markdown
38
- ### Phase {N}: Analysis ({cycle description})
39
- status: approved
40
-
41
- **Goal**: Address findings from implementation analysis cycle {N}.
42
-
43
- #### Tasks
44
- | ID | Name | Edge Cases | Status | Ext ID |
45
- |----|------|------------|--------|--------|
46
- | {topic}-{phase}-1 | {Task Title} | — | authored | {ext-id} |
47
- | {topic}-{phase}-2 | {Task Title} | — | authored | {ext-id} |
48
- ```
49
-
50
- - Use `status: approved` for the phase (it's pre-approved by the user in the approval gate)
51
- - Use `authored` for each task status (the task files are fully written)
52
- - Use `—` for edge cases (analysis tasks don't have separate edge case annotations)
38
+ - Phase heading: `### Phase {N}: Analysis ({cycle description})`
39
+ - Phase `status`: `approved` (pre-approved by user in approval gate)
40
+ - Phase `ext_id`: external identifier for the phase from the output format
41
+ - Phase goal: `Address findings from implementation analysis cycle {N}.`
42
+ - Omit `approved_at` and acceptance criteria (analysis phases don't use them)
43
+ - Task `Status`: `authored` (task files are fully written)
44
+ - Task `Ext ID`: external identifier for the task from the output format
53
45
  - Task IDs must match the IDs used in the created task files
54
- - `Ext ID` must contain the external identifier for the task as exposed by the output format.
46
+ - If the Plan Index File frontmatter `ext_id` is empty, set it to the external identifier for the plan from the output format
55
47
 
56
48
  ## Hard Rules
57
49
 
@@ -18,6 +18,7 @@ You receive file paths via the orchestrator's prompt:
18
18
  3. **Cross-cutting spec paths** (if any) — Architectural decisions that influence planning
19
19
  4. **phase-design.md** — Phase design principles
20
20
  5. **task-design.md** — Task design principles (for phase granularity awareness)
21
+ 6. **plan-index-schema.md** — Canonical plan index structure
21
22
 
22
23
  On **amendment**, you also receive:
23
24
  - **Previous output** — Your prior phase structure
@@ -30,7 +31,8 @@ On **amendment**, you also receive:
30
31
  3. Read any cross-cutting specifications
31
32
  4. Read `phase-design.md` — absorb the phase design principles
32
33
  5. Read `task-design.md` — understand task granularity (needed to judge phase scope)
33
- 6. Design the phase structure
34
+ 6. Read `plan-index-schema.md` — understand the plan index structure
35
+ 7. Design the phase structure
34
36
 
35
37
  If this is an **amendment**: read your previous output and the user's feedback, then revise accordingly.
36
38
 
@@ -51,29 +53,7 @@ Phase {N}: {Phase Name}
51
53
 
52
54
  **Phase structure (for the Plan Index File):**
53
55
 
54
- ```markdown
55
- ## Phases
56
-
57
- ### Phase 1: {Phase Name}
58
- status: draft
59
-
60
- **Goal**: {What this phase accomplishes}
61
- **Why this order**: {Why this comes at this position}
62
-
63
- **Acceptance**:
64
- - [ ] {First verifiable criterion}
65
- - [ ] {Second verifiable criterion}
66
-
67
- ### Phase 2: {Phase Name}
68
- status: draft
69
-
70
- **Goal**: {What this phase accomplishes}
71
- **Why this order**: {Why this comes at this position}
72
-
73
- **Acceptance**:
74
- - [ ] {First verifiable criterion}
75
- - [ ] {Second verifiable criterion}
76
- ```
56
+ Begin with a `## Phases` heading, then follow the **Phase Entry** template from plan-index-schema for each phase. Set `status: draft`. Leave `ext_id` empty. Omit `approved_at`.
77
57
 
78
58
  Continue for all phases.
79
59
 
@@ -19,6 +19,7 @@ You receive file paths via the orchestrator's prompt:
19
19
  4. **task-design.md** — Task design principles
20
20
  5. **All approved phases** — The complete phase structure (from the Plan Index File)
21
21
  6. **Target phase number** — Which phase to break into tasks
22
+ 7. **plan-index-schema.md** — Canonical plan index structure
22
23
 
23
24
  On **amendment**, you also receive:
24
25
  - **Previous output** — Your prior task list
@@ -31,7 +32,8 @@ On **amendment**, you also receive:
31
32
  3. Read any cross-cutting specifications
32
33
  4. Read `task-design.md` — absorb the task design principles
33
34
  5. Read the approved phases — understand the full plan structure and where this phase fits
34
- 6. Design the task list for the target phase
35
+ 6. Read `plan-index-schema.md` understand the plan index structure
36
+ 7. Design the task list for the target phase
35
37
 
36
38
  If this is an **amendment**: read your previous output and the user's feedback, then revise accordingly.
37
39
 
@@ -53,15 +55,9 @@ Phase {N}: {Phase Name}
53
55
 
54
56
  **Task table format (for the Plan Index File):**
55
57
 
56
- ```markdown
57
- #### Tasks
58
- | ID | Name | Edge Cases | Status | Ext ID |
59
- |----|------|------------|--------|--------|
60
- | {topic}-{phase}-1 | {Task Name} | {list} | pending | |
61
- | {topic}-{phase}-2 | {Task Name} | {list} | pending | |
62
- ```
58
+ Follow the **Task Table** template from plan-index-schema. Use placeholder IDs `{topic}-{phase}-{seq}`. Set `Status` to `pending`. Leave `Ext ID` empty.
63
59
 
64
- Use placeholder IDs in the format `{topic}-{phase}-{seq}`. The orchestrator will use the topic name from the Plan Index File.
60
+ The orchestrator will use the topic name from the Plan Index File.
65
61
 
66
62
  ## Rules
67
63
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leeovery/claude-technical-workflows",
3
- "version": "2.1.29",
3
+ "version": "2.1.31",
4
4
  "description": "Technical workflow skills & commands for Claude Code",
5
5
  "license": "MIT",
6
6
  "author": "Lee Overy <me@leeovery.com>",
@@ -19,6 +19,7 @@ Pass via the orchestrator's prompt:
19
19
  3. **Plan path** — the implementation plan path
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
+ 6. **plan-index-schema.md** — `../../technical-planning/references/plan-index-schema.md`
22
23
 
23
24
  ---
24
25
 
@@ -62,7 +62,7 @@ Context refresh (compaction) summarizes the conversation, losing procedural deta
62
62
  2. **Read all tracking and state files** for the current topic — plan index files, review tracking files, implementation tracking files, or any working documents this skill creates. These are your source of truth for progress.
63
63
  3. **Check git state.** Run `git status` and `git log --oneline -10` to see recent commits. Commit messages follow a conventional pattern that reveals what was completed.
64
64
  4. **Announce your position** to the user before continuing: what step you believe you're at, what's been completed, and what comes next. Wait for confirmation.
65
- 5. **Check `author_gate_mode` and `finding_gate_mode`** in the Plan Index File frontmatter — if `auto`, the user previously opted in during this session. Preserve these values.
65
+ 5. **Check `task_list_gate_mode`, `author_gate_mode`, and `finding_gate_mode`** in the Plan Index File frontmatter — if `auto`, the user previously opted in during this session. Preserve these values.
66
66
 
67
67
  Do not guess at progress or continue from memory. The files on disk and git history are authoritative — your recollection is not.
68
68
 
@@ -118,7 +118,7 @@ Found existing plan for **{topic}** (previously reached phase {N}, task {M}).
118
118
 
119
119
  If the specification changed, update `spec_commit` in the Plan Index File frontmatter to the current commit hash.
120
120
 
121
- Reset `author_gate_mode` and `finding_gate_mode` to `gated` in the Plan Index File frontmatter (fresh invocation = fresh gates).
121
+ Reset `task_list_gate_mode`, `author_gate_mode`, and `finding_gate_mode` to `gated` in the Plan Index File frontmatter (fresh invocation = fresh gates).
122
122
 
123
123
  → Proceed to **Step 1**.
124
124
 
@@ -172,29 +172,7 @@ Once selected:
172
172
 
173
173
  1. Read **[output-formats.md](references/output-formats.md)**, find the chosen format entry, and load the format's **[about.md](references/output-formats/{format}/about.md)** and **[authoring.md](references/output-formats/{format}/authoring.md)**
174
174
  2. Capture the current git commit hash: `git rev-parse HEAD`
175
- 3. Create the Plan Index File at `docs/workflow/planning/{topic}/plan.md` with the following frontmatter and title:
176
-
177
- ```yaml
178
- ---
179
- topic: {topic-name}
180
- status: planning
181
- format: {chosen-format}
182
- specification: ../specification/{topic}/specification.md
183
- cross_cutting_specs: # Omit if none
184
- - ../specification/{spec}/specification.md
185
- spec_commit: {output of git rev-parse HEAD}
186
- created: YYYY-MM-DD # Use today's actual date
187
- updated: YYYY-MM-DD # Use today's actual date
188
- external_dependencies: []
189
- author_gate_mode: gated
190
- finding_gate_mode: gated
191
- planning:
192
- phase: 1
193
- task: ~
194
- ---
195
-
196
- # Plan: {Topic Name}
197
- ```
175
+ 3. Create the Plan Index File at `docs/workflow/planning/{topic}/plan.md` using the **Frontmatter** and **Title** templates from **[plan-index-schema.md](references/plan-index-schema.md)**. Set `status: planning`, `spec_commit` to the captured git hash, and today's actual date for `created` and `updated`.
198
176
 
199
177
  3. Commit: `planning({topic}): initialize plan`
200
178
 
@@ -55,7 +55,7 @@ Task {M} of {total}: {Task Name} — authored. Logging to plan.
55
55
  · · · · · · · · · · · ·
56
56
  **To proceed:**
57
57
  - **`y`/`yes`** — Approved. I'll log it to the plan.
58
- - **`a`/`auto`** — Approve this and all remaining tasks automatically
58
+ - **`a`/`auto`** — Approve this and all remaining task authoring gates automatically
59
59
  - **Or tell me what to change.**
60
60
  - **Or navigate** — a different phase or task, or the leading edge.
61
61
  · · · · · · · · · · · ·
@@ -85,11 +85,15 @@ Note that `author_gate_mode` should be updated to `auto` during the commit step
85
85
 
86
86
  > **CHECKPOINT**: If `author_gate_mode: gated`, verify before logging: (1) You presented this exact content, (2) The user explicitly approved with `y`/`yes` or equivalent — not a question, comment, or "okay" in passing, (3) You are writing exactly what was approved with no modifications.
87
87
 
88
+ See **[plan-index-schema.md](plan-index-schema.md)** for field definitions and lifecycle.
89
+
88
90
  1. Write the task to the output format (format-specific — see authoring.md)
89
- 2. Update the task table in the Plan Index File: set `status: authored` and set `Ext ID` to the external identifier for the task as exposed by the output format.
90
- 3. Advance the `planning:` block in frontmatter to the next pending task (or next phase if this was the last task)
91
- 4. If user chose `auto` at this gate: update `author_gate_mode: auto` in the Plan Index File frontmatter
92
- 5. Commit: `planning({topic}): author task {task-id} ({task name})`
91
+ 2. If the Plan Index File frontmatter `ext_id` is empty, set it to the external identifier for the plan as exposed by the output format.
92
+ 3. If the current phase's `ext_id` is empty, set it to the external identifier for the phase as exposed by the output format.
93
+ 4. Update the task table in the Plan Index File: set `status: authored` and set `Ext ID` to the external identifier for the task as exposed by the output format.
94
+ 5. Advance the `planning:` block in frontmatter to the next pending task (or next phase if this was the last task)
95
+ 6. If user chose `auto` at this gate: update `author_gate_mode: auto` in the Plan Index File frontmatter
96
+ 7. Commit: `planning({topic}): author task {task-id} ({task name})`
93
97
 
94
98
  > *Output the next fenced block as a code block:*
95
99
 
@@ -41,6 +41,7 @@ Invoke `planning-phase-designer` with these file paths:
41
41
  3. **Cross-cutting specs**: paths from the Plan Index File's `cross_cutting_specs:` field (if any)
42
42
  4. **phase-design.md**: `phase-design.md`
43
43
  5. **task-design.md**: `task-design.md`
44
+ 6. **plan-index-schema.md**: `plan-index-schema.md`
44
45
 
45
46
  The agent returns a complete phase structure. Write it directly to the Plan Index File body.
46
47
 
@@ -88,7 +89,7 @@ Update the Plan Index File with the revised output, re-present, and ask again. R
88
89
 
89
90
  **If the phase structure is new or was amended:**
90
91
 
91
- 1. Update each phase in the Plan Index File: set `status: approved` and `approved_at: YYYY-MM-DD` (use today's actual date)
92
+ 1. Update each phase in the Plan Index File: set `status: approved` and `approved_at: YYYY-MM-DD` (use today's actual date). See **Phase Entry** in plan-index-schema for field definitions.
92
93
  2. Commit: `planning({topic}): approve phase structure`
93
94
 
94
95
  **If the phase structure was already approved and unchanged:** No updates needed.
@@ -28,6 +28,7 @@ Invoke `planning-task-designer` with these file paths:
28
28
  4. **task-design.md**: `task-design.md`
29
29
  5. **All approved phases**: the complete phase structure from the Plan Index File body
30
30
  6. **Target phase number**: the phase being broken into tasks
31
+ 7. **plan-index-schema.md**: `plan-index-schema.md`
31
32
 
32
33
  ### Present the Output
33
34
 
@@ -42,7 +43,31 @@ planning:
42
43
 
43
44
  Commit: `planning({topic}): draft Phase {N} task list`
44
45
 
45
- Present the task overview to the user as rendered markdown (not in a code block). Then, separately, present the choices:
46
+ Present the task overview to the user:
47
+
48
+ > *Output the next fenced block as markdown (not a code block):*
49
+
50
+ ```
51
+ {task overview from planning-task-designer agent}
52
+ ```
53
+
54
+ Then check the gate mode.
55
+
56
+ ### Check Gate Mode
57
+
58
+ Check `task_list_gate_mode` in the Plan Index File frontmatter.
59
+
60
+ #### If `task_list_gate_mode: auto`
61
+
62
+ > *Output the next fenced block as a code block:*
63
+
64
+ ```
65
+ Phase {N}: {Phase Name} — task list approved. Proceeding to authoring.
66
+ ```
67
+
68
+ → Skip to **If approved** below.
69
+
70
+ #### If `task_list_gate_mode: gated`
46
71
 
47
72
  **STOP.** Ask:
48
73
 
@@ -52,6 +77,7 @@ Present the task overview to the user as rendered markdown (not in a code block)
52
77
  · · · · · · · · · · · ·
53
78
  **To proceed:**
54
79
  - **`y`/`yes`** — Approved.
80
+ - **`a`/`auto`** — Approve this and all remaining task list gates automatically
55
81
  - **Or tell me what to change** — reorder, split, merge, add, edit, or remove tasks.
56
82
  - **Or navigate** — a different phase or task, or the leading edge.
57
83
  · · · · · · · · · · · ·
@@ -65,12 +91,19 @@ Re-invoke `planning-task-designer` with all original inputs PLUS:
65
91
 
66
92
  Update the Plan Index File with the revised task table, re-present, and ask again. Repeat until approved.
67
93
 
68
- #### If approved
94
+ #### If `auto`
95
+
96
+ Note that `task_list_gate_mode` should be updated to `auto` during the commit step below.
97
+
98
+ → Proceed to **If approved** below.
99
+
100
+ #### If approved (`y`/`yes` or `auto`)
69
101
 
70
102
  **If the task list is new or was amended:**
71
103
 
72
104
  1. Advance the `planning:` block to the first task in this phase
73
- 2. Commit: `planning({topic}): approve Phase {N} task list`
105
+ 2. If user chose `auto` at this gate: update `task_list_gate_mode: auto` in the Plan Index File frontmatter
106
+ 3. Commit: `planning({topic}): approve Phase {N} task list`
74
107
 
75
108
  **If the task list was already approved and unchanged:** No updates needed.
76
109
 
@@ -79,6 +79,20 @@ After Step A returns with an approved task table, continue to **Author Tasks for
79
79
  {task list from the phase's task table}
80
80
  ```
81
81
 
82
+ Check `task_list_gate_mode` in the Plan Index File frontmatter.
83
+
84
+ #### If `task_list_gate_mode: auto` (existing task table)
85
+
86
+ > *Output the next fenced block as a code block:*
87
+
88
+ ```
89
+ Phase {N}: {Phase Name} — task list confirmed. Proceeding to authoring.
90
+ ```
91
+
92
+ → Continue to **Author Tasks for the Phase** below.
93
+
94
+ #### If `task_list_gate_mode: gated` (existing task table)
95
+
82
96
  > *Output the next fenced block as markdown (not a code block):*
83
97
 
84
98
  ```
@@ -0,0 +1,103 @@
1
+ # Plan Index Schema
2
+
3
+ *Reference for **[technical-planning](../SKILL.md)** and its agents*
4
+
5
+ ---
6
+
7
+ This file defines the canonical structure for Plan Index Files (`docs/workflow/planning/{topic}/plan.md`). All agents and references that create or update plan index content **must** follow these templates.
8
+
9
+ ---
10
+
11
+ ## Frontmatter
12
+
13
+ ```yaml
14
+ ---
15
+ topic: {topic-name}
16
+ status: {status}
17
+ format: {chosen-format}
18
+ ext_id:
19
+ specification: ../specification/{topic}/specification.md
20
+ cross_cutting_specs:
21
+ - ../specification/{spec}/specification.md
22
+ spec_commit: {commit-hash}
23
+ created: YYYY-MM-DD
24
+ updated: YYYY-MM-DD
25
+ external_dependencies: []
26
+ task_list_gate_mode: gated
27
+ author_gate_mode: gated
28
+ finding_gate_mode: gated
29
+ planning:
30
+ phase: 1
31
+ task: ~
32
+ ---
33
+ ```
34
+
35
+ | Field | Set when |
36
+ |-------|----------|
37
+ | `topic` | Plan creation (Step 1) |
38
+ | `status` | Plan creation → `planning`; conclusion → `concluded` |
39
+ | `format` | Plan creation — user-chosen output format |
40
+ | `ext_id` | First task authored — external identifier for the plan |
41
+ | `specification` | Plan creation — relative path to source specification |
42
+ | `cross_cutting_specs` | Plan creation — relative paths to cross-cutting specs (omit key if none) |
43
+ | `spec_commit` | Plan creation — `git rev-parse HEAD`; updated on continue if spec changed |
44
+ | `created` | Plan creation — today's date |
45
+ | `updated` | Plan creation — today's date; update on each commit |
46
+ | `external_dependencies` | Dependency resolution (Step 6) |
47
+ | `task_list_gate_mode` | Plan creation → `gated`; user opts in → `auto` |
48
+ | `author_gate_mode` | Plan creation → `gated`; user opts in → `auto` |
49
+ | `finding_gate_mode` | Plan creation → `gated`; user opts in → `auto` |
50
+ | `planning.phase` | Tracks current phase position |
51
+ | `planning.task` | Tracks current task position (`~` when between tasks) |
52
+ | `review_cycle` | Added by plan-review when review cycle begins |
53
+
54
+ ---
55
+
56
+ ## Title
57
+
58
+ ```markdown
59
+ # Plan: {Topic Name}
60
+ ```
61
+
62
+ ---
63
+
64
+ ## Phase Entry
65
+
66
+ ```markdown
67
+ ### Phase {N}: {Phase Name}
68
+ status: {status}
69
+ ext_id:
70
+ approved_at: {YYYY-MM-DD}
71
+
72
+ **Goal**: {What this phase accomplishes}
73
+
74
+ **Why this order**: {Why this comes at this position}
75
+
76
+ **Acceptance**:
77
+ - [ ] {First verifiable criterion}
78
+ - [ ] {Second verifiable criterion}
79
+ ```
80
+
81
+ | Field | Set when |
82
+ |-------|----------|
83
+ | `status` | Phase design → `draft`; approval → `approved` |
84
+ | `ext_id` | First task in phase authored — external identifier for the phase |
85
+ | `approved_at` | Phase approval — today's date. Omit while `draft`. |
86
+
87
+ ---
88
+
89
+ ## Task Table
90
+
91
+ ```markdown
92
+ #### Tasks
93
+ | ID | Name | Status | Ext ID |
94
+ |----|------|--------|--------|
95
+ | {topic}-{phase}-{seq} | {Task Name} | {status} | |
96
+ ```
97
+
98
+ | Field | Set when |
99
+ |-------|----------|
100
+ | `ID` | Task design — format: `{topic}-{phase}-{seq}` |
101
+ | `Name` | Task design — descriptive task name |
102
+ | `Status` | Task design → `pending`; authoring → `authored` |
103
+ | `Ext ID` | Task authored — external identifier for the task |