Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
31555d7
ci: add trusted PyPI publishing
JoshuaPurtell Aug 14, 2026
3fd3477
ci: use dedicated PyPI release environment
JoshuaPurtell Aug 14, 2026
c257960
Merge pull request #20 from synth-laboratories/agent/optimizers-relea…
JoshuaPurtell Aug 14, 2026
a3ca2c7
Merge pull request #30 from synth-laboratories/dev
JoshuaPurtell Aug 16, 2026
4746e08
Merge pull request #32 from synth-laboratories/dev
JoshuaPurtell Aug 16, 2026
e887546
ci(eval): publish pinned Craftax target image (#33)
JoshuaPurtell Aug 18, 2026
5ae2323
ci(eval): make Craftax target anonymously pullable (#34)
JoshuaPurtell Aug 18, 2026
efd8965
ci(eval): link Craftax image to public producer (#35)
JoshuaPurtell Aug 18, 2026
47ae255
ci(eval): publish Craftax target for anonymous admission (#36)
JoshuaPurtell Aug 18, 2026
2b3bbe5
Merge remote-tracking branch 'origin/dev' into release/v0.5-main-reco…
JoshuaPurtell Aug 18, 2026
1c89092
Merge pull request #38 from synth-laboratories/release/v0.5-main-reco…
JoshuaPurtell Aug 18, 2026
255ee87
docs: execution plan for the local MLX RL optimizers lane
jp-synth Aug 18, 2026
5236d8c
eval: score a policy served by a local MLX process
JoshuaPurtell Aug 18, 2026
5fd25c9
docs: record that the synth-containers pin predates the responses lane
jp-synth Aug 18, 2026
3f3a1ce
build: bump synth-containers pin to main (a2a316b, 0.4.1.dev20260817)
jp-synth Aug 18, 2026
fdb39dd
feat(training): expose hosted run outputs and checkpoint lineage (#39)
JoshuaPurtell Aug 19, 2026
ad3b66a
Merge branch 'agent/mlx-local-rl-20260818' into v0.6/implementation
JoshuaPurtell Aug 19, 2026
a370c0f
fix(training): forward SynthTunnel readiness mode (#40)
JoshuaPurtell Aug 19, 2026
3f3a651
Merge remote-tracking branch 'origin/main' into v0.6/implementation
JoshuaPurtell Aug 19, 2026
da1b11a
build: pin synth-containers to the pushed v0.6 containers head
JoshuaPurtell Aug 19, 2026
c4e53ff
Merge pull request #41 from synth-laboratories/v0.6/implementation
JoshuaPurtell Aug 19, 2026
1f7948c
release: prepare synth-optimizers 0.2.15
JoshuaPurtell Aug 20, 2026
d3c9edd
Merge pull request #42 from synth-laboratories/codex/v0.2.15-release
JoshuaPurtell Aug 20, 2026
5665cc9
feat(correlation): carry synth.correlation.v1 through GEPA
JoshuaPurtell Aug 20, 2026
ad447e7
feat(experiment): declarative ablations over the executors that alrea…
JoshuaPurtell Aug 20, 2026
b03e34b
fix(experiment): report each executor's own provenance in the plan re…
JoshuaPurtell Aug 20, 2026
173a848
fix(gepa.cli): lift the metrics the manifest carries, not guessed key…
JoshuaPurtell Aug 20, 2026
ca747e7
feat(experiment): allow a rig failure to be retried, never silently
JoshuaPurtell Aug 20, 2026
13dd24b
docs(changelog): record the rig-only retry in the 0.2.15 entry
JoshuaPurtell Aug 20, 2026
7071088
feat(experiment): bounded parallel dispatch, with a port per trial
JoshuaPurtell Aug 20, 2026
279eaf5
Merge pull request #44 from synth-laboratories/v07/experiment-layer-pr
JoshuaPurtell Aug 20, 2026
c671518
test(gepa): stop the heartbeat writer before the foreign-pid drop check
JoshuaPurtell Aug 20, 2026
3b9dc25
ci(craftax-target): verify anonymous pullability instead of PATCHing …
JoshuaPurtell Aug 20, 2026
8642810
Merge pull request #45 from synth-laboratories/v07/fix-craftax-target…
JoshuaPurtell Aug 20, 2026
23b20d0
Merge pull request #46 from synth-laboratories/v07/fix-service-owners…
JoshuaPurtell Aug 20, 2026
a98c701
eval: GSM8K eval target (mlx-lora.v1) + GHCR publish workflow
JoshuaPurtell Aug 20, 2026
21fe277
ci: add the GSM8K eval-target publish workflow to the default branch
JoshuaPurtell Aug 20, 2026
771f515
Merge pull request #47 from synth-laboratories/v07/l2-gsm8k-publish-w…
JoshuaPurtell Aug 20, 2026
cd3175c
eval: pin eval.mlx.local-policy.smoke.v1 to the published GSM8K targe…
JoshuaPurtell Aug 20, 2026
46a9618
Merge pull request #48 from synth-laboratories/v07/l2-gsm8k-catalog
JoshuaPurtell Aug 20, 2026
3e19fbd
feat(eval): build Craftax Rust target locally (#49)
JoshuaPurtell Aug 21, 2026
abf017b
Merge remote-tracking branch 'origin/main' into release/v0.7-reconcil…
JoshuaPurtell Aug 21, 2026
993975b
Merge pull request #50 from synth-laboratories/release/v0.7-reconcile…
JoshuaPurtell Aug 21, 2026
26a4a3d
Merge pull request #51 from synth-laboratories/v0.7
JoshuaPurtell Aug 21, 2026
54e68b9
release: prepare synth-optimizers 0.2.16 (#52)
JoshuaPurtell Aug 21, 2026
2df2734
Integrate optimizer event contracts and admitted configuration authority
JoshuaPurtell Sep 9, 2026
c165c70
Integrate OpenRouter GEPA execution and conservative cost accounting
JoshuaPurtell Sep 9, 2026
f286c00
Integrate standalone SFT and CISPO checkpoint execution
JoshuaPurtell Sep 9, 2026
dfc84f9
Integrate GEPA container preflight compatibility
JoshuaPurtell Sep 9, 2026
1b29480
Integrate container-first RL lifecycle and its recorded evidence
JoshuaPurtell Sep 9, 2026
837761d
Integrate v0.10 runtime conformance and recovery adapters
JoshuaPurtell Sep 9, 2026
ecdb550
Integrate durable checkpoint authority and training recovery
JoshuaPurtell Sep 9, 2026
7ebf616
Integrate release test gates and training crash-recovery checks
JoshuaPurtell Sep 9, 2026
6097962
Integrate stable 0.2.22 packaging and final GEPA corrections
JoshuaPurtell Sep 9, 2026
06fa702
Validate the curated v0.10 integration branch without publishing
JoshuaPurtell Sep 9, 2026
a916b12
Normalize inherited evidence whitespace for the integration diff
JoshuaPurtell Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
31 changes: 23 additions & 8 deletions .github/workflows/publish-craftax-eval-target.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,30 @@ jobs:
'architectures=linux/amd64,linux/arm64' \
'digest=${{ steps.publish.outputs.digest }}' | tee craftax-eval-target-receipt.txt

- name: Make the repository-linked target public
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh api --method PATCH \
/orgs/synth-laboratories/packages/container/workshop-craftax-eval-target \
-f visibility=public

- uses: actions/upload-artifact@v4
with:
name: craftax-eval-target-receipt
path: craftax-eval-target-receipt.txt

# GitHub has no REST route for package visibility: PATCH
# /orgs/{org}/packages/container/{name} is 404 for every token, which is
# what failed runs 32094428767 and 32098386835 after the push succeeded.
# Visibility is a one-time package-settings action by an org owner, so
# verify it here instead of pretending to set it. Once the package is
# public this step passes on every later run.
- name: Verify the target is anonymously pullable
env:
DIGEST: ${{ steps.publish.outputs.digest }}
run: |
set -euo pipefail
repo='synth-laboratories/workshop-craftax-eval-target'
token="$(curl -sS "https://ghcr.io/token?scope=repository:${repo}:pull" | jq -r '.token // empty')"
if [ -z "$token" ]; then
echo "::error::ghcr.io/${repo} is not anonymously pullable. The image ${DIGEST} was pushed and its receipt uploaded; an org owner must set the package public once at https://github.com/orgs/synth-laboratories/packages/container/workshop-craftax-eval-target/settings (Danger Zone -> Change visibility -> Public)."
exit 1
fi
curl -fsS -o /dev/null \
-H "Authorization: Bearer ${token}" \
-H 'Accept: application/vnd.oci.image.index.v1+json, application/vnd.docker.distribution.manifest.list.v2+json' \
"https://ghcr.io/v2/${repo}/manifests/${DIGEST}"
echo "anonymous pull verified for ${DIGEST}"
108 changes: 108 additions & 0 deletions .github/workflows/publish-gsm8k-eval-target.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: Publish GSM8K eval target

# Same shape as publish-craftax-eval-target.yml: an immutable build context from
# pinned sources, a multi-arch push by digest, a receipt artifact. The dataset
# pin (revision + split digests) is owned by containers' gsm8k_world.py; the
# stage step refuses to build if the rows fetched at that revision do not
# reproduce the recorded digests.

on:
workflow_dispatch:
inputs:
containers_ref:
description: "containers commit to vendor gsm8k_world.py from (full SHA)"
required: true
default: "9916cd7479c1029d7dd9091db43f52af1cdf484e"

permissions:
contents: read
packages: write

jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Check out Optimizers producer
uses: actions/checkout@v4

- name: Check out pinned containers source
uses: actions/checkout@v4
with:
repository: synth-laboratories/containers
ref: ${{ inputs.containers_ref }}
path: containers-source

- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Assemble immutable build context (pinned dataset, verified digests)
id: stage
run: |
set -euo pipefail
python -m pip install --quiet "huggingface_hub>=0.25" "pyarrow>=15"
python docker/gsm8k-eval-target/stage.py \
--containers-src containers-source/src \
--out "${RUNNER_TEMP}/gsm8k-eval-target"
revision="$(python -c 'import json,sys; print(json.load(open(sys.argv[1]))["revision"])' \
"${RUNNER_TEMP}/gsm8k-eval-target/stage-receipt.json")"
containers_sha="$(git -C containers-source rev-parse HEAD)"
echo "revision=${revision}" >> "$GITHUB_OUTPUT"
echo "containers_sha=${containers_sha}" >> "$GITHUB_OUTPUT"
echo "tag=v0.7-gsm8k-${revision:0:8}-containers-${containers_sha:0:8}" >> "$GITHUB_OUTPUT"

- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and publish immutable multi-architecture target
id: publish
uses: docker/build-push-action@v6
with:
context: ${{ runner.temp }}/gsm8k-eval-target
platforms: linux/amd64,linux/arm64
push: true
tags: ghcr.io/synth-laboratories/workshop-gsm8k-eval-target:${{ steps.stage.outputs.tag }}
labels: |
org.opencontainers.image.source=https://github.com/synth-laboratories/optimizers
org.opencontainers.image.revision=${{ steps.stage.outputs.containers_sha }}
org.opencontainers.image.title=Workshop GSM8K eval target
build-args: |
GSM8K_REVISION=${{ steps.stage.outputs.revision }}
CONTAINERS_SOURCE_COMMIT=${{ steps.stage.outputs.containers_sha }}
provenance: mode=max
sbom: true

- name: Record immutable publication receipt
run: |
cp "${RUNNER_TEMP}/gsm8k-eval-target/stage-receipt.json" gsm8k-eval-target-stage-receipt.json
printf '%s\n' \
'image=ghcr.io/synth-laboratories/workshop-gsm8k-eval-target' \
'tag=${{ steps.stage.outputs.tag }}' \
'dataset_revision=${{ steps.stage.outputs.revision }}' \
'containers_source_commit=${{ steps.stage.outputs.containers_sha }}' \
'architectures=linux/amd64,linux/arm64' \
'digest=${{ steps.publish.outputs.digest }}' | tee gsm8k-eval-target-receipt.txt

# Known to 404 on this org (same step as the Craftax workflow); the image
# is pushed and its digest recorded regardless, and visibility can be
# fixed from the org's package settings.
- name: Make the repository-linked target public
continue-on-error: true
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh api --method PATCH \
/orgs/synth-laboratories/packages/container/workshop-gsm8k-eval-target \
-f visibility=public

- uses: actions/upload-artifact@v4
with:
name: gsm8k-eval-target-receipt
path: |
gsm8k-eval-target-receipt.txt
gsm8k-eval-target-stage-receipt.json
86 changes: 79 additions & 7 deletions .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ on:
- dev
- official
push:
branches:
- codex/v010-stable-packages
- codex/v010-optimizers-integrated
tags:
- "v*"

Expand All @@ -30,7 +33,7 @@ jobs:
- id: release
name: Enforce branch, tag, and version policy
env:
REQUESTED_CHANNEL: ${{ github.event_name == 'push' && 'official' || inputs.channel }}
REQUESTED_CHANNEL: ${{ github.event_name == 'push' && (github.ref_type == 'tag' && 'official' || 'candidate') || inputs.channel }}
RELEASE_REF: ${{ github.ref }}
RELEASE_REF_NAME: ${{ github.ref_name }}
RELEASE_REF_TYPE: ${{ github.ref_type }}
Expand All @@ -54,7 +57,12 @@ jobs:
ref_name = os.environ["RELEASE_REF_NAME"]
ref_type = os.environ["RELEASE_REF_TYPE"]

if channel == "dev":
if channel == "candidate":
if ref not in {"refs/heads/codex/v010-stable-packages", "refs/heads/codex/v010-optimizers-integrated"}:
raise SystemExit("candidate checks require the release preparation branch")
if not re.fullmatch(r"\d+\.\d+\.\d+", version):
raise SystemExit(f"candidate version is invalid: {version}")
elif channel == "dev":
if ref != "refs/heads/dev":
raise SystemExit("development releases must be dispatched from the dev branch")
if not re.fullmatch(r"\d+\.\d+\.\d+\.dev\d+", version):
Expand All @@ -73,30 +81,92 @@ jobs:
output.write(f"version={version}\n")
PY

build:
name: Build macOS arm64 wheel
# A package must not reach PyPI having never run its own suite. `cargo test`
# was absent here and had stopped compiling entirely before this release.
# `synth_optimizers_py` is excluded because linking the PyO3 extension as a
# test binary is a harness problem, not a source one.
test:
name: Test
needs: validate
runs-on: macos-14
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262
- uses: dtolnay/rust-toolchain@stable
- uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e
with:
enable-cache: true
python-version: "3.11"

- name: Rust suite
run: cargo test --workspace --exclude synth_optimizers_py

- name: Python production suite
run: uv run --locked --group dev pytest tests -q

- name: Static gates
run: |
cargo fmt --check
cargo clippy --workspace -- -D warnings
uv run --locked --project . --group dev ruff check src
python3 scripts/check-type-debt.py
git diff --check

build:
name: Build ${{ matrix.target }} wheel
needs:
- validate
- test
strategy:
matrix:
include:
- runner: macos-14
target: aarch64-apple-darwin
- runner: ubuntu-24.04
target: x86_64-unknown-linux-gnu
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262

- name: Build wheel
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b
with:
command: build
target: aarch64-apple-darwin
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter

- name: Verify production dependency metadata
run: python3 scripts/check-production-wheel.py dist/*.whl

- uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e
with:
python-version: "3.11"

- name: Fresh vendored dependency installation
run: |
uv venv .release-smoke --python 3.11
uv pip install --python .release-smoke/bin/python dist/*.whl vendor/synth-containers/synth_containers-0.4.2-py3-none-any.whl
.release-smoke/bin/python -c 'from importlib.metadata import distributions; import synth_optimizers._synth_optimizers; assert not any("tblite" in d.metadata["Name"].lower() for d in distributions())'
.release-smoke/bin/synth-optimizers --help

- name: Fresh public dependency installation
run: |
uv venv .public-release-smoke --python 3.11
uv pip install --python .public-release-smoke/bin/python --index-url https://pypi.org/simple dist/*.whl
.public-release-smoke/bin/python -c 'from importlib.metadata import distributions, version; import synth_optimizers._synth_optimizers; assert version("synth-containers") == "0.4.2"; assert not any("tblite" in d.metadata["Name"].lower() for d in distributions())'
.public-release-smoke/bin/synth-optimizers --help

- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: optimizer-wheel
name: optimizer-wheel-${{ matrix.target }}
path: dist/*.whl
if-no-files-found: error
retention-days: 7

source:
name: Build source distribution
needs: validate
needs:
- validate
- test
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262
Expand All @@ -115,6 +185,8 @@ jobs:
retention-days: 7

publish:
# Candidate pushes exercise the real build gates but cannot publish.
if: github.ref_type == 'tag' || github.event_name == 'workflow_dispatch'
name: Publish ${{ needs.validate.outputs.version }}
needs:
- validate
Expand Down
27 changes: 26 additions & 1 deletion ACCEPTANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,31 @@

Date: 2026-05-20

> **Historical record — do not run the paths in this document.** This audit was
> written on 2026-05-20 against the then-current monorepo layout and is preserved
> unedited as evidence. Rewriting its paths would falsify what was actually run,
> so read it as a record, not as instructions:
>
> - Source paths carry the `packages/synth-optimizers/` and
> `packages/synth-containers/` monorepo prefixes (26 and 5 occurrences). This
> repository is now a standalone checkout: drop the
> `packages/synth-optimizers/` prefix, and Containers lives in its own
> repository.
> - Cookbook paths (`cookbooks/optimizers/gepa/…`) are **not in this
> repository**. They live in the separate public repo
> [`synth-laboratories/synth-cookbooks-public`](https://github.com/synth-laboratories/synth-cookbooks-public);
> see `RELEASE.md` for how they are invoked now.
> - `code_review_container` exists on no ref of that public repo, so every
> `code-review` row below is unreproducible by an outside reader. The public
> GEPA cookbooks on `main` today are `banking77_container`,
> `hotpotqa_container`, `minigrid_container`, `crafter_container`,
> `tblite_container`, and `healthbench_groq`.
> - Evidence roots under `/tmp/…` and `/var/folders/…` were ephemeral workspaces
> on the machine that ran the audit. They are cited as run identifiers, not as
> artifacts anyone can open.
>
> For the current release acceptance, see `RELEASE.md`.

Scope: public `synth-optimizers` GEPA v1 vertical slice in
`synth-cookbooks-public`, including Banking77 plus public-safe TBLite,
code-review, and Crafter fixtures. This document records validation evidence;
Expand Down Expand Up @@ -81,7 +106,7 @@ package, `synth-containers` contract additions, and GEPA cookbooks under
| Fresh readwrite run writes required artifacts. | PROVED | Current Banking77, TBLite, code-review, and Crafter fresh directories under `/tmp/synth-gepa-status-20260520` each contain `result_manifest.json`, `events.jsonl`, `events.normalized.jsonl`, `cache_profile.json`, `best_candidate.json`, `candidate_registry.json`, `frontier.json`, and `workspace.sqlite` |
| Immediate cached rerun makes no new policy/proposer/rollout external cache writes. | PROVED | Final cached cache profiles: Banking77 `45 hits, 0 misses, 0 writes`; TBLite `15 hits, 0 misses, 0 writes`; code-review `18 hits, 0 misses, 0 writes`; Crafter `18 hits, 0 misses, 0 writes` |
| Readonly replay succeeds when fully cached. | PROVED | Final readonly cache profiles: Banking77 `45 hits, 0 misses, 0 writes`; TBLite `15 hits, 0 misses, 0 writes`; code-review `18 hits, 0 misses, 0 writes`; Crafter `18 hits, 0 misses, 0 writes` |
| `events compare` reports normalized parity between original, cached, and readonly runs. | PROVED | Banking77, TBLite, code-review, and Crafter fresh-vs-cached and fresh-vs-readonly compare commands returned `normalized event feeds match` |
| `events compare` reports normalized parity between original, cached, and readonly runs. | **SUPERSEDED — do not carry forward** | Historical: Banking77, TBLite, code-review, and Crafter compare commands returned `normalized event feeds match`. This row predates the worker pool, budget forecasts, and child resource refs, and the claim no longer holds as stated: `events compare` is byte equality, and a replay legitimately emits 28 fewer `partial: true` worker-pool progress records because it executes no rollout (240 fresh vs 211 cached/readonly at `c21d6fe`). See `RELEASE.md` for the property that actually holds — byte-identical 199-event feeds once runtime telemetry is excluded. |
| Optimizer state machine records run lifecycle from created to terminal state. | PROVED | Current `workspace.sqlite` files under `/tmp/synth-gepa-status-20260520` have `optimizer_state_history` rows: Banking77 40, TBLite 19, code-review 19, Crafter 19; manifests end in `completed` |
| Rollout observations are captured as sensor frames. | PROVED | Current `workspace.sqlite` files under `/tmp/synth-gepa-status-20260520` have `sensor_frames` rows: Banking77 40, TBLite 11, code-review 14, Crafter 14, with rollout jobs persisted 1:1 |
| Candidate payloads, candidate deltas, acceptance decisions, frontier cells, and plan links are first-class workspace rows. | PROVED | Final current-schema rerun under `/tmp/synth-gepa-final-current-20260520` completed Banking77, TBLite, code-review, and Crafter fresh/cached/readonly runs. Fresh workspaces contain candidate graph rows: Banking77 `candidate_payloads=5`, `candidate_deltas=4`, `acceptance_decisions=5`, `frontier_cells=5`, `plan_links=63`; TBLite `2/1/2/1/18`; code-review `2/1/2/1/21`; Crafter `2/1/2/1/21`. Each fresh run returned `projection_status_counts={fresh: 21}`, `invariant_status_counts={pass: 2}`, zero invariant violations, cached writes `0`, readonly writes `0`, and normalized event comparisons true. |
Expand Down
10 changes: 5 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 10 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ members = [
resolver = "2"

[workspace.package]
version = "0.2.14"
version = "0.2.22"
edition = "2021"
license = "Apache-2.0"
authors = ["Synth Laboratories <josh@usesynth.ai>"]
repository = "https://github.com/synth-laboratories/synth-cookbooks-public"
repository = "https://github.com/synth-laboratories/optimizers"

[workspace.dependencies]
anyhow = "1.0"
Expand All @@ -32,3 +32,11 @@ thiserror = "1.0"
time = { version = "0.3", features = ["formatting", "macros", "parsing"] }
toml = "0.8"
uuid = { version = "1.10", features = ["v4"] }

# Several constructors and snapshot builders take eight or more distinct domain
# values. Bundling them into parameter structs would only move the arity into a
# literal at every call site, and the alternative -- an attribute per function --
# grows source files that the file-size ratchet in
# `synth_optimizer_platform/tests/file_size_cap.rs` allows only to shrink.
[workspace.lints.clippy]
too_many_arguments = "allow"
Loading
Loading