nitm-ai-dev-toolkit 3.0.22 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/CHANGELOG.md +15 -2
  2. package/README.md +56 -4
  3. package/bin/cli.js +29 -14
  4. package/package.json +3 -2
  5. package/src/monorepo/.claude/commands/ponytail-audit.md +4 -6
  6. package/src/monorepo/.claude/commands/ponytail-debt.md +3 -5
  7. package/src/monorepo/.claude/commands/ponytail-gain.md +2 -4
  8. package/src/monorepo/.claude/commands/ponytail-help.md +2 -4
  9. package/src/monorepo/.claude/commands/ponytail-review.md +3 -5
  10. package/src/monorepo/.claude/commands/ponytail.md +3 -5
  11. package/src/monorepo/.claude/prompt-snippets/bootstrap-patch.md +37 -17
  12. package/src/monorepo/.claude/prompt-snippets/bootstrap-upgrade.md +76 -51
  13. package/src/monorepo/.claude/prompt-snippets/bootstrap.md +130 -94
  14. package/src/monorepo/.codex/config.toml +6 -0
  15. package/src/monorepo/.github/prompts/review-staged.prompt.md +1 -1
  16. package/src/monorepo/.opencode/agents/admin-portal.md +10 -4
  17. package/src/monorepo/.opencode/agents/api-specialist.md +10 -4
  18. package/src/monorepo/.opencode/agents/backend-architect.md +10 -4
  19. package/src/monorepo/.opencode/agents/documenter.md +10 -4
  20. package/src/monorepo/.opencode/agents/feature-builder.md +13 -5
  21. package/src/monorepo/.opencode/agents/frontend-developer.md +10 -4
  22. package/src/monorepo/.opencode/agents/green.md +10 -4
  23. package/src/monorepo/.opencode/agents/implementer.md +10 -4
  24. package/src/monorepo/.opencode/agents/planner.md +10 -4
  25. package/src/monorepo/.opencode/agents/red.md +10 -4
  26. package/src/monorepo/.opencode/agents/refactor.md +10 -4
  27. package/src/monorepo/.opencode/agents/researcher.md +10 -4
  28. package/src/monorepo/.opencode/agents/reviewer.md +10 -4
  29. package/src/monorepo/.opencode/agents/tdd.md +13 -5
  30. package/src/monorepo/.opencode/opencode.jsonc +8 -10
  31. package/src/monorepo/AGENTS.md +16 -0
  32. package/src/monorepo/CLAUDE.md +1 -1
  33. package/src/monorepo/README.md +22 -0
  34. package/src/repo/.claude/agents/documenter.agent.md +1 -1
  35. package/src/repo/.claude/agents/planner.agent.md +1 -1
  36. package/src/repo/.claude/agents/researcher.agent.md +1 -1
  37. package/src/repo/.claude/agents/reviewer.agent.md +1 -1
  38. package/src/repo/.claude/commands/ponytail-audit.md +4 -6
  39. package/src/repo/.claude/commands/ponytail-debt.md +3 -5
  40. package/src/repo/.claude/commands/ponytail-gain.md +2 -4
  41. package/src/repo/.claude/commands/ponytail-help.md +2 -4
  42. package/src/repo/.claude/commands/ponytail-review.md +3 -5
  43. package/src/repo/.claude/commands/ponytail.md +3 -5
  44. package/src/repo/.claude/prompt-snippets/bootstrap-patch.md +37 -17
  45. package/src/repo/.claude/prompt-snippets/bootstrap-upgrade.md +87 -77
  46. package/src/repo/.claude/prompt-snippets/bootstrap.md +129 -125
  47. package/src/repo/.codex/config.toml +6 -0
  48. package/src/repo/.opencode/agents/admin-portal.md +10 -4
  49. package/src/repo/.opencode/agents/api-specialist.md +10 -4
  50. package/src/repo/.opencode/agents/backend-architect.md +10 -4
  51. package/src/repo/.opencode/agents/documenter.md +10 -4
  52. package/src/repo/.opencode/agents/feature-builder.md +13 -5
  53. package/src/repo/.opencode/agents/frontend-developer.md +10 -4
  54. package/src/repo/.opencode/agents/green.md +10 -4
  55. package/src/repo/.opencode/agents/implementer.md +10 -4
  56. package/src/repo/.opencode/agents/planner.md +10 -4
  57. package/src/repo/.opencode/agents/red.md +10 -4
  58. package/src/repo/.opencode/agents/refactor.md +10 -4
  59. package/src/repo/.opencode/agents/researcher.md +10 -4
  60. package/src/repo/.opencode/agents/reviewer.md +10 -4
  61. package/src/repo/.opencode/agents/tdd.md +13 -5
  62. package/src/repo/.opencode/opencode.jsonc +8 -10
  63. package/src/repo/AGENTS.md +16 -0
  64. package/src/repo/CLAUDE.md +1 -1
  65. package/src/repo/README.md +22 -0
  66. package/src/monorepo/.opencode/plugins/ponytail.mjs +0 -93
  67. package/src/repo/.opencode/plugins/ponytail.mjs +0 -93
