Skip to content

1.2.73

Choose a tag to compare

@github-actions github-actions released this 28 Oct 12:13
· 9 commits to main since this release
Immutable release. Only release title and notes can be modified.
  • The MCP log-tail tools, cron_tail_job_logs and cron_tail_dag_task_logs,
    keep returning new lines after a run's 1000-line output buffer fills: the
    cursor counts the run's lines instead of buffer slots. Each result reports
    skipped lines that the buffer dropped between polls, sets reset when
    the cursor is past the run's output, and names the run in started_at.
    cron_tail_dag_task_logs also reports running.
  • MCP tools describe each argument with its default and range, and say when
    to use a related tool instead.
  • docs/openapi.yaml describes the fields inside the responses of the job,
    run, resource, DAG, run document, XCom, approval decision, recovery,
    cluster, fleet, and state inspector routes, so a generated client reads
    them as typed fields: a job's retry, SLA, cluster slot and owner, and live
    CPU and memory; a run's skip reason and resource totals; a DAG's latest
    run and each task's trigger rule; every key of a run document's task
    entries; a cluster's peers, conflicts, and lease; and the state store's
    inventory, documents, and records. Every object stays open to keys a
    newer daemon adds, and a test fails when a payload emits a key that its
    schema does not declare. GET /state/records returns each record's full
    stored body and refuses only archived-output logs/ streams. A runs/
    record carries the same data that GET /jobs/{name}/runs and
    GET /jobs/{name}/resources serve. The dashboard's state inspector says
    what each tab shows: KV values as a type and size, and records in full.
  • An integer that a cluster peer sends outside the signed 64-bit range
    counts as malformed: an exit_code in its job summaries reads as null, a
    cpu_count in its node stats is dropped, and a cluster_size fails the
    poll, so a generated client can decode every integer in /cluster and
    /fleet.

Performance compared with 1.2.72

