Repository navigation
1.2.60
- A job's verification record redacts every line of a PEM private key that
theverifycommand prints, including the base64 body. sentry.maxStringLengthsets the Sentry SDK'smax_value_length, so
Sentry truncates longer string values in an event. The default is 8192
characters, and0sets no limit.- A manual start of a pooled job answers
503when pool state is
unavailable.cron_list_pools,cron_cancel_queued,
cron_preview_recovery, andcron_recover_dagreport an unavailable
pool or recovery store as a tool error, matching the503from the REST
routes. - Before the
kubernetescluster backend restarts for rotated TLS files, it
checks that the kubeconfig, CA, client certificate, and key (or the
in-cluster CA) load. A half-written file keeps the running backend until a
later reload, as with theetcdand gossip backends. - Speed up the dashboard's week calendar by reading only each fire's
instant during the walk. The calendar repaints when any job name or fire
time in the grid changes, including names that contain@or|. The
demo dashboard includes both changes. - Reduce daemon overhead on frequent paths. Live log streams build each
line's server-sent event frame from a pre-encoded prefix, and/jobs
skips process, resource, and verification scans for idle jobs. A DAG pass
stops advancing pending root tasks once it spends its claim quota.
Configuration parsing does one environment lookup per${VAR}reference,
resolves each distinctenv_filepath once, and skips report checks that
have nothing to validate. - Reduce overhead in job output capture, the state store, and the terminal
UI. Output that is valid UTF-8 decodes without the per-line fallback, and
a run holds no live-viewer list until a viewer attaches. The filesystem
state store reads whole files unbuffered and evicts from a full record
cache in constant time. Pool reads copy the stored document once. The
terminal UI copies styled text runs as slices when it cuts a row to
width. - Pin PyInstaller once, in
pyinstaller/build-requirements.txt, where
Dependabot tracks it, and run one shared extras smoke test
(pyinstaller/smoke_frozen.sh) across the POSIX binary builds. Raise the
test coverage floors to 95% on POSIX and 94% on Windows. Key the
manylinux wheel cache on its build image. The local PyInstaller image
builds on CPython 3.14.7, like the release binaries.
Performance compared with 1.2.59
Regression check: passed. No compared metric exceeded its regression thresholds.
Both versions were benchmarked in alternating rounds on the same machine. Results use the lowest runtime and median memory usage across rounds. Negative changes mean less time or memory; positive changes mean more.
Benchmark comparisons (99 metrics)
Noise (±) estimates run-to-run variation across both versions. A result fails the regression check only if the increase exceeds its percentage limit, its minimum absolute change, and 2 times the noise estimate. n/a means too few rounds to estimate noise; the other limits still apply.
The Regression limit column accounts for the minimum absolute change, expressed as a percentage of the baseline. Not enforced marks informational metrics.
Startup times include Python startup overhead. Their percentage changes exclude that overhead when it can be measured separately and leaves a positive runtime in both versions.
| Benchmark | 1.2.59 | 1.2.60 | Change | Noise (±) | Regression limit |
|---|---|---|---|---|---|
| mem.retired_output_1k | 0.17 MB | 0.12 MB | -31.7% | 0.0% | 296.4% (declared 15%) |
| startup.import_cronexpr | 32.42 ms | 29.02 ms | -26.8% | 1.4% | 25% |
| job.stream_capture_120k | 44.63 ms | 35.47 ms | -20.5% | 1.2% | 22.41% (declared 15%) |
| tui.drawer_paint_5k | 119.16 ms | 95.44 ms | -19.9% | 2.4% | 15% |
| tui.dag_graph_paint_2k | 268.21 ms | 223.11 ms | -16.8% | 0.8% | 15% |
| config.interp_2k | 75.76 ms | 63.67 ms | -16.0% | 1.0% | 15% |
| dag.plan_claim_10k | 17.06 ms | 14.37 ms | -15.8% | 11.1% | 58.62% (declared 15%) |
| webapi.sse_burst_20k | 50.56 ms | 42.61 ms | -15.7% | 1.1% | 15% |
| webui.week_walk_500 | 3.55 ms | 3.05 ms | -14.1% | 3.2% | 56.34% (declared 25%) |
| state.derive_max_cold | 26.10 ms | 22.60 ms | -13.4% | 1.8% | 38.31% (declared 15%) |
| state.list_documents_600 | 69.53 ms | 61.03 ms | -12.2% | 1.2% | 17.26% (declared 15%) |
| state.list_records_2k | 28.25 ms | 24.81 ms | -12.2% | 2.2% | 35.4% (declared 15%) |
| statsd.emit_2k | 15.45 ms | 13.73 ms | -11.2% | 0.5% | 64.71% (declared 25%) |
| state.boot_rehydrate_populated | 41.96 ms | 38.87 ms | -7.4% | 1.0% | 23.83% (declared 15%) |
| webui.append_line_5k | 14.0 us | 13.0 us | -7.1% | 0.0% | 25% |
| schedule.due_pass_100k | 16.80 ms | 15.74 ms | -6.3% | 4.8% | 59.52% (declared 25%) |
| cronexpr.test_match_200k | 26.08 ms | 24.67 ms | -5.4% | 6.7% | 38.34% (declared 15%) |
| push.seal_500 | 94.61 ms | 90.85 ms | -4.0% | 0.4% | 15% |
| startup.import_config | 102.89 ms | 106.16 ms | +4.0% | 3.7% | 25% |
| dag.adopt_scan_500 | 79.90 ms | 76.78 ms | -3.9% | 0.6% | 25% |
| state.lease_renew_200 | 43.31 ms | 41.65 ms | -3.8% | 0.6% | 115.4% (declared 25%) |
| mem.gc_pause_100k | 158.13 ms | 163.84 ms | +3.6% | 4.0% | 25% |
| tui.log_restyle_5k | 30.16 ms | 29.20 ms | -3.2% | 1.7% | 33.15% (declared 15%) |
| dag.list_dags_warm | 958.6 us | 928.3 us | -3.2% | 3.6% | 208.6% (declared 25%) |
| startup.validate_config_100 | 213.71 ms | 219.74 ms | +3.1% | 2.6% | 25% |
| state.artifact_list_churn | 1.33 ms | 1.30 ms | -2.8% | 3.5% | 374.7% (declared 25%) |
| webui.radar_walk_500 | 380.0 us | 370.0 us | -2.6% | 1.5% | 526.3% (declared 25%) |
| state.kv_roundtrip_200 | 47.82 ms | 46.61 ms | -2.5% | 1.6% | 20.91% (declared 15%) |
| cronexpr.parse_simple | 41.95 ms | 40.95 ms | -2.4% | 1.8% | 23.84% (declared 15%) |
| schedule.pressure_20k_48h | 16.59 ms | 16.98 ms | +2.3% | 4.7% | 60.27% (declared 15%) |
| webui.render_term_5k | 108.30 ms | 110.75 ms | +2.3% | 2.6% | 25% |
| webui.render_fleet_15x400 | 23.43 ms | 22.91 ms | -2.2% | 1.7% | 25% |
| cluster.parse_summaries_6k | 85.90 ms | 87.68 ms | +2.1% | 4.1% | 15% |
| startup.version | 58.36 ms | 57.56 ms | -2.0% | 2.5% | 25% |
| config.parse_crontab_1k | 11.94 ms | 11.70 ms | -2.0% | 2.6% | 83.75% (declared 15%) |
| state.depends_on_past_gate | 2.54 ms | 2.49 ms | -1.9% | 2.0% | 78.7% (declared 25%) |
| state.fanout_gather_100 | 8.42 ms | 8.58 ms | +1.9% | 2.1% | 118.8% (declared 25%) |
| cronexpr.occurrences_1k | 13.41 ms | 13.18 ms | -1.7% | 1.9% | 74.54% (declared 15%) |
| startup.job_set_id_100 | 222.67 ms | 226.11 ms | +1.7% | 2.5% | 25% |
| cronexpr.parse_complex | 21.74 ms | 21.40 ms | -1.6% | 1.5% | 46% (declared 15%) |
| schedule.lint_250_zoned | 5.95 ms | 5.85 ms | -1.6% | 2.1% | 168.2% (declared 15%) |
| dag.build_layered_10k | 48.67 ms | 47.98 ms | -1.4% | 1.2% | 20.55% (declared 15%) |
| schedule.next_fires_2k | 23.26 ms | 22.93 ms | -1.4% | 0.8% | 42.99% (declared 15%) |
| config.reload_gc_100k | 1.891 s | 1.864 s | -1.4% | 3.1% | 25% |
| state.list_records_warm | 112.01 ms | 110.57 ms | -1.3% | 2.2% | 15% |
| config.parse_yaml_300 | 165.49 ms | 163.43 ms | -1.2% | 1.8% | 15% |
| config.reload_warm_include_50 | 87.50 ms | 86.43 ms | -1.2% | 0.6% | 25% |
| schedule.reseed_100k | 195.61 ms | 197.97 ms | +1.2% | 3.6% | 15% |
| schedule.reseed_local_20k | 94.27 ms | 93.19 ms | -1.1% | 1.6% | 15% |
| redact.secrets_5k | 20.20 ms | 20.42 ms | +1.1% | 0.5% | 49.5% (declared 15%) |
| startup.import_daemon | 194.88 ms | 192.96 ms | -1.1% | 1.1% | 25% |
| cronexpr.next_complex | 15.39 ms | 15.23 ms | -1.1% | 2.5% | 64.96% (declared 15%) |
| job.report_noop_100k | 50.68 ms | 50.13 ms | -1.1% | 2.4% | 15% |
| cronexpr.next_dst_2k | 38.17 ms | 37.76 ms | -1.1% | 3.2% | 26.2% (declared 15%) |
| mcp.handle_200 | 157.11 ms | 155.44 ms | -1.1% | 1.0% | 15% |
| webui.render_rows_500 | 16.49 ms | 16.66 ms | +1.0% | 4.7% | 25% |
| state.mutate_document_1k | 144.98 ms | 143.55 ms | -1.0% | 0.6% | 34.49% (declared 25%) |
| loop.stall_metrics_2000 | 26.76 ms | 27.02 ms | +1.0% | 4.2% | Not enforced |
| dag.mapped_drain_256 | 20.15 ms | 19.95 ms | -1.0% | 1.5% | 49.63% (declared 25%) |
| schedule.duplicates_20k | 18.15 ms | 18.31 ms | +0.9% | 13.1% | 55.08% (declared 15%) |
| dag.advance_quiescent_1k | 73.84 ms | 73.19 ms | -0.9% | 1.4% | 25% |
| cluster.fleet_view_15x400 | 85.08 ms | 84.38 ms | -0.8% | 2.6% | 25% |
| resources.monitor_stop_100 | 300.41 ms | 302.79 ms | +0.8% | 2.4% | 25% |
| config.jobconfig_3k | 46.83 ms | 46.47 ms | -0.8% | 2.0% | 21.35% (declared 15%) |
| json.roundtrip_orjson_3k | 209.99 ms | 211.59 ms | +0.8% | 1.4% | 15% |
| dag.advance_quiescent_chain | 72.72 ms | 72.19 ms | -0.7% | 1.3% | 25% |
| webapi.jobs_payload_500 | 54.82 ms | 54.42 ms | -0.7% | 0.5% | 18.24% (declared 15%) |
| json.roundtrip_3k | 555.39 ms | 559.05 ms | +0.7% | 2.3% | 15% |
| state.gc_sweep_2k_streams | 38.26 ms | 38.02 ms | -0.6% | 1.9% | 39.21% (declared 25%) |
| ical.render_500x7d | 48.89 ms | 49.19 ms | +0.6% | 1.8% | 20.45% (declared 15%) |
| schedule.suggest_slot_5k | 4.14 ms | 4.12 ms | -0.6% | 3.4% | 241.6% (declared 15%) |
| tui.log_search_20k | 14.31 ms | 14.37 ms | +0.4% | 2.0% | 69.87% (declared 15%) |
| loop.idle_wake_rate | 15.53 ms | 15.47 ms | -0.4% | 1.7% | 32.2% (declared 25%) |
| dag.build_chain_10k | 27.78 ms | 27.69 ms | -0.3% | 3.3% | 36% (declared 15%) |
| redact.adversarial_10k | 35.57 ms | 35.47 ms | -0.3% | 1.8% | 28.12% (declared 15%) |
| state.append_1k | 98.84 ms | 98.58 ms | -0.3% | 0.9% | 50.59% (declared 15%) |
| loop.stall_completions_500 | 8.56 ms | 8.54 ms | -0.3% | 1.7% | 58.39% (declared 25%) |
| dag.list_runs_warm | 10.98 ms | 10.95 ms | -0.2% | 0.7% | 25% |
| webapi.auth_scope_20k | 86.50 ms | 86.30 ms | -0.2% | 0.8% | 15% |
| schedule.cold_build_100k | 472.24 ms | 473.30 ms | +0.2% | 1.2% | 15% |
| prometheus.render_500 | 16.39 ms | 16.43 ms | +0.2% | 1.7% | 61.01% (declared 15%) |
| mem.rss_daemon_import | 37.53 MB | 37.46 MB | -0.2% | 0.0% | 25% |
| config.parse_yaml_3k | 1.645 s | 1.648 s | +0.2% | 2.2% | 15% |
| config.reload_warm_50 | 39.83 ms | 39.76 ms | -0.2% | 2.8% | 25% |
| state.derive_max_warm | 151.03 ms | 150.81 ms | -0.1% | 0.4% | 15% |
| state.artifact_get_newest | 16.14 ms | 16.17 ms | +0.1% | 1.1% | 30.97% (declared 25%) |
| mem.rss_version | 14.46 MB | 14.45 MB | -0.1% | 0.2% | 25% |
| loop.stall_jobs_500 | 19.67 ms | 19.69 ms | +0.1% | 1.3% | Not enforced |
| redact.clean_20k | 20.58 ms | 20.57 ms | -0.1% | 1.6% | 48.58% (declared 15%) |
| startup.python_baseline | 19.77 ms | 19.76 ms | -0.1% | 1.4% | Not enforced |
| fingerprint.job_set_id_10k | 295.96 ms | 295.78 ms | -0.1% | 0.7% | 15% |
| dag.finish_fanin_1k | 3.51 ms | 3.52 ms | +0.0% | 2.7% | 142.3% (declared 25%) |
| cluster.job_owner_2k | 52.49 ms | 52.51 ms | +0.0% | 2.6% | 19.05% (declared 15%) |
| cronexpr.next_simple | 36.63 ms | 36.64 ms | +0.0% | 3.6% | 27.3% (declared 15%) |
| webui.log_count_5k | 100.0 us | 100.0 us | +0.0% | 4.5% | 2000% (declared 25%) |
| webapi.jobs_bytes_500 | 181.42 KB | 181.42 KB | +0.0% | 0.0% | 15% |
| webapi.jobs_gzip_500 | 5.19 KB | 5.19 KB | +0.0% | 0.0% | 15% |
| mem.crontab_10k | 2.80 MB | 2.80 MB | +0.0% | 0.0% | 17.85% (declared 15%) |
| mem.jobconfig_2k | 1.57 MB | 1.57 MB | +0.0% | 0.0% | 31.89% (declared 15%) |
What's Changed
- Bump the nix group with 2 updates by @dependabot[bot] in #28
- Bump the github-actions group across 1 directory with 3 updates by @dependabot[bot] in #29
- Bump pyinstaller from 6.22.1 to 6.22.3 in the python group by @dependabot[bot] in #30
Full Changelog: 1.2.59...1.2.60