@@ -1,12 +1,32 @@
1
1
  # Bootstrap Upgrade — Monorepo
2
2
 
3
- Migrate this monorepo's AI instruction files from the pre-3.0 inline pattern to the 3.0+ snippet-based architecture.
3
+ Upgrade this monorepo to toolkit 4.0.0, including native OpenCode V2 for confirmed OpenCode users. For pre-3.0 installations, also migrate inline content to snippet-based architecture. Only modify confirmed harness targets; preserve unrelated harness/Codex behavior.
4
+
5
+ ## OpenCode version preflight (before any changes)
6
+
7
+ - Confirm OpenCode use from actual session/runtime evidence or ask the user; directory presence alone is not proof. If only other harnesses are used, skip this preflight and all OpenCode steps.
8
+ - For confirmed OpenCode use, run `opencode --version` before any project writes. Trim output and parse numeric major/minor/patch components, accepting an optional leading `v`; toolkit 4.x requires `major >= 2`.
9
+ - If OpenCode V1 (`major < 2`) is detected, **STOP** before customizing/migrating OpenCode files or writing `.toolkit-version` as `4.0.0`. Ask the user to upgrade OpenCode to V2 or remain on toolkit 3.x.
10
+ - If the CLI is missing, fails, or output is unparseable, **STOP OpenCode steps** and leave the version marker unchanged; ask the user to confirm/install a supported OpenCode version, then rerun this check. Never assume V2.
11
+ - If oh-my-opencode-slim >=3.0.0 is used or planned, require OpenCode >=2.0.7 (compare version components numerically); otherwise **STOP** before changes and ask to upgrade. Proceed only after this gate passes.
12
+
13
+ ## Toolkit version routing (before parallel dispatch)
14
+
15
+ Read `.toolkit-version` and select the route before dispatching agents or changing files; apply only confirmed harness scopes:
16
+
17
+ - **>=4.0.0**: Use bootstrap-patch and **STOP** this upgrade without rewrites or version marking.
18
+ - **v3 (`3.x`)**: **Skip Steps 2–6 and 8–10.** Run only the relevant native OpenCode migration in Step 7 (confirmed OpenCode use only), then applicable approved merge/validation/version/report steps 11–15. Preserve existing snippet bodies/frontmatter and unrelated harness files.
19
+ - **Pre-3.0 or missing marker**: Steps 2–6 and applicable approved legacy steps 8–10 require a verified legacy inline installation. A missing marker alone is not legacy evidence; if snippets already exist or the installed version cannot be verified, **STOP** and ask rather than extracting/rewriting them. Back up before legacy conversion and preserve existing customizations.
20
+ - **Invalid or unverified version**: **STOP** and ask; never guess a route or downgrade.
21
+
22
+ ## OpenCode migration guardrails
23
+
24
+ Back up V1; native-converted files are incompatible with V1. Preserve models/providers/user-global plugins. Templates register the author's native V2 package `@dietrichgebert/ponytail@4.12.0`; obsolete toolkit-local Ponytail copies are replaced only after backup and approval (Step 7), with no API port or bridge. Keep `opentmux` commented as V1-only. Only with approval, merge pinned `"plugins": ["oh-my-opencode-slim@3.0.0"]` locally without replacing other registrations. Slim's separate strict schema retains `prompt`/`permission`/`variant`; do not host-migrate it or silently upgrade the separate external starter. Activate on the next run/restart; plugin/runtime integration is untested and publishing 4.0.0 has not been executed.
4
25
 
5
26
  ## Orchestrator Checkpoint
6
27
 
