code-foundry 0.32.3 → 0.32.4

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.
@@ -11,7 +11,7 @@ dependency_review: auto
11
11
  package_manager: bun
12
12
  toolchain: auto
13
13
  runtime_repository: 0xPlayerOne/code-foundry
14
- runtime_ref: v0.31.12
14
+ runtime_ref: v0.32.3
15
15
  release_type: node
16
16
  npm_publish: true
17
17
  license: agpl-3.0-or-later
@@ -31,3 +31,9 @@ codeql_runner: ubuntu-latest
31
31
  pr_runner: ubuntu-slim
32
32
  release_runner: ubuntu-slim
33
33
  prune_standard: false
34
+ post_release: false
35
+ post_release_workflow:
36
+ post_release_mode: auto
37
+ opencode_security: false
38
+ sync_mode: overlay
39
+ custom_workflows: preserve
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.32.4](https://github.com/0xPlayerOne/code-foundry/compare/v0.32.3...v0.32.4) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **sync:** never leak runtime release-type into consumer configs ([b7c51f3](https://github.com/0xPlayerOne/code-foundry/commit/b7c51f3e465e048be933292e0db9ca08d5420c9a))
9
+ * **sync:** quote collection-like config values so prettier accepts them ([b0d4fea](https://github.com/0xPlayerOne/code-foundry/commit/b0d4fea815b6417de23cf577cba525e2017004dc))
10
+ * **sync:** satisfy JSDoc type-check for baseline merge ([ce54339](https://github.com/0xPlayerOne/code-foundry/commit/ce54339b2092722e4d0d4e43afdb7ab5bacd2bc1))
11
+
3
12
  ## [0.32.3](https://github.com/0xPlayerOne/code-foundry/compare/v0.32.2...v0.32.3) (2026-07-31)
4
13
 
5
14
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-foundry",
3
- "version": "0.32.3",
3
+ "version": "0.32.4",
4
4
  "description": "A fast, language-aware repository factory for agent-ready workflows, testing, security, and release automation.",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-or-later",
@@ -182,18 +182,27 @@ export function syncRepository(options) {
182
182
  return { changed, config }
183
183
  }
184
184
 
185
+ /**
186
+ * Baseline keys that are safe to merge into a repository's release config.
187
+ * Package and release-type policy is detected from the repository itself and
188
+ * must never leak from the runtime template.
189
+ */
190
+ const RELEASE_BASELINE_KEYS = ['$schema', 'bump-minor-pre-major', 'changelog-sections', 'include-component-in-tag']
191
+
185
192
  /** @param {string} target @param {string} sourceFile @returns {Record<string, any>} */
186
193
  function mergeReleaseConfig(target, sourceFile) {
194
+ /** @type {Record<string, any>} */
187
195
  let baseline = {}
188
196
  try { baseline = JSON.parse(readFileSync(sourceFile, 'utf8')) }
189
197
  catch { baseline = {} }
198
+ const safeBaseline = Object.fromEntries(RELEASE_BASELINE_KEYS.filter((key) => key in baseline).map((key) => [key, baseline[key]]))
190
199
  const destination = join(target, 'release-please-config.json')
191
200
  let existing = baseline
192
201
  if (existsSync(destination)) {
193
202
  try { existing = JSON.parse(readFileSync(destination, 'utf8')) }
194
203
  catch { existing = baseline }
195
204
  }
196
- return buildReleaseConfig(target, { ...baseline, ...existing })
205
+ return buildReleaseConfig(target, { ...safeBaseline, ...existing })
197
206
  }
198
207
 
199
208
  /** @param {string} target @param {string} sourceFile @returns {string} */
@@ -371,7 +380,13 @@ function createDefaultConfig(root, source) {
371
380
  /** @param {Record<string,string>} config */
372
381
  function renderConfig(config) { return `${Object.entries(config).map(([key, value]) => renderConfigLine(key, value)).join('\n')}\n` }
373
382
  /** @param {string} key @param {string} value */
374
- function renderConfigLine(key, value) { return value === '' ? `${key}:` : `${key}: ${value}` }
383
+ function renderConfigLine(key, value) {
384
+ if (value === '') return `${key}:`
385
+ // Quote values that YAML would parse as collections or that would trip
386
+ // prettier's formatter (e.g. codeql_rust_shards: '["all"]').
387
+ const needsQuotes = /^[\[\]{]|[:,#]\s|\s#/.test(value)
388
+ return needsQuotes ? `${key}: '${value.replace(/'/g, "''")}'` : `${key}: ${value}`
389
+ }
375
390
  /** @param {string} root */
376
391
  function readPackageVersion(root) {
377
392
  try { return JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')).version ?? '0.0.0' } catch { return '0.0.0' }
@@ -3,7 +3,7 @@
3
3
  import { existsSync, readFileSync, readdirSync } from 'node:fs'
4
4
  import { join } from 'node:path'
5
5
 
6
- const ignored = new Set(['.git', '.code-foundry', '.venv', 'node_modules', 'target', 'vendor', 'dist', 'build'])
6
+ const ignored = new Set(['.git', '.code-foundry', '.venv', 'node_modules', 'target', 'vendor', 'dist', 'build', '.next', '.kilo', '.turbo', '.cache', '.vercel', '.output', '.nuxt', '.svelte-kit', '.parcel-cache', 'out', 'coverage'])
7
7
 
8
8
  /** @typedef {{ directory: string, manifest: string, releaseType: 'node'|'python'|'rust', packageName?: string, extraFiles: string[] }} ReleasePackage */
9
9