@deltabox/toolchain 2.1.1 → 2.3.2

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 (140) hide show
  1. package/CHANGELOG.md +398 -628
  2. package/README.md +6 -0
  3. package/dist/changelog.d.ts +6 -5
  4. package/dist/changelog.js +1 -1
  5. package/dist/cli/commands/providers.js +1 -1
  6. package/dist/cli/commands/reset.js +1 -1
  7. package/dist/cli/config-selection.js +1 -1
  8. package/dist/cli/index.d.ts +2 -2
  9. package/dist/cli/index.js +1 -1
  10. package/dist/cli/update-check.js +1 -1
  11. package/dist/config.d.ts +2 -2
  12. package/dist/config.js +1 -1
  13. package/dist/index.d.ts +38 -30
  14. package/dist/index.js +1 -1
  15. package/dist/migrate.d.ts +2 -2
  16. package/dist/migrate.js +1 -1
  17. package/dist/package.js +1 -1
  18. package/dist/packages/changelog/src/cli/index.js +1 -1
  19. package/dist/packages/changelog/src/index.d.ts +7 -6
  20. package/dist/packages/changelog/src/index.js +1 -1
  21. package/dist/packages/changelog/src/run-workflows.d.ts +39 -2
  22. package/dist/packages/changelog/src/run-workflows.js +1 -1
  23. package/dist/packages/changelog/src/run.d.ts +1 -1
  24. package/dist/packages/changelog/src/run.js +1 -1
  25. package/dist/packages/changelog/src/sync.js +1 -1
  26. package/dist/packages/changelog/src/templates.js +1 -1
  27. package/dist/packages/changelog/src/utils/format.d.ts +5 -3
  28. package/dist/packages/changelog/src/utils/format.js +5 -5
  29. package/dist/packages/changelog/src/utils/git.d.ts +1 -1
  30. package/dist/packages/changelog/src/utils/git.js +1 -1
  31. package/dist/packages/changelog/src/utils/reformat.d.ts +7 -2
  32. package/dist/packages/changelog/src/utils/reformat.js +5 -4
  33. package/dist/packages/changelog/src/utils/release-notes.js +1 -1
  34. package/dist/packages/changelog/src/utils/repo.js +1 -1
  35. package/dist/packages/changelog/src/utils/summary.d.ts +1 -1
  36. package/dist/packages/changelog/src/utils/types.d.ts +9 -46
  37. package/dist/packages/changelog/src/utils/versioning.d.ts +11 -14
  38. package/dist/packages/changelog/src/utils/write.js +1 -1
  39. package/dist/packages/changelog/src/workflows.d.ts +11 -3
  40. package/dist/packages/changelog/src/workflows.js +5 -5
  41. package/dist/packages/config/src/cli/index.d.ts +1 -1
  42. package/dist/packages/config/src/collect.js +1 -1
  43. package/dist/packages/config/src/config-json.js +1 -1
  44. package/dist/packages/config/src/generators/env.js +2 -2
  45. package/dist/packages/config/src/generators/markdown.js +8 -8
  46. package/dist/packages/config/src/generators/output.js +1 -0
  47. package/dist/packages/config/src/generators/types.js +3 -3
  48. package/dist/packages/config/src/index.d.ts +3 -3
  49. package/dist/packages/config/src/index.js +1 -1
  50. package/dist/packages/config/src/schema.d.ts +16 -0
  51. package/dist/packages/config/src/schema.js +1 -1
  52. package/dist/packages/config/src/types.d.ts +5 -0
  53. package/dist/packages/core/src/editor-config.js +1 -1
  54. package/dist/packages/core/src/loader.js +1 -1
  55. package/dist/packages/core/src/manifest.js +1 -1
  56. package/dist/packages/core/src/paths.js +1 -0
  57. package/dist/packages/core/src/provider-registry.js +1 -1
  58. package/dist/packages/core/src/reset.d.ts +3 -0
  59. package/dist/packages/core/src/reset.js +1 -1
  60. package/dist/packages/core/src/sync.js +1 -1
  61. package/dist/packages/core/src/vscode.js +1 -1
  62. package/dist/packages/core/src/watch.d.ts +1 -1
  63. package/dist/packages/core/src/watch.js +1 -1
  64. package/dist/packages/migrate/src/cli/index.js +1 -1
  65. package/dist/packages/migrate/src/eslint.js +1 -1
  66. package/dist/packages/migrate/src/index.d.ts +2 -2
  67. package/dist/packages/migrate/src/index.js +1 -1
  68. package/dist/packages/migrate/src/prettier.d.ts +2 -0
  69. package/dist/packages/migrate/src/prettier.js +2 -2
  70. package/dist/packages/migrate/src/vite-target.js +1 -1
  71. package/dist/packages/project/src/cli/index.js +1 -1
  72. package/dist/packages/project/src/index.d.ts +4 -4
  73. package/dist/packages/project/src/index.js +1 -1
  74. package/dist/packages/project/src/typescript.d.ts +4 -2
  75. package/dist/packages/project/src/typescript.js +2 -2
  76. package/dist/packages/shared/src/changelog-callbacks.d.ts +72 -0
  77. package/dist/packages/shared/src/config-schema/biome.d.ts +8 -1
  78. package/dist/packages/shared/src/config-schema/biome.js +1 -1
  79. package/dist/packages/shared/src/config-schema/changelog.d.ts +3049 -30
  80. package/dist/packages/shared/src/config-schema/changelog.js +1 -1
  81. package/dist/packages/shared/src/config-schema/ci.d.ts +1163 -23
  82. package/dist/packages/shared/src/config-schema/external.js +1 -0
  83. package/dist/packages/shared/src/config-schema/format.d.ts +16 -10
  84. package/dist/packages/shared/src/config-schema/format.js +1 -1
  85. package/dist/packages/shared/src/config-schema/generated/azure-pipelines.d.ts +10501 -0
  86. package/dist/packages/shared/src/config-schema/generated/biome-config.d.ts +5962 -0
  87. package/dist/packages/shared/src/config-schema/generated/github-workflow.d.ts +179 -0
  88. package/dist/packages/shared/src/config-schema/generated/gitlab-ci.d.ts +296 -0
  89. package/dist/packages/shared/src/config-schema/generated/oxfmt-config.d.ts +411 -0
  90. package/dist/packages/shared/src/config-schema/generated/oxlint-config.d.ts +2218 -0
  91. package/dist/packages/shared/src/config-schema/index.d.ts +5355 -142
  92. package/dist/packages/shared/src/config-schema/index.js +1 -1
  93. package/dist/packages/shared/src/config-schema/json.d.ts +18 -0
  94. package/dist/packages/shared/src/config-schema/json.js +1 -0
  95. package/dist/packages/shared/src/config-schema/logger.d.ts +10 -1
  96. package/dist/packages/shared/src/config-schema/logger.js +1 -1
  97. package/dist/packages/shared/src/config-schema/tsconfig.d.ts +5 -4
  98. package/dist/packages/shared/src/config-schema/tsconfig.js +1 -1
  99. package/dist/packages/shared/src/config-schema/vite.d.ts +5 -3
  100. package/dist/packages/shared/src/config-schema/vite.js +1 -1
  101. package/dist/packages/shared/src/config-schema/workflow.d.ts +946 -31
  102. package/dist/packages/shared/src/config-schema/workflow.js +1 -1
  103. package/dist/packages/shared/src/config-types.d.ts +257 -33
  104. package/dist/packages/shared/src/fs-utils.d.ts +12 -0
  105. package/dist/packages/shared/src/fs-utils.js +8 -1
  106. package/dist/packages/shared/src/index.d.ts +19 -11
  107. package/dist/packages/shared/src/index.js +1 -1
  108. package/dist/packages/shared/src/object-utils.d.ts +2 -0
  109. package/dist/packages/shared/src/object-utils.js +1 -1
  110. package/dist/packages/shared/src/registry-policy.d.ts +3 -2
  111. package/dist/packages/shared/src/registry-policy.js +1 -1
  112. package/dist/packages/shared/src/run.d.ts +2 -0
  113. package/dist/packages/shared/src/run.js +1 -1
  114. package/dist/packages/shared/src/string-utils.d.ts +7 -5
  115. package/dist/packages/shared/src/string-utils.js +2 -2
  116. package/dist/packages/shared/src/template.d.ts +2 -1
  117. package/dist/packages/shared/src/template.js +1 -1
  118. package/dist/packages/shared/src/toolchain.d.ts +14 -7
  119. package/dist/packages/shared/src/toolchain.js +1 -1
  120. package/dist/packages/shared/src/types.d.ts +5 -0
  121. package/dist/packages/shared/src/vite-defaults.d.ts +4 -3
  122. package/dist/packages/shared/src/vite-defaults.js +1 -1
  123. package/dist/packages/shared/src/yaml.js +5 -5
  124. package/dist/packages/template/src/scaffold.js +1 -1
  125. package/dist/packages/tsconfig/src/cli/generate/index.js +1 -1
  126. package/dist/packages/tsconfig/src/overrides.d.ts +5 -5
  127. package/dist/packages/tsdown/src/config/node.d.ts +5 -0
  128. package/dist/packages/tsdown/src/config/node.js +2 -2
  129. package/dist/packages/tsdown/src/index.d.ts +3 -3
  130. package/dist/packages/tsdown/src/index.js +1 -1
  131. package/dist/packages/vite/src/plugin.js +1 -1
  132. package/dist/packages/vite/src/vp.js +1 -1
  133. package/dist/project.d.ts +3 -3
  134. package/dist/project.js +1 -1
  135. package/dist/shared.d.ts +18 -10
  136. package/dist/shared.js +1 -1
  137. package/dist/tooling.js +1 -1
  138. package/dist/tsdown.d.ts +2 -2
  139. package/dist/tsdown.js +1 -1
  140. package/package.json +25 -13
package/CHANGELOG.md CHANGED
@@ -1,23 +1,159 @@
1
1
  # Changelog
2
2
 
3
- ## 2.1.1 (October 2026)
3
+ ## 2.3.2 (November 2026)
4
4
 
5
5
  <!-- release:start -->
6
6
 
7
7
  ### Bug fixes
