synarcx 0.2.0 → 0.3.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.
Files changed (51) hide show
  1. package/README.md +237 -43
  2. package/dist/commands/config.js +7 -6
  3. package/dist/core/command-generation/adapters/bob.js +7 -20
  4. package/dist/core/command-generation/adapters/claude.js +9 -29
  5. package/dist/core/command-generation/adapters/cursor.js +9 -22
  6. package/dist/core/command-generation/adapters/pi.js +6 -19
  7. package/dist/core/command-generation/adapters/windsurf.js +9 -29
  8. package/dist/core/command-generation/yaml-utils.d.ts +3 -0
  9. package/dist/core/command-generation/yaml-utils.js +12 -0
  10. package/dist/core/completions/installers/bash-installer.d.ts +1 -0
  11. package/dist/core/completions/installers/bash-installer.js +14 -3
  12. package/dist/core/completions/installers/powershell-installer.d.ts +1 -0
  13. package/dist/core/completions/installers/powershell-installer.js +18 -10
  14. package/dist/core/config.js +0 -3
  15. package/dist/core/index.js +1 -1
  16. package/dist/core/init.d.ts +0 -2
  17. package/dist/core/init.js +27 -77
  18. package/dist/core/migration.js +1 -2
  19. package/dist/core/profile-sync-drift.d.ts +0 -7
  20. package/dist/core/profile-sync-drift.js +2 -17
  21. package/dist/core/profiles.d.ts +0 -11
  22. package/dist/core/profiles.js +1 -20
  23. package/dist/core/shared/artifact-cleanup.d.ts +5 -0
  24. package/dist/core/shared/artifact-cleanup.js +89 -0
  25. package/dist/core/shared/skill-generation.js +3 -3
  26. package/dist/core/shared/tool-detection.d.ts +4 -10
  27. package/dist/core/shared/tool-detection.js +3 -31
  28. package/dist/core/shared/workflow-registry.d.ts +40 -0
  29. package/dist/core/shared/workflow-registry.js +19 -0
  30. package/dist/core/templates/skill-templates.d.ts +1 -0
  31. package/dist/core/templates/skill-templates.js +1 -0
  32. package/dist/core/templates/types.d.ts +7 -0
  33. package/dist/core/templates/types.js +9 -1
  34. package/dist/core/templates/workflows/analyze.js +84 -84
  35. package/dist/core/templates/workflows/apply-change.js +291 -291
  36. package/dist/core/templates/workflows/archive-change.js +254 -254
  37. package/dist/core/templates/workflows/clarify.js +115 -93
  38. package/dist/core/templates/workflows/debug.js +100 -100
  39. package/dist/core/templates/workflows/explore.js +462 -462
  40. package/dist/core/templates/workflows/propose.js +199 -199
  41. package/dist/core/templates/workflows/quick.js +112 -112
  42. package/dist/core/templates/workflows/refactor.js +109 -109
  43. package/dist/core/templates/workflows/review.d.ts +4 -0
  44. package/dist/core/templates/workflows/review.js +293 -0
  45. package/dist/core/templates/workflows/sync.js +225 -148
  46. package/dist/core/update.d.ts +1 -21
  47. package/dist/core/update.js +18 -117
  48. package/dist/core/view.js +8 -8
  49. package/dist/core/workspace/open-surface.d.ts +2 -2
  50. package/dist/core/workspace/open-surface.js +13 -13
  51. package/package.json +84 -76