7
28
  > **🛑 Before starting**: This command involves reading, extracting, and rewriting many files across multiple directories.
8
- > Dispatch parallel subagents for independent file groups (`.claude/`, `.github/`, `.cursor/`, `.opencode/`).
9
- > Steps 3-6 can run in parallel per directory. Steps 7-15 are sequential.
29
+ > Complete version routing above before parallel dispatch; only the verified legacy route may dispatch Steps 3–6, for confirmed harnesses. Applicable Steps 7–15 are sequential.
10
30
 
11
31
  ## Usage
12
32
 
@@ -25,9 +45,7 @@ Migrate this monorepo's AI instruction files from the pre-3.0 inline pattern to
25
45
 
26
46
  1. **Confirm monorepo structure**: Verify `apps/` and `packages/` directories exist at root. If not, abort and suggest using the single-repo upgrade command instead.
27
47
 
28
- 2. **Check existing version**: Read `.toolkit-version` if it exists.
29
- - If version is `>= 3.0.0` and snippet directories exist → **abort**: "Already on v3.0+. No migration needed."
30
- - If version is `< 3.0.0` or missing → proceed.
48
+ 2. **Check existing version**: Apply the route selected above; inventory and confirm only its applicable steps and confirmed harness targets.
31
49
 
32
50
  3. **Detect build system** (for CLAUDE.md update in Step 10):
33
51
  - `turbo.json` → Turborepo
@@ -53,17 +71,17 @@ Migrate this monorepo's AI instruction files from the pre-3.0 inline pattern to
53
71
  5. **Present summary and ask for confirmation**:
54
72
 
55
73
  ```markdown
56
- ## 🔄 Monorepo Upgrade: Pre-3.0 → v3.0.0 (Snippet Architecture)
74
+ ## 🔄 Monorepo Upgrade: toolkit v4.0.0
57
75
 
58
- ### What will change
76
+ **Selected route**: verified legacy | v3 native OpenCode
59
77
 
60
- - Create `.claude/rules-snippets/`, `.claude/prompt-snippets/`, `.claude/agents-snippets/`
61
- - Extract content from {{N}} files into snippet files
62
- - Convert originals to thin wrappers referencing snippets
63
- - Create `.opencode/` directory with thin wrappers
64
- - Clean up duplicate skill directories
65
- - Update CLAUDE.md with multi-tool sections
66
- - Write `.toolkit-version` with `3.0.0`
78
+ ### What will change (omit skipped steps for the selected route)
79
+
80
+ - Verified legacy only: create missing snippet directories, extract inline content from {{N}} files, and convert confirmed harness wrappers (Steps 2–6)
81
+ - Confirmed OpenCode only: merge native V2 host files and approved missing wrappers (Step 7)
82
+ - Verified legacy only: approved hook installation and verified identical duplicate skill cleanup (Steps 8–10); preserve custom skills
83
+ - Merge only applicable missing documentation and validate the selected route; v3 keeps existing snippet bodies/frontmatter unchanged
84
+ - Write `.toolkit-version` with `4.0.0` after the approved migration
67
85
 
68
86
  ### Monorepo-specific changes
69
87
 
@@ -76,6 +94,8 @@ Migrate this monorepo's AI instruction files from the pre-3.0 inline pattern to
76
94
 
77
95
  ### Step 2: Create Snippet Directories
78
96
 
97
+ **Steps 2–6 are verified-legacy-only.** Skip this entire block for v3; never extract or rewrite existing snippet bodies/frontmatter. Process only confirmed harness targets.
98
+
79
99
  Create these directories if they don't exist:
80
100
 
81
101
  ```bash
