code-foundry 1.28.12 → 1.28.14
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 +14 -0
- package/package.json +1 -1
- package/src/commands/sync.mjs +4 -3
- package/src/lib/fleet-manifest.mjs +28 -5
- package/src/lib/merge-queue.mjs +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.28.14](https://github.com/0xPlayerOne/code-foundry/compare/v1.28.13...v1.28.14) (2026-09-11)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **sync:** accept mixed broad and scoped CodeQL Rust shards ([#621](https://github.com/0xPlayerOne/code-foundry/issues/621)) ([f13c5a7](https://github.com/0xPlayerOne/code-foundry/commit/f13c5a734a1b24ee75566bab3b778052a28ada99))
|
|
9
|
+
|
|
10
|
+
## [1.28.13](https://github.com/0xPlayerOne/code-foundry/compare/v1.28.12...v1.28.13) (2026-09-11)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **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))
|
|
16
|
+
|
|
3
17
|
## [1.28.12](https://github.com/0xPlayerOne/code-foundry/compare/v1.28.11...v1.28.12) (2026-09-11)
|
|
4
18
|
|
|
5
19
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "code-foundry",
|
|
3
|
-
"version": "1.28.
|
|
3
|
+
"version": "1.28.14",
|
|
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": {
|
package/src/commands/sync.mjs
CHANGED
|
@@ -1017,9 +1017,10 @@ function validateRustCodeqlConfig(config) {
|
|
|
1017
1017
|
}
|
|
1018
1018
|
}
|
|
1019
1019
|
}
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1020
|
+
// "all" combined with scoped shards is a deliberate consumer strategy: the
|
|
1021
|
+
// broad pass keeps the workspace-level SARIF category reporting while the
|
|
1022
|
+
// scoped shards add per-manifest detail. The renderer forwards the same
|
|
1023
|
+
// list to every lane, so lane parity holds regardless of the combination.
|
|
1023
1024
|
return { shards: JSON.stringify(shards), threads, maxParallel }
|
|
1024
1025
|
}
|
|
1025
1026
|
|
|
@@ -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 =
|
|
343
|
-
|
|
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
|
-
|
|
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({
|
|
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) {
|
package/src/lib/merge-queue.mjs
CHANGED
|
@@ -96,10 +96,10 @@ export function renderMergeQueueCaller(config, ref) {
|
|
|
96
96
|
)
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
// "all" combined with scoped shards is a deliberate consumer strategy: the
|
|
100
|
+
// broad pass keeps the workspace-level SARIF category reporting while the
|
|
101
|
+
// scoped shards add per-manifest detail. The renderer forwards the same
|
|
102
|
+
// list to every lane, so lane parity holds regardless of the combination.
|
|
103
103
|
return `${QUEUE_MARKER}name: Merge Queue
|
|
104
104
|
|
|
105
105
|
on:
|