8
- #### Changelog
9
- - Use the release-notes helper for releases ([#36616f0](https://github.com/deltabox-studio/toolchain/commit/36616f0) by [T0chi](https://github.com/T0chi))
10
- - Replace the custom release workflow's awk/git-describe extraction with dbx changelog --release-notes, treat --release-notes as machine output, and normalize v-prefixed current versions.
8
+ #### Vscode
9
+ - Load the tsdown base config from source ([#0537c62](https://github.com/deltabox-studio/toolchain/commit/0537c62) by [T0chi](https://github.com/T0chi))
10
+ - The VS Code integration job builds the extension after only \yarn install\, so the private \@deltabox/toolchain-tsdown\ dist does not exist and unrun failed to load the config. Import baseTsdownConfig\ from the workspace source instead (as the root tsdown config already does).
11
11
 
12
12
  <!-- release:end -->
13
13
 
14
14
 
15
+ ## 2.3.1 (November 2026)
16
+
17
+ ### Bug fixes
18
+ #### Vscode
19
+ - Validate webview messages and use a secure nonce ([#94bed68](https://github.com/deltabox-studio/toolchain/commit/94bed68) by [T0chi](https://github.com/T0chi))
20
+ - The Home webview handler trusted the incoming shape and acted on arbitrary project paths, and the CSP nonce came from Math.random. Validate every message, only act on projects the dashboard listed, and generate the nonce from crypto.randomBytes.
21
+ #### Vite
22
+ - Use the Oxlint rule name react/exhaustive-deps ([#ea02ef7](https://github.com/deltabox-studio/toolchain/commit/ea02ef7) by [T0chi](https://github.com/T0chi))
23
+ - The dogfood config used the legacy ESLint name, so the generated Oxc configs carried both spellings. Rename it to the name in the vendored Oxlint schema and add a guard that every default rule exists there.
24
+ #### Changelog
25
+ - Keep hash links when git history is incomplete ([#182b68a](https://github.com/deltabox-studio/toolchain/commit/182b68a) by [T0chi](https://github.com/T0chi))
26
+ - A shallow clone or no-git checkout cannot resolve every referenced commit, so valid hashes were left unlinked. Fall back to treating letter-containing refs as commits when history is incomplete, and mock the numeric-hash fixture so the tests do not depend on the checkout's history.
27
+ #### Config
28
+ - Contain generator output paths and render object metadata ([#fe94053](https://github.com/deltabox-studio/toolchain/commit/fe94053) by [T0chi](https://github.com/T0chi))
29
+ - Scope names and file options were used as paths directly, so a \../\ value could write outside the output directory. Resolve every generated file through a containment check. Also render an object node's own description/annotations before its child fields in per-scope markdown.
30
+ - Derive the CLI reference from the registered commands ([#95dc39f](https://github.com/deltabox-studio/toolchain/commit/95dc39f) by [T0chi](https://github.com/T0chi))
31
+ - The docs generator kept its own command list, so a new builtin could be missing from the generated reference. Use builtinCommands\ (the CLI's source of truth) and mark registry-dependent provider passthroughs as hidden.
32
+ #### Core
33
+ - Preserve .vscode settings comments when adding keys ([#9b4a105](https://github.com/deltabox-studio/toolchain/commit/9b4a105) by [T0chi](https://github.com/T0chi))
34
+ - Merging VS Code settings parsed and reserialized the file, dropping its JSONC comments. Insert missing keys in place (preserving layout) and fall back to a full rewrite only when an existing value or array must change.
35
+ #### Ci
36
+ - Check and regenerate nested workspace configs recursively ([#711c7b4](https://github.com/deltabox-studio/toolchain/commit/711c7b4) by [T0chi](https://github.com/T0chi))
37
+ - The generated schema types are formatted at printWidth 300 and excluded from the formatter, but the ignore patterns were repo-root-relative. Per-workspace vp fmt resolves them from each package directory, so yarn format reformatted biome-config.ts and failed the artifact check. Use **/ globs and make the generated CI/sync workflows run dbx sync --check --recursive so stale workspace configs are caught and regenerated.
38
+
39
+ ## 2.3.0 (November 2026)
40
+
41
+ ### New features
42
+ #### Vscode
43
+ - Show the workflow provider in the run picker ([#af4cc3f](https://github.com/deltabox-studio/toolchain/commit/af4cc3f) by [T0chi](https://github.com/T0chi))
44
+ #### Changelog
45
+ - Dispatch workflows with their vendor CLI ([#eea38ae](https://github.com/deltabox-studio/toolchain/commit/eea38ae) by [T0chi](https://github.com/T0chi))
46
+ #### Config
47
+ - Generate Oxfmt and Oxlint types from vendored schemas ([#8ff5e90](https://github.com/deltabox-studio/toolchain/commit/8ff5e90) by [T0chi](https://github.com/T0chi))
48
+ - Accept complete GitHub, GitLab and Azure workflows ([#070a7f2](https://github.com/deltabox-studio/toolchain/commit/070a7f2) by [T0chi](https://github.com/T0chi))
49
+ - Type tool options and changelog callbacks ([#10bd933](https://github.com/deltabox-studio/toolchain/commit/10bd933) by [T0chi](https://github.com/T0chi))
50
+ ### Bug fixes
51
+ #### Config
52
+ - Escape CLI reference tables and fail on missing output ([#15978be](https://github.com/deltabox-studio/toolchain/commit/15978be) by [T0chi](https://github.com/T0chi))
53
+ - Respect secret defaults, `envPathOf` and changelog disabling ([#5cabab8](https://github.com/deltabox-studio/toolchain/commit/5cabab8) by [T0chi](https://github.com/T0chi))
54
+ - Keep named `$ref` schema properties ([#0aa03a1](https://github.com/deltabox-studio/toolchain/commit/0aa03a1) by [T0chi](https://github.com/T0chi))
55
+ #### Vscode
56
+ - Prefer CLI descriptors and sync all workspace roots ([#e68301a](https://github.com/deltabox-studio/toolchain/commit/e68301a) by [T0chi](https://github.com/T0chi))
57
+ - Report signal and timeout exits as failures ([#b7b1ad5](https://github.com/deltabox-studio/toolchain/commit/b7b1ad5) by [T0chi](https://github.com/T0chi))
58
+ #### Cli
59
+ - Forward passthrough flags and validate the update cache ([#a36d586](https://github.com/deltabox-studio/toolchain/commit/a36d586) by [T0chi](https://github.com/T0chi))
60
+ - Leave `reset --config` to the reset command ([#8a3fbec](https://github.com/deltabox-studio/toolchain/commit/8a3fbec) by [T0chi](https://github.com/T0chi))
61
+ #### Vite
62
+ - Surface sync failures and preserve config values ([#93ee933](https://github.com/deltabox-studio/toolchain/commit/93ee933) by [T0chi](https://github.com/T0chi))
63
+ #### Tsdown
64
+ - Write sorted package exports ([#3886a56](https://github.com/deltabox-studio/toolchain/commit/3886a56) by [T0chi](https://github.com/T0chi))
65
+ #### Tsconfig
66
+ - Read referenced configs as JSONC ([#49ded19](https://github.com/deltabox-studio/toolchain/commit/49ded19) by [T0chi](https://github.com/T0chi))
67
+ #### Migrate
68
+ - Surface unsupported and incomplete migrations ([#f50a5d2](https://github.com/deltabox-studio/toolchain/commit/f50a5d2) by [T0chi](https://github.com/T0chi))
69
+ #### Core
70
+ - Keep VS Code files user-owned and guard registry cycles ([#9ef027a](https://github.com/deltabox-studio/toolchain/commit/9ef027a) by [T0chi](https://github.com/T0chi))
71
+ - Keep watch sessions alive and re-sync config edits ([#2849757](https://github.com/deltabox-studio/toolchain/commit/2849757) by [T0chi](https://github.com/T0chi))
72
+ - Reject conflicting `--config` flags ([#1044f2a](https://github.com/deltabox-studio/toolchain/commit/1044f2a) by [T0chi](https://github.com/T0chi))
73
+ - Skip parent hooks for config-less workspaces ([#9658c36](https://github.com/deltabox-studio/toolchain/commit/9658c36) by [T0chi](https://github.com/T0chi))
74
+ - Keep managed paths inside the project root ([#2496bee](https://github.com/deltabox-studio/toolchain/commit/2496bee) by [T0chi](https://github.com/T0chi))
75
+ #### Shared
76
+ - Harden URL policy, merges and token replacement ([#bae1dc8](https://github.com/deltabox-studio/toolchain/commit/bae1dc8) by [T0chi](https://github.com/T0chi))
77
+ - Detect relative Windows `.cmd` shims ([#058430c](https://github.com/deltabox-studio/toolchain/commit/058430c) by [T0chi](https://github.com/T0chi))
78
+ - Restore `PowerShell`-escaped letters ([#4d2be6a](https://github.com/deltabox-studio/toolchain/commit/4d2be6a) by [T0chi](https://github.com/T0chi))
79
+ #### Changelog
80
+ - Fix workflow staging, `commitlint` and YAML escaping ([#1bb19ad](https://github.com/deltabox-studio/toolchain/commit/1bb19ad) by [T0chi](https://github.com/T0chi))
81
+ - Preserve formatting, links and workspace history ([#af5c5dc](https://github.com/deltabox-studio/toolchain/commit/af5c5dc) by [T0chi](https://github.com/T0chi))
82
+ - Restore the standalone bin and `--dry-run` handling ([#97ecef2](https://github.com/deltabox-studio/toolchain/commit/97ecef2) by [T0chi](https://github.com/T0chi))
83
+ - Preserve hand-corrected text in `--format-only` ([#2041e5f](https://github.com/deltabox-studio/toolchain/commit/2041e5f) by [T0chi](https://github.com/T0chi))
84
+ - Resolve hash links and preserve descriptions ([#7633d24](https://github.com/deltabox-studio/toolchain/commit/7633d24) by [T0chi](https://github.com/T0chi))
85
+ - Keep numeric hashes as commits and bold breaking markers ([#0521aee](https://github.com/deltabox-studio/toolchain/commit/0521aee) by [T0chi](https://github.com/T0chi))
86
+ - Unwrap descriptions and keep list items ([#0dc4bda](https://github.com/deltabox-studio/toolchain/commit/0dc4bda) by [T0chi](https://github.com/T0chi))
87
+ #### Project
88
+ - Validate workspace paths before writing ([#0ef515e](https://github.com/deltabox-studio/toolchain/commit/0ef515e) by [T0chi](https://github.com/T0chi))
89
+ ### Documentation
90
+ - Document vendor workflows, typed builders and `--format-only` ([#eb66982](https://github.com/deltabox-studio/toolchain/commit/eb66982) by [T0chi](https://github.com/T0chi))
91
+ - Normalize changelog links and breaking markers ([#c3875e4](https://github.com/deltabox-studio/toolchain/commit/c3875e4) by [T0chi](https://github.com/T0chi))
92
+ - Reflow changelog descriptions ([#bc6a40c](https://github.com/deltabox-studio/toolchain/commit/bc6a40c) by [T0chi](https://github.com/T0chi))
93
+ #### Config
94
+ - Document the open `WorkflowJob` type ([#779566b](https://github.com/deltabox-studio/toolchain/commit/779566b) by [T0chi](https://github.com/T0chi))
95
+ #### Changelog
96
+ - Document `formatLine` ([#61e28ec](https://github.com/deltabox-studio/toolchain/commit/61e28ec) by [T0chi](https://github.com/T0chi))
97
+ ### CI
98
+ - Add VS Code integration job ([#18b2b7b](https://github.com/deltabox-studio/toolchain/commit/18b2b7b) by [T0chi](https://github.com/T0chi))
99
+ ### Chores
100
+ #### Changelog
101
+ - Update the lockfile bin entry ([#f946648](https://github.com/deltabox-studio/toolchain/commit/f946648) by [T0chi](https://github.com/T0chi))
102
+ #### Config
103
+ - Regenerate config-types, schema and docs ([#0b0ca20](https://github.com/deltabox-studio/toolchain/commit/0b0ca20) by [T0chi](https://github.com/T0chi))
104
+ - Shrink the generated `BiomeConfig` type ([#0522932](https://github.com/deltabox-studio/toolchain/commit/0522932) by [T0chi](https://github.com/T0chi))
105
+ #### Vscode
106
+ - Move mocha types to the default tsconfig ([#b604811](https://github.com/deltabox-studio/toolchain/commit/b604811) by [T0chi](https://github.com/T0chi))
107
+
108
+ ### Package changes
109
+ #### Added
110
+ - `@dprint/types` `^0.4.0`
111
+ - `eslint` `^10.14.0`
112
+ - `prettier` `^3.6.2`
113
+
114
+ ## 2.2.0 (November 2026)
115
+
116
+ ### New features
117
+ #### Core
118
+ - Improve formatter/linter auto-detection ([#8324e9a](https://github.com/deltabox-studio/toolchain/commit/8324e9a) by [T0chi](https://github.com/T0chi))
119
+ - Prefer the project .vscode/settings.json, then the nearest workspace package.json/config file before walking to the root, and include tooling config files as detection candidates.
120
+ ### Tests
121
+ #### Vscode
122
+ - Add extension host test setup ([#66aeda6](https://github.com/deltabox-studio/toolchain/commit/66aeda6) by [T0chi](https://github.com/T0chi))
123
+ - Add @vscode/test-cli/test-electron integration tests, a fixture workspace, build/debug launch tasks, source maps, and documented local test commands.
124
+
125
+ ### Package changes
126
+ #### Added
127
+ - `@types/mocha` `^10.0.10`
128
+ - `@vscode/test-cli` `^0.0.15`
129
+ - `@vscode/test-electron` `^3.1.0`
130
+
131
+ ## 2.1.3 (November 2026)
132
+
133
+ ### Bug fixes
134
+ #### Core
135
+ - Read JSONC VS Code settings and bundle jsonc-parser ([#57d908d](https://github.com/deltabox-studio/toolchain/commit/57d908d) by [T0chi](https://github.com/T0chi))
136
+ - Parse .vscode/settings.json as JSONC so comments/trailing commas don't block editor defaults, and resolve jsonc-parser's ESM entry in the bundled dbx CLI to avoid the missing ./impl/format module.
137
+
138
+ ## 2.1.2 (November 2026)
139
+
140
+ ### Bug fixes
141
+ #### Vscode
142
+ - Align Home action icons with provider commands ([#05fd6c8](https://github.com/deltabox-studio/toolchain/commit/05fd6c8) by [T0chi](https://github.com/T0chi))
143
+
144
+ ## 2.1.1 (October 2026)
145
+
146
+ ### Bug fixes
147
+ #### Changelog
148
+ - Use the release-notes helper for releases ([#36616f0](https://github.com/deltabox-studio/toolchain/commit/36616f0) by [T0chi](https://github.com/T0chi))
149
+ - Replace the custom release workflow's awk/git-describe extraction with dbx changelog --release-notes, treat --release-notes as machine output, and normalize v-prefixed current versions.
150
+
15
151
  ## 2.1.0 (October 2026)
16
152
 
17
153
  ### New features
18
154
  #### Changelog
19
155
  - Configure breaking-change detection ([#f80634f](https://github.com/deltabox-studio/toolchain/commit/f80634f) by [T0chi](https://github.com/T0chi))
20
- - Detect breaking changes by Conventional Commits rules by default (! in the subject or a BREAKING CHANGE: footer) and add a changelog.breaking / ci.changelog.breaking override (conventional, ny, alse, pattern/match, or a callback).
156
+ - Detect breaking changes by Conventional Commits rules by default (! in the subject or a **BREAKING CHANGE:** footer) and add a changelog.breaking / ci.changelog.breaking override (conventional, any, false, pattern/match, or a callback).
21
157
 
22
158
  ## 2.0.1 (October 2026)
23
159
 
@@ -48,192 +184,122 @@
48
184
  - Support ordered arrays, title records, hidden groups and callbacks for the whole group config and per-group title/order/hidden values, including --format-only.
49
185
  - Add custom workflow paths, listing and non-Yarn support ([#2e96e6e](https://github.com/deltabox-studio/toolchain/commit/2e96e6e) by [T0chi](https://github.com/T0chi))
50
186
  - Add a New contributors footer ([#1e49596](https://github.com/deltabox-studio/toolchain/commit/1e49596) by [T0chi](https://github.com/T0chi))
51
- - scanned range (explicit range start, or the oldest commit's parent).
52
- login is known) and a nested list of their commit messages, reusing
53
- the normal commit bullet formatting without the author/body.
54
- only the CC rule/scope grouping is replaced by major/minor/patch.
187
+ - Detect first-time contributors by checking the authors before the scanned range (explicit range start, or the oldest commit's parent).
188
+ - Render them as a footer with the contributor (linked when the GitHub login is known) and a nested list of their commit messages, reusing the normal commit bullet formatting without the author/body.
189
+ - Keep the same formatting in the commitlint-disabled fallback summary; only the CC rule/scope grouping is replaced by major/minor/patch.
55
190
  #### Config
56
191
  - Type changelog group callbacks ([#a5c6186](https://github.com/deltabox-studio/toolchain/commit/a5c6186) by [T0chi](https://github.com/T0chi))
57
192
  - Add the shared ChangelogGroupsSetting types, expose groups on both changelog sections, and regenerate the config schema/types/reference.
58
193
  - Revamp config generators and extend tooling customization ([#b924255](https://github.com/deltabox-studio/toolchain/commit/b924255) by [T0chi](https://github.com/T0chi))
59
- - and generateConfig* functions (optional disk writes, schema metadata)
60
- - **BREAKING CHANGE:** ConfigScopes, ConfigScopeDef, CONFIG_SECTION_SCHEMAS,
61
- - CONFIG_TYPE_SCHEMAS and CONFIG_SECTION_DESCRIPTIONS are removed. Consumers
62
- should use ConfigSchema with generateConfigTypes/Env/Markdown/Cli/All and read
63
- section descriptions from schema metadata.
194
+ - replace env-first ConfigScopes/ConfigScopeDef/render* APIs with ConfigSchema and generateConfig* functions (optional disk writes, schema metadata)
195
+ - consolidate configSchema and remove duplicated schema maps/descriptions
196
+ - support Zod and untyped Schema inputs with env/cli metadata
197
+ - add markdown frontmatter customization and env/cli JSDoc output
198
+ - add custom logger support and shorthand fmt/lint tool inference
199
+ - add changelog bump rules, over-bump opt-in, and provider/commit options
200
+ - **BREAKING CHANGE:** ConfigScopes, ConfigScopeDef, CONFIG_SECTION_SCHEMAS, CONFIG_TYPE_SCHEMAS and CONFIG_SECTION_DESCRIPTIONS are removed. Consumers should use ConfigSchema with generateConfigTypes/Env/Markdown/Cli/All and read section descriptions from schema metadata.
64
201
  - Support metadata annotations in generated output ([#1417bb2](https://github.com/deltabox-studio/toolchain/commit/1417bb2) by [T0chi](https://github.com/T0chi))
65
202
  - Add fmt/lint sections and manual changelog config ([#16000e5](https://github.com/deltabox-studio/toolchain/commit/16000e5) by [T0chi](https://github.com/T0chi))
66
203
  - Inherit shared sections and add fmt/lint defaults ([#94add6f](https://github.com/deltabox-studio/toolchain/commit/94add6f) by [T0chi](https://github.com/T0chi))
67
204
  - Registry source policies and duplicate template-id prompts ([#e030af7](https://github.com/deltabox-studio/toolchain/commit/e030af7) by [T0chi](https://github.com/T0chi))
68
- - host and path globs, enforced for local paths, npm registries and
69
- remote URLs (also when loading global/remote registries and the
70
- provider/registry listings).
71
- builtin or project source; non-interactive runs fail with a clear
72
- `--id` hint instead of prompting.
73
- plus Templates/Providers docs.
205
+ - Add `toolchain.registry.{templates,providers}` with `allow`/`deny` host and path globs, enforced for local paths, npm registries and remote URLs (also when loading global/remote registries and the provider/registry listings).
206
+ - Prompt for a unique template id when `template:add` collides with a builtin or project source; non-interactive runs fail with a clear `--id` hint instead of prompting.
207
+ - Add `--id` to `template:add`, policy tests and the generated reference plus Templates/Providers docs.
74
208
  - Ambient Zod meta types and project-tsconfig typechecks ([#e73661b](https://github.com/deltabox-studio/toolchain/commit/e73661b) by [T0chi](https://github.com/T0chi))
75
- - `/// <reference types="@deltabox/toolchain/globals" />` and get typed
76
- `.meta({ env, path, required, example, ... })` fields.
77
- `ConfigBaseMeta.deprecated` the JSON-Schema boolean.
78
- instead of `tsconfig.build.json`.
209
+ - Export `@deltabox/toolchain/globals` so a consumer can add `/// <reference types="@deltabox/toolchain/globals" />` and get typed `.meta({ env, path, required, example, ... })` fields.
210
+ - Add the shared/config ambient declarations and make `ConfigBaseMeta.deprecated` the JSON-Schema boolean.
211
+ - Run the root and every workspace typecheck against `tsconfig.json` instead of `tsconfig.build.json`.
79
212
  - Move CI workflows and changelog config under toolchain.ci ([#af1b536](https://github.com/deltabox-studio/toolchain/commit/af1b536) by [T0chi](https://github.com/T0chi))
80
- - workflows and move the changelog pipeline to `ci.changelog`.
81
- `ci.changelog.commitlint: false` and fall back to coarse
82
- major/minor/patch changelog groups.
83
- `ChangelogBranchesConfig` as a named schema.
84
- consumers, but reject it in the loader with a migration error.
85
- into the `config-schema/` folder.
86
- per-workflow overrides are `WorkflowOptions`, and the new section type
87
- is `ToolchainCiConfig`.
88
- generated types.
213
+ - Add the opt-in `ci` section for the ci/release/issues/changelog/sync workflows and move the changelog pipeline to `ci.changelog`.
214
+ - Make every workflow setting opt-in; disable commitlint with `ci.changelog.commitlint: false` and fall back to coarse major/minor/patch changelog groups.
215
+ - Move `types`/`scopes` to `ci.changelog.commitlint` and extract `ChangelogBranchesConfig` as a named schema.
216
+ - Keep the old top-level `changelog` schema marked deprecated for older consumers, but reject it in the loader with a migration error.
217
+ - Add `withEnabled()` to the schema model and split `config-schema.ts` into the `config-schema/` folder.
218
+ - Rename the workflow types: the workflow map is `WorkflowConfig`, the per-workflow overrides are `WorkflowOptions`, and the new section type is `ToolchainCiConfig`.
219
+ - Surface `.meta()` descriptions for `$ref` and object nodes in the generated types.
89
220
  - Let defineConfig accept a promise or a callback ([#111776c](https://github.com/deltabox-studio/toolchain/commit/111776c) by [T0chi](https://github.com/T0chi))
90
- - `defineConfig` now mirrors Vite's helper: the argument may be a plain object,
91
- a `Promise<DbxConfig>`, or a `() => DbxConfig | Promise<DbxConfig>` callback.
92
- The loader resolves the module export (awaits a promise, calls a callback and
93
- awaits its result), so a config can do async work before returning
94
- `{ toolchain }`.
221
+ - `defineConfig` now mirrors Vite's helper: the argument may be a plain object, a `Promise<DbxConfig>`, or a `() => DbxConfig | Promise<DbxConfig>` callback. The loader resolves the module export (awaits a promise, calls a callback and awaits its result), so a config can do async work before returning `{ toolchain }`.
95
222
  #### Vscode
96
223
  - Surface workflow conflicts in managed files ([#e692511](https://github.com/deltabox-studio/toolchain/commit/e692511) by [T0chi](https://github.com/T0chi))
97
224
  - Read workflowConflicts from the manifest and render them as a warning group with the owning config key.
98
225
  - Watch the inputs resolved from the dbx config ([#953f071](https://github.com/deltabox-studio/toolchain/commit/953f071) by [T0chi](https://github.com/T0chi))
99
- - watch globs: auto-sync now asks the CLI (`dbx watch --list --json`) per
100
- workspace root and watches the returned globs relative to that root, so
101
- custom `tsconfig.rootFile`/`defaultFile` names are respected
102
- ignore stale results from an older resolve
103
- older pinned `dbx`)
104
- set value, in any scope, still replaces the resolved inputs
105
- `tsconfig.default.json`
106
- the behaviour
226
+ - drop the hard-coded `tsconfig.default.json` / `tsconfig.workspaces.json` watch globs: auto-sync now asks the CLI (`dbx watch --list --json`) per workspace root and watches the returned globs relative to that root, so custom `tsconfig.rootFile`/`defaultFile` names are respected
227
+ - re-resolve the inputs (debounced) whenever a `dbx.config.*` changes, and ignore stale results from an older resolve
228
+ - fall back to the default inputs when the CLI cannot report them (eg. an older pinned `dbx`)
229
+ - `deltabox.toolchain.watch` now defaults to `[]` (resolved); an explicitly set value, in any scope, still replaces the resolved inputs
230
+ - detect workspace projects with the resolved `defaultFile` instead of `tsconfig.default.json`
231
+ - unit-test the parsing and watch planning (`watch-inputs.ts`) and document the behaviour
107
232
  - Add extension settings link to Home ([#f39cb35](https://github.com/deltabox-studio/toolchain/commit/f39cb35) by [T0chi](https://github.com/T0chi))
108
233
  - Add Select dbx version to the Home More actions ([#13ef688](https://github.com/deltabox-studio/toolchain/commit/13ef688) by [T0chi](https://github.com/T0chi))
109
234
  - Add the Registries view ([#e3e808e](https://github.com/deltabox-studio/toolchain/commit/e3e808e) by [T0chi](https://github.com/T0chi))
110
- - A new collapsible **Registries** view (below Templates) shows **Providers** and
111
- (explorer folder or browser for remote URLs), **Add new registry** (the category's
112
- add flow) and **Remove registry** (removes the path, keeps the files). The title
113
- bar has **New registry…** / **Remove registry…** (global or project scope), also
114
- available in the Home "More actions". Removing a template now offers the stored
115
- global templates too (`template:remove --global`).
235
+ - A new collapsible **Registries** view (below Templates) shows **Providers** and (explorer folder or browser for remote URLs), **Add new registry** (the category's add flow) and **Remove registry** (removes the path, keeps the files). The title bar has **New registry…** / **Remove registry…** (global or project scope), also available in the Home "More actions". Removing a template now offers the stored global templates too (`template:remove --global`).
116
236
  - Rename registry paths, add a version picker and UI polish ([#9c8b51c](https://github.com/deltabox-studio/toolchain/commit/9c8b51c) by [T0chi](https://github.com/T0chi))
117
- - config and code).
118
- "which dbx?" notification, only ask when they differ, and add a **Select dbx
119
- version…** command that pins one in the workspace settings (npx fallback).
120
- More actions), prefix More-actions buttons with a play glyph, start Managed
121
- Files collapsed, expand the Vite+ provider by default, and drop unused icon
122
- resources.
237
+ - Rename `templatesSearchPaths` to `registrySearchPaths` (VS Code setting, CLI config and code).
238
+ - Show the detected project/extension `@deltabox/toolchain` versions in the "which dbx?" notification, only ask when they differ, and add a **Select dbx version…** command that pins one in the workspace settings (npx fallback).
239
+ - Replace the Home "Run Vite+…" quick action with **Add provider…** (also in More actions), prefix More-actions buttons with a play glyph, start Managed Files collapsed, expand the Vite+ provider by default, and drop unused icon resources.
123
240
  - Sync the global registry with the VS Code settings ([#86a0671](https://github.com/deltabox-studio/toolchain/commit/86a0671) by [T0chi](https://github.com/T0chi))
124
- - Add the `deltabox.templatesSearchPaths` setting, record the VS Code user dir in
125
- the CLI config on activation, and mirror setting changes into it (so the CLI and
126
- editor agree). Adding a template now asks whether to register it globally (yes
127
- by default), and adding a provider asks for a project or global scope; the
128
- Providers view reads the merged registry.
241
+ - Add the `deltabox.templatesSearchPaths` setting, record the VS Code user dir in the CLI config on activation, and mirror setting changes into it (so the CLI and editor agree). Adding a template now asks whether to register it globally (yes by default), and adding a provider asks for a project or global scope; the Providers view reads the merged registry.
129
242
  #### Project
130
243
  - Inherit root Oxc config and harden scaffolds ([#56a1895](https://github.com/deltabox-studio/toolchain/commit/56a1895) by [T0chi](https://github.com/T0chi))
131
244
  - Nested projects omit local Oxc files/opt-ins when the root owns them, template create gains --force, and scaffold writes now reject duplicates, BOM catalogs and root scope fallbacks are handled.
132
245
  - Make scaffolds runnable and safer ([#eab297b](https://github.com/deltabox-studio/toolchain/commit/eab297b) by [T0chi](https://github.com/T0chi))
133
- - Fold an existing vite config when generating a config ([#5891154](https://github.com/deltabox-studio/toolchain/issues/5891154) by [T0chi](https://github.com/T0chi))
134
- - `project:config` now checks for a hand-written `vite.config.*` and folds its
135
- literal props into the generated `dbx.config.ts`'s `toolchain.vite` (using the
136
- vite migration's extract/scan/fold helpers), adding the `/vite.config.ts` fmt
137
- ignore. A non-foldable config is reported and left alone. The VS Code "Generate
138
- config" actions run `dbx sync` afterwards so the managed shim is written.
246
+ - Fold an existing vite config when generating a config ([#5891154](https://github.com/deltabox-studio/toolchain/commit/5891154) by [T0chi](https://github.com/T0chi))
247
+ - `project:config` now checks for a hand-written `vite.config.*` and folds its literal props into the generated `dbx.config.ts`'s `toolchain.vite` (using the vite migration's extract/scan/fold helpers), adding the `/vite.config.ts` fmt ignore. A non-foldable config is reported and left alone. The VS Code "Generate config" actions run `dbx sync` afterwards so the managed shim is written.
139
248
  #### Core
140
249
  - Resolve watched inputs from the config and add `dbx watch --list` ([#0ab08a9](https://github.com/deltabox-studio/toolchain/commit/0ab08a9) by [T0chi](https://github.com/T0chi))
141
- - `watch` globs with function forms resolved (eg. custom
142
- `tsconfig.rootFile`/`defaultFile` names); `runWatch` now uses it, so only the
143
- inputs of tasks that actually run are watched
144
- resolved tsconfig file names (`{ globs, tsconfig }`) without watching
145
- a `tsconfig` section
250
+ - add `resolveWatchGlobs(tasks, config, projectType?)`: the active tasks' `watch` globs with function forms resolved (eg. custom `tsconfig.rootFile`/`defaultFile` names); `runWatch` now uses it, so only the inputs of tasks that actually run are watched
251
+ - add `dbx watch --list [--json]`, printing the resolved input globs plus the resolved tsconfig file names (`{ globs, tsconfig }`) without watching
252
+ - emulate the report for the default names, custom names and a config without a `tsconfig` section
146
253
  - Untracked managed files, config-derived task globs and a reset restore hook ([#5da6691](https://github.com/deltabox-studio/toolchain/commit/5da6691) by [T0chi](https://github.com/T0chi))
147
- - it in the manifest, so a user-owned file a task patches is never pruned by a
148
- later sync or removed by `dbx reset`
149
- follow configured file names
150
- (written before `files`/`origins`, which it can never clobber), and
151
- `SyncContext.check` flags `dbx sync --check`
152
- the manifest is removed and report the `restored` files
153
- - Provider registry search paths and safer managed-file sync ([#4033009](https://github.com/deltabox-studio/toolchain/issues/4033009) by [T0chi](https://github.com/T0chi))
154
- - http(s) URLs), keeping the legacy provider files for compatibility.
155
- providers`, `--set`, `--clear`), the CLI config and the VS Code
156
- `deltabox.providerRegistrySearchPaths` setting; the Registries view
157
- now manages both kinds and the Providers view can fetch remote
158
- registries through `loadToolchainProviders()`.
159
- pre-existing file. Adopted files are unmanaged, never deleted.
160
- their previous content); the extension shows a notification listing
161
- removed files with Restore/Close.
254
+ - `ManagedFile.track: false` writes and drift-checks a file without recording it in the manifest, so a user-owned file a task patches is never pruned by a later sync or removed by `dbx reset`
255
+ - `SyncTask.watch` / `SyncTask.keep` accept `config => string[]`, so globs can follow configured file names
256
+ - `SyncContext.manifest` persists task metadata in the manifest between syncs (written before `files`/`origins`, which it can never clobber), and `SyncContext.check` flags `dbx sync --check`
257
+ - `resetToolchain` / `resetProjects` take a `restore` hook that runs before the manifest is removed and report the `restored` files
258
+ - Provider registry search paths and safer managed-file sync ([#4033009](https://github.com/deltabox-studio/toolchain/commit/4033009) by [T0chi](https://github.com/T0chi))
259
+ - Load providers from project/global search paths (JSON files, dirs or http(s) URLs), keeping the legacy provider files for compatibility.
260
+ - Add provider search-path management to `dbx registry` (`--kind providers`, `--set`, `--clear`), the CLI config and the VS Code `deltabox.providerRegistrySearchPaths` setting; the Registries view now manages both kinds and the Providers view can fetch remote registries through `loadToolchainProviders()`.
261
+ - Track whether a managed file was created by dbx or adopted from a pre-existing file. Adopted files are unmanaged, never deleted.
262
+ - `dbx sync --json` reports the sync result (including removed files and their previous content); the extension shows a notification listing removed files with Restore/Close.
162
263
  - Merge global providers with the project registry ([#81c510b](https://github.com/deltabox-studio/toolchain/commit/81c510b) by [T0chi](https://github.com/T0chi))
163
- - Providers can live in `~/.dbx/toolchain/.registry/providers.json` too.
164
- `readAllProviders` merges them with the project's `.dbx/toolchain/providers.json`
165
- (project wins on an id clash), and the CLI's provider list and passthrough
166
- commands use it so a global provider works in every project.
264
+ - Providers can live in `~/.dbx/toolchain/.registry/providers.json` too. `readAllProviders` merges them with the project's `.dbx/toolchain/providers.json` (project wins on an id clash), and the CLI's provider list and passthrough commands use it so a global provider works in every project.
167
265
  #### Tsconfig
168
266
  - Resolver, `extends`/`baseFile` options and snapshot-backed overrides ([#2b38963](https://github.com/deltabox-studio/toolchain/commit/2b38963) by [T0chi](https://github.com/T0chi))
169
- - JSONC) and `dbx tsconfig --json/--alias/--paths/--references/--tsconfig/--root/--no-extends`;
170
- the generator now resolves the workspaces tsconfig through it
171
- templates, and `tsconfig.baseFile` for the root base tsconfig
172
- into the user-owned tsconfigs on sync, honouring custom
173
- `baseFile`/`rootFile`/`defaultFile`/`buildFile` names (also in the task's
174
- watched/kept globs and in `dbx tsconfig`)
175
- (repo-relative paths only) and record the applied override per file in
176
- `tsconfigOverrides`; removing a key restores the snapshot value when the
177
- original defined it, otherwise removes it (pruning emptied parents), and keeps
178
- a value edited after the override applied it
179
- `tsconfig.override-edited`) and skip instead of creating missing targets;
180
- patched files are untracked, so sync/reset never delete them
181
- (`restoreTsconfigOverrides`), warning with `tsconfig.restore-reapply` while
182
- the overrides are still configured; `dbx reset` restores before removing the
183
- manifest
267
+ - add an extends-aware `resolveTsconfig` (+ `readTsconfig`/`parseTsconfig` for JSONC) and `dbx tsconfig --json/--alias/--paths/--references/--tsconfig/--root/--no-extends`; the generator now resolves the workspaces tsconfig through it
268
+ - add `tsconfig.extends` for the `extends` of scaffolded base/default/build templates, and `tsconfig.baseFile` for the root base tsconfig
269
+ - add `tsconfig.overrides` (`base`, `root`, `default`, `build`): deep-merged into the user-owned tsconfigs on sync, honouring custom `baseFile`/`rootFile`/`defaultFile`/`buildFile` names (also in the task's watched/kept globs and in `dbx tsconfig`)
270
+ - snapshot the original files in the manifest's top-level `snapshots` tree (repo-relative paths only) and record the applied override per file in `tsconfigOverrides`; removing a key restores the snapshot value when the original defined it, otherwise removes it (pruning emptied parents), and keeps a value edited after the override applied it
271
+ - warn (`tsconfig.missing-file`, `tsconfig.outside-root`, `tsconfig.override-edited`) and skip instead of creating missing targets; patched files are untracked, so sync/reset never delete them
272
+ - add `dbx tsconfig --restore [base|root|default|build]` (`restoreTsconfigOverrides`), warning with `tsconfig.restore-reapply` while the overrides are still configured; `dbx reset` restores before removing the manifest
273
+ - type the override bodies as `TsConfigJson` (`type-fest` is now a dependency)
274
+ - cover the overrides with unit and emulate tests
184
275
  #### Vite
185
276
  - Add static shims and a configurable shim import ([#bddcb62](https://github.com/deltabox-studio/toolchain/commit/bddcb62) by [T0chi](https://github.com/T0chi))
186
- - the generated `vite.config.ts`, so Vite+ can load it without a built
187
- `@deltabox/toolchain` (rejects functions, regexps and class instances)
188
- shims; relative values resolve from the repo root and are rewritten per
189
- generated config
277
+ - `vite.shim: 'static'` serializes the resolved `toolchain.vite` config into the generated `vite.config.ts`, so Vite+ can load it without a built `@deltabox/toolchain` (rejects functions, regexps and class instances)
278
+ - `vite.shimImport` changes the `resolveVite` import specifier of runtime shims; relative values resolve from the repo root and are rewritten per generated config
279
+ - type both options in `ToolchainViteConfig` and document them
190
280
  - Preserve existing imports/comments when regenerating the shim ([#194461c](https://github.com/deltabox-studio/toolchain/commit/194461c) by [T0chi](https://github.com/T0chi))
191
- - `renderViteConfig` now accepts the existing `vite.config.ts` source: it keeps
192
- the file's leading comments and import statements and merges `defineConfig` (and
193
- the config type) into the existing `vite`/`vite-plus` import, preserving default,
194
- namespace, other named and type-only specifiers. Regeneration is idempotent, and
195
- the sync task feeds the current file in so a custom import block/comment is not
196
- dropped.
281
+ - `renderViteConfig` now accepts the existing `vite.config.ts` source: it keeps the file's leading comments and import statements and merges `defineConfig` (and the config type) into the existing `vite`/`vite-plus` import, preserving default, namespace, other named and type-only specifiers. Regeneration is idempotent, and the sync task feeds the current file in so a custom import block/comment is not dropped.
197
282
  - Detect the project's vite package and allow resolveVite overrides ([#dfaedee](https://github.com/deltabox-studio/toolchain/commit/dfaedee) by [T0chi](https://github.com/T0chi))
198
- - The generated `vite.config.ts` shim now imports `defineConfig` (and its config
199
- type) from whichever package the project installs — `vite` or `vite-plus` —
200
- detected from `package.json` and walking up so a hoisted workspace dependency
201
- resolves. `resolveVite` is generic so the shim type-checks against both, and
202
- `ResolveViteOptions` now carries inline `vite` overrides that are deep-merged
203
- over the loaded section.
283
+ - The generated `vite.config.ts` shim now imports `defineConfig` (and its config type) from whichever package the project installs — `vite` or `vite-plus` — detected from `package.json` and walking up so a hoisted workspace dependency resolves. `resolveVite` is generic so the shim type-checks against both, and `ResolveViteOptions` now carries inline `vite` overrides that are deep-merged over the loaded section.
204
284
  #### Migrate
205
285
  - Add Oxc migration and repeatable --from ([#0f6930d](https://github.com/deltabox-studio/toolchain/commit/0f6930d) by [T0chi](https://github.com/T0chi))
206
286
  #### Cli
207
287
  - Add config selection and logger suppression ([#9b69e3f](https://github.com/deltabox-studio/toolchain/commit/9b69e3f) by [T0chi](https://github.com/T0chi))
208
288
  #### Template
209
289
  - Re-prompt on duplicate ids in init and the editor ([#a4d7cde](https://github.com/deltabox-studio/toolchain/commit/a4d7cde) by [T0chi](https://github.com/T0chi))
210
- - one (or fails with an `--id` hint when non-interactive), and accepts
211
- `--id`.
212
- the provider already exists, updating its command names too.
290
+ - `template:init --add` checks builtin + project ids, prompts for a unique one (or fails with an `--id` hint when non-interactive), and accepts `--id`.
291
+ - The VS Code Add provider flow suggests and validates a renamed id when the provider already exists, updating its command names too.
213
292
  - Unscoped npm packages, custom registries and remote sources ([#08cb68c](https://github.com/deltabox-studio/toolchain/commit/08cb68c) by [T0chi](https://github.com/T0chi))
214
- - npm create packages. The registry defaults to the project package
215
- manager's (`npmRegistryServer` / `.npmrc`) and can be overridden per
216
- source with `--registry` or the new `ToolchainTemplateSource.registry`.
217
- whose `{ sources }` / `{ templates }` / array is merged recursively.
218
- docs.
293
+ - Support scoped (`@scope/create`) and unscoped (`create-*`, `*-create`) npm create packages. The registry defaults to the project package manager's (`npmRegistryServer` / `.npmrc`) and can be overridden per source with `--registry` or the new `ToolchainTemplateSource.registry`.
294
+ - Add the `remote` template source type: an `http(s)` JSON source registry whose `{ sources }` / `{ templates }` / array is merged recursively.
295
+ - Refresh the generated schema/types/reference and the online template docs.
219
296
  - Add project registries, registry listing and global removal ([#ff3cd16](https://github.com/deltabox-studio/toolchain/commit/ff3cd16) by [T0chi](https://github.com/T0chi))
220
- - to `<project>/.dbx/toolchain/.registry/templates`; the project paths are
221
- resolved before the global ones (remote `http(s)` entries are kept as URLs).
222
- `dbx registry` command lists them (`--json`) and adds/removes template paths
223
- (`--add`/`--remove`, `--scope global|project`).
224
- remove stored global templates; remote registries accept `{ sources }`,
225
- `{ templates }` or an array of sources.
297
+ - Project-scoped registries live in `.dbx/toolchain/registries.json` and default to `<project>/.dbx/toolchain/.registry/templates`; the project paths are resolved before the global ones (remote `http(s)` entries are kept as URLs).
298
+ - `listRegistries(cwd)` exposes the detected template/provider registries, the `dbx registry` command lists them (`--json`) and adds/removes template paths (`--add`/`--remove`, `--scope global|project`).
299
+ - `dbx template:list --global` and `dbx template:remove --global <id>` list and remove stored global templates; remote registries accept `{ sources }`, `{ templates }` or an array of sources.
226
300
  - Add a global template registry ([#638dd3b](https://github.com/deltabox-studio/toolchain/commit/638dd3b) by [T0chi](https://github.com/T0chi))
227
- - Templates registered with `template:init --add`/`template:add` are also stored
228
- under `~/.dbx/toolchain/.registry/templates` (unless `--no-global`), so they are
229
- available in every project and the VS Code extension. Global templates merge
230
- with the project's own (project wins on an id clash).
231
- - Search paths default to that directory and can be configured as a string/array
232
- of directories or `http(s)` remote registries. They live in
233
- `~/.dbx/toolchain/cli/config.json` (`templatesSearchPaths`, plus a `vscodeDir`
234
- pointing at the VS Code user dir) and are managed with the new
235
- `dbx template:registry` command (`--add`/`--set`/`--remove`/`--clear`), which
236
- also writes the VS Code `deltabox.templatesSearchPaths` setting.
301
+ - Templates registered with `template:init --add`/`template:add` are also stored under `~/.dbx/toolchain/.registry/templates` (unless `--no-global`), so they are available in every project and the VS Code extension. Global templates merge with the project's own (project wins on an id clash).
302
+ - Search paths default to that directory and can be configured as a string/array of directories or `http(s)` remote registries. They live in `~/.dbx/toolchain/cli/config.json` (`templatesSearchPaths`, plus a `vscodeDir` pointing at the VS Code user dir) and are managed with the new `dbx template:registry` command (`--add`/`--set`/`--remove`/`--clear`), which also writes the VS Code `deltabox.templatesSearchPaths` setting.
237
303
  ### Bug fixes
238
304
  #### Cli
239
305
  - Filter denied providers at registration ([#74c49bb](https://github.com/deltabox-studio/toolchain/commit/74c49bb) by [T0chi](https://github.com/T0chi))
@@ -244,11 +310,7 @@
244
310
  - Allow true/false for every fmt/lint tool, honour explicit biome opt-outs, and ignore disabled biome overrides.
245
311
  - Honour disabled sections and regenerate config types ([#dddd9a7](https://github.com/deltabox-studio/toolchain/commit/dddd9a7) by [T0chi](https://github.com/T0chi))
246
312
  - Keep union, enum and nested types in the combined markdown reference ([#2eaa373](https://github.com/deltabox-studio/toolchain/commit/2eaa373) by [T0chi](https://github.com/T0chi))
247
- - The combined (`combined: true`) markdown renderer received the untyped
248
- lowering of Zod scopes, which collapses unions/enums to `any` with a `{}`
249
- default. Render Zod scopes from `toJSONSchema` instead (resolving the root
250
- `$ref` into `$defs`), so the reference shows real types and nested options
251
- again.
313
+ - The combined (`combined: true`) markdown renderer received the untyped lowering of Zod scopes, which collapses unions/enums to `any` with a `{}` default. Render Zod scopes from `toJSONSchema` instead (resolving the root `$ref` into `$defs`), so the reference shows real types and nested options again.
252
314
  - Finish generator ergonomics and changelog customization ([#38f6d5b](https://github.com/deltabox-studio/toolchain/commit/38f6d5b) by [T0chi](https://github.com/T0chi))
253
315
  #### Changelog
254
316
  - Honour workflow token overrides and disabled ci ([#de266dd](https://github.com/deltabox-studio/toolchain/commit/de266dd) by [T0chi](https://github.com/T0chi))
@@ -264,18 +326,13 @@
264
326
  - Make sync generation quiet, one-pass and non-fatal ([#f0d7663](https://github.com/deltabox-studio/toolchain/commit/f0d7663) by [T0chi](https://github.com/T0chi))
265
327
  #### Ci
266
328
  - Keep the build tsconfigs for CI typechecks ([#b1502ad](https://github.com/deltabox-studio/toolchain/commit/b1502ad) by [T0chi](https://github.com/T0chi))
267
- - the generated CI workflow.
268
- root + package `tsconfig.json` (including tests).
329
+ - Revert the package/root `typecheck` tasks to `tsconfig.build.json`.
330
+ - Add `typecheck:ci` (the old build-based pipeline) for CI and run it in the generated CI workflow.
331
+ - Make `yarn typecheck` a development-only workspace check that uses the root + package `tsconfig.json` (including tests).
269
332
  #### Migrate
270
333
  - Deep-merge the folded vite config ([#f74d2ed](https://github.com/deltabox-studio/toolchain/commit/f74d2ed) by [T0chi](https://github.com/T0chi))
271
- - Folding a hand-written `vite.config.*` into an existing `toolchain.vite` now
272
- deep-merges object literals (nested objects combine; arrays/scalars from the
273
- vite config win) instead of replacing the section, and flips a previous
274
- `config: false` to `true` since the hand-written file is removed.
275
- - Also fixes `findTopLevelValue` so a scalar last key no longer swallows the
276
- object's closing `}`, updates the managed-shim detection for the generic
277
- `resolveVite<T>(...)` form, and corrects the "nothing to migrate" message when
278
- the migration is registered but no source is detected.
334
+ - Folding a hand-written `vite.config.*` into an existing `toolchain.vite` now deep-merges object literals (nested objects combine; arrays/scalars from the vite config win) instead of replacing the section, and flips a previous `config: false` to `true` since the hand-written file is removed.
335
+ - Also fixes `findTopLevelValue` so a scalar last key no longer swallows the object's closing `}`, updates the managed-shim detection for the generic `resolveVite<T>(...)` form, and corrects the "nothing to migrate" message when the migration is registered but no source is detected.
279
336
  ### Refactors
280
337
  - Run quality checks through vp tasks ([#2fee264](https://github.com/deltabox-studio/toolchain/commit/2fee264) by [T0chi](https://github.com/T0chi))
281
338
  - Run build and test through vp tasks too ([#e890665](https://github.com/deltabox-studio/toolchain/commit/e890665) by [T0chi](https://github.com/T0chi))
@@ -287,55 +344,49 @@
287
344
  - Cover scaffold --force, root Oxc inheritance, boolean tool opt-ins, workflow package-manager version defaults and the managed-file conflict group.
288
345
  - Regenerate config artifacts and document the fixes ([#9be4d73](https://github.com/deltabox-studio/toolchain/commit/9be4d73) by [T0chi](https://github.com/T0chi))
289
346
  - Document tsconfig overrides, snapshots and `--restore` ([#dad4084](https://github.com/deltabox-studio/toolchain/commit/dad4084) by [T0chi](https://github.com/T0chi))
290
- - snapshots, removal rules, restoring, warnings) and the new CLI flags/exports
291
- the sync task API additions and an upgrade step
292
- the package reference
293
- `llms-full.txt`
347
+ - `guide/tsconfig.md`: `baseFile`, custom file names, overrides (deep merge, snapshots, removal rules, restoring, warnings) and the new CLI flags/exports
348
+ - `migration-v1-v2.md`: overrides, manifest `snapshots`/`tsconfigOverrides`, the sync task API additions and an upgrade step
349
+ - note the override revert in the `dbx reset` / `dbx tsconfig` CLI docs and the package reference
350
+ - regenerate `config/reference.md`, `config/cli.md`, `config.schema.json` and `llms-full.txt`
294
351
  - Document v2 generators, custom logger and changelog customization ([#f0f7f5d](https://github.com/deltabox-studio/toolchain/commit/f0f7f5d) by [T0chi](https://github.com/T0chi))
295
- - Update README highlights and regenerate LLM docs ([#6380770](https://github.com/deltabox-studio/toolchain/issues/6380770) by [T0chi](https://github.com/T0chi))
352
+ - Update README highlights and regenerate LLM docs ([#6380770](https://github.com/deltabox-studio/toolchain/commit/6380770) by [T0chi](https://github.com/T0chi))
296
353
  - Add the CI guide, TypeScript page and interactive CLI sections ([#fc6099a](https://github.com/deltabox-studio/toolchain/commit/fc6099a) by [T0chi](https://github.com/T0chi))
297
- - `guide/ci/` section (overview + settings + ci/issues/changelog/sync/
298
- releases) and retitle the overview to "CI".
299
- metadata, programmatic API, Vite+ generics).
300
- VS Code sync notification and CLI `sync --json` docs.
354
+ - Move the workflow/release pages from the Changelog guide into a new `guide/ci/` section (overview + settings + ci/issues/changelog/sync/ releases) and retitle the overview to "CI".
355
+ - Add `guide/typescript.md` (defineConfig, config types, ambient Zod metadata, programmatic API, Vite+ generics).
356
+ - Add `## Interactive CLI` sections and update the provider registry, VS Code sync notification and CLI `sync --json` docs.
357
+ - Refresh the LLM bundles.
301
358
  - Split the config, API, config-generator and changelog guides ([#4153d86](https://github.com/deltabox-studio/toolchain/commit/4153d86) by [T0chi](https://github.com/T0chi))
302
- - `guide/changelog.md` into folders with an index + one sibling page per
303
- second-level section.
304
- commitlint, Versioning, CLI, writing messages, Troubleshooting and
305
- Releases into sibling pages.
306
- workflows, the commitlint opt-out fallback and the migration from the
307
- deprecated top-level `changelog` section.
308
- LLM bundles.
359
+ - Turn `guide/api.md`, `guide/config.md`, `guide/config-generator.md` and `guide/changelog.md` into folders with an index + one sibling page per second-level section.
360
+ - Retitle the changelog index to "Changelog" and move Workflows, Branches, commitlint, Versioning, CLI, writing messages, Troubleshooting and Releases into sibling pages.
361
+ - Document the new `toolchain.ci` / `ci.changelog` structure, opt-in workflows, the commitlint opt-out fallback and the migration from the deprecated top-level `changelog` section.
362
+ - Update sidebar entries, cross-links, the generated reference and the LLM bundles.
309
363
  - Document the Registries view, project registries and dbx version picker ([#752d1cd](https://github.com/deltabox-studio/toolchain/commit/752d1cd) by [T0chi](https://github.com/T0chi))
310
- - Cover `registrySearchPaths`, project registries, the `registry` command, remote
311
- registries, the Registries view/actions, and the extension's version selection.
364
+ - Cover `registrySearchPaths`, project registries, the `registry` command, remote registries, the Registries view/actions, and the extension's version selection.
312
365
  - Document the global template/provider registry ([#55651e1](https://github.com/deltabox-studio/toolchain/commit/55651e1) by [T0chi](https://github.com/T0chi))
313
- - Cover the global templates dir, `--no-global`, the `template:registry` command,
314
- the CLI config and `deltabox.templatesSearchPaths` sync, remote registries, and
315
- global providers.
366
+ - Cover the global templates dir, `--no-global`, the `template:registry` command, the CLI config and `deltabox.templatesSearchPaths` sync, remote registries, and global providers.
316
367
  - Document defineConfig callbacks, shim detection and deep-merge migration ([#701de7c](https://github.com/deltabox-studio/toolchain/commit/701de7c) by [T0chi](https://github.com/T0chi))
317
- - Cover `defineConfig` promises/callbacks, the shim importing from the project's
318
- vite package, inline `resolveVite` overrides, and the vite migration deep-merging
319
- into `toolchain.vite`.
368
+ - Cover `defineConfig` promises/callbacks, the shim importing from the project's vite package, inline `resolveVite` overrides, and the vite migration deep-merging into `toolchain.vite`.
320
369
  #### Vscode
321
370
  - Document extension requirements ([#07fd6fa](https://github.com/deltabox-studio/toolchain/commit/07fd6fa) by [T0chi](https://github.com/T0chi))
322
371
  #### Config
323
372
  - Generate CLI, env and config-type references ([#ba640a3](https://github.com/deltabox-studio/toolchain/commit/ba640a3) by [T0chi](https://github.com/T0chi))
324
- - `config:docs`) to generate `apps/docs/config/index.md`, `cli.md` from
325
- the ToolchainCommand descriptors, and `env.md` from ConfigMeta.
373
+ - Add `scripts/generate-config-docs.ts` (wired into `config:generate` and `config:docs`) to generate `apps/docs/config/index.md`, `cli.md` from the ToolchainCommand descriptors, and `env.md` from ConfigMeta.
374
+ - Add the three pages to the config sidebar and frontmatter outlines.
375
+ - Extend the CI drift check to cover the new generated files.
326
376
  ### Tests
327
377
  - Run the emulate suite in a temp sandbox outside the repo ([#a94fa4c](https://github.com/deltabox-studio/toolchain/commit/a94fa4c) by [T0chi](https://github.com/T0chi))
328
- - `node_modules` link back to the repo install) instead of `tests/emulate`,
329
- so a stray sync can never touch the toolchain repo
330
- every test, and clean up on `SIGHUP`/`SIGBREAK` too
331
- sandboxes
378
+ - create the scratch workspaces under `<tmp>/dbx-emulate-*` (with a `node_modules` link back to the repo install) instead of `tests/emulate`, so a stray sync can never touch the toolchain repo
379
+ - snapshot and restore the repo's managed files (not only the manifest) after every test, and clean up on `SIGHUP`/`SIGBREAK` too
380
+ - add `yarn test:clean` (`scripts/clean-emulate.mjs`) to remove leftover sandboxes
381
+ - update the README development section (source-first workflow, `test:clean`)
332
382
  - Cover provider search paths, registry policy and remote sources ([#91a5859](https://github.com/deltabox-studio/toolchain/commit/91a5859) by [T0chi](https://github.com/T0chi))
333
383
  ### Build system
334
384
  - Run typechecks, tests and Vite+ from source without a built `dist` ([#4353a36](https://github.com/deltabox-studio/toolchain/commit/4353a36) by [T0chi](https://github.com/T0chi))
335
- - `tsconfig.workspaces.json` and regenerate every workspace `tsconfig.json`,
336
- so typechecks resolve workspace source instead of `dist`
337
- building the package first
338
- the source tsconfigs
385
+ - alias `@deltabox/toolchain` (+ subpaths) to `src` in `tsconfig.workspaces.json` and regenerate every workspace `tsconfig.json`, so typechecks resolve workspace source instead of `dist`
386
+ - enable `resolve.tsconfigPaths` for Vite/Vitest (root + every workspace)
387
+ - dogfood `vite.shim: 'static'`, so `vp` loads the generated shims without building the package first
388
+ - drop the `typecheck:ci` script, tasks and CI step; `typecheck` already runs the source tsconfigs
389
+ - apply pending formatter output to the config/changelog sources
339
390
  ### Chores
340
391
  - Fix lint warnings and remove unused helper ([#ac890d8](https://github.com/deltabox-studio/toolchain/commit/ac890d8) by [T0chi](https://github.com/T0chi))
341
392
  - Add lint and check vp tasks to every workspace ([#83bb7e5](https://github.com/deltabox-studio/toolchain/commit/83bb7e5) by [T0chi](https://github.com/T0chi))
@@ -350,24 +401,17 @@
350
401
  - Updated misleading docs ([#5a5e44c](https://github.com/deltabox-studio/toolchain/commit/5a5e44c) by [T0chi](https://github.com/T0chi))
351
402
  ### Chores
352
403
  #### Vscode
353
- - Rearranged views order ([#0620097](https://github.com/deltabox-studio/toolchain/issues/0620097) by [T0chi](https://github.com/T0chi))
404
+ - Rearranged views order ([#0620097](https://github.com/deltabox-studio/toolchain/commit/0620097) by [T0chi](https://github.com/T0chi))
354
405
 
355
406
  ## 1.11.3 (October 2026)
356
407
 
357
408
  ### Bug fixes
358
409
  #### Ci
359
410
  - Emit the dbx.config.ts fence title in the generated reference ([#d154039](https://github.com/deltabox-studio/toolchain/commit/d154039) by [T0chi](https://github.com/T0chi))
360
- - `apps/docs/config/reference.md` is generated by `scripts/generate-config.ts`
361
- (and the CI `Verify generated config artifacts are up to date` step), so its
362
- "Full example" fence must be produced by the generator. The docs rebrand added
363
- a `[dbx.config.ts]` title to that fence by hand, which `yarn config:generate`
364
- then stripped, failing the drift check. Emit the title from the generator so
365
- the regenerated (and formatted) file matches the committed one.
411
+ - `apps/docs/config/reference.md` is generated by `scripts/generate-config.ts` (and the CI `Verify generated config artifacts are up to date` step), so its "Full example" fence must be produced by the generator. The docs rebrand added a `[dbx.config.ts]` title to that fence by hand, which `yarn config:generate` then stripped, failing the drift check. Emit the title from the generator so the regenerated (and formatted) file matches the committed one.
366
412
  ### Styles
367
413
  - Format the docs brand stylesheet ([#fb3a711](https://github.com/deltabox-studio/toolchain/commit/fb3a711) by [T0chi](https://github.com/T0chi))
368
- - Run the formatter over `apps/docs/.vitepress/theme/style.css` (trailing
369
- whitespace, indentation, numeric normalization) so `yarn format` no longer
370
- dirties the tree.
414
+ - Run the formatter over `apps/docs/.vitepress/theme/style.css` (trailing whitespace, indentation, numeric normalization) so `yarn format` no longer dirties the tree.
371
415
 
372
416
  ## 1.11.2 (October 2026)
373
417
 
@@ -379,53 +423,28 @@
379
423
  ### Bug fixes
380
424
  - Write scaffold files only at the end and resolve "." names ([#c01fcf3](https://github.com/deltabox-studio/toolchain/commit/c01fcf3) by [T0chi](https://github.com/T0chi))
381
425
  - Two scaffolding robustness fixes:
382
- - Cancelling any prompt (scope, package manager, include-config, the
383
- folder picker) aborts the whole command instead of falling back to a
384
- default and creating orphan files/dirs. The local-template copier also
385
- reads and renders the entire tree into memory before writing, so a
386
- failed or interrupted run can never leave a half-copied template.
387
- - directory it is created in (`--out`/`--root`), so
388
- `dbx create --name . --out ./my-app` names the package `my-app`.
426
+ - A scaffold now writes nothing until every prompt has been answered. Cancelling any prompt (scope, package manager, include-config, the folder picker) aborts the whole command instead of falling back to a default and creating orphan files/dirs. The local-template copier also reads and renders the entire tree into memory before writing, so a failed or interrupted run can never leave a half-copied template.
427
+ - A project/workspace name of `.` resolves to the basename of the directory it is created in (`--out`/`--root`), so `dbx create --name . --out ./my-app` names the package `my-app`.
389
428
  - Tests: emulate the `.` name through both `create` and `project:init`.
390
429
  #### Shared
391
430
  - Quote a Windows command path that contains spaces ([#2e1f2ab](https://github.com/deltabox-studio/toolchain/commit/2e1f2ab) by [T0chi](https://github.com/T0chi))
392
- - `spawnCross` routes every Windows command through `cmd.exe`, which splits an
393
- unquoted command at whitespace, so an absolute path like
394
- `C:\Program Files\nodejs\node.exe` was resolved as `C:\Program` and never ran.
395
- Quote the command when it contains whitespace instead of caret-escaping the
396
- space (which `cmd.exe` still splits on). The same fix is mirrored in the
397
- extension's `win-spawn` port.
398
- - Tests: a functional case that hardlinks `node.exe` into a space-containing
399
- temp dir and runs it, plus unit assertions for `escapeCmdCommand`.
431
+ - `spawnCross` routes every Windows command through `cmd.exe`, which splits an unquoted command at whitespace, so an absolute path like `C:\Program Files\nodejs\node.exe` was resolved as `C:\Program` and never ran. Quote the command when it contains whitespace instead of caret-escaping the space (which `cmd.exe` still splits on). The same fix is mirrored in the extension's `win-spawn` port.
432
+ - Tests: a functional case that hardlinks `node.exe` into a space-containing temp dir and runs it, plus unit assertions for `escapeCmdCommand`.
400
433
  #### Vscode
401
434
  - Run template create without a shell so npm scopes survive ([#0863cf2](https://github.com/deltabox-studio/toolchain/commit/0863cf2) by [T0chi](https://github.com/T0chi))
402
- - `createFromTemplate` sent online/Vite+ creates to an integrated terminal as a
403
- shell string. On PowerShell a bare `@scope` is read as splatting (`@deltabox` ->
404
- splat of an undefined variable), so the value was dropped and commander failed
405
- with `option '-s, --scope <scope>' argument missing`.
406
- - Run every template through the same argv pipeline (`runCli`, no shell) so values
407
- like an npm scope are never mangled. Vite+ projects skip the post-create sync
408
- since they are not dbx-managed.
435
+ - `createFromTemplate` sent online/Vite+ creates to an integrated terminal as a shell string. On PowerShell a bare `@scope` is read as splatting (`@deltabox` -> splat of an undefined variable), so the value was dropped and commander failed with `option '-s, --scope <scope>' argument missing`.
436
+ - Run every template through the same argv pipeline (`runCli`, no shell) so values like an npm scope are never mangled. Vite+ projects skip the post-create sync since they are not dbx-managed.
409
437
  ### Documentation
410
438
  - Updated `vscode-example.mp4` ([#58c0061](https://github.com/deltabox-studio/toolchain/commit/58c0061) by [T0chi](https://github.com/T0chi))
411
439
  - Rebrand to the new logo and blue theme ([#e28c1f9](https://github.com/deltabox-studio/toolchain/commit/e28c1f9) by [T0chi](https://github.com/T0chi))
412
- - Swap the toolchain/box2d logos for the new `logo/*` assets, re-theme the
413
- site with the blue brand tokens and hero/logo animations, update the home
414
- page (GitHub action, feature icons), and refresh the guide/reference copy
415
- and code fences. Regenerated `llms.txt` / `llms-full.txt`.
440
+ - Swap the toolchain/box2d logos for the new `logo/*` assets, re-theme the site with the blue brand tokens and hero/logo animations, update the home page (GitHub action, feature icons), and refresh the guide/reference copy and code fences. Regenerated `llms.txt` / `llms-full.txt`.
416
441
  - Adopt the Carbon theme with code-group icons ([#09b2608](https://github.com/deltabox-studio/toolchain/commit/09b2608) by [T0chi](https://github.com/T0chi))
417
- - Build the docs on vitepress-carbon: spread its base config and override
418
- `vite.plugins` so the LLM plugin runs once (with our copy instead of
419
- Carbon's default), add `vitepress-plugin-group-icons` for language icons on
420
- `::: code-group` / `[title]` blocks, and register the theme. Also refresh
421
- the year/footer config. Adds the two dev dependencies.
442
+ - Build the docs on vitepress-carbon: spread its base config and override `vite.plugins` so the LLM plugin runs once (with our copy instead of Carbon's default), add `vitepress-plugin-group-icons` for language icons on `::: code-group` / `[title]` blocks, and register the theme. Also refresh the year/footer config. Adds the two dev dependencies.
422
443
  - Rename the "LLM context files" page to "LLMs" ([#9a9e8c7](https://github.com/deltabox-studio/toolchain/commit/9a9e8c7) by [T0chi](https://github.com/T0chi))
423
444
  ### Chores
424
445
  #### Vscode
425
446
  - Rebrand the extension icon and README ([#bbde675](https://github.com/deltabox-studio/toolchain/commit/bbde675) by [T0chi](https://github.com/T0chi))
426
- - Point the extension icon at the new `resources/logo.png` / `icon.svg`,
427
- drop the old `icon.png` / `logo.svg`, and update the README with the new
428
- banner.
447
+ - Point the extension icon at the new `resources/logo.png` / `icon.svg`, drop the old `icon.png` / `logo.svg`, and update the README with the new banner.
429
448
 
430
449
  ### Package changes
431
450
  #### Added
@@ -437,21 +456,13 @@
437
456
  ### New features
438
457
  #### Vscode
439
458
  - Scaffold any template and drive Vite+ create from the extension ([#fb4a55c](https://github.com/deltabox-studio/toolchain/commit/fb4a55c) by [T0chi](https://github.com/T0chi))
440
- - project" picker (`template:list --online`) instead of only the dbx builtins;
441
- each entry runs the same create pipeline (name/scope/variables/actions).
442
- bare `vite-plus` template — through the extension's prompt pipeline: pick a
443
- concrete Vite+ template, then create like any other template. Consumers no
444
- longer land in the interactive `vp create` CLI menu.
459
+ - List every template (builtin + local + npm/git + Vite+) in the "Scaffold project" picker (`template:list --online`) instead of only the dbx builtins; each entry runs the same create pipeline (name/scope/variables/actions).
460
+ - Route `vite:create` — from the Vite+ command picker, the provider tree and the bare `vite-plus` template — through the extension's prompt pipeline: pick a concrete Vite+ template, then create like any other template. Consumers no longer land in the interactive `vp create` CLI menu.
445
461
  ### Bug fixes
446
462
  #### Project
447
463
  - Tag a scaffolded workspace with its own project type ([#9d05637](https://github.com/deltabox-studio/toolchain/commit/9d05637) by [T0chi](https://github.com/T0chi))
448
- - `resolveType` fell back to the loaded config's `project.type`, but a scaffold
449
- runs with the config of the directory it is invoked from — the monorepo root
450
- when adding a workspace. A workspace was therefore tagged `monorepo-root`, and
451
- the post-scaffold sync then generated root-only CI, husky and VS Code files
452
- inside the workspace.
453
- - Only honour an explicit `--type` (or the command's implied default); ignore the
454
- ambient config type.
464
+ - `resolveType` fell back to the loaded config's `project.type`, but a scaffold runs with the config of the directory it is invoked from — the monorepo root when adding a workspace. A workspace was therefore tagged `monorepo-root`, and the post-scaffold sync then generated root-only CI, husky and VS Code files inside the workspace.
465
+ - Only honour an explicit `--type` (or the command's implied default); ignore the ambient config type.
455
466
  ### Documentation
456
467
  - Update descriptions and vscode screenshot ([#215bc4f](https://github.com/deltabox-studio/toolchain/commit/215bc4f) by [T0chi](https://github.com/T0chi))
457
468
  ### Styles
@@ -459,10 +470,8 @@
459
470
  - Long single-line descriptions from earlier commits; `vp fmt` wraps them back.
460
471
  ### Tests
461
472
  - Emulate custom templates/providers and workspace scaffolding ([#37d370e](https://github.com/deltabox-studio/toolchain/commit/37d370e) by [T0chi](https://github.com/T0chi))
462
- - Code extension writes) and assert the CLI lists, scaffolds and runs them —
463
- i.e. the payloads the extension's trees consume.
464
- assert the workspace does NOT inherit their outputs
465
- (.github/.husky/.vscode/commitlint.config.mjs).
473
+ - Register a custom local template plus a custom provider (the JSON shape the VS Code extension writes) and assert the CLI lists, scaffolds and runs them — i.e. the payloads the extension's trees consume.
474
+ - Scaffold a workspace into a root that enables the root-only sections, and assert the workspace does NOT inherit their outputs (.github/.husky/.vscode/commitlint.config.mjs).
466
475
  ### Chores
467
476
  #### Vscode
468
477
  - Rename the Home "All actions" section to "More actions" ([#b8a2137](https://github.com/deltabox-studio/toolchain/commit/b8a2137) by [T0chi](https://github.com/T0chi))
@@ -477,24 +486,14 @@
477
486
  ### Bug fixes
478
487
  #### Vscode
479
488
  - Recompute the Home model when the provider list loads ([#fd6f6f1](https://github.com/deltabox-studio/toolchain/commit/fd6f6f1) by [T0chi](https://github.com/T0chi))
480
- - The Home "Run Vite+" button is disabled while the Home model's `hasVite` is
481
- false, and that value comes from the asynchronously-loaded provider list (a
482
- `dbx providers --json` spawn). A webview rendered before the list resolved was
483
- never re-posted, so the button could stay disabled from a cold start even though
484
- the `deltabox.hasVite` context key (command palette) was updated.
485
- - Recompute the context keys and the Home model whenever the provider tree
486
- reloads, via its `onDidChangeTreeData` event. Vite+ is always contributed by the
487
- toolchain, so `hasVite` is true as soon as the list loads.
489
+ - The Home "Run Vite+" button is disabled while the Home model's `hasVite` is false, and that value comes from the asynchronously-loaded provider list (a `dbx providers --json` spawn). A webview rendered before the list resolved was never re-posted, so the button could stay disabled from a cold start even though the `deltabox.hasVite` context key (command palette) was updated.
490
+ - Recompute the context keys and the Home model whenever the provider tree reloads, via its `onDidChangeTreeData` event. Vite+ is always contributed by the toolchain, so `hasVite` is true as soon as the list loads.
488
491
  #### Core
489
492
  - Split the last-sync timestamp into a gitignored timestamps.json ([#0aa6f77](https://github.com/deltabox-studio/toolchain/commit/0aa6f77) by [T0chi](https://github.com/T0chi))
490
- - The per-project `manifest.json` embedded `syncedAt`, so every sync rewrote a
491
- committed file with a new clock value — noisy diffs in the repo and in every
492
- consumer. Move the timestamp out into a sibling, gitignored
493
- `.dbx/toolchain/timestamps.json`:
494
- - to `timestamps.json`, so the next sync migrates a legacy inline value
495
- automatically (the property is gone from `manifest.json`).
496
- inline `syncedAt` until that migration runs, so nothing breaks in between.
497
- only the block's comment was updated.
493
+ - The per-project `manifest.json` embedded `syncedAt`, so every sync rewrote a committed file with a new clock value — noisy diffs in the repo and in every consumer. Move the timestamp out into a sibling, gitignored `.dbx/toolchain/timestamps.json`:
494
+ - `writeManifest` writes only the file list to `manifest.json` and the timestamp to `timestamps.json`, so the next sync migrates a legacy inline value automatically (the property is gone from `manifest.json`).
495
+ - `readManifest`/`readSyncedAt` (and the VS Code reader) fall back to a legacy inline `syncedAt` until that migration runs, so nothing breaks in between.
496
+ - The new file is covered by the existing `.dbx/toolchain/*` gitignore glob; only the block's comment was updated.
498
497
  ### Documentation
499
498
  - Added a video preview of the extension ([#6b0ca40](https://github.com/deltabox-studio/toolchain/commit/6b0ca40) by [T0chi](https://github.com/T0chi))
500
499
 
@@ -509,85 +508,51 @@
509
508
  ### Bug fixes
510
509
  #### Core
511
510
  - Only fall back to tsx when Node cannot load TypeScript ([#c96ae7d](https://github.com/deltabox-studio/toolchain/commit/c96ae7d) by [T0chi](https://github.com/T0chi))
512
- - The config loader retried every failed native import through `tsx`, so a
513
- genuinely broken `dbx.config.*` could be silently loaded as an empty config.
514
- On Linux the root build had baked an absolute path to `tsx` into the bundle,
515
- which happened to resolve there: tsx elided the unresolvable (unused) import,
516
- the config "loaded", no error was recorded, and `dbx sync` exited 0 instead of
517
- failing (the emulation suite caught this in CI).
518
- - (`ERR_UNKNOWN_FILE_EXTENSION`, `ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`); let
519
- genuine errors (module-not-found, syntax errors, throws) propagate.
520
- `import('tsx/esm/api')` instead of a build-machine path, and promote `tsx` to
521
- a runtime dependency so the config-loader fallback works for consumers.
511
+ - The config loader retried every failed native import through `tsx`, so a genuinely broken `dbx.config.*` could be silently loaded as an empty config. On Linux the root build had baked an absolute path to `tsx` into the bundle, which happened to resolve there: tsx elided the unresolvable (unused) import, the config "loaded", no error was recorded, and `dbx sync` exited 0 instead of failing (the emulation suite caught this in CI).
512
+ - Only use the `tsx` fallback for errors that mean Node cannot load TS itself (`ERR_UNKNOWN_FILE_EXTENSION`, `ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`); let genuine errors (module-not-found, syntax errors, throws) propagate.
513
+ - Unwrap tsx's possibly-nested default export.
514
+ - Keep `tsx` external in the root bundle so `dist` keeps the portable bare `import('tsx/esm/api')` instead of a build-machine path, and promote `tsx` to a runtime dependency so the config-loader fallback works for consumers.
522
515
 
523
516
  ## 1.10.0 (October 2026)
524
517
 
525
518
  ### New features
526
519
  #### Template
527
520
  - Scaffold actions, package-manager choice and catalogs ([#6c66c97](https://github.com/deltabox-studio/toolchain/commit/6c66c97) by [T0chi](https://github.com/T0chi))
528
- - `module` (relative to the template dir, `export default async (ctx) => {}`,
529
- not copied to the output) or a shell `command`. Actions run through the same
530
- pipeline everywhere (CLI prompts / `--action <id>`, extension prompts,
531
- programmatic API `actions: string[]`).
532
- (`builtin: 'install'`, default off) and a `packageManager` input
533
- (yarn default | pnpm | npm | bun).
534
- when supported: `.yarnrc.yml` (yarn), `pnpm-workspace.yaml` (pnpm),
535
- `package.json` `workspaces.catalog` (bun); npm pins versions inline.
536
- task that keeps `.yarnrc.yml` / `pnpm-workspace.yaml` catalogs in sync. It
537
- only writes a file that is absent or toolchain-managed (marker comment), so a
538
- hand-written file is never clobbered; bun/npm warn.
539
- the manager.
540
- config reference/schema/types regenerated.
521
+ - Templates can declare post-scaffold `actions`: a `builtin` (`install`), a JS `module` (relative to the template dir, `export default async (ctx) => {}`, not copied to the output) or a shell `command`. Actions run through the same pipeline everywhere (CLI prompts / `--action <id>`, extension prompts, programmatic API `actions: string[]`).
522
+ - Built-in templates declare an opt-in **Install dependencies?** action (`builtin: 'install'`, default off) and a `packageManager` input (yarn default | pnpm | npm | bun).
523
+ - Scaffolds write the chosen manager's catalog file and reference `catalog:` when supported: `.yarnrc.yml` (yarn), `pnpm-workspace.yaml` (pnpm), `package.json` `workspaces.catalog` (bun); npm pins versions inline.
524
+ - Add a `catalogs` config section (`packages` + `named`) and a `catalogs` sync task that keeps `.yarnrc.yml` / `pnpm-workspace.yaml` catalogs in sync. It only writes a file that is absent or toolchain-managed (marker comment), so a hand-written file is never clobbered; bun/npm warn.
525
+ - `project:init*` gains `--package-manager`; the extension scaffold prompts for the manager.
526
+ - Docs: templates (inputs + actions), project (package manager & catalogs), config reference/schema/types regenerated.
541
527
  - Generic builtins + inputs + Vite+ templates; resilient config loading ([#fb8d7cc](https://github.com/deltabox-studio/toolchain/commit/fb8d7cc) by [T0chi](https://github.com/T0chi))
542
- - `catalog:` protocol from generated projects, add a pinned
543
- `@deltabox/toolchain` devDependency, and generate a `dbx.config.ts` with only
544
- the `project` section — every other section is now opt-in.
545
- `monorepo-example`, and expose every Vite+ template
546
- (`vite-plus-monorepo`, `-application`, `-library`, `-generator`).
547
- shared by the CLI, the programmatic API, the VS Code extension and the
548
- builtins; document it in the Templates guide.
549
- `@deltabox/toolchain/tsdown` (the private `@deltabox/toolchain-tsdown` package
550
- is never published).
551
- stderr instead of aborting unrelated commands (`template:list`, `providers`,
552
- ...), so the extension views no longer empty out after scaffolding; `sync`
553
- still fails on a broken config (and `--recursive` reports per project).
554
- choice, and add a "Need help? Go to documentation" link to the Home view.
528
+ - Templates: drop Turbo (no `turbo.json`, dep or scripts) and the repo-internal `catalog:` protocol from generated projects, add a pinned `@deltabox/toolchain` devDependency, and generate a `dbx.config.ts` with only the `project` section — every other section is now opt-in.
529
+ - Add a bare `monorepo` builtin (no example workspace), keep `monorepo-example`, and expose every Vite+ template (`vite-plus-monorepo`, `-application`, `-library`, `-generator`).
530
+ - Add a template input pipeline (`variables` with prompt/default/options/required) shared by the CLI, the programmatic API, the VS Code extension and the builtins; document it in the Templates guide.
531
+ - Fix the generated workspace `tsdown.config.ts` to import `@deltabox/toolchain/tsdown` (the private `@deltabox/toolchain-tsdown` package is never published).
532
+ - Load `dbx.config.*` tolerantly in the CLI: a broken config now warns on stderr instead of aborting unrelated commands (`template:list`, `providers`, ...), so the extension views no longer empty out after scaffolding; `sync` still fails on a broken config (and `--recursive` reports per project).
533
+ - Extension: prompt for template inputs, offer a bare/example monorepo scaffold choice, and add a "Need help? Go to documentation" link to the Home view.
555
534
  ### Bug fixes
556
535
  - Issues found emulating the extension + command palette ([#1049afa](https://github.com/deltabox-studio/toolchain/commit/1049afa) by [T0chi](https://github.com/T0chi))
557
536
  - Emulated the extension (bundled and portal `dbx`) against a consumer workspace:
558
- - name ("No version specified for X") for yarn/pnpm/npm/bun, so `projectToPackageJson`
559
- skips the field when no version is known, and scaffolds/`project:config` seed a
560
- default version (`DEFAULT_PACKAGE_MANAGER_VERSIONS`) or the existing
561
- package.json manager. `renderToolchainConfig` always emits `packageManagerVersion`.
562
- `vite-plus` ships two bins, so `npx vite-plus` failed with "could not determine
563
- executable to run" (broke `dbx vite:*`).
564
- `@deltabox/toolchain/vite` no longer runs `resolveDbx` at module load, so every
565
- command stopped printing spurious `dbx`-resolution warnings.
566
- option").
567
- template), so the Managed Files and Home views populate instead of staying empty.
537
+ - `packageManager` is never written without a version. Corepack rejects a bare name ("No version specified for X") for yarn/pnpm/npm/bun, so `projectToPackageJson` skips the field when no version is known, and scaffolds/`project:config` seed a default version (`DEFAULT_PACKAGE_MANAGER_VERSIONS`) or the existing package.json manager. `renderToolchainConfig` always emits `packageManagerVersion`.
538
+ - `resolveVp`'s `npx` fallback names the bin (`npx --yes --package vite-plus vp`): `vite-plus` ships two bins, so `npx vite-plus` failed with "could not determine executable to run" (broke `dbx vite:*`).
539
+ - `DBX_TASKS` computes its commands lazily (getters): importing `@deltabox/toolchain/vite` no longer runs `resolveDbx` at module load, so every command stopped printing spurious `dbx`-resolution warnings.
540
+ - `template:info` accepts `--json` (the extension passed it; it errored "unknown option").
541
+ - The extension syncs right after a successful scaffold (project/root/workspace/ template), so the Managed Files and Home views populate instead of staying empty.
542
+ - Regression tests for the version-less `packageManager` and the versioned scaffold.
568
543
  #### Project
569
544
  - Preserve scoped package name and never delete catalog files ([#dbb0b21](https://github.com/deltabox-studio/toolchain/commit/dbb0b21) by [T0chi](https://github.com/T0chi))
570
545
  - Found by exercising a portal-linked consumer workspace:
571
- - defines `name` without `scope` (eg. a nested workspace), instead of renaming
572
- `@acme/a` to `a`. Mirrors the token resolution in the config loader.
573
- a previously toolchain-managed catalog file is never deleted when the task
574
- stops producing it (eg. the user replaces it with a hand-written one) — it
575
- already refused to overwrite it, but `runSync` would still remove it.
546
+ - `projectSyncTask` now falls back to the `package.json` scope when a config defines `name` without `scope` (eg. a nested workspace), instead of renaming `@acme/a` to `a`. Mirrors the token resolution in the config loader.
547
+ - `catalogsSyncTask` declares `keep: ['.yarnrc.yml', 'pnpm-workspace.yaml']`, so a previously toolchain-managed catalog file is never deleted when the task stops producing it (eg. the user replaces it with a hand-written one) — it already refused to overwrite it, but `runSync` would still remove it.
548
+ - Regression tests for both.
576
549
  ### Tests
577
550
  - Add a real CLI emulation suite under tests/emulate ([#2c76d66](https://github.com/deltabox-studio/toolchain/commit/2c76d66) by [T0chi](https://github.com/T0chi))
578
- - extension and command palette drive) in a per-test scratch workspace under
579
- `tests/emulate/<id>` and asserts on real behavior: builtins + inputs/actions,
580
- per-package-manager scaffolding (catalog vs pinned), bare/nested monorepos,
581
- custom module/command actions, the opt-in install action, catalog sync +
582
- never-delete, config-load resilience, `template:info --json`, and the
583
- post-scaffold extension flow.
584
- boundary and never inherits the toolchain repo's own config/manifest. Scratch
585
- dirs are removed after every test (pass or fail), once more on `afterAll`, and
586
- again on process exit; the repo's own manifest is snapshotted and restored so
587
- the working tree stays clean.
588
- always execute against a fresh CLI bundle.
589
- emitting a dangling `catalog:` — Bun's catalog lives in `package.json`
590
- `workspaces.catalog`, which only a monorepo root writes. Regression tests added.
551
+ - `tests/emulate.test.ts` spawns the **built** `dbx` CLI (the surface the VS Code extension and command palette drive) in a per-test scratch workspace under `tests/emulate/<id>` and asserts on real behavior: builtins + inputs/actions, per-package-manager scaffolding (catalog vs pinned), bare/nested monorepos, custom module/command actions, the opt-in install action, catalog sync + never-delete, config-load resilience, `template:info --json`, and the post-scaffold extension flow.
552
+ - Each scratch root carries an empty `.git` so `dbx` treats it as a repository boundary and never inherits the toolchain repo's own config/manifest. Scratch dirs are removed after every test (pass or fail), once more on `afterAll`, and again on process exit; the repo's own manifest is snapshotted and restored so the working tree stays clean.
553
+ - `.gitignore`: ignore `tests/emulate/*` (the scratch content).
554
+ - root `test` script now runs `vp run build:root` first, so the emulation tests always execute against a fresh CLI bundle.
555
+ - fix(project): a single Bun project now pins its dependencies instead of emitting a dangling `catalog:` — Bun's catalog lives in `package.json` `workspaces.catalog`, which only a monorepo root writes. Regression tests added.
591
556
 
592
557
  ## 1.9.2 (October 2026)
593
558
 
@@ -599,75 +564,36 @@
599
564
  ### CI
600
565
  #### Vscode
601
566
  - Target the release environment by name (drop resourceType) ([#2bbd25a](https://github.com/deltabox-studio/toolchain/commit/2bbd25a) by [T0chi](https://github.com/T0chi))
602
- - `resourceType` only accepts `virtualMachine`/`Kubernetes`. `resourceType: none`
603
- made the deployment job look for a resource of type `none`, so it failed with
604
- "No resource were found in the environment ... ResourceType Undefined". Use the
605
- string form `environment: 'release'`, which records the deployment against the
606
- resource-less environment and still applies its approvals/checks.
567
+ - `resourceType` only accepts `virtualMachine`/`Kubernetes`. `resourceType: none` made the deployment job look for a resource of type `none`, so it failed with "No resource were found in the environment ... ResourceType Undefined". Use the string form `environment: 'release'`, which records the deployment against the resource-less environment and still applies its approvals/checks.
607
568
 
608
569
  ## 1.9.0 (October 2026)
609
570
 
610
571
  ### New features
611
572
  #### Changelog
612
573
  - Allow a raw YAML string as a workflow setting ([#aa0e1b7](https://github.com/deltabox-studio/toolchain/commit/aa0e1b7) by [T0chi](https://github.com/T0chi))
613
- - `changelog.workflows.<id>` now accepts a raw YAML string in addition to a
614
- boolean or a `WorkflowConfig` object. A raw string is written verbatim as the
615
- workflow file: no default merge, no token replacement and no generated header,
616
- and the `changelog.branches` defaults don't apply (it defines its own triggers).
617
- An empty string disables the workflow.
618
- - Docs: add a "Workflows" section covering the three forms, and a "Writing commit
619
- messages" section warning about shell escaping (PowerShell backtick escapes and
620
- bash command substitution) and AI/LLM-drafted messages introducing stray control
621
- characters, curly quotes, dashes and other typographic characters. Regenerate
622
- the schema, types and docs reference.
574
+ - `changelog.workflows.<id>` now accepts a raw YAML string in addition to a boolean or a `WorkflowConfig` object. A raw string is written verbatim as the workflow file: no default merge, no token replacement and no generated header, and the `changelog.branches` defaults don't apply (it defines its own triggers). An empty string disables the workflow.
575
+ - Docs: add a "Workflows" section covering the three forms, and a "Writing commit messages" section warning about shell escaping (PowerShell backtick escapes and bash command substitution) and AI/LLM-drafted messages introducing stray control characters, curly quotes, dashes and other typographic characters. Regenerate the schema, types and docs reference.
623
576
  ### CI
624
577
  #### Vscode
625
578
  - Skip the release when the extension version is already published ([#0d54cfe](https://github.com/deltabox-studio/toolchain/commit/0d54cfe) by [T0chi](https://github.com/T0chi))
626
- - `vsce publish` fails with "already exists" when `deltabox.toolchain-vscode@<version>`
627
- is already on the Marketplace, failing the whole pipeline. Add a `Check` stage
628
- before `Build` that reads the version from `packages/vscode/package.json`,
629
- queries the Marketplace `extensionquery` API, and exposes an `alreadyPublished`
630
- stage output. `Build` and `Release` now depend on `Check` and skip when it is
631
- `true` (a failed query assumes "not published" so a release is never silently
632
- skipped).
579
+ - `vsce publish` fails with "already exists" when `deltabox.toolchain-vscode@<version>` is already on the Marketplace, failing the whole pipeline. Add a `Check` stage before `Build` that reads the version from `packages/vscode/package.json`, queries the Marketplace `extensionquery` API, and exposes an `alreadyPublished` stage output. `Build` and `Release` now depend on `Check` and skip when it is `true` (a failed query assumes "not published" so a release is never silently skipped).
633
580
  ### Chores
634
581
  #### Changelog
635
582
  - Repair escaped text in the 1.8.0 entry ([#587e47d](https://github.com/deltabox-studio/toolchain/commit/587e47d) by [T0chi](https://github.com/T0chi))
636
- - The shared/core/project/tsconfig/vite commits were authored with PowerShell
637
- `\``-escaped backticks, so their bodies carried `\` + control-character
638
- artifacts (e.g. `` `r `` -> `\`+CR, `` `b `` -> backspace). The changelog
639
- sanitizer stripped the control characters but left the stray backslashes and
640
- dropped letters, so the 1.8.0 entry read `esolveVite`, `\{ ... }\`, `epo\`, etc.
641
- Restore the intended text (backticked code, `resolveVite`, `repo`/`repository`,
642
- `name`/`scope`/`description`/`type`, `rootFile`/`defaultFile`/`buildFile`).
583
+ - The shared/core/project/tsconfig/vite commits were authored with PowerShell `\``-escaped backticks, so their bodies carried `\` + control-character artifacts (e.g. `` `r `` -> `\`+CR, `` `b `` -> backspace). The changelog sanitizer stripped the control characters but left the stray backslashes and dropped letters, so the 1.8.0 entry read `esolveVite`, `\{ ... }\`, `epo\`, etc. Restore the intended text (backticked code, `resolveVite`, `repo`/`repository`, `name`/`scope`/`description`/`type`, `rootFile`/`defaultFile`/`buildFile`).
643
584
 
644
585
  ## 1.8.0 (October 2026)
645
586
 
646
587
  ### New features
647
588
  #### Cli
648
589
  - Expose the sync tasks to commands and keep --json output clean ([#1e4ecec](https://github.com/deltabox-studio/toolchain/commit/1e4ecec) by [T0chi](https://github.com/T0chi))
649
- - The command context now carries `syncTasks` (`defaultSyncTasks()`) so a package
650
- command such as `migrate` can regenerate managed files without depending on
651
- every sync package. Skip the update-check notice when `--json` is passed so it
652
- never lands on stdout and corrupts machine output.
590
+ - The command context now carries `syncTasks` (`defaultSyncTasks()`) so a package command such as `migrate` can regenerate managed files without depending on every sync package. Skip the update-check notice when `--json` is passed so it never lands on stdout and corrupts machine output.
653
591
  #### Changelog
654
592
  - Per-workspace changelogs and configurable branches ([#0aa329c](https://github.com/deltabox-studio/toolchain/commit/0aa329c) by [T0chi](https://github.com/T0chi))
655
- - Scan a workspace's own commits (plus its transitive dependencies) via
656
- `relatedWorkspacePaths` and create a missing workspace `CHANGELOG.md` instead of
657
- skipping it. `changelog.branches.main`/`dev` accept a string or an array, `dev`
658
- defaults to `main`, and the branch list is injected into the generated
659
- workflows. Add `changelog.commitlint.dir` for a custom commitlint config
660
- location. Release notes aggregate every changelog entry since the last tag.
593
+ - Scan a workspace's own commits (plus its transitive dependencies) via `relatedWorkspacePaths` and create a missing workspace `CHANGELOG.md` instead of skipping it. `changelog.branches.main`/`dev` accept a string or an array, `dev` defaults to `main`, and the branch list is injected into the generated workflows. Add `changelog.commitlint.dir` for a custom commitlint config location. Release notes aggregate every changelog entry since the last tag.
661
594
  #### Migrate
662
595
  - Recursive, interactive migration and post-migration sync ([#bb87b33](https://github.com/deltabox-studio/toolchain/commit/bb87b33) by [T0chi](https://github.com/T0chi))
663
- - `dbx migrate` is now `--recursive` (off by default): it discovers the projects
664
- under the root and, on a TTY, prompts a multi-select with an "All projects"
665
- option. The `vite` migration creates a fresh nested `dbx.config.ts` (wrapped in
666
- `defineConfig`) when the project has none, and removes the folded
667
- `vite.config.*` unless `--ignore-vite-config-file`. `--write` also regenerates
668
- the project's managed files unless `--ignore-managed-files`, dropping the
669
- changelog task when `--ignore-changelog`; removals are reported. Adds
670
- `@clack/prompts`, `@deltabox/toolchain-core` and `glob` to the package.
596
+ - `dbx migrate` is now `--recursive` (off by default): it discovers the projects under the root and, on a TTY, prompts a multi-select with an "All projects" option. The `vite` migration creates a fresh nested `dbx.config.ts` (wrapped in `defineConfig`) when the project has none, and removes the folded `vite.config.*` unless `--ignore-vite-config-file`. `--write` also regenerates the project's managed files unless `--ignore-managed-files`, dropping the changelog task when `--ignore-changelog`; removals are reported. Adds `@clack/prompts`, `@deltabox/toolchain-core` and `glob` to the package.
671
597
  #### Vite
672
598
  - Accept a single options object in resolveVite ([#2e2384b](https://github.com/deltabox-studio/toolchain/commit/2e2384b) by [T0chi](https://github.com/T0chi))
673
599
  - `resolveVite(options?: DbxConfig & ResolveViteOptions)` replaces the two-argument form. The generated shim passes `{ cwd: import.meta.dirname }` so a nested shim resolves its own `dbx.config.*` instead of the process cwd's.
@@ -686,52 +612,25 @@
686
612
  ### Bug fixes
687
613
  #### Vscode
688
614
  - Resolve the bundled CLI and gate commands on availability ([#5220ed3](https://github.com/deltabox-studio/toolchain/commit/5220ed3) by [T0chi](https://github.com/T0chi))
689
- - Capture the running extension's path and version at activation instead of
690
- hardcoding the id (`deltabox.toolchain` is stale: the id is
691
- `<publisher>.<name>`), so `bundledCliEntry()`/`pinnedToolchainSpec()` find the
692
- shipped `dbx.cjs` and Providers/Templates/scaffolding work without a
693
- project-local install. Disable the sync commands (`deltabox.canSync`) and the
694
- Vite+ commands (`deltabox.hasVite`) via context keys + command `enablement` and
695
- the Home buttons when there is nothing to sync / the provider is unavailable.
696
- Exclude `dbx.config.ts` and `.dbx/**` from the VSIX.
615
+ - Capture the running extension's path and version at activation instead of hardcoding the id (`deltabox.toolchain` is stale: the id is `<publisher>.<name>`), so `bundledCliEntry()`/`pinnedToolchainSpec()` find the shipped `dbx.cjs` and Providers/Templates/scaffolding work without a project-local install. Disable the sync commands (`deltabox.canSync`) and the Vite+ commands (`deltabox.hasVite`) via context keys + command `enablement` and the Home buttons when there is nothing to sync / the provider is unavailable. Exclude `dbx.config.ts` and `.dbx/**` from the VSIX.
697
616
  ### Documentation
698
617
  - Add guides for every config section and the llms output ([#4c231dc](https://github.com/deltabox-studio/toolchain/commit/4c231dc) by [T0chi](https://github.com/T0chi))
699
- - Add per-section guides (project, biome, vite, watch, logger, tsconfig), refresh
700
- the CLI/config/monorepo/VS Code/api pages and the sidebar, and wire
701
- `vitepress-plugin-llms` with `apps/docs/llms.md` plus the script that copies the
702
- generated `llms.txt`/`llms-full.txt` to the repo root.
618
+ - Add per-section guides (project, biome, vite, watch, logger, tsconfig), refresh the CLI/config/monorepo/VS Code/api pages and the sidebar, and wire `vitepress-plugin-llms` with `apps/docs/llms.md` plus the script that copies the generated `llms.txt`/`llms-full.txt` to the repo root.
703
619
  ### Build system
704
620
  - Make the published package installable ([#b2597ee](https://github.com/deltabox-studio/toolchain/commit/b2597ee) by [T0chi](https://github.com/T0chi))
705
- - npm runs a dependency's `postinstall` on install, so the repo-only
706
- `husky && node scripts/bootstrap.mjs` broke every consumer (and global) install
707
- with `'husky' is not recognized`. Move the logic into `scripts/bootstrap.mjs`,
708
- publish it, and guard every checkout-only step: husky runs only when `.husky`
709
- exists and the dist build only when `packages/` exists. A consumer install is
710
- now a clean no-op.
621
+ - npm runs a dependency's `postinstall` on install, so the repo-only `husky && node scripts/bootstrap.mjs` broke every consumer (and global) install with `'husky' is not recognized`. Move the logic into `scripts/bootstrap.mjs`, publish it, and guard every checkout-only step: husky runs only when `.husky` exists and the dist build only when `packages/` exists. A consumer install is now a clean no-op.
711
622
  ### CI
712
623
  - Aggregate release notes and refresh the generated workflows ([#9426a40](https://github.com/deltabox-studio/toolchain/commit/9426a40) by [T0chi](https://github.com/T0chi))
713
- - The release workflow now extracts every changelog entry since the last tag, and
714
- the generated `ci.yml`/`release.yml` are regenerated from `dbx.config.ts`.
715
- Includes the hand-written `release-vscode.yml` pipeline.
624
+ - The release workflow now extracts every changelog entry since the last tag, and the generated `ci.yml`/`release.yml` are regenerated from `dbx.config.ts`. Includes the hand-written `release-vscode.yml` pipeline.
716
625
  #### Vscode
717
626
  - Fix the release-vscode Azure Pipelines trigger ([#b59964c](https://github.com/deltabox-studio/toolchain/commit/b59964c) by [T0chi](https://github.com/T0chi))
718
- - `pr` is a top-level pipeline keyword, not a child of `trigger` (whose full
719
- syntax only accepts `batch`, `branches`, `paths` and `tags`), so `trigger.pr`
720
- was reported as an unexpected property. Move `pr: none` to the top level and
721
- trigger on `v*` tags through `tags` (with `branches: exclude: ['*']` for a
722
- tag-only trigger) instead of the invalid `branches.include: refs/tags/v*`.
627
+ - `pr` is a top-level pipeline keyword, not a child of `trigger` (whose full syntax only accepts `batch`, `branches`, `paths` and `tags`), so `trigger.pr` was reported as an unexpected property. Move `pr: none` to the top level and trigger on `v*` tags through `tags` (with `branches: exclude: ['*']` for a tag-only trigger) instead of the invalid `branches.include: refs/tags/v*`.
723
628
  ### Chores
724
629
  - Self-host nested dbx configs across the workspaces ([#003cb9f](https://github.com/deltabox-studio/toolchain/commit/003cb9f) by [T0chi](https://github.com/T0chi))
725
- - Every workspace now has its own `dbx.config.ts` (holding its Vite Task
726
- definitions) and a generated `vite.config.ts` shim, plus its own tracked
727
- manifest. The root gains a `@deltabox/toolchain` `portal:.` self-link so the
728
- shims resolve `@deltabox/toolchain/vite`, and `.gitignore` keeps nested
729
- manifests while ignoring the rest. The root `tsconfig.monorepo.json` is renamed
730
- to `tsconfig.workspaces.json`.
630
+ - Every workspace now has its own `dbx.config.ts` (holding its Vite Task definitions) and a generated `vite.config.ts` shim, plus its own tracked manifest. The root gains a `@deltabox/toolchain` `portal:.` self-link so the shims resolve `@deltabox/toolchain/vite`, and `.gitignore` keeps nested manifests while ignoring the rest. The root `tsconfig.monorepo.json` is renamed to `tsconfig.workspaces.json`.
731
631
  #### Deps
732
632
  - Refresh the lockfile ([#420c805](https://github.com/deltabox-studio/toolchain/commit/420c805) by [T0chi](https://github.com/T0chi))
733
- - Covers `vitepress-plugin-llms` (docs), `@clack/prompts`/`glob`/core (migrate)
734
- and the root `@deltabox/toolchain` `portal:.` self-link.
633
+ - Covers `vitepress-plugin-llms` (docs), `@clack/prompts`/`glob`/core (migrate) and the root `@deltabox/toolchain` `portal:.` self-link.
735
634
 
736
635
  ### Package changes
737
636
  #### Added
@@ -748,7 +647,7 @@
748
647
 
749
648
  ### CI
750
649
  #### Vscode
751
- - Upload `release-vscode.yml` pipeline ([#3080357](https://github.com/deltabox-studio/toolchain/issues/3080357) by [T0chi](https://github.com/T0chi))
650
+ - Upload `release-vscode.yml` pipeline ([#3080357](https://github.com/deltabox-studio/toolchain/commit/3080357) by [T0chi](https://github.com/T0chi))
752
651
 
753
652
  ## 1.7.6 (October 2026)
754
653
 
@@ -785,7 +684,7 @@
785
684
  - Set up ci with `Azure Pipelines` ([#5bc736f](https://github.com/deltabox-studio/toolchain/commit/5bc736f) by [T0chi](https://github.com/T0chi))
786
685
  - [skip ci]
787
686
  ### Chores
788
- - Remove `azure-pipelines.yml` ([#7965965](https://github.com/deltabox-studio/toolchain/issues/7965965) by [T0chi](https://github.com/T0chi))
687
+ - Remove `azure-pipelines.yml` ([#7965965](https://github.com/deltabox-studio/toolchain/commit/7965965) by [T0chi](https://github.com/T0chi))
789
688
 
790
689
  ## 1.7.1 (October 2026)
791
690
 
@@ -804,7 +703,7 @@
804
703
  - Add stripControlChars/stripEscapeArtifacts/sanitizeText to the shared string utils: they strip the predictable shell-escape artifacts (a backslash before a control character) and any remaining bare control characters, while leaving ordinary backslashes and normal whitespace alone. Apply them to the config markdown generator's descriptions and the changelog commit reader/formatter, and cap generated headings at h6 (VitePress dropped the literal #######).
805
704
  ### Chores
806
705
  #### Changelog
807
- - Repair escaped commit text and label code refs ([#1425419](https://github.com/deltabox-studio/toolchain/issues/1425419) by [T0chi](https://github.com/T0chi))
706
+ - Repair escaped commit text and label code refs ([#1425419](https://github.com/deltabox-studio/toolchain/commit/1425419) by [T0chi](https://github.com/T0chi))
808
707
  - PowerShell interpreted the escaped backticks in the commit bodies as control-character escapes, so the changelog carried backslash+control artifacts (TAB/CR/LF/BS/FF/VT) and mojibake. Repair the affected 1.4.1-1.6.1 entries and add backticks around commands, paths, flags, types and identifiers throughout the file.
809
708
 
810
709
  ## 1.6.1 (October 2026)
@@ -844,7 +743,7 @@
844
743
 
845
744
  ### New features
846
745
  #### Changelog
847
- - Emit the husky `commit-msg` hook for consumers ([#6898386](https://github.com/deltabox-studio/toolchain/issues/6898386) by [T0chi](https://github.com/T0chi))
746
+ - Emit the husky `commit-msg` hook for consumers ([#6898386](https://github.com/deltabox-studio/toolchain/commit/6898386) by [T0chi](https://github.com/T0chi))
848
747
  - `dbx sync` now writes `.husky/commit-msg` (running `commitlint`) alongside the workflows and `commitlint.config.mjs`, so consumers using the Conventional-Commits CI lint commits locally too. The docs recommend `postinstall: husky` (Yarn Berry never runs `prepare`) and `.husky/* text eol=lf` (a trailing CR breaks the hook).
849
748
 
850
749
  ## 1.4.1 (October 2026)
@@ -861,63 +760,46 @@
861
760
 
862
761
  ### New features
863
762
  - Render the `dbx` CLI with `clack`, author the Vite+ config in `dbx.config` ([#fb8b9ef](https://github.com/deltabox-studio/toolchain/commit/fb8b9ef) by [T0chi](https://github.com/T0chi))
864
- - `vite.config.ts` in and adds the `fmt` ignore; `dbx` resolves its own binary first
865
- and colour `Commander`'s help
763
+ - resolveVite() + a generated vite.config.ts shim (no drift); dbx migrate folds vite.config.ts in and adds the fmt ignore; dbx resolves its own binary first
764
+ - render dbx output with @clack/prompts (logger, intro/outro, create prompts) and colour Commander's help
765
+ - fix the Toolchain* typecheck errors and stale tsdown rename leftovers
766
+ - add a dist bootstrap so the generated shim resolves on a fresh checkout
866
767
  #### Vscode
867
768
  - Add Providers and Templates views ([#9aa6d12](https://github.com/deltabox-studio/toolchain/commit/9aa6d12) by [T0chi](https://github.com/T0chi))
868
- - `add`/`remove`/`run-command`/`open-homepage`/`copy-id` actions
869
- `toolchainProviders()`, so a registered provider's commands become `dbx` commands
870
- Templates -> Managed Files
769
+ - Providers: lists providers (dbx providers --json + a custom registry) with add/remove/run-command/open-homepage/copy-id actions
770
+ - Templates: lists templates with add/remove-source/create/info actions
771
+ - custom provider registry (.dbx/toolchain/providers.json) merged into toolchainProviders(), so a registered provider's commands become dbx commands
772
+ - viewsWelcome empty states; view order Home -> Providers -> Projects -> Templates -> Managed Files
871
773
  #### Vite
872
774
  - Drive `dbx` from the `dbx()` plugin, drop `defineDbxConfig` ([#8d11557](https://github.com/deltabox-studio/toolchain/commit/8d11557) by [T0chi](https://github.com/T0chi))
873
- - The Vite/Vite+ integration is now the `dbx()` plugin plus spreading `DBX_TASKS` into
874
- `run.tasks`, so the consumer's own `vite` config stays the config:
875
- - `export default defineConfig({`
876
- `plugins: [dbx()],`
877
- `run: { tasks: { ...DBX_TASKS } },`
878
- `});`
879
- - Remove the `defineDbxConfig` wrapper (and `DbxViteConfig`) and update the README, the
880
- Providers guide and the API reference.
881
- - Author the Vite+ config in `dbx.config`, generate `vite.config.ts` ([#9885225](https://github.com/deltabox-studio/toolchain/issues/9885225) by [T0chi](https://github.com/T0chi))
882
- - `toolchain.vite` now holds the whole Vite+ config (a loose object) with a
883
- `config: false` opt-out, and `dbx sync` generates the managed root
884
- `vite.config.ts` from it, so `dbx.config.*` is the only hand-authored root config.
885
- - Add `dbx migrate --from vite` (auto-detected): it extracts the object passed to
886
- `defineConfig` in an existing root `vite.config.ts` and folds it into `dbx.config.*`'s
887
- `toolchain.vite`, refusing configs it cannot migrate faithfully.
775
+ - The Vite/Vite+ integration is now the `dbx()` plugin plus spreading `DBX_TASKS` into `run.tasks`, so the consumer's own `vite` config stays the config:
776
+ - `export default defineConfig({` `plugins: [dbx()],` `run: { tasks: { ...DBX_TASKS } },` `});`
777
+ - Remove the `defineDbxConfig` wrapper (and `DbxViteConfig`) and update the README, the Providers guide and the API reference.
778
+ - Author the Vite+ config in `dbx.config`, generate `vite.config.ts` ([#9885225](https://github.com/deltabox-studio/toolchain/commit/9885225) by [T0chi](https://github.com/T0chi))
779
+ - `toolchain.vite` now holds the whole Vite+ config (a loose object) with a `config: false` opt-out, and `dbx sync` generates the managed root `vite.config.ts` from it, so `dbx.config.*` is the only hand-authored root config.
780
+ - Add `dbx migrate --from vite` (auto-detected): it extracts the object passed to `defineConfig` in an existing root `vite.config.ts` and folds it into `dbx.config.*`'s `toolchain.vite`, refusing configs it cannot migrate faithfully.
888
781
  - The config-types generator now honors `.catchall`, emitting an index signature.
889
782
  #### Config
890
783
  - Expose the Vite+ config type, rename `Tooling*` to `Toolchain*` ([#088de56](https://github.com/deltabox-studio/toolchain/commit/088de56) by [T0chi](https://github.com/T0chi))
891
- - `ToolchainViteConfig` is now Vite+ `ViteUserConfig` intersected with the managed
892
- `config?: boolean` opt-out, instead of a generated loose object. The config-types
893
- generator gains a hand-written type override plus an imports block, used for the
894
- vite type, and `vite-plus` becomes an optional peer dependency.
895
- - Rename every `Tooling*` type, schema id and identifier to `Toolchain*`. That covers
896
- the config schema ids, `CONFIG_TYPE_SCHEMAS` keys, the provider/migration models
897
- and the CLI helpers (`toolchainConfigSchema`, `loadToolchainConfig`,
898
- `toolchainProviders`, `registerToolchainCommands`). Regenerated types/schema/docs.
784
+ - `ToolchainViteConfig` is now Vite+ `ViteUserConfig` intersected with the managed `config?: boolean` opt-out, instead of a generated loose object. The config-types generator gains a hand-written type override plus an imports block, used for the vite type, and `vite-plus` becomes an optional peer dependency.
785
+ - Rename every `Tooling*` type, schema id and identifier to `Toolchain*`. That covers the config schema ids, `CONFIG_TYPE_SCHEMAS` keys, the provider/migration models and the CLI helpers (`toolchainConfigSchema`, `loadToolchainConfig`, `toolchainProviders`, `registerToolchainCommands`). Regenerated types/schema/docs.
899
786
  ### Bug fixes
900
787
  #### Deps
901
788
  - Sync the lockfile for `@clack/prompts` ([#568a7c6](https://github.com/deltabox-studio/toolchain/commit/568a7c6) by [T0chi](https://github.com/T0chi))
902
- - The lockfile was missing the `@clack/prompts` entry for `packages/shared` and
903
- `packages/template`, so `yarn install --immutable` failed in CI (YN0028).
789
+ - The lockfile was missing the `@clack/prompts` entry for `packages/shared` and `packages/template`, so `yarn install --immutable` failed in CI (YN0028).
904
790
  ### Refactors
905
791
  - Rename Ox to Oxc across the project ([#39b37d3](https://github.com/deltabox-studio/toolchain/commit/39b37d3) by [T0chi](https://github.com/T0chi))
906
- - (`Oxfmt`/`Oxlint` and `.oxlintrc`/`.oxfmtrc` are unchanged)
792
+ - migrate: the target tool value is 'oxc' and the ids are *-to-oxc (Oxfmt/Oxlint and .oxlintrc/.oxfmtrc are unchanged)
793
+ - docs + README prose
907
794
  ### Documentation
908
795
  - Cover the clack CLI output, prompts and `dbx` binary resolution ([#f45ed3f](https://github.com/deltabox-studio/toolchain/commit/f45ed3f) by [T0chi](https://github.com/T0chi))
909
796
  - Document the Vite+ config type and the `Toolchain*` names ([#1e70950](https://github.com/deltabox-studio/toolchain/commit/1e70950) by [T0chi](https://github.com/T0chi))
910
- - Note that `toolchain.vite` is typed as Vite's `UserConfig` as augmented by Vite+
911
- (`ToolchainViteConfig`), and list `ToolchainViteConfig` among the shared config
912
- types. Covers the unreleased changes since v1.3.1 together with the sections the
913
- feature commits already added (the Vite+ config in `dbx.config`, the generated
914
- `vite.config.ts`, the vite migration and the `dbx` plugin).
797
+ - Note that `toolchain.vite` is typed as Vite's `UserConfig` as augmented by Vite+ (`ToolchainViteConfig`), and list `ToolchainViteConfig` among the shared config types. Covers the unreleased changes since v1.3.1 together with the sections the feature commits already added (the Vite+ config in `dbx.config`, the generated `vite.config.ts`, the vite migration and the `dbx` plugin).
915
798
  #### Vscode
916
799
  - Refresh the extension screenshot and add its `LICENSE` ([#49d4510](https://github.com/deltabox-studio/toolchain/commit/49d4510) by [T0chi](https://github.com/T0chi))
917
800
  ### Build system
918
801
  - Package the VS Code extension in `yarn build` ([#1dd14a1](https://github.com/deltabox-studio/toolchain/commit/1dd14a1) by [T0chi](https://github.com/T0chi))
919
- - `yarn build` now also runs the vscode `package:vsix`, so `deltabox-toolchain.vsix`
920
- is always produced.
802
+ - `yarn build` now also runs the vscode `package:vsix`, so `deltabox-toolchain.vsix` is always produced.
921
803
 
922
804
  ### Package changes
923
805
  #### Added
@@ -937,72 +819,46 @@
937
819
  ### New features
938
820
  #### Core
939
821
  - Keep the generated `.dbx` directory out of git ([#9fc1434](https://github.com/deltabox-studio/toolchain/commit/9fc1434) by [T0chi](https://github.com/T0chi))
940
- - `dbx sync` now appends the `.dbx` ignore block (everything under `.dbx/` except the
941
- manifest, which holds no absolute paths) to an existing `.gitignore`, and the
942
- installation guide documents the pattern and the automatic step.
822
+ - `dbx sync` now appends the `.dbx` ignore block (everything under `.dbx/` except the manifest, which holds no absolute paths) to an existing `.gitignore`, and the installation guide documents the pattern and the automatic step.
943
823
  #### Cli
944
824
  - Route CLI output through the logger, add a providers colour option ([#ce76a4d](https://github.com/deltabox-studio/toolchain/commit/ce76a4d) by [T0chi](https://github.com/T0chi))
945
- - `Commander`'s help and errors now go through the shared logger (help to stdout,
946
- errors to stderr, colour-aware, ANSI stripped when colour is off). Vite+
947
- passthrough commands keep `commander`'s defaults so the spawned `vp` keeps its own
948
- coloured logging.
949
- - Add a `providers` config section (`color?: boolean`): `color: false` forces plain
950
- provider output, the global `--no-color` still turns it off, and `runVp` sets
951
- `NO_COLOR` / `FORCE_COLOR` on the child when colour is disabled.
825
+ - `Commander`'s help and errors now go through the shared logger (help to stdout, errors to stderr, colour-aware, ANSI stripped when colour is off). Vite+ passthrough commands keep `commander`'s defaults so the spawned `vp` keeps its own coloured logging.
826
+ - Add a `providers` config section (`color?: boolean`): `color: false` forces plain provider output, the global `--no-color` still turns it off, and `runVp` sets `NO_COLOR` / `FORCE_COLOR` on the child when colour is disabled.
952
827
  - Check for a newer `dbx` version ([#772aae2](https://github.com/deltabox-studio/toolchain/commit/772aae2) by [T0chi](https://github.com/T0chi))
953
- - On each run, check the npm registry in the background (cached for a day, never
954
- blocking) and print a short notice with a link to the release when a newer
955
- `@deltabox/toolchain` exists. Skipped in CI and by `NO_UPDATE_NOTIFIER` or
956
- `DBX_NO_UPDATE_CHECK`, and can be turned off with the new `--no-update-check` flag.
828
+ - On each run, check the npm registry in the background (cached for a day, never blocking) and print a short notice with a link to the release when a newer `@deltabox/toolchain` exists. Skipped in CI and by `NO_UPDATE_NOTIFIER` or `DBX_NO_UPDATE_CHECK`, and can be turned off with the new `--no-update-check` flag.
957
829
  - Default a bare Vite+ command to the `vite` passthrough ([#75770e4](https://github.com/deltabox-studio/toolchain/commit/75770e4) by [T0chi](https://github.com/T0chi))
958
- - `dbx fmt` / `dbx lint` / `dbx run` / `dbx dev` now work: when the first operand
959
- is not a built-in command but names a Vite+ subcommand (or one of its aliases),
960
- `vite` is inserted before it and the whole Vite+ CLI stays reachable without the
961
- explicit namespace. Built-in commands win, so `dbx migrate` remains the
962
- toolchain's migration (`dbx vite migrate` is Vite+'s).
963
- - The Package scripts, Migrations, Monorepo, CLI and Providers guides now show the
964
- bare form, and the consumers' root scripts were updated to match.
830
+ - `dbx fmt` / `dbx lint` / `dbx run` / `dbx dev` now work: when the first operand is not a built-in command but names a Vite+ subcommand (or one of its aliases), `vite` is inserted before it and the whole Vite+ CLI stays reachable without the explicit namespace. Built-in commands win, so `dbx migrate` remains the toolchain's migration (`dbx vite migrate` is Vite+'s).
831
+ - The Package scripts, Migrations, Monorepo, CLI and Providers guides now show the bare form, and the consumers' root scripts were updated to match.
965
832
  #### Vscode
966
833
  - Bundle the `dbx` CLI into the extension ([#bf12403](https://github.com/deltabox-studio/toolchain/commit/bf12403) by [T0chi](https://github.com/T0chi))
967
- - Ship a self-contained `dbx.cjs` inside the VSIX (built by the new
968
- `tsdown.bin.config.ts`) and prefer it in the extension, so a consumer no longer
969
- needs to install `@deltabox/toolchain`. It falls back to a workspace-local
970
- install and then `npx`.
971
- - Make the changelog and tsconfig direct-run guards basename-aware so they do not
972
- fire when the module is inlined into the single-file bundle.
834
+ - Ship a self-contained `dbx.cjs` inside the VSIX (built by the new `tsdown.bin.config.ts`) and prefer it in the extension, so a consumer no longer needs to install `@deltabox/toolchain`. It falls back to a workspace-local install and then `npx`.
835
+ - Make the changelog and tsconfig direct-run guards basename-aware so they do not fire when the module is inlined into the single-file bundle.
973
836
  #### Shared
974
837
  - Add a configurable shared logger ([#54b51fa](https://github.com/deltabox-studio/toolchain/commit/54b51fa) by [T0chi](https://github.com/T0chi))
975
- - Add `packages/shared/src/logger.ts`: one level-aware, colour-aware sink (colours
976
- via `picocolors`, the same package Vite uses) with `debug`, `info`, `success`, `warn`,
977
- `error` and `raw` (unprefixed machine output). It is configurable from `dbx.config`'s
978
- new `logger` section and from the CLI (`--log-level`, `--no-color`), with the CLI
979
- taking precedence.
980
- - Every `console` call in the toolchain now goes through the logger (JSON output
981
- through `raw`), including the sync/watch log callback and the `run` helper's
982
- verbose line. The generated config types, the JSON schema, the docs reference
983
- and the Configuration/CLI guides document the new `logger` section.
838
+ - Add `packages/shared/src/logger.ts`: one level-aware, colour-aware sink (colours via `picocolors`, the same package Vite uses) with `debug`, `info`, `success`, `warn`, `error` and `raw` (unprefixed machine output). It is configurable from `dbx.config`'s new `logger` section and from the CLI (`--log-level`, `--no-color`), with the CLI taking precedence.
839
+ - Every `console` call in the toolchain now goes through the logger (JSON output through `raw`), including the sync/watch log callback and the `run` helper's verbose line. The generated config types, the JSON schema, the docs reference and the Configuration/CLI guides document the new `logger` section.
984
840
  ### Bug fixes
985
841
  - Correct tsconfig aliases under `--cwd`, prune self-referential task runs ([#40e0c34](https://github.com/deltabox-studio/toolchain/commit/40e0c34) by [T0chi](https://github.com/T0chi))
986
842
  - Two bugs found by exercising the CLI against the local consumer projects:
987
- - instead of `process.cwd()`, so `dbx sync --cwd <dir>` (run from elsewhere)
988
- writes correct relative paths rather than paths pointing at the caller.
989
- spawning the task runner, and prunes itself when the same command runs again
990
- from the same root. A root task whose script calls `run -r <task>` can no
991
- longer recurse.
843
+ - tsconfig: monorepo path aliases are now resolved against the project root instead of process.cwd(), so `dbx sync --cwd <dir>` (run from elsewhere) writes correct relative paths rather than paths pointing at the caller.
844
+ - run: a `run` command records its root and operands in an env marker before spawning the task runner, and prunes itself when the same command runs again from the same root. A root task whose script calls `run -r <task>` can no longer recurse.
992
845
  - Changelog links, oxfmt map, build idempotency, watch timer, vscode spawn ([#2389c98](https://github.com/deltabox-studio/toolchain/commit/2389c98) by [T0chi](https://github.com/T0chi))
993
- - render commits as a plain short hash instead of a `github.com/undefined` link
994
- `yarn build` no longer rewrites it and the working tree stays idempotent
995
- `spawnCli` and `cliInvocation`
846
+ - changelog: with no GitHub remote (and a non-GitHub package.json repository), render commits as a plain short hash instead of a github.com/undefined link
847
+ - migrate: read javascript.formatter.jsxQuoteStyle so it is reported unmapped
848
+ - set the changelog and tsconfig package.json bin to the object form, so `yarn build` no longer rewrites it and the working tree stays idempotent
849
+ - core watch: clear the pending debounce timer on SIGINT/SIGTERM
850
+ - vscode: document the ELECTRON_RUN_AS_NODE mechanism consistently between spawnCli and cliInvocation
996
851
  - Sync `--check` writes, quiet level, log flags and template tokens ([#7f5690f](https://github.com/deltabox-studio/toolchain/commit/7f5690f) by [T0chi](https://github.com/T0chi))
997
852
  - Audit pass over the toolchain source:
998
- - actually generated by `dbx sync`
853
+ - include the vite sync task in defaultSyncTasks, so a `vite` config section is actually generated by dbx sync
854
+ - stop dbx sync --check from writing the project graph (it must not write)
855
+ - make --quiet hide info/debug/warn but still show errors
856
+ - stop the logger flag pre-scan at `--`, and reject inherited level keys
857
+ - strip a UTF-8 BOM from a JSON dbx.config
858
+ - let explicit --name/--scope win over dbx.config project values in dbx create
999
859
  ### Documentation
1000
860
  - Document the full public API surface ([#6f78245](https://github.com/deltabox-studio/toolchain/commit/6f78245) by [T0chi](https://github.com/T0chi))
1001
- - Expand `guide/api.md` to cover the umbrella plus every subpath export, grouped by
1002
- package. Add the logging API (`logger`, `createLogger`, `setLogConfig`,
1003
- `setLogOverrides`, levels, colours, `raw`) to the API and Configuration guides, and
1004
- document the config generator's `formatGenerated` helper and the Vite and CLI
1005
- programmatic helpers.
861
+ - Expand `guide/api.md` to cover the umbrella plus every subpath export, grouped by package. Add the logging API (`logger`, `createLogger`, `setLogConfig`, `setLogOverrides`, levels, colours, `raw`) to the API and Configuration guides, and document the config generator's `formatGenerated` helper and the Vite and CLI programmatic helpers.
1006
862
  ### Chores
1007
863
  - Track only the `.dbx` manifest ([#a254062](https://github.com/deltabox-studio/toolchain/commit/a254062) by [T0chi](https://github.com/T0chi))
1008
864
  - Ignore everything under `.dbx/` except `.dbx/toolchain/manifest.json`, which records the managed files and holds no absolute paths. The project graph (which embeds the absolute root) stays ignored.
@@ -1017,50 +873,31 @@
1017
873
 
1018
874
  ### Documentation
1019
875
  - Drive Vite+ from `dbx` in the recommended package scripts ([#6131c59](https://github.com/deltabox-studio/toolchain/commit/6131c59) by [T0chi](https://github.com/T0chi))
1020
- - Use `dbx vite <command>` (the Vite+ passthrough) instead of calling `vp`
1021
- directly in the Package scripts, Migrations and Monorepo guides, so a project
1022
- only needs the one `dbx` command.
876
+ - Use `dbx vite <command>` (the Vite+ passthrough) instead of calling `vp` directly in the Package scripts, Migrations and Monorepo guides, so a project only needs the one `dbx` command.
1023
877
 
1024
878
  ## 1.2.7 (October 2026)
1025
879
 
1026
880
  ### Documentation
1027
881
  - Link package script migrations from the Migrations page ([#036ebf5](https://github.com/deltabox-studio/toolchain/commit/036ebf5) by [T0chi](https://github.com/T0chi))
1028
- - Add a "Package scripts" section to the Migrations guide with the Biome/Turbo
1029
- script swaps and a link to the full Package scripts page.
882
+ - Add a "Package scripts" section to the Migrations guide with the Biome/Turbo script swaps and a link to the full Package scripts page.
1030
883
 
1031
884
  ## 1.2.6 (October 2026)
1032
885
 
1033
886
  ### Bug fixes
1034
887
  #### Config
1035
888
  - Tidy generated types and format them with Oxfmt ([#6fef440](https://github.com/deltabox-studio/toolchain/commit/6fef440) by [T0chi](https://github.com/T0chi))
1036
- - `untyped`'s type generator emits a blank line between every member and verbose
1037
- multi-line JSDoc. Strip the member blank lines in the generator, then run the
1038
- generated output through Oxfmt's programmatic `format()` (with `jsdoc: true`)
1039
- at generation time instead of shelling out to the repo-root `vp`, so the file
1040
- is written already formatted and resembles the hand-written `types.ts`.
1041
- - Also drop the toolchain-specific `yarn config:types` hint from the generated
1042
- header: the types ship through `@deltabox/toolchain-shared`, so a script name
1043
- that only exists in this repo's `package.json` is misleading to consumers (a
1044
- consumer supplies its own header via the `header` option).
889
+ - `untyped`'s type generator emits a blank line between every member and verbose multi-line JSDoc. Strip the member blank lines in the generator, then run the generated output through Oxfmt's programmatic `format()` (with `jsdoc: true`) at generation time instead of shelling out to the repo-root `vp`, so the file is written already formatted and resembles the hand-written `types.ts`.
890
+ - Also drop the toolchain-specific `yarn config:types` hint from the generated header: the types ship through `@deltabox/toolchain-shared`, so a script name that only exists in this repo's `package.json` is misleading to consumers (a consumer supplies its own header via the `header` option).
1045
891
  ### Documentation
1046
892
  - Add Package scripts guide and a navbar version ([#b279739](https://github.com/deltabox-studio/toolchain/commit/b279739) by [T0chi](https://github.com/T0chi))
1047
- - Add a guide page covering the recommended root scripts (Vite+ format/lint and
1048
- Vite Task) and how to migrate an existing Biome + Turbo project onto them, and
1049
- surface it in the sidebar and Getting Started list. Also show the current
1050
- version in the navbar (linked to the changelog, releases and npm), like the
1051
- Proxified docs.
893
+ - Add a guide page covering the recommended root scripts (Vite+ format/lint and Vite Task) and how to migrate an existing Biome + Turbo project onto them, and surface it in the sidebar and Getting Started list. Also show the current version in the navbar (linked to the changelog, releases and npm), like the Proxified docs.
1052
894
 
1053
895
  ## 1.2.5 (October 2026)
1054
896
 
1055
897
  ### Bug fixes
1056
898
  #### Changelog
1057
899
  - Keep generated commitlint enums expanded ([#a6ad600](https://github.com/deltabox-studio/toolchain/commit/a6ad600) by [T0chi](https://github.com/T0chi))
1058
- - Oxfmt collapses an array onto one line when it fits the print width, so a
1059
- generated `commitlint.config.mjs` whose type/scope enum is short was
1060
- reformatted by `vp fmt` and then failed `dbx sync --check`. An inert leading
1061
- line comment inside each enum keeps the list expanded regardless of the
1062
- consumer's print width, so the generated file is now Oxfmt-idempotent and
1063
- consumers no longer need to exclude it from formatting.
900
+ - Oxfmt collapses an array onto one line when it fits the print width, so a generated `commitlint.config.mjs` whose type/scope enum is short was reformatted by `vp fmt` and then failed `dbx sync --check`. An inert leading line comment inside each enum keeps the list expanded regardless of the consumer's print width, so the generated file is now Oxfmt-idempotent and consumers no longer need to exclude it from formatting.
1064
901
 
1065
902
  ## 1.2.4 (October 2026)
1066
903
 
@@ -1081,9 +918,7 @@
1081
918
 
1082
919
  ### Documentation
1083
920
  - Show how to load the generated config ([#0f4d0d1](https://github.com/deltabox-studio/toolchain/commit/0f4d0d1) by [T0chi](https://github.com/T0chi))
1084
- - Add a "Load the config at runtime" section to the config generator guide
1085
- (`parseEnvTree`, the typed accessors, `applyOverrides`, and schema validation via
1086
- `compileZodSchema`) plus a short loading example in the README.
921
+ - Add a "Load the config at runtime" section to the config generator guide (`parseEnvTree`, the typed accessors, `applyOverrides`, and schema validation via `compileZodSchema`) plus a short loading example in the README.
1087
922
  - Update description and tags ([#64b64aa](https://github.com/deltabox-studio/toolchain/commit/64b64aa) by [T0chi](https://github.com/T0chi))
1088
923
 
1089
924
  ## 1.2.0 (October 2026)
@@ -1091,25 +926,15 @@
1091
926
  ### New features
1092
927
  #### Config
1093
928
  - Generate the shared config types via the config generator ([#a063a2d](https://github.com/deltabox-studio/toolchain/commit/a063a2d) by [T0chi](https://github.com/T0chi))
1094
- - Teach the config engine's Zod->untyped bridge and types generator to handle
1095
- unions (`anyOf`/`oneOf`), `const`, and unknown records, and to render a schema's
1096
- fields on the main interface when it has no `base` group (plus type aliases for
1097
- non-object roots). Named `$ref`s (via `.meta({ id })`) render as the type name,
1098
- so the generated config types reference each other instead of inlining.
1099
- - Generate `packages/shared/src/config-types.ts` from the Zod config model with the
1100
- engine's `renderConfigTypes` (`yarn config:types`); `config-schema.ts` keeps only
1101
- the schemas and the types are exported from `config-types.ts`.
929
+ - Teach the config engine's Zod->untyped bridge and types generator to handle unions (`anyOf`/`oneOf`), `const`, and unknown records, and to render a schema's fields on the main interface when it has no `base` group (plus type aliases for non-object roots). Named `$ref`s (via `.meta({ id })`) render as the type name, so the generated config types reference each other instead of inlining.
930
+ - Generate `packages/shared/src/config-types.ts` from the Zod config model with the engine's `renderConfigTypes` (`yarn config:types`); `config-schema.ts` keeps only the schemas and the types are exported from `config-types.ts`.
1102
931
  ### Bug fixes
1103
932
  #### Vscode
1104
933
  - Group managed files by project and reorder the views ([#f5b49d9](https://github.com/deltabox-studio/toolchain/commit/f5b49d9) by [T0chi](https://github.com/T0chi))
1105
- - The Managed Files view read a manifest per project, so a monorepo's root-level
1106
- managed files never showed. Read each workspace root's manifest and group its
1107
- files by the deepest project that owns them. Move the Projects view above
1108
- Managed Files (renamed from Files).
934
+ - The Managed Files view read a manifest per project, so a monorepo's root-level managed files never showed. Read each workspace root's manifest and group its files by the deepest project that owns them. Move the Projects view above Managed Files (renamed from Files).
1109
935
  ### Documentation
1110
936
  - Document the config generator outputs ([#fcfcd69](https://github.com/deltabox-studio/toolchain/commit/fcfcd69) by [T0chi](https://github.com/T0chi))
1111
- - Show a short example of each generated output (config types, markdown, env,
1112
- JSON schema) in the config generator guide and the README.
937
+ - Show a short example of each generated output (config types, markdown, env, JSON schema) in the config generator guide and the README.
1113
938
  - Update vscode extension preview ([#fd90dda](https://github.com/deltabox-studio/toolchain/commit/fd90dda) by [T0chi](https://github.com/T0chi))
1114
939
 
1115
940
  ## 1.1.24 (October 2026)
@@ -1127,9 +952,7 @@
1127
952
  ### Bug fixes
1128
953
  #### Ci
1129
954
  - Skip the Marketplace publish when `VSCE_PAT` is unset ([#fe4b3ad](https://github.com/deltabox-studio/toolchain/commit/fe4b3ad) by [T0chi](https://github.com/T0chi))
1130
- - The VS Code Marketplace publish was the only failing release step (no
1131
- `VSCE_PAT` set). Make it a no-op while the secret is unset and publish
1132
- automatically once it is added to the `toolchain / release` environment.
955
+ - The VS Code Marketplace publish was the only failing release step (no `VSCE_PAT` set). Make it a no-op while the secret is unset and publish automatically once it is added to the `toolchain / release` environment.
1133
956
  - Also remove the temporary OIDC diagnostic step now that the release publishes.
1134
957
 
1135
958
  ## 1.1.21 (October 2026)
@@ -1137,72 +960,43 @@
1137
960
  ### Bug fixes
1138
961
  #### Ci
1139
962
  - Publish to npm directly, falling back to a staged publish ([#85cffe7](https://github.com/deltabox-studio/toolchain/commit/85cffe7) by [T0chi](https://github.com/T0chi))
1140
- - Try `npm publish` first and fall back to `npm stage publish` on failure, so
1141
- toggling the trusted publisher's publish/stage permissions on npm never breaks
1142
- the release: a direct publish succeeds when allowed, and a staged publish (always
1143
- permitted) is used otherwise.
963
+ - Try `npm publish` first and fall back to `npm stage publish` on failure, so toggling the trusted publisher's publish/stage permissions on npm never breaks the release: a direct publish succeeds when allowed, and a staged publish (always permitted) is used otherwise.
1144
964
  ### Documentation
1145
965
  - Show the published npm version in the README badge ([#5f83ca2](https://github.com/deltabox-studio/toolchain/commit/5f83ca2) by [T0chi](https://github.com/T0chi))
1146
- - Replace the static npm-name badge with a shields.io npm/v badge so the README
1147
- shows the currently published version.
966
+ - Replace the static npm-name badge with a shields.io npm/v badge so the README shows the currently published version.
1148
967
 
1149
968
  ## 1.1.20 (October 2026)
1150
969
 
1151
970
  ### Bug fixes
1152
971
  #### Ci
1153
972
  - Stage npm releases via OIDC instead of publishing directly ([#53d1f52](https://github.com/deltabox-studio/toolchain/commit/53d1f52) by [T0chi](https://github.com/T0chi))
1154
- - Default to `npm stage publish` for OIDC trusted publishing: it always stages
1155
- the version and defers the maintainer's 2FA approval, and is always permitted
1156
- for a trusted publisher (unlike direct `npm publish`, which the package's 2FA
1157
- policy rejects). Drop the automation-token fallback and require npm >= 11.15.1
1158
- (the first with `npm stage`).
973
+ - Default to `npm stage publish` for OIDC trusted publishing: it always stages the version and defers the maintainer's 2FA approval, and is always permitted for a trusted publisher (unlike direct `npm publish`, which the package's 2FA policy rejects). Drop the automation-token fallback and require npm >= 11.15.1 (the first with `npm stage`).
1159
974
 
1160
975
  ## 1.1.19 (October 2026)
1161
976
 
1162
977
  ### Chores
1163
978
  #### Ci
1164
979
  - Add a temporary OIDC diagnostic to the release workflow ([#7b42e33](https://github.com/deltabox-studio/toolchain/commit/7b42e33) by [T0chi](https://github.com/T0chi))
1165
- - The publish still fails after binding the environment, and npm falls back to
1166
- the (automation) token and 403s. Add a temporary step that decodes the OIDC
1167
- claims and calls the token-exchange endpoint directly so the exact
1168
- trusted-publisher mismatch is visible in the log. Removed once fixed.
980
+ - The publish still fails after binding the environment, and npm falls back to the (automation) token and 403s. Add a temporary step that decodes the OIDC claims and calls the token-exchange endpoint directly so the exact trusted-publisher mismatch is visible in the log. Removed once fixed.
1169
981
 
1170
982
  ## 1.1.18 (October 2026)
1171
983
 
1172
984
  ### Bug fixes
1173
985
  #### Ci
1174
986
  - Bind the release job to the OIDC environment ([#7b8f1b4](https://github.com/deltabox-studio/toolchain/commit/7b8f1b4) by [T0chi](https://github.com/T0chi))
1175
- - The npm OIDC trusted publisher is bound to the GitHub environment
1176
- "toolchain / release", but the release job declared no environment. The OIDC
1177
- environment claim therefore did not match, the token exchange failed, and npm
1178
- silently fell back to the placeholder token (the misleading E404).
1179
- - Declare `environment: 'toolchain / release'` on the job and add an optional
1180
- `NODE_AUTH_TOKEN` fallback (the environment's `NPM_TOKEN`) to the publish step.
1181
- OIDC is still tried first, so the token is never relied on.
987
+ - The npm OIDC trusted publisher is bound to the GitHub environment "toolchain / release", but the release job declared no environment. The OIDC environment claim therefore did not match, the token exchange failed, and npm silently fell back to the placeholder token (the misleading E404).
988
+ - Declare `environment: 'toolchain / release'` on the job and add an optional `NODE_AUTH_TOKEN` fallback (the environment's `NPM_TOKEN`) to the publish step. OIDC is still tried first, so the token is never relied on.
1182
989
  #### Vscode
1183
990
  - Spawn the CLI safely on Windows ([#99e3ad1](https://github.com/deltabox-studio/toolchain/commit/99e3ad1) by [T0chi](https://github.com/T0chi))
1184
- - `spawn('npx.cmd', ...)` throws EINVAL synchronously on Windows, and
1185
- `captureCli`/`runCli` call spawn inside a Promise executor, so the throw
1186
- rejected the promise and the command aborted with no UI ("nothing happens").
1187
- This fired whenever the CLI resolved to the `npx.cmd` fallback (a workspace
1188
- without a local `@deltabox/toolchain`), e.g. "From template..." which round-trips
1189
- `template:list --json` through `captureCli`.
1190
- - Add a pure `win-spawn` module (ported from the shared `spawnCross`) that escapes
1191
- the command + args and runs a `.cmd` shim through `cmd.exe`; use it from `spawnCli`.
1192
- `captureCli`/`runCli` no longer reject on a spawn failure. Also fix `cliInvocation`
1193
- for the integrated terminal: `process.execPath` is the VS Code binary in the
1194
- extension host, so it now uses `npx dbx` / `npx --yes @deltabox/toolchain`.
991
+ - `spawn('npx.cmd', ...)` throws EINVAL synchronously on Windows, and `captureCli`/`runCli` call spawn inside a Promise executor, so the throw rejected the promise and the command aborted with no UI ("nothing happens"). This fired whenever the CLI resolved to the `npx.cmd` fallback (a workspace without a local `@deltabox/toolchain`), e.g. "From template..." which round-trips `template:list --json` through `captureCli`.
992
+ - Add a pure `win-spawn` module (ported from the shared `spawnCross`) that escapes the command + args and runs a `.cmd` shim through `cmd.exe`; use it from `spawnCli`. `captureCli`/`runCli` no longer reject on a spawn failure. Also fix `cliInvocation` for the integrated terminal: `process.execPath` is the VS Code binary in the extension host, so it now uses `npx dbx` / `npx --yes @deltabox/toolchain`.
1195
993
 
1196
994
  ## 1.1.17 (October 2026)
1197
995
 
1198
996
  ### Bug fixes
1199
997
  #### Ci
1200
998
  - Upgrade npm before publishing for OIDC trusted publishing ([#657d4b9](https://github.com/deltabox-studio/toolchain/commit/657d4b9) by [T0chi](https://github.com/T0chi))
1201
- - Node 22 bundles npm 10.x, but npm OIDC trusted publishing requires
1202
- npm >= 11.5.1. Without it `npm publish` fell back to token auth and the
1203
- registry answered a misleading 404, so every release since 1.0.7 failed
1204
- at the publish step. Add an explicit npm upgrade step before the publish
1205
- step in the generated release workflow.
999
+ - Node 22 bundles npm 10.x, but npm OIDC trusted publishing requires npm >= 11.5.1. Without it `npm publish` fell back to token auth and the registry answered a misleading 404, so every release since 1.0.7 failed at the publish step. Add an explicit npm upgrade step before the publish step in the generated release workflow.
1206
1000
 
1207
1001
  ## 1.1.16 (October 2026)
1208
1002
 
@@ -1218,7 +1012,7 @@
1218
1012
  ## 1.1.14 (October 2026)
1219
1013
 
1220
1014
  ### Documentation
1221
- - Highlight the Vite/Vite+ plugin in the README and docs ([#8218179](https://github.com/deltabox-studio/toolchain/issues/8218179) by [T0chi](https://github.com/T0chi))
1015
+ - Highlight the Vite/Vite+ plugin in the README and docs ([#8218179](https://github.com/deltabox-studio/toolchain/commit/8218179) by [T0chi](https://github.com/T0chi))
1222
1016
 
1223
1017
  ## 1.1.13 (October 2026)
1224
1018
 
@@ -1249,7 +1043,7 @@
1249
1043
 
1250
1044
  ### Documentation
1251
1045
  - Reindent the README lists ([#1d41d68](https://github.com/deltabox-studio/toolchain/commit/1d41d68) by [T0chi](https://github.com/T0chi))
1252
- - Mirror the VS Code extension installation guide from the README ([#1889832](https://github.com/deltabox-studio/toolchain/issues/1889832) by [T0chi](https://github.com/T0chi))
1046
+ - Mirror the VS Code extension installation guide from the README ([#1889832](https://github.com/deltabox-studio/toolchain/commit/1889832) by [T0chi](https://github.com/T0chi))
1253
1047
  ### Chores
1254
1048
  - Update VS Code extension installation guide in `README.md` ([#aab06d5](https://github.com/deltabox-studio/toolchain/commit/aab06d5) by [T0chi](https://github.com/T0chi))
1255
1049
 
@@ -1298,18 +1092,14 @@
1298
1092
  ### Documentation
1299
1093
 
1300
1094
  - Publish `config.schema.json` at the docs site root ([#b7680cb](https://github.com/deltabox-studio/toolchain/commit/b7680cb) by [T0chi](https://github.com/T0chi))
1301
- - The VitePress build now copies the generated `dbx` JSON schema into the dist
1302
- root, so it is served at https://toolchain.deltabox.studio/config.schema.json.
1095
+ - - The VitePress build now copies the generated `dbx` JSON schema into the dist root, so it is served at https://toolchain.deltabox.studio/config.schema.json.
1303
1096
 
1304
1097
  ### CI
1305
1098
 
1306
1099
  #### Release
1307
1100
 
1308
1101
  - Publish to npm via trusted publishing (OIDC) ([#41be869](https://github.com/deltabox-studio/toolchain/commit/41be869) by [T0chi](https://github.com/T0chi))
1309
- - Drop the `NPM_TOKEN`-based `yarn npm publish` (which also staged). Use npm
1310
- trusted publishing: `id-token: write`, setup-node `registry-url`, `yarn pack`
1311
- (resolves `catalog:`/`workspace:`) + `npm publish <tarball>` — provenance is
1312
- generated automatically. Re-enable `publishConfig.provenance`.
1102
+ - - Drop the `NPM_TOKEN`-based `yarn npm publish` (which also staged). Use npm trusted publishing: `id-token: write`, setup-node `registry-url`, `yarn pack` (resolves `catalog:`/`workspace:`) + `npm publish <tarball>` — provenance is generated automatically. Re-enable `publishConfig.provenance`.
1313
1103
 
1314
1104
  ## 1.1.0 (October 2026)
1315
1105
 
@@ -1318,10 +1108,7 @@
1318
1108
  #### Vite
1319
1109
 
1320
1110
  - Add a `dbx()` Vite+ plugin and `defineDbxConfig` wrapper ([#a1edaf9](https://github.com/deltabox-studio/toolchain/commit/a1edaf9) by [T0chi](https://github.com/T0chi))
1321
- - Lets Vite+-only consumers drive `dbx` from `vite.config.ts`: `dbx()` runs
1322
- `dbx sync` before dev/build (or `dbx sync --check` in CI) and re-syncs on
1323
- input changes; `defineDbxConfig()` also registers the `vp run dbx:*` tasks
1324
- (Vite+ reads `run.tasks` from the static config, not a plugin hook).
1111
+ - - Lets Vite+-only consumers drive `dbx` from `vite.config.ts`: `dbx()` runs `dbx sync` before dev/build (or `dbx sync --check` in CI) and re-syncs on input changes; `defineDbxConfig()` also registers the `vp run dbx:*` tasks (Vite+ reads `run.tasks` from the static config, not a plugin hook).
1325
1112
 
1326
1113
  ### Chores
1327
1114
 
@@ -1340,10 +1127,7 @@
1340
1127
  #### Release
1341
1128
 
1342
1129
  - Manage the release workflow from `dbx.config.ts` ([#bf55b70](https://github.com/deltabox-studio/toolchain/commit/bf55b70) by [T0chi](https://github.com/T0chi))
1343
- - Drop the hand-written `.github/workflows/release.yml`; the release flow (tag +
1344
- GitHub Release with the VSIX + notes, `npm publish`, Marketplace publish) is
1345
- now defined under `changelog.workflows.release` in the config and generated
1346
- by `dbx sync`. Removes the need to hand-write CI.
1130
+ - - Drop the hand-written `.github/workflows/release.yml`; the release flow (tag + GitHub Release with the VSIX + notes, `npm publish`, Marketplace publish) is now defined under `changelog.workflows.release` in the config and generated by `dbx sync`. Removes the need to hand-write CI.
1347
1131
 
1348
1132
  ## 1.0.7 (October 2026)
1349
1133
 
@@ -1358,11 +1142,7 @@
1358
1142
  #### Release
1359
1143
 
1360
1144
  - Release on push to `main` (tag + GitHub Release + npm + Marketplace) ([#4714b1a](https://github.com/deltabox-studio/toolchain/commit/4714b1a) by [T0chi](https://github.com/T0chi))
1361
- - Replaces the generated release-PR workflow with a hand-written one that, on
1362
- each push to `main`, packages the VS Code extension, creates the `v<version>`
1363
- tag and a GitHub Release (notes from `CHANGELOG.md` + the `.vsix` asset),
1364
- publishes `@deltabox/toolchain` to npm, and publishes the extension to the VS
1365
- Code Marketplace. Idempotent: skipped when the tag already exists.
1145
+ - - Replaces the generated release-PR workflow with a hand-written one that, on each push to `main`, packages the VS Code extension, creates the `v<version>` tag and a GitHub Release (notes from `CHANGELOG.md` + the `.vsix` asset), publishes `@deltabox/toolchain` to npm, and publishes the extension to the VS Code Marketplace. Idempotent: skipped when the tag already exists.
1366
1146
 
1367
1147
  ## 1.0.6 (October 2026)
1368
1148
 
@@ -1416,19 +1196,11 @@
1416
1196
  #### Changelog
1417
1197
 
1418
1198
  - Tolerate a missing `CHANGELOG.md` in the release workflow ([#18ad219](https://github.com/deltabox-studio/toolchain/commit/18ad219) by [T0chi](https://github.com/T0chi))
1419
- - The release PR job extracted notes with `awk`, which failed when
1420
- `CHANGELOG.md` did not exist yet (a fresh repo). Fall back to an empty notes
1421
- string.
1199
+ - - The release PR job extracted notes with `awk`, which failed when `CHANGELOG.md` did not exist yet (a fresh repo). Fall back to an empty notes string.
1422
1200
  - Create `CHANGELOG.md` when missing; ignore dry-run output ([#f5e4926](https://github.com/deltabox-studio/toolchain/commit/f5e4926) by [T0chi](https://github.com/T0chi))
1423
- - `prependChangelogEntry` read the existing file unconditionally, so the first
1424
- run on a repo without a `CHANGELOG.md` failed with `ENOENT`. Seed it with a
1425
- `# Changelog` header instead. Also gitignore `CHANGELOG.proposed.md`.
1201
+ - - `prependChangelogEntry` read the existing file unconditionally, so the first run on a repo without a `CHANGELOG.md` failed with `ENOENT`. Seed it with a `# Changelog` header instead. Also gitignore `CHANGELOG.proposed.md`.
1426
1202
  - Resolve repo root from `cwd` instead of the module location ([#5278e57](https://github.com/deltabox-studio/toolchain/commit/5278e57) by [T0chi](https://github.com/T0chi))
1427
- - Running `dbx changelog` from source (or from the published package in
1428
- `node_modules`) walked up from `import.meta.url` and landed on the wrong
1429
- `package.json`, so it looked for `CHANGELOG.md` in the wrong directory and
1430
- failed. Resolve the nearest `package.json` above the working directory
1431
- instead.
1203
+ - - Running `dbx changelog` from source (or from the published package in `node_modules`) walked up from `import.meta.url` and landed on the wrong `package.json`, so it looked for `CHANGELOG.md` in the wrong directory and failed. Resolve the nearest `package.json` above the working directory instead.
1432
1204
 
1433
1205
  ### Chores
1434
1206
 
@@ -1436,6 +1208,4 @@
1436
1208
  - Drop Netlify config (docs move to Railway); move `PLAN.md` out of the repo ([#e51b714](https://github.com/deltabox-studio/toolchain/commit/e51b714) by [T0chi](https://github.com/T0chi))
1437
1209
  - Update package description and keywords ([#d75b503](https://github.com/deltabox-studio/toolchain/commit/d75b503) by [T0chi](https://github.com/T0chi))
1438
1210
  - Initial commit of `@deltabox/toolchain` ([#ed4673b](https://github.com/deltabox-studio/toolchain/commit/ed4673b) by [T0chi](https://github.com/T0chi))
1439
- - Self-hosts CI + changelog: `dbx.config.ts` drives the generated workflows,
1440
- commitlint config and Conventional-Commits VS Code settings. Config file is
1441
- `dbx.config.*` with sections wrapped under `toolchain`.
1211
+ - - Self-hosts CI + changelog: `dbx.config.ts` drives the generated workflows, commitlint config and Conventional-Commits VS Code settings. Config file is `dbx.config.*` with sections wrapped under `toolchain`.