Repository navigation
1.2.58
- The Windows service refuses to load a configuration that any account
other than SYSTEM and Administrators can write, or one reached through a
junction or symbolic link. It checks before it opens its log or reads a
file, records the reason and theicaclsfix in the Application event log
as event ID 1020, and stops with a code thatcronstable service status
explains. It repeats the check before every reload, and a reload that
fails the check keeps the jobs already loaded.cronstable service installrefuses the same paths, including a per-user directory named
with-c. A local account that createsC:\ProgramData\cronstable
beforecronstable initruns therefore cannot have its jobs run as
SYSTEM. If another account can write to the configuration directory,
the service remains stopped until the printedicaclscommands restrict
write access. - The MSI creates
C:\ProgramData\cronstablewhen it does not exist,
with the same ownership and permissions ascronstable init:
the Administrators group owns the directory, and only SYSTEM and
Administrators can write to it. Uninstalling keeps the directory. The
MSI preserves existing directories and their permissions.
The service starts at the next boot with no jobs and loads configuration
added later within a minute.
Performance compared with 1.2.57
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.57 | 1.2.58 | Change | Noise (±) | Regression limit |
|---|---|---|---|---|---|
| webui.log_count_5k | 100.0 us | 90.0 us | -10.0% | 4.5% | 2000% (declared 25%) |
| loop.stall_metrics_2000 | 28.24 ms | 29.04 ms | +2.8% | 3.2% | Not enforced |
| cronexpr.next_complex | 15.60 ms | 16.02 ms | +2.7% | 3.0% | 64.1% (declared 15%) |
| webui.radar_walk_500 | 380.0 us | 390.0 us | +2.6% | 4.0% | 526.3% (declared 25%) |
| schedule.suggest_slot_5k | 4.39 ms | 4.28 ms | -2.5% | 3.4% | 228% (declared 15%) |
| schedule.pressure_20k_48h | 17.32 ms | 16.95 ms | -2.1% | 5.2% | 57.75% (declared 15%) |
| mem.gc_pause_100k | 141.02 ms | 138.47 ms | -1.8% | 7.6% | 25% |
| state.gc_sweep_2k_streams | 32.99 ms | 33.56 ms | +1.7% | 0.7% | 45.46% (declared 25%) |
| config.parse_crontab_1k | 12.71 ms | 12.50 ms | -1.7% | 1.5% | 78.67% (declared 15%) |
| dag.finish_fanin_1k | 3.33 ms | 3.38 ms | +1.6% | 1.6% | 150.1% (declared 25%) |
| state.list_documents_600 | 62.90 ms | 63.90 ms | +1.6% | 0.9% | 19.08% (declared 15%) |
| cronexpr.occurrences_1k | 14.30 ms | 14.07 ms | -1.6% | 2.3% | 69.94% (declared 15%) |
| mcp.handle_200 | 139.71 ms | 137.64 ms | -1.5% | 1.0% | 15% |
| fingerprint.job_set_id_10k | 302.43 ms | 297.98 ms | -1.5% | 1.2% | 15% |
| schedule.lint_250_zoned | 7.78 ms | 7.67 ms | -1.4% | 2.3% | 128.5% (declared 15%) |
| state.artifact_list_churn | 1.51 ms | 1.53 ms | +1.3% | 2.2% | 330.8% (declared 25%) |
| state.depends_on_past_gate | 3.10 ms | 3.06 ms | -1.3% | 0.4% | 64.61% (declared 25%) |
| schedule.duplicates_20k | 19.07 ms | 18.82 ms | -1.3% | 5.6% | 52.45% (declared 15%) |
| dag.plan_claim_10k | 16.15 ms | 16.34 ms | +1.2% | 2.0% | 61.91% (declared 15%) |
| schedule.next_fires_2k | 25.11 ms | 25.40 ms | +1.2% | 1.1% | 39.83% (declared 15%) |
| config.reload_warm_50 | 47.29 ms | 46.79 ms | -1.1% | 1.6% | 25% |
| webui.render_rows_500 | 17.04 ms | 17.22 ms | +1.1% | 3.0% | 25% |
| schedule.reseed_local_20k | 94.97 ms | 95.96 ms | +1.0% | 1.4% | 15% |
| redact.clean_20k | 20.54 ms | 20.34 ms | -1.0% | 1.5% | 48.7% (declared 15%) |
| startup.python_baseline | 17.69 ms | 17.52 ms | -0.9% | 0.3% | Not enforced |
| state.list_records_2k | 26.25 ms | 26.49 ms | +0.9% | 3.0% | 38.09% (declared 15%) |
| state.append_1k | 127.04 ms | 125.96 ms | -0.9% | 1.3% | 39.36% (declared 15%) |
| config.reload_gc_100k | 2.707 s | 2.729 s | +0.8% | 0.7% | 25% |
| schedule.reseed_100k | 209.56 ms | 211.26 ms | +0.8% | 0.8% | 15% |
| cronexpr.parse_simple | 44.58 ms | 44.93 ms | +0.8% | 1.8% | 22.43% (declared 15%) |
| statsd.emit_2k | 15.22 ms | 15.10 ms | -0.8% | 2.3% | 65.69% (declared 25%) |
| dag.list_dags_warm | 1.09 ms | 1.10 ms | +0.8% | 1.8% | 183.1% (declared 25%) |
| job.report_noop_100k | 52.91 ms | 52.53 ms | -0.7% | 3.3% | 15% |
| loop.idle_wake_rate | 21.88 ms | 22.03 ms | +0.7% | 1.7% | 25% |
| startup.validate_config_100 | 221.44 ms | 222.66 ms | +0.7% | 0.7% | 25% |
| cluster.fleet_view_15x400 | 85.10 ms | 85.66 ms | +0.7% | 0.5% | 25% |
| dag.build_chain_10k | 29.16 ms | 28.97 ms | -0.7% | 1.0% | 34.29% (declared 15%) |
| cronexpr.test_match_200k | 24.51 ms | 24.67 ms | +0.7% | 3.4% | 40.8% (declared 15%) |
| config.reload_warm_include_50 | 100.59 ms | 99.95 ms | -0.6% | 2.3% | 25% |
| webapi.sse_burst_20k | 57.25 ms | 56.89 ms | -0.6% | 0.8% | 15% |
| state.list_records_warm | 108.54 ms | 107.90 ms | -0.6% | 1.6% | 15% |
| cronexpr.next_simple | 39.83 ms | 39.60 ms | -0.6% | 1.6% | 25.11% (declared 15%) |
| loop.stall_jobs_500 | 21.10 ms | 20.99 ms | -0.6% | 1.8% | Not enforced |
| schedule.due_pass_100k | 16.06 ms | 16.15 ms | +0.5% | 3.0% | 62.27% (declared 25%) |
| config.parse_yaml_300 | 201.23 ms | 200.19 ms | -0.5% | 2.4% | 15% |
| schedule.cold_build_100k | 491.60 ms | 494.08 ms | +0.5% | 1.1% | 15% |
| prometheus.render_500 | 17.05 ms | 17.14 ms | +0.5% | 2.6% | 58.64% (declared 15%) |
| state.boot_rehydrate_populated | 43.03 ms | 43.24 ms | +0.5% | 1.3% | 23.24% (declared 15%) |
| dag.mapped_drain_256 | 19.80 ms | 19.89 ms | +0.4% | 0.8% | 50.5% (declared 25%) |
| dag.adopt_scan_500 | 103.45 ms | 103.90 ms | +0.4% | 2.0% | 25% |
| resources.monitor_stop_100 | 291.89 ms | 290.64 ms | -0.4% | 1.4% | 25% |
| json.roundtrip_3k | 578.79 ms | 581.19 ms | +0.4% | 1.1% | 15% |
| job.stream_capture_120k | 43.78 ms | 43.96 ms | +0.4% | 1.4% | 22.84% (declared 15%) |
| loop.stall_completions_500 | 10.16 ms | 10.12 ms | -0.4% | 0.6% | 49.22% (declared 25%) |
| config.parse_yaml_3k | 1.988 s | 1.981 s | -0.4% | 2.2% | 15% |
| ical.render_500x7d | 52.63 ms | 52.43 ms | -0.4% | 1.1% | 19% (declared 15%) |
| dag.advance_quiescent_chain | 71.19 ms | 70.93 ms | -0.4% | 0.7% | 25% |
| tui.dag_graph_paint_2k | 281.72 ms | 282.75 ms | +0.4% | 0.7% | 15% |
| redact.adversarial_10k | 36.17 ms | 36.30 ms | +0.3% | 2.9% | 27.65% (declared 15%) |
| startup.import_config | 97.02 ms | 97.13 ms | +0.3% | 1.4% | 25% |
| config.jobconfig_3k | 68.43 ms | 68.65 ms | +0.3% | 2.5% | 15% |
| webapi.jobs_payload_500 | 56.00 ms | 55.85 ms | -0.3% | 2.3% | 17.86% (declared 15%) |
| startup.version | 54.26 ms | 54.20 ms | +0.3% | 0.6% | 25% |
| state.artifact_get_newest | 21.94 ms | 22.00 ms | +0.3% | 0.9% | 25% |
| webapi.auth_scope_20k | 88.46 ms | 88.23 ms | -0.3% | 2.7% | 15% |
| state.mutate_document_1k | 143.85 ms | 144.20 ms | +0.2% | 1.1% | 34.76% (declared 25%) |
| cronexpr.next_dst_2k | 41.21 ms | 41.30 ms | +0.2% | 2.7% | 24.26% (declared 15%) |
| tui.log_restyle_5k | 32.17 ms | 32.11 ms | -0.2% | 1.7% | 31.08% (declared 15%) |
| startup.import_cronexpr | 29.40 ms | 29.22 ms | -0.2% | 0.4% | 25% |
| dag.advance_quiescent_1k | 72.17 ms | 72.31 ms | +0.2% | 0.8% | 25% |
| state.derive_max_warm | 149.49 ms | 149.76 ms | +0.2% | 0.2% | 15% |
| cronexpr.parse_complex | 24.19 ms | 24.23 ms | +0.2% | 2.0% | 41.35% (declared 15%) |
| state.derive_max_cold | 23.77 ms | 23.81 ms | +0.2% | 1.9% | 42.08% (declared 15%) |
| startup.import_daemon | 181.45 ms | 181.56 ms | +0.2% | 0.2% | 25% |
| config.interp_2k | 77.84 ms | 77.96 ms | +0.2% | 1.4% | 15% |
| push.seal_500 | 95.72 ms | 95.87 ms | +0.2% | 0.5% | 15% |
| mem.rss_version | 14.45 MB | 14.43 MB | -0.1% | 0.2% | 25% |
| webui.render_fleet_15x400 | 23.86 ms | 23.89 ms | +0.1% | 0.5% | 25% |
| mem.rss_daemon_import | 37.41 MB | 37.37 MB | -0.1% | 0.1% | 25% |
| tui.drawer_paint_5k | 130.18 ms | 130.08 ms | -0.1% | 0.7% | 15% |
| tui.log_search_20k | 15.39 ms | 15.40 ms | +0.1% | 1.7% | 64.96% (declared 15%) |
| dag.build_layered_10k | 49.65 ms | 49.61 ms | -0.1% | 3.1% | 20.14% (declared 15%) |
| cluster.job_owner_2k | 57.82 ms | 57.86 ms | +0.1% | 5.4% | 17.29% (declared 15%) |
| redact.secrets_5k | 20.48 ms | 20.49 ms | +0.1% | 2.0% | 48.84% (declared 15%) |
| state.kv_roundtrip_200 | 56.77 ms | 56.80 ms | +0.0% | 1.7% | 17.61% (declared 15%) |
| webui.render_term_5k | 108.85 ms | 108.90 ms | +0.0% | 0.6% | 25% |
| state.lease_renew_200 | 51.58 ms | 51.59 ms | +0.0% | 1.4% | 96.94% (declared 25%) |
| dag.list_runs_warm | 12.97 ms | 12.97 ms | +0.0% | 0.9% | 25% |
| cluster.parse_summaries_6k | 88.08 ms | 88.06 ms | -0.0% | 1.7% | 15% |
| json.roundtrip_orjson_3k | 205.69 ms | 205.72 ms | +0.0% | 1.4% | 15% |
| state.fanout_gather_100 | 10.06 ms | 10.06 ms | +0.0% | 2.6% | 99.44% (declared 25%) |
| startup.job_set_id_100 | 227.78 ms | 227.60 ms | -0.0% | 1.2% | 25% |
| webui.append_line_5k | 14.0 us | 14.0 us | -0.0% | 6.0% | 25% |
| webui.week_walk_500 | 3.45 ms | 3.45 ms | -0.0% | 0.6% | 57.97% (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.60 MB | 1.60 MB | +0.0% | 0.0% | 31.34% (declared 15%) |
| mem.retired_output_1k | 0.17 MB | 0.17 MB | +0.0% | 0.0% | 296.4% (declared 15%) |
What's Changed
- Bump astral-sh/setup-uv from 10.1.0 to 10.2.0 in the github-actions group by @dependabot[bot] in #23
- Bump sentry-sdk from 2.69.2 to 2.70.0 in the python group by @dependabot[bot] in #24
- Bump the nix group with 2 updates by @dependabot[bot] in #25
- Bump vmactions/freebsd-vm from 1.5.7 to 1.5.8 in the github-actions group across 1 directory by @dependabot[bot] in #26
- Bump hypothesis from 6.168.0 to 6.168.1 in the python group by @dependabot[bot] in #27
Full Changelog: 1.2.57...1.2.58