@@ -1,90 +1,91 @@
1
+ import { commandFromSkill } from '../types.js';
1
2
  export function getSynRefactorSkillTemplate() {
2
3
  return {
3
4
  name: 'syn-refactor',
4
5
  description: 'Investigate structural changes that must not alter behavior. Entry point for refactoring — explores, then hands off to /syn:propose.',
5
- instructions: `Investigate a structural refactoring opportunity. Focuses on improving code structure without changing observable behavior. When thinking is clear, explicitly prompts the user to run \`/syn:propose\` — does NOT auto-create artifacts.
6
-
7
- **Input**: The user can describe what they want to restructure, or just run the command to start exploring.
8
-
9
- ---
10
-
11
- ## Initial Context
12
-
13
- Check for existing context:
14
- \`\`\`bash
15
- synarcx list --json
16
- \`\`\`
17
-
18
- If a relevant change exists, read its artifacts. Otherwise, start fresh.
19
-
20
- ---
21
-
22
- ## Reframing the Problem
23
-
24
- This is a structural-change investigation. The goal is to improve code organization, reduce duplication, increase cohesion, or decrease coupling — without changing what the system does.
25
-
26
- ### Opening Question
27
-
28
- Start by asking (use AskUserQuestion tool, open-ended):
29
- > "What part of the codebase feels like it needs restructuring?"
30
-
31
- Let the user describe the pain point before diving in.
32
-
33
- ---
34
-
35
- ## Investigation
36
-
37
- Explore the codebase to understand the current structure:
38
-
39
- 1. **Map the current shape** — read relevant source files, identify:
40
- - Module boundaries and responsibilities
41
- - Dependency direction
42
- - Code duplication or overlapping concerns
43
- - Testing patterns
44
-
45
- 2. **Identify the target shape** — work with the user to define:
46
- - What the ideal structure would look like
47
- - Which modules or files move where
48
- - How dependencies should flow
49
-
50
- 3. **Surface risks** — flag areas of concern:
51
- - Implicit dependencies that aren't visible in imports
52
- - Areas where refactoring could make things worse
53
- - Testing hazards (brittle tests, high coupling to internals)
54
-
55
- 4. **Visualize** — use ASCII diagrams to show:
56
- - Current vs. target module structure
57
- - Dependency direction changes
58
- - File/move relationships
59
-
60
- ---
61
-
62
- ## Analyze-Gate Note (for the /syn:analyze phase)
63
-
64
- When a proposal is created from this investigation, the analyze phase MUST check:
65
- - Does the proposed change alter any public API signature?
66
- - Does it change output format, error messages, or user-facing behavior?
67
- - Does it add new functionality beyond what existed?
68
-
69
- If any of these is true → flag as a **behavior contract violation** and suggest reclassifying as a feature (not a refactor).
70
-
71
- ---
72
-
73
- ## Hand-Off
74
-
75
- When the investigation reaches a clear conclusion, present findings and explicitly prompt:
76
-
77
- \`\`\`
78
- ### Refactoring Plan
79
-
80
- **Current Shape**: <summary of current structure>
81
- **Target Shape**: <proposed structure>
82
- **Key Changes**: <list of structural moves>
83
- **Risks**: <potential issues>
84
-
85
- **Ready to formalize?** Run \`/syn:propose\` to create a change with these findings.
86
- \`\`\`
87
-
6
+ instructions: `Investigate a structural refactoring opportunity. Focuses on improving code structure without changing observable behavior. When thinking is clear, explicitly prompts the user to run \`/syn:propose\` — does NOT auto-create artifacts.
7
+
8
+ **Input**: The user can describe what they want to restructure, or just run the command to start exploring.
9
+
10
+ ---
11
+
12
+ ## Initial Context
13
+
14
+ Check for existing context:
15
+ \`\`\`bash
16
+ synarcx list --json
17
+ \`\`\`
18
+
19
+ If a relevant change exists, read its artifacts. Otherwise, start fresh.
20
+
21
+ ---
22
+
23
+ ## Reframing the Problem
24
+
25
+ This is a structural-change investigation. The goal is to improve code organization, reduce duplication, increase cohesion, or decrease coupling — without changing what the system does.
26
+
27
+ ### Opening Question
28
+
29
+ Start by asking (use AskUserQuestion tool, open-ended):
30
+ > "What part of the codebase feels like it needs restructuring?"
31
+
32
+ Let the user describe the pain point before diving in.
33
+
34
+ ---
35
+
36
+ ## Investigation
37
+
38
+ Explore the codebase to understand the current structure:
39
+
40
+ 1. **Map the current shape** — read relevant source files, identify:
41
+ - Module boundaries and responsibilities
42
+ - Dependency direction
43
+ - Code duplication or overlapping concerns
44
+ - Testing patterns
45
+
46
+ 2. **Identify the target shape** — work with the user to define:
47
+ - What the ideal structure would look like
48
+ - Which modules or files move where
49
+ - How dependencies should flow
50
+
51
+ 3. **Surface risks** — flag areas of concern:
52
+ - Implicit dependencies that aren't visible in imports
53
+ - Areas where refactoring could make things worse
54
+ - Testing hazards (brittle tests, high coupling to internals)
55
+
56
+ 4. **Visualize** — use ASCII diagrams to show:
57
+ - Current vs. target module structure
58
+ - Dependency direction changes
59
+ - File/move relationships
60
+
61
+ ---
62
+
63
+ ## Analyze-Gate Note (for the /syn:analyze phase)
64
+
65
+ When a proposal is created from this investigation, the analyze phase MUST check:
66
+ - Does the proposed change alter any public API signature?
67
+ - Does it change output format, error messages, or user-facing behavior?
68
+ - Does it add new functionality beyond what existed?
69
+
70
+ If any of these is true → flag as a **behavior contract violation** and suggest reclassifying as a feature (not a refactor).
71
+
72
+ ---
73
+
74
+ ## Hand-Off
75
+
76
+ When the investigation reaches a clear conclusion, present findings and explicitly prompt:
77
+
78
+ \`\`\`
79
+ ### Refactoring Plan
80
+
81
+ **Current Shape**: <summary of current structure>
82
+ **Target Shape**: <proposed structure>
83
+ **Key Changes**: <list of structural moves>
84
+ **Risks**: <potential issues>
85
+
86
+ **Ready to formalize?** Run \`/syn:propose\` to create a change with these findings.
87
+ \`\`\`
88
+
88
89
  Do NOT create any artifacts or start the pipeline. The user must explicitly run \`/syn:propose\`.`,
89
90
  license: 'MIT',
90
91
  compatibility: 'Requires synarcx CLI.',
@@ -92,35 +93,34 @@ Do NOT create any artifacts or start the pipeline. The user must explicitly run
92
93
  };
93
94
  }
