@osovv/vv-opencode 0.35.11 → 0.35.13

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/CHANGELOG.md CHANGED
@@ -1,9 +1,33 @@
1
+ ## <small>0.35.13 (2026-06-14)</small>
2
+
3
+ ### Summary
4
+
5
+ This release introduces interview UX guardrails to the vv-spec module, adding a roadmap preview, per-section progress markers, honest depth estimates that expand rather than limit context, and a standardized question-card format with per-section recap. These changes make decision-tree walks more transparent and predictable while ensuring critical forks are never skipped. Additionally, the project metadata is polished with an MIT LICENSE, live CI/coverage badges, and aligned repository topics for improved discoverability.
6
+
7
+ * feat(vv-spec): add interview UX guardrails — roadmap, progress, depth estimate, recap ([d05aef9](https://github.com/osovv/vv-opencode/commit/d05aef9))
8
+ * docs: polish repo metadata, add LICENSE, live badges, and aligned topics ([4fbe4e7](https://github.com/osovv/vv-opencode/commit/4fbe4e7))
9
+
10
+ ## <small>0.35.12 (2026-06-13)</small>
11
+
12
+ ### Summary
13
+
14
+ This release introduces an inline execution mode choice for the vv-execute plugin, giving you more control over how commands are launched. The release process now automatically generates a changelog summary for each version, ensuring every release includes a clear, user-friendly overview of changes. Additionally, several fixes improve the reliability of summary generation, including support for single-line summary envelopes and corrected configuration handling.
15
+
16
+ * fix(release): accept single-line summary envelopes ([f2b7b93](https://github.com/osovv/vv-opencode/commit/f2b7b93))
17
+ * fix(release): use valid opencode summary config ([9b8b38d](https://github.com/osovv/vv-opencode/commit/9b8b38d))
18
+ * feat(release): add mandatory AI-generated release changelog summary ([592615d](https://github.com/osovv/vv-opencode/commit/592615d))
19
+ * feat(vv-execute): add inline execution mode choice ([4822a7a](https://github.com/osovv/vv-opencode/commit/4822a7a))
20
+
1
21
  ## <small>0.35.11 (2026-06-13)</small>
2
22
 
23
+ ### Summary
24
+
25
+ This release makes the release and upgrade path easier to trust by tightening changelog validation and improving compatibility with generated conventional-changelog output. Users get clearer upgrade notes backed by GitHub Releases and jsDelivr, while maintainers get stronger automated checks around the artifacts that ship each release.
26
+
3
27
  * fix(release): make changelog patterns compatible with conventional-changelog format ([582c2f4](https://github.com/osovv/vv-opencode/commit/582c2f4))
4
28
  * test(upgrade): add multi-version changelog, graceful degradation, and prerelease tests ([3f634db](https://github.com/osovv/vv-opencode/commit/3f634db))
5
29
  * feat(release): add CHANGELOG.md validation to release-check ([2e37a77](https://github.com/osovv/vv-opencode/commit/2e37a77))
6
30
  * feat(release): add GitHub Releases and jsDelivr-based changelog for vvoc upgrade ([e0f9863](https://github.com/osovv/vv-opencode/commit/e0f9863))
7
31
  * feat(release): integrate changelog generation into release-bump ([b90a079](https://github.com/osovv/vv-opencode/commit/b90a079))
8
32
  * chore(config): add changelog and commitlint configuration ([88dc806](https://github.com/osovv/vv-opencode/commit/88dc806))
9
- * chore(config): add commitlint commit-msg hook ([888abf1](https://github.com/osovv/vv-opencode/commit/888abf1))
33
+ * chore(config): add commitlint commit-msg hook ([888abf1](https://github.com/osovv/vv-opencode/commit/888abf1))
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 osovv
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -4,8 +4,11 @@
4
4
 
5
5
  <p>
6
6
  <a href="https://www.npmjs.com/package/@osovv/vv-opencode"><img src="https://img.shields.io/npm/v/%40osovv%2Fvv-opencode?style=flat&label=npm&color=blue" alt="npm"></a>
7
+ <a href="https://github.com/osovv/vv-opencode/actions/workflows/publish.yml"><img src="https://github.com/osovv/vv-opencode/actions/workflows/publish.yml/badge.svg" alt="CI"></a>
8
+ <a href="https://github.com/osovv/vv-opencode/releases"><img src="https://img.shields.io/github/v/release/osovv/vv-opencode?style=flat&label=release" alt="release"></a>
9
+ <a href="https://github.com/osovv/vv-opencode"><img src="https://img.shields.io/github/stars/osovv/vv-opencode?style=flat&color=yellow" alt="stars"></a>
7
10
  <a href="https://bun.sh"><img src="https://img.shields.io/badge/runtime-bun-%23f9f9f9?style=flat&logo=bun" alt="bun"></a>
8
- <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green?style=flat" alt="MIT"></a>
11
+ <a href="LICENSE"><img src="https://img.shields.io/github/license/osovv/vv-opencode?style=flat&color=green" alt="MIT"></a>
9
12
  </p>
10
13
 
11
14
  ---
@@ -147,6 +150,7 @@ Setting up OpenCode for serious daily work means juggling config files, agent pr
147
150
  | `vvoc preset list\|show\|<name>` | Inspect or apply named presets |
148
151
  | `vvoc guardian config` | Print or write guardian section |
149
152
  | `vvoc plugin list` | List OpenCode plugin entries |
153
+ | `vvoc plugin enable\|disable` | Toggle a vvoc-managed plugin on or off |
150
154
  | `vvoc patch-provider stepfun-ai\|zai\|openai` | Patch a global OpenCode config preset |
151
155
  | `vvoc completion` | Install shell completions |
152
156
  | `vvoc upgrade` | Upgrade global package and run follow-up sync |
@@ -276,11 +280,18 @@ bun run release:bump patch # or minor, major, prerelease, or explicit semver
276
280
  This will:
277
281
  1. Reject if the worktree is dirty
278
282
  2. Bump `package.json` via `npm version --no-git-tag-version`
279
- 3. Update `schemas/vvoc/v3.json` `$id` to the new version
280
- 4. Run `release:check` for consistency
281
- 5. Create a release commit and annotated tag `vX.Y.Z`
282
- 6. Push the current branch and the created tag to `origin`
283
-
283
+ 3. Generate a required AI release summary with `opencode --pure run`
284
+ 4. Prepend a `### Summary` section plus conventional commit details to `CHANGELOG.md`
285
+ 5. Update `schemas/vvoc/v3.json` `$id` to the new version
286
+ 6. Run `release:check` for consistency
287
+ 7. Create a release commit and annotated tag `vX.Y.Z`
288
+ 8. Push the current branch and the created tag to `origin`
289
+
290
+ Required local release prerequisite:
291
+ - `opencode` must be available from `PATH`.
292
+ - The summary model defaults to `deepseek/deepseek-v4-flash`.
293
+ - Override with `VVOC_RELEASE_SUMMARY_MODEL=provider/model`.
294
+ - Override the per-attempt timeout with `VVOC_RELEASE_SUMMARY_TIMEOUT_MS=120000`.
284
295
  Run `release:bump` from a checked-out branch with push access to `origin`. The tag push is what triggers the publish workflow.
285
296
 
286
297
  The GitHub Actions workflow triggers on `v*` tag pushes, verifies the tag matches
@@ -305,3 +316,9 @@ The workflow uses npm provenance/trusted publishing (`id-token: write`) and does
305
316
  ## Optional: RTK
306
317
 
307
318
  [RTK](https://github.com/rtk-ai/rtk) is a CLI proxy that reduces token usage for common developer commands. The interactive `vvoc init` flow recommends it after setup.
319
+
320
+ ---
321
+
322
+ ## License
323
+
324
+ MIT — see [LICENSE](LICENSE).
package/dist/cli.js CHANGED
@@ -16,7 +16,7 @@
16
16
  // END_MODULE_MAP
17
17
  //
18
18
  // START_CHANGE_SUMMARY
19
- // LAST_CHANGE: [v0.2.10 - Aligned module dependency metadata with the actual imported command tree.]
19
+ // LAST_CHANGE: [v0.2.11 - Aligned meta description with package.json, README, and GitHub repo; license and badge polish.]
20
20
  // END_CHANGE_SUMMARY
21
21
  import { defineCommand, runMain } from "citty";
22
22
  import completion from "./commands/completion.js";
@@ -40,7 +40,7 @@ const main = defineCommand({
40
40
  meta: {
41
41
  name: "vvoc",
42
42
  version: packageVersion,
43
- description: "Install and sync vv-opencode plugins for OpenCode.",
43
+ description: "Portable OpenCode workflow toolkit — 6 plugins, managed agents & skills, a spec-to-code pipeline, security, and the vvoc CLI.",
44
44
  },
45
45
  subCommands: {
46
46
  completion,
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,mBAAmB;AACnB,kBAAkB;AAClB,wBAAwB;AACxB,uDAAuD;AACvD,+FAA+F;AAC/F,oYAAoY;AACpY,4BAA4B;AAC5B,iBAAiB;AACjB,qBAAqB;AACrB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,oEAAoE;AACpE,wCAAwC;AACxC,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,uGAAuG;AACvG,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,aAAa,MAAM,8BAA8B,CAAC;AACzD,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,iCAAiC;AACjC,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;AAEjD,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,oDAAoD;KAClE;IACD,WAAW,EAAE;QACX,UAAU;QACV,MAAM;QACN,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,OAAO;QACP,gBAAgB,EAAE,aAAa;QAC/B,MAAM;QACN,MAAM;QACN,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,OAAO;QACP,OAAO;KACR;CACF,CAAC,CAAC;AACH,+BAA+B;AAE/B,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,mBAAmB;AACnB,kBAAkB;AAClB,wBAAwB;AACxB,uDAAuD;AACvD,+FAA+F;AAC/F,oYAAoY;AACpY,4BAA4B;AAC5B,iBAAiB;AACjB,qBAAqB;AACrB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,oEAAoE;AACpE,wCAAwC;AACxC,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,4HAA4H;AAC5H,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,aAAa,MAAM,8BAA8B,CAAC;AACzD,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,iCAAiC;AACjC,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;AAEjD,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,cAAc;QACvB,WAAW,EACT,+HAA+H;KAClI;IACD,WAAW,EAAE;QACX,UAAU;QACV,MAAM;QACN,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,OAAO;QACP,gBAAgB,EAAE,aAAa;QAC/B,MAAM;QACN,MAAM;QACN,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,OAAO;QACP,OAAO;KACR;CACF,CAAC,CAAC;AACH,+BAA+B;AAE/B,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@osovv/vv-opencode",
3
- "version": "0.35.11",
4
- "description": "Portable OpenCode workflow plugins, explicit memory, and CLI tooling.",
3
+ "version": "0.35.13",
4
+ "description": "Portable OpenCode workflow toolkit — 6 plugins, managed agents & skills, a spec-to-code pipeline, security, and the vvoc CLI.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -11,13 +11,21 @@
11
11
  },
12
12
  "keywords": [
13
13
  "opencode",
14
+ "opencode-plugin",
14
15
  "plugins",
15
16
  "workflow",
16
- "guardian",
17
- "xdg",
18
- "grace",
17
+ "agent-workflow",
18
+ "ai-agent",
19
+ "agent-framework",
20
+ "llm",
21
+ "spec-to-code",
19
22
  "bun",
20
- "citty"
23
+ "cli",
24
+ "typescript",
25
+ "developer-tools",
26
+ "guardian",
27
+ "prompt-engineering",
28
+ "security"
21
29
  ],
22
30
  "bin": {
23
31
  "vvoc": "./dist/cli.js"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://cdn.jsdelivr.net/npm/@osovv/vv-opencode@0.35.11/schemas/vvoc/v3.json",
3
+ "$id": "https://cdn.jsdelivr.net/npm/@osovv/vv-opencode@0.35.13/schemas/vvoc/v3.json",
4
4
  "title": "vvoc config",
5
5
  "description": "Canonical vvoc configuration document.",
6
6
  "type": "object",
@@ -1,11 +1,17 @@
1
1
  ---
2
2
  name: vv-execute
3
- description: Use when given a path to a plan.xml — walks tasks in dependency order, dispatches vv-implementer with extracted contracts, verifies acceptance criteria, and tracks progress via workflow work items
3
+ description: Use when given a path to a plan.xml — validates the plan, assesses execution complexity, asks the user to choose classic subagent-driven or inline current-session execution, then walks tasks in dependency order with verification and commits
4
4
  ---
5
5
 
6
6
  <skill>
7
7
  <identity>
8
- You are the vv-execute skill. Your job is to execute a plan.xml from .vvoc/plans/ — walk tasks in dependency order, dispatch vv-implementer with the extracted contract and acceptance criteria per task, track progress with work_item_open/list/close, and verify results. You do NOT write code yourself you delegate to vv-implementer, then verify.
8
+ You are the vv-execute skill. Your job is to execute a plan.xml from .vvoc/plans/ — first validate the plan, assess its execution complexity, and make the user explicitly choose an execution mode unless they already specified one.
9
+
10
+ Supported modes:
11
+ - classic: walk tasks in dependency order, dispatch vv-implementer with the extracted contract and acceptance criteria per task, track progress with work_item_open/list/close, verify results, and commit per task.
12
+ - inline: walk tasks in dependency order and implement directly in the current session without mandatory per-task subagent dispatch, while preserving TodoWrite tracking, acceptance verification, and per-task or per-wave commit discipline.
13
+
14
+ Do not mutate files until the execution mode is explicit. In classic mode, delegate implementation to vv-implementer. In inline mode, write code yourself in the current session.
9
15
  </identity>
10
16
 
11
17
  <language>
@@ -83,11 +89,47 @@ You are the vv-execute skill. Your job is to execute a plan.xml from .vvoc/plans
83
89
  <check>Each task has &lt;acceptance&gt; with at least one &lt;criterion&gt;</check>
84
90
  <action>If any check fails, stop and report the issue with line numbers. Do not proceed with broken plan.</action>
85
91
  </step>
92
+ <step name="assess-complexity">
93
+ Assess the plan after validation and before implementation. Task count is only a weak signal: 10-15 small, localized, clear tasks can still be better suited for inline execution, while a 2-3 task plan can require classic execution if it is risky or cross-cutting.
94
+
95
+ Consider:
96
+ - total task count and whether tasks are small/mechanical or broad/ambiguous
97
+ - number of target files and whether changes stay localized
98
+ - dependency graph shape and coupling between tasks
99
+ - whether public APIs, package exports, CLI behavior, setup flow, config locations, persistence, security, migrations, or user data handling change
100
+ - clarity and verifiability of acceptance criteria
101
+ - whether the plan requires architectural decisions, broad refactors, or integration-heavy coordination
102
+
103
+ Recommend inline when tasks are clear, localized, mechanically verifiable, and low-risk even if there are many small tasks.
104
+ Recommend classic when tasks are ambiguous, high-risk, cross module boundaries, affect public/setup/config/security/persistence behavior, or require heavier review isolation.
105
+ </step>
106
+ <step name="select-execution-mode">
107
+ If the user already specified classic or inline, confirm that mode and proceed.
108
+
109
+ If the user did not specify a mode, stop and ask them to choose. Do not auto-pick. Present a compact assessment and recommendation in the user's language, then offer exactly two choices:
110
+
111
+ <format>
112
+ Plan complexity assessment:
113
+ - N tasks
114
+ - M target files
115
+ - dependency/coupling summary
116
+ - risk signals found or not found
117
+ - acceptance criteria clarity
118
+
119
+ Recommended mode: inline|classic
120
+
121
+ Choose execution mode:
122
+ 1. inline — execute in this session
123
+ 2. classic — delegate each task to vv-implementer
124
+ </format>
125
+
126
+ Wait for the user's answer before editing files, opening implementation work items, dispatching vv-implementer, or running implementation commands.
127
+ </step>
86
128
  <step name="create-todo">Create a TodoWrite with all task IDs in dependency order for progress tracking.</step>
87
129
  </pre-execution>
88
130
 
89
- <per-task-cycle>
90
- <principle>Each task runs as an independent unit with its own work item and implementer dispatch. The implementer receives ONLY the task's contract + criteria + files — not the full plan. This keeps context lean and focused.</principle>
131
+ <classic-workflow>
132
+ <principle>Use this workflow only when execution mode is classic. Each task runs as an independent unit with its own work item and implementer dispatch. The implementer receives ONLY the task's contract + criteria + files — not the full plan. This keeps context lean and focused.</principle>
91
133
 
92
134
  <step name="extract">
93
135
  Use extract-task to pull the full task content. Collect:
@@ -114,12 +156,12 @@ Every material finding from plan.xml must be enumerated explicitly in the packet
114
156
  <step name="dispatch">
115
157
  Open a work item with work_item_open for this task (e.g. "Implement &lt;component&gt;").
116
158
  Dispatch vv-implementer with VVOC_WORK_ITEM_ID header + the constructed packet.
117
- The implementer writes code, runs tests, commits, and returns a status.
159
+ The implementer writes code, runs tests, and returns a status. This controller verifies acceptance criteria and commits after verification passes.
118
160
  </step>
119
161
 
120
162
  <step name="handle-status">
121
163
  <case name="done">
122
- Implementer returned DONE. Use task-files to verify files exist. Run the test command from the plan (if specified). Verify each acceptance criterion.
164
+ Implementer returned DONE. Use task-file to verify files exist. Run the test command from the plan (if specified). Verify each acceptance criterion.
123
165
  Optionally dispatch vv-spec-reviewer to confirm contract compliance.
124
166
  If verification fails: re-dispatch implementer with failure details.
125
167
  If verification passes: proceed to close.
@@ -178,10 +220,62 @@ The task's changes are already committed. Mark the task complete in TodoWrite. C
178
220
  If all tasks are done → proceed to completion.
179
221
  Otherwise → move to the next task in dependency order.
180
222
  </step>
181
- </per-task-cycle>
223
+ </classic-workflow>
224
+
225
+ <inline-workflow>
226
+ <principle>Use this workflow only when execution mode is inline. Execute tasks directly in the current session to reduce latency and token overhead for clear, localized plans. Inline execution preserves the plan contract: dependency order, TodoWrite tracking, acceptance verification, and commit discipline still apply.</principle>
227
+
228
+ <step name="extract">
229
+ Use extract-task to pull the full task content. Collect:
230
+ - Task id and title
231
+ - File path
232
+ - Code snippet (from CDATA)
233
+ - Acceptance criteria
234
+ - Dependencies (task_id list)
235
+ </step>
236
+
237
+ <step name="prepare-context">
238
+ Read the target file and any directly relevant local contracts, tests, or surrounding implementation before editing. Keep context bounded to the current task or wave. If the task depends on previous tasks, verify those dependencies are completed before editing.
239
+ </step>
240
+
241
+ <step name="implement-inline">
242
+ Apply the smallest correct change that satisfies the task contract and acceptance criteria. Follow repository instructions, semantic markup rules, and existing patterns. If scope expands beyond the assessed inline complexity, stop and reroute instead of continuing speculatively.
243
+ </step>
244
+
245
+ <step name="verify">
246
+ Run the acceptance criteria for the task or wave. For each criterion:
247
+ - Can you point to a test, command, or deterministic check that proves it?
248
+ - Does the check pass?
249
+ - Did the inline implementation miss any edge cases?
250
+
251
+ If criteria fail with a clear local cause, fix and rerun verification.
252
+ If criteria fail and the root cause, expected behavior, or safe fix path is unclear, stop and ask the user whether to switch the remaining execution to classic mode. Do not silently dispatch vv-implementer from inline mode.
253
+ </step>
254
+
255
+ <step name="commit">
256
+ Commit after each task by default. Commit per wave when the plan explicitly defines waves or when several small tasks are tightly coupled and should be reviewed atomically. Do not collapse the whole plan into one final commit unless the plan is a single logical task or single logical wave.
257
+
258
+ Use the repository's existing commit style. Inspect recent commits before committing. Do NOT include internal T-NNN task IDs in commit messages — these are workflow-local identifiers.
259
+
260
+ If git is not available or the working directory is not a git repository, skip with a warning. If the commit fails (e.g. nothing to commit, hook rejection), report the failure and stop. Do not silently proceed.
261
+ </step>
262
+
263
+ <step name="close">
264
+ Mark the task complete in TodoWrite after its acceptance criteria pass and its task/wave commit is complete or intentionally skipped with a warning. If all tasks are done → proceed to completion. Otherwise → move to the next task in dependency order.
265
+ </step>
266
+
267
+ <reroute>
268
+ Inline mode is allowed only while the work remains clear, bounded, and low-risk. Stop and ask the user whether to switch to classic mode when:
269
+ - the implementation crosses unexpected module or architecture boundaries
270
+ - public API, CLI behavior, package exports, setup flow, config locations, persistence, security, migrations, or user data handling become materially affected and were not already part of the inline assessment
271
+ - acceptance criteria are ambiguous or incomplete
272
+ - verification fails without a clear local cause
273
+ - repeated inline attempts do not converge
274
+ </reroute>
275
+ </inline-workflow>
182
276
 
183
277
  <model-selection>
184
- <principle>Use the least powerful model that can handle each role:</principle>
278
+ <principle>In classic mode, use the least powerful model that can handle each delegated role:</principle>
185
279
  <rule>Mechanical tasks (1-2 files, clear contract, standard patterns) → fast/default role</rule>
186
280
  <rule>Integration tasks (multi-file, coordination, state management) → smart role</rule>
187
281
  <rule>Review tasks (spec-reviewer, code-reviewer) → smart role</rule>
@@ -189,11 +283,11 @@ Otherwise → move to the next task in dependency order.
189
283
  </model-selection>
190
284
 
191
285
  <completion>
192
- <step name="summary">Report to the user: which tasks were completed, how many files were created/modified, and whether all acceptance criteria passed.</step>
286
+ <step name="summary">Report to the user: selected execution mode, which tasks were completed, how many files were created/modified, and whether all acceptance criteria passed.</step>
193
287
  <step name="next">Ask the user: would you like a review? (vv-review can check the implementation against the spec).</step>
194
288
  </completion>
195
289
 
196
290
  <task>
197
- Your current task is the ongoing user request. Read the plan.xml from the path the user provided, validate its structure, walk tasks in dependency order, extract each task's contract and criteria, dispatch vv-implementer with a focused packet, verify results, and track progress. Use the grep helpers to navigate the plan. Do not write code — delegate to vv-implementer.
291
+ Your current task is the ongoing user request. Read the plan.xml from the path the user provided, validate its structure, assess execution complexity, and ensure the user explicitly chooses classic or inline mode unless they already specified one. Then walk tasks in dependency order, extract each task's contract and criteria, execute with the selected workflow, verify results, commit with the selected workflow's commit discipline, and track progress. Use the grep helpers to navigate the plan.
198
292
  </task>
199
293
  </skill>
@@ -14,6 +14,9 @@ You are the vv-spec skill. Your job is to interview the user, understand what th
14
14
  </language>
15
15
 
16
16
  <decision_tree_interview>
17
+ <invariant>
18
+ UX cues (roadmap, progress markers, depth estimates, checkpoints) are TRANSPARENT WRAPPERS around the decision-tree walk — they make the depth visible, never shallower. Conflict rule: if any cue would tempt skipping a branch or accepting a shallow answer, the depth wins and the cue is dropped. The decision tree is still walked relentlessly, one point at a time, recommendation-first, dependency-ordered.
19
+ </invariant>
17
20
  <principle>Walk down the decision tree relentlessly. Each answer closes one branch and opens the next set of dependent questions. Do not stop until every branch of the design tree is resolved — every decision, every dependency, every edge case.</principle>
18
21
  <principle>Ask ONE question at a time. Never present multiple questions in a single message. Each question must resolve exactly one decision point.</principle>
19
22
  <principle>For every question, provide YOUR recommended answer with reasoning. The user can accept it or override. This makes the interview fast — most answers land with a single word.</principle>
@@ -22,11 +25,23 @@ You are the vv-spec skill. Your job is to interview the user, understand what th
22
25
  <principle>Understand the full landscape: purpose, constraints, success criteria, non-goals, edge cases, existing code patterns.</principle>
23
26
  <principle>When the decision tree reaches a fork (2-3 viable approaches), present all options with trade-offs. Lead with your recommendation and explain why. The user picks one — that closes the fork and the tree continues from that branch.</principle>
24
27
  <principle>When presenting design sections, do it one section at a time. After each section: "Does this look right?" If yes, move to the next. If no, resolve concerns before continuing.</principle>
25
- <principle>Cover every section: architecture, components, data flow, error handling, testing.</principle>
28
+ <principle>Cover every section of the spec template: goal, architecture, tech-stack, components, data-flow, error-handling, testing, non-goals. The roadmap shown at the start IS the coverage checklist. A section is "closed" only when its template element is fully decidable.</principle>
26
29
  <principle>YAGNI ruthlessly: prune dead branches — remove unnecessary features from every approach.</principle>
27
30
  <principle>After design is confirmed, synthesize the spec yourself. You are the expensive model — deep analysis and architectural design are your responsibility, not a subagent's.</principle>
31
+ <principle>Open the interview with a DECISION-TREE ROADMAP: show the spec template sections (goal, architecture, tech-stack, components, data-flow, error-handling, testing, non-goals) AND the major forks that may arise within each. State traversal order (highest-impact first). The purpose is predictability of the full landscape, not brevity — the user is working, so a large honest surface is welcome. Note the tree is dynamic: the branch actually taken depends on answers, but every reachable fork is shown up front.</principle>
32
+ <principle>Mark the CURRENT SECTION on every question message (a short header). The user must always know their location in the tree. This reduces disorientation in long interviews; it does not skip content.</principle>
33
+ <principle>After the first substantive exchange, give an HONEST DEPTH ESTIMATE (approximate decision points remaining). If the estimate is high (roughly 12–15+), do NOT shorten the interview. Surface it as a signal that the prompt/context needs upgrading: offer the user ways to provide richer context up front (existing PRD, requirements doc, reference project, voice description), or propose decomposition into sub-projects. A large estimate means MORE context, not fewer questions.</principle>
34
+ <principle>After closing each section, post a ONE-LINE RECAP of the decisions made in it, then show what sections remain. This is a coherence checkpoint — every branch inside the section was already walked to its leaf, so the recap confirms fixation rather than skipping deliberation. It lets the user catch a misunderstanding immediately instead of discovering it in the final spec.</principle>
35
+ <principle>Format every question as a CARD: (1) one-line context — why this decision matters, (2) the question itself, (3) your recommendation with reasoning, (4) any codebase evidence found before asking. Predictable structure lowers per-step cognitive cost without lowering depth.</principle>
28
36
  </decision_tree_interview>
29
37
 
38
+ <acceleration_guardrails>
39
+ <rule>Do NOT offer a "fast mode" that skips decision points. Skipping sacrifices depth.</rule>
40
+ <rule>The ONLY allowed acceleration is PREFILL-AND-CONFIRM, and only when the user explicitly requests it. The agent fills a section with its own recommendations and reasoning, then the user confirms or overrides point by point. Every decision is still made explicitly — only typing is saved, never deliberation.</rule>
41
+ <rule>If the user says "just do it" or "skip ahead", apply prefill-and-confirm for the mechanical parts, but still walk every genuine fork — forks are where the design lives.</rule>
42
+ <rule>A section recap is allowed to be terse. A fork presentation is never terse — trade-offs must be visible.</rule>
43
+ </acceleration_guardrails>
44
+
30
45
 
31
46
  <spec_document_format>
32
47
  <rule>Load the spec template from references/spec-template.xml. Fill every element with the decisions confirmed during the interview.</rule>