code-foundry 1.46.1 → 1.46.3

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.
@@ -227,17 +227,6 @@ jobs:
227
227
  HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
228
228
  BEFORE_SHA: ${{ github.event.before }}
229
229
  run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci should_run eval >> "$GITHUB_OUTPUT"
230
- # --- Lint lane (mirror of ci.yml lint) ---
231
- - name: Detect lint
232
- id: lint_applicability
233
- if: ${{ !cancelled() }}
234
- env:
235
- EVENT_NAME: ${{ github.event_name }}
236
- BASE_REF: ${{ github.event.pull_request.base.ref }}
237
- BASE_SHA: ${{ github.event.pull_request.base.sha }}
238
- HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
239
- BEFORE_SHA: ${{ github.event.before }}
240
- run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci should_run lint >> "$GITHUB_OUTPUT"
241
230
  # --- Integration lane (mirror of test.yml integration; audit tier only) ---
242
231
  - name: Detect integration
243
232
  id: integration_applicability
@@ -314,13 +303,6 @@ jobs:
314
303
  install: 'true'
315
304
  cache-build: 'true'
316
305
  task: eval
317
- - name: Setup lint
318
- if: ${{ !cancelled() && steps.lint_applicability.outputs.applicable == 'true' && steps.lint_applicability.outputs.affected != 'false' }}
319
- uses: ./.github/actions/setup
320
- with:
321
- install: 'true'
322
- cache-lint: 'true'
323
- task: lint
324
306
  - name: Setup integration
325
307
  if: ${{ !cancelled() && inputs.mode == 'audit' && steps.integration_applicability.outputs.applicable == 'true' && steps.integration_applicability.outputs.affected != 'false' }}
326
308
  uses: ./.github/actions/setup
@@ -365,119 +347,180 @@ jobs:
365
347
  id: eval_execute
366
348
  if: ${{ !cancelled() && inputs.mode == 'audit' && steps.eval_applicability.outputs.applicable == 'true' && steps.eval_applicability.outputs.affected != 'false' }}
367
349
  run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci eval
368
- # --- Lint execute ---
369
- - name: Lint
370
- id: lint_execute
371
- if: ${{ !cancelled() && steps.lint_applicability.outputs.applicable == 'true' && steps.lint_applicability.outputs.affected != 'false' }}
372
- run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci lint
373
350
  # --- Integration execute ---
374
351
  - name: Integration
375
352
  id: integration_execute
376
353
  if: ${{ !cancelled() && inputs.mode == 'audit' && steps.integration_applicability.outputs.applicable == 'true' && steps.integration_applicability.outputs.affected != 'false' }}
377
354
  run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci integration
