code-foundry 1.44.10 → 1.45.0
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/.github/workflows/release.yml +31 -7
- package/.github/workflows/validation-billing.yml +1159 -0
- package/CHANGELOG.md +15 -15
- package/docs/CONFIGURATION.md +26 -25
- package/package.json +1 -1
- package/src/commands/sync.mjs +20 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.45.0](https://github.com/0xPlayerOne/code-foundry/compare/v1.44.11...v1.45.0) (2026-10-06)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add a merged-lane billing orchestrator for minute-billed consumers ([#731](https://github.com/0xPlayerOne/code-foundry/issues/731)) ([a91402e](https://github.com/0xPlayerOne/code-foundry/commit/a91402e701f458ece0d2ea4715f9586a06b15108))
|
|
9
|
+
|
|
10
|
+
## [1.44.11](https://github.com/0xPlayerOne/code-foundry/compare/v1.44.10...v1.44.11) (2026-10-06)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **release:** retry the token probe and REST fallback writes with backoff ([#729](https://github.com/0xPlayerOne/code-foundry/issues/729)) ([ad28e18](https://github.com/0xPlayerOne/code-foundry/commit/ad28e18326f0ee8c25950fb649eb81cdb3dc0a1a))
|
|
16
|
+
|
|
3
17
|
## [1.44.10](https://github.com/0xPlayerOne/code-foundry/compare/v1.44.9...v1.44.10) (2026-10-06)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -131,23 +145,9 @@
|
|
|
131
145
|
|
|
132
146
|
* **hooks:** run the gate from a local dependency, not npx ([#688](https://github.com/0xPlayerOne/code-foundry/issues/688)) ([d256b69](https://github.com/0xPlayerOne/code-foundry/commit/d256b69b8f89f0041a01c53cc51af32fe582b5dc))
|
|
133
147
|
|
|
134
|
-
## [1.39.2](https://github.com/0xPlayerOne/code-foundry/compare/v1.39.1...v1.39.2) (2026-10-01)
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
### Bug Fixes
|
|
138
|
-
|
|
139
|
-
* **hooks:** delegate the generated pre-commit hook to the runtime ([#684](https://github.com/0xPlayerOne/code-foundry/issues/684)) ([5d9a571](https://github.com/0xPlayerOne/code-foundry/commit/5d9a5714aeff0d48397e3be51b22e08395bfb5ce))
|
|
140
|
-
|
|
141
|
-
## [1.39.1](https://github.com/0xPlayerOne/code-foundry/compare/v1.39.0...v1.39.1) (2026-10-01)
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
### Bug Fixes
|
|
145
|
-
|
|
146
|
-
* report inactive main rulesets in github doctor ([#682](https://github.com/0xPlayerOne/code-foundry/issues/682)) ([695a0b4](https://github.com/0xPlayerOne/code-foundry/commit/695a0b437910aa8e664a481c1648dbadcc1a2de8))
|
|
147
|
-
|
|
148
148
|
<!-- code-foundry: packaged changelog -->
|
|
149
149
|
|
|
150
150
|
---
|
|
151
151
|
|
|
152
|
-
This packaged changelog lists the 20 most recent releases;
|
|
152
|
+
This packaged changelog lists the 20 most recent releases; 232 older releases are omitted to keep the package small.
|
|
153
153
|
See the [full changelog](https://github.com/0xPlayerOne/code-foundry/blob/main/CHANGELOG.md) for the complete history.
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -115,31 +115,32 @@ See [Merge queue validation](merge-queues.md) before enabling it.
|
|
|
115
115
|
|
|
116
116
|
## Validation and quality
|
|
117
117
|
|
|
118
|
-
| Key | Values | Purpose
|
|
119
|
-
| ----------------------------------------- | ---------------------------------------------------- |
|
|
120
|
-
| `performance` | `auto`, `true`, `false` | Discover, require, or disable performance checks.
|
|
121
|
-
| `performance_command` | JSON argv array or array of argv arrays | Ordered commands for a non-package performance harness.
|
|
122
|
-
| `performance_profile` | empty or `node-package` | Shared package import, memory, archive, and dependency audit.
|
|
123
|
-
| `performance_budget_file` | repository-relative path | Budget file for `node-package`; defaults to `performance-package-budgets.json`.
|
|
124
|
-
| `eval` | `auto`, `true`, `false` | Discover, require, or disable the deterministic eval tier.
|
|
125
|
-
| `eval_command` | JSON argv array | Explicit harness command when there is no `eval` package script.
|
|
126
|
-
| `eval_report_file` | repository-relative path | Report validated against the eval contract; defaults to `eval-results/result.json`.
|
|
127
|
-
| `eval_budget_file` | repository-relative path | Optional budget file; defaults to `eval-budgets.json`.
|
|
128
|
-
| `eval_runner` | runner label | Runner for the `Validation / Eval` lane; defaults to the repository runner. Browser evals need a Chrome-capable runner such as `ubuntu-latest`.
|
|
129
|
-
| `required_capabilities` | comma-separated task names | Fail closed when a required task or coverage evidence is unavailable.
|
|
130
|
-
| `coverage_enforcement` | `auto`, `required`, `off` | Shared coverage-report policy.
|
|
131
|
-
| `coverage_minimum` | `0`–`100` | Minimum percentage; defaults to `80`.
|
|
132
|
-
| `coverage_metrics` | `lines`, `functions`, `branches`, `statements` | Metrics checked by the coverage gate.
|
|
133
|
-
| `coverage_report` | comma-separated repository paths | Istanbul JSON summary or LCOV evidence files.
|
|
134
|
-
| `pre_commit_build` | `true`, `false` | Run the project's build in the local pre-commit gate. Defaults to `false`; see [Pre-commit gate](#pre-commit-gate).
|
|
135
|
-
| `filter_<task>` | comma-separated repository path globs | Skip a lane when no changed path matches; see [Lane path filters](#lane-path-filters).
|
|
136
|
-
| `rust_sccache` | `true`, `false` | Install sccache and wrap rustc so compile artifacts survive manifest/lockfile churn.
|
|
137
|
-
| `rust_nextest` | `true`, `false` | Install cargo-nextest and prefer `cargo nextest run` over `cargo test` in Rust test lanes.
|
|
138
|
-
| `e2e_shards` | `1`–`8` | Fan the `Validation / Test / E2E` job into one runner per shard. The repository's `test:e2e`/`e2e` script receives `E2E_SHARD_INDEX` and `E2E_TOTAL_SHARDS` and partitions itself (Playwright takes `--shard=$E2E_SHARD_INDEX/$E2E_TOTAL_SHARDS`); each shard owns a runner-local test database, so shards stay isolated.
|
|
139
|
-
| `
|
|
140
|
-
| `
|
|
141
|
-
| `
|
|
142
|
-
| `
|
|
118
|
+
| Key | Values | Purpose |
|
|
119
|
+
| ----------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
120
|
+
| `performance` | `auto`, `true`, `false` | Discover, require, or disable performance checks. |
|
|
121
|
+
| `performance_command` | JSON argv array or array of argv arrays | Ordered commands for a non-package performance harness. |
|
|
122
|
+
| `performance_profile` | empty or `node-package` | Shared package import, memory, archive, and dependency audit. |
|
|
123
|
+
| `performance_budget_file` | repository-relative path | Budget file for `node-package`; defaults to `performance-package-budgets.json`. |
|
|
124
|
+
| `eval` | `auto`, `true`, `false` | Discover, require, or disable the deterministic eval tier. |
|
|
125
|
+
| `eval_command` | JSON argv array | Explicit harness command when there is no `eval` package script. |
|
|
126
|
+
| `eval_report_file` | repository-relative path | Report validated against the eval contract; defaults to `eval-results/result.json`. |
|
|
127
|
+
| `eval_budget_file` | repository-relative path | Optional budget file; defaults to `eval-budgets.json`. |
|
|
128
|
+
| `eval_runner` | runner label | Runner for the `Validation / Eval` lane; defaults to the repository runner. Browser evals need a Chrome-capable runner such as `ubuntu-latest`. |
|
|
129
|
+
| `required_capabilities` | comma-separated task names | Fail closed when a required task or coverage evidence is unavailable. |
|
|
130
|
+
| `coverage_enforcement` | `auto`, `required`, `off` | Shared coverage-report policy. |
|
|
131
|
+
| `coverage_minimum` | `0`–`100` | Minimum percentage; defaults to `80`. |
|
|
132
|
+
| `coverage_metrics` | `lines`, `functions`, `branches`, `statements` | Metrics checked by the coverage gate. |
|
|
133
|
+
| `coverage_report` | comma-separated repository paths | Istanbul JSON summary or LCOV evidence files. |
|
|
134
|
+
| `pre_commit_build` | `true`, `false` | Run the project's build in the local pre-commit gate. Defaults to `false`; see [Pre-commit gate](#pre-commit-gate). |
|
|
135
|
+
| `filter_<task>` | comma-separated repository path globs | Skip a lane when no changed path matches; see [Lane path filters](#lane-path-filters). |
|
|
136
|
+
| `rust_sccache` | `true`, `false` | Install sccache and wrap rustc so compile artifacts survive manifest/lockfile churn. |
|
|
137
|
+
| `rust_nextest` | `true`, `false` | Install cargo-nextest and prefer `cargo nextest run` over `cargo test` in Rust test lanes. |
|
|
138
|
+
| `e2e_shards` | `1`–`8` | Fan the `Validation / Test / E2E` job into one runner per shard. The repository's `test:e2e`/`e2e` script receives `E2E_SHARD_INDEX` and `E2E_TOTAL_SHARDS` and partitions itself (Playwright takes `--shard=$E2E_SHARD_INDEX/$E2E_TOTAL_SHARDS`); each shard owns a runner-local test database, so shards stay isolated. |
|
|
139
|
+
| `billing_lanes` | `true`, `false` | Route validation through the merged-lane billing orchestrator: format, build, performance, smoke, and eval run as sequential steps of one shared runner, and profile plus dependency audit share one job, so GitHub's whole-minute rounding stops dominating billed minutes on private repositories. Coverage and the `Validation / Gate` check are unchanged; only merge a lane into the shared job when its work stays under the longest separate lane, so CI completion time does not grow. Requires all runner inputs on standard hosted runners. |
|
|
140
|
+
| `release_batching_schedule` | five-field numeric cron | Batch Release Please into scheduled windows. Ordinary pushes skip the producer; release-PR squashes and manual dispatches still run. Batched releases are created privately as drafts and published with prerelease visibility atomically. Manual dispatches publish stable hotfixes. Absent, releases publish per merge. Requires a single root Release Please package. |
|
|
141
|
+
| `release_batching_prerelease` | `true`, `false` | Defaults to `true` with a schedule. Sync enables `draft` and `force-tag-creation` in Release Please; the producer publishes the draft with the selected visibility. `false` keeps scheduled releases stable-visible. |
|
|
142
|
+
| `release_batching_soak_hours` | `1`–`336` | Generate a daily promoter that promotes the newest prerelease when the oldest candidate since the last stable has soaked this many hours, stitching batch notes. Requires a batching schedule and prerelease publication. Set `STABLE_PROMOTION_HELD=true` in repository Actions variables to hold scheduled and manual promotion; `force` overrides the hold or soak, and `version` selects a plain semantic version. |
|
|
143
|
+
| `release_batching_qualification_workflow` | workflow filename (for example `release-assets.yml`) | Require the latest release-event run of this workflow for the candidate tag’s exact source commit to succeed before stable promotion. Requires a batching soak. Running, missing, failed, or cancelled runs hold promotion, including named and forced promotions; `force` only bypasses hold and soak. The promoter receives read-only Actions access. |
|
|
143
144
|
|
|
144
145
|
Supported task capabilities are `format`, `lint`, `type_check`, `build`, `unit`,
|
|
145
146
|
`integration`, `e2e`, `smoke`, `eval`, and `performance`. `coverage` is a policy
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "code-foundry",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.45.0",
|
|
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
|
@@ -970,6 +970,26 @@ function renderWorkflow(content, config, repository, ref, rustCodeql, file, self
|
|
|
970
970
|
if (file === '.github/workflows/validation.yml')
|
|
971
971
|
rendered = removeWorkflowBlock(rendered, 'push')
|
|
972
972
|
}
|
|
973
|
+
// Billing-lane orchestrator: repositories whose Actions minutes are billed
|
|
974
|
+
// can opt into the merged-lane variant, which keeps the same coverage and
|
|
975
|
+
// gate vocabulary but shares one runner across the sub-minute lanes so
|
|
976
|
+
// whole-minute rounding stops dominating the invoice. The `codeql` input
|
|
977
|
+
// replaces the two-orchestrator split, so this mapping runs after the
|
|
978
|
+
// CodeQL selection above and preserves its push-trigger pruning.
|
|
979
|
+
if (configured(config.billing_lanes, 'false') === 'true') {
|
|
980
|
+
rendered = rendered.replaceAll(
|
|
981
|
+
`${remotePrefix}validation-no-codeql.yml`,
|
|
982
|
+
`${remotePrefix}validation-billing.yml`
|
|
983
|
+
)
|
|
984
|
+
rendered = rendered.replaceAll(
|
|
985
|
+
`${remotePrefix}validation.yml`,
|
|
986
|
+
`${remotePrefix}validation-billing.yml`
|
|
987
|
+
)
|
|
988
|
+
rendered = rendered.replace(
|
|
989
|
+
new RegExp(`(${escapeRegExp(remotePrefix)}validation-billing\\.yml\\n with:\\n)`),
|
|
990
|
+
`$1 codeql: ${configured(config.codeql, 'auto') === 'false' ? "'false'" : "'true'"}\n`
|
|
991
|
+
)
|
|
992
|
+
}
|
|
973
993
|
rendered = rendered.replace(
|
|
974
994
|
new RegExp(`${escapeRegExp(remotePrefix)}([^\\s@]+)`, 'g'),
|
|
975
995
|
`$&@${ref}`
|