@deltabox/toolchain 2.1.0 → 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 (141) hide show
  1. package/CHANGELOG.md +404 -627
  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/register.js +1 -1
  11. package/dist/cli/update-check.js +1 -1
  12. package/dist/config.d.ts +2 -2
  13. package/dist/config.js +1 -1
  14. package/dist/index.d.ts +38 -30
  15. package/dist/index.js +1 -1
  16. package/dist/migrate.d.ts +2 -2
  17. package/dist/migrate.js +1 -1
  18. package/dist/package.js +1 -1
  19. package/dist/packages/changelog/src/cli/index.js +1 -1
  20. package/dist/packages/changelog/src/index.d.ts +7 -6
  21. package/dist/packages/changelog/src/index.js +1 -1
  22. package/dist/packages/changelog/src/run-workflows.d.ts +39 -2
  23. package/dist/packages/changelog/src/run-workflows.js +1 -1
  24. package/dist/packages/changelog/src/run.d.ts +1 -1
  25. package/dist/packages/changelog/src/run.js +1 -1
  26. package/dist/packages/changelog/src/sync.js +1 -1
  27. package/dist/packages/changelog/src/templates.js +1 -1
  28. package/dist/packages/changelog/src/utils/format.d.ts +5 -3
  29. package/dist/packages/changelog/src/utils/format.js +5 -5
  30. package/dist/packages/changelog/src/utils/git.d.ts +1 -1
  31. package/dist/packages/changelog/src/utils/git.js +1 -1
  32. package/dist/packages/changelog/src/utils/reformat.d.ts +7 -2
  33. package/dist/packages/changelog/src/utils/reformat.js +5 -4
  34. package/dist/packages/changelog/src/utils/release-notes.js +1 -1
  35. package/dist/packages/changelog/src/utils/repo.js +1 -1
  36. package/dist/packages/changelog/src/utils/summary.d.ts +1 -1
  37. package/dist/packages/changelog/src/utils/types.d.ts +9 -46
  38. package/dist/packages/changelog/src/utils/versioning.d.ts +11 -14
  39. package/dist/packages/changelog/src/utils/write.js +1 -1
  40. package/dist/packages/changelog/src/workflows.d.ts +11 -3
  41. package/dist/packages/changelog/src/workflows.js +5 -5
  42. package/dist/packages/config/src/cli/index.d.ts +1 -1
  43. package/dist/packages/config/src/collect.js +1 -1
  44. package/dist/packages/config/src/config-json.js +1 -1
  45. package/dist/packages/config/src/generators/env.js +2 -2
  46. package/dist/packages/config/src/generators/markdown.js +8 -8
  47. package/dist/packages/config/src/generators/output.js +1 -0
  48. package/dist/packages/config/src/generators/types.js +3 -3
  49. package/dist/packages/config/src/index.d.ts +3 -3
  50. package/dist/packages/config/src/index.js +1 -1
  51. package/dist/packages/config/src/schema.d.ts +16 -0
  52. package/dist/packages/config/src/schema.js +1 -1
  53. package/dist/packages/config/src/types.d.ts +5 -0
  54. package/dist/packages/core/src/editor-config.js +1 -1
  55. package/dist/packages/core/src/loader.js +1 -1
  56. package/dist/packages/core/src/manifest.js +1 -1
  57. package/dist/packages/core/src/paths.js +1 -0
  58. package/dist/packages/core/src/provider-registry.js +1 -1
  59. package/dist/packages/core/src/reset.d.ts +3 -0
  60. package/dist/packages/core/src/reset.js +1 -1
  61. package/dist/packages/core/src/sync.js +1 -1
  62. package/dist/packages/core/src/vscode.js +1 -1
  63. package/dist/packages/core/src/watch.d.ts +1 -1
  64. package/dist/packages/core/src/watch.js +1 -1
  65. package/dist/packages/migrate/src/cli/index.js +1 -1
  66. package/dist/packages/migrate/src/eslint.js +1 -1
  67. package/dist/packages/migrate/src/index.d.ts +2 -2
  68. package/dist/packages/migrate/src/index.js +1 -1
  69. package/dist/packages/migrate/src/prettier.d.ts +2 -0
  70. package/dist/packages/migrate/src/prettier.js +2 -2
  71. package/dist/packages/migrate/src/vite-target.js +1 -1
  72. package/dist/packages/project/src/cli/index.js +1 -1
  73. package/dist/packages/project/src/index.d.ts +4 -4
  74. package/dist/packages/project/src/index.js +1 -1
  75. package/dist/packages/project/src/typescript.d.ts +4 -2
  76. package/dist/packages/project/src/typescript.js +2 -2
  77. package/dist/packages/shared/src/changelog-callbacks.d.ts +72 -0
  78. package/dist/packages/shared/src/config-schema/biome.d.ts +8 -1
  79. package/dist/packages/shared/src/config-schema/biome.js +1 -1
  80. package/dist/packages/shared/src/config-schema/changelog.d.ts +3049 -30
  81. package/dist/packages/shared/src/config-schema/changelog.js +1 -1
  82. package/dist/packages/shared/src/config-schema/ci.d.ts +1163 -23
  83. package/dist/packages/shared/src/config-schema/external.js +1 -0
  84. package/dist/packages/shared/src/config-schema/format.d.ts +16 -10
  85. package/dist/packages/shared/src/config-schema/format.js +1 -1
  86. package/dist/packages/shared/src/config-schema/generated/azure-pipelines.d.ts +10501 -0
  87. package/dist/packages/shared/src/config-schema/generated/biome-config.d.ts +5962 -0
  88. package/dist/packages/shared/src/config-schema/generated/github-workflow.d.ts +179 -0
  89. package/dist/packages/shared/src/config-schema/generated/gitlab-ci.d.ts +296 -0
  90. package/dist/packages/shared/src/config-schema/generated/oxfmt-config.d.ts +411 -0
  91. package/dist/packages/shared/src/config-schema/generated/oxlint-config.d.ts +2218 -0
  92. package/dist/packages/shared/src/config-schema/index.d.ts +5355 -142
  93. package/dist/packages/shared/src/config-schema/index.js +1 -1
  94. package/dist/packages/shared/src/config-schema/json.d.ts +18 -0
  95. package/dist/packages/shared/src/config-schema/json.js +1 -0
  96. package/dist/packages/shared/src/config-schema/logger.d.ts +10 -1
  97. package/dist/packages/shared/src/config-schema/logger.js +1 -1
  98. package/dist/packages/shared/src/config-schema/tsconfig.d.ts +5 -4
  99. package/dist/packages/shared/src/config-schema/tsconfig.js +1 -1
  100. package/dist/packages/shared/src/config-schema/vite.d.ts +5 -3
  101. package/dist/packages/shared/src/config-schema/vite.js +1 -1
  102. package/dist/packages/shared/src/config-schema/workflow.d.ts +946 -31
  103. package/dist/packages/shared/src/config-schema/workflow.js +1 -1
  104. package/dist/packages/shared/src/config-types.d.ts +257 -33
  105. package/dist/packages/shared/src/fs-utils.d.ts +12 -0
  106. package/dist/packages/shared/src/fs-utils.js +8 -1
  107. package/dist/packages/shared/src/index.d.ts +19 -11
  108. package/dist/packages/shared/src/index.js +1 -1
  109. package/dist/packages/shared/src/object-utils.d.ts +2 -0
  110. package/dist/packages/shared/src/object-utils.js +1 -1
  111. package/dist/packages/shared/src/registry-policy.d.ts +3 -2
  112. package/dist/packages/shared/src/registry-policy.js +1 -1
  113. package/dist/packages/shared/src/run.d.ts +2 -0
  114. package/dist/packages/shared/src/run.js +1 -1
  115. package/dist/packages/shared/src/string-utils.d.ts +7 -5
  116. package/dist/packages/shared/src/string-utils.js +2 -2
  117. package/dist/packages/shared/src/template.d.ts +2 -1
  118. package/dist/packages/shared/src/template.js +1 -1
  119. package/dist/packages/shared/src/toolchain.d.ts +14 -7
  120. package/dist/packages/shared/src/toolchain.js +1 -1
  121. package/dist/packages/shared/src/types.d.ts +5 -0
  122. package/dist/packages/shared/src/vite-defaults.d.ts +4 -3
  123. package/dist/packages/shared/src/vite-defaults.js +1 -1
  124. package/dist/packages/shared/src/yaml.js +5 -5
  125. package/dist/packages/template/src/scaffold.js +1 -1
  126. package/dist/packages/tsconfig/src/cli/generate/index.js +1 -1
  127. package/dist/packages/tsconfig/src/overrides.d.ts +5 -5
  128. package/dist/packages/tsdown/src/config/node.d.ts +5 -0
  129. package/dist/packages/tsdown/src/config/node.js +2 -2
  130. package/dist/packages/tsdown/src/index.d.ts +3 -3
  131. package/dist/packages/tsdown/src/index.js +1 -1
  132. package/dist/packages/vite/src/plugin.js +1 -1
  133. package/dist/packages/vite/src/vp.js +1 -1
  134. package/dist/project.d.ts +3 -3
  135. package/dist/project.js +1 -1
  136. package/dist/shared.d.ts +18 -10
  137. package/dist/shared.js +1 -1
  138. package/dist/tooling.js +1 -1
  139. package/dist/tsdown.d.ts +2 -2
  140. package/dist/tsdown.js +1 -1
  141. package/package.json +25 -13
package/CHANGELOG.md CHANGED
@@ -1,16 +1,159 @@
1
1
  # Changelog
2
2
 
3
- ## 2.1.0 (October 2026)
3
+ ## 2.3.2 (November 2026)
4
4
 
5
5
  <!-- release:start -->
6
6
 