378
- - name: Retain format task receipt
379
- if: >-
380
- always() &&
381
- (steps.format_execute.outcome == 'success' || steps.format_execute.outcome == 'failure' ||
382
- steps.format_applicability.outputs.applicable == 'false' || steps.format_applicability.outputs.affected == 'false') &&
383
- hashFiles('.code-foundry/results/format.json') != ''
384
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
385
- with:
386
- name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-format
387
- path: .code-foundry/results/format.json
388
- include-hidden-files: true
389
- if-no-files-found: error
390
- retention-days: 14
391
- - name: Retain build task receipt
392
- if: >-
393
- always() &&
394
- (steps.build_execute.outcome == 'success' || steps.build_execute.outcome == 'failure' ||
395
- steps.build_applicability.outputs.applicable == 'false' || steps.build_applicability.outputs.affected == 'false') &&
396
- hashFiles('.code-foundry/results/build.json') != ''
397
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
398
- with:
399
- name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-build
400
- path: .code-foundry/results/build.json
401
- include-hidden-files: true
402
- if-no-files-found: error
403
- retention-days: 14
404
- - name: Retain performance task receipt
405
- if: >-
406
- always() &&
407
- inputs.mode == 'audit' &&
408
- (steps.performance_execute.outcome == 'success' || steps.performance_execute.outcome == 'failure' ||
409
- steps.performance_applicability.outputs.applicable == 'false' || steps.performance_applicability.outputs.affected == 'false') &&
410
- hashFiles('.code-foundry/results/performance.json') != ''
411
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
412
- with:
413
- name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-performance
414
- path: .code-foundry/results/performance.json
415
- include-hidden-files: true
416
- if-no-files-found: error
417
- retention-days: 14
418
- - name: Upload performance results
419
- if: >-
420
- always() &&
421
- inputs.mode == 'audit' &&
422
- steps.performance_applicability.outputs.applicable == 'true' &&
423
- hashFiles('artifacts/performance/**', 'performance-results.json', 'performance-results/**') != ''
424
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
425
- with:
426
- name: performance-${{ github.run_id }}
427
- path: |
428
- artifacts/performance/**
429
- performance-results.json
430
- performance-results/**
431
- compression-level: 1
432
- if-no-files-found: ignore
433
- retention-days: 14
434
- - name: Retain smoke task receipt
435
- if: >-
436
- always() &&
437
- inputs.mode == 'audit' &&
438
- (steps.smoke_execute.outcome == 'success' || steps.smoke_execute.outcome == 'failure' ||
439
- steps.smoke_applicability.outputs.applicable == 'false' || steps.smoke_applicability.outputs.affected == 'false') &&
440
- hashFiles('.code-foundry/results/smoke.json') != ''
441
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
355
+ # Receipts are independent artifact uploads; a second parallel
356
+ # group joins them instead of serializing 8+ uploads after the
357
+ # executes.
358
+ - parallel:
359
+ - name: Retain format task receipt
360
+ if: >-
361
+ always() &&
362
+ (steps.format_execute.outcome == 'success' || steps.format_execute.outcome == 'failure' ||
363
+ steps.format_applicability.outputs.applicable == 'false' || steps.format_applicability.outputs.affected == 'false') &&
364
+ hashFiles('.code-foundry/results/format.json') != ''
365
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
366
+ with:
367
+ name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-format
368
+ path: .code-foundry/results/format.json
369
+ include-hidden-files: true
370
+ if-no-files-found: error
371
+ retention-days: 14
372
+ - name: Retain build task receipt
373
+ if: >-
374
+ always() &&
375
+ (steps.build_execute.outcome == 'success' || steps.build_execute.outcome == 'failure' ||
376
+ steps.build_applicability.outputs.applicable == 'false' || steps.build_applicability.outputs.affected == 'false') &&
377
+ hashFiles('.code-foundry/results/build.json') != ''
378
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
379
+ with:
380
+ name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-build
381
+ path: .code-foundry/results/build.json
382
+ include-hidden-files: true
383
+ if-no-files-found: error
384
+ retention-days: 14
385
+ - name: Retain performance task receipt
386
+ if: >-
387
+ always() &&
388
+ inputs.mode == 'audit' &&
389
+ (steps.performance_execute.outcome == 'success' || steps.performance_execute.outcome == 'failure' ||
390
+ steps.performance_applicability.outputs.applicable == 'false' || steps.performance_applicability.outputs.affected == 'false') &&
391
+ hashFiles('.code-foundry/results/performance.json') != ''
392
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
393
+ with:
394
+ name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-performance
395
+ path: .code-foundry/results/performance.json
396
+ include-hidden-files: true
397
+ if-no-files-found: error
398
+ retention-days: 14
399
+ - name: Upload performance results
400
+ if: >-
401
+ always() &&
402
+ inputs.mode == 'audit' &&
403
+ steps.performance_applicability.outputs.applicable == 'true' &&
404
+ hashFiles('artifacts/performance/**', 'performance-results.json', 'performance-results/**') != ''
405
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
406
+ with:
407
+ name: performance-${{ github.run_id }}
408
+ path: |
409
+ artifacts/performance/**
410
+ performance-results.json
411
+ performance-results/**
412
+ compression-level: 1
413
+ if-no-files-found: ignore
414
+ retention-days: 14
415
+ - name: Retain smoke task receipt
416
+ if: >-
417
+ always() &&
418
+ inputs.mode == 'audit' &&
419
+ (steps.smoke_execute.outcome == 'success' || steps.smoke_execute.outcome == 'failure' ||
420
+ steps.smoke_applicability.outputs.applicable == 'false' || steps.smoke_applicability.outputs.affected == 'false') &&
421
+ hashFiles('.code-foundry/results/smoke.json') != ''
422
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
423
+ with:
424
+ name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-smoke
425
+ path: .code-foundry/results/smoke.json
426
+ include-hidden-files: true
427
+ if-no-files-found: error
428
+ retention-days: 14
429
+ - name: Retain eval task receipt
430
+ if: >-
431
+ always() &&
432
+ inputs.mode == 'audit' &&
433
+ (steps.eval_execute.outcome == 'success' || steps.eval_execute.outcome == 'failure' ||
434
+ steps.eval_applicability.outputs.applicable == 'false' || steps.eval_applicability.outputs.affected == 'false') &&
435
+ hashFiles('.code-foundry/results/eval.json') != ''
436
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
437
+ with:
438
+ name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-eval
439
+ path: .code-foundry/results/eval.json
440
+ include-hidden-files: true
441
+ if-no-files-found: error
442
+ retention-days: 14
443
+ - name: Retain eval report
444
+ if: >-
445
+ always() &&
446
+ inputs.mode == 'audit' &&
447
+ steps.eval_execute.outcome == 'failure' &&
448
+ hashFiles('eval-results/result.json') != ''
449
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
450
+ with:
451
+ name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-eval-report
452
+ path: |
453
+ eval-results/result.json
454
+ eval-results/summary.json
455
+ if-no-files-found: error
456
+ retention-days: 14
457
+ - name: Retain integration task receipt
458
+ if: >-
459
+ always() &&
460
+ inputs.mode == 'audit' &&
461
+ (steps.integration_execute.outcome == 'success' || steps.integration_execute.outcome == 'failure' ||
462
+ steps.integration_applicability.outputs.applicable == 'false' || steps.integration_applicability.outputs.affected == 'false') &&
463
+ hashFiles('.code-foundry/results/integration.json') != ''
464
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
465
+ with:
466
+ name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-integration
467
+ path: .code-foundry/results/integration.json
468
+ include-hidden-files: true
469
+ if-no-files-found: error
470
+ retention-days: 14
471
+
472
+ lint:
473
+ name: Lint
474
+ if: vars.CI_BILLING_PAUSED != 'true'
475
+ runs-on: ${{ inputs.ci-runner }}
476
+ timeout-minutes: 30
477
+ steps:
478
+ - name: Checkout
479
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
442
480
  with:
443
- name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-smoke
444
- path: .code-foundry/results/smoke.json
445
- include-hidden-files: true
446
- if-no-files-found: error
447
- retention-days: 14
448
- - name: Retain eval task receipt
449
- if: >-
450
- always() &&
451
- inputs.mode == 'audit' &&
452
- (steps.eval_execute.outcome == 'success' || steps.eval_execute.outcome == 'failure' ||
453
- steps.eval_applicability.outputs.applicable == 'false' || steps.eval_applicability.outputs.affected == 'false') &&
454
- hashFiles('.code-foundry/results/eval.json') != ''
455
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
481
+ persist-credentials: false
482
+ - name: Runtime
483
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
456
484
  with:
457
- name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-eval
458
- path: .code-foundry/results/eval.json
459
- include-hidden-files: true
460
- if-no-files-found: error
461
- retention-days: 14
462
- - name: Retain eval report
463
- if: >-
464
- always() &&
465
- inputs.mode == 'audit' &&
466
- steps.eval_execute.outcome == 'failure' &&
467
- hashFiles('eval-results/result.json') != ''
468
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
485
+ persist-credentials: false
486
+ repository: ${{ inputs.runtime-repository }}
487
+ ref: ${{ inputs.runtime-ref }}
488
+ path: .github/.code-foundry
489
+ sparse-checkout: |
490
+ .github/actions
491
+ src/lib
492
+ src/runtime-core.mjs
493
+ src/runtime.mjs
494
+ - name: Install runtime
495
+ run: |
496
+ mkdir -p .github/actions
497
+ mv .github/.code-foundry "$RUNNER_TEMP/code-foundry"
498
+ cp -R "$RUNNER_TEMP/code-foundry/.github/actions/." .github/actions/
499
+ - name: Detect
500
+ id: applicability
501
+ env:
502
+ EVENT_NAME: ${{ github.event_name }}
503
+ BASE_REF: ${{ github.event.pull_request.base.ref }}
504
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
505
+ HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
506
+ BEFORE_SHA: ${{ github.event.before }}
507
+ run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci should_run lint >> "$GITHUB_OUTPUT"
508
+ - name: Setup
509
+ if: steps.applicability.outputs.applicable == 'true' && steps.applicability.outputs.affected != 'false'
510
+ uses: ./.github/actions/setup
469
511
  with:
470
- name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-eval-report
471
- path: |
472
- eval-results/result.json
473
- eval-results/summary.json
474
- if-no-files-found: error
475
- retention-days: 14
476
- - name: Retain lint task receipt
512
+ install: 'true'
513
+ cache-lint: 'true'
514
+ task: lint
515
+ - name: Lint
516
+ id: execute
517
+ if: steps.applicability.outputs.applicable == 'true' && steps.applicability.outputs.affected != 'false'
518
+ run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci lint
519
+ - name: Retain task receipt
477
520
  if: >-
478
521
  always() &&
479
- (steps.lint_execute.outcome == 'success' || steps.lint_execute.outcome == 'failure' ||
480
- steps.lint_applicability.outputs.applicable == 'false' || steps.lint_applicability.outputs.affected == 'false') &&
522
+ (steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
523
+ steps.applicability.outputs.applicable == 'false' || steps.applicability.outputs.affected == 'false') &&
481
524
  hashFiles('.code-foundry/results/lint.json') != ''
482
525
  uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
483
526
  with:
@@ -486,20 +529,7 @@ jobs:
486
529
  include-hidden-files: true
487
530
  if-no-files-found: error
488
531
  retention-days: 14
489
- - name: Retain integration task receipt
490
- if: >-
491
- always() &&
492
- inputs.mode == 'audit' &&
493
- (steps.integration_execute.outcome == 'success' || steps.integration_execute.outcome == 'failure' ||
494
- steps.integration_applicability.outputs.applicable == 'false' || steps.integration_applicability.outputs.affected == 'false') &&
495
- hashFiles('.code-foundry/results/integration.json') != ''
496
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
497
- with:
498
- name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-integration
499
- path: .code-foundry/results/integration.json
500
- include-hidden-files: true
501
- if-no-files-found: error
502
- retention-days: 14
532
+
503
533
  type-check:
504
534
  name: Type-Check
505
535
  if: vars.CI_BILLING_PAUSED != 'true'
@@ -1069,7 +1099,7 @@ jobs:
1069
1099
  # evaluateValidationGate's mode truth table is reused unchanged.
1070
1100
  gate:
1071
1101
  name: Gate
1072
- needs: [fast-lanes, type-check, unit, e2e, audit, codeql]
1102
+ needs: [fast-lanes, lint, type-check, unit, e2e, audit, codeql]
1073
1103
  if: vars.CI_BILLING_PAUSED != 'true' && always()
1074
1104
  runs-on: ubuntu-slim
1075
1105
  timeout-minutes: 10
@@ -1077,7 +1107,7 @@ jobs:
1077
1107
  FOUNDRY_MODE: ${{ inputs.mode }}
1078
1108
  # CI category: lint and type-check always run; the merged fast-lanes job
1079
1109
  # carries the format and build lanes.
1080
- FOUNDRY_CI: ${{ (needs.type-check.result != 'success' && needs.type-check.result) || (needs.fast-lanes.result != 'success' && needs.fast-lanes.result) || 'success' }}
1110
+ FOUNDRY_CI: ${{ (needs.lint.result != 'success' && needs.lint.result) || (needs.type-check.result != 'success' && needs.type-check.result) || (needs.fast-lanes.result != 'success' && needs.fast-lanes.result) || 'success' }}
1081
1111
  # Test category: unit always runs and must succeed; integration and e2e
1082
1112
  # are audit-tier jobs whose expected skip on fast/release is not a
1083
1113
  # failure; the merged fast-lanes job carries performance, smoke, and
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.46.3](https://github.com/0xPlayerOne/code-foundry/compare/v1.46.2...v1.46.3) (2026-10-07)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **billing:** keep lint standalone; join fast-lane receipts in parallel ([#744](https://github.com/0xPlayerOne/code-foundry/issues/744)) ([574690b](https://github.com/0xPlayerOne/code-foundry/commit/574690b707abffe9350ccc67589540afb82323ee))
9
+
10
+ ## [1.46.2](https://github.com/0xPlayerOne/code-foundry/compare/v1.46.1...v1.46.2) (2026-10-07)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **billing:** join fast-lane receipts in a second parallel group ([#742](https://github.com/0xPlayerOne/code-foundry/issues/742)) ([c63a39c](https://github.com/0xPlayerOne/code-foundry/commit/c63a39cf5e236d6747bd85cf10b04bd10f690b11))
16
+
3
17
  ## [1.46.1](https://github.com/0xPlayerOne/code-foundry/compare/v1.46.0...v1.46.1) (2026-10-07)
4
18
 
5
19
 
@@ -126,23 +140,9 @@
126
140
 
127
141
  * require candidate asset qualification before stable promotion ([#705](https://github.com/0xPlayerOne/code-foundry/issues/705)) ([f42e4f5](https://github.com/0xPlayerOne/code-foundry/commit/f42e4f5fb063ea22fa25791a13c75c90d41bf17a))
128
142
 
129
- ## [1.43.1](https://github.com/0xPlayerOne/code-foundry/compare/v1.43.0...v1.43.1) (2026-10-03)
130
-
131
-
132
- ### Bug Fixes
133
-
134
- * **release:** make batched publication and stable promotion reliable ([#703](https://github.com/0xPlayerOne/code-foundry/issues/703)) ([271731d](https://github.com/0xPlayerOne/code-foundry/commit/271731d8fac3bff42a99b3d5f4a774eccc0a7788))
135
-
136
- ## [1.43.0](https://github.com/0xPlayerOne/code-foundry/compare/v1.42.0...v1.43.0) (2026-10-03)
137
-
138
-
139
- ### Features
140
-
141
- * release-batching ([#700](https://github.com/0xPlayerOne/code-foundry/issues/700)) ([3dd5c5f](https://github.com/0xPlayerOne/code-foundry/commit/3dd5c5fd50883608baa3e2f9daef6b8aa83f269f))
142
-
143
143
  <!-- code-foundry: packaged changelog -->
144
144
 
145
145
  ---
146
146
 
147
- This packaged changelog lists the 20 most recent releases; 236 older releases are omitted to keep the package small.
147
+ This packaged changelog lists the 20 most recent releases; 238 older releases are omitted to keep the package small.
148
148
  See the [full changelog](https://github.com/0xPlayerOne/code-foundry/blob/main/CHANGELOG.md) for the complete history.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-foundry",
3
- "version": "1.46.1",
3
+ "version": "1.46.3",
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": {