arreio 1.0.4 → 1.1.0
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 +9 -1
- package/package.json +1 -1
- package/scripts/postinstall.js +5 -1
- package/skills/arreio-init/SKILL.md +23 -31
- package/skills/learn/SKILL.md +7 -7
- package/skills/learn/modules/capture.md +6 -6
- package/skills/learn/modules/index.md +3 -3
- package/skills/learn/modules/maintain.md +3 -3
- package/skills/learn/modules/refine.md +3 -3
- package/skills/learn/references/id-generation.md +11 -11
- package/skills/learn/references/templates/artifacts/captured-entry.md +1 -1
- package/skills/learn/references/templates/artifacts/index-update.md +1 -1
- package/skills/learn/references/templates/artifacts/learn-input.md +1 -1
- package/skills/learn/references/templates/artifacts/maintain-log.md +1 -1
- package/skills/learn/references/templates/artifacts/refined-entry.md +1 -1
- package/skills/review/SKILL.md +9 -9
- package/skills/review/modules/analyze.md +3 -3
- package/skills/review/modules/prepare.md +3 -3
- package/skills/review/modules/report.md +9 -9
- package/skills/review/modules/scope.md +4 -4
- package/skills/review/references/error-handling.md +1 -1
- package/skills/review/references/id-generation.md +15 -15
- package/skills/review/references/templates/artifacts/findings.md +1 -1
- package/skills/review/references/templates/artifacts/review-input.md +1 -1
- package/skills/review/references/templates/artifacts/review-kit.md +1 -1
- package/skills/review/references/templates/artifacts/review-report.md +6 -6
- package/skills/review/references/templates/artifacts/review-scope.md +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,15 @@ Install Arreio as a dependency to enable all skills in your workspace:
|
|
|
12
12
|
npm install arreio
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
The post-install script will automatically copy all Arreio skills to your project's `.agents/skills/` directory, making them available to your AI coding agent.
|
|
15
|
+
The post-install script will automatically copy all Arreio skills to your project's `.agents/skills/` directory, making them available to your AI coding agent.
|
|
16
|
+
|
|
17
|
+
> **Note on npm 10+ install scripts:** npm 10+ blocks lifecycle scripts by default and will print a warning like `npm warn install-scripts arreio@x.y.z (postinstall: ...)`. The script is not run automatically until you allow it. Run:
|
|
18
|
+
>
|
|
19
|
+
> ```bash
|
|
20
|
+
> npm install-scripts approve arreio
|
|
21
|
+
> ```
|
|
22
|
+
>
|
|
23
|
+
> If you skip the postinstall, run `/arreio-init` in your AI coding agent — it will install the skills for you.
|
|
16
24
|
|
|
17
25
|
Then initialize your project to set up the Arreio folder structure and documentation:
|
|
18
26
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "arreio",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Arreio transforms agentic coding workflows into a predictable, safe, and high-quality software delivery pipeline. Master the four core phases—Plan, Work, Review, Learn—to orchestrate a highly reliable development cycle.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Wicttor",
|
package/scripts/postinstall.js
CHANGED
|
@@ -11,7 +11,11 @@ const path = require('path');
|
|
|
11
11
|
// Determine the source and destination paths
|
|
12
12
|
const packageDir = path.dirname(__dirname);
|
|
13
13
|
const skillsSource = path.join(packageDir, 'skills');
|
|
14
|
-
|
|
14
|
+
|
|
15
|
+
// INIT_CWD is set by npm to the project root during lifecycle scripts.
|
|
16
|
+
// Fallback to process.cwd() for direct/manual runs.
|
|
17
|
+
const projectRoot = process.env.INIT_CWD || process.cwd();
|
|
18
|
+
const agentsDir = path.join(projectRoot, '.agents');
|
|
15
19
|
const skillsDestination = path.join(agentsDir, 'skills');
|
|
16
20
|
|
|
17
21
|
// Function to recursively copy directories
|
|
@@ -54,7 +54,7 @@ Creates the organizational spine for Arreio artifacts:
|
|
|
54
54
|
|
|
55
55
|
- `docs/plans/` — Stores generated plans and design artifacts
|
|
56
56
|
- `docs/learn/` — Stores extracted learnings and insights
|
|
57
|
-
- `docs/
|
|
57
|
+
- `docs/review/` — Stores review reports and analysis
|
|
58
58
|
- `docs/tasks/` — Stores task lists and execution records
|
|
59
59
|
- `docs/archives/` — Stores historical artifacts
|
|
60
60
|
|
|
@@ -92,15 +92,7 @@ Creates the organizational spine for Arreio artifacts:
|
|
|
92
92
|
|
|
93
93
|
**Action:** If `docs/learn/index.md` doesn't exist, create it using the [Learn Index Template](references/learn-index-template.md).
|
|
94
94
|
|
|
95
|
-
### Step 7: Create
|
|
96
|
-
|
|
97
|
-
**Folder:** `docs/reports/`
|
|
98
|
-
|
|
99
|
-
**Rationale:** Stores review reports and analysis artifacts. The `review/SKILL.md` module generates reports here.
|
|
100
|
-
|
|
101
|
-
**Action:** Create the `docs/reports/` folder if it doesn't exist.
|
|
102
|
-
|
|
103
|
-
### Step 8: Create Plan Skill Hidden Artifact Directories
|
|
95
|
+
### Step 7: Create Plan Skill Hidden Artifact Directories
|
|
104
96
|
|
|
105
97
|
**Folders:**
|
|
106
98
|
|
|
@@ -112,7 +104,7 @@ Creates the organizational spine for Arreio artifacts:
|
|
|
112
104
|
|
|
113
105
|
**Action:** Create all three directories if they don't exist.
|
|
114
106
|
|
|
115
|
-
### Step
|
|
107
|
+
### Step 8: Create Work Skill Hidden Artifact Directories
|
|
116
108
|
|
|
117
109
|
**Folders:**
|
|
118
110
|
|
|
@@ -125,22 +117,22 @@ Creates the organizational spine for Arreio artifacts:
|
|
|
125
117
|
|
|
126
118
|
**Action:** Create all four directories if they don't exist.
|
|
127
119
|
|
|
128
|
-
### Step
|
|
120
|
+
### Step 9: Create Review Skill Hidden Artifact Directories and Registry
|
|
129
121
|
|
|
130
122
|
**Folders:**
|
|
131
123
|
|
|
132
|
-
- `docs/
|
|
133
|
-
- `docs/
|
|
134
|
-
- `docs/
|
|
135
|
-
- `docs/
|
|
124
|
+
- `docs/review/.scope/` — Stores Review Scope phase artifacts
|
|
125
|
+
- `docs/review/.prepare/` — Stores Review Prepare phase artifacts
|
|
126
|
+
- `docs/review/.analyze/` — Stores Review Analyze phase artifacts
|
|
127
|
+
- `docs/review/.report/` — Stores Review Report phase artifacts
|
|
136
128
|
|
|
137
129
|
**File:**
|
|
138
130
|
|
|
139
|
-
- `docs/
|
|
131
|
+
- `docs/review/index.md` — Central registry of all review reports
|
|
140
132
|
|
|
141
133
|
**Rationale:** The `review/SKILL.md` orchestrator saves phase artifacts in these hidden directories and maintains a central index of all review reports.
|
|
142
134
|
|
|
143
|
-
**Action:** Create all four directories if they don't exist. If `docs/
|
|
135
|
+
**Action:** Create all four directories if they don't exist. If `docs/review/index.md` doesn't exist, create it with a header:
|
|
144
136
|
|
|
145
137
|
```markdown
|
|
146
138
|
---
|
|
@@ -161,20 +153,20 @@ This is the index of all review reports for the project. Reports are organized b
|
|
|
161
153
|
_No review reports yet._
|
|
162
154
|
```
|
|
163
155
|
|
|
164
|
-
### Step
|
|
156
|
+
### Step 10: Create Learn Skill Hidden Artifact Directories
|
|
165
157
|
|
|
166
158
|
**Folders:**
|
|
167
159
|
|
|
168
|
-
- `docs/
|
|
169
|
-
- `docs/
|
|
170
|
-
- `docs/
|
|
171
|
-
- `docs/
|
|
160
|
+
- `docs/learn/.capture/` — Stores Capture phase artifacts
|
|
161
|
+
- `docs/learn/.refine/` — Stores Refine phase artifacts
|
|
162
|
+
- `docs/learn/.index/` — Stores Index phase artifacts
|
|
163
|
+
- `docs/learn/.maintain/` — Stores Maintain phase artifacts
|
|
172
164
|
|
|
173
165
|
**Rationale:** The `learn/SKILL.md` orchestrator saves phase artifacts in these hidden directories to preserve the knowledge entry authoring trail.
|
|
174
166
|
|
|
175
167
|
**Action:** Create all four directories if they don't exist.
|
|
176
168
|
|
|
177
|
-
### Step
|
|
169
|
+
### Step 11: Create End-Session Skill Hidden Artifact Directory
|
|
178
170
|
|
|
179
171
|
**Folder:**
|
|
180
172
|
|
|
@@ -184,7 +176,7 @@ _No review reports yet._
|
|
|
184
176
|
|
|
185
177
|
**Action:** Create the directory if it doesn't exist.
|
|
186
178
|
|
|
187
|
-
### Step
|
|
179
|
+
### Step 12: Create Learn Category Folders
|
|
188
180
|
|
|
189
181
|
**Folders:**
|
|
190
182
|
|
|
@@ -208,7 +200,7 @@ After initialization, verify:
|
|
|
208
200
|
- `.agents/skills/learn/`
|
|
209
201
|
- `.agents/skills/end-session/`
|
|
210
202
|
- `.agents/skills/arreio-init/`
|
|
211
|
-
- ✓ All five core folders exist: `docs/plans/`, `docs/learn/`, `docs/
|
|
203
|
+
- ✓ All five core folders exist: `docs/plans/`, `docs/learn/`, `docs/review/`, `docs/tasks/`, `docs/archives/`
|
|
212
204
|
- ✓ `ARCHITECTURE.md` exists at project root
|
|
213
205
|
- ✓ Root-level index files exist:
|
|
214
206
|
- `docs/plans/index.md` (registry of all plans)
|
|
@@ -218,10 +210,10 @@ After initialization, verify:
|
|
|
218
210
|
- ✓ Work skill hidden artifact directories exist:
|
|
219
211
|
- `docs/plans/.work/.triage/`, `docs/plans/.work/.prepare/`, `docs/plans/.work/.execute/`, `docs/plans/.work/.review/`
|
|
220
212
|
- ✓ Review skill hidden artifact directories exist:
|
|
221
|
-
- `docs/
|
|
222
|
-
- `docs/
|
|
213
|
+
- `docs/review/.scope/`, `docs/review/.prepare/`, `docs/review/.analyze/`, `docs/review/.report/`
|
|
214
|
+
- `docs/review/index.md` (review reports registry)
|
|
223
215
|
- ✓ Learn skill hidden artifact directories exist:
|
|
224
|
-
- `docs/
|
|
216
|
+
- `docs/learn/.capture/`, `docs/learn/.refine/`, `docs/learn/.index/`, `docs/learn/.maintain/`
|
|
225
217
|
- ✓ End-session skill hidden artifact directory exists:
|
|
226
218
|
- `docs/plans/.end-session/`
|
|
227
219
|
- ✓ Learn category folders exist:
|
|
@@ -235,8 +227,8 @@ Downstream skills (plan, learn, work, review) automatically create missing folde
|
|
|
235
227
|
|
|
236
228
|
- **plan** skill creates missing `docs/plans/` core folders, and allocates `docs/plans/.scope/`, `.research/`, `.design/` directories on first use.
|
|
237
229
|
- **work** skill creates missing `docs/plans/.work/` directories (`.triage/`, `.prepare/`, `.execute/`, `.review/`) on first execution.
|
|
238
|
-
- **review** skill creates missing `docs/
|
|
239
|
-
- **learn** skill creates missing `docs/
|
|
230
|
+
- **review** skill creates missing `docs/review/` directories and `index.md` registry on first review.
|
|
231
|
+
- **learn** skill creates missing phase-artifact directories under `docs/learn/` and the `docs/learn/` category folders on first learning capture.
|
|
240
232
|
- **end-session** skill creates missing `docs/plans/.end-session/` directory (and the `## Session Ends` section in `docs/plans/index.md`) on first session end.
|
|
241
233
|
|
|
242
234
|
**However**, running `arreio-init` upfront provides several benefits:
|
package/skills/learn/SKILL.md
CHANGED
|
@@ -49,7 +49,7 @@ Each phase runs sequentially: the orchestrator calls the phase module, receives
|
|
|
49
49
|
- Receives a context object from the user, a saved prompt, a document, or a combination.
|
|
50
50
|
- **Three input shapes:**
|
|
51
51
|
1. **Explicit** — `/learn <type> <text>`. Capture drafts an entry of the named type from the text. The canonical path for authoring a decision/pattern/gotcha/workflow.
|
|
52
|
-
2. **Candidate** — `/learn <candidate-ref>`. The ref resolves to a Work `review-id` (`docs/plans/.work/.review/<id>.md`) or a Review `report-id` (`docs/
|
|
52
|
+
2. **Candidate** — `/learn <candidate-ref>`. The ref resolves to a Work `review-id` (`docs/plans/.work/.review/<id>.md`) or a Review `report-id` (`docs/review/.report/<id>.md`); Capture reads its `learnings-to-capture` list and, for each candidate, drafts the corresponding entry. The user confirms which candidates become durable entries.
|
|
53
53
|
3. **Maintain** — `/learn maintain`. Runs only the Maintain phase (dedup / refresh / prune); bypasses Capture → Refine → Index (no new entry is authored).
|
|
54
54
|
- **If no context is provided**, ask: "What would you like to capture? Provide a type and text, a candidate ref, or `maintain`."
|
|
55
55
|
- **Unified key:** downstream phases key off a `learn-id` umbrella (`YYYY-MM-DD-NNN`), allocated by Capture. For Maintain-only runs, Maintain allocates its own `maintain-id` (no `learn-id` umbrella — there is no newly authored entry).
|
|
@@ -60,7 +60,7 @@ Each phase runs sequentially: the orchestrator calls the phase module, receives
|
|
|
60
60
|
Before starting the learn pipeline, the orchestrator verifies that required folders exist:
|
|
61
61
|
|
|
62
62
|
- `docs/learn/` — must exist for writing entries and the index; the seed `docs/learn/index.md` must exist (empty `entries:` block is valid — the legacy migration populates 28 entries)
|
|
63
|
-
- `docs/
|
|
63
|
+
- `docs/learn/.capture/`, `docs/learn/.refine/`, `docs/learn/.index/`, `docs/learn/.maintain/` — must exist for saving the phase artifacts
|
|
64
64
|
|
|
65
65
|
**Self-Healing:** If any are missing, the orchestrator automatically creates them (`mkdir -p`), and seeds `docs/learn/index.md` from the [index-format.md](references/index-format.md) template. This allows the Learn skill to run even if `arreio-init` wasn't explicitly run.
|
|
66
66
|
|
|
@@ -70,10 +70,10 @@ For **explicit** input, verify `<type>` is one of the four; if not, ask to pick
|
|
|
70
70
|
|
|
71
71
|
| Phase | Phase Module | Output Artifact | Saved to |
|
|
72
72
|
| ----- | ------------------------------------ | ---------------------------------------------------------------------------- | -------------------------------------- |
|
|
73
|
-
| 1 | [Capture](modules/capture.md) | [Captured entry](references/templates/artifacts/captured-entry.md) | `docs/
|
|
74
|
-
| 2 | [Refine](modules/refine.md) | [Refined entry](references/templates/artifacts/refined-entry.md) | `docs/
|
|
75
|
-
| 3 | [Index](modules/index.md) | [Index update](references/templates/artifacts/index-update.md) | `docs/
|
|
76
|
-
| 4 | [Maintain](modules/maintain.md) _(on demand)_ | [Maintain log](references/templates/artifacts/maintain-log.md) | `docs/
|
|
73
|
+
| 1 | [Capture](modules/capture.md) | [Captured entry](references/templates/artifacts/captured-entry.md) | `docs/learn/.capture/<id>.md` |
|
|
74
|
+
| 2 | [Refine](modules/refine.md) | [Refined entry](references/templates/artifacts/refined-entry.md) | `docs/learn/.refine/<id>.md` |
|
|
75
|
+
| 3 | [Index](modules/index.md) | [Index update](references/templates/artifacts/index-update.md) | `docs/learn/.index/<id>.md` |
|
|
76
|
+
| 4 | [Maintain](modules/maintain.md) _(on demand)_ | [Maintain log](references/templates/artifacts/maintain-log.md) | `docs/learn/.maintain/<id>.md` |
|
|
77
77
|
|
|
78
78
|
**Phase 4 is on-demand.** A normal `/learn <type> <text>` run executes Phases 1–3 and writes one entry; Maintain runs only via `/learn maintain`. The migration procedure (legacy → canonical) is a Maintain operation, run once.
|
|
79
79
|
|
|
@@ -104,7 +104,7 @@ The **Index phase** is the skill's only index writer for authored entries; the *
|
|
|
104
104
|
|
|
105
105
|
- **Entry file:** Saved to `docs/learn/<type>/<slug>.md` with the [entry-schema.md](references/entry-schema.md) frontmatter (`type`, `domain`, `tags`, `applicability`, `summary`, plus `created_at`/`updated_at`, `source`, `confidence`, and `related`).
|
|
106
106
|
- **Index:** `docs/learn/index.md` updated — a YAML `entries:` block (the `filename` / `domain` / `tags` / `applicability` / `summary` record per entry — the **read contract** that Plan/Work/Review's [learnings-gate-logic.md](../plan/references/learnings-gate-logic.md) parses) plus the human-readable By Category / By Domain tables.
|
|
107
|
-
- **Maintain Log (if `/learn maintain`):** Saved to `docs/
|
|
107
|
+
- **Maintain Log (if `/learn maintain`):** Saved to `docs/learn/.maintain/<maintain-id>.md`, recording the dedup/refresh/prune operations performed and any migration applied.
|
|
108
108
|
- **Not produced:** This skill produces **no session log, no event transcript, no "what we did."** Only durable entries and the index.
|
|
109
109
|
|
|
110
110
|
## References
|
|
@@ -30,7 +30,7 @@ If the input is empty or ambiguous, ask the user one question: "What would you l
|
|
|
30
30
|
Determine which of the two authoring shapes applies (maintain is rejected in Step 0):
|
|
31
31
|
|
|
32
32
|
1. **Explicit** — the input carries a `<type>` (one of `decision` / `pattern` / `gotcha` / `workflow`) and `<text>` (prose, a file/commit ref, or a short description to expand).
|
|
33
|
-
2. **Candidate** — the input carries a ref to a Work `review-id` (`docs/plans/.work/.review/<id>.md`) or a Review `report-id` (`docs/
|
|
33
|
+
2. **Candidate** — the input carries a ref to a Work `review-id` (`docs/plans/.work/.review/<id>.md`) or a Review `report-id` (`docs/review/.report/<id>.md`).
|
|
34
34
|
|
|
35
35
|
Record `input-shape: explicit | candidate`. If `<type>` is provided but is not one of the four, ask the user to pick from the four (Step 2 confirms intent either way).
|
|
36
36
|
|
|
@@ -48,7 +48,7 @@ Capture produces **one** Captured Entry per run (single-shape artifact). The sha
|
|
|
48
48
|
|
|
49
49
|
1. Resolve the ref to the artifact file:
|
|
50
50
|
- Work `review-id` → `docs/plans/.work/.review/<review-id>.md` → read its `learnings-to-capture` list.
|
|
51
|
-
- Review `report-id` → `docs/
|
|
51
|
+
- Review `report-id` → `docs/review/.report/<report-id>.md` → read its `learnings-to-capture` list.
|
|
52
52
|
2. If the list is empty, inform the user (no candidates to curate) and stop — do not fabricate an entry.
|
|
53
53
|
3. Present the candidate list to the user (each has a `title`, `domain`, `source` {finding-id or task-id+gate}, `summary`, `type`) and ask which to author **first** (one entry per Captured Entry). If the candidate's recorded `type` is one of the four, use it; otherwise map: `confirmed-pattern` → `pattern`, `refuted-assumption` → `gotcha`, `gotcha` → `gotcha`, `forced-decision` → `decision`. The user may override the inferred type.
|
|
54
54
|
4. Record the selected candidate as `capture.source-candidate` (carried for traceability into the entry's `source` frontmatter).
|
|
@@ -70,8 +70,8 @@ Draft the entry's frontmatter and body per the authoritative write contract **[e
|
|
|
70
70
|
### Step 4: Propose slug and Allocate the learn-id Umbrella
|
|
71
71
|
|
|
72
72
|
1. **Propose a `slug`** — a kebab-case, globally-unique stable key for the entry. Derive from the title (concise, descriptive); for time-bound decisions a date suffix is allowed (`critical-risk-tier-security-payments-2026-07-04`). The slug is the upsert key for the entry file and its index record. Refine checks uniqueness; Capture only **proposes**.
|
|
73
|
-
2. **Allocate a `learn-id`** umbrella of the form `YYYY-MM-DD-NNN` per [id-generation.md](../references/id-generation.md), counting existing `docs/
|
|
74
|
-
3. **Assign a `capture-id`** per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-capture`, saved to `docs/
|
|
73
|
+
2. **Allocate a `learn-id`** umbrella of the form `YYYY-MM-DD-NNN` per [id-generation.md](../references/id-generation.md), counting existing `docs/learn/.capture/YYYY-MM-DD-NNN-capture.md` files for today. The `learn-id` is the pipeline umbrella carried through Capture → Refine → Index (Maintain-only runs allocate their own `maintain-id` and have no `learn-id`).
|
|
74
|
+
3. **Assign a `capture-id`** per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-capture`, saved to `docs/learn/.capture/`). Reuse it if the user later picks **Edit & Retry**.
|
|
75
75
|
|
|
76
76
|
### Step 5: Generate the Captured Entry Artifact
|
|
77
77
|
|
|
@@ -95,7 +95,7 @@ Apply the **[phase confirmation behavior](../references/interaction-mode-propaga
|
|
|
95
95
|
- **Smart:** pause only when a pause trigger above is true; otherwise auto-proceed.
|
|
96
96
|
- **Autopilot:** auto-proceed (no confirmation).
|
|
97
97
|
|
|
98
|
-
Then save the artifact to `docs/
|
|
98
|
+
Then save the artifact to `docs/learn/.capture/<capture-id>.md` (ensure `interactionMode` and `target-type` are included) and return it, with the `interactionMode` value, to the Orchestrator for the transition to Phase 2 (Refine).
|
|
99
99
|
|
|
100
100
|
## Output: Captured Entry Artifact
|
|
101
101
|
|
|
@@ -103,6 +103,6 @@ Then save the artifact to `docs/plans/.learn/.capture/<capture-id>.md` (ensure `
|
|
|
103
103
|
- Verify that `target-type` is one of `decision` / `pattern` / `gotcha` / `workflow`.
|
|
104
104
|
- Verify that the frontmatter and body conform to [entry-schema.md](../references/entry-schema.md) (the per-type section template), without re-encoding the schema inline.
|
|
105
105
|
- Verify that the `learn-id` umbrella was allocated (Capture is the allocating phase) and the `slug` is kebab-case and descriptive.
|
|
106
|
-
- Verify that the artifact is saved to `docs/
|
|
106
|
+
- Verify that the artifact is saved to `docs/learn/.capture/<capture-id>.md`.
|
|
107
107
|
|
|
108
108
|
> Pass the Captured Entry to `refine` (Phase 2) for type/frontmatter validation and the duplicate + analog check against existing entries.
|
|
@@ -55,7 +55,7 @@ Update `docs/learn/index.md` per the authoritative **[index-format.md](../refere
|
|
|
55
55
|
|
|
56
56
|
### Step 4: Allocate the index-id
|
|
57
57
|
|
|
58
|
-
Assign an `index-id` per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-index`, saved to `docs/
|
|
58
|
+
Assign an `index-id` per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-index`, saved to `docs/learn/.index/`). Reuse it if the user later picks **Edit & Retry**. The `learn-id` umbrella is inherited unchanged.
|
|
59
59
|
|
|
60
60
|
### Step 5: Generate the Index Update Artifact
|
|
61
61
|
|
|
@@ -79,7 +79,7 @@ Apply the **[phase confirmation behavior](../references/interaction-mode-propaga
|
|
|
79
79
|
- **Smart:** pause only when a pause trigger above is true; otherwise auto-proceed.
|
|
80
80
|
- **Autopilot:** auto-proceed (no confirmation).
|
|
81
81
|
|
|
82
|
-
Then save the artifact to `docs/
|
|
82
|
+
Then save the artifact to `docs/learn/.index/<index-id>.md` (ensure `interactionMode` included) and return it to the Orchestrator. The Orchestrator marks the authoring run complete — the durable entry now lives at `docs/learn/<type>/<slug>.md` and `docs/learn/index.md` reflects it.
|
|
83
83
|
|
|
84
84
|
## Output: Index Update Artifact
|
|
85
85
|
|
|
@@ -89,6 +89,6 @@ Then save the artifact to `docs/plans/.learn/.index/<index-id>.md` (ensure `inte
|
|
|
89
89
|
- Verify **index coherence** (orchestrator gate #5): the YAML block length matches the on-disk entry-file count; the per-type count headings match; no duplicate index rows.
|
|
90
90
|
- Verify that a merge **de-indexed** (not deleted) the analog and recorded the `superseded-by` lineage in the analog's file — lineage preserved per [dedup-rules.md](../references/dedup-rules.md).
|
|
91
91
|
- Verify that the derived `index-applicability` enum was **read from** [index-format.md](../references/index-format.md) (the derivation rule) rather than re-encoded inline.
|
|
92
|
-
- Verify that the artifact is saved to `docs/
|
|
92
|
+
- Verify that the artifact is saved to `docs/learn/.index/<index-id>.md`.
|
|
93
93
|
|
|
94
94
|
> The Index Update is the authoring run's final artifact. The Orchestrator marks the workflow complete; the durable knowledge entry lives at `docs/learn/<type>/<slug>.md` and is discoverable via `docs/learn/index.md` (the source-of-truth index Plan/Work/Review search).
|
|
@@ -74,7 +74,7 @@ Rebuild `docs/learn/index.md` from the on-disk file tree — the file tree is th
|
|
|
74
74
|
|
|
75
75
|
### Step 6: Allocate the maintain-id
|
|
76
76
|
|
|
77
|
-
Assign a `maintain-id` per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-maintain`, saved to `docs/
|
|
77
|
+
Assign a `maintain-id` per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-maintain`, saved to `docs/learn/.maintain/`). Maintain has **no `learn-id` umbrella** (it authors no new entry). Reuse the `maintain-id` if the user picks **Edit & Retry**.
|
|
78
78
|
|
|
79
79
|
### Step 7: Generate the Maintain Log Artifact
|
|
80
80
|
|
|
@@ -101,7 +101,7 @@ Apply the **[phase confirmation behavior](../references/interaction-mode-propaga
|
|
|
101
101
|
- **Smart:** pause only when a pause trigger above is true; otherwise auto-proceed (but destructive operations — migration, prune, merge — always surface for confirmation even in Smart, per the principle that destructive writes are never silent).
|
|
102
102
|
- **Autopilot:** auto-proceed for non-destructive steps (refresh, rebuild); **still pause** for destructive operations (migration, prune) — Autopilot never silently deletes or rewrites paths.
|
|
103
103
|
|
|
104
|
-
Then save the artifact to `docs/
|
|
104
|
+
Then save the artifact to `docs/learn/.maintain/<maintain-id>.md` (ensure `interactionMode` included) and return it to the Orchestrator. The Orchestrator marks the Maintain run complete — the canonical knowledge base is reconciled.
|
|
105
105
|
|
|
106
106
|
## Output: Maintain Log Artifact
|
|
107
107
|
|
|
@@ -111,6 +111,6 @@ Then save the artifact to `docs/plans/.learn/.maintain/<maintain-id>.md` (ensure
|
|
|
111
111
|
- Verify that every prune was explicitly confirmed (no silent deletion); a delete leaves no file; a de-index keeps the file with `status: obsolete`.
|
|
112
112
|
- Verify **index coherence** (orchestrator gate #5): the rebuilt `docs/learn/index.md` YAML length matches the on-disk entry-file count; per-type totals consistent; no duplicate rows.
|
|
113
113
|
- Verify that the rebuild was **applied from** [index-format.md](../references/index-format.md) (and the applicability-enum derivation) rather than re-encoded inline.
|
|
114
|
-
- Verify that the artifact is saved to `docs/
|
|
114
|
+
- Verify that the artifact is saved to `docs/learn/.maintain/<maintain-id>.md`.
|
|
115
115
|
|
|
116
116
|
> The Maintain Log is the Maintain run's deliverable. The Orchestrator marks the workflow complete; the canonical knowledge base at `docs/learn/` is reconciled and `docs/learn/index.md` reflects the on-disk truth.
|
|
@@ -65,7 +65,7 @@ Record the matches (`dup-status: exact | analog | none`, the matched `slug`/file
|
|
|
65
65
|
|
|
66
66
|
### Step 4: Allocate the refine-id
|
|
67
67
|
|
|
68
|
-
Assign a `refine-id` per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-refine`, saved to `docs/
|
|
68
|
+
Assign a `refine-id` per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-refine`, saved to `docs/learn/.refine/`). Reuse it if the user later picks **Edit & Retry**. The `learn-id` umbrella is inherited unchanged.
|
|
69
69
|
|
|
70
70
|
### Step 5: Generate the Refined Entry Artifact
|
|
71
71
|
|
|
@@ -91,7 +91,7 @@ Apply the **[phase confirmation behavior](../references/interaction-mode-propaga
|
|
|
91
91
|
- **Smart:** pause only when a pause trigger above is true; otherwise auto-proceed.
|
|
92
92
|
- **Autopilot:** auto-proceed (no confirmation).
|
|
93
93
|
|
|
94
|
-
Then save the artifact to `docs/
|
|
94
|
+
Then save the artifact to `docs/learn/.refine/<refine-id>.md` (ensure `interactionMode` included) and return it, with the `interactionMode` value, to the Orchestrator for the transition to Phase 3 (Index).
|
|
95
95
|
|
|
96
96
|
## Output: Refined Entry Artifact
|
|
97
97
|
|
|
@@ -99,6 +99,6 @@ Then save the artifact to `docs/plans/.learn/.refine/<refine-id>.md` (ensure `in
|
|
|
99
99
|
- Verify that the frontmatter conforms to [entry-schema.md](../references/entry-schema.md) (every required field valid; the per-type body template present) without re-encoding the schema inline.
|
|
100
100
|
- Verify that the duplicate/analog check ran per [dedup-rules.md](../references/dedup-rules.md) and that any conflict was resolved with a recorded `resolution` (never silently two entries).
|
|
101
101
|
- Verify that a merge recorded `lineage` (the analog `slug` + `superseded-by` note) — lineage preserved, never deleted.
|
|
102
|
-
- Verify that the artifact is saved to `docs/
|
|
102
|
+
- Verify that the artifact is saved to `docs/learn/.refine/<refine-id>.md`.
|
|
103
103
|
|
|
104
104
|
> Pass the Refined Entry to `index` (Phase 3) to write the entry file and upsert the canonical index.
|
|
@@ -14,10 +14,10 @@ Shared ID algorithm for the `capture`, `refine`, `index`, and `maintain` phases,
|
|
|
14
14
|
|
|
15
15
|
| Phase | ID format | Saved to |
|
|
16
16
|
| -------- | ----------------------------------- | ----------------------------------- |
|
|
17
|
-
| Capture | `YYYY-MM-DD-NNN-capture` | `docs/
|
|
18
|
-
| Refine | `YYYY-MM-DD-NNN-refine` | `docs/
|
|
19
|
-
| Index | `YYYY-MM-DD-NNN-index` | `docs/
|
|
20
|
-
| Maintain | `YYYY-MM-DD-NNN-maintain` | `docs/
|
|
17
|
+
| Capture | `YYYY-MM-DD-NNN-capture` | `docs/learn/.capture/<id>.md` |
|
|
18
|
+
| Refine | `YYYY-MM-DD-NNN-refine` | `docs/learn/.refine/<id>.md` |
|
|
19
|
+
| Index | `YYYY-MM-DD-NNN-index` | `docs/learn/.index/<id>.md` |
|
|
20
|
+
| Maintain | `YYYY-MM-DD-NNN-maintain` | `docs/learn/.maintain/<id>.md` |
|
|
21
21
|
|
|
22
22
|
`learn-id` (see below) is the umbrella shared across Capture → Refine → Index. **Maintain has no `learn-id`** — it authors no new entry; it allocates only a standalone `maintain-id`.
|
|
23
23
|
|
|
@@ -27,7 +27,7 @@ Allocated **only in Capture** Step 4:
|
|
|
27
27
|
|
|
28
28
|
```
|
|
29
29
|
1. Get the current date in UTC
|
|
30
|
-
2. List existing files under docs/
|
|
30
|
+
2. List existing files under docs/learn/.capture/ matching YYYY-MM-DD-NNN-capture.md for that date
|
|
31
31
|
3. NNN = (highest existing NNN for that date), zero-padded to 3 digits
|
|
32
32
|
- if none exist for that date, start at 001
|
|
33
33
|
4. learn-id = "<date>-<NNN>" (the same NNN as the capture-id being allocated)
|
|
@@ -42,7 +42,7 @@ Allocated **only in Maintain** Step 6:
|
|
|
42
42
|
|
|
43
43
|
```
|
|
44
44
|
1. Get the current date in UTC
|
|
45
|
-
2. List existing files under docs/
|
|
45
|
+
2. List existing files under docs/learn/.maintain/ matching YYYY-MM-DD-NNN-maintain.md for that date
|
|
46
46
|
3. NNN = (count + 1), zero-padded to 3 digits
|
|
47
47
|
4. maintain-id = "<date>-<NNN>-maintain"
|
|
48
48
|
```
|
|
@@ -74,10 +74,10 @@ The `slug` is the stable, globally-unique key for a knowledge entry — it keys
|
|
|
74
74
|
```
|
|
75
75
|
1. Get the current date in UTC (e.g., 2026-08-08)
|
|
76
76
|
2. List existing files for today in the phase's save directory:
|
|
77
|
-
- capture -> docs/
|
|
78
|
-
- refine -> docs/
|
|
79
|
-
- index -> docs/
|
|
80
|
-
- maintain -> docs/
|
|
77
|
+
- capture -> docs/learn/.capture/ matching YYYY-MM-DD-*-capture.md
|
|
78
|
+
- refine -> docs/learn/.refine/ matching YYYY-MM-DD-*-refine.md
|
|
79
|
+
- index -> docs/learn/.index/ matching YYYY-MM-DD-*-index.md
|
|
80
|
+
- maintain -> docs/learn/.maintain/ matching YYYY-MM-DD-*-maintain.md
|
|
81
81
|
3. NNN = (count + 1), zero-padded to 3 digits (001, 002, ..., 010, ...)
|
|
82
82
|
4. id = "<date>-<NNN>-<phase>"
|
|
83
83
|
```
|
|
@@ -108,7 +108,7 @@ The legacy `docs/learnings/` store uses filenames, not slugs, as the key. The mi
|
|
|
108
108
|
|
|
109
109
|
## Notes
|
|
110
110
|
|
|
111
|
-
- IDs reuse the daily-counter algorithm for cross-skill consistency with `/plan`, `/work`, and `/review`; the Learn skill's counters are independent from those skills (separate save directories under `docs/
|
|
111
|
+
- IDs reuse the daily-counter algorithm for cross-skill consistency with `/plan`, `/work`, and `/review`; the Learn skill's counters are independent from those skills (separate save directories under `docs/learn/`).
|
|
112
112
|
- `learn-id` carries through Capture → Refine → Index; Maintain uses the standalone `maintain-id` only. Cross-phase chaining is `capture-id → refine-id → index-id`, all sharing one `learn-id` (see [error-handling.md](error-handling.md) "Cross-Phase Consistency Checks").
|
|
113
113
|
- The `slug` is a **separate** key from the phase ids — it identifies the durable knowledge entry across re-authors, not the pipeline run. A single `slug` may be authored by many `learn-id` runs over time (each upsert overwrites); the `slug` is stable, the `learn-id` is per-run.
|
|
114
114
|
- Counter collisions are impossible within a date because each phase writes to its own directory and recomputes the count from the directory listing.
|
|
@@ -53,7 +53,7 @@ inferred: true | false # true when drafted from a short desc
|
|
|
53
53
|
# false when grounded in a concrete ref/file the user provided
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
Also save the Captured Entry Artifact to `docs/
|
|
56
|
+
Also save the Captured Entry Artifact to `docs/learn/.capture/<capture-id>.md`.
|
|
57
57
|
|
|
58
58
|
## Validation Rules
|
|
59
59
|
|
|
@@ -50,7 +50,7 @@ entry-written: true # the entry file was written (fals
|
|
|
50
50
|
index-updated: true # docs/learn/index.md was upserted
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
Also save the Index Update Artifact to `docs/
|
|
53
|
+
Also save the Index Update Artifact to `docs/learn/.index/<index-id>.md`.
|
|
54
54
|
|
|
55
55
|
## Validation Rules
|
|
56
56
|
|
|
@@ -95,6 +95,6 @@ maintain:
|
|
|
95
95
|
|
|
96
96
|
## Notes
|
|
97
97
|
|
|
98
|
-
- The Orchestrator's Pre-Flight Check ensures `docs/learn/`, `docs/
|
|
98
|
+
- The Orchestrator's Pre-Flight Check ensures `docs/learn/`, `docs/learn/.{capture,refine,index,maintain}/` exist, and seeds `docs/learn/index.md` if missing (self-healing via `mkdir -p`), before routing the artifact.
|
|
99
99
|
- `interactionMode` flows from this artifact into every downstream artifact (Capture → Refine → Index for authoring; straight to Maintain otherwise); the orchestrator quality gate #2 cross-checks it is identical across the authoring chain (Maintain carries it standalone).
|
|
100
100
|
- The shape **determines the route**, not just the allocation: a `maintain` shape never reaches Capture, Refine, or Index. The phase ids reflect this — `maintain-id` is standalone (no `learn-id` umbrella) per [id-generation.md](../../id-generation.md).
|
|
@@ -56,7 +56,7 @@ summary: # a one-line human-readable summary
|
|
|
56
56
|
"<N> entries migrated; <M> merged; <R> normalized, <F> flagged; <P> pruned; <I> indexed"
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Also save the Maintain Log Artifact to `docs/
|
|
59
|
+
Also save the Maintain Log Artifact to `docs/learn/.maintain/<maintain-id>.md`.
|
|
60
60
|
|
|
61
61
|
## Validation Rules
|
|
62
62
|
|
|
@@ -58,7 +58,7 @@ lineage: # set ONLY when resolution == me
|
|
|
58
58
|
source-candidate: <carried from Capture> | null
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
Also save the Refined Entry Artifact to `docs/
|
|
61
|
+
Also save the Refined Entry Artifact to `docs/learn/.refine/<refine-id>.md`.
|
|
62
62
|
|
|
63
63
|
## Validation Rules
|
|
64
64
|
|
package/skills/review/SKILL.md
CHANGED
|
@@ -58,8 +58,8 @@ Each phase runs sequentially: the orchestrator calls the phase module, receives
|
|
|
58
58
|
|
|
59
59
|
Before starting the review pipeline, the orchestrator verifies that required folders exist:
|
|
60
60
|
|
|
61
|
-
- `docs/
|
|
62
|
-
- `docs/
|
|
61
|
+
- `docs/review/.scope/`, `docs/review/.prepare/`, `docs/review/.analyze/`, `docs/review/.report/` — must exist for saving the four phase artifacts
|
|
62
|
+
- `docs/review/index.md` — must exist as the review registry (Report appends to it)
|
|
63
63
|
|
|
64
64
|
**Self-Healing:** If any are missing, the orchestrator automatically creates them (`mkdir -p`, and a seed `index.md` with a registry header). This allows the Review skill to run even if `arreio-init` wasn't explicitly run.
|
|
65
65
|
|
|
@@ -73,10 +73,10 @@ For **task-in-review** input, verify the `work-id` exists and contains at least
|
|
|
73
73
|
|
|
74
74
|
| Phase | Phase Module | Output Artifact | Saved to |
|
|
75
75
|
| ----- | ----------------------------- | ---------------------------------------------------------------- | ------------------------------------- |
|
|
76
|
-
| 1 | [Scope](modules/scope.md) | [Review scope](references/templates/artifacts/review-scope.md) | `docs/
|
|
77
|
-
| 2 | [Prepare](modules/prepare.md) | [Review kit](references/templates/artifacts/review-kit.md) | `docs/
|
|
78
|
-
| 3 | [Analyze](modules/analyze.md) | [Findings](references/templates/artifacts/findings.md) | `docs/
|
|
79
|
-
| 4 | [Report](modules/report.md) | [Review report](references/templates/artifacts/review-report.md) | `docs/
|
|
76
|
+
| 1 | [Scope](modules/scope.md) | [Review scope](references/templates/artifacts/review-scope.md) | `docs/review/.scope/<id>.md` |
|
|
77
|
+
| 2 | [Prepare](modules/prepare.md) | [Review kit](references/templates/artifacts/review-kit.md) | `docs/review/.prepare/<id>.md` |
|
|
78
|
+
| 3 | [Analyze](modules/analyze.md) | [Findings](references/templates/artifacts/findings.md) | `docs/review/.analyze/<id>.md` |
|
|
79
|
+
| 4 | [Report](modules/report.md) | [Review report](references/templates/artifacts/review-report.md) | `docs/review/.report/<id>.md` |
|
|
80
80
|
|
|
81
81
|
### Quality Gates
|
|
82
82
|
|
|
@@ -99,7 +99,7 @@ Each phase is responsible for its own index updates:
|
|
|
99
99
|
| Scope | _(none — produces artifact only)_ | Allocates the `review-id`; no index write. |
|
|
100
100
|
| Prepare | _(none)_ | Gathers the review kit; no index write. |
|
|
101
101
|
| Analyze | _(none)_ | Produces findings; no index write. |
|
|
102
|
-
| Report | `docs/
|
|
102
|
+
| Report | `docs/review/index.md` | Append a registry row: `<report-id>`, review target summary, approval status, link to the report file. |
|
|
103
103
|
| Report | `docs/tasks/<work-id>/index.md` _(work-linked or task-in-review only)_ | Append a distinct `## Review Report — <report-id>` block (separate from Work's own `## Work Report` block). |
|
|
104
104
|
| Report | Task frontmatter _(task-in-review only)_ | Update task file `status:` field to `completed` (if approved) or `blocked` (if changes-requested, with reason in frontmatter). |
|
|
105
105
|
|
|
@@ -107,8 +107,8 @@ Each phase is responsible for its own index updates:
|
|
|
107
107
|
|
|
108
108
|
### FINAL OUTPUT
|
|
109
109
|
|
|
110
|
-
- **Review Report:** Saved to `docs/
|
|
111
|
-
- **Registry row:** `docs/
|
|
110
|
+
- **Review Report:** Saved to `docs/review/.report/<report-id>.md`, with: the change boundary, the approval status (`approved` / `changes-requested` / `rejected`), the graded findings rollup, recommendations, and (when requirements were available) the scope-creep summary.
|
|
111
|
+
- **Registry row:** `docs/review/index.md` updated with the new review.
|
|
112
112
|
- **(Work-linked or task-in-review only) Index cross-link:** `docs/tasks/<work-id>/index.md` gets a `## Review Report — <report-id>` block so a future glance at the work index shows that an external Review ran over it.
|
|
113
113
|
- **(Task-in-review only) Task Status Update:** ✅ **NEW**: For each task with `status: for-review`:
|
|
114
114
|
- If approval status = `approved` → update task file's frontmatter `status: completed`
|
|
@@ -69,7 +69,7 @@ Tools never **create** a finding on their own outside the change boundary; they
|
|
|
69
69
|
### Step 5: Aggregate Tallies and Generate the Findings Artifact
|
|
70
70
|
|
|
71
71
|
1. **Aggregate** findings by category and count by severity. Compute preliminary tallies (Report derives the final approval status from these — Analyze does not pre-derive approval).
|
|
72
|
-
2. **Assign an `analyze-id`** per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-analyze`, saved to `docs/
|
|
72
|
+
2. **Assign an `analyze-id`** per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-analyze`, saved to `docs/review/.analyze/`). Reuse it if the user later picks **Edit & Retry**.
|
|
73
73
|
3. Produce a **Findings** block (as markdown) following the schema in [findings.md](../references/templates/artifacts/findings.md). Include:
|
|
74
74
|
- `analyze-id`, inherited `prepare-id`, `scope-id`, `review-id`, `input-shape`, `interactionMode`
|
|
75
75
|
- the findings list: per finding — `id`, `severity`, `category`, `location` (repository-relative `file:line` or `file:hunk`), `message`, `trace` **or** `scope-creep: true`, and an optional non-binding `suggested-fix` (Review is read-only — suggestions are informational, never applied)
|
|
@@ -90,7 +90,7 @@ Apply the **[phase confirmation behavior](../references/interaction-mode-propaga
|
|
|
90
90
|
- **Smart:** pause only when a pause trigger above is true; otherwise auto-proceed.
|
|
91
91
|
- **Autopilot:** auto-proceed (no confirmation).
|
|
92
92
|
|
|
93
|
-
Then save the artifact to `docs/
|
|
93
|
+
Then save the artifact to `docs/review/.analyze/<analyze-id>.md` (ensure `interactionMode` included) and return it, with the `interactionMode` value, to the Orchestrator for the transition to Phase 4 (Report).
|
|
94
94
|
|
|
95
95
|
## Output: Findings Artifact
|
|
96
96
|
|
|
@@ -99,6 +99,6 @@ Then save the artifact to `docs/plans/.review/.analyze/<analyze-id>.md` (ensure
|
|
|
99
99
|
- Verify the **scope-creep** category either ran (with `spec-content` not `none`) or is recorded `skipped (no requirements)` — never silently absent, never inventing requirements.
|
|
100
100
|
- Verify severities were **assigned from** [severity-rubric.md](../references/severity-rubric.md) rather than re-defined inline (no second rubric contradicting the authoritative reference).
|
|
101
101
|
- Verify the category checks were **run from** [review-categories.md](../references/review-categories.md) rather than re-encoded inline.
|
|
102
|
-
- Verify that the artifact is saved to `docs/
|
|
102
|
+
- Verify that the artifact is saved to `docs/review/.analyze/<analyze-id>.md`.
|
|
103
103
|
|
|
104
104
|
> Pass the Findings to `report` (Phase 4) for the approval-status derivation, the report write, and the registry / work-index cross-link.
|
|
@@ -68,7 +68,7 @@ If **no** linter/type-checker is configured for the repo, that is a Smart pause
|
|
|
68
68
|
|
|
69
69
|
### Step 5: Generate the Review Kit Artifact
|
|
70
70
|
|
|
71
|
-
1. **Assign a `prepare-id`** per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-prepare`, saved to `docs/
|
|
71
|
+
1. **Assign a `prepare-id`** per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-prepare`, saved to `docs/review/.prepare/`). Reuse it if the user later picks **Edit & Retry**.
|
|
72
72
|
|
|
73
73
|
2. Produce a **Review Kit** block (as markdown) following the schema in [review-kit.md](../references/templates/artifacts/review-kit.md). Include:
|
|
74
74
|
- `prepare-id`, inherited `scope-id` and `review-id`, `input-shape`, `interactionMode`
|
|
@@ -90,7 +90,7 @@ Apply the **[phase confirmation behavior](../references/interaction-mode-propaga
|
|
|
90
90
|
- **Smart:** pause only when a pause trigger above is true; otherwise auto-proceed.
|
|
91
91
|
- **Autopilot:** auto-proceed (no confirmation).
|
|
92
92
|
|
|
93
|
-
Then save the artifact to `docs/
|
|
93
|
+
Then save the artifact to `docs/review/.prepare/<prepare-id>.md` (ensure `interactionMode` included) and return it, with the `interactionMode` value, to the Orchestrator for the transition to Phase 3 (Analyze).
|
|
94
94
|
|
|
95
95
|
## Output: Review Kit Artifact
|
|
96
96
|
|
|
@@ -98,6 +98,6 @@ Then save the artifact to `docs/plans/.review/.prepare/<prepare-id>.md` (ensure
|
|
|
98
98
|
- Verify that every `required` file has a diff entry (or is recorded as deleted / `current-contents`) and that `context` is separated from `required`.
|
|
99
99
|
- Verify that `test-context` records covering tests per changed file and whether the change ships its own tests.
|
|
100
100
|
- Verify that `requirements-source: none` propagated as `spec: none` (so Analyze skips the requirements-vs-scope-creep category rather than guessing).
|
|
101
|
-
- Verify that the artifact is saved to `docs/
|
|
101
|
+
- Verify that the artifact is saved to `docs/review/.prepare/<prepare-id>.md`.
|
|
102
102
|
|
|
103
103
|
> Pass the Review Kit to `analyze` (Phase 3) for the categorized, severity-graded review of the diffs.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Report
|
|
3
|
-
description: Fourth and final step in the Review workflow. Derives the final approval status (approved / changes-requested / rejected) from the Findings per the authoritative approval criteria, composes non-binding recommendations, generates the Review Report, registers it in docs/
|
|
3
|
+
description: Fourth and final step in the Review workflow. Derives the final approval status (approved / changes-requested / rejected) from the Findings per the authoritative approval criteria, composes non-binding recommendations, generates the Review Report, registers it in docs/review/index.md, and (work-linked only) appends a distinct ## Review Report — <report-id> block to the work task index. Returns the Review Report as the Review skill's final deliverable.
|
|
4
4
|
type: module
|
|
5
5
|
version: 1.0
|
|
6
6
|
timestamp: "2026-08-08"
|
|
@@ -8,7 +8,7 @@ timestamp: "2026-08-08"
|
|
|
8
8
|
|
|
9
9
|
# Phase 4 - Report
|
|
10
10
|
|
|
11
|
-
**Purpose:** Fourth and final step in the Review workflow. Reads the [Findings](../references/templates/artifacts/findings.md) from Analyze, derives the final **approval status** (`approved` / `changes-requested` / `rejected`) per the authoritative criteria, composes non-binding recommendations, writes the [Review Report](../references/templates/artifacts/review-report.md), registers it in `docs/
|
|
11
|
+
**Purpose:** Fourth and final step in the Review workflow. Reads the [Findings](../references/templates/artifacts/findings.md) from Analyze, derives the final **approval status** (`approved` / `changes-requested` / `rejected`) per the authoritative criteria, composes non-binding recommendations, writes the [Review Report](../references/templates/artifacts/review-report.md), registers it in `docs/review/index.md`, and — for work-linked input only — appends a distinct `## Review Report — <report-id>` block to `docs/tasks/<work-id>/index.md` (clearly separate from Work's own `## Work Report` block). Returns the Review Report as the Review skill's final deliverable.
|
|
12
12
|
|
|
13
13
|
## Workflow
|
|
14
14
|
|
|
@@ -44,7 +44,7 @@ Derive the status deterministically from the tallies (count of `blocker`/`major`
|
|
|
44
44
|
|
|
45
45
|
### Step 3: Generate the Review Report Artifact
|
|
46
46
|
|
|
47
|
-
1. **Assign a `report-id`** per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-report`, saved to `docs/
|
|
47
|
+
1. **Assign a `report-id`** per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-report`, saved to `docs/review/.report/`). Reuse it if the user later picks **Edit & Retry**.
|
|
48
48
|
|
|
49
49
|
2. Produce a **Review Report** block (as markdown) following the schema in [review-report.md](../references/templates/artifacts/review-report.md). Include:
|
|
50
50
|
- `report-id`, inherited `analyze-id`, `prepare-id`, `scope-id`, `review-id`, `input-shape`, `interactionMode`
|
|
@@ -57,10 +57,10 @@ Derive the status deterministically from the tallies (count of `blocker`/`major`
|
|
|
57
57
|
|
|
58
58
|
### Step 4: Register in the Review Registry
|
|
59
59
|
|
|
60
|
-
Append a registry row to `docs/
|
|
60
|
+
Append a registry row to `docs/review/index.md`:
|
|
61
61
|
|
|
62
62
|
```
|
|
63
|
-
- <report-id> — <target-summary> — <approval-status> — docs/
|
|
63
|
+
- <report-id> — <target-summary> — <approval-status> — docs/review/.report/<report-id>.md
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
Create the index with a registry header (`# Reviews`) if it does not yet exist. The row is **idempotent on `report-id`**: a re-run overwrites the row with the same id, never duplicates it.
|
|
@@ -76,7 +76,7 @@ When `input-shape: work-linked`, append a **distinct** status block to `docs/tas
|
|
|
76
76
|
- **Findings:** <blocker> blocker, <major> major, <minor> minor, <nit> nit
|
|
77
77
|
- **Scope creep:** none | <count> | skipped (no requirements)
|
|
78
78
|
- **Learnings to capture:** <count> (run `/learn` to persist)
|
|
79
|
-
- **Review Report:** docs/
|
|
79
|
+
- **Review Report:** docs/review/.report/<report-id>.md
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
The block is **append-only** and **idempotent on `report-id`** (a re-run overwrites the block with the same id, never duplicates it). If the work index does not exist, skip the cross-link and note it in the report (do not fabricate a work index).
|
|
@@ -92,7 +92,7 @@ Apply the **[phase confirmation behavior](../references/interaction-mode-propaga
|
|
|
92
92
|
- **Smart:** pause only when a pause trigger above is true; otherwise auto-proceed.
|
|
93
93
|
- **Autopilot:** auto-proceed (no confirmation).
|
|
94
94
|
|
|
95
|
-
Then save the artifact to `docs/
|
|
95
|
+
Then save the artifact to `docs/review/.report/<report-id>.md` (ensure `interactionMode` included).
|
|
96
96
|
|
|
97
97
|
### Step 7: Return to Orchestrator
|
|
98
98
|
|
|
@@ -103,7 +103,7 @@ Return the Review Report to the Orchestrator — `path`, `report-id`, `review-id
|
|
|
103
103
|
- Verify that the Review Report is complete and valid: `report-id`, `analyze-id`, `prepare-id`, `scope-id`, `review-id`, `input-shape`, `interactionMode`, `approval-status`, the findings rollup, `recommendations`, `scope-creep-summary`, and `learnings-to-capture`.
|
|
104
104
|
- Verify that **findings coherence** held (re-verified in Step 0): every finding has a severity, category, repo-relative location, and a `trace` or `scope-creep: true`.
|
|
105
105
|
- Verify that the approval status was **derived from** [approval-criteria.md](../references/approval-criteria.md) rather than re-defined inline (no second rule contradicting the authoritative reference).
|
|
106
|
-
- Verify the registry row was appended to `docs/
|
|
107
|
-
- Verify that the artifact is saved to `docs/
|
|
106
|
+
- Verify the registry row was appended to `docs/review/index.md` (idempotent on `report-id`), and — for work-linked input — the distinct `## Review Report — <report-id>` block was appended to `docs/tasks/<work-id>/index.md` (idempotent, never colliding with Work's `## Work Report` block).
|
|
107
|
+
- Verify that the artifact is saved to `docs/review/.report/<report-id>.md`.
|
|
108
108
|
|
|
109
109
|
> The Review Report is the primary deliverable of the Review Skill. The Orchestrator marks the workflow complete; optionally chains to `/learn` when learnings were surfaced.
|
|
@@ -89,9 +89,9 @@ Search `docs/learn/index.md` for entries relevant to the review domains (the cha
|
|
|
89
89
|
|
|
90
90
|
### Step 6: Allocate review-id and Generate the Review Scope Artifact
|
|
91
91
|
|
|
92
|
-
1. **Allocate a `review-id`** of the form `YYYY-MM-DD-NNN` per [id-generation.md](../references/id-generation.md), counting existing `docs/
|
|
92
|
+
1. **Allocate a `review-id`** of the form `YYYY-MM-DD-NNN` per [id-generation.md](../references/id-generation.md), counting existing `docs/review/.scope/YYYY-MM-DD-NNN-scope.md` files (or registry rows) for today. This is the pipeline umbrella id (distinct from any Work `review-id` for work-linked input — the two skills produce independent artifacts; the `work-id` is carried alongside for traceability).
|
|
93
93
|
|
|
94
|
-
2. **Assign a `scope-id`** per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-scope`, saved to `docs/
|
|
94
|
+
2. **Assign a `scope-id`** per [id-generation.md](../references/id-generation.md) (format `YYYY-MM-DD-NNN-scope`, saved to `docs/review/.scope/`). Reuse it if the user later picks **Edit & Retry**.
|
|
95
95
|
|
|
96
96
|
3. Produce a **Review Scope Artifact** block (as markdown) following the schema in [review-scope.md](../references/templates/artifacts/review-scope.md). Include:
|
|
97
97
|
- `scope-id`, `review-id`, `input-shape`, `interactionMode`
|
|
@@ -113,7 +113,7 @@ Apply the **[phase confirmation behavior](../references/interaction-mode-propaga
|
|
|
113
113
|
- **Smart:** pause only when a pause trigger above is true; otherwise auto-proceed.
|
|
114
114
|
- **Autopilot:** auto-proceed (no confirmation).
|
|
115
115
|
|
|
116
|
-
Then save the artifact to `docs/
|
|
116
|
+
Then save the artifact to `docs/review/.scope/<scope-id>.md` (ensure `interactionMode`, `input-shape`, and `review-id` are included) and return it, with the `interactionMode` value, to the Orchestrator for the transition to Phase 2 (Prepare).
|
|
117
117
|
|
|
118
118
|
## Output: Review Scope Artifact
|
|
119
119
|
|
|
@@ -121,6 +121,6 @@ Then save the artifact to `docs/plans/.review/.scope/<scope-id>.md` (ensure `int
|
|
|
121
121
|
- Verify that the change boundary is in **dependency-safe** form: `required` files are repository-relative and carry a status; `context` is separated from `required`.
|
|
122
122
|
- Verify that `review-id` was allocated (scope is the allocating phase) and that `work-id` is carried for work-linked input.
|
|
123
123
|
- Verify that scope-creep detection was run only when requirements were present (else explicitly skipped with a note), per [scope-creep-detection.md](../references/scope-creep-detection.md).
|
|
124
|
-
- Verify that the artifact is saved to `docs/
|
|
124
|
+
- Verify that the artifact is saved to `docs/review/.scope/<scope-id>.md`.
|
|
125
125
|
|
|
126
126
|
> Pass the Review Scope to `prepare` (Phase 2) to gather the diffs, spec content, test context, and tool inventory.
|
|
@@ -85,7 +85,7 @@ Errors encountered while saving or reading artifact files.
|
|
|
85
85
|
| Target directory does not exist | Create directory (`mkdir -p`); treat counter as 0; start from 001 | No |
|
|
86
86
|
| Counter directory exists but no files match date | Start counter at 001 | No |
|
|
87
87
|
| File write permission denied | Log error; ask user to check permissions; retry once | Yes, after 1 retry |
|
|
88
|
-
| `docs/
|
|
88
|
+
| `docs/review/index.md` registry missing | Create it with a `# Reviews` header (Pre-Flight already creates; idempotent) | No |
|
|
89
89
|
| `docs/tasks/<work-id>/index.md` missing (Report cross-link) | Skip the cross-link; note the absence in the report (do not fabricate a work index) | No |
|
|
90
90
|
|
|
91
91
|
### Category 5: Interaction Mode Errors
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Artifact ID Generation
|
|
3
|
-
description: Reference for Scope, Prepare, Analyze, and Report phases. Defines the daily-counter algorithm for unique artifact IDs, the review-id umbrella allocation (distinct from a Work review-id), the recycle-on-edit rule, and the shared counter layout under docs/
|
|
3
|
+
description: Reference for Scope, Prepare, Analyze, and Report phases. Defines the daily-counter algorithm for unique artifact IDs, the review-id umbrella allocation (distinct from a Work review-id), the recycle-on-edit rule, and the shared counter layout under docs/review/.
|
|
4
4
|
type: reference
|
|
5
5
|
version: 1.0
|
|
6
6
|
timestamp: "2026-08-08"
|
|
@@ -14,10 +14,10 @@ Shared ID algorithm for the `scope`, `prepare`, `analyze`, and `report` phases,
|
|
|
14
14
|
|
|
15
15
|
| Phase | ID format | Saved to |
|
|
16
16
|
| -------- | ----------------------------------- | ----------------------------------- |
|
|
17
|
-
| Scope | `YYYY-MM-DD-NNN-scope` | `docs/
|
|
18
|
-
| Prepare | `YYYY-MM-DD-NNN-prepare` | `docs/
|
|
19
|
-
| Analyze | `YYYY-MM-DD-NNN-analyze` | `docs/
|
|
20
|
-
| Report | `YYYY-MM-DD-NNN-report` | `docs/
|
|
17
|
+
| Scope | `YYYY-MM-DD-NNN-scope` | `docs/review/.scope/<id>.md` |
|
|
18
|
+
| Prepare | `YYYY-MM-DD-NNN-prepare` | `docs/review/.prepare/<id>.md` |
|
|
19
|
+
| Analyze | `YYYY-MM-DD-NNN-analyze` | `docs/review/.analyze/<id>.md` |
|
|
20
|
+
| Report | `YYYY-MM-DD-NNN-report` | `docs/review/.report/<id>.md` |
|
|
21
21
|
|
|
22
22
|
`review-id` (see below) is the umbrella shared across all four artifacts of a single review run.
|
|
23
23
|
|
|
@@ -25,19 +25,19 @@ Shared ID algorithm for the `scope`, `prepare`, `analyze`, and `report` phases,
|
|
|
25
25
|
|
|
26
26
|
The `review-id` is the umbrella key that ties all four phase artifacts together and keys the registry row / work-index block. It is allocated **once** in Scope Step 2 (the allocating phase) and carried through Prepare/Analyze/Report unchanged.
|
|
27
27
|
|
|
28
|
-
**Format:** `YYYY-MM-DD-NNN` (date + zero-padded 3-digit daily counter), counting existing `docs/
|
|
28
|
+
**Format:** `YYYY-MM-DD-NNN` (date + zero-padded 3-digit daily counter), counting existing `docs/review/.scope/YYYY-MM-DD-NNN-scope.md` files for that date (the scope phase is the allocating phase, so its counter is the source of truth for the umbrella id).
|
|
29
29
|
|
|
30
|
-
> **Distinct from a Work `review-id`.** When Review is invoked over a `/work` run (`input-shape: work-linked`), the Work skill's own `review-id` (`docs/plans/.work/.review/...`) **already exists**. The Review skill allocates its **own** `review-id` (`docs/
|
|
30
|
+
> **Distinct from a Work `review-id`.** When Review is invoked over a `/work` run (`input-shape: work-linked`), the Work skill's own `review-id` (`docs/plans/.work/.review/...`) **already exists**. The Review skill allocates its **own** `review-id` (`docs/review/...`) — the two skills produce independent artifacts and never share an id. The `work-id` is carried alongside in the Review artifacts for traceability and the work-index cross-link, but `review-id` ≠ Work `review-id`.
|
|
31
31
|
|
|
32
32
|
## Algorithm (new phase artifact)
|
|
33
33
|
|
|
34
34
|
```
|
|
35
35
|
1. Get the current date in UTC (e.g., 2026-08-08)
|
|
36
36
|
2. List existing files for today in the phase's save directory:
|
|
37
|
-
- scope -> docs/
|
|
38
|
-
- prepare -> docs/
|
|
39
|
-
- analyze -> docs/
|
|
40
|
-
- report -> docs/
|
|
37
|
+
- scope -> docs/review/.scope/ matching YYYY-MM-DD-*-scope.md
|
|
38
|
+
- prepare -> docs/review/.prepare/ matching YYYY-MM-DD-*-prepare.md
|
|
39
|
+
- analyze -> docs/review/.analyze/ matching YYYY-MM-DD-*-analyze.md
|
|
40
|
+
- report -> docs/review/.report/ matching YYYY-MM-DD-*-report.md
|
|
41
41
|
3. NNN = (count + 1), zero-padded to 3 digits (001, 002, ..., 010, ...)
|
|
42
42
|
4. id = "<date>-<NNN>-<phase>"
|
|
43
43
|
```
|
|
@@ -50,7 +50,7 @@ Allocated **only** in Scope Step 2:
|
|
|
50
50
|
|
|
51
51
|
```
|
|
52
52
|
1. Get the current date in UTC
|
|
53
|
-
2. List existing files under docs/
|
|
53
|
+
2. List existing files under docs/review/.scope/ matching YYYY-MM-DD-NNN-scope.md for that date
|
|
54
54
|
3. NNN = (highest existing NNN for that date), zero-padded to 3 digits
|
|
55
55
|
- if none exist for that date, start at 001
|
|
56
56
|
4. review-id = "<date>-<NNN>" (the same NNN as the scope-id being allocated)
|
|
@@ -61,7 +61,7 @@ Because `review-id` reuses the scope counter's NNN, the umbrella id and the `sco
|
|
|
61
61
|
|
|
62
62
|
## Recycle on Edit & Retry
|
|
63
63
|
|
|
64
|
-
When the user picks **Edit & Retry** at a phase confirmation, **reuse the original ID** and overwrite the existing artifact file. Do **not** increment the counter. This keeps IDs stable across iterations and prevents orphaned artifacts. The Report phase's registry row in `docs/
|
|
64
|
+
When the user picks **Edit & Retry** at a phase confirmation, **reuse the original ID** and overwrite the existing artifact file. Do **not** increment the counter. This keeps IDs stable across iterations and prevents orphaned artifacts. The Report phase's registry row in `docs/review/index.md` and the `## Review Report — <report-id>` block in the work index are likewise idempotent on `report-id` (overwritten, never duplicated).
|
|
65
65
|
|
|
66
66
|
## Error Handling
|
|
67
67
|
|
|
@@ -69,12 +69,12 @@ When the user picks **Edit & Retry** at a phase confirmation, **reuse the origin
|
|
|
69
69
|
| ----------------------------------------------- | -------------------------------------------- |
|
|
70
70
|
| Phase save directory does not exist | Create it; treat count as 0; start from 001 |
|
|
71
71
|
| Directory exists but no files match today's date | Start counter at 001 |
|
|
72
|
-
| `docs/
|
|
72
|
+
| `docs/review/` missing | Create it (Pre-Flight already creates; idempotent) |
|
|
73
73
|
| Write permission denied | Log error; ask the user; retry once |
|
|
74
74
|
|
|
75
75
|
## Notes
|
|
76
76
|
|
|
77
|
-
- IDs reuse the daily-counter algorithm for cross-skill consistency with `/plan` and `/work`; the Review skill's counters are independent from those skills (separate save directories under `docs/
|
|
77
|
+
- IDs reuse the daily-counter algorithm for cross-skill consistency with `/plan` and `/work`; the Review skill's counters are independent from those skills (separate save directories under `docs/review/` vs `.work/`).
|
|
78
78
|
- `review-id` carries through every artifact (`scope-id` artifacts record it; Prepare/Analyze/Report inherit it), so cross-phase chaining is `scope-id → prepare-id → analyze-id → report-id`, all sharing one `review-id` (see [error-handling.md](error-handling.md) "Cross-Phase Consistency Checks").
|
|
79
79
|
- For work-linked input, `work-id` is **additionally** carried (inherited from the Review Input Artifact), distinct from `review-id`, for the registry cross-link only.
|
|
80
80
|
- Counter collisions are impossible within a date because each phase writes to its own directory and recomputes the count from the directory listing.
|
|
@@ -53,7 +53,7 @@ scope-creep-ran: true | "skipped (no requirements)" # false only via the skipp
|
|
|
53
53
|
work-id: YYYY-MM-DD-NNN | null # work-linked only; null otherwise
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
Also save the Findings to `docs/
|
|
56
|
+
Also save the Findings to `docs/review/.analyze/<analyze-id>.md`.
|
|
57
57
|
|
|
58
58
|
## Validation Rules
|
|
59
59
|
|
|
@@ -111,6 +111,6 @@ references: null
|
|
|
111
111
|
|
|
112
112
|
## Notes
|
|
113
113
|
|
|
114
|
-
- The Orchestrator's Pre-Flight Check ensures `docs/
|
|
114
|
+
- The Orchestrator's Pre-Flight Check ensures `docs/review/.{scope,prepare,analyze,report}/` and `docs/review/index.md` exist (self-healing via `mkdir -p`) before handing the Review Input Artifact to Scope.
|
|
115
115
|
- `interactionMode` flows from this artifact into every downstream artifact (Scope → Prepare → Analyze → Report); the orchestrator quality gate #2 cross-checks it is identical across all.
|
|
116
116
|
- For work-linked input, the Work `review-id` and the Review skill's own `review-id` are **distinct** (see [id-generation.md](../../id-generation.md)); the `work-review-id` here is only an input resolver, never reused as the Review skill's umbrella id.
|
|
@@ -60,7 +60,7 @@ tool-inventory:
|
|
|
60
60
|
work-id: YYYY-MM-DD-NNN | null # work-linked only; null otherwise
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
Also save the Review Kit to `docs/
|
|
63
|
+
Also save the Review Kit to `docs/review/.prepare/<prepare-id>.md`.
|
|
64
64
|
|
|
65
65
|
## Validation Rules
|
|
66
66
|
|
|
@@ -8,7 +8,7 @@ timestamp: "2026-08-08"
|
|
|
8
8
|
|
|
9
9
|
# Review Report Artifact
|
|
10
10
|
|
|
11
|
-
The product of the **Report** phase is the Review Report — the Review skill's final deliverable. It records the **approval status** (`approved` / `changes-requested` / `rejected`) derived deterministically from the Findings tallies per [approval-criteria.md](../../approval-criteria.md), with a one-line rationale tied to the counts; the findings rollup (by severity and by category); non-binding **recommendations**; the **scope-creep summary**; **learnings-to-capture** candidates (handed to `/learn`); and the registration state. A registry row is appended to `docs/
|
|
11
|
+
The product of the **Report** phase is the Review Report — the Review skill's final deliverable. It records the **approval status** (`approved` / `changes-requested` / `rejected`) derived deterministically from the Findings tallies per [approval-criteria.md](../../approval-criteria.md), with a one-line rationale tied to the counts; the findings rollup (by severity and by category); non-binding **recommendations**; the **scope-creep summary**; **learnings-to-capture** candidates (handed to `/learn`); and the registration state. A registry row is appended to `docs/review/index.md` always; for work-linked input, a distinct `## Review Report — <report-id>` block is appended to `docs/tasks/<work-id>/index.md`.
|
|
12
12
|
|
|
13
13
|
## Schema
|
|
14
14
|
|
|
@@ -54,18 +54,18 @@ learning-gaps:
|
|
|
54
54
|
work-id: YYYY-MM-DD-NNN | null # work-linked only; null otherwise
|
|
55
55
|
|
|
56
56
|
registration:
|
|
57
|
-
registry-row-appended: true # appended to docs/
|
|
57
|
+
registry-row-appended: true # appended to docs/review/index.md (idempotent on report-id)
|
|
58
58
|
work-index-block-appended: true | skipped # work-linked only; skipped if the work index is missing
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
Also save the Review Report to `docs/
|
|
61
|
+
Also save the Review Report to `docs/review/.report/<report-id>.md`.
|
|
62
62
|
|
|
63
63
|
## Closing Blocks
|
|
64
64
|
|
|
65
|
-
### Registry row (appended to `docs/
|
|
65
|
+
### Registry row (appended to `docs/review/index.md`, always)
|
|
66
66
|
|
|
67
67
|
```
|
|
68
|
-
- <report-id> — <target-summary> — <approval-status> — docs/
|
|
68
|
+
- <report-id> — <target-summary> — <approval-status> — docs/review/.report/<report-id>.md
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
### Work-index block (appended to `docs/tasks/<work-id>/index.md`, work-linked only)
|
|
@@ -77,7 +77,7 @@ Also save the Review Report to `docs/plans/.review/.report/<report-id>.md`.
|
|
|
77
77
|
- **Findings:** <blocker> blocker, <major> major, <minor> minor, <nit> nit
|
|
78
78
|
- **Scope creep:** none | <count> | skipped (no requirements)
|
|
79
79
|
- **Learnings to capture:** <count> (run `/learn` to persist)
|
|
80
|
-
- **Review Report:** docs/
|
|
80
|
+
- **Review Report:** docs/review/.report/<report-id>.md
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
Both the registry row and the work-index block are **append-only** and **idempotent on `report-id`**: a re-run overwrites the entry with the same id, never duplicates it. The work-index block is deliberately distinct from Work's own `## Work Report — <review-id>` block (different label, different skill, different `report-id`).
|
|
@@ -56,7 +56,7 @@ learning-gaps:
|
|
|
56
56
|
work-id: YYYY-MM-DD-NNN | null # work-linked only, for the index cross-link; null otherwise
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Also save the Review Scope to `docs/
|
|
59
|
+
Also save the Review Scope to `docs/review/.scope/<scope-id>.md`.
|
|
60
60
|
|
|
61
61
|
## Validation Rules
|
|
62
62
|
|