vgxness 1.13.0 → 1.14.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.
@@ -0,0 +1,403 @@
1
+ # SDD Flow
2
+
3
+ > Spanish version: [Flujo SDD](./sdd-flow.es.md).
4
+
5
+ > **Scope:** this document explains the practical end-to-end SDD flow in VGXNESS: from a human intent, through planning artifacts, implementation progress, verification, and archive. It is an operator-oriented companion to [Architecture](./architecture.md), [Safety](./safety.md), [CLI](./cli.md), and [MCP tools](./mcp.md).
6
+
7
+ VGXNESS treats SDD as product state, not just agent prompting. Each phase produces a local SQLite-backed artifact, and phase advancement is gated by explicit readiness and, where required, explicit human acceptance.
8
+
9
+ The canonical SDD phases are:
10
+
11
+ ```text
12
+ explore → proposal → spec → design → tasks → apply-progress → verify → archive
13
+ ```
14
+
15
+ ## Mental model
16
+
17
+ ```text
18
+ Human intent
19
+
20
+ OpenCode conversation / CLI operator action
21
+
22
+ VGXNESS MCP or CLI surface
23
+
24
+ Control plane services
25
+
26
+ SQLite-backed SDD artifacts, runs, memory, and checkpoints
27
+ ```
28
+
29
+ The important separation is:
30
+
31
+ ```text
32
+ Conversation ≠ state
33
+ Draft ≠ acceptance
34
+ Plan ≠ execution
35
+ Preflight ≠ automatic permission
36
+ Provider status ≠ provider config write
37
+ CLI/MCP surface ≠ duplicated business rules
38
+ ```
39
+
40
+ ## 1. Human intent
41
+
42
+ The workflow starts when the human states an objective, usually inside OpenCode after VGXNESS MCP has been installed.
43
+
44
+ Example:
45
+
46
+ ```text
47
+ Improve the interrupted-run recovery flow so VGXNESS can suggest how to continue safely.
48
+ ```
49
+
50
+ VGXNESS should not jump straight to code for substantial changes. The safe path is to inspect the current SDD state and choose the next valid phase.
51
+
52
+ Useful surfaces include:
53
+
54
+ ```text
55
+ sdd_status
56
+ sdd_next
57
+ sdd_continue
58
+ agent_resolve
59
+ agent_activate
60
+ ```
61
+
62
+ The CLI equivalents are useful for setup, diagnostics, recovery, and scripting:
63
+
64
+ ```bash
65
+ vgxness sdd status --project <project> --change <change>
66
+ vgxness sdd next --project <project> --change <change>
67
+ vgxness sdd continue --project <project> --change <change>
68
+ ```
69
+
70
+ ## 2. `explore`: understand before choosing a solution
71
+
72
+ Goal: investigate the problem, current code boundaries, prior decisions, risks, and possible approaches without committing to an implementation.
73
+
74
+ Typical questions:
75
+
76
+ - Where does the relevant logic live?
77
+ - Which CLI and MCP tools already exist?
78
+ - Which services own the domain rule?
79
+ - What safety or storage constraints apply?
80
+ - What risks would make the change hard to review?
81
+
82
+ For interrupted-run recovery, exploration might inspect:
83
+
84
+ ```text
85
+ src/runs/*
86
+ src/sdd/*
87
+ src/mcp/control-plane.ts
88
+ src/cli/commands/*
89
+ docs/*
90
+ test/*
91
+ ```
92
+
93
+ The phase artifact is saved under the canonical topic key:
94
+
95
+ ```text
96
+ sdd/{change}/explore
97
+ ```
98
+
99
+ An agent may mark the artifact ready, but readiness is not acceptance.
100
+
101
+ ## 3. Human acceptance of `explore`
102
+
103
+ VGXNESS deliberately separates generated content from human approval:
104
+
105
+ ```text
106
+ draft / ready ≠ accepted
107
+ ```
108
+
109
+ Only a human acceptance decision should advance governance-gated downstream work. This prevents an agent from silently approving its own direction.
110
+
111
+ CLI example:
112
+
113
+ ```bash
114
+ vgxness sdd accept-artifact --project <project> --change <change> --phase explore
115
+ ```
116
+
117
+ ## 4. `proposal`: choose the product direction
118
+
119
+ Goal: define what change should happen and why.
120
+
121
+ A good proposal answers:
122
+
123
+ - What problem are we solving?
124
+ - Who benefits?
125
+ - What is in scope?
126
+ - What is explicitly out of scope?
127
+ - What risks or tradeoffs exist?
128
+ - How will success be recognized?
129
+
130
+ Example proposal summary:
131
+
132
+ ```text
133
+ Add a read-only continuation surface for interrupted runs that combines failed/blocked/needs-human runs, the last checkpoint, the associated SDD phase, and a safe recommended next action.
134
+ ```
135
+
136
+ This is still direction-setting, not implementation.
137
+
138
+ ## 5. Human acceptance of `proposal`
139
+
140
+ The proposal is the main scope contract. If it is too broad, implementation and review become risky.
141
+
142
+ Recommended reviewer question:
143
+
144
+ ```text
145
+ Can this be reviewed as one coherent slice, or should it be split?
146
+ ```
147
+
148
+ For example, a safer first slice may be:
149
+
150
+ ```text
151
+ Read-only interrupted-run diagnosis before any automatic recovery or provider execution.
152
+ ```
153
+
154
+ After exact proposal acceptance, downstream draft planning can be generated, but those artifacts remain drafts until reviewed and accepted according to governance.
155
+
156
+ ## 6. `spec`: define observable behavior
157
+
158
+ Goal: specify what the system must do without overfitting to implementation details.
159
+
160
+ For interrupted-run recovery, a spec might require:
161
+
162
+ - Runs with `failed`, `blocked`, or `needs-human` status are listed as recovery candidates.
163
+ - Each candidate includes run id, project, workflow, phase, status, latest checkpoint, failure or blocker reason, and a recommended next action.
164
+ - Empty state is explicit when no interrupted runs exist.
165
+ - The surface is read-only and does not resume providers or mutate run state.
166
+
167
+ Specs should include edge cases, for example:
168
+
169
+ - many interrupted runs;
170
+ - runs with no checkpoints;
171
+ - runs from another project;
172
+ - runs linked to already-accepted SDD phases;
173
+ - incomplete or inconsistent stored metadata.
174
+
175
+ ## 7. `design`: decide how to build it
176
+
177
+ Goal: connect the spec to the existing architecture.
178
+
179
+ A useful design identifies:
180
+
181
+ - service boundaries;
182
+ - repository/query changes;
183
+ - CLI and MCP surfaces;
184
+ - schema additions;
185
+ - renderer behavior;
186
+ - tests;
187
+ - migration needs, if any;
188
+ - safety invariants.
189
+
190
+ Example design sketch:
191
+
192
+ ```text
193
+ Add a run-resume candidate service backed by the runs repository.
194
+ Expose read-only MCP tools for candidate listing and inspection.
195
+ Expose a CLI recovery/status command that uses the same service.
196
+ Keep recommendation generation non-mutating.
197
+ ```
198
+
199
+ Architecture rules to preserve:
200
+
201
+ - CLI and MCP should share domain services.
202
+ - Renderers should not reimplement business rules.
203
+ - Read-only tools must remain non-mutating.
204
+ - Provider config writes require explicit human consent.
205
+ - SDD artifacts stay SQLite-backed; do not create `openspec/`.
206
+
207
+ ## 8. `tasks`: make the design reviewable
208
+
209
+ Goal: break the design into small implementation steps.
210
+
211
+ Example task breakdown:
212
+
213
+ ```text
214
+ 1. Add repository query for interrupted runs.
215
+ 2. Add a resume-candidate service.
216
+ 3. Add MCP schema and read-only tools.
217
+ 4. Add CLI command or extend the existing recovery/status surface.
218
+ 5. Add renderer output for empty, single, and many-candidate states.
219
+ 6. Add focused service tests.
220
+ 7. Add CLI/MCP contract tests.
221
+ 8. Update docs if user-facing behavior changes.
222
+ ```
223
+
224
+ Good tasks are small, testable, and easy to review.
225
+
226
+ ## 9. `apply-progress`: implement with traceable progress
227
+
228
+ Goal: perform the code change while recording what changed, what remains, and what evidence exists.
229
+
230
+ Before implementation, check review size and risk:
231
+
232
+ - Does the change touch multiple subsystems?
233
+ - Does it alter storage or migrations?
234
+ - Does it change MCP schemas?
235
+ - Does it change safety behavior?
236
+ - Is the diff too large for one review?
237
+
238
+ If the change is too broad, split it before implementation.
239
+
240
+ During implementation, `apply-progress` should capture:
241
+
242
+ - completed work;
243
+ - changed files or modules;
244
+ - pending tasks;
245
+ - test results;
246
+ - known blockers;
247
+ - deviations from the accepted design.
248
+
249
+ `apply-progress` is a progress record, not proof that the implementation is correct.
250
+
251
+ ## 10. Preflight for risky operations
252
+
253
+ VGXNESS uses preflight checks to keep risky operations explicit.
254
+
255
+ Examples of risky categories:
256
+
257
+ ```text
258
+ implementation-edit
259
+ shell
260
+ test-run
261
+ install
262
+ git-write
263
+ provider-tool
264
+ secrets
265
+ external-directory
266
+ ```
267
+
268
+ Conceptual MCP example:
269
+
270
+ ```text
271
+ run_preflight({
272
+ category: "test-run",
273
+ operation: "bun run verify:test",
274
+ workflow: "sdd",
275
+ phase: "apply-progress"
276
+ })
277
+ ```
278
+
279
+ Preflight is advisory/planning control. It does not mean the operation is automatically approved or executed.
280
+
281
+ ## 11. `verify`: check the implementation independently
282
+
283
+ Goal: verify the implementation against the accepted spec and design, preferably with a fresh reviewer/agent context for non-trivial changes.
284
+
285
+ Verification should check:
286
+
287
+ - the spec is satisfied;
288
+ - design boundaries were respected or deviations are justified;
289
+ - relevant tests pass;
290
+ - read-only surfaces did not become mutating;
291
+ - provider setup/config writes still require explicit consent;
292
+ - storage, CLI, and MCP behavior remain consistent.
293
+
294
+ Typical repository verification commands include:
295
+
296
+ ```bash
297
+ bun run verify:typecheck
298
+ bun run verify:test
299
+ bun run verify:bun-sqlite
300
+ bun run package:bun:evidence
301
+ ```
302
+
303
+ Not every small docs or UI copy change needs the full suite. Storage, CLI/MCP schema, provider setup, or package changes deserve stricter verification.
304
+
305
+ ## 12. `archive`: close the change with durable context
306
+
307
+ Goal: preserve what happened so future work can recover context without rereading the entire thread or diff.
308
+
309
+ An archive artifact should include:
310
+
311
+ - final outcome;
312
+ - user-visible behavior changed;
313
+ - key files or modules touched;
314
+ - verification performed;
315
+ - residual risks;
316
+ - follow-up work;
317
+ - rollback or recovery notes, if relevant.
318
+
319
+ Example archive summary:
320
+
321
+ ```text
322
+ Change: recover-runs
323
+ Outcome: implemented a read-only interrupted-run recovery surface.
324
+ Verification: typecheck and focused service/CLI tests passed.
325
+ Residual risk: full package evidence was not run locally.
326
+ Follow-up: consider TUI integration after the CLI/MCP flow stabilizes.
327
+ ```
328
+
329
+ ## Tool-flow sketch
330
+
331
+ Inside OpenCode, the flow usually looks like this conceptually:
332
+
333
+ ```text
334
+ sdd_status
335
+
336
+ sdd_continue
337
+
338
+ agent_activate(explore)
339
+
340
+ sdd_save_artifact(explore)
341
+
342
+ sdd_ready(explore)
343
+
344
+ human accepts explore
345
+
346
+ agent_activate(proposal)
347
+
348
+ sdd_save_artifact(proposal)
349
+
350
+ sdd_ready(proposal)
351
+
352
+ human accepts proposal
353
+
354
+ agent_activate(spec)
355
+
356
+ agent_activate(design)
357
+
358
+ agent_activate(tasks)
359
+
360
+ human reviews/accepts gated artifacts
361
+
362
+ agent_activate(apply)
363
+
364
+ run_preflight(...)
365
+
366
+ sdd_save_artifact(apply-progress)
367
+
368
+ agent_activate(verify)
369
+
370
+ sdd_save_artifact(verify)
371
+
372
+ archive
373
+ ```
374
+
375
+ ## Why the flow exists
376
+
377
+ A naive agentic workflow is:
378
+
379
+ ```text
380
+ read code → edit code → run tests → say done
381
+ ```
382
+
383
+ VGXNESS uses SDD to make that safer:
384
+
385
+ ```text
386
+ understand objective
387
+
388
+ choose scope
389
+
390
+ specify behavior
391
+
392
+ design the change
393
+
394
+ split into tasks
395
+
396
+ implement with preflight and progress tracking
397
+
398
+ verify independently
399
+
400
+ archive durable context
401
+ ```
402
+
403
+ The upfront structure costs a little time, but it reduces hidden scope creep, unreviewable diffs, unsafe automation, and lost context.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vgxness",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "description": "CLI and MCP control plane for guided AI-agent workflows, SDD, memory, and OpenCode setup.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "repository": {
@@ -65,6 +65,48 @@
65
65
  "version": "2026-05-20.v1",
66
66
  "content": "# vgxness-sdd-archive\n\nRole: Archive the completed SDD change after verification and human-controlled acceptance flow.\n\nOutput: final outcome, changed files, verification evidence, decisions, follow-ups, and durable summary.\n\nConfirm before writes beyond requested archive artifacts. Do not mutate provider config or install provider-native skills.\n\nBoundary: This is VGXNESS registry/context skill content only. It is not a provider-native OpenCode skill, must not be installed into .opencode, must not require skills.paths, and must not load remote content.",
67
67
  "metadata": { "ownedBy": "vgxness", "kind": "registry-context-skill", "nativeProviderSkill": false, "workflow": "sdd", "phase": "archive" }
68
+ },
69
+ {
70
+ "name": "vgxness-workflow-selection",
71
+ "description": "Chooses the lightest safe VGXNESS workflow for an operator intent.",
72
+ "version": "2026-06-16.v1",
73
+ "content": "# vgxness-workflow-selection\n\nRole: Choose the lightest workflow that safely matches the user's intent, risk, and review cost.\n\nUse explore for answers or investigation, debug for diagnosis, quickfix for small local low-risk edits, plan for non-mutating planning, build for clear scoped implementation, and SDD only for large, architectural, cross-surface, persistent, security-sensitive, provider-config, permission, or hard-to-review changes.\n\nOutput: recommended workflow, reason, risks, whether clarification is needed, and the smallest safe next step.\n\nBoundary: This is VGXNESS registry/context skill content only. It is not a provider-native OpenCode skill, must not be installed into .opencode, must not require skills.paths, and must not load remote content.",
74
+ "metadata": { "ownedBy": "vgxness", "kind": "registry-context-skill", "nativeProviderSkill": false, "category": "workflow-selection" }
75
+ },
76
+ {
77
+ "name": "vgxness-git-safety",
78
+ "description": "Protects user work and repository integrity during git-related operations.",
79
+ "version": "2026-06-16.v1",
80
+ "content": "# vgxness-git-safety\n\nRole: Keep git operations explicit, reviewable, and safe.\n\nBefore any git write, inspect and report working tree status, diff, and recent commits. Preserve unrelated user changes, stage only intended files, and stop on conflicts, detached HEAD, divergent branches, dirty base, untracked build artifacts, or unclear ownership.\n\nNever commit, amend, push, merge, rebase, reset, delete branches, delete worktrees, publish releases, or create PRs unless the human explicitly asks for that exact action.\n\nOutput: git state evidence, intended files, safety blockers, and the smallest safe decision needed from the human.\n\nBoundary: This is VGXNESS registry/context skill content only. It is not a provider-native OpenCode skill, must not be installed into .opencode, must not require skills.paths, and must not load remote content.",
81
+ "metadata": { "ownedBy": "vgxness", "kind": "registry-context-skill", "nativeProviderSkill": false, "category": "git" }
82
+ },
83
+ {
84
+ "name": "vgxness-pr-prep",
85
+ "description": "Prepares concise pull request evidence and reviewer-ready summaries.",
86
+ "version": "2026-06-16.v1",
87
+ "content": "# vgxness-pr-prep\n\nRole: Prepare a pull request only after the human explicitly asks for PR work.\n\nBefore opening a PR, inspect branch status, upstream tracking, base branch, recent commits, and diff against base. Summarize included commits, files changed, verification, rollout risk, reviewer burden, and any follow-ups.\n\nDo not push, publish, or create the PR without explicit human approval for that action. Prefer a focused PR over a broad mixed change.\n\nOutput: PR title/body draft or PR readiness report with evidence, risks, and reviewer notes.\n\nBoundary: This is VGXNESS registry/context skill content only. It is not a provider-native OpenCode skill, must not be installed into .opencode, must not require skills.paths, and must not load remote content.",
88
+ "metadata": { "ownedBy": "vgxness", "kind": "registry-context-skill", "nativeProviderSkill": false, "category": "pull-request" }
89
+ },
90
+ {
91
+ "name": "vgxness-stacked-prs",
92
+ "description": "Guides reviewable stacked PR slicing for dependent changes.",
93
+ "version": "2026-06-16.v1",
94
+ "content": "# vgxness-stacked-prs\n\nRole: Split dependent work into reviewable layers when one large PR would be hard to understand or risky to review.\n\nPrefer slices such as docs groundwork, tests/contracts, domain behavior, CLI/MCP surface, and follow-up polish. Keep each PR independently reviewable, explain dependencies, and avoid mixing unrelated fixes.\n\nDo not use stacked PRs for tiny fixes or emergency repairs unless the dependency structure is genuinely needed.\n\nOutput: proposed stack, branch/order guidance, reviewer burden tradeoffs, and cleanup notes.\n\nBoundary: This is VGXNESS registry/context skill content only. It is not a provider-native OpenCode skill, must not be installed into .opencode, must not require skills.paths, and must not load remote content.",
95
+ "metadata": { "ownedBy": "vgxness", "kind": "registry-context-skill", "nativeProviderSkill": false, "category": "pull-request" }
96
+ },
97
+ {
98
+ "name": "vgxness-strict-tdd",
99
+ "description": "Applies strict test-driven development for behavior-sensitive changes.",
100
+ "version": "2026-06-16.v1",
101
+ "content": "# vgxness-strict-tdd\n\nRole: Use strict TDD when changing behavior where regression risk matters.\n\nPreferred loop: write or identify a failing focused test, implement the smallest change, make the test pass, then refactor safely. Use especially for bug fixes, storage, permissions, workflow gates, MCP schemas, CLI contracts, and domain services.\n\nDo not force TDD ceremony onto docs-only, copy-only, or purely exploratory work. If a failing test cannot be created cheaply, explain why and choose focused verification instead.\n\nOutput: failing-test evidence when available, implementation notes, passing-test evidence, and residual risk.\n\nBoundary: This is VGXNESS registry/context skill content only. It is not a provider-native OpenCode skill, must not be installed into .opencode, must not require skills.paths, and must not load remote content.",
102
+ "metadata": { "ownedBy": "vgxness", "kind": "registry-context-skill", "nativeProviderSkill": false, "category": "testing" }
103
+ },
104
+ {
105
+ "name": "vgxness-review-size-guard",
106
+ "description": "Keeps implementation slices small enough to review safely.",
107
+ "version": "2026-06-16.v1",
108
+ "content": "# vgxness-review-size-guard\n\nRole: Protect reviewer attention and product safety by challenging oversized or mixed-scope changes.\n\nBefore large implementation, estimate affected subsystems, files, schema/storage changes, provider/setup impact, docs/tests, and verification cost. If the change is cross-cutting or hard to review, stop and recommend splitting into smaller slices.\n\nPrefer one coherent behavior change plus its tests/docs over unrelated bundles. For high-risk work, ask whether to reduce scope, split, or proceed as one larger change.\n\nOutput: review-size assessment, recommended slices, tradeoffs, and the next smallest safe step.\n\nBoundary: This is VGXNESS registry/context skill content only. It is not a provider-native OpenCode skill, must not be installed into .opencode, must not require skills.paths, and must not load remote content.",
109
+ "metadata": { "ownedBy": "vgxness", "kind": "registry-context-skill", "nativeProviderSkill": false, "category": "review" }
68
110
  }