7
+ ### Bug fixes
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
+
12
+ <!-- release:end -->
13
+
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
+
7
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))
8
44
  #### Changelog
9
- - Configure breaking-change detection ([#f80634f](https://github.com/deltabox-studio/toolchain/commit/f80634f) by [T0chi](https://github.com/T0chi))
10
- - 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).
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))
11
107
 
12
- <!-- release:end -->
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`
13
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
+
151
+ ## 2.1.0 (October 2026)
152
+
153
+ ### New features
154
+ #### Changelog
155
+ - Configure breaking-change detection ([#f80634f](https://github.com/deltabox-studio/toolchain/commit/f80634f) by [T0chi](https://github.com/T0chi))
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).
14
157
 
15
158
  ## 2.0.1 (October 2026)
16
159
 
@@ -41,192 +184,122 @@
41
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.
42
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))
43
186
  - Add a New contributors footer ([#1e49596](https://github.com/deltabox-studio/toolchain/commit/1e49596) by [T0chi](https://github.com/T0chi))
44
- - scanned range (explicit range start, or the oldest commit's parent).
45
- login is known) and a nested list of their commit messages, reusing
46
- the normal commit bullet formatting without the author/body.
47
- 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.
48
190
  #### Config
49
191
  - Type changelog group callbacks ([#a5c6186](https://github.com/deltabox-studio/toolchain/commit/a5c6186) by [T0chi](https://github.com/T0chi))
50
192
  - Add the shared ChangelogGroupsSetting types, expose groups on both changelog sections, and regenerate the config schema/types/reference.
51
193
  - Revamp config generators and extend tooling customization ([#b924255](https://github.com/deltabox-studio/toolchain/commit/b924255) by [T0chi](https://github.com/T0chi))
52
- - and generateConfig* functions (optional disk writes, schema metadata)
53
- - **BREAKING CHANGE:** ConfigScopes, ConfigScopeDef, CONFIG_SECTION_SCHEMAS,
54
- - CONFIG_TYPE_SCHEMAS and CONFIG_SECTION_DESCRIPTIONS are removed. Consumers
55
- should use ConfigSchema with generateConfigTypes/Env/Markdown/Cli/All and read
56
- 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.
57
201
  - Support metadata annotations in generated output ([#1417bb2](https://github.com/deltabox-studio/toolchain/commit/1417bb2) by [T0chi](https://github.com/T0chi))
58
202
  - Add fmt/lint sections and manual changelog config ([#16000e5](https://github.com/deltabox-studio/toolchain/commit/16000e5) by [T0chi](https://github.com/T0chi))
59
203
  - Inherit shared sections and add fmt/lint defaults ([#94add6f](https://github.com/deltabox-studio/toolchain/commit/94add6f) by [T0chi](https://github.com/T0chi))
60
204
  - Registry source policies and duplicate template-id prompts ([#e030af7](https://github.com/deltabox-studio/toolchain/commit/e030af7) by [T0chi](https://github.com/T0chi))
61
- - host and path globs, enforced for local paths, npm registries and
62
- remote URLs (also when loading global/remote registries and the
63
- provider/registry listings).
64
- builtin or project source; non-interactive runs fail with a clear
65
- `--id` hint instead of prompting.
66
- 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.
67
208
  - Ambient Zod meta types and project-tsconfig typechecks ([#e73661b](https://github.com/deltabox-studio/toolchain/commit/e73661b) by [T0chi](https://github.com/T0chi))
68
- - `/// <reference types="@deltabox/toolchain/globals" />` and get typed
69
- `.meta({ env, path, required, example, ... })` fields.
70
- `ConfigBaseMeta.deprecated` the JSON-Schema boolean.
71
- 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`.
72
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))
73
- - workflows and move the changelog pipeline to `ci.changelog`.
74
- `ci.changelog.commitlint: false` and fall back to coarse
75
- major/minor/patch changelog groups.
76
- `ChangelogBranchesConfig` as a named schema.
77
- consumers, but reject it in the loader with a migration error.
78
- into the `config-schema/` folder.
79
- per-workflow overrides are `WorkflowOptions`, and the new section type
80
- is `ToolchainCiConfig`.
81
- 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.
82
220
  - Let defineConfig accept a promise or a callback ([#111776c](https://github.com/deltabox-studio/toolchain/commit/111776c) by [T0chi](https://github.com/T0chi))
83
- - `defineConfig` now mirrors Vite's helper: the argument may be a plain object,
84
- a `Promise<DbxConfig>`, or a `() => DbxConfig | Promise<DbxConfig>` callback.
85
- The loader resolves the module export (awaits a promise, calls a callback and
86
- awaits its result), so a config can do async work before returning
87
- `{ 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 }`.
88
222
  #### Vscode
89
223
  - Surface workflow conflicts in managed files ([#e692511](https://github.com/deltabox-studio/toolchain/commit/e692511) by [T0chi](https://github.com/T0chi))
90
224
  - Read workflowConflicts from the manifest and render them as a warning group with the owning config key.
91
225
  - Watch the inputs resolved from the dbx config ([#953f071](https://github.com/deltabox-studio/toolchain/commit/953f071) by [T0chi](https://github.com/T0chi))
92
- - watch globs: auto-sync now asks the CLI (`dbx watch --list --json`) per
93
- workspace root and watches the returned globs relative to that root, so
94
- custom `tsconfig.rootFile`/`defaultFile` names are respected
95
- ignore stale results from an older resolve
96
- older pinned `dbx`)
97
- set value, in any scope, still replaces the resolved inputs
98
- `tsconfig.default.json`
99
- 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
100
232
  - Add extension settings link to Home ([#f39cb35](https://github.com/deltabox-studio/toolchain/commit/f39cb35) by [T0chi](https://github.com/T0chi))
101
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))
102
234
  - Add the Registries view ([#e3e808e](https://github.com/deltabox-studio/toolchain/commit/e3e808e) by [T0chi](https://github.com/T0chi))
103
- - A new collapsible **Registries** view (below Templates) shows **Providers** and
104
- (explorer folder or browser for remote URLs), **Add new registry** (the category's
105
- add flow) and **Remove registry** (removes the path, keeps the files). The title
106
- bar has **New registry…** / **Remove registry…** (global or project scope), also
107
- available in the Home "More actions". Removing a template now offers the stored
108
- 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`).
109
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))
110
- - config and code).
111
- "which dbx?" notification, only ask when they differ, and add a **Select dbx
112
- version…** command that pins one in the workspace settings (npx fallback).
113
- More actions), prefix More-actions buttons with a play glyph, start Managed
114
- Files collapsed, expand the Vite+ provider by default, and drop unused icon
115
- 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.
116
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))
117
- - Add the `deltabox.templatesSearchPaths` setting, record the VS Code user dir in
118
- the CLI config on activation, and mirror setting changes into it (so the CLI and
119
- editor agree). Adding a template now asks whether to register it globally (yes
120
- by default), and adding a provider asks for a project or global scope; the
121
- 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.
122
242
  #### Project