@@ -233,27 +253,29 @@ Follow the rules defined in [.claude/rules-snippets/{{NAME}}.md](../../.claude/r
233
253
  2. If no matching snippet: extract body → create `.claude/agents-snippets/<name>.md`
234
254
  3. Replace body with thin wrapper referencing `../../.claude/agents-snippets/{{NAME}}.md`
235
255
 
236
- ### Step 7: Create .opencode/ Directory
256
+ ### Step 7: Create .opencode/ Directory (confirmed OpenCode use only)
257
+
258
+ For the v3 route, merge only relevant native OpenCode host fields; preserve existing wrapper bodies, modes, unrelated frontmatter, and shared snippet bodies/frontmatter. The wrapper examples below apply only to approved missing files, not replacement of existing wrappers.
237
259
 
238
- 1. Create `.opencode/opencode.jsonc` using only supported schema keys:
260
+ 1. Merge `.opencode/opencode.jsonc` using native V2 fields:
239
261
 
240
262
  ```json
241
263
  {
242
- "$schema": "https://opencode.ai/config.json",
243
- "instructions": ["AGENTS.md", ".opencode/rules/*.md"],
244
- "skills": {
245
- "paths": [".agents/skills/**/*.md", ".claude/skills/**/*.md"]
246
- },
247
- "lsp": true
264
+ "$schema": "https://opencode.ai/config.json",
265
+ "instructions": ["AGENTS.md", ".opencode/rules/*.md"],
266
+ "skills": [".agents/skills"],
267
+ "plugins": ["@dietrichgebert/ponytail@4.12.0"],
268
+ "lsp": true
248
269
  }
249
270
  ```
250
271
 
251
- **⚠️ Schema Validation:** Only use supported top-level keys from `https://opencode.ai/config.json`. Do NOT add unsupported keys like `rules`, `commands`, or `agents` as top-level entries — OpenCode discovers these via the `.opencode/` directory structure and the `instructions`/`skills` config arrays.
272
+ Follow official V2 [migration](https://opencode.ai/v2/docs/migrate-v1), [config](https://opencode.ai/v2/docs/config), [agents](https://opencode.ai/v2/docs/agents), and [plugins](https://opencode.ai/v2/docs/build/plugins) docs. The published schema may describe V1; do not use it or a V1 API fetch as native V2 validation authority. Use `agents`/JSON `system` (Markdown bodies for file agents), `request.body.temperature`, ordered `permissions` (`action`/`resource`/`effect`, `shell`/`subagent`, last match wins), `commands`/`subagent`, `plugins` with `{ "package": "…", "options": {} }`, skill-directory arrays, and `mcp.servers` with inverse `disabled` and `timeout.catalog`/`timeout.execution`.
252
273
 
253
- **Supported top-level keys:** `$schema`, `instructions`, `skills`, `agent`, `default_agent`, `model`, `small_model`, `provider`, `mcp`, `tools`, `permission`, `lsp`, `formatter`, `server`, `shell`, `command`, `plugin`, `watcher`, `snapshot`, `share`, `autoupdate`, `compaction`, `attachment`, `logLevel`, `disabled_providers`, `enabled_providers`, `tool_output`, `enterprise`, `experimental`
274
+ `instructions` entries are accepted but not loaded; ambient root/nested `AGENTS.md` works. `@refs` are ordinary text, not attachments: wrappers must explicitly tell agents to read referenced snippets. `request.body.temperature` remains in config, but the current runner does not send it. Preserve `lsp: true`; use workspace lint/typecheck/compiler commands (no current V2 LSP tools/diagnostics). `--env opencode` supplies minimal shared references without other harness activation. Verify using installed V2 after the next run/restart; report only checks actually run.
254
275
 
255
- 2. **Copy OpenCode plugins**:
256
- - Copy any `.opencode/plugins/*.mjs` files from the template
276
+ 2. **Replace obsolete toolkit Ponytail (backup and approval only)**:
277
+ - Back up the local config and known obsolete toolkit-owned `.opencode/plugins/ponytail.js`, `.opencode/plugins/ponytail.mjs`, and `.opencode/plugins/ponytail.ts` copies; obtain approval before removing only those copies. Preserve unrelated local plugins.
278
+ - Merge/deduplicate the author's native V2 `@dietrichgebert/ponytail@4.12.0` package in the local `plugins` array where appropriate, preserving other registrations/options. Do not edit global config or overwrite global plugins. Keep `opentmux` commented as V1-only; do not copy local Ponytail source, port APIs, or introduce bridges. Native local discovery needs no duplicate explicit registration; runtime integration remains untested.
257
279
 
258
280
  3. Create `.opencode/commands/*.md` — one thin wrapper per `.claude/commands/*.md`:
259
281
 
@@ -265,7 +287,7 @@ Follow the rules defined in [.claude/rules-snippets/{{NAME}}.md](../../.claude/r
265
287
 
266
288
  # {{TITLE}}
267
289
 
268
- @.claude/prompt-snippets/{{NAME}}.md
290
+ Read and follow `.claude/prompt-snippets/{{NAME}}.md` before executing this command.
269
291
  ```
270
292
 
271
293
  4. Create `.opencode/rules/*.md` — one thin wrapper per `.claude/rules/*.md`:
@@ -273,7 +295,7 @@ Follow the rules defined in [.claude/rules-snippets/{{NAME}}.md](../../.claude/r
273
295
  ```markdown
274
296
  # {{TITLE}}
275
297
 
276
- @.claude/rules-snippets/{{NAME}}.md
298
+ Read and follow `.claude/rules-snippets/{{NAME}}.md` when these standards apply.
277
299
  ```
278
300
 
279
301
  5. Create `.opencode/agents/*.md` — one thin wrapper per `.claude/agents/*.agent.md`:
@@ -286,7 +308,7 @@ Follow the rules defined in [.claude/rules-snippets/{{NAME}}.md](../../.claude/r
286
308
 
287
309
  # {{AGENT_NAME}}
288
310
 
289
- @.claude/agents-snippets/{{NAME}}.md
311
+ Read and follow `.claude/agents-snippets/{{NAME}}.md` before performing this role.
290
312
  ```
291
313
 
292
314
  ### Step 8: Install Pre-Commit Hook
@@ -317,16 +339,14 @@ Use `git commit --no-verify` to bypass.
317
339
 
318
340
  ### Step 10: Clean Up Duplicate Skills
319
341
 
320
- - Copy `.agents/rules/*.md` from the template
321
-
322
- 1. Keep `.agents/skills/` as the source of truth
323
- 2. For each of `.claude/skills/`, `.cursor/skills/`, `.github/skills/`:
324
- - If directory exists, remove all subdirectories except `README.md`
325
- 3. Remove any nested duplicates: `subagent-driven-development/subagent-driven-development/`
342
+ - Merge approved `.agents/rules/*.md` additions without overwriting custom content; skip this step on the v3 route.
343
+ - Preserve custom, unmatched, modified, and nested skill content; name or location alone does not prove duplication.
344
+ - A candidate in a confirmed harness skill directory may be removed only after the same-name canonical `.agents/skills/<skill-name>/` copy exists and a complete recursive comparison (`diff -qr` or equivalent, including nested content) proves them identical. Missing canonical copy, differences, or comparison errors mean preserve and report, not delete.
345
+ - Back up the verified identical duplicate and obtain explicit approval before removing only that duplicate; keep the canonical copy intact. No bulk deletion or name/location-based nested cleanup.
326
346
 
327
347
  ### Step 11: Update CLAUDE.md
328
348
 
329
- Read the existing `CLAUDE.md` and add missing sections:
349
+ If `CLAUDE.md` is an applicable confirmed harness target, merge only missing relevant sections; preserve existing bodies/frontmatter:
330
350
 
331
351
  1. **Multi-tool sections** — add if missing:
332
352
  - GitHub Copilot section (references `.github/instructions/`, `.github/prompts/`, `.github/agents/`)
@@ -354,32 +374,37 @@ Read the existing `CLAUDE.md` and add missing sections:
354
374
  - `.cursor/rules/*.mdc` → `.claude/rules-snippets/`
355
375
  - `.cursor/commands/*.md` → `.claude/prompt-snippets/`
356
376
  - `.cursor/agents/*.agent.md` → `.claude/agents-snippets/`
357
- - `.opencode/{commands,rules,agents}/*.md` → `@.claude/{snippet-type}/`
377
+ - `.opencode/{commands,rules,agents}/*.md` → explicit read instructions for `.claude/{snippet-type}/` (no automatic `@ref` attachment)
358
378
  ```
359
379
 
360
380
  ### Step 12: Create .toolkit-version File
361
381
 
362
- Write `3.0.0` to `.toolkit-version`.
382
+ Write `4.0.0` to `.toolkit-version` only after the approved migration and OpenCode preflight pass (or OpenCode is confirmed out of scope).
363
383
 
364
384
  ### Step 13: Validation
365
385
 
366
- Run these checks (parallelizable):
386
+ Run only checks applicable to the selected route and confirmed harnesses (parallelizable); on v3 compare retained snippet bodies/frontmatter to backups:
367
387
 
368
388
  1. **Snippet completeness**: Every `.md` file in `.claude/rules-snippets/`, `.claude/prompt-snippets/`, `.claude/agents-snippets/` must have content (not empty)
369
389
  2. **Thin wrapper correctness**: Every thin wrapper must contain a reference to its snippet with the correct relative path
370
390
  3. **Monorepo `paths:` preserved**: For files that had `paths:` frontmatter in `.claude/rules/`, verify the snippet also contains `paths:`
371
391
  4. **No lost placeholders**: Scan all snippet files — any `{{` in original must appear in snippet
372
392
  5. **No broken paths**: Verify all relative paths resolve correctly (e.g., `../rules-snippets/` from `.claude/rules/`)
393
+ 6. **Custom skills preserved**: Only approved verified identical duplicates were removed; canonical copies and custom, unmatched, and nested content remain
373
394
 
374
395
  If `--verbose`: log each check result.
375
396
 
376
397
  ### Step 14: Generate Upgrade Report
377
398
 
399
+ Include only operations/checks actually performed for the selected route; omit legacy extraction/cleanup rows on v3 and never pre-mark skipped checks as passed.
400
+
378
401
  ```markdown
379
- ## ✅ Monorepo Upgrade Complete: v3.0.0 (Snippet Architecture)
402
+ ## ✅ Monorepo Upgrade Complete: v4.0.0
380
403
 
381
404
  ### Build System: {{BUILD_SYSTEM}}
382
405
 
406
+ **Selected route**: verified legacy | v3 native OpenCode
407
+
383
408
  ### Directories Created
384
409
 
385
410
  | Directory | Files |
@@ -410,22 +435,22 @@ If `--verbose`: log each check result.
410
435
  | File | Purpose |
411
436
  | -------------------------- | -------------------------- |
412
437
  | `.opencode/opencode.jsonc` | OpenCode configuration |
413
- | `.toolkit-version` | Version tracking (`3.0.0`) |
438
+ | `.toolkit-version` | Version tracking (`4.0.0`) |
414
439
 
415
440
  ### Validation Results
416
441
 
417
442
  | Check | Status |
418
443
  | ------------------------------ | ------------------------------------------ |
419
- | Snippet completeness | ✅ All snippets have content |
420
- | Thin wrapper references | ✅ All wrappers reference correct snippets |
421
- | `paths:` frontmatter preserved | ✅ Monorepo scoping intact |
422
- | No lost placeholders | ✅ All `{{VAR}}` preserved |
423
- | No broken paths | ✅ All relative paths resolve |
444
+ | Snippet completeness | Report actual applicable checks |
445
+ | Thin wrapper references | Report actual applicable checks |
446
+ | `paths:` frontmatter preserved | Report actual checks; v3 snippets unchanged |
447
+ | No lost placeholders | Report actual `{{VAR}}` preservation checks |
448
+ | No broken paths | Report actual applicable checks |
424
449
 
425
450
  ### Cleanup
426
451
 
427
- - Removed duplicate skill directories from `.claude/skills/`, `.cursor/skills/`, `.github/skills/`
428
- - Kept `.agents/skills/` as source of truth
452
+ - Removed only verified identical duplicates after comparison, backup, and approval (if performed)
453
+ - Preserved custom, unmatched, and nested skill content and canonical `.agents/skills/` copies
429
454
 
430
455
  ### Next Steps
431
456
 
@@ -439,7 +464,7 @@ If `--verbose`: log each check result.
439
464
 
440
465
  ```bash
441
466
  git add -A
442
- git commit -m "chore: upgrade AI instructions to toolkit v3.0.0 (snippet architecture)"
467
+ git commit -m "chore: upgrade AI instructions to toolkit v4.0.0"
443
468
  ```
444
469
 
445
470
  ## Error Handling
@@ -447,7 +472,7 @@ git commit -m "chore: upgrade AI instructions to toolkit v3.0.0 (snippet archite
447
472
  - If a `.claude/rules/*.md` file is already a thin wrapper (< 20 lines with a snippet reference), skip it
448
473
  - If `.github/instructions/*.instructions.md` already references `.claude/rules-snippets/`, skip it
449
474
  - If a snippet file already exists with content, do not overwrite — log a warning
450
- - If `.opencode/` already exists, merge new files without overwriting existing ones
475
+ - If `.opencode/` already exists, add missing files and propose native V2 conversion of existing host files; preserve customizations and skip files already migrated
451
476
 
452
477
  ## Notes
453
478