69
111
  ],
70
112
  "attachments": [
@@ -76,6 +118,36 @@
76
118
  { "workflow": "sdd", "phase": "apply-progress", "skill": "vgxness-sdd-apply", "order": 100 },
77
119
  { "workflow": "sdd", "phase": "apply", "skill": "vgxness-sdd-apply", "order": 100 },
78
120
  { "workflow": "sdd", "phase": "verify", "skill": "vgxness-sdd-verify", "order": 100 },
79
- { "workflow": "sdd", "phase": "archive", "skill": "vgxness-sdd-archive", "order": 100 }
121
+ { "workflow": "sdd", "phase": "archive", "skill": "vgxness-sdd-archive", "order": 100 },
122
+ { "workflow": "explore", "phase": "explore", "skill": "vgxness-workflow-selection", "order": 10 },
123
+ { "workflow": "debug", "phase": "diagnose", "skill": "vgxness-workflow-selection", "order": 10 },
124
+ { "workflow": "quickfix", "phase": "apply", "skill": "vgxness-workflow-selection", "order": 10 },
125
+ { "workflow": "plan", "phase": "plan", "skill": "vgxness-workflow-selection", "order": 10 },
126
+ { "workflow": "build", "phase": "apply", "skill": "vgxness-workflow-selection", "order": 10 },
127
+ { "workflow": "sdd", "phase": "manager", "skill": "vgxness-workflow-selection", "order": 10 },
128
+ { "workflow": "quickfix", "phase": "apply", "skill": "vgxness-git-safety", "order": 20 },
129
+ { "workflow": "build", "phase": "apply", "skill": "vgxness-git-safety", "order": 20 },
130
+ { "workflow": "sdd", "phase": "apply-progress", "skill": "vgxness-git-safety", "order": 20 },
131
+ { "workflow": "plan", "phase": "pr", "skill": "vgxness-git-safety", "order": 20 },
132
+ { "workflow": "plan", "phase": "pr", "skill": "vgxness-pr-prep", "order": 30 },
133
+ { "workflow": "plan", "phase": "stacked-prs", "skill": "vgxness-stacked-prs", "order": 30 },
134
+ { "workflow": "sdd", "phase": "tasks", "skill": "vgxness-stacked-prs", "order": 30 },
135
+ { "workflow": "quickfix", "phase": "apply", "skill": "vgxness-strict-tdd", "order": 40 },
136
+ { "workflow": "build", "phase": "apply", "skill": "vgxness-strict-tdd", "order": 40 },
137
+ { "workflow": "sdd", "phase": "apply-progress", "skill": "vgxness-strict-tdd", "order": 40 },
138
+ { "workflow": "plan", "phase": "plan", "skill": "vgxness-review-size-guard", "order": 50 },
139
+ { "workflow": "build", "phase": "apply", "skill": "vgxness-review-size-guard", "order": 50 },
140
+ { "workflow": "sdd", "phase": "tasks", "skill": "vgxness-review-size-guard", "order": 50 },
141
+ { "workflow": "sdd", "phase": "apply-progress", "skill": "vgxness-review-size-guard", "order": 50 },
142
+ { "targetType": "intent-signal", "targetKey": "workflow-selection", "skill": "vgxness-workflow-selection", "order": 10 },
143
+ { "targetType": "intent-signal", "targetKey": "git", "skill": "vgxness-git-safety", "order": 20 },
144
+ { "targetType": "intent-signal", "targetKey": "pull-request", "skill": "vgxness-git-safety", "order": 20 },
145
+ { "targetType": "intent-signal", "targetKey": "stacked-prs", "skill": "vgxness-git-safety", "order": 20 },
146
+ { "targetType": "intent-signal", "targetKey": "pull-request", "skill": "vgxness-pr-prep", "order": 30 },
147
+ { "targetType": "intent-signal", "targetKey": "stacked-prs", "skill": "vgxness-stacked-prs", "order": 30 },
148
+ { "targetType": "intent-signal", "targetKey": "tdd", "skill": "vgxness-strict-tdd", "order": 40 },
149
+ { "targetType": "intent-signal", "targetKey": "strict-tdd", "skill": "vgxness-strict-tdd", "order": 40 },
150
+ { "targetType": "intent-signal", "targetKey": "review-size", "skill": "vgxness-review-size-guard", "order": 50 },
151
+ { "targetType": "intent-signal", "targetKey": "broad-change", "skill": "vgxness-review-size-guard", "order": 50 }
80
152
  ]
81
153
  }