code-foundry 1.28.12 → 1.28.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.28.13](https://github.com/0xPlayerOne/code-foundry/compare/v1.28.12...v1.28.13) (2026-09-11)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **fleet:** accept base-config evidence for merged rollouts ([#620](https://github.com/0xPlayerOne/code-foundry/issues/620)) ([394c528](https://github.com/0xPlayerOne/code-foundry/commit/394c528a137617ce2c4464436dbc6068349a0c54))
9
+
3
10
  ## [1.28.12](https://github.com/0xPlayerOne/code-foundry/compare/v1.28.11...v1.28.12) (2026-09-11)
4
11
 
5
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-foundry",
3
- "version": "1.28.12",
3
+ "version": "1.28.13",
4
4
  "description": "A fast, language-aware repository factory for agent-ready workflows, testing, security, and release automation.",
5
5
  "homepage": "https://github.com/0xPlayerOne/code-foundry#readme",
6
6
  "bugs": {
@@ -286,6 +286,21 @@ export function verifiedPullRequest(pr, required) {
286
286
  )
287
287
  }
288
288
 
289
+ /**
290
+ * Evidence that a merged rollout actually landed. Gate rollup evidence is the
291
+ * normal path, but repositories without a required-check policy can merge
292
+ * through auto-merge before their checks complete, so a merged PR whose base
293
+ * configuration already matches the declared rollout is accepted with weaker
294
+ * `base-config` evidence instead of deadlocking the cohort forever.
295
+ * @param {any} pr @param {string[]} required @param {boolean} baseConfigMatches
296
+ * @returns {'gates'|'base-config'|null}
297
+ */
298
+ export function rolloutEvidence(pr, required, baseConfigMatches) {
299
+ if (!pr || pr.state !== 'MERGED') return null
300
+ if (verifiedPullRequest(pr, required)) return 'gates'
301
+ return baseConfigMatches ? 'base-config' : null
302
+ }
303
+
289
304
  /** @param {any} check */
290
305
  function checkState(check) {
291
306
  return check.status === 'COMPLETED' ? check.conclusion : (check.state ?? check.status)
@@ -339,8 +354,9 @@ function inspectRollout(run, path, entry, version, base) {
339
354
  if (!remoteHead || pr.headRefOid !== remoteHead)
340
355
  throw new Error('Existing pull request head no longer matches its remote branch')
341
356
  }
342
- let complete = verifiedPullRequest(pr, entry.requiredChecks)
343
- if (complete) {
357
+ let complete = false
358
+ let evidence = null
359
+ if (pr?.state === 'MERGED') {
344
360
  const response = JSON.parse(
345
361
  checked(run, path, [
346
362
  'gh',
@@ -351,9 +367,11 @@ function inspectRollout(run, path, entry, version, base) {
351
367
  if (response.encoding !== 'base64' || typeof response.content !== 'string')
352
368
  throw new Error('Unable to verify merged runtime configuration')
353
369
  const config = scalarConfig(Buffer.from(response.content, 'base64').toString('utf8'))
354
- complete = config.runtime_ref === version && configDrift(config, entry).length === 0
370
+ const configMatches = config.runtime_ref === version && configDrift(config, entry).length === 0
371
+ evidence = rolloutEvidence(pr, entry.requiredChecks, configMatches)
372
+ complete = evidence !== null
355
373
  }
356
- return { ...identity, pr, complete }
374
+ return { ...identity, pr, complete, evidence }
357
375
  }
358
376
 
359
377
  /** @param {Runner} run @param {string} path @param {string[]} files */
@@ -606,7 +624,12 @@ export function upgradeManifestFleet(root, source, options, sync, run = executeF
606
624
  const rollout = inspectRollout(run, item.path, entry, options.version, base)
607
625
  if (rollout.complete) {
608
626
  completed += 1
609
- report.push({ ...record, status: 'verified-merged', pullRequest: rollout.pr.url })
627
+ report.push({
628
+ ...record,
629
+ status: 'verified-merged',
630
+ evidence: rollout.evidence,
631
+ pullRequest: rollout.pr.url,
632
+ })
610
633
  continue
611
634
  }
612
635
  if (rollout.pr) {