123
243
  - Inherit root Oxc config and harden scaffolds ([#56a1895](https://github.com/deltabox-studio/toolchain/commit/56a1895) by [T0chi](https://github.com/T0chi))
124
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.
125
245
  - Make scaffolds runnable and safer ([#eab297b](https://github.com/deltabox-studio/toolchain/commit/eab297b) by [T0chi](https://github.com/T0chi))
126
- - Fold an existing vite config when generating a config ([#5891154](https://github.com/deltabox-studio/toolchain/issues/5891154) by [T0chi](https://github.com/T0chi))
127
- - `project:config` now checks for a hand-written `vite.config.*` and folds its
128
- literal props into the generated `dbx.config.ts`'s `toolchain.vite` (using the
129
- vite migration's extract/scan/fold helpers), adding the `/vite.config.ts` fmt
130
- ignore. A non-foldable config is reported and left alone. The VS Code "Generate
131
- 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.
132
248
  #### Core
133
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))
134
- - `watch` globs with function forms resolved (eg. custom
135
- `tsconfig.rootFile`/`defaultFile` names); `runWatch` now uses it, so only the
136
- inputs of tasks that actually run are watched
137
- resolved tsconfig file names (`{ globs, tsconfig }`) without watching
138
- 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
139
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))
140
- - it in the manifest, so a user-owned file a task patches is never pruned by a
141
- later sync or removed by `dbx reset`
142
- follow configured file names
143
- (written before `files`/`origins`, which it can never clobber), and
144
- `SyncContext.check` flags `dbx sync --check`
145
- the manifest is removed and report the `restored` files
146
- - Provider registry search paths and safer managed-file sync ([#4033009](https://github.com/deltabox-studio/toolchain/issues/4033009) by [T0chi](https://github.com/T0chi))
147
- - http(s) URLs), keeping the legacy provider files for compatibility.
148
- providers`, `--set`, `--clear`), the CLI config and the VS Code
149
- `deltabox.providerRegistrySearchPaths` setting; the Registries view
150
- now manages both kinds and the Providers view can fetch remote
151
- registries through `loadToolchainProviders()`.
152
- pre-existing file. Adopted files are unmanaged, never deleted.
153
- their previous content); the extension shows a notification listing
154
- 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.
155
263
  - Merge global providers with the project registry ([#81c510b](https://github.com/deltabox-studio/toolchain/commit/81c510b) by [T0chi](https://github.com/T0chi))
156
- - Providers can live in `~/.dbx/toolchain/.registry/providers.json` too.
157
- `readAllProviders` merges them with the project's `.dbx/toolchain/providers.json`
158
- (project wins on an id clash), and the CLI's provider list and passthrough
159
- 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.
160
265
  #### Tsconfig
161
266
  - Resolver, `extends`/`baseFile` options and snapshot-backed overrides ([#2b38963](https://github.com/deltabox-studio/toolchain/commit/2b38963) by [T0chi](https://github.com/T0chi))
162
- - JSONC) and `dbx tsconfig --json/--alias/--paths/--references/--tsconfig/--root/--no-extends`;
163
- the generator now resolves the workspaces tsconfig through it
164
- templates, and `tsconfig.baseFile` for the root base tsconfig
165
- into the user-owned tsconfigs on sync, honouring custom
166
- `baseFile`/`rootFile`/`defaultFile`/`buildFile` names (also in the task's
167
- watched/kept globs and in `dbx tsconfig`)
168
- (repo-relative paths only) and record the applied override per file in
169
- `tsconfigOverrides`; removing a key restores the snapshot value when the
170
- original defined it, otherwise removes it (pruning emptied parents), and keeps
171
- a value edited after the override applied it
172
- `tsconfig.override-edited`) and skip instead of creating missing targets;
173
- patched files are untracked, so sync/reset never delete them
174
- (`restoreTsconfigOverrides`), warning with `tsconfig.restore-reapply` while
175
- the overrides are still configured; `dbx reset` restores before removing the
176
- 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
177
275
  #### Vite
178
276
  - Add static shims and a configurable shim import ([#bddcb62](https://github.com/deltabox-studio/toolchain/commit/bddcb62) by [T0chi](https://github.com/T0chi))
179
- - the generated `vite.config.ts`, so Vite+ can load it without a built
180
- `@deltabox/toolchain` (rejects functions, regexps and class instances)
181
- shims; relative values resolve from the repo root and are rewritten per
182
- 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
183
280
  - Preserve existing imports/comments when regenerating the shim ([#194461c](https://github.com/deltabox-studio/toolchain/commit/194461c) by [T0chi](https://github.com/T0chi))
184
- - `renderViteConfig` now accepts the existing `vite.config.ts` source: it keeps
185
- the file's leading comments and import statements and merges `defineConfig` (and
186
- the config type) into the existing `vite`/`vite-plus` import, preserving default,
187
- namespace, other named and type-only specifiers. Regeneration is idempotent, and
188
- the sync task feeds the current file in so a custom import block/comment is not
189
- 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.
190
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))
191
- - The generated `vite.config.ts` shim now imports `defineConfig` (and its config
192
- type) from whichever package the project installs — `vite` or `vite-plus` —
193
- detected from `package.json` and walking up so a hoisted workspace dependency
194
- resolves. `resolveVite` is generic so the shim type-checks against both, and
195
- `ResolveViteOptions` now carries inline `vite` overrides that are deep-merged
196
- 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.
197
284
  #### Migrate
198
285
  - Add Oxc migration and repeatable --from ([#0f6930d](https://github.com/deltabox-studio/toolchain/commit/0f6930d) by [T0chi](https://github.com/T0chi))
199
286
  #### Cli
200
287
  - Add config selection and logger suppression ([#9b69e3f](https://github.com/deltabox-studio/toolchain/commit/9b69e3f) by [T0chi](https://github.com/T0chi))
201
288
  #### Template
202
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))
203
- - one (or fails with an `--id` hint when non-interactive), and accepts
204
- `--id`.
205
- 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.
206
292
  - Unscoped npm packages, custom registries and remote sources ([#08cb68c](https://github.com/deltabox-studio/toolchain/commit/08cb68c) by [T0chi](https://github.com/T0chi))
207
- - npm create packages. The registry defaults to the project package
208
- manager's (`npmRegistryServer` / `.npmrc`) and can be overridden per
209
- source with `--registry` or the new `ToolchainTemplateSource.registry`.
210
- whose `{ sources }` / `{ templates }` / array is merged recursively.
211
- 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.
212
296
  - Add project registries, registry listing and global removal ([#ff3cd16](https://github.com/deltabox-studio/toolchain/commit/ff3cd16) by [T0chi](https://github.com/T0chi))
213
- - to `<project>/.dbx/toolchain/.registry/templates`; the project paths are
214
- resolved before the global ones (remote `http(s)` entries are kept as URLs).
215
- `dbx registry` command lists them (`--json`) and adds/removes template paths
216
- (`--add`/`--remove`, `--scope global|project`).
217
- remove stored global templates; remote registries accept `{ sources }`,
218
- `{ 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.
219
300
  - Add a global template registry ([#638dd3b](https://github.com/deltabox-studio/toolchain/commit/638dd3b) by [T0chi](https://github.com/T0chi))
220
- - Templates registered with `template:init --add`/`template:add` are also stored
221
- under `~/.dbx/toolchain/.registry/templates` (unless `--no-global`), so they are
222
- available in every project and the VS Code extension. Global templates merge
223
- with the project's own (project wins on an id clash).
224
- - Search paths default to that directory and can be configured as a string/array
225
- of directories or `http(s)` remote registries. They live in
226
- `~/.dbx/toolchain/cli/config.json` (`templatesSearchPaths`, plus a `vscodeDir`
227
- pointing at the VS Code user dir) and are managed with the new
228
- `dbx template:registry` command (`--add`/`--set`/`--remove`/`--clear`), which
229
- 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.
230
303
  ### Bug fixes
231
304
  #### Cli
232
305
  - Filter denied providers at registration ([#74c49bb](https://github.com/deltabox-studio/toolchain/commit/74c49bb) by [T0chi](https://github.com/T0chi))
@@ -237,11 +310,7 @@
237
310
  - Allow true/false for every fmt/lint tool, honour explicit biome opt-outs, and ignore disabled biome overrides.
238
311
  - Honour disabled sections and regenerate config types ([#dddd9a7](https://github.com/deltabox-studio/toolchain/commit/dddd9a7) by [T0chi](https://github.com/T0chi))
239
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))
240
- - The combined (`combined: true`) markdown renderer received the untyped
241
- lowering of Zod scopes, which collapses unions/enums to `any` with a `{}`
242
- default. Render Zod scopes from `toJSONSchema` instead (resolving the root
243
- `$ref` into `$defs`), so the reference shows real types and nested options
244
- 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.
245
314
  - Finish generator ergonomics and changelog customization ([#38f6d5b](https://github.com/deltabox-studio/toolchain/commit/38f6d5b) by [T0chi](https://github.com/T0chi))
246
315
  #### Changelog
247
316
  - Honour workflow token overrides and disabled ci ([#de266dd](https://github.com/deltabox-studio/toolchain/commit/de266dd) by [T0chi](https://github.com/T0chi))
@@ -257,18 +326,13 @@
257
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))
258
327
  #### Ci
259
328
  - Keep the build tsconfigs for CI typechecks ([#b1502ad](https://github.com/deltabox-studio/toolchain/commit/b1502ad) by [T0chi](https://github.com/T0chi))
260
- - the generated CI workflow.
261
- 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).
262
332
  #### Migrate
263
333
  - Deep-merge the folded vite config ([#f74d2ed](https://github.com/deltabox-studio/toolchain/commit/f74d2ed) by [T0chi](https://github.com/T0chi))
264
- - Folding a hand-written `vite.config.*` into an existing `toolchain.vite` now
265
- deep-merges object literals (nested objects combine; arrays/scalars from the
266
- vite config win) instead of replacing the section, and flips a previous
267
- `config: false` to `true` since the hand-written file is removed.
268
- - Also fixes `findTopLevelValue` so a scalar last key no longer swallows the
269
- object's closing `}`, updates the managed-shim detection for the generic
270
- `resolveVite<T>(...)` form, and corrects the "nothing to migrate" message when
271
- 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.
272
336
  ### Refactors
273
337
  - Run quality checks through vp tasks ([#2fee264](https://github.com/deltabox-studio/toolchain/commit/2fee264) by [T0chi](https://github.com/T0chi))
274
338
  - Run build and test through vp tasks too ([#e890665](https://github.com/deltabox-studio/toolchain/commit/e890665) by [T0chi](https://github.com/T0chi))
@@ -280,55 +344,49 @@
280
344
  - Cover scaffold --force, root Oxc inheritance, boolean tool opt-ins, workflow package-manager version defaults and the managed-file conflict group.
281
345
  - Regenerate config artifacts and document the fixes ([#9be4d73](https://github.com/deltabox-studio/toolchain/commit/9be4d73) by [T0chi](https://github.com/T0chi))
282
346
  - Document tsconfig overrides, snapshots and `--restore` ([#dad4084](https://github.com/deltabox-studio/toolchain/commit/dad4084) by [T0chi](https://github.com/T0chi))
283
- - snapshots, removal rules, restoring, warnings) and the new CLI flags/exports
284
- the sync task API additions and an upgrade step
285
- the package reference
286
- `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`
287
351
  - Document v2 generators, custom logger and changelog customization ([#f0f7f5d](https://github.com/deltabox-studio/toolchain/commit/f0f7f5d) by [T0chi](https://github.com/T0chi))
288
- - 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))
289
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))
290
- - `guide/ci/` section (overview + settings + ci/issues/changelog/sync/
291
- releases) and retitle the overview to "CI".
292
- metadata, programmatic API, Vite+ generics).
293
- 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.
294
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))
295
- - `guide/changelog.md` into folders with an index + one sibling page per
296
- second-level section.
297
- commitlint, Versioning, CLI, writing messages, Troubleshooting and
298
- Releases into sibling pages.
299
- workflows, the commitlint opt-out fallback and the migration from the
300
- deprecated top-level `changelog` section.
301
- 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.
302
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))
303
- - Cover `registrySearchPaths`, project registries, the `registry` command, remote
304
- 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.
305
365
  - Document the global template/provider registry ([#55651e1](https://github.com/deltabox-studio/toolchain/commit/55651e1) by [T0chi](https://github.com/T0chi))
306
- - Cover the global templates dir, `--no-global`, the `template:registry` command,
307
- the CLI config and `deltabox.templatesSearchPaths` sync, remote registries, and
308
- 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.
309
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))
310
- - Cover `defineConfig` promises/callbacks, the shim importing from the project's
311
- vite package, inline `resolveVite` overrides, and the vite migration deep-merging
312
- 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`.
313
369
  #### Vscode
314
370
  - Document extension requirements ([#07fd6fa](https://github.com/deltabox-studio/toolchain/commit/07fd6fa) by [T0chi](https://github.com/T0chi))
315
371
  #### Config
316
372
  - Generate CLI, env and config-type references ([#ba640a3](https://github.com/deltabox-studio/toolchain/commit/ba640a3) by [T0chi](https://github.com/T0chi))
317
- - `config:docs`) to generate `apps/docs/config/index.md`, `cli.md` from
318
- 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.
319
376
  ### Tests
320
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))
321
- - `node_modules` link back to the repo install) instead of `tests/emulate`,
322
- so a stray sync can never touch the toolchain repo
323
- every test, and clean up on `SIGHUP`/`SIGBREAK` too
324
- 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`)
325
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))
326
383
  ### Build system
327
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))
328
- - `tsconfig.workspaces.json` and regenerate every workspace `tsconfig.json`,
329
- so typechecks resolve workspace source instead of `dist`
330
- building the package first
331
- 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
332
390
  ### Chores
333
391
  - Fix lint warnings and remove unused helper ([#ac890d8](https://github.com/deltabox-studio/toolchain/commit/ac890d8) by [T0chi](https://github.com/T0chi))
334
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))
@@ -343,24 +401,17 @@
343
401
  - Updated misleading docs ([#5a5e44c](https://github.com/deltabox-studio/toolchain/commit/5a5e44c) by [T0chi](https://github.com/T0chi))
344
402
  ### Chores
345
403
  #### Vscode
346
- - 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))
347
405
 
348
406
  ## 1.11.3 (October 2026)
349
407
 
350
408
  ### Bug fixes
351
409
  #### Ci
352
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))
353
- - `apps/docs/config/reference.md` is generated by `scripts/generate-config.ts`
354
- (and the CI `Verify generated config artifacts are up to date` step), so its
355
- "Full example" fence must be produced by the generator. The docs rebrand added
356
- a `[dbx.config.ts]` title to that fence by hand, which `yarn config:generate`
357
- then stripped, failing the drift check. Emit the title from the generator so
358
- 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.
359
412
  ### Styles
360
413
  - Format the docs brand stylesheet ([#fb3a711](https://github.com/deltabox-studio/toolchain/commit/fb3a711) by [T0chi](https://github.com/T0chi))
361
- - Run the formatter over `apps/docs/.vitepress/theme/style.css` (trailing
362
- whitespace, indentation, numeric normalization) so `yarn format` no longer
363
- 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.
364
415
 
365
416
  ## 1.11.2 (October 2026)
366
417
 
@@ -372,53 +423,28 @@
372
423
  ### Bug fixes
373
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))
374
425
  - Two scaffolding robustness fixes:
375
- - Cancelling any prompt (scope, package manager, include-config, the
376
- folder picker) aborts the whole command instead of falling back to a
377
- default and creating orphan files/dirs. The local-template copier also
378
- reads and renders the entire tree into memory before writing, so a
379
- failed or interrupted run can never leave a half-copied template.
380
- - directory it is created in (`--out`/`--root`), so
381
- `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`.
382
428
  - Tests: emulate the `.` name through both `create` and `project:init`.
383
429
  #### Shared
384
430
  - Quote a Windows command path that contains spaces ([#2e1f2ab](https://github.com/deltabox-studio/toolchain/commit/2e1f2ab) by [T0chi](https://github.com/T0chi))
385
- - `spawnCross` routes every Windows command through `cmd.exe`, which splits an
386
- unquoted command at whitespace, so an absolute path like
387
- `C:\Program Files\nodejs\node.exe` was resolved as `C:\Program` and never ran.
388
- Quote the command when it contains whitespace instead of caret-escaping the
389
- space (which `cmd.exe` still splits on). The same fix is mirrored in the
390
- extension's `win-spawn` port.
391
- - Tests: a functional case that hardlinks `node.exe` into a space-containing
392
- 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`.
393
433
  #### Vscode
394
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))
395
- - `createFromTemplate` sent online/Vite+ creates to an integrated terminal as a
396
- shell string. On PowerShell a bare `@scope` is read as splatting (`@deltabox` ->
397
- splat of an undefined variable), so the value was dropped and commander failed
398
- with `option '-s, --scope <scope>' argument missing`.
399
- - Run every template through the same argv pipeline (`runCli`, no shell) so values
400
- like an npm scope are never mangled. Vite+ projects skip the post-create sync
401
- 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.
402
437
  ### Documentation
403
438
  - Updated `vscode-example.mp4` ([#58c0061](https://github.com/deltabox-studio/toolchain/commit/58c0061) by [T0chi](https://github.com/T0chi))
404
439
  - Rebrand to the new logo and blue theme ([#e28c1f9](https://github.com/deltabox-studio/toolchain/commit/e28c1f9) by [T0chi](https://github.com/T0chi))
405
- - Swap the toolchain/box2d logos for the new `logo/*` assets, re-theme the
406
- site with the blue brand tokens and hero/logo animations, update the home
407
- page (GitHub action, feature icons), and refresh the guide/reference copy
408
- 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`.
409
441
  - Adopt the Carbon theme with code-group icons ([#09b2608](https://github.com/deltabox-studio/toolchain/commit/09b2608) by [T0chi](https://github.com/T0chi))
410
- - Build the docs on vitepress-carbon: spread its base config and override
411
- `vite.plugins` so the LLM plugin runs once (with our copy instead of
412
- Carbon's default), add `vitepress-plugin-group-icons` for language icons on
413
- `::: code-group` / `[title]` blocks, and register the theme. Also refresh
414
- 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.
415
443
  - Rename the "LLM context files" page to "LLMs" ([#9a9e8c7](https://github.com/deltabox-studio/toolchain/commit/9a9e8c7) by [T0chi](https://github.com/T0chi))
416
444
  ### Chores
417
445
  #### Vscode
418
446
  - Rebrand the extension icon and README ([#bbde675](https://github.com/deltabox-studio/toolchain/commit/bbde675) by [T0chi](https://github.com/T0chi))
419
- - Point the extension icon at the new `resources/logo.png` / `icon.svg`,
420
- drop the old `icon.png` / `logo.svg`, and update the README with the new
421
- 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.
422
448
 
423
449
  ### Package changes
424
450
  #### Added
@@ -430,21 +456,13 @@
430
456
  ### New features
431
457
  #### Vscode
432
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))
433
- - project" picker (`template:list --online`) instead of only the dbx builtins;
434
- each entry runs the same create pipeline (name/scope/variables/actions).
435
- bare `vite-plus` template — through the extension's prompt pipeline: pick a
436
- concrete Vite+ template, then create like any other template. Consumers no
437
- 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.
438
461
  ### Bug fixes
439
462
  #### Project
440
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))
441
- - `resolveType` fell back to the loaded config's `project.type`, but a scaffold
442
- runs with the config of the directory it is invoked from — the monorepo root
443
- when adding a workspace. A workspace was therefore tagged `monorepo-root`, and
444
- the post-scaffold sync then generated root-only CI, husky and VS Code files
445
- inside the workspace.
446
- - Only honour an explicit `--type` (or the command's implied default); ignore the
447
- 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.
448
466
  ### Documentation
449
467
  - Update descriptions and vscode screenshot ([#215bc4f](https://github.com/deltabox-studio/toolchain/commit/215bc4f) by [T0chi](https://github.com/T0chi))
450
468
  ### Styles
@@ -452,10 +470,8 @@
452
470
  - Long single-line descriptions from earlier commits; `vp fmt` wraps them back.
453
471
  ### Tests
454
472
  - Emulate custom templates/providers and workspace scaffolding ([#37d370e](https://github.com/deltabox-studio/toolchain/commit/37d370e) by [T0chi](https://github.com/T0chi))
455
- - Code extension writes) and assert the CLI lists, scaffolds and runs them —
456
- i.e. the payloads the extension's trees consume.
457
- assert the workspace does NOT inherit their outputs
458
- (.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).
459
475
  ### Chores
460
476
  #### Vscode
461
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))
@@ -470,24 +486,14 @@
470
486
  ### Bug fixes
471
487
  #### Vscode
472
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))
473
- - The Home "Run Vite+" button is disabled while the Home model's `hasVite` is
474
- false, and that value comes from the asynchronously-loaded provider list (a
475
- `dbx providers --json` spawn). A webview rendered before the list resolved was
476
- never re-posted, so the button could stay disabled from a cold start even though
477
- the `deltabox.hasVite` context key (command palette) was updated.
478
- - Recompute the context keys and the Home model whenever the provider tree
479
- reloads, via its `onDidChangeTreeData` event. Vite+ is always contributed by the
480
- 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.
481
491
  #### Core
482
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))
483
- - The per-project `manifest.json` embedded `syncedAt`, so every sync rewrote a
484
- committed file with a new clock value — noisy diffs in the repo and in every
485
- consumer. Move the timestamp out into a sibling, gitignored
486
- `.dbx/toolchain/timestamps.json`:
487
- - to `timestamps.json`, so the next sync migrates a legacy inline value
488
- automatically (the property is gone from `manifest.json`).
489
- inline `syncedAt` until that migration runs, so nothing breaks in between.
490
- 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.
491
497
  ### Documentation
492
498
  - Added a video preview of the extension ([#6b0ca40](https://github.com/deltabox-studio/toolchain/commit/6b0ca40) by [T0chi](https://github.com/T0chi))
493
499
 
@@ -502,85 +508,51 @@
502
508
  ### Bug fixes
503
509
  #### Core
504
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))
505
- - The config loader retried every failed native import through `tsx`, so a
506
- genuinely broken `dbx.config.*` could be silently loaded as an empty config.
507
- On Linux the root build had baked an absolute path to `tsx` into the bundle,
508
- which happened to resolve there: tsx elided the unresolvable (unused) import,
509
- the config "loaded", no error was recorded, and `dbx sync` exited 0 instead of
510
- failing (the emulation suite caught this in CI).
511
- - (`ERR_UNKNOWN_FILE_EXTENSION`, `ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`); let
512
- genuine errors (module-not-found, syntax errors, throws) propagate.
513
- `import('tsx/esm/api')` instead of a build-machine path, and promote `tsx` to
514
- 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.
515
515
 
516
516
  ## 1.10.0 (October 2026)
517
517
 
518
518
  ### New features
519
519
  #### Template
520
520
  - Scaffold actions, package-manager choice and catalogs ([#6c66c97](https://github.com/deltabox-studio/toolchain/commit/6c66c97) by [T0chi](https://github.com/T0chi))
521
- - `module` (relative to the template dir, `export default async (ctx) => {}`,
522
- not copied to the output) or a shell `command`. Actions run through the same
523
- pipeline everywhere (CLI prompts / `--action <id>`, extension prompts,
524
- programmatic API `actions: string[]`).
525
- (`builtin: 'install'`, default off) and a `packageManager` input
526
- (yarn default | pnpm | npm | bun).
527
- when supported: `.yarnrc.yml` (yarn), `pnpm-workspace.yaml` (pnpm),
528
- `package.json` `workspaces.catalog` (bun); npm pins versions inline.
529
- task that keeps `.yarnrc.yml` / `pnpm-workspace.yaml` catalogs in sync. It
530
- only writes a file that is absent or toolchain-managed (marker comment), so a
531
- hand-written file is never clobbered; bun/npm warn.
532
- the manager.
533
- 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.
534
527
  - Generic builtins + inputs + Vite+ templates; resilient config loading ([#fb8d7cc](https://github.com/deltabox-studio/toolchain/commit/fb8d7cc) by [T0chi](https://github.com/T0chi))
535
- - `catalog:` protocol from generated projects, add a pinned
536
- `@deltabox/toolchain` devDependency, and generate a `dbx.config.ts` with only
537
- the `project` section — every other section is now opt-in.
538
- `monorepo-example`, and expose every Vite+ template
539
- (`vite-plus-monorepo`, `-application`, `-library`, `-generator`).
540
- shared by the CLI, the programmatic API, the VS Code extension and the
541
- builtins; document it in the Templates guide.
542
- `@deltabox/toolchain/tsdown` (the private `@deltabox/toolchain-tsdown` package
543
- is never published).
544
- stderr instead of aborting unrelated commands (`template:list`, `providers`,
545
- ...), so the extension views no longer empty out after scaffolding; `sync`
546
- still fails on a broken config (and `--recursive` reports per project).
547
- 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.
548
534
  ### Bug fixes
549
535
  - Issues found emulating the extension + command palette ([#1049afa](https://github.com/deltabox-studio/toolchain/commit/1049afa) by [T0chi](https://github.com/T0chi))
550
536
  - Emulated the extension (bundled and portal `dbx`) against a consumer workspace:
551
- - name ("No version specified for X") for yarn/pnpm/npm/bun, so `projectToPackageJson`
552
- skips the field when no version is known, and scaffolds/`project:config` seed a
553
- default version (`DEFAULT_PACKAGE_MANAGER_VERSIONS`) or the existing
554
- package.json manager. `renderToolchainConfig` always emits `packageManagerVersion`.
555
- `vite-plus` ships two bins, so `npx vite-plus` failed with "could not determine
556
- executable to run" (broke `dbx vite:*`).
557
- `@deltabox/toolchain/vite` no longer runs `resolveDbx` at module load, so every
558
- command stopped printing spurious `dbx`-resolution warnings.
559
- option").
560
- 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.
561
543
  #### Project
562
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))
563
545
  - Found by exercising a portal-linked consumer workspace:
564
- - defines `name` without `scope` (eg. a nested workspace), instead of renaming
565
- `@acme/a` to `a`. Mirrors the token resolution in the config loader.
566
- a previously toolchain-managed catalog file is never deleted when the task
567
- stops producing it (eg. the user replaces it with a hand-written one) — it
568
- 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.
569
549
  ### Tests
570
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))
571
- - extension and command palette drive) in a per-test scratch workspace under
572
- `tests/emulate/<id>` and asserts on real behavior: builtins + inputs/actions,
573
- per-package-manager scaffolding (catalog vs pinned), bare/nested monorepos,
574
- custom module/command actions, the opt-in install action, catalog sync +
575
- never-delete, config-load resilience, `template:info --json`, and the
576
- post-scaffold extension flow.
577
- boundary and never inherits the toolchain repo's own config/manifest. Scratch
578
- dirs are removed after every test (pass or fail), once more on `afterAll`, and
579
- again on process exit; the repo's own manifest is snapshotted and restored so
580
- the working tree stays clean.
581
- always execute against a fresh CLI bundle.
582
- emitting a dangling `catalog:` — Bun's catalog lives in `package.json`
583
- `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.
584
556
 
585
557
  ## 1.9.2 (October 2026)
586
558
 
@@ -592,75 +564,36 @@
592
564
  ### CI
593
565
  #### Vscode
594
566
  - Target the release environment by name (drop resourceType) ([#2bbd25a](https://github.com/deltabox-studio/toolchain/commit/2bbd25a) by [T0chi](https://github.com/T0chi))
595
- - `resourceType` only accepts `virtualMachine`/`Kubernetes`. `resourceType: none`
596
- made the deployment job look for a resource of type `none`, so it failed with
597
- "No resource were found in the environment ... ResourceType Undefined". Use the
598
- string form `environment: 'release'`, which records the deployment against the
599
- 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.
600
568
 
601
569
  ## 1.9.0 (October 2026)
602
570
 
603
571
  ### New features
604
572
  #### Changelog
605
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))
606
- - `changelog.workflows.<id>` now accepts a raw YAML string in addition to a
607
- boolean or a `WorkflowConfig` object. A raw string is written verbatim as the
608
- workflow file: no default merge, no token replacement and no generated header,
609
- and the `changelog.branches` defaults don't apply (it defines its own triggers).
610
- An empty string disables the workflow.
611
- - Docs: add a "Workflows" section covering the three forms, and a "Writing commit
612
- messages" section warning about shell escaping (PowerShell backtick escapes and
613
- bash command substitution) and AI/LLM-drafted messages introducing stray control
614
- characters, curly quotes, dashes and other typographic characters. Regenerate
615
- 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.
616
576
  ### CI
617
577
  #### Vscode
618
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))
619
- - `vsce publish` fails with "already exists" when `deltabox.toolchain-vscode@<version>`
620
- is already on the Marketplace, failing the whole pipeline. Add a `Check` stage
621
- before `Build` that reads the version from `packages/vscode/package.json`,
622
- queries the Marketplace `extensionquery` API, and exposes an `alreadyPublished`
623
- stage output. `Build` and `Release` now depend on `Check` and skip when it is
624
- `true` (a failed query assumes "not published" so a release is never silently
625
- 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).
626
580
  ### Chores
627
581
  #### Changelog
628
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))
629
- - The shared/core/project/tsconfig/vite commits were authored with PowerShell
630
- `\``-escaped backticks, so their bodies carried `\` + control-character
631
- artifacts (e.g. `` `r `` -> `\`+CR, `` `b `` -> backspace). The changelog
632
- sanitizer stripped the control characters but left the stray backslashes and
633
- dropped letters, so the 1.8.0 entry read `esolveVite`, `\{ ... }\`, `epo\`, etc.
634
- Restore the intended text (backticked code, `resolveVite`, `repo`/`repository`,
635
- `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`).
636
584
 
637
585
  ## 1.8.0 (October 2026)
638
586
 
639
587
  ### New features
640
588
  #### Cli
641
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))
642
- - The command context now carries `syncTasks` (`defaultSyncTasks()`) so a package
643
- command such as `migrate` can regenerate managed files without depending on
644
- every sync package. Skip the update-check notice when `--json` is passed so it
645
- 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.
646
591
  #### Changelog
647
592
  - Per-workspace changelogs and configurable branches ([#0aa329c](https://github.com/deltabox-studio/toolchain/commit/0aa329c) by [T0chi](https://github.com/T0chi))
648
- - Scan a workspace's own commits (plus its transitive dependencies) via
649
- `relatedWorkspacePaths` and create a missing workspace `CHANGELOG.md` instead of
650
- skipping it. `changelog.branches.main`/`dev` accept a string or an array, `dev`
651
- defaults to `main`, and the branch list is injected into the generated
652
- workflows. Add `changelog.commitlint.dir` for a custom commitlint config
653
- 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.
654
594
  #### Migrate
655
595
  - Recursive, interactive migration and post-migration sync ([#bb87b33](https://github.com/deltabox-studio/toolchain/commit/bb87b33) by [T0chi](https://github.com/T0chi))
656
- - `dbx migrate` is now `--recursive` (off by default): it discovers the projects
657
- under the root and, on a TTY, prompts a multi-select with an "All projects"
658
- option. The `vite` migration creates a fresh nested `dbx.config.ts` (wrapped in
659
- `defineConfig`) when the project has none, and removes the folded
660
- `vite.config.*` unless `--ignore-vite-config-file`. `--write` also regenerates
661
- the project's managed files unless `--ignore-managed-files`, dropping the
662
- changelog task when `--ignore-changelog`; removals are reported. Adds
663
- `@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.
664
597
  #### Vite
665
598
  - Accept a single options object in resolveVite ([#2e2384b](https://github.com/deltabox-studio/toolchain/commit/2e2384b) by [T0chi](https://github.com/T0chi))
666
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.
@@ -679,52 +612,25 @@
679
612
  ### Bug fixes
680
613
  #### Vscode
681
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))
682
- - Capture the running extension's path and version at activation instead of
683
- hardcoding the id (`deltabox.toolchain` is stale: the id is
684
- `<publisher>.<name>`), so `bundledCliEntry()`/`pinnedToolchainSpec()` find the
685
- shipped `dbx.cjs` and Providers/Templates/scaffolding work without a
686
- project-local install. Disable the sync commands (`deltabox.canSync`) and the
687
- Vite+ commands (`deltabox.hasVite`) via context keys + command `enablement` and
688
- the Home buttons when there is nothing to sync / the provider is unavailable.
689
- 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.
690
616
  ### Documentation
691
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))
692
- - Add per-section guides (project, biome, vite, watch, logger, tsconfig), refresh
693
- the CLI/config/monorepo/VS Code/api pages and the sidebar, and wire
694
- `vitepress-plugin-llms` with `apps/docs/llms.md` plus the script that copies the
695
- 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.
696
619
  ### Build system
697
620
  - Make the published package installable ([#b2597ee](https://github.com/deltabox-studio/toolchain/commit/b2597ee) by [T0chi](https://github.com/T0chi))
698
- - npm runs a dependency's `postinstall` on install, so the repo-only
699
- `husky && node scripts/bootstrap.mjs` broke every consumer (and global) install
700
- with `'husky' is not recognized`. Move the logic into `scripts/bootstrap.mjs`,
701
- publish it, and guard every checkout-only step: husky runs only when `.husky`
702
- exists and the dist build only when `packages/` exists. A consumer install is
703
- 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.
704
622
  ### CI
705
623
  - Aggregate release notes and refresh the generated workflows ([#9426a40](https://github.com/deltabox-studio/toolchain/commit/9426a40) by [T0chi](https://github.com/T0chi))
706
- - The release workflow now extracts every changelog entry since the last tag, and
707
- the generated `ci.yml`/`release.yml` are regenerated from `dbx.config.ts`.
708
- 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.
709
625
  #### Vscode
710
626
  - Fix the release-vscode Azure Pipelines trigger ([#b59964c](https://github.com/deltabox-studio/toolchain/commit/b59964c) by [T0chi](https://github.com/T0chi))
711
- - `pr` is a top-level pipeline keyword, not a child of `trigger` (whose full
712
- syntax only accepts `batch`, `branches`, `paths` and `tags`), so `trigger.pr`
713
- was reported as an unexpected property. Move `pr: none` to the top level and
714
- trigger on `v*` tags through `tags` (with `branches: exclude: ['*']` for a
715
- 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*`.
716
628
  ### Chores
717
629
  - Self-host nested dbx configs across the workspaces ([#003cb9f](https://github.com/deltabox-studio/toolchain/commit/003cb9f) by [T0chi](https://github.com/T0chi))
718
- - Every workspace now has its own `dbx.config.ts` (holding its Vite Task
719
- definitions) and a generated `vite.config.ts` shim, plus its own tracked
720
- manifest. The root gains a `@deltabox/toolchain` `portal:.` self-link so the
721
- shims resolve `@deltabox/toolchain/vite`, and `.gitignore` keeps nested
722
- manifests while ignoring the rest. The root `tsconfig.monorepo.json` is renamed
723
- 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`.
724
631
  #### Deps
725
632
  - Refresh the lockfile ([#420c805](https://github.com/deltabox-studio/toolchain/commit/420c805) by [T0chi](https://github.com/T0chi))
726
- - Covers `vitepress-plugin-llms` (docs), `@clack/prompts`/`glob`/core (migrate)
727
- 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.
728
634
 
729
635
  ### Package changes
730
636
  #### Added
@@ -741,7 +647,7 @@
741
647
 
742
648
  ### CI
743
649
  #### Vscode
744
- - 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))
745
651
 
746
652
  ## 1.7.6 (October 2026)
747
653
 
@@ -778,7 +684,7 @@
778
684
  - Set up ci with `Azure Pipelines` ([#5bc736f](https://github.com/deltabox-studio/toolchain/commit/5bc736f) by [T0chi](https://github.com/T0chi))
779
685
  - [skip ci]
780
686
  ### Chores
781
- - 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))
782
688
 
783
689
  ## 1.7.1 (October 2026)
784
690
 
@@ -797,7 +703,7 @@
797
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 #######).
798
704
  ### Chores
799
705
  #### Changelog
800
- - 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))
801
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.
802
708
 
803
709
  ## 1.6.1 (October 2026)
@@ -837,7 +743,7 @@
837
743
 
838
744
  ### New features
839
745
  #### Changelog
840
- - 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))
841
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).
842
748
 
843
749
  ## 1.4.1 (October 2026)
@@ -854,63 +760,46 @@
854
760
 
855
761
  ### New features
856
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))
857
- - `vite.config.ts` in and adds the `fmt` ignore; `dbx` resolves its own binary first
858
- 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
859
767
  #### Vscode
860
768
  - Add Providers and Templates views ([#9aa6d12](https://github.com/deltabox-studio/toolchain/commit/9aa6d12) by [T0chi](https://github.com/T0chi))
861
- - `add`/`remove`/`run-command`/`open-homepage`/`copy-id` actions
862
- `toolchainProviders()`, so a registered provider's commands become `dbx` commands
863
- 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
864
773
  #### Vite
865
774
  - Drive `dbx` from the `dbx()` plugin, drop `defineDbxConfig` ([#8d11557](https://github.com/deltabox-studio/toolchain/commit/8d11557) by [T0chi](https://github.com/T0chi))
866
- - The Vite/Vite+ integration is now the `dbx()` plugin plus spreading `DBX_TASKS` into
867
- `run.tasks`, so the consumer's own `vite` config stays the config:
868
- - `export default defineConfig({`
869
- `plugins: [dbx()],`
870
- `run: { tasks: { ...DBX_TASKS } },`
871
- `});`
872
- - Remove the `defineDbxConfig` wrapper (and `DbxViteConfig`) and update the README, the
873
- Providers guide and the API reference.
874
- - 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))
875
- - `toolchain.vite` now holds the whole Vite+ config (a loose object) with a
876
- `config: false` opt-out, and `dbx sync` generates the managed root
877
- `vite.config.ts` from it, so `dbx.config.*` is the only hand-authored root config.
878
- - Add `dbx migrate --from vite` (auto-detected): it extracts the object passed to
879
- `defineConfig` in an existing root `vite.config.ts` and folds it into `dbx.config.*`'s
880
- `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.
881
781
  - The config-types generator now honors `.catchall`, emitting an index signature.
882
782
  #### Config
883
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))
884
- - `ToolchainViteConfig` is now Vite+ `ViteUserConfig` intersected with the managed
885
- `config?: boolean` opt-out, instead of a generated loose object. The config-types
886
- generator gains a hand-written type override plus an imports block, used for the
887
- vite type, and `vite-plus` becomes an optional peer dependency.
888
- - Rename every `Tooling*` type, schema id and identifier to `Toolchain*`. That covers
889
- the config schema ids, `CONFIG_TYPE_SCHEMAS` keys, the provider/migration models
890
- and the CLI helpers (`toolchainConfigSchema`, `loadToolchainConfig`,
891
- `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.
892
786
  ### Bug fixes
893
787
  #### Deps
894
788
  - Sync the lockfile for `@clack/prompts` ([#568a7c6](https://github.com/deltabox-studio/toolchain/commit/568a7c6) by [T0chi](https://github.com/T0chi))
895
- - The lockfile was missing the `@clack/prompts` entry for `packages/shared` and
896
- `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).
897
790
  ### Refactors
898
791
  - Rename Ox to Oxc across the project ([#39b37d3](https://github.com/deltabox-studio/toolchain/commit/39b37d3) by [T0chi](https://github.com/T0chi))
899
- - (`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
900
794
  ### Documentation
901
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))
902
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))
903
- - Note that `toolchain.vite` is typed as Vite's `UserConfig` as augmented by Vite+
904
- (`ToolchainViteConfig`), and list `ToolchainViteConfig` among the shared config
905
- types. Covers the unreleased changes since v1.3.1 together with the sections the
906
- feature commits already added (the Vite+ config in `dbx.config`, the generated
907
- `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).
908
798
  #### Vscode
909
799
  - Refresh the extension screenshot and add its `LICENSE` ([#49d4510](https://github.com/deltabox-studio/toolchain/commit/49d4510) by [T0chi](https://github.com/T0chi))
910
800
  ### Build system
911
801
  - Package the VS Code extension in `yarn build` ([#1dd14a1](https://github.com/deltabox-studio/toolchain/commit/1dd14a1) by [T0chi](https://github.com/T0chi))
912
- - `yarn build` now also runs the vscode `package:vsix`, so `deltabox-toolchain.vsix`
913
- is always produced.
802
+ - `yarn build` now also runs the vscode `package:vsix`, so `deltabox-toolchain.vsix` is always produced.
914
803
 
915
804
  ### Package changes
916
805
  #### Added
@@ -930,72 +819,46 @@
930
819
  ### New features
931
820
  #### Core
932
821
  - Keep the generated `.dbx` directory out of git ([#9fc1434](https://github.com/deltabox-studio/toolchain/commit/9fc1434) by [T0chi](https://github.com/T0chi))
933
- - `dbx sync` now appends the `.dbx` ignore block (everything under `.dbx/` except the
934
- manifest, which holds no absolute paths) to an existing `.gitignore`, and the
935
- 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.
936
823
  #### Cli
937
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))
938
- - `Commander`'s help and errors now go through the shared logger (help to stdout,
939
- errors to stderr, colour-aware, ANSI stripped when colour is off). Vite+
940
- passthrough commands keep `commander`'s defaults so the spawned `vp` keeps its own
941
- coloured logging.
942
- - Add a `providers` config section (`color?: boolean`): `color: false` forces plain
943
- provider output, the global `--no-color` still turns it off, and `runVp` sets
944
- `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.
945
827
  - Check for a newer `dbx` version ([#772aae2](https://github.com/deltabox-studio/toolchain/commit/772aae2) by [T0chi](https://github.com/T0chi))
946
- - On each run, check the npm registry in the background (cached for a day, never
947
- blocking) and print a short notice with a link to the release when a newer
948
- `@deltabox/toolchain` exists. Skipped in CI and by `NO_UPDATE_NOTIFIER` or
949
- `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.
950
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))
951
- - `dbx fmt` / `dbx lint` / `dbx run` / `dbx dev` now work: when the first operand
952
- is not a built-in command but names a Vite+ subcommand (or one of its aliases),
953
- `vite` is inserted before it and the whole Vite+ CLI stays reachable without the
954
- explicit namespace. Built-in commands win, so `dbx migrate` remains the
955
- toolchain's migration (`dbx vite migrate` is Vite+'s).
956
- - The Package scripts, Migrations, Monorepo, CLI and Providers guides now show the
957
- 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.
958
832
  #### Vscode
959
833
  - Bundle the `dbx` CLI into the extension ([#bf12403](https://github.com/deltabox-studio/toolchain/commit/bf12403) by [T0chi](https://github.com/T0chi))
960
- - Ship a self-contained `dbx.cjs` inside the VSIX (built by the new
961
- `tsdown.bin.config.ts`) and prefer it in the extension, so a consumer no longer
962
- needs to install `@deltabox/toolchain`. It falls back to a workspace-local
963
- install and then `npx`.
964
- - Make the changelog and tsconfig direct-run guards basename-aware so they do not
965
- 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.
966
836
  #### Shared
967
837
  - Add a configurable shared logger ([#54b51fa](https://github.com/deltabox-studio/toolchain/commit/54b51fa) by [T0chi](https://github.com/T0chi))
968
- - Add `packages/shared/src/logger.ts`: one level-aware, colour-aware sink (colours
969
- via `picocolors`, the same package Vite uses) with `debug`, `info`, `success`, `warn`,
970
- `error` and `raw` (unprefixed machine output). It is configurable from `dbx.config`'s
971
- new `logger` section and from the CLI (`--log-level`, `--no-color`), with the CLI
972
- taking precedence.
973
- - Every `console` call in the toolchain now goes through the logger (JSON output
974
- through `raw`), including the sync/watch log callback and the `run` helper's
975
- verbose line. The generated config types, the JSON schema, the docs reference
976
- 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.
977
840
  ### Bug fixes
978
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))
979
842
  - Two bugs found by exercising the CLI against the local consumer projects:
980
- - instead of `process.cwd()`, so `dbx sync --cwd <dir>` (run from elsewhere)
981
- writes correct relative paths rather than paths pointing at the caller.
982
- spawning the task runner, and prunes itself when the same command runs again
983
- from the same root. A root task whose script calls `run -r <task>` can no
984
- 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.
985
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))
986
- - render commits as a plain short hash instead of a `github.com/undefined` link
987
- `yarn build` no longer rewrites it and the working tree stays idempotent
988
- `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
989
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))
990
852
  - Audit pass over the toolchain source:
991
- - 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
992
859
  ### Documentation
993
860
  - Document the full public API surface ([#6f78245](https://github.com/deltabox-studio/toolchain/commit/6f78245) by [T0chi](https://github.com/T0chi))
994
- - Expand `guide/api.md` to cover the umbrella plus every subpath export, grouped by
995
- package. Add the logging API (`logger`, `createLogger`, `setLogConfig`,
996
- `setLogOverrides`, levels, colours, `raw`) to the API and Configuration guides, and
997
- document the config generator's `formatGenerated` helper and the Vite and CLI
998
- 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.
999
862
  ### Chores
1000
863
  - Track only the `.dbx` manifest ([#a254062](https://github.com/deltabox-studio/toolchain/commit/a254062) by [T0chi](https://github.com/T0chi))
1001
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.
@@ -1010,50 +873,31 @@
1010
873
 
1011
874
  ### Documentation
1012
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))
1013
- - Use `dbx vite <command>` (the Vite+ passthrough) instead of calling `vp`
1014
- directly in the Package scripts, Migrations and Monorepo guides, so a project
1015
- 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.
1016
877
 
1017
878
  ## 1.2.7 (October 2026)
1018
879
 
1019
880
  ### Documentation
1020
881
  - Link package script migrations from the Migrations page ([#036ebf5](https://github.com/deltabox-studio/toolchain/commit/036ebf5) by [T0chi](https://github.com/T0chi))
1021
- - Add a "Package scripts" section to the Migrations guide with the Biome/Turbo
1022
- 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.
1023
883
 
1024
884
  ## 1.2.6 (October 2026)
1025
885
 
1026
886
  ### Bug fixes
1027
887
  #### Config
1028
888
  - Tidy generated types and format them with Oxfmt ([#6fef440](https://github.com/deltabox-studio/toolchain/commit/6fef440) by [T0chi](https://github.com/T0chi))
1029
- - `untyped`'s type generator emits a blank line between every member and verbose
1030
- multi-line JSDoc. Strip the member blank lines in the generator, then run the
1031
- generated output through Oxfmt's programmatic `format()` (with `jsdoc: true`)
1032
- at generation time instead of shelling out to the repo-root `vp`, so the file
1033
- is written already formatted and resembles the hand-written `types.ts`.
1034
- - Also drop the toolchain-specific `yarn config:types` hint from the generated
1035
- header: the types ship through `@deltabox/toolchain-shared`, so a script name
1036
- that only exists in this repo's `package.json` is misleading to consumers (a
1037
- 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).
1038
891
  ### Documentation
1039
892
  - Add Package scripts guide and a navbar version ([#b279739](https://github.com/deltabox-studio/toolchain/commit/b279739) by [T0chi](https://github.com/T0chi))
1040
- - Add a guide page covering the recommended root scripts (Vite+ format/lint and
1041
- Vite Task) and how to migrate an existing Biome + Turbo project onto them, and
1042
- surface it in the sidebar and Getting Started list. Also show the current
1043
- version in the navbar (linked to the changelog, releases and npm), like the
1044
- 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.
1045
894
 
1046
895
  ## 1.2.5 (October 2026)
1047
896
 
1048
897
  ### Bug fixes
1049
898
  #### Changelog
1050
899
  - Keep generated commitlint enums expanded ([#a6ad600](https://github.com/deltabox-studio/toolchain/commit/a6ad600) by [T0chi](https://github.com/T0chi))
1051
- - Oxfmt collapses an array onto one line when it fits the print width, so a
1052
- generated `commitlint.config.mjs` whose type/scope enum is short was
1053
- reformatted by `vp fmt` and then failed `dbx sync --check`. An inert leading
1054
- line comment inside each enum keeps the list expanded regardless of the
1055
- consumer's print width, so the generated file is now Oxfmt-idempotent and
1056
- 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.
1057
901
 
1058
902
  ## 1.2.4 (October 2026)
1059
903
 
@@ -1074,9 +918,7 @@
1074
918
 
1075
919
  ### Documentation
1076
920
  - Show how to load the generated config ([#0f4d0d1](https://github.com/deltabox-studio/toolchain/commit/0f4d0d1) by [T0chi](https://github.com/T0chi))
1077
- - Add a "Load the config at runtime" section to the config generator guide
1078
- (`parseEnvTree`, the typed accessors, `applyOverrides`, and schema validation via
1079
- `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.
1080
922
  - Update description and tags ([#64b64aa](https://github.com/deltabox-studio/toolchain/commit/64b64aa) by [T0chi](https://github.com/T0chi))
1081
923
 
1082
924
  ## 1.2.0 (October 2026)
@@ -1084,25 +926,15 @@
1084
926
  ### New features
1085
927
  #### Config
1086
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))
1087
- - Teach the config engine's Zod->untyped bridge and types generator to handle
1088
- unions (`anyOf`/`oneOf`), `const`, and unknown records, and to render a schema's
1089
- fields on the main interface when it has no `base` group (plus type aliases for
1090
- non-object roots). Named `$ref`s (via `.meta({ id })`) render as the type name,
1091
- so the generated config types reference each other instead of inlining.
1092
- - Generate `packages/shared/src/config-types.ts` from the Zod config model with the
1093
- engine's `renderConfigTypes` (`yarn config:types`); `config-schema.ts` keeps only
1094
- 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`.
1095
931
  ### Bug fixes
1096
932
  #### Vscode
1097
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))
1098
- - The Managed Files view read a manifest per project, so a monorepo's root-level
1099
- managed files never showed. Read each workspace root's manifest and group its
1100
- files by the deepest project that owns them. Move the Projects view above
1101
- 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).
1102
935
  ### Documentation
1103
936
  - Document the config generator outputs ([#fcfcd69](https://github.com/deltabox-studio/toolchain/commit/fcfcd69) by [T0chi](https://github.com/T0chi))
1104
- - Show a short example of each generated output (config types, markdown, env,
1105
- 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.
1106
938
  - Update vscode extension preview ([#fd90dda](https://github.com/deltabox-studio/toolchain/commit/fd90dda) by [T0chi](https://github.com/T0chi))
1107
939
 
1108
940
  ## 1.1.24 (October 2026)
@@ -1120,9 +952,7 @@
1120
952
  ### Bug fixes
1121
953
  #### Ci
1122
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))
1123
- - The VS Code Marketplace publish was the only failing release step (no
1124
- `VSCE_PAT` set). Make it a no-op while the secret is unset and publish
1125
- 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.
1126
956
  - Also remove the temporary OIDC diagnostic step now that the release publishes.
1127
957
 
1128
958
  ## 1.1.21 (October 2026)
@@ -1130,72 +960,43 @@
1130
960
  ### Bug fixes
1131
961
  #### Ci
1132
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))
1133
- - Try `npm publish` first and fall back to `npm stage publish` on failure, so
1134
- toggling the trusted publisher's publish/stage permissions on npm never breaks
1135
- the release: a direct publish succeeds when allowed, and a staged publish (always
1136
- 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.
1137
964
  ### Documentation
1138
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))
1139
- - Replace the static npm-name badge with a shields.io npm/v badge so the README
1140
- 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.
1141
967
 
1142
968
  ## 1.1.20 (October 2026)
1143
969
 
1144
970
  ### Bug fixes
1145
971
  #### Ci
1146
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))
1147
- - Default to `npm stage publish` for OIDC trusted publishing: it always stages
1148
- the version and defers the maintainer's 2FA approval, and is always permitted
1149
- for a trusted publisher (unlike direct `npm publish`, which the package's 2FA
1150
- policy rejects). Drop the automation-token fallback and require npm >= 11.15.1
1151
- (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`).
1152
974
 
1153
975
  ## 1.1.19 (October 2026)
1154
976
 
1155
977
  ### Chores
1156
978
  #### Ci
1157
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))
1158
- - The publish still fails after binding the environment, and npm falls back to
1159
- the (automation) token and 403s. Add a temporary step that decodes the OIDC
1160
- claims and calls the token-exchange endpoint directly so the exact
1161
- 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.
1162
981
 
1163
982
  ## 1.1.18 (October 2026)
1164
983
 
1165
984
  ### Bug fixes
1166
985
  #### Ci
1167
986
  - Bind the release job to the OIDC environment ([#7b8f1b4](https://github.com/deltabox-studio/toolchain/commit/7b8f1b4) by [T0chi](https://github.com/T0chi))
1168
- - The npm OIDC trusted publisher is bound to the GitHub environment
1169
- "toolchain / release", but the release job declared no environment. The OIDC
1170
- environment claim therefore did not match, the token exchange failed, and npm
1171
- silently fell back to the placeholder token (the misleading E404).
1172
- - Declare `environment: 'toolchain / release'` on the job and add an optional
1173
- `NODE_AUTH_TOKEN` fallback (the environment's `NPM_TOKEN`) to the publish step.
1174
- 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.
1175
989
  #### Vscode
1176
990
  - Spawn the CLI safely on Windows ([#99e3ad1](https://github.com/deltabox-studio/toolchain/commit/99e3ad1) by [T0chi](https://github.com/T0chi))
1177
- - `spawn('npx.cmd', ...)` throws EINVAL synchronously on Windows, and
1178
- `captureCli`/`runCli` call spawn inside a Promise executor, so the throw
1179
- rejected the promise and the command aborted with no UI ("nothing happens").
1180
- This fired whenever the CLI resolved to the `npx.cmd` fallback (a workspace
1181
- without a local `@deltabox/toolchain`), e.g. "From template..." which round-trips
1182
- `template:list --json` through `captureCli`.
1183
- - Add a pure `win-spawn` module (ported from the shared `spawnCross`) that escapes
1184
- the command + args and runs a `.cmd` shim through `cmd.exe`; use it from `spawnCli`.
1185
- `captureCli`/`runCli` no longer reject on a spawn failure. Also fix `cliInvocation`
1186
- for the integrated terminal: `process.execPath` is the VS Code binary in the
1187
- 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`.
1188
993
 
1189
994
  ## 1.1.17 (October 2026)
1190
995
 
1191
996
  ### Bug fixes
1192
997
  #### Ci
1193
998
  - Upgrade npm before publishing for OIDC trusted publishing ([#657d4b9](https://github.com/deltabox-studio/toolchain/commit/657d4b9) by [T0chi](https://github.com/T0chi))
1194
- - Node 22 bundles npm 10.x, but npm OIDC trusted publishing requires
1195
- npm >= 11.5.1. Without it `npm publish` fell back to token auth and the
1196
- registry answered a misleading 404, so every release since 1.0.7 failed
1197
- at the publish step. Add an explicit npm upgrade step before the publish
1198
- 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.
1199
1000
 
1200
1001
  ## 1.1.16 (October 2026)
1201
1002
 
@@ -1211,7 +1012,7 @@
1211
1012
  ## 1.1.14 (October 2026)
1212
1013
 
1213
1014
  ### Documentation
1214
- - 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))
1215
1016
 
1216
1017
  ## 1.1.13 (October 2026)
1217
1018
 
@@ -1242,7 +1043,7 @@
1242
1043
 
1243
1044
  ### Documentation
1244
1045
  - Reindent the README lists ([#1d41d68](https://github.com/deltabox-studio/toolchain/commit/1d41d68) by [T0chi](https://github.com/T0chi))
1245
- - 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))
1246
1047
  ### Chores
1247
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))
1248
1049
 
@@ -1291,18 +1092,14 @@
1291
1092
  ### Documentation
1292
1093
 
1293
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))
1294
- - The VitePress build now copies the generated `dbx` JSON schema into the dist
1295
- 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.
1296
1096
 
1297
1097
  ### CI
1298
1098
 
1299
1099
  #### Release
1300
1100
 
1301
1101
  - Publish to npm via trusted publishing (OIDC) ([#41be869](https://github.com/deltabox-studio/toolchain/commit/41be869) by [T0chi](https://github.com/T0chi))
1302
- - Drop the `NPM_TOKEN`-based `yarn npm publish` (which also staged). Use npm
1303
- trusted publishing: `id-token: write`, setup-node `registry-url`, `yarn pack`
1304
- (resolves `catalog:`/`workspace:`) + `npm publish <tarball>` — provenance is
1305
- 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`.
1306
1103
 
1307
1104
  ## 1.1.0 (October 2026)
1308
1105
 
@@ -1311,10 +1108,7 @@
1311
1108
  #### Vite
1312
1109
 
1313
1110
  - Add a `dbx()` Vite+ plugin and `defineDbxConfig` wrapper ([#a1edaf9](https://github.com/deltabox-studio/toolchain/commit/a1edaf9) by [T0chi](https://github.com/T0chi))
1314
- - Lets Vite+-only consumers drive `dbx` from `vite.config.ts`: `dbx()` runs
1315
- `dbx sync` before dev/build (or `dbx sync --check` in CI) and re-syncs on
1316
- input changes; `defineDbxConfig()` also registers the `vp run dbx:*` tasks
1317
- (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).
1318
1112
 
1319
1113
  ### Chores
1320
1114
 
@@ -1333,10 +1127,7 @@
1333
1127
  #### Release
1334
1128
 
1335
1129
  - Manage the release workflow from `dbx.config.ts` ([#bf55b70](https://github.com/deltabox-studio/toolchain/commit/bf55b70) by [T0chi](https://github.com/T0chi))
1336
- - Drop the hand-written `.github/workflows/release.yml`; the release flow (tag +
1337
- GitHub Release with the VSIX + notes, `npm publish`, Marketplace publish) is
1338
- now defined under `changelog.workflows.release` in the config and generated
1339
- 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.
1340
1131
 
1341
1132
  ## 1.0.7 (October 2026)
1342
1133
 
@@ -1351,11 +1142,7 @@
1351
1142
  #### Release
1352
1143
 
1353
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))
1354
- - Replaces the generated release-PR workflow with a hand-written one that, on
1355
- each push to `main`, packages the VS Code extension, creates the `v<version>`
1356
- tag and a GitHub Release (notes from `CHANGELOG.md` + the `.vsix` asset),
1357
- publishes `@deltabox/toolchain` to npm, and publishes the extension to the VS
1358
- 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.
1359
1146
 
1360
1147
  ## 1.0.6 (October 2026)
1361
1148
 
@@ -1409,19 +1196,11 @@
1409
1196
  #### Changelog
1410
1197
 
1411
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))
1412
- - The release PR job extracted notes with `awk`, which failed when
1413
- `CHANGELOG.md` did not exist yet (a fresh repo). Fall back to an empty notes
1414
- 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.
1415
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))
1416
- - `prependChangelogEntry` read the existing file unconditionally, so the first
1417
- run on a repo without a `CHANGELOG.md` failed with `ENOENT`. Seed it with a
1418
- `# 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`.
1419
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))
1420
- - Running `dbx changelog` from source (or from the published package in
1421
- `node_modules`) walked up from `import.meta.url` and landed on the wrong
1422
- `package.json`, so it looked for `CHANGELOG.md` in the wrong directory and
1423
- failed. Resolve the nearest `package.json` above the working directory
1424
- 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.
1425
1204
 
1426
1205
  ### Chores
1427
1206
 
@@ -1429,6 +1208,4 @@
1429
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))
1430
1209
  - Update package description and keywords ([#d75b503](https://github.com/deltabox-studio/toolchain/commit/d75b503) by [T0chi](https://github.com/T0chi))
1431
1210
  - Initial commit of `@deltabox/toolchain` ([#ed4673b](https://github.com/deltabox-studio/toolchain/commit/ed4673b) by [T0chi](https://github.com/T0chi))
1432
- - Self-hosts CI + changelog: `dbx.config.ts` drives the generated workflows,
1433
- commitlint config and Conventional-Commits VS Code settings. Config file is
1434
- `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`.