94
95
  export function getSynRefactorCommandTemplate() {
95
- return {
96
+ return commandFromSkill(getSynRefactorSkillTemplate(), {
96
97
  name: 'syn:refactor',
97
98
  description: 'Investigate structural refactoring — map current vs. target shape, then hands off to /syn:propose',
98
- category: 'Workflow',
99
99
  tags: ['workflow', 'refactor', 'restructure'],
100
- content: `Investigate a structural refactoring opportunity. Focuses on improving code structure without changing observable behavior. When thinking is clear, explicitly prompts the user to run \`/syn:propose\` — does NOT auto-create artifacts.
101
-
102
- **Input**: The argument after \`/syn:refactor\` describes what the user wants to restructure.
103
-
104
- ---
105
-
106
- ## Investigation
107
-
108
- 1. **Map the current shape** — read relevant source files, identify module boundaries, dependencies, duplication.
109
- 2. **Identify the target shape** — define what the ideal structure looks like.
110
- 3. **Surface risks** — flag implicit dependencies, testing hazards, areas that could get worse.
111
- 4. **Visualize** — use ASCII diagrams to show current vs. target structure.
112
-
113
- ---
114
-
115
- ## Analyze-Gate Note
116
-
117
- When artifacts are created, the analyze phase MUST check for behavior contract violations — no public API changes, no output format changes, no new functionality. If violated, flag and suggest reclassifying as a feature.
118
-
119
- ---
120
-
121
- ## Hand-Off
122
-
100
+ content: `Investigate a structural refactoring opportunity. Focuses on improving code structure without changing observable behavior. When thinking is clear, explicitly prompts the user to run \`/syn:propose\` — does NOT auto-create artifacts.
101
+
102
+ **Input**: The argument after \`/syn:refactor\` describes what the user wants to restructure.
103
+
104
+ ---
105
+
106
+ ## Investigation
107
+
108
+ 1. **Map the current shape** — read relevant source files, identify module boundaries, dependencies, duplication.
109
+ 2. **Identify the target shape** — define what the ideal structure looks like.
110
+ 3. **Surface risks** — flag implicit dependencies, testing hazards, areas that could get worse.
111
+ 4. **Visualize** — use ASCII diagrams to show current vs. target structure.
112
+
113
+ ---
114
+
115
+ ## Analyze-Gate Note
116
+
117
+ When artifacts are created, the analyze phase MUST check for behavior contract violations — no public API changes, no output format changes, no new functionality. If violated, flag and suggest reclassifying as a feature.
118
+
119
+ ---
120
+
121
+ ## Hand-Off
122
+
123
123
  Present a summary with Current Shape, Target Shape, Key Changes, and Risks. Then explicitly prompt: "Ready to formalize? Run \`/syn:propose\` to create a change with these findings."`
124
- };
124
+ });
125
125
  }
126
126
  //# sourceMappingURL=refactor.js.map
