Speeds up the merge gate by running independent subprocess loops in bounded pools. No verdict, exit code or output order changes.
What
conformance/lib/run_l1_offline.py: L0/L1 offline checks run in a thread pool (--jobs / CONF_OFFLINE_JOBS, default min(8, usable CPUs); 1 = serial). Results are consumed in submission order, so JUnit, step summary and 0/1/3 aggregation stay identical. Children get a smaller MUTATION_JOBS when the runner is parallel, to avoid nested-pool oversubscription.
keycloak-{passkey,client-secret}-reconciler/mutations.py: anchors are still checked first (serially), then the --selftest children run in a pool (MUTATION_JOBS, default min(8, CPUs)), reported in MUTATIONS order.
ci/lint.sh: yamllint runs over LINT_JOBS contiguous slices at once, with per-slice output buffered and printed in order. The stage's rc is the highest slice rc.
Measured locally (pinned toolbox, 24 CPUs)
gate: 183.9s -> 32.1s in-container (rc 3 both times; gitea-settings was the only stage that did not run)
l0 stage: 168.3s -> 21.1s; same tree, all 25 checks, serial vs parallel: 164-165s -> 18.7-19.2s, with JUnit and summary cmp-identical
lint: 7.8s -> 2.4s
Falsification (not committed): I made one passkey mutation a no-op. Serial and parallel both report SURVIVED, and the gate returns rc 1 BLOCKED.
Parallel-safety audit of all 28 offline checks, plus the timing caveats, is in decisions/2026-11-08-parallel-l0-checks.md.
Needs operator review.ci/** and conformance/** are sensitive paths, so approval-policy will be red until a non-author reviews. The agent did not and will not post /approve-override.
Speeds up the merge gate by running independent subprocess loops in bounded pools. No verdict, exit code or output order changes.
**What**
- `conformance/lib/run_l1_offline.py`: L0/L1 offline checks run in a thread pool (`--jobs` / `CONF_OFFLINE_JOBS`, default `min(8, usable CPUs)`; `1` = serial). Results are consumed in submission order, so JUnit, step summary and 0/1/3 aggregation stay identical. Children get a smaller `MUTATION_JOBS` when the runner is parallel, to avoid nested-pool oversubscription.
- `keycloak-{passkey,client-secret}-reconciler/mutations.py`: anchors are still checked first (serially), then the `--selftest` children run in a pool (`MUTATION_JOBS`, default `min(8, CPUs)`), reported in `MUTATIONS` order.
- `ci/lint.sh`: yamllint runs over `LINT_JOBS` contiguous slices at once, with per-slice output buffered and printed in order. The stage's rc is the highest slice rc.
**Measured locally (pinned toolbox, 24 CPUs)**
- gate: 183.9s -> 32.1s in-container (rc 3 both times; gitea-settings was the only stage that did not run)
- l0 stage: 168.3s -> 21.1s; same tree, all 25 checks, serial vs parallel: 164-165s -> 18.7-19.2s, with JUnit and summary `cmp`-identical
- lint: 7.8s -> 2.4s
- Falsification (not committed): I made one passkey mutation a no-op. Serial and parallel both report `SURVIVED`, and the gate returns **rc 1 BLOCKED**.
Parallel-safety audit of all 28 offline checks, plus the timing caveats, is in `decisions/2026-11-08-parallel-l0-checks.md`.
**Needs operator review.** `ci/**` and `conformance/**` are sensitive paths, so `approval-policy` will be red until a non-author reviews. The agent did not and will not post `/approve-override`.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
- conformance/lib/run_l1_offline.py: checks run in a thread pool (--jobs / CONF_OFFLINE_JOBS,
default min(8, usable CPUs)); results consumed in submission order, so log lines, JUnit,
step summary and the 0/1/3 aggregation are unchanged. Exports a smaller MUTATION_JOBS to
the children when parallel, so nested pools do not oversubscribe.
- keycloak-{passkey,client-secret}-reconciler/mutations.py: anchors checked first (serial),
then the --selftest subprocesses run in a pool (MUTATION_JOBS, default min(8, CPUs));
verdicts reported in MUTATIONS order. Output byte-identical to the serial loop.
- ci/lint.sh: yamllint over LINT_JOBS contiguous slices concurrently, per-slice output
buffered and printed in order; stage rc = highest slice rc.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Speeds up the merge gate by running independent subprocess loops in bounded pools. No verdict, exit code or output order changes.
What
conformance/lib/run_l1_offline.py: L0/L1 offline checks run in a thread pool (--jobs/CONF_OFFLINE_JOBS, defaultmin(8, usable CPUs);1= serial). Results are consumed in submission order, so JUnit, step summary and 0/1/3 aggregation stay identical. Children get a smallerMUTATION_JOBSwhen the runner is parallel, to avoid nested-pool oversubscription.keycloak-{passkey,client-secret}-reconciler/mutations.py: anchors are still checked first (serially), then the--selftestchildren run in a pool (MUTATION_JOBS, defaultmin(8, CPUs)), reported inMUTATIONSorder.ci/lint.sh: yamllint runs overLINT_JOBScontiguous slices at once, with per-slice output buffered and printed in order. The stage's rc is the highest slice rc.Measured locally (pinned toolbox, 24 CPUs)
cmp-identicalSURVIVED, and the gate returns rc 1 BLOCKED.Parallel-safety audit of all 28 offline checks, plus the timing caveats, is in
decisions/2026-11-08-parallel-l0-checks.md.Needs operator review.
ci/**andconformance/**are sensitive paths, soapproval-policywill be red until a non-author reviews. The agent did not and will not post/approve-override.🤖 Generated with Claude Code
- conformance/lib/run_l1_offline.py: checks run in a thread pool (--jobs / CONF_OFFLINE_JOBS, default min(8, usable CPUs)); results consumed in submission order, so log lines, JUnit, step summary and the 0/1/3 aggregation are unchanged. Exports a smaller MUTATION_JOBS to the children when parallel, so nested pools do not oversubscribe. - keycloak-{passkey,client-secret}-reconciler/mutations.py: anchors checked first (serial), then the --selftest subprocesses run in a pool (MUTATION_JOBS, default min(8, CPUs)); verdicts reported in MUTATIONS order. Output byte-identical to the serial loop. - ci/lint.sh: yamllint over LINT_JOBS contiguous slices concurrently, per-slice output buffered and printed in order; stage rc = highest slice rc. Co-Authored-By: Claude Opus 5.5 <[email protected]>