Regressions accepted for this release. The following changes exceeded their regression thresholds:

  • mcp.tools_list_bytes increased by 66.9% (20.09 KB to 33.53 KB; declared limit 15%; noise: ±0.0%)

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 (199 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. When a result uses the lowest runtime and each version has three or more rounds, the median of the rounds must also increase by more than the percentage limit and the minimum absolute change. 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.72 1.2.73 Change Noise (±) Regression limit
mcp.tools_list_bytes 20.09 KB 33.53 KB +66.9% (regression) 0.0% 15%
webui.dirty_frame_rows_500 888.9 us 585.7 us -34.1% 43.5% Not enforced
mem.gc_pause_100k 162.68 ms 115.36 ms -29.1% 19.5% 25%
loop.stall_metrics_2000 18.04 ms 15.60 ms -13.5% 31.2% Not enforced
dag.gc_excess_60 106.05 ms 116.67 ms +10.0% 15.4% 25%
webui.wallboard_poll_500 34.70 ms 37.80 ms +8.9% 13.7% 25%
dag.run_wide_500 94.92 ms 88.20 ms -7.1% 11.4% 25%
cluster.poll_round_15x400 80.05 ms 85.72 ms +7.1% 6.6% 15%
state.mutate_document_1k 143.25 ms 133.22 ms -7.0% 4.1% 34.9% (declared 25%)
dag.full_sweep_50x200 63.13 ms 67.51 ms +6.9% 13.3% 25%
startup.version 33.30 ms 34.25 ms +6.9% 3.3% 25%
cluster.parse_summaries_6k 42.07 ms 44.95 ms +6.8% 10.2% 23.77% (declared 15%)
dag.run_chain_100 291.14 ms 271.42 ms -6.8% 3.0% 25%
webapi.activity_build_500 111.22 ms 104.13 ms -6.4% 7.7% 15%
webui.tick_500 47.50 ms 50.40 ms +6.1% 18.6% 25%
config.reload_gc_100k 1.088 s 1.027 s -5.6% 3.6% 25%
state.depends_on_past_gate 1.80 ms 1.70 ms -5.5% 2.6% 111.1% (declared 25%)
json.roundtrip_orjson_3k 110.91 ms 104.99 ms -5.3% 2.0% 15%
webapi.trends_build_5k 86.62 ms 91.02 ms +5.1% 8.5% 15%
redact.secrets_5k 11.70 ms 11.11 ms -5.0% 2.8% 85.47% (declared 15%)
job.launch_reap_2k 84.08 ms 79.88 ms -5.0% 9.3% 15%
webui.dag_tasks_2k 30.50 ms 32.00 ms +4.9% 6.1% 25%
pools.enqueue_burst_200 200.49 ms 190.72 ms -4.9% 5.0% 25%
dag.advance_waiting_mapped_1k 64.02 ms 67.10 ms +4.8% 2.9% 25%
cronexpr.test_match_200k 13.41 ms 14.05 ms +4.8% 7.0% 74.58% (declared 15%)
tui.log_restyle_5k 17.47 ms 16.64 ms -4.7% 6.2% 57.26% (declared 15%)
push.fanout_8x100 84.27 ms 88.16 ms +4.6% 1.3% 15%
startup.python_baseline 11.76 ms 11.23 ms -4.5% 3.1% Not enforced
state.derive_max_warm 181.48 ms 173.40 ms -4.5% 1.6% 15%
webapi.summary_status_500 84.38 ms 88.13 ms +4.4% 3.9% 15%
dag.plan_claim_10k 8.72 ms 9.10 ms +4.3% 28.8% 114.6% (declared 15%)
webui.boot_rows_500 274.00 ms 262.10 ms -4.3% 11.4% Not enforced
cronexpr.parse_simple 24.17 ms 23.14 ms -4.2% 4.7% 41.37% (declared 15%)
dag.finish_fanin_20x1k 47.46 ms 49.40 ms +4.1% 17.3% 25%
state.gc_sweep_2k_streams 30.23 ms 31.46 ms +4.1% 12.5% 49.62% (declared 25%)
dag.list_dags_warm_x300 32.13 ms 33.42 ms +4.0% 2.5% 31.12% (declared 25%)
cronexpr.next_dst_2k 22.36 ms 23.26 ms +4.0% 2.7% 44.71% (declared 15%)
schedule.duplicates_20k 9.90 ms 10.30 ms +4.0% 21.8% 101% (declared 15%)
webapi.pools_poll_4x130 56.56 ms 58.74 ms +3.9% 4.1% 25%
webapi.dags_poll_1k 65.82 ms 68.23 ms +3.7% 7.1% 15%
ical.render_500x7d 27.92 ms 26.91 ms -3.6% 5.0% 35.81% (declared 15%)
dag.fanin_barrier_1k 93.27 ms 96.67 ms +3.6% 3.6% 25%
config.parse_crontab_1k 6.69 ms 6.93 ms +3.6% 4.2% 149.5% (declared 15%)
dag.list_runs_warm 6.70 ms 6.94 ms +3.6% 4.2% 29.84% (declared 25%)
job.launch_fail_retry_2k 93.88 ms 90.70 ms -3.4% 9.4% 15%
jobapi.read_path_10k 69.67 ms 72.03 ms +3.4% 3.3% 15%
webapi.resources_poll_20x240 76.24 ms 78.82 ms +3.4% 4.5% 15%
mcp.list_jobs_500 74.75 ms 77.25 ms +3.3% 3.3% 15%
config.reload_warm_dir_1k 45.54 ms 44.03 ms -3.3% 10.0% 25%
state.kv_roundtrip_200 136.67 ms 132.15 ms -3.3% 6.3% 15%
mcp.query_metrics_500 70.30 ms 68.02 ms -3.2% 10.3% 25%
state.append_1k 461.11 ms 446.42 ms -3.2% 6.2% 15%
config.parse_yaml_3k 871.96 ms 899.58 ms +3.2% 5.1% 15%
push.seal_xwing_500 65.92 ms 67.95 ms +3.1% 2.5% 15%
state.derive_max_cold 15.32 ms 15.79 ms +3.1% 3.3% 65.27% (declared 15%)
startup.job_set_id_100 113.51 ms 109.99 ms -2.9% 2.6% 25%
state.append_pruned_1k 266.09 ms 258.29 ms -2.9% 2.9% 25%
tui.poll_absorb_5k 55.98 ms 57.62 ms +2.9% 15.6% 15%
schedule.pressure_20k_48h 9.70 ms 9.97 ms +2.8% 18.6% 103.1% (declared 15%)
schedule.cold_build_100k 267.58 ms 260.22 ms -2.7% 4.0% 15%
json.loads_wide_int_2k 122.54 ms 119.18 ms -2.7% 3.6% 15%
cronexpr.occurrences_1k 7.42 ms 7.22 ms -2.7% 2.2% 134.8% (declared 15%)
fingerprint.job_set_id_10k 170.72 ms 166.34 ms -2.6% 4.2% 15%
config.interp_2k 36.68 ms 35.75 ms -2.6% 5.7% 27.26% (declared 15%)
webui.filter_keys_500 36.20 ms 37.10 ms +2.5% 6.1% 25%
redact.clean_20k 11.70 ms 11.41 ms -2.5% 4.6% 85.49% (declared 15%)
startup.jobcli_state_get 67.65 ms 65.78 ms -2.4% 2.3% 25%
resources.usage_from_dict_500 50.02 ms 48.82 ms -2.4% 4.0% 15%
cronexpr.parse_complex 12.00 ms 11.71 ms -2.4% 4.6% 83.36% (declared 15%)
state.list_records_2k 16.67 ms 17.06 ms +2.4% 9.8% 59.99% (declared 15%)
dag.advance_quiescent_chain 38.08 ms 38.95 ms +2.3% 8.5% 25%
state.fanout_gather_100 18.99 ms 19.42 ms +2.3% 10.9% 52.66% (declared 25%)
webui.render_rows_500 10.14 ms 10.37 ms +2.3% 9.5% 25%
state.list_records_warm 76.61 ms 78.34 ms +2.3% 5.5% 15%
tui.palette_type_5k 94.92 ms 97.04 ms +2.2% 22.6% 15%
webui.logo_recovery 54.60 ms 55.80 ms +2.2% 3.2% 25%
startup.import_tui 65.19 ms 65.82 ms +2.2% 1.2% 25%
prometheus.first_scrape_after_reload_500 95.87 ms 97.85 ms +2.1% 9.7% 15%
loop.sla_pass_5k_x10 77.07 ms 78.55 ms +1.9% 5.2% 15%
job.stream_capture_120k 18.97 ms 18.61 ms -1.9% 3.0% 52.73% (declared 15%)
redact.adversarial_10k 20.42 ms 20.04 ms -1.9% 3.1% 48.98% (declared 15%)
schedule.reseed_local_20k 52.11 ms 53.07 ms +1.8% 4.0% 19.19% (declared 15%)
cronexpr.next_simple 21.15 ms 21.55 ms +1.8% 4.5% 47.27% (declared 15%)
state.boot_rehydrate_populated 24.83 ms 25.29 ms +1.8% 5.7% 40.27% (declared 15%)
webapi.sse_tail_pump_4x20k 51.79 ms 52.73 ms +1.8% 2.3% 15%
statsd.emit_2k 9.58 ms 9.41 ms -1.8% 2.3% 104.4% (declared 25%)
state.list_documents_600 39.48 ms 40.18 ms +1.8% 3.1% 30.4% (declared 15%)
schedule.suggest_slot_5k_x20 42.17 ms 42.92 ms +1.8% 3.1% 15%
webapi.jobs_payload_500 27.12 ms 27.58 ms +1.7% 5.8% 36.87% (declared 15%)
webui.render_fleet_15x400 13.84 ms 14.07 ms +1.7% 6.4% 25%
json.roundtrip_3k 301.13 ms 296.38 ms -1.6% 2.1% 15%
prometheus.render_500 9.12 ms 9.26 ms +1.5% 5.3% 109.7% (declared 15%)
cluster.derive_cold_50 84.68 ms 85.98 ms +1.5% 4.4% 15%
state.artifact_put_distinct_2k 126.19 ms 124.24 ms -1.5% 6.3% 25%
webui.rows_layout_200 40.20 ms 39.60 ms -1.5% 10.4% 25%
cluster.peer_serve_400 85.65 ms 86.91 ms +1.5% 3.0% 15%
webapi.auth_scope_20k 48.04 ms 48.73 ms +1.4% 2.8% 20.82% (declared 15%)
pools.admit_cycle_1k 83.22 ms 84.39 ms +1.4% 6.2% 25%
pair.qr_encode_14 138.74 ms 140.68 ms +1.4% 3.8% 15%
config.parse_dir_cold_200 137.53 ms 139.43 ms +1.4% 4.5% 25%
tui.wallboard_paint_5k 101.84 ms 100.52 ms -1.3% 6.2% 15%
tui.week_rows_500 78.07 ms 79.05 ms +1.3% 1.1% 15%
job.report_noop_100k 27.37 ms 27.70 ms +1.2% 2.4% 18.27% (declared 15%)
webui.timeline_500 34.40 ms 34.00 ms -1.2% 4.2% 25%
startup.import_daemon 120.03 ms 118.26 ms -1.1% 1.5% 25%
config.parse_yaml_rich_20 132.56 ms 134.04 ms +1.1% 2.9% 15%
webui.swim_400x49 45.20 ms 45.70 ms +1.1% 3.4% 25%
fingerprint.job_set_id_rich_2k 139.23 ms 137.72 ms -1.1% 6.5% 15%
webui.tail_term_2k 37.10 ms 37.50 ms +1.1% 12.7% 25%
schedule.lint_2500_zoned 33.09 ms 32.74 ms -1.1% 1.3% 15%
schedule.next_fires_2k 12.81 ms 12.94 ms +1.0% 2.7% 78.07% (declared 15%)
tui.table_paint_5k 94.54 ms 95.51 ms +1.0% 4.9% 15%
startup.import_cronexpr 17.12 ms 16.64 ms +1.0% 2.6% 37.34% (declared 25%)
webui.palette_keys_500 30.90 ms 30.60 ms -1.0% 3.6% 25%
tui.view_sort_5k 68.89 ms 68.22 ms -1.0% 2.2% 15%
resources.monitor_stop_100 180.15 ms 181.87 ms +1.0% 7.1% 25%
dag.mapped_drain_256 18.88 ms 19.06 ms +1.0% 9.2% 52.98% (declared 25%)
startup.validate_config_100 110.97 ms 109.50 ms -0.9% 0.4% 25%
webapi.gzip_body_500 33.95 ms 34.26 ms +0.9% 3.0% 29.46% (declared 15%)
startup.mcp_bridge 65.20 ms 65.15 ms +0.9% 1.5% 25%
schedule.due_pass_100k 8.67 ms 8.59 ms -0.9% 16.2% 115.4% (declared 25%)
job.stream_passthrough_240k 74.97 ms 75.61 ms +0.9% 3.4% 15%
tui.dag_graph_paint_2k 131.44 ms 132.55 ms +0.8% 1.6% 15%
tui.log_search_20k 8.65 ms 8.71 ms +0.8% 2.9% 115.6% (declared 15%)
webapi.dag_run_poll_1k 48.34 ms 48.70 ms +0.8% 8.0% 25%
state.artifact_get_newest 8.69 ms 8.75 ms +0.7% 3.1% 57.54% (declared 25%)
tui.tail_ingest_30k 92.65 ms 93.32 ms +0.7% 3.1% 15%
config.reload_warm_50 22.54 ms 22.71 ms +0.7% 4.4% 44.36% (declared 25%)
webui.sort_500 30.90 ms 30.70 ms -0.6% 9.1% 25%
dag.advance_quiescent_1k 38.67 ms 38.92 ms +0.6% 6.7% 25%
state.artifact_get_oldest_2k 96.16 ms 95.56 ms -0.6% 1.5% 25%
dag.build_chain_10k 16.22 ms 16.12 ms -0.6% 11.5% 61.66% (declared 15%)
config.parse_yaml_300 89.80 ms 89.25 ms -0.6% 4.3% 15%
webui.rows_diff_500 33.10 ms 33.30 ms +0.6% 1.6% 25%
tui.fleet_paint_15x400 86.39 ms 85.89 ms -0.6% 0.8% 15%
webui.render_term_5k 69.50 ms 69.10 ms -0.6% 3.9% 25%
webui.select_move_500 35.70 ms 35.50 ms -0.6% 17.8% 25%
tui.drawer_paint_5k 54.43 ms 54.73 ms +0.6% 3.0% 15%
webui.week_walk_500x20 37.30 ms 37.50 ms +0.5% 3.1% 25%
loop.stall_mcp_jobs_500 4.33 ms 4.36 ms +0.5% 9.8% Not enforced
state.lease_renew_200 104.15 ms 103.61 ms -0.5% 6.5% 48.01% (declared 25%)
cronexpr.next_complex 8.44 ms 8.48 ms +0.5% 2.0% 118.6% (declared 15%)
dag.adopt_scan_500 42.45 ms 42.65 ms +0.5% 5.2% 47.11% (declared 25%)
loop.stall_completions_500 4.82 ms 4.80 ms -0.5% 3.5% 103.7% (declared 25%)
startup.import_config 68.14 ms 67.86 ms +0.5% 0.6% 25%
loop.stall_jobs_500 9.98 ms 10.02 ms +0.4% 6.4% Not enforced
state.inventory_2k_streams 67.43 ms 67.13 ms -0.4% 4.3% Not enforced
webui.ledger_analyze_500x600 48.50 ms 48.30 ms -0.4% 2.9% 25%
state.artifact_list_churn_x500 28.67 ms 28.79 ms +0.4% 3.0% 34.88% (declared 25%)
mcp.fleet_15x400 93.57 ms 93.19 ms -0.4% 8.8% 15%
mcp.list_jobs_page_500 75.89 ms 75.59 ms -0.4% 2.1% 15%
loop.idle_wake_rate 8.86 ms 8.82 ms -0.4% 1.8% 56.46% (declared 25%)
schedule.reseed_100k 114.47 ms 114.88 ms +0.4% 4.5% 15%
dag.build_layered_10k 27.81 ms 27.71 ms -0.4% 9.5% 35.96% (declared 15%)
cluster.fleet_view_15x400 52.14 ms 51.97 ms -0.3% 5.4% 25%
mcp.handle_200 82.42 ms 82.68 ms +0.3% 1.7% 15%
prometheus.counter_snapshot_2k 69.96 ms 70.17 ms +0.3% 6.8% 15%
jobapi.sem_denied_64x10 35.06 ms 35.14 ms +0.2% 3.1% 25%
startup.daemon_first_pass_2k 834.19 ms 835.48 ms +0.2% 1.6% 25%
webapi.sse_burst_20k 22.80 ms 22.85 ms +0.2% 3.0% 21.93% (declared 15%)
cluster.job_owner_2k 30.51 ms 30.45 ms -0.2% 3.4% 32.78% (declared 15%)
loop.stall_launch_herd_8k 44.96 ms 45.05 ms +0.2% 13.4% Not enforced
config.jobconfig_3k 30.42 ms 30.37 ms -0.2% 4.9% 32.87% (declared 15%)
push.seal_500 53.15 ms 53.07 ms -0.1% 3.2% 18.82% (declared 15%)
mem.rss_daemon_web_100 53.54 MB 53.49 MB -0.1% 0.3% 25%
tui.mark_idle_300 142.14 ms 142.04 ms -0.1% 2.6% 15%
dag.recover_plan_from_1k 58.63 ms 58.60 ms -0.1% 3.8% 15%
mem.rss_daemon_10k 144.02 MB 143.94 MB -0.1% 0.1% 25%
webapi.index_gzip_bytes 188.24 KB 188.32 KB +0.0% 0.0% 15%
webapi.index_bytes 657.38 KB 657.66 KB +0.0% 0.0% 15%
mem.rss_daemon_import 38.81 MB 38.81 MB +0.0% 0.1% 25%
mem.rss_version 14.47 MB 14.47 MB -0.0% 0.0% 25%
mem.launch_reap_steady_20x55 0.38 MB 0.38 MB -0.0% 0.0% 15%
mem.parse_peak_rich_20 4.21 MB 4.21 MB +0.0% 0.0% 15%
config.reload_warm_include_50 49.46 ms 49.46 ms +0.0% 5.4% 25%
mem.gc_manifest_scan_128x2k 14.32 MB 14.32 MB -0.0% 0.0% 15%
webui.append_line_5k 8.0 us 8.0 us +0.0% 0.0% 25%
webui.radar_walk_500x150 35.30 ms 35.30 ms +0.0% 1.9% 25%
dag.run_doc_bytes_1k 228.53 KB 228.53 KB +0.0% 0.0% 5%
dag.mapped_doc_bytes_1k 725.81 KB 725.81 KB +0.0% 0.0% 5%
tui.frame_bytes_5k 60.22 KB 60.22 KB +0.0% 0.0% 15%
webui.log_count_5k 50.0 us 50.0 us +0.0% 0.0% 4000% (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%
webapi.activity_bytes_500 2569.83 KB 2569.83 KB +0.0% 0.0% 15%
webapi.activity_capped_bytes_500 411.18 KB 411.18 KB +0.0% 0.0% 15%
webapi.fleet_bytes_15x400 963.62 KB 963.62 KB +0.0% 0.0% 15%
cluster.peer_bytes_512 83.55 KB 83.55 KB +0.0% 0.0% 15%
prometheus.counter_snapshot_bytes_2k 620.59 KB 620.59 KB +0.0% 0.0% 15%
prometheus.exposition_bytes_500 821.17 KB 821.17 KB +0.0% 0.0% 15%
mcp.list_jobs_bytes_500 155.54 KB 155.54 KB +0.0% 0.0% 15%
mcp.fleet_bytes_15x400 2052.76 KB 2052.76 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.1% 31.26% (declared 15%)
mem.retired_output_1k 0.12 MB 0.12 MB +0.0% 0.0% 15%
mem.run_history_series_5 9.58 MB 9.58 MB +0.0% 0.0% 15%
mem.jobconfig_envfile_2k 16.36 MB 16.36 MB +0.0% 0.0% 15%
mem.cluster_view_50x400 11.64 MB 11.64 MB +0.0% 0.0% 15%
mem.tui_state_5k 2.24 MB 2.24 MB +0.0% 0.0% 15%

What's Changed

  • Bump the github-actions group across 2 directories with 6 updates by @dependabot[bot] in #60
  • Bump the docker group across 1 directory with 6 updates by @dependabot[bot] in #61

Full Changelog: 1.2.72...1.2.73