@@ -0,0 +1,4 @@
1
+ import type { SkillTemplate, CommandTemplate } from '../types.js';
2
+ export declare function getSynReviewSkillTemplate(): SkillTemplate;
3
+ export declare function getSynReviewCommandTemplate(): CommandTemplate;
4
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1,293 @@
1
+ import { commandFromSkill } from '../types.js';
2
+ export function getSynReviewSkillTemplate() {
3
+ return {
4
+ name: 'syn-review',
5
+ description: 'Quality gate that verifies implementation, runs sanity checks (test/lint/typecheck), and presents a three-way decision: archive, add more work, or start a new change.',
6
+ instructions: `Review a completed change — verify implementation, run sanity checks, and decide next steps.
7
+
8
+ ---
9
+
10
+ ## Steps
11
+
12
+ 1. **Select the change**
13
+
14
+ If a name is provided, use it. Otherwise:
15
+ - Infer from conversation context if the user mentioned a change
16
+ - Auto-select if only one active change exists
17
+ - If ambiguous, run \`synarcx list --json\` to get available changes and use the **AskUserQuestion tool** to let the user select
18
+
19
+ Always announce: "Reviewing change: <name>" and how to override (e.g., \`/syn:review <other>\`).
20
+
21
+ 2. **Check status**
22
+
23
+ \`\`\`bash
24
+ synarcx status --change "<name>" --json
25
+ \`\`\`
26
+
27
+ Parse the JSON to get \`schemaName\` and \`artifacts\` status.
28
+
29
+ **Verify artifact completion**: If all apply-required artifacts are not done, stop and tell the user to use \`/syn:propose\` or \`/syn:apply\` first.
30
+
31
+ 3. **Gate on task completion**
32
+
33
+ Read \`tasks.md\` and count checkboxes. If any tasks remain unchecked:
34
+ - Show progress: "N/M tasks complete"
35
+ - Do NOT run any checks
36
+ - Suggest: "/syn:apply to finish the remaining tasks, then run /syn:review again"
37
+ - Stop here
38
+
39
+ 4. **Collect change state**
40
+
41
+ - \`git diff --stat\` to get files changed, additions, deletions
42
+ - Read \`tasks.md\` for complete/incomplete counts
43
+
44
+ 5. **Discover and run sanity checks**
45
+
46
+ Probe the project for check commands. Discovery order:
47
+ 1. Check \`package.json\` scripts for \`test\`, \`lint\`, \`typecheck\`
48
+ 2. If \`Cargo.toml\` exists, check for \`cargo test\`
49
+ 3. If no check commands found, skip with a note
50
+
51
+ For each discovered command, run it and capture:
52
+ - **Pass**: note the pass count
53
+ - **Fail**: capture error details, route to \`/syn:apply\`
54
+ - **Crash/error**: note "command crashed" with error message, do NOT block the fork
55
+
56
+ **Important**: For any failed check, capture only summary counts (pass/fail), not full logs — unless user asks for details.
57
+
58
+ 6. **Build the output**
59
+
60
+ **Structured summary first** (scanable at a glance):
61
+
62
+ \`\`\`
63
+ Tasks: N/M ✓
64
+ Files: N changed (+A -D)
65
+ Tests: N/N passed ✓ (or "N failed" or "ERR — command crashed" or "skipped")
66
+ Lint: 0 errors ✓ (or "N errors" or "ERR — command crashed" or "skipped")
67
+ Typecheck: clean ✓ (or "N errors" or "ERR — command crashed" or "skipped")
68
+ \`\`\`
69
+
70
+ **Then a narrative paragraph** (context):
71
+
72
+ "Change <name> completed N of N tasks across N files (+A -D). All N tests pass, lint is clean, type checking passes. No issues detected."
73
+
74
+ Or for failures: "Change <name> completed N of N tasks. N tests failed, lint found N errors. Review the findings below."
75
+
76
+ 7. **Present the fork**
77
+
78
+ **If ALL checks pass** (clean):
79
+
80
+ Present three options:
81
+
82
+ | Option | Label | What happens | Next |
83
+ |---|---|---|---|
84
+ | A | Archive now | AI moves change to archive/ | Done |
85
+ | B | Add more work | AI appends new tasks, suggests refinement loop | /syn:clarify → /syn:analyze → /syn:apply |
86
+ | C | Start a new change | AI suggests creating a fresh change | /syn:propose |
87
+
88
+ **For option B (add more work)**: Ask the user what else is needed. If the new work fits within the existing change's scope (same capabilities, same specs, related code), append unchecked tasks to \`tasks.md\` and say: "Run /syn:clarify to refine the new requirements, then /syn:analyze, then /syn:apply." If the new work involves different capabilities, different specs, or unrelated code, tell the user: "This is outside this change's scope. Start a new change with /syn:propose instead."
89
+
90
+ **If any checks failed** (dirty):
91
+
92
+ Show each finding with context and route to the correct command:
93
+
94
+ | Finding | Route |
95
+ |---|---|
96
+ | Test failures | /syn:apply — fix implementation |
97
+ | Lint errors | /syn:apply — fix implementation |
98
+ | Artifact inconsistency | /syn:analyze — reconcile |
99
+ | Unclear requirement | /syn:clarify — refine |
100
+ | Incomplete artifacts | /syn:analyze — complete artifacts |
101
+
102
+ List ALL findings in a single output. Let the user decide which to address first.
103
+
104
+ **Note**: /syn:quick bypasses review entirely. Quick is the low-risk fast path.
105
+
106
+ 8. **Archive inline** (when user picks option A)
107
+
108
+ - Create \`synspec/changes/archive/\` if it doesn't exist
109
+ - Target name: \`YYYY-MM-DD-<change-name>\`
110
+ - If target already exists: fail with error, suggest renaming existing archive or using a different approach
111
+ - Move: \`mv synspec/changes/<name> synspec/changes/archive/YYYY-MM-DD-<name>\`
112
+ - Confirm: "Archived <change-name> to synspec/changes/archive/YYYY-MM-DD-<name>/"
113
+
114
+ ---
115
+
116
+ ## Output (Clean)
117
+
118
+ \`\`\`
119
+ Tasks: 7/7 ✓
120
+ Files: 5 changed (+124 -12)
121
+ Tests: 42/42 passed ✓
122
+ Lint: 0 errors ✓
123
+ Typecheck: clean ✓
124
+
125
+ Change add-user-auth completed 7 of 7 tasks across 5 files (+124 -12). All 42 tests pass, lint is clean, type checking passes. No issues detected.
126
+
127
+ This change is clean. What would you like to do?
128
+ [A] Archive now [B] Add more work [C] Start a new change
129
+ \`\`\`
130
+
131
+ ## Output (Dirty)
132
+
133
+ \`\`\`
134
+ Tasks: 7/7 ✓
135
+ Files: 5 changed (+124 -12)
136
+ Tests: 38/42 passed ⚠ 4 failing
137
+ Lint: 3 errors ⚠
138
+ Typecheck: clean ✓
139
+
140
+ Change add-user-auth completed 7 of 7 tasks. 4 tests failing in auth.test.ts, lint found 3 style issues. Type checking passes.
141
+
142
+ Findings:
143
+ ╳ 4 tests failing in auth.test.ts
144
+ → Try /syn:apply to fix the implementation
145
+
146
+ ╳ 3 lint errors in src/auth.ts
147
+ → Try /syn:apply to fix the implementation
148
+ \`\`\`
149
+
150
+ ## Output (Tasks Incomplete — Gate)
151
+
152
+ \`\`\`
153
+ Tasks: 4/7 tasks complete
154
+
155
+ This change still has 3 tasks remaining.
156
+ → Use /syn:apply to finish the remaining tasks, then run /syn:review again.
157
+ \`\`\`
158
+
159
+ ## Output (Archived)
160
+
161
+ \`\`\`
162
+ ## Archive Complete
163
+
164
+ **Change:** <change-name>
165
+ **Archived to:** synspec/changes/archive/YYYY-MM-DD-<name>/
166
+
167
+ All tasks complete. All checks passed. Change archived.
168
+ \`\`\`
169
+
170
+ ## Guardrails
171
+ - Do NOT run checks if tasks are incomplete — gate at step 3
172
+ - Checks are read-only — do not modify project files during checks
173
+ - Archive move is the only write operation (step 8)
174
+ - Always list ALL findings at once, don't ask "fix one at a time"
175
+ - For failed checks, show only summary counts unless user asks for details
176
+ - If user picks "add more work," evaluate scope before appending tasks
177
+ - Quick bypasses review — do not suggest review to users who used /syn:quick`,
178
+ license: 'MIT',
179
+ compatibility: 'Requires synarcx CLI.',
180
+ metadata: { author: 'synarcx', version: '1.0' },
181
+ };
182
+ }
183
+ export function getSynReviewCommandTemplate() {
184
+ return commandFromSkill(getSynReviewSkillTemplate(), {
185
+ name: 'syn:review',
186
+ description: 'Review a completed change — verify implementation, run sanity checks, and decide next steps',
187
+ tags: ['workflow', 'review'],
188
+ content: `Review a completed change — verify implementation, run sanity checks, and decide next steps.
189
+
190
+ ---
191
+
192
+ ## Steps
193
+
194
+ 1. **Select the change**
195
+
196
+ If a name is provided (e.g., \`/syn:review add-auth\`), use it. Otherwise:
197
+ - Infer from conversation context
198
+ - Auto-select if only one active change exists
199
+ - If ambiguous, run \`synarcx list --json\` and prompt
200
+
201
+ 2. **Check status**
202
+
203
+ \`\`\`bash
204
+ synarcx status --change "<name>" --json
205
+ \`\`\`
206
+
207
+ Verify all apply-required artifacts are done. If not, stop.
208
+
209
+ 3. **Gate on task completion**
210
+
211
+ Read \`tasks.md\`. If any tasks remain unchecked:
212
+ - Show "N/M tasks complete"
213
+ - Suggest \`/syn:apply\` to finish
214
+ - Stop
215
+
216
+ 4. **Collect change state**
217
+ - \`git diff --stat\` for file summary
218
+ - Read tasks.md for progress
219
+
220
+ 5. **Discover and run sanity checks**
221
+
222
+ Probe \`package.json\` scripts for \`test\`, \`lint\`, \`typecheck\`. Fall back to known tools (cargo test, ruff, etc.). Omit if none found.
223
+
224
+ For each command: capture pass/fail/crash. Summary only, not full logs.
225
+
226
+ 6. **Build output**
227
+
228
+ Structured summary first:
229
+ \`\`\`
230
+ Tasks: N/M ✓
231
+ Files: N changed (+A -D)
232
+ Tests: N/N passed ✓
233
+ Lint: 0 errors ✓
234
+ Typecheck: clean ✓
235
+ \`\`\`
236
+
237
+ Then narrative paragraph.
238
+
239
+ 7. **Present the fork**
240
+
241
+ **If all checks pass:**
242
+ - Archive now → AI moves to archive/
243
+ - Add more work → AI appends tasks (scope-checked), suggests \`/syn:clarify\` → \`/syn:analyze\` → \`/syn:apply\`
244
+ - Start a new change → \`/syn:propose\`
245
+
246
+ **If issues found:**
247
+ - Show each finding with route: \`/syn:apply\`, \`/syn:clarify\`, \`/syn:analyze\`
248
+ - List all findings at once
249
+
250
+ 8. **Archive inline** (when user picks archive)
251
+
252
+ - Create \`synspec/changes/archive/\` if missing
253
+ - Target: \`YYYY-MM-DD-<change-name>\`
254
+ - Fail if target exists
255
+ - Move: \`mv synspec/changes/<name> synspec/changes/archive/YYYY-MM-DD-<name>\`
256
+ - Confirm
257
+
258
+ ---
259
+
260
+ ## Output (Clean)
261
+
262
+ \`\`\`
263
+ Tasks: 7/7 ✓
264
+ Files: 5 changed (+124 -12)
265
+ Tests: 42/42 passed ✓
266
+ Lint: 0 errors ✓
267
+ Typecheck: clean ✓
268
+
269
+ All checks pass. What would you like to do?
270
+ [A] Archive now [B] Add more work [C] Start a new change
271
+ \`\`\`
272
+
273
+ ## Output (Dirty)
274
+
275
+ \`\`\`
276
+ Tasks: 7/7 ✓
277
+ Files: 5 changed (+124 -12)
278
+ Tests: 38/42 passed ⚠
279
+ Lint: 3 errors ⚠
280
+
281
+ Findings:
282
+ ╳ 4 tests failing → /syn:apply to fix
283
+ ╳ 3 lint errors → /syn:apply to fix
284
+ \`\`\`
285
+
286
+ ## Guardrails
287
+ - Gate on task completion — no checks until all tasks are done
288
+ - Summary only for failed checks (not full logs)
289
+ - Scope-check before appending tasks
290
+ - Quick bypasses review — do not suggest review after /syn:quick`
291
+ });
292
+ }
293
+ //# sourceMappingURL=review.js.map