vinta-ai-workflows 0.2.0-alpha3 → 0.2.0-alpha5
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 +162 -0
- package/README.md +5 -2
- package/package.json +1 -1
- package/schemas/vinta-ai-workflows-config.v1.schema.json +57 -0
- package/skills/vinta-analyze-codebase/SKILL.md +1 -1
- package/skills/vinta-bootstrap-ai-tools/SKILL.md +37 -8
- package/skills/vinta-derive-skills/SKILL.md +92 -39
- package/skills/vinta-derive-skills/resources/foundation-skills/deslop-comments/SKILL.md +148 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/handoff/SKILL.md +100 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/prepare-worktree/SKILL.md +39 -4
- package/skills/vinta-derive-skills/resources/foundation-skills/prepare-worktree/scripts/claude-worktree-write-guard.py +118 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/prepare-worktree/scripts/gen-claude-sandbox-settings.sh +167 -0
- package/skills/vinta-derive-skills/resources/foundation-skills/prepare-worktree/scripts/sandbox-run.sh +3 -1
- package/skills/vinta-derive-skills/resources/foundation-skills/thermo-nuclear-code-quality-review/SKILL.md +129 -0
- package/skills/vinta-derive-skills/resources/handoff-to-client-template.md +107 -0
- package/skills/vinta-derive-skills/resources/plan-execution/README.md +42 -0
- package/skills/vinta-derive-skills/resources/{implement-plan-template-modular-substitutions.md → plan-execution/partials/commit-strategy/modular.md} +38 -70
- package/skills/vinta-derive-skills/resources/plan-execution/partials/commit-strategy/stacked.md +46 -0
- package/skills/vinta-derive-skills/resources/plan-execution/partials/implementer-prompt.md +78 -0
- package/skills/vinta-derive-skills/resources/plan-execution/partials/model-pick.md +19 -0
- package/skills/vinta-derive-skills/resources/plan-execution/partials/pr-context.md +61 -0
- package/skills/vinta-derive-skills/resources/plan-execution/partials/review-layers.md +50 -0
- package/skills/vinta-derive-skills/resources/plan-execution/partials/worktree-seam.md +68 -0
- package/skills/vinta-derive-skills/resources/{amend-plan-template.md → plan-execution/shell/amend-plan-template.md} +48 -42
- package/skills/vinta-derive-skills/resources/plan-execution/shell/implement-phase-template.md +47 -0
- package/skills/vinta-derive-skills/resources/plan-execution/shell/implement-plan-template.md +186 -0
- package/skills/vinta-derive-skills/resources/plan-execution/shell/integrate-phase-template.md +30 -0
- package/skills/vinta-derive-skills/resources/plan-execution/shell/review-phase-template.md +25 -0
- package/skills/vinta-derive-skills/resources/systematic-debugging-template.md +7 -3
- package/skills/vinta-update-project-skills/SKILL.md +1 -1
- package/skills/vinta-derive-skills/resources/implement-plan-template.md +0 -436
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,168 @@ the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
7
7
|
|
|
8
8
|
## [0.2.0] — YYYY-MM-DD
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
<!-- pre-release: 0.2.0-alpha5 on 2026-07-13 -->
|
|
13
|
+
|
|
14
|
+
- **`handoff` foundation skill — session-continuation handoff docs between
|
|
15
|
+
agents.** Write mode captures the current task (goal, verified-vs-unverified
|
|
16
|
+
state, decisions + rejected alternatives, landmines, single concrete next
|
|
17
|
+
step) into `.vinta-ai-workflows/handoffs/{date}-{slug}.md`, gathering state
|
|
18
|
+
from the repo — never from memory; resume mode reads a handoff, verifies its
|
|
19
|
+
claims against the repo before trusting them, and continues from the doc's
|
|
20
|
+
next step. Ships at
|
|
21
|
+
[skills/vinta-derive-skills/resources/foundation-skills/handoff/SKILL.md](skills/vinta-derive-skills/resources/foundation-skills/handoff/SKILL.md).
|
|
22
|
+
Wired as an **always-ship** bucket-A skill: new
|
|
23
|
+
`foundation_skills.handoff` enum entry (schema), derive-skills bucket-A
|
|
24
|
+
table + always-ships note, bootstrap always-copy-verbatim list + outputs
|
|
25
|
+
tree + Step 0.5 YAML (`handoff: enabled`), and both foundation-shape
|
|
26
|
+
replace lists. No bootstrap interview question — it always ships.
|
|
27
|
+
|
|
28
|
+
- **`handoff-to-client` foundation skill — API-change handoff docs for
|
|
29
|
+
API-only repos (opt-in, template-rendered).** Generates a self-contained
|
|
30
|
+
markdown document for the client teams consuming the repo's API: every
|
|
31
|
+
endpoint/operation added / changed / deprecated / removed on the current
|
|
32
|
+
branch vs the default branch, with request/response shapes derived from the
|
|
33
|
+
code (or a regenerated API spec), auth/error changes, breaking-change flags
|
|
34
|
+
judged from the strictest plausible client, one realistic example per
|
|
35
|
+
operation, and per-platform migration notes. Template at
|
|
36
|
+
[skills/vinta-derive-skills/resources/handoff-to-client-template.md](skills/vinta-derive-skills/resources/handoff-to-client-template.md)
|
|
37
|
+
(bucket B + C). New schema fields: `foundation_skills.handoff-to-client`
|
|
38
|
+
enum entry and the `skills.handoff-to-client` config block
|
|
39
|
+
(`client_platforms` — required non-empty array, `api_style`,
|
|
40
|
+
`api_spec_path`, `output_dir` — default
|
|
41
|
+
`.vinta-ai-workflows/client-handoffs`). New template placeholders
|
|
42
|
+
`{{API_STYLE}}`, `{{CLIENT_PLATFORMS_LIST}}`, `{{CLIENT_HANDOFF_DIR}}`,
|
|
43
|
+
`{{API_SPEC_BLOCK}}` documented in the derive-skills placeholder table.
|
|
44
|
+
Bootstrap gains **Optional foundation skills question 7** (asked only when
|
|
45
|
+
the inventory suggests an API-only repo) plus a four-part config follow-up;
|
|
46
|
+
Step 0.5 YAML, outputs tree, optional-bucket lists, and both
|
|
47
|
+
foundation-shape replace lists updated. **Consumers**: API-only projects
|
|
48
|
+
re-sync + answer the new interview question to enable it.
|
|
49
|
+
|
|
50
|
+
<!-- pre-release: 0.2.0-alpha4 on 2026-07-08 -->
|
|
51
|
+
|
|
52
|
+
- **`implement-plan` outer-gate test scope is now configurable — and defaults
|
|
53
|
+
to the quick path.** Each phase's outer gate still always runs the repo-wide
|
|
54
|
+
type/build gate, but for tests it now runs **only the scoped suite** covering
|
|
55
|
+
the apps/files that phase touched by default, instead of the whole repo suite
|
|
56
|
+
every phase (new tests still pass individually in the inner loop). This
|
|
57
|
+
**flips the previous default** (full suite every phase → scoped) to make
|
|
58
|
+
multi-phase plans materially faster. Opt back into the full suite per run via
|
|
59
|
+
the new Step 0 question (d), or set the default in
|
|
60
|
+
`.vinta-ai-workflows.yaml` under
|
|
61
|
+
`run_options.implement-plan.full_test_suite: true`. New config field
|
|
62
|
+
(`run_options.implement-plan.full_test_suite`, boolean, default `false`);
|
|
63
|
+
threaded from the conductor into `implement-phase` (outer-gate marker in the
|
|
64
|
+
implementer prompt) and `review-phase` (Layer 1 verifies whichever gate the
|
|
65
|
+
flag selects); recorded in `TRACKING_{plan-id}.md` `run_options`.
|
|
66
|
+
|
|
67
|
+
- **`deslop-comments` foundation skill — Simple-English comment cleanup, now
|
|
68
|
+
part of the review flow.** Rewrites comments + doc blocks touched during a
|
|
69
|
+
task into Simple English (strips AI-slop vocabulary and negative framing;
|
|
70
|
+
comment-only — no renames, no behavior change). Ships at
|
|
71
|
+
[skills/vinta-derive-skills/resources/foundation-skills/deslop-comments/SKILL.md](skills/vinta-derive-skills/resources/foundation-skills/deslop-comments/SKILL.md).
|
|
72
|
+
Wired as an **always-ship** bucket-A skill (new
|
|
73
|
+
`foundation_skills.deslop-comments` enum, added to the derive-skills bucket-A
|
|
74
|
+
table + always-on note, the bootstrap always-copy-verbatim list + outputs
|
|
75
|
+
tree + Step 0.5 YAML, and both foundation-shape replace lists) because
|
|
76
|
+
`review-phase` now depends on it: **Layer 2 gains a comment-hygiene check**
|
|
77
|
+
and the **fix loop dispatches a `fixer` to run `deslop-comments`** on the
|
|
78
|
+
phase's touched files for any comment-slop finding. Also invokable
|
|
79
|
+
standalone ("deslop these comments"). **Consumers**: re-sync to pick up the
|
|
80
|
+
skill and the `review-phase` comment-hygiene step.
|
|
81
|
+
|
|
82
|
+
- **`thermo-nuclear-code-quality-review` foundation skill — opt-in deep
|
|
83
|
+
structural-maintainability audit.** A deliberately harsh, on-demand review
|
|
84
|
+
of a diff (abstraction quality, giant files, spaghetti-condition growth)
|
|
85
|
+
that hunts for "code-judo" reframes collapsing whole branches / helpers /
|
|
86
|
+
modes / layers rather than polishing them. Copy-verbatim foundation skill
|
|
87
|
+
(bucket A), read-only — it reports findings and hands each fix to the
|
|
88
|
+
`fixer` agent. Ships at
|
|
89
|
+
[skills/vinta-derive-skills/resources/foundation-skills/thermo-nuclear-code-quality-review/SKILL.md](skills/vinta-derive-skills/resources/foundation-skills/thermo-nuclear-code-quality-review/SKILL.md).
|
|
90
|
+
Wired as **opt-in / ask-first**: new `foundation_skills.thermo-nuclear-code-quality-review`
|
|
91
|
+
enum in `schemas/vinta-ai-workflows-config.v1.schema.json`, a new
|
|
92
|
+
question 6 in the bootstrap **Optional foundation skills** interview, and
|
|
93
|
+
the derive-skills bucket-A + foundation-shape lists. The `review-phase`
|
|
94
|
+
Layer 3 reviewer now applies a **condensed structural-simplification lens**
|
|
95
|
+
on every phase and escalates to this full audit only when a phase touches
|
|
96
|
+
core architecture, crosses ~1,000 lines, or surfaces a structural smell too
|
|
97
|
+
big to resolve inline — the deep pass never auto-runs on every diff.
|
|
98
|
+
**Consumers**: re-sync; the bootstrap now asks one more optional-skill
|
|
99
|
+
question, and `review-phase` gains the escalation hook.
|
|
100
|
+
|
|
101
|
+
- **`prepare-worktree` — write-guard for *in-process* subagent runtimes
|
|
102
|
+
(claude-code's Task tool).** `sandbox-run.sh` confines a *process*, so it
|
|
103
|
+
only works when the harness spawns subagents as subprocesses (`codex exec`,
|
|
104
|
+
a `claude -p` child). Claude Code runs subagents in-process — same OS
|
|
105
|
+
process, same tool pipeline, no child command to wrap — so a new
|
|
106
|
+
harness-config guard covers it instead. Two bundled scripts:
|
|
107
|
+
`prepare-worktree/scripts/claude-worktree-write-guard.py` (a `PreToolUse`
|
|
108
|
+
hook that fires for the orchestrator **and** every in-process Task subagent,
|
|
109
|
+
blocking the file-editing tools — `Edit`/`Write`/`MultiEdit`/`NotebookEdit`
|
|
110
|
+
— from writing outside the worktree; filesystem-only, no network impact) and
|
|
111
|
+
`prepare-worktree/scripts/gen-claude-sandbox-settings.sh` (generates the
|
|
112
|
+
worktree's `.claude/settings.json` wiring that hook, and optionally
|
|
113
|
+
Claude Code's **native** OS sandbox via `sandbox.filesystem.denyWrite`/
|
|
114
|
+
`allowWrite` under `--os-sandbox` to also block Bash-issued writes — noting
|
|
115
|
+
the native sandbox forces network isolation, so registry + git-remote hosts
|
|
116
|
+
must be allow-listed via `--allow-domain`). Same deny-main/allow-rest model
|
|
117
|
+
as `sandbox-run.sh`. Step 5.5 of `prepare-worktree` gains an *In-process
|
|
118
|
+
runtimes (claude-code)* subsection; `implement-plan` §1c makes the
|
|
119
|
+
previously hand-wavy "in-process runtime" branch concrete. **Consumers**:
|
|
120
|
+
re-sync `prepare-worktree` + `implement-plan` — the two new scripts ship
|
|
121
|
+
with the foundation-skill dir.
|
|
122
|
+
|
|
123
|
+
### Fixed
|
|
124
|
+
|
|
125
|
+
- **`prepare-worktree/scripts/sandbox-run.sh` — two correctness bugs.**
|
|
126
|
+
(1) The macOS profile temp file used `mktemp -t vinta-sandbox`, which fails
|
|
127
|
+
with "too few X's in template" under GNU `mktemp` (present on any machine
|
|
128
|
+
with coreutils on `PATH`, including many macOS setups) — the whole sandbox
|
|
129
|
+
path errored out; now uses an explicit `…/vinta-sandbox.XXXXXX` template
|
|
130
|
+
portable across BSD + GNU `mktemp`. (2) Callers must now pass
|
|
131
|
+
`--allow <main>/.git`: git worktrees write every commit into the main repo's
|
|
132
|
+
`.git` (`.git/worktrees/<name>/index.lock`, shared objects/refs), so a
|
|
133
|
+
deny-main that omits it made the subagent's own `git commit` fail with
|
|
134
|
+
`Operation not permitted`. `implement-plan` §1c's documented invocation +
|
|
135
|
+
checklist + rules are updated to include `<main>/.git` in the allow-set.
|
|
136
|
+
|
|
137
|
+
### Changed
|
|
138
|
+
|
|
139
|
+
- **`implement-plan` / `amend-plan` decomposed into a modular "plan-execution
|
|
140
|
+
unit" of deterministic sub-skills.** The single ~440-line
|
|
141
|
+
`implement-plan-template.md` (and its `implement-plan-template-modular-substitutions.md`
|
|
142
|
+
sister file) are replaced by a thin **conductor** plus three co-shipped
|
|
143
|
+
single-purpose sub-skills, all rendered from
|
|
144
|
+
[skills/vinta-derive-skills/resources/plan-execution/](skills/vinta-derive-skills/resources/plan-execution/)
|
|
145
|
+
(`shell/` templates that `<!-- include -->` shared `partials/`):
|
|
146
|
+
- `implement-plan` — conductor: parse → classify → resolve one `WORKROOT`
|
|
147
|
+
→ per-phase loop (dispatch) → track → report.
|
|
148
|
+
- `implement-phase` — compose prompt + pick model + spawn the implementer.
|
|
149
|
+
- `review-phase` — the three-layer review + fix loop, now shared by
|
|
150
|
+
`implement-plan`, `amend-plan`, **and** `systematic-debugging` (one review
|
|
151
|
+
implementation instead of three).
|
|
152
|
+
- `integrate-phase` — push + open PR via context file, rendered
|
|
153
|
+
commit-strategy-resolved.
|
|
154
|
+
The scattered runtime `if use_worktree` branches collapse into a single
|
|
155
|
+
`WORKROOT` / `BASE_BRANCH` / `SANDBOX_TIER` seam the conductor resolves once
|
|
156
|
+
and passes to every sub-skill as data; only two local, data-driven checks
|
|
157
|
+
remain (the sandbox spawn-wrap in `implement-phase`, the stray-write
|
|
158
|
+
backstop in `review-phase`). Under `commit_strategy = ask`, the former
|
|
159
|
+
dual-rendered branch/commit/PR bodies become **two** rendered
|
|
160
|
+
`integrate-phase-stacked` / `integrate-phase-modular` skills the conductor
|
|
161
|
+
dispatches by name — no more both-paths-in-one-file. `amend-plan` reuses
|
|
162
|
+
`review-phase` verbatim + the shared inner/outer verification loop, and
|
|
163
|
+
picks up the same `WORKROOT` uniformity, while keeping its own
|
|
164
|
+
history-rewriting topology. **Consumers**: re-sync — the target now gets
|
|
165
|
+
five plan-execution SKILL.md files (`implement-plan`, `implement-phase`,
|
|
166
|
+
`review-phase`, `integrate-phase` [or the two `ask` variants], `amend-plan`)
|
|
167
|
+
instead of two. The three new sub-skills are a co-shipped unit: always
|
|
168
|
+
generated with `implement-plan`, not individually opt-in (no new
|
|
169
|
+
`foundation_skills` enum entry, no new interview question). Runtime
|
|
170
|
+
behavior is unchanged; the decomposition is for reviewability + determinism.
|
|
171
|
+
|
|
10
172
|
<!-- pre-release: 0.2.0-alpha3 on 2026-06-23 -->
|
|
11
173
|
|
|
12
174
|
### Added
|
package/README.md
CHANGED
|
@@ -222,8 +222,11 @@ Land at `ai-tools/skills/<name>/SKILL.md`. Always-on unless flagged optional.
|
|
|
222
222
|
| [`plan-feature`](skills/vinta-derive-skills/resources/foundation-skills/plan-feature/SKILL.md) | always | Phased delivery plan from the matching spec → `ai-plans/YYYY-MM-DD-FEATURE_NAME_PLAN.md`. |
|
|
223
223
|
| [`create-qa-use-cases`](skills/vinta-derive-skills/resources/foundation-skills/create-qa-use-cases/SKILL.md) | always | Bootstrap `QA_USE_CASES.md` from the active spec / plan. Called by `plan-feature` when missing. |
|
|
224
224
|
| [`open-pr-from-context`](skills/vinta-derive-skills/resources/foundation-skills/open-pr-from-context/SKILL.md) | always | Publish a `.vinta-ai-workflows/prs-context/<feature>/<phase>.md` file as a real PR + inline comments via `gh` / `glab`. Bundles [`open-pr.sh`](skills/vinta-derive-skills/resources/foundation-skills/open-pr-from-context/scripts/open-pr.sh). |
|
|
225
|
-
| `implement-plan` | always (generated) | Phase-by-phase plan execution. Generated from a template with project commands + branch / PR / co-author policy. |
|
|
226
|
-
| `
|
|
225
|
+
| `implement-plan` | always (generated) | Phase-by-phase plan execution. Thin **conductor**: parses the plan, resolves one `WORKROOT`, and runs a fixed pipeline per phase (`implement-phase` → `review-phase` → `integrate-phase`), tracking + reporting. Generated from a template with project commands + branch / PR / co-author policy. |
|
|
226
|
+
| `implement-phase` | always (unit) | Plan-execution sub-skill co-shipped with `implement-plan`: compose the implementer prompt, pick the model, spawn one implementer subagent for a single phase. |
|
|
227
|
+
| `review-phase` | always (unit) | Plan-execution sub-skill: the three-layer review (mechanical / plan-compliance / independent reviewer) + fix loop. Shared by `implement-plan`, `amend-plan`, and `systematic-debugging`. |
|
|
228
|
+
| `integrate-phase` | always (unit) | Plan-execution sub-skill: push the reviewed phase along the project's commit strategy + open the PR via context file. Under `commit_strategy = ask`, ships as `integrate-phase-stacked` + `integrate-phase-modular`. |
|
|
229
|
+
| `amend-plan` | always (generated) | History-rewriting companion to `implement-plan` — revises in-flight plans, amends prior-phase commits, force-pushes, rebases stacked downstream branches. Reuses `review-phase` + `implement-phase`'s shared prompt loop. |
|
|
227
230
|
| `systematic-debugging` | **opt-in** | Root-cause-first debugging with project-specific repro commands + MCP evidence-gathering (error tracking, traces, logs, metrics, alerts). Renders from a catalogue of observability MCP servers the user declares. |
|
|
228
231
|
| `add-e2e-test` | **opt-in** | Add an e2e test. Body covers e2e framework, page-object pattern, auth/storage-state, seed helpers, tenant scoping, screenshot conventions. |
|
|
229
232
|
| `add-env-var` | **opt-in** | Propagate a new env var through every layer (`.env.example`, build tool envPrefix, build cache hash, app config, AGENTS.md, CI, deploy injection). |
|
package/package.json
CHANGED
|
@@ -212,6 +212,26 @@
|
|
|
212
212
|
"description": "Provision a fully-runnable git worktree for parallel feature work — symlinks dep dirs, copies env files, forks dev / test DBs, namespaces docker-compose project + network, drops a summary YAML for mechanical teardown. Copy-verbatim foundation skill (bucket A). When `enabled`, project-level defaults (worktree root, deps strategy, compose network strategy) live under `skills.prepare-worktree`. Consumed by `implement-plan` when its Step 0 question (c) opts in — the orchestrator runs `prepare-worktree` once at the start of a plan run and threads the worktree path through every subagent's prompt so phases all stack inside the same isolated checkout.",
|
|
213
213
|
"type": "string",
|
|
214
214
|
"enum": ["enabled", "disabled"]
|
|
215
|
+
},
|
|
216
|
+
"thermo-nuclear-code-quality-review": {
|
|
217
|
+
"description": "Opt-in deep structural-maintainability audit of a diff — abstraction quality, giant files, spaghetti-condition growth — harsher than the standard per-phase review. Copy-verbatim foundation skill (bucket A). Read-only; hands each fix to the `fixer` agent. Invoked deliberately by the user, or escalated from the `review-phase` Layer 3 structural-simplification lens; never auto-run on every diff.",
|
|
218
|
+
"type": "string",
|
|
219
|
+
"enum": ["enabled", "disabled"]
|
|
220
|
+
},
|
|
221
|
+
"deslop-comments": {
|
|
222
|
+
"description": "Rewrite comments and doc blocks touched during the current task into Simple English — strip AI-slop vocabulary and negative framing, comment-only (no renames, no behavior change). Copy-verbatim foundation skill (bucket A), always shipped: the `review-phase` Layer 2 comment-hygiene check and fix loop depend on it. Set `disabled` only if a project deliberately opts out of the review flow's comment-hygiene step.",
|
|
223
|
+
"type": "string",
|
|
224
|
+
"enum": ["enabled", "disabled"]
|
|
225
|
+
},
|
|
226
|
+
"handoff": {
|
|
227
|
+
"description": "Write or consume a session-continuation handoff document under `.vinta-ai-workflows/handoffs/` so a fresh agent session (or a different agent / teammate) can resume in-flight work without re-deriving context. Copy-verbatim foundation skill (bucket A), always shipped — its body is fully project-agnostic. Set `disabled` only if a project deliberately opts out.",
|
|
228
|
+
"type": "string",
|
|
229
|
+
"enum": ["enabled", "disabled"]
|
|
230
|
+
},
|
|
231
|
+
"handoff-to-client": {
|
|
232
|
+
"description": "Generate a markdown API-change handoff document for client teams consuming an API-only repo — endpoints added/changed/deprecated/removed on the current branch vs the default branch, with request/response shapes, breaking-change flags, and per-platform migration notes. Template-rendered (bucket B) from `vinta-derive-skills/resources/handoff-to-client-template.md` and opt-in (bucket C) — only ships when the bootstrap interview confirms an API-only repo with separate client codebases. When `enabled`, project-level configuration lives under `skills.handoff-to-client` (client platforms, API style, spec path, output dir).",
|
|
233
|
+
"type": "string",
|
|
234
|
+
"enum": ["enabled", "disabled"]
|
|
215
235
|
}
|
|
216
236
|
}
|
|
217
237
|
},
|
|
@@ -250,6 +270,11 @@
|
|
|
250
270
|
"properties": {
|
|
251
271
|
"pause_between_phases": { "type": "boolean", "default": false },
|
|
252
272
|
"generate_inline_comments": { "type": "boolean", "default": false },
|
|
273
|
+
"full_test_suite": {
|
|
274
|
+
"description": "Default answer to Step 0 question (d) — what each phase's outer gate runs for tests. False (default) = quick path: the outer gate runs only the scoped test suite covering the apps/files the phase touched (new tests still pass individually in the inner loop). True = run the full repo test suite in every phase's outer gate, guarding against regressions in untouched code at the cost of slower phases. The repo-wide type/build gate runs every phase either way. Per-run prompt still asks; this is the suggested default shown.",
|
|
275
|
+
"type": "boolean",
|
|
276
|
+
"default": false
|
|
277
|
+
},
|
|
253
278
|
"use_worktree": {
|
|
254
279
|
"description": "Default answer to Step 0 question (c) — whether `implement-plan` should provision an isolated git worktree (via `prepare-worktree`) and run every phase's subagent inside it. False = run in the current checkout. True = create one shared worktree at the start of the plan run; all phase branches stack inside it. Per-run prompt still asks; this is the suggested default shown.",
|
|
255
280
|
"type": "boolean",
|
|
@@ -303,6 +328,38 @@
|
|
|
303
328
|
}
|
|
304
329
|
}
|
|
305
330
|
},
|
|
331
|
+
"handoff-to-client": {
|
|
332
|
+
"description": "Configuration for the `handoff-to-client` foundation skill. Required when `foundation_skills.handoff-to-client` is `enabled`; ignored otherwise. Rendered into the skill body at derive time.",
|
|
333
|
+
"type": "object",
|
|
334
|
+
"required": ["client_platforms"],
|
|
335
|
+
"additionalProperties": false,
|
|
336
|
+
"properties": {
|
|
337
|
+
"client_platforms": {
|
|
338
|
+
"description": "Free-form list of the client codebases/platforms that consume this repo's API, as the team names them (e.g. `iOS (Swift)`, `Android (Kotlin)`, `web SPA (React)`, `partner integrations`). Rendered into the skill's audience line and per-operation migration-notes instruction. Must be non-empty — an API-only repo with no named consumers has no handoff audience.",
|
|
339
|
+
"type": "array",
|
|
340
|
+
"items": { "type": "string", "minLength": 1 },
|
|
341
|
+
"uniqueItems": true,
|
|
342
|
+
"minItems": 1
|
|
343
|
+
},
|
|
344
|
+
"api_style": {
|
|
345
|
+
"description": "The API paradigm, free-form (e.g. `REST`, `GraphQL`, `gRPC`, `REST + webhooks`). Drives how the rendered skill names operations (method+path vs query/mutation vs service/rpc).",
|
|
346
|
+
"type": "string",
|
|
347
|
+
"minLength": 1,
|
|
348
|
+
"default": "REST"
|
|
349
|
+
},
|
|
350
|
+
"api_spec_path": {
|
|
351
|
+
"description": "Repo-relative path to a machine-readable API spec (OpenAPI file, GraphQL schema, proto dir) plus, ideally, the command that regenerates it — e.g. `docs/openapi.yaml (regenerate: make openapi)`. When set, the rendered skill diffs the regenerated spec between base and branch as its primary change-enumeration source. Omit when no spec exists; the skill then works from route/serializer code alone.",
|
|
352
|
+
"type": "string",
|
|
353
|
+
"minLength": 1
|
|
354
|
+
},
|
|
355
|
+
"output_dir": {
|
|
356
|
+
"description": "Directory where generated client-handoff documents land, repo-relative.",
|
|
357
|
+
"type": "string",
|
|
358
|
+
"minLength": 1,
|
|
359
|
+
"default": ".vinta-ai-workflows/client-handoffs"
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
},
|
|
306
363
|
"prepare-worktree": {
|
|
307
364
|
"description": "Configuration for the `prepare-worktree` foundation skill. Optional when `foundation_skills.prepare-worktree` is `enabled` — every field has a sensible default. Consumed by the skill at runtime to bias the per-worktree symlink-vs-copy-vs-fork decisions.",
|
|
308
365
|
"type": "object",
|
|
@@ -155,7 +155,7 @@ This is a load-bearing input for the rest of the bootstrap flow — surface ever
|
|
|
155
155
|
For each skill, also classify:
|
|
156
156
|
|
|
157
157
|
- `vinta-managed` — directory name starts with `vinta-` (installed by `vinta-ai-workflows`; can be left alone or refreshed via that CLI).
|
|
158
|
-
- `foundation-shape` — name matches the Vinta foundation set (`plan-feature`, `create-spec`, `create-qa-use-cases`, `implement-plan`, `add-e2e-test`, `add-env-var`).
|
|
158
|
+
- `foundation-shape` — name matches the Vinta foundation set (`plan-feature`, `create-spec`, `create-qa-use-cases`, `implement-plan`, `implement-phase`, `review-phase`, `integrate-phase`, `amend-plan`, `add-e2e-test`, `add-env-var`). `implement-phase` / `review-phase` / `integrate-phase` are the plan-execution sub-skills co-shipped with `implement-plan`.
|
|
159
159
|
- `project-custom` — anything else; written by the team.
|
|
160
160
|
|
|
161
161
|
**Sub-agents** — list every agent file with its name + description:
|
|
@@ -83,7 +83,7 @@ These bleed across sub-skills, so capture once now:
|
|
|
83
83
|
|
|
84
84
|
### D. Optional foundation skills
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
Seven skills are part of the foundation set but aren't always needed. Ask explicitly:
|
|
87
87
|
|
|
88
88
|
1. **`add-e2e-test`** — does the project have e2e tests (Playwright / Cypress / similar) or plan to add them? `AskUserQuestion` options: `Yes — already has them`, `Yes — planning to add`, `No — skip`. If yes, [vinta-derive-skills](../vinta-derive-skills/SKILL.md)'s **Optional — ask the user** bucket follows up to ask whether the user has a template or wants to draft from scratch. **This answer also governs `create-qa-use-cases` and the e2e content inside `plan-feature`**: on `No — skip`, set `foundation_skills.create-qa-use-cases: disabled` too — derive-skills won't ship `create-qa-use-cases` and strips `plan-feature`'s `<!-- e2e:start/end -->` regions so no-e2e projects carry zero Playwright / `QA_USE_CASES.md` / `pr-screenshots/` references. On either `Yes`, set both `add-e2e-test` and `create-qa-use-cases` to `enabled`.
|
|
89
89
|
2. **`add-env-var`** — does the project have a non-trivial env-var propagation flow (multiple files / build configs / CI updates per new var) or a single `.env` file is enough? `AskUserQuestion` options: `Yes — non-trivial flow`, `No — single .env is enough`. Skip if `No`.
|
|
@@ -112,7 +112,17 @@ Five skills are part of the foundation set but aren't always needed. Ask explici
|
|
|
112
112
|
- Do **not** seed the cache file at bootstrap. The first debug run preflights all configured servers and writes the file then. An empty / missing `.vinta-ai-workflows/cache.yaml` is a valid initial state.
|
|
113
113
|
- Mention to the user how to refresh: delete the file to re-preflight everything, or edit one entry's `status` to `dirty` to refresh that one server. Token rotated → cache will catch the auth error on the next call and flip the entry to `dirty` automatically.
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
6. **`thermo-nuclear-code-quality-review`** — does the team want an opt-in, deliberately harsh structural-maintainability audit available on demand (abstraction quality, giant files, spaghetti-condition growth), separate from the standard per-phase review? `AskUserQuestion` options: `Yes — enable`, `No — skip`. Recommend `Yes` for long-lived codebases where structural drift is a real cost, or teams that already run deep quality passes before merging large work. It ships as a user-invoked skill and is also the escalation target for the `review-phase` Layer 3 structural-simplification lens; it is never auto-run on every diff. No follow-up config — the body is project-agnostic.
|
|
116
|
+
|
|
117
|
+
7. **`handoff-to-client`** — is this an API-only repo whose consumers live in separate client codebases (mobile apps, SPAs, partner integrations) that need API changes documented for them? Ask **only when the inventory suggests an API-only shape** — backend framework with no co-located frontend app (no SPA package, no templates-rendered UI beyond an admin). `AskUserQuestion` options: `Yes — enable`, `No — skip`. Skip the question entirely (set `disabled`) for full-stack repos and monorepos that contain their own clients — there the API diff is visible to the client code in the same PR. When enabled, agents can generate a markdown API-change handoff document (endpoints added / changed / deprecated / removed vs the default branch, request/response shapes, breaking-change flags, per-platform migration notes) for client implementers who cannot read this repo.
|
|
118
|
+
|
|
119
|
+
**Follow-up only when `handoff-to-client` = Yes — client-handoff config.** Four short questions land under `skills.handoff-to-client.*`:
|
|
120
|
+
- **Client platforms.** Open prose → free-form string array, e.g. `iOS (Swift)`, `Android (Kotlin)`, `web SPA (React)`, `partner integrations`. Required, non-empty — this is the document's audience and drives the per-operation migration-notes sections.
|
|
121
|
+
- **API style.** `AskUserQuestion`: `REST`, `GraphQL`, `gRPC`, other (free-form). Auto-pick from the inventory when unambiguous (e.g. DRF routers → REST, graphene/strawberry → GraphQL); ask only when mixed.
|
|
122
|
+
- **API spec path.** Open prose. Repo-relative path to a machine-readable spec (OpenAPI file, GraphQL schema, proto dir) plus the command that regenerates it, if one exists (e.g. `docs/openapi.yaml (regenerate: make openapi)`). Cross-check the inventory for spec files the user forgot. Empty is fine — the rendered skill then enumerates changes from route/serializer code alone.
|
|
123
|
+
- **Output dir.** Default `.vinta-ai-workflows/client-handoffs`. Override if the team wants handoffs committed (e.g. `docs/api-changes/`) — note that the default lives under the gitignored `.vinta-ai-workflows/`, so docs there must be shared manually.
|
|
124
|
+
|
|
125
|
+
If the user answers "No" to any of the seven, that skill won't ship. If the user answers "Yes" to `add-e2e-test` / `add-env-var` but doesn't have a template, derive-skills drafts one via interview. `systematic-debugging` is always template-rendered — no per-project drafting interview, just the MCP-server inventory above. `add-one-off-script` is copied verbatim from [vinta-derive-skills/resources/foundation-skills/add-one-off-script/](../vinta-derive-skills/resources/foundation-skills/add-one-off-script/) — its body is project-agnostic; the per-project variability lives in the `skills.add-one-off-script.*` config block above and in env vars consumed at runtime. `prepare-worktree` is also copied verbatim from [vinta-derive-skills/resources/foundation-skills/prepare-worktree/](../vinta-derive-skills/resources/foundation-skills/prepare-worktree/) — same pattern: project-agnostic body, per-project defaults under `skills.prepare-worktree.*`. `thermo-nuclear-code-quality-review` is copied verbatim from [vinta-derive-skills/resources/foundation-skills/thermo-nuclear-code-quality-review/](../vinta-derive-skills/resources/foundation-skills/thermo-nuclear-code-quality-review/) with no follow-up config — its body is fully project-agnostic. `handoff-to-client` is always template-rendered from [vinta-derive-skills/resources/handoff-to-client-template.md](../vinta-derive-skills/resources/handoff-to-client-template.md) — no per-project drafting interview, just the client-handoff config follow-up above.
|
|
116
126
|
|
|
117
127
|
### E. Existing AI artifacts (per-artifact disposition)
|
|
118
128
|
|
|
@@ -132,7 +142,7 @@ For each artifact, read it (frontmatter + body), then ask the user via `AskUserQ
|
|
|
132
142
|
- `Keep in current vendor path, don't touch` — leaves it where it is. AGENTS.md may reference it; downstream skill setup won't manage it.
|
|
133
143
|
- `Drop` — delete (rare; usually the user wants to migrate).
|
|
134
144
|
|
|
135
|
-
Foundation-shape skills (name matches `plan-feature`, `create-spec`, `create-qa-use-cases`, `implement-plan`, `add-e2e-test`, `add-env-var`, `add-one-off-script`, `prepare-worktree`) get an extra option: `Replace with Vinta foundation version` — overwrites with the canonical foundation content, preserving the user's name. Useful when the existing version is stale.
|
|
145
|
+
Foundation-shape skills (name matches `plan-feature`, `create-spec`, `create-qa-use-cases`, `implement-plan`, `implement-phase`, `review-phase`, `integrate-phase`, `amend-plan`, `add-e2e-test`, `add-env-var`, `add-one-off-script`, `prepare-worktree`, `thermo-nuclear-code-quality-review`, `deslop-comments`, `handoff`, `handoff-to-client`) get an extra option: `Replace with Vinta foundation version` — overwrites with the canonical foundation content, preserving the user's name. Useful when the existing version is stale. (`implement-phase` / `review-phase` / `integrate-phase` are the plan-execution sub-skills co-shipped with `implement-plan`; replace them as a unit.)
|
|
136
146
|
|
|
137
147
|
- **Sub-agents** (each under any vendor `agents/` dir):
|
|
138
148
|
- `Migrate to ai-tools/agents/<name>.yaml` — converts vendor-specific format → canonical YAML; `setup-ai-tools.mjs` re-emits per-vendor copies.
|
|
@@ -250,6 +260,10 @@ foundation_skills:
|
|
|
250
260
|
systematic-debugging: <Optional foundation skills → systematic-debugging answer → enabled | disabled>
|
|
251
261
|
add-one-off-script: <Optional foundation skills → add-one-off-script answer → enabled | disabled>
|
|
252
262
|
prepare-worktree: <Optional foundation skills → prepare-worktree answer → enabled | disabled>
|
|
263
|
+
thermo-nuclear-code-quality-review: <Optional foundation skills → thermo-nuclear-code-quality-review answer → enabled | disabled>
|
|
264
|
+
deslop-comments: enabled # always ships — review-phase Layer 2 comment-hygiene + fix loop depend on it
|
|
265
|
+
handoff: enabled # always ships — project-agnostic session-continuation handoff docs
|
|
266
|
+
handoff-to-client: <Optional foundation skills → handoff-to-client answer → enabled | disabled; only asked for API-only repos>
|
|
253
267
|
|
|
254
268
|
foundation_agents:
|
|
255
269
|
implementer: enabled
|
|
@@ -263,6 +277,7 @@ run_options:
|
|
|
263
277
|
implement-plan:
|
|
264
278
|
pause_between_phases: false
|
|
265
279
|
generate_inline_comments: false
|
|
280
|
+
full_test_suite: false # default: each phase's outer gate runs scoped tests only; set true to run the full suite every phase
|
|
266
281
|
use_worktree: <Optional foundation skills → prepare-worktree follow-up → default for Step 0 question (c); false unless team opted in>
|
|
267
282
|
amend-plan:
|
|
268
283
|
blast_radius_signal_threshold: 2
|
|
@@ -272,6 +287,13 @@ skills:
|
|
|
272
287
|
systematic-debugging:
|
|
273
288
|
observability_mcp_servers: <systematic-debugging follow-up — free-form array of MCP server identifiers, e.g. [sentry, datadog, our-internal-traces]>
|
|
274
289
|
|
|
290
|
+
# Only emit this block when foundation_skills.handoff-to-client = enabled.
|
|
291
|
+
handoff-to-client:
|
|
292
|
+
client_platforms: <handoff-to-client follow-up — free-form array, e.g. [iOS (Swift), Android (Kotlin), web SPA (React)]>
|
|
293
|
+
api_style: <handoff-to-client follow-up — REST | GraphQL | gRPC | free-form>
|
|
294
|
+
api_spec_path: <handoff-to-client follow-up — repo-relative spec path + regen command; omit when none>
|
|
295
|
+
output_dir: .vinta-ai-workflows/client-handoffs
|
|
296
|
+
|
|
275
297
|
# Only emit this block when foundation_skills.prepare-worktree = enabled.
|
|
276
298
|
prepare-worktree:
|
|
277
299
|
worktree_root: <prepare-worktree follow-up — `.claude/worktrees` | `../<repo>-wt-`>
|
|
@@ -340,17 +362,24 @@ ai-tools/
|
|
|
340
362
|
│ ├── plan-feature/SKILL.md ← always (copied verbatim from derive-skills resources)
|
|
341
363
|
│ ├── create-spec/SKILL.md ← always (copied verbatim)
|
|
342
364
|
│ ├── create-qa-use-cases/SKILL.md ← always (copied verbatim)
|
|
343
|
-
│ ├──
|
|
344
|
-
│ ├──
|
|
365
|
+
│ ├── deslop-comments/SKILL.md ← always (copied verbatim; review-phase Layer 2 comment-hygiene + fix loop depend on it)
|
|
366
|
+
│ ├── handoff/SKILL.md ← always (copied verbatim; session-continuation handoff docs under .vinta-ai-workflows/handoffs/)
|
|
367
|
+
│ ├── implement-plan/SKILL.md ← always (conductor; generated from template, project-specific)
|
|
368
|
+
│ ├── implement-phase/SKILL.md ← always (plan-execution unit; co-shipped with implement-plan)
|
|
369
|
+
│ ├── review-phase/SKILL.md ← always (plan-execution unit; shared by implement-plan / amend-plan / systematic-debugging)
|
|
370
|
+
│ ├── integrate-phase/SKILL.md ← always (plan-execution unit; push + PR. Under commit_strategy=ask: integrate-phase-stacked/ + integrate-phase-modular/ instead)
|
|
371
|
+
│ ├── amend-plan/SKILL.md ← always (conductor; generated from template, project-specific)
|
|
345
372
|
│ ├── add-e2e-test/SKILL.md ← optional — only if user opts in
|
|
346
373
|
│ ├── add-env-var/SKILL.md ← optional — only if user opts in
|
|
347
374
|
│ ├── systematic-debugging/SKILL.md ← optional — only if user opts in (template-rendered)
|
|
375
|
+
│ ├── handoff-to-client/SKILL.md ← optional — only for API-only repos, if user opts in (template-rendered; config under skills.handoff-to-client.*)
|
|
348
376
|
│ ├── add-one-off-script/ ← optional — only if user opts in (verbatim copy + bundled BaseOneOffScript + LocalRuntime templates)
|
|
349
377
|
│ │ ├── SKILL.md
|
|
350
378
|
│ │ └── resources/
|
|
351
379
|
│ │ ├── one_off_script_base.py
|
|
352
380
|
│ │ └── one_off_script_base.ts
|
|
353
381
|
│ ├── prepare-worktree/SKILL.md ← optional — only if user opts in (verbatim copy; project-agnostic body, defaults under skills.prepare-worktree.*)
|
|
382
|
+
│ ├── thermo-nuclear-code-quality-review/SKILL.md ← optional — only if user opts in (verbatim copy; deep structural-maintainability audit, escalation target for review-phase Layer 3)
|
|
354
383
|
│ ├── run-one-off-script-django/ ← optional sister skill — only when stack matches + user supplies template (authors Jupyter notebook / mgmt command runner + JupyterRuntime / DjangoMgmtRuntime adapter in the per-script folder)
|
|
355
384
|
│ ├── run-one-off-script-medplum/ ← optional sister skill — only when stack matches + user supplies template (authors Medplum bot + MedplumBotRuntime adapter in the per-script folder)
|
|
356
385
|
│ └── <stack-specific skills>/SKILL.md ← only if user supplied templates
|
|
@@ -379,9 +408,9 @@ Plus the symlinks + per-vendor generated files, set up by the install step.
|
|
|
379
408
|
|
|
380
409
|
Foundation skills break into three buckets — see [vinta-derive-skills](../vinta-derive-skills/SKILL.md) for the full mechanics:
|
|
381
410
|
|
|
382
|
-
- **Always copy verbatim**: `plan-feature`, `create-spec`, `create-qa-use-cases`. Bundled with the bootstrap skill set; project-agnostic enough to ship as-is (with light path scrubs).
|
|
383
|
-
- **Always generate**: `implement-plan`, `amend-plan
|
|
384
|
-
- **Optional, ask first**: `add-e2e-test`, `add-env-var`, `systematic-debugging`, `add-one-off-script`, `prepare-worktree`. Skipped by default; orchestrator asks via `AskUserQuestion` whether the project has the relevant flow at all. `add-e2e-test` / `add-env-var`: if yes + user has a template → copy + adapt; if yes + no template → draft from scratch via interview; if no → don't ship. `systematic-debugging`: if yes → render the bundled template plus the per-tool MCP catalogue blocks for the observability tools selected in its follow-up; if no → don't ship. `add-one-off-script`: if yes → copy the bundled SKILL.md verbatim plus the language-specific `BaseOneOffScript` template (`one_off_script_base.py` / `one_off_script_base.ts`) chosen via its follow-up; if no → don't ship. `prepare-worktree`: if yes → copy the bundled SKILL.md verbatim, populate `skills.prepare-worktree.*` defaults from its follow-ups, and (when the user opted in via the worktree-default follow-up) flip `run_options.implement-plan.use_worktree` to `true` so `implement-plan`'s Step 0 question (c) defaults to yes; if no → don't ship.
|
|
411
|
+
- **Always copy verbatim**: `plan-feature`, `create-spec`, `create-qa-use-cases`, `deslop-comments`, `handoff`. Bundled with the bootstrap skill set; project-agnostic enough to ship as-is (with light path scrubs). `deslop-comments` always ships because `review-phase`'s Layer 2 comment-hygiene check + fix loop dispatch it. `handoff` always ships because its session-continuation body is fully project-agnostic.
|
|
412
|
+
- **Always generate**: the plan-execution unit — `implement-plan` (conductor) + its co-shipped sub-skills `implement-phase` / `review-phase` / `integrate-phase`, plus `amend-plan` (conductor). Bodies have too much project-specific content (test commands, branch convention, PR + co-author policy, agent dispatch) — generated from parameterized templates + shared partials using interview answers + inventory. The sub-skills are not independently opt-in; they always ship with the conductors.
|
|
413
|
+
- **Optional, ask first**: `add-e2e-test`, `add-env-var`, `systematic-debugging`, `add-one-off-script`, `prepare-worktree`, `thermo-nuclear-code-quality-review`, `handoff-to-client`. Skipped by default; orchestrator asks via `AskUserQuestion` whether the project has the relevant flow at all. `add-e2e-test` / `add-env-var`: if yes + user has a template → copy + adapt; if yes + no template → draft from scratch via interview; if no → don't ship. `systematic-debugging`: if yes → render the bundled template plus the per-tool MCP catalogue blocks for the observability tools selected in its follow-up; if no → don't ship. `add-one-off-script`: if yes → copy the bundled SKILL.md verbatim plus the language-specific `BaseOneOffScript` template (`one_off_script_base.py` / `one_off_script_base.ts`) chosen via its follow-up; if no → don't ship. `prepare-worktree`: if yes → copy the bundled SKILL.md verbatim, populate `skills.prepare-worktree.*` defaults from its follow-ups, and (when the user opted in via the worktree-default follow-up) flip `run_options.implement-plan.use_worktree` to `true` so `implement-plan`'s Step 0 question (c) defaults to yes; if no → don't ship. `thermo-nuclear-code-quality-review`: if yes → copy the bundled SKILL.md verbatim (no follow-up config); if no → don't ship. `handoff-to-client`: asked only for API-only repos; if yes → render the bundled template using `skills.handoff-to-client.*` (client platforms, API style, spec path, output dir) from its follow-ups; if no → don't ship.
|
|
385
414
|
|
|
386
415
|
Stack-specific skills + agents land in the target only when the user provides templates for them. If they don't have templates yet, the orchestrator records the detected stacks + skill categories as a TODO list the user can address later via [vinta-derive-skills](../vinta-derive-skills/SKILL.md) / [vinta-derive-subagents](../vinta-derive-subagents/SKILL.md) standalone runs.
|
|
387
416
|
|