Repository navigation
1.2.65
- A run that has ended keeps its outcome until the daemon records it. A
concurrencyPolicy: Replacelaunch leaves that run as it is, aForbid
launch starts its job, and a pooled run that finishes while the pool
scheduler renews its lease keeps its result.POST /jobs/{name}/cancel
and the MCPcron_cancel_jobtool ask the runs that have not ended to
stop. When every run has ended, the request returns409and the tool
reports an error. - When the daemon cancels a run, it waits up to
killTimeoutfor the job's
own process and stops waiting when that process exits. On every platform
except Windows, the forced kill of the rest of the process group follows
within about 0.25 seconds. A workload that needs all ofkillTimeoutto
shut down must be the job's own process: an argv list, orexecas the
last step of a shell command. - The daemon records a canceled or timed-out run within a time limit when a
process that the run started holds its output open. A canceled run has
30 seconds. A run that itsexecutionTimeoutended, or a verification
check that reachedverify.timeout, has 30 seconds for each stream. The
daemon then logs a warning, keeps the output captured so far, and records
the run. executionTimeoutbounds a run until its captured output closes. When the
job's own process exits inside the deadline and a process that it started
still holds a captured stream open at the deadline, the daemon times the
run out and records exit code-100.- When the operating system refuses the daemon's signal to a job's process,
such asEPERMfor a command thatsudoruns, the daemon logs a warning
and completes the cancel sequence. The process keeps running until it
exits by itself. - A recorded run's
finished_atis the instant the run ended, andranAt
and the archived output carry the same instant. A canceled or timed-out
run that is recorded after a later run of the same job leaves the later
run as the job's last run.onlyIfLastSucceeded,maxTimeSinceSuccess,
and missed-run catch-up go by the instant each run ended. - When two runs of a job overlap, the success of the earlier run leaves the
retries of the later scheduled run in place until that run has scheduled
a retry. Once a retry is pending or its attempt is running, a success of
any run of the job ends the retry sequence. A run canceled through
POST /jobs/{name}/cancelorcron_cancel_jobfollows the same rule. - When
concurrencyPolicy: Forbiddrops a scheduled fire of a job that has
nopool, the job's retry sequence stays as it is. A scheduled fire of a
pooled job ends the job's retry sequence before it queues its own entry. - When the store write that records a pooled entry's completion fails, the
pool scheduler writes it again on its next pass and on each lease
heartbeat, every five seconds. GET /pools,POST /pools/{name}/queue/{key}/cancel, and
POST /jobs/{name}/startfor a pooled job answer503with
pool state is unavailablewhenever pool state cannot be read or
written.GET /jobsthen answers200, and thepoolobject of each
pooled job carriesqueueUnavailable: true. The MCPcron_list_pools,
cron_cancel_queued, andcron_run_jobtools report the503as a tool
error with the same text. The daemon logs a warning and drops a scheduled
fire of a pooled job that finds pool state unavailable.- Once a run is recorded and its reports are sent, the daemon frees the
run's process handles and the copy of its output that reports read. - A workflow whose configuration lists a task before its upstreams settles a
failure in one scheduler pass. - The workflow retention pass lists a workflow's runs once and deletes them
in batches of up to 32, each run under its lease. It keeps a run that a
recovery in preparation or an open recovery batch references. Under
state.maxOpsPerSecondof about 2 or lower, or on a slow store, a busy
workflow can hold more thanretainRunsfinished runs, and a scheduled
workflow run can start late. - A date-range recovery takes the lease of each source run before it writes
its batch. While retention or another recovery holds the lease of a
source run, the request answers409with
source run is busy; retry shortly. When a source run is gone or its key
holds another run, the message is
recovery preview is stale; preview again. POST /dags/{name}/recover,POST /dags/{name}/runs/{run_key}/recover,
andPOST /dags/{name}/backfillanswer503whenever the state store
cannot answer: on a store I/O error or a timeout, on a document that
cannot be read, and while the configured store has not started. The
message isrecovery state is unavailableor
backfill state is unavailable. After a fault during a backfill, the
same request creates the rest of the runs. The MCP
cron_preview_recovery,cron_recover_dag, andcron_backfill_dag
tools report these answers as tool errors.- Publishing an artifact or an XCom value costs the same at any number of
names in the scope. Workflow recovery's limit of 10,000 artifacts counts
names. - Nodes that share a state store need synchronized clocks, and they should
move to this release together. Until they do, a node on the previous
release can answer not found for an artifact or an XCom value while a
node on this release republishes it. - Planning a workflow rerun from a task follows each dependency once.
- A configuration directory of more than 1,024 files reloads by reparsing
only the files that changed. An include tree of that size reparses each
changed file, each file that includes it, and the entry file. - A configuration file, an included file, or an
env_filethat changes
while the daemon loads the configuration is parsed again. So is a
configuration directory when a file joins or leaves it during the parse. - A source that cannot be read twice (a pipe, a FIFO, a terminal,
/dev/stdin, or/dev/fd/N) is read again only when the file that names
it is parsed again. Jobs keep the environment read from a piped
env_fileacross a reload request and across an edit to another file. - When the configuration named by
-cis a pipe, a FIFO, or a terminal,
only a reload request (SIGHUPorcronstable service reload) reads it
again. When another source changes, the once-a-minute check logs a
warning and keeps the loaded configuration. A reload that reads zero
bytes from such a configuration does the same. In both cases,
cronstable_config_last_reload_successfulreads 0. - A file that two files of one include tree both include is loaded under
each of them and is no cycle. Only a file that holdsdefaultsalone can
be shared: a shared file that defines a job, a pool, or awebor
loggingsection fails the load. A file that includes itself, directly
or through other files, fails withinclude cycle detected at <path>. - A configuration file, a file of a configuration directory, or an included
file that is not valid UTF-8 is a configuration error. The message is
Could not load config file '<path>':followed by the decoding error.
Windows PowerShell 5.1 writes little-endian UTF-16 when it redirects
output to a file, which is the usual cause. - The file that
cluster.etcd.password.fromFilenames is a configuration
source, as anenv_fileis: the once-a-minute check parses the
configuration again when the file changes. Change the password on the
etcd server before you replace the file. - Configuration parse time grows in proportion to the number of keys in a
mapping. Apoolsorweb.headersblock with 2,000 entries loads in
under a second. - The jobs and workflow tasks of one configuration file share one read of an
env_filethat they name or inherit fromdefaults. cronstable --validate-configandcronstable --job-set-idexit without
loading psutil. They load asyncio only for a configuration that has a
pushsection or enablesweb.bonjour.GET /activitytakes two optional query parameters that cap the jobs in
the response.jobs=Nreturns at mostNjobs: the firstNin
configuration order, or the firstNby name withsort=name. Each
dashboard draws at most 80 heatmap rows and sends that cap.- The daemon compresses the dashboard page with zlib at level 9 for the
first browser that accepts gzip and serves the stored result after that.
Such a browser downloads about 180 KB. The page answers
304 Not Modifiedto anIf-None-Matchheader that carries itsETag
in weak form or in a list. - The MCP
cron_list_jobstool builds full job rows only for the page that
it returns, so the cost of a call follows the page size. - Some terminals send
Altwith a navigation key as anEscahead of the
key's own sequence. On every platform except Windows, the terminal
dashboard reads that as the plain key, and the panel or drawer that is on
top stays open. - Except on Windows, the terminal dashboard asks the terminal to mark each
paste (bracketed paste), and marked text is text only. The text field
with the focus takes it without its line breaks and other control
characters, and no pasted character acts as a shortcut. The Windows
console marks no paste, so a pasted line break, tab, or escape arrives
asEnter,Tab, orEsc. - On Windows, the terminal dashboard reads key events from the console. A
character outside the Basic Multilingual Plane, such as an emoji, arrives
as one character, and a character composed withAltand the numeric
keypad is delivered.Shift-Tabsteps the tabs of the job drawer and the
state inspector backward. The dashboard restores the console's input mode
when it exits, including after an error. - In the web dashboard, a job's countdown and its Next at time stay tied
to the/jobsresponse that delivered them. When the daemon answers a
poll with304 Not Modified, the dashboard keeps the jobs it holds, and
their countdowns run on. After the computer sleeps or its clock is set,
the next poll takes a full response and restarts the countdowns from it.
The Next at label names its day from the browser's local date.
Performance compared with 1.2.64
Regression check: passed for 189 of 191 metrics with regression limits. The remaining metrics could not be compared.
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 (197 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.64 | 1.2.65 | Change | Noise (±) | Regression limit |
|---|---|---|---|---|---|
| dag.gc_excess_60 | 1.192 s | 59.62 ms | -95.0% | 2.8% | 25% |
| state.artifact_put_distinct_2k | 496.71 ms | 25.31 ms | -94.9% | 1.8% | 25% |
| dag.recover_plan_from_1k | 1.314 s | 98.09 ms | -92.5% | 1.3% | 15% |
| pools.admit_cycle_1k | 1.247 s | 126.68 ms | -89.8% | 0.7% | 25% |
| webui.dirty_frame_rows_500 | 10.24 ms | 1.22 ms | -88.1% | 6.4% | Not enforced |
| state.artifact_get_oldest_2k | 544.58 ms | 70.92 ms | -87.0% | 0.8% | 25% |
| mcp.list_jobs_page_500 | 728.51 ms | 118.17 ms | -83.8% | 1.5% | 15% |
| webui.boot_rows_500 | 731.70 ms | 469.30 ms | -35.9% | 4.9% | Not enforced |
| mcp.list_jobs_500 | 178.44 ms | 114.57 ms | -35.8% | 1.2% | 15% |
| config.parse_yaml_rich_20 | 300.65 ms | 213.79 ms | -28.9% | 0.5% | 15% |
| startup.validate_config_100 | 202.64 ms | 163.02 ms | -21.2% | 0.7% | 25% |
| startup.job_set_id_100 | 206.54 ms | 168.70 ms | -19.8% | 0.7% | 25% |
| mem.launch_reap_steady_20x55 | 0.44 MB | 0.37 MB | -15.2% | 0.0% | 15% |
| webapi.index_gzip_bytes | 213.63 KB | 181.36 KB | -15.1% | 0.0% | 15% |
| state.artifact_get_newest | 11.23 ms | 9.69 ms | -13.7% | 2.0% | 44.51% (declared 25%) |
| loop.stall_launch_herd_8k | 54.38 ms | 61.53 ms | +13.1% | 2.1% | Not enforced |
| config.parse_yaml_3k | 1.580 s | 1.435 s | -9.2% | 0.6% | 15% |
| startup.import_cronexpr | 24.41 ms | 25.01 ms | +8.8% | 1.0% | 25% |
| config.parse_yaml_300 | 157.55 ms | 143.97 ms | -8.6% | 0.4% | 15% |
| config.reload_warm_include_50 | 79.83 ms | 74.06 ms | -7.2% | 0.4% | 25% |
| state.derive_max_cold | 12.77 ms | 13.68 ms | +7.1% | 1.0% | 78.33% (declared 15%) |
| config.reload_warm_50 | 36.61 ms | 34.13 ms | -6.8% | 1.1% | 27.32% (declared 25%) |
| state.list_records_2k | 14.49 ms | 15.45 ms | +6.6% | 4.1% | 69.01% (declared 15%) |
| job.launch_reap_2k | 108.50 ms | 115.08 ms | +6.1% | 1.2% | 15% |
| startup.daemon_first_pass_2k | 1.423 s | 1.341 s | -5.9% | 0.3% | 25% |
| job.launch_fail_retry_2k | 125.69 ms | 131.86 ms | +4.9% | 1.3% | 15% |
| loop.sla_pass_5k_x10 | 126.66 ms | 132.75 ms | +4.8% | 3.3% | 15% |
| state.boot_rehydrate_populated | 26.05 ms | 27.14 ms | +4.2% | 1.3% | 38.38% (declared 15%) |
| config.reload_warm_dir_1k | 182.37 ms | 188.77 ms | +3.5% | 0.3% | 25% |
| webui.rows_layout_200 | 57.40 ms | 55.40 ms | -3.5% | 3.1% | 25% |
| state.fanout_gather_100 | 4.70 ms | 4.85 ms | +3.1% | 3.3% | 212.8% (declared 25%) |
| webui.tick_500 | 81.50 ms | 79.30 ms | -2.7% | 5.0% | 25% |
| config.reload_gc_100k | 1.990 s | 1.941 s | -2.5% | 1.6% | 25% |
| job.report_noop_100k | 41.34 ms | 42.36 ms | +2.4% | 0.7% | 15% |
| tui.poll_absorb_5k | 87.73 ms | 85.62 ms | -2.4% | 1.7% | 15% |
| tui.wallboard_paint_5k | 161.21 ms | 157.36 ms | -2.4% | 1.8% | 15% |
| loop.stall_mcp_jobs_500 | 6.69 ms | 6.84 ms | +2.4% | 1.8% | Not enforced |
| webapi.jobs_payload_500 | 41.92 ms | 42.90 ms | +2.3% | 2.2% | 23.85% (declared 15%) |
| loop.stall_metrics_2000 | 24.10 ms | 24.66 ms | +2.3% | 2.4% | Not enforced |
| prometheus.first_scrape_after_reload_500 | 162.41 ms | 166.10 ms | +2.3% | 1.9% | 15% |
| loop.idle_wake_rate | 12.23 ms | 12.49 ms | +2.1% | 2.3% | 40.88% (declared 25%) |
| webui.radar_walk_500x150 | 52.10 ms | 51.00 ms | -2.1% | 1.8% | 25% |
| config.jobconfig_3k | 50.18 ms | 49.23 ms | -1.9% | 1.7% | 19.93% (declared 15%) |
| state.append_pruned_1k | 38.91 ms | 39.64 ms | +1.9% | 2.3% | 25% |
| state.gc_sweep_2k_streams | 20.81 ms | 20.42 ms | -1.9% | 2.5% | 72.07% (declared 25%) |
| config.parse_dir_cold_200 | 243.32 ms | 238.96 ms | -1.8% | 1.1% | 25% |
| webui.filter_keys_500 | 57.80 ms | 56.80 ms | -1.7% | 2.7% | 25% |
| schedule.pressure_20k_48h | 13.98 ms | 14.22 ms | +1.7% | 2.5% | 71.52% (declared 15%) |
| webui.select_move_500 | 64.10 ms | 63.00 ms | -1.7% | 6.3% | 25% |
| dag.adopt_scan_500 | 50.45 ms | 51.24 ms | +1.6% | 2.0% | 39.64% (declared 25%) |
| cronexpr.parse_complex | 18.18 ms | 17.91 ms | -1.5% | 2.9% | 55.02% (declared 15%) |
| dag.mapped_drain_256 | 15.57 ms | 15.35 ms | -1.4% | 2.4% | 64.23% (declared 25%) |
| webui.wallboard_poll_500 | 55.80 ms | 55.00 ms | -1.4% | 3.7% | 25% |
| tui.palette_type_5k | 152.98 ms | 150.83 ms | -1.4% | 1.2% | 15% |
| dag.full_sweep_50x200 | 106.30 ms | 104.81 ms | -1.4% | 4.4% | 25% |
| statsd.emit_2k | 7.14 ms | 7.24 ms | +1.4% | 0.5% | 140% (declared 25%) |
| redact.adversarial_10k | 29.63 ms | 30.03 ms | +1.4% | 0.6% | 33.75% (declared 15%) |
| webui.sort_500 | 52.70 ms | 52.00 ms | -1.3% | 3.2% | 25% |
| mcp.query_metrics_500 | 115.95 ms | 114.50 ms | -1.3% | 1.5% | 25% |
| schedule.due_pass_100k | 16.32 ms | 16.11 ms | -1.3% | 2.7% | 61.28% (declared 25%) |
| dag.finish_fanin_20x1k | 57.08 ms | 57.77 ms | +1.2% | 1.8% | 25% |
| config.parse_crontab_1k | 9.83 ms | 9.71 ms | -1.2% | 2.2% | 101.8% (declared 15%) |
| config.interp_2k | 52.77 ms | 52.16 ms | -1.2% | 0.9% | 18.95% (declared 15%) |
| state.list_records_warm | 89.88 ms | 90.90 ms | +1.1% | 2.6% | 15% |
| mem.gc_pause_100k | 142.12 ms | 143.70 ms | +1.1% | 0.4% | 25% |
| webui.render_fleet_15x400 | 22.64 ms | 22.40 ms | -1.1% | 2.8% | 25% |
| webapi.resources_poll_20x240 | 120.93 ms | 122.18 ms | +1.0% | 1.3% | 15% |
| state.list_documents_600 | 33.68 ms | 34.03 ms | +1.0% | 1.7% | 35.63% (declared 15%) |
| job.stream_passthrough_240k | 117.56 ms | 118.74 ms | +1.0% | 1.2% | 15% |
| cluster.derive_cold_50 | 130.40 ms | 131.69 ms | +1.0% | 1.1% | 15% |
| mcp.fleet_15x400 | 146.67 ms | 148.09 ms | +1.0% | 1.4% | 15% |
| state.lease_renew_200 | 21.62 ms | 21.41 ms | -1.0% | 1.2% | 231.3% (declared 25%) |
| loop.stall_completions_500 | 6.64 ms | 6.70 ms | +1.0% | 2.6% | 75.29% (declared 25%) |
| webui.rows_diff_500 | 53.20 ms | 52.70 ms | -0.9% | 2.0% | 25% |
| tui.dag_graph_paint_2k | 183.78 ms | 182.07 ms | -0.9% | 1.4% | 15% |
| pools.enqueue_burst_200 | 103.10 ms | 102.15 ms | -0.9% | 2.1% | 25% |
| jobapi.sem_denied_64x10 | 39.68 ms | 39.32 ms | -0.9% | 0.9% | 25% |
| state.artifact_list_churn_x500 | 35.69 ms | 35.37 ms | -0.9% | 0.6% | 28.02% (declared 25%) |
| webapi.dags_poll_1k | 111.43 ms | 112.42 ms | +0.9% | 0.5% | 15% |
| schedule.lint_2500_zoned | 52.43 ms | 51.99 ms | -0.8% | 3.1% | 15% |
| redact.secrets_5k | 17.55 ms | 17.69 ms | +0.8% | 0.8% | 56.99% (declared 15%) |
| state.mutate_document_1k | 112.43 ms | 113.35 ms | +0.8% | 1.3% | 44.47% (declared 25%) |
| mem.rss_daemon_import | 37.66 MB | 37.96 MB | +0.8% | 0.1% | 25% |
| mem.rss_daemon_web_100 | 52.46 MB | 52.88 MB | +0.8% | 0.1% | 25% |
| schedule.cold_build_100k | 392.88 ms | 395.97 ms | +0.8% | 3.0% | 15% |
| cronexpr.next_simple | 32.39 ms | 32.14 ms | -0.8% | 1.4% | 30.87% (declared 15%) |
| ical.render_500x7d | 42.61 ms | 42.29 ms | -0.8% | 2.1% | 23.47% (declared 15%) |
| tui.log_restyle_5k | 25.34 ms | 25.52 ms | +0.7% | 0.8% | 39.47% (declared 15%) |
| cronexpr.next_dst_2k | 32.89 ms | 32.65 ms | -0.7% | 4.1% | 30.41% (declared 15%) |
| startup.python_baseline | 16.31 ms | 16.20 ms | -0.7% | 1.9% | Not enforced |
| webapi.sse_burst_20k | 39.89 ms | 40.16 ms | +0.7% | 1.3% | 15% |
| webapi.index_bytes | 631.03 KB | 635.35 KB | +0.7% | 0.0% | 15% |
| dag.plan_claim_10k | 12.23 ms | 12.31 ms | +0.7% | 3.2% | 81.79% (declared 15%) |
| webapi.sse_tail_pump_4x20k | 90.74 ms | 91.35 ms | +0.7% | 1.7% | 15% |
| tui.week_rows_500 | 110.54 ms | 109.80 ms | -0.7% | 0.5% | 15% |
| startup.mcp_bridge | 100.28 ms | 99.61 ms | -0.7% | 1.2% | 25% |
| json.loads_wide_int_2k | 203.59 ms | 202.25 ms | -0.7% | 0.9% | 15% |
| cluster.parse_summaries_6k | 71.73 ms | 72.19 ms | +0.6% | 1.9% | 15% |
| schedule.reseed_100k | 167.93 ms | 169.00 ms | +0.6% | 1.8% | 15% |
| fingerprint.job_set_id_10k | 259.86 ms | 261.46 ms | +0.6% | 0.6% | 15% |
| mcp.handle_200 | 123.06 ms | 123.81 ms | +0.6% | 0.4% | 15% |
| webui.palette_keys_500 | 49.80 ms | 50.10 ms | +0.6% | 2.1% | 25% |
| webapi.dag_run_poll_1k | 80.06 ms | 80.53 ms | +0.6% | 0.8% | 25% |
| resources.monitor_stop_100 | 148.46 ms | 147.61 ms | -0.6% | 2.0% | 25% |
| startup.jobcli_state_get | 102.75 ms | 102.14 ms | -0.6% | 1.3% | 25% |
| json.roundtrip_3k | 504.58 ms | 501.84 ms | -0.5% | 1.3% | 15% |
| webui.timeline_500 | 55.70 ms | 56.00 ms | +0.5% | 1.1% | 25% |
| state.depends_on_past_gate | 1.77 ms | 1.78 ms | +0.5% | 3.9% | 113.1% (declared 25%) |
| dag.build_layered_10k | 44.84 ms | 45.07 ms | +0.5% | 2.1% | 22.3% (declared 15%) |
| prometheus.render_500 | 15.20 ms | 15.28 ms | +0.5% | 1.8% | 65.79% (declared 15%) |
| resources.usage_from_dict_500 | 77.94 ms | 77.56 ms | -0.5% | 2.3% | 15% |
| startup.import_config | 94.28 ms | 93.79 ms | -0.5% | 1.7% | 25% |
| cluster.peer_serve_400 | 133.83 ms | 134.46 ms | +0.5% | 0.6% | 15% |
| schedule.next_fires_2k | 20.04 ms | 19.95 ms | -0.5% | 2.0% | 49.9% (declared 15%) |
| dag.advance_quiescent_1k | 63.25 ms | 63.55 ms | +0.5% | 0.4% | 25% |
| startup.version | 51.54 ms | 51.58 ms | +0.5% | 1.3% | 25% |
| state.append_1k | 52.51 ms | 52.28 ms | -0.4% | 1.0% | 95.22% (declared 15%) |
| webui.render_rows_500 | 16.20 ms | 16.13 ms | -0.4% | 2.6% | 25% |
| job.stream_capture_120k | 29.75 ms | 29.62 ms | -0.4% | 1.4% | 33.61% (declared 15%) |
| dag.advance_quiescent_chain | 62.56 ms | 62.81 ms | +0.4% | 0.8% | 25% |
| tui.drawer_paint_5k | 89.97 ms | 89.61 ms | -0.4% | 1.2% | 15% |
| tui.view_sort_5k | 105.95 ms | 106.37 ms | +0.4% | 0.6% | 15% |
| push.seal_500 | 86.82 ms | 87.15 ms | +0.4% | 0.8% | 15% |
| cronexpr.test_match_200k | 21.50 ms | 21.58 ms | +0.4% | 1.2% | 46.51% (declared 15%) |
| webui.week_walk_500x20 | 55.80 ms | 55.60 ms | -0.4% | 0.7% | 25% |
| cluster.poll_round_15x400 | 137.07 ms | 136.61 ms | -0.3% | 0.7% | 15% |
| state.derive_max_warm | 121.30 ms | 121.71 ms | +0.3% | 2.2% | 15% |
| schedule.reseed_local_20k | 74.72 ms | 74.47 ms | -0.3% | 1.2% | 15% |
| dag.run_wide_500 | 91.13 ms | 91.43 ms | +0.3% | 1.4% | 25% |
| tui.tail_ingest_30k | 144.15 ms | 143.69 ms | -0.3% | 0.9% | 15% |
| prometheus.counter_snapshot_2k | 106.36 ms | 106.69 ms | +0.3% | 1.5% | 15% |
| schedule.suggest_slot_5k_x20 | 63.64 ms | 63.83 ms | +0.3% | 1.3% | 15% |
| cronexpr.occurrences_1k | 11.37 ms | 11.40 ms | +0.3% | 2.4% | 87.98% (declared 15%) |
| webui.render_term_5k | 98.10 ms | 98.40 ms | +0.3% | 1.4% | 25% |
| dag.list_dags_warm_x300 | 38.40 ms | 38.29 ms | -0.3% | 1.2% | 25% |
| tui.table_paint_5k | 142.00 ms | 142.42 ms | +0.3% | 1.5% | 15% |
| tui.mark_idle_300 | 226.59 ms | 227.26 ms | +0.3% | 1.6% | 15% |
| cluster.fleet_view_15x400 | 81.93 ms | 82.17 ms | +0.3% | 0.7% | 25% |
| dag.advance_waiting_mapped_1k | 106.38 ms | 106.08 ms | -0.3% | 0.8% | 25% |
| cronexpr.parse_simple | 36.91 ms | 36.81 ms | -0.3% | 1.1% | 27.09% (declared 15%) |
| push.seal_xwing_500 | 112.27 ms | 112.56 ms | +0.3% | 0.4% | 15% |
| push.fanout_8x100 | 143.39 ms | 143.76 ms | +0.3% | 1.2% | 15% |
| cronexpr.next_complex | 12.62 ms | 12.65 ms | +0.2% | 1.6% | 79.23% (declared 15%) |
| startup.import_daemon | 180.26 ms | 180.53 ms | +0.2% | 0.9% | 25% |
| dag.run_chain_100 | 127.08 ms | 127.38 ms | +0.2% | 0.6% | 25% |
| webapi.activity_build_500 | 161.60 ms | 161.97 ms | +0.2% | 1.0% | 15% |
| json.roundtrip_orjson_3k | 173.71 ms | 173.32 ms | -0.2% | 1.9% | 15% |
| redact.clean_20k | 18.22 ms | 18.18 ms | -0.2% | 2.3% | 54.88% (declared 15%) |
| mem.rss_version | 14.41 MB | 14.44 MB | +0.2% | 0.6% | 25% |
| webui.dag_tasks_2k | 49.50 ms | 49.40 ms | -0.2% | 2.5% | 25% |
| mem.rss_daemon_10k | 142.52 MB | 142.79 MB | +0.2% | 0.1% | 25% |
| jobapi.read_path_10k | 108.94 ms | 108.74 ms | -0.2% | 1.8% | 15% |
| schedule.duplicates_20k | 16.83 ms | 16.86 ms | +0.2% | 2.9% | 59.41% (declared 15%) |
| webui.tail_term_2k | 55.20 ms | 55.10 ms | -0.2% | 1.6% | 25% |
| fingerprint.job_set_id_rich_2k | 213.04 ms | 213.42 ms | +0.2% | 0.7% | 15% |
| webapi.summary_status_500 | 133.19 ms | 132.96 ms | -0.2% | 1.8% | 15% |
| state.inventory_2k_streams | 55.45 ms | 55.36 ms | -0.2% | 1.5% | Not enforced |
| dag.list_runs_warm | 7.96 ms | 7.98 ms | +0.2% | 1.4% | 25% |
| webapi.gzip_body_500 | 51.84 ms | 51.92 ms | +0.2% | 0.8% | 19.29% (declared 15%) |
| dag.fanin_barrier_1k | 164.63 ms | 164.87 ms | +0.1% | 0.6% | 25% |
| mem.jobconfig_2k | 1.62 MB | 1.62 MB | +0.1% | 0.6% | 30.94% (declared 15%) |
| startup.import_tui | 94.83 ms | 94.81 ms | +0.1% | 1.1% | 25% |
| pair.qr_encode_14 | 223.64 ms | 223.91 ms | +0.1% | 1.8% | 15% |
| dag.build_chain_10k | 25.64 ms | 25.61 ms | -0.1% | 1.9% | 39.01% (declared 15%) |
| webui.logo_recovery | 85.20 ms | 85.10 ms | -0.1% | 1.3% | 25% |
| cluster.job_owner_2k | 51.51 ms | 51.56 ms | +0.1% | 1.1% | 19.41% (declared 15%) |
| tui.log_search_20k | 13.27 ms | 13.26 ms | -0.1% | 1.6% | 75.37% (declared 15%) |
| tui.fleet_paint_15x400 | 121.01 ms | 121.08 ms | +0.1% | 0.7% | 15% |
| webapi.trends_build_5k | 123.24 ms | 123.19 ms | -0.0% | 2.4% | 15% |
| state.kv_roundtrip_200 | 24.97 ms | 24.96 ms | -0.0% | 1.8% | 40.05% (declared 15%) |
| webapi.pools_poll_4x130 | 92.73 ms | 92.76 ms | +0.0% | 0.7% | 25% |
| loop.stall_jobs_500 | 18.08 ms | 18.08 ms | +0.0% | 3.0% | Not enforced |
| mem.jobconfig_envfile_2k | 16.37 MB | 16.37 MB | +0.0% | 0.1% | 15% |
| mem.gc_manifest_scan_128x2k | 14.32 MB | 14.32 MB | +0.0% | 0.0% | 15% |
| mem.parse_peak_rich_20 | 4.21 MB | 4.21 MB | -0.0% | 0.0% | 15% |
| mem.tui_state_5k | 2.23 MB | 2.23 MB | +0.0% | 0.0% | 15% |
| webapi.auth_scope_20k | 69.97 ms | 69.97 ms | -0.0% | 1.7% | 15% |
| prometheus.exposition_bytes_500 | 821.15 KB | 821.17 KB | +0.0% | 0.0% | 15% |
| webui.append_line_5k | 12.0 us | 12.0 us | -0.0% | 0.0% | 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 | 80.0 us | 80.0 us | +0.0% | 0.0% | 2500% (declared 25%) |
| webui.ledger_analyze_500x600 | 75.90 ms | 75.90 ms | +0.0% | 1.2% | 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.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% |
| 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% |
| mcp.tools_list_bytes | 19.95 KB | 19.95 KB | +0.0% | 0.0% | 15% |
| mem.crontab_10k | 2.80 MB | 2.80 MB | +0.0% | 0.0% | 17.85% (declared 15%) |
| mem.retired_output_1k | 0.12 MB | 0.12 MB | +0.0% | 0.0% | 15% |
| mem.run_history_series_5 | 9.57 MB | 9.57 MB | +0.0% | 0.0% | 15% |
| mem.cluster_view_50x400 | 11.64 MB | 11.64 MB | +0.0% | 0.0% | 15% |
No percentage comparison available: webapi.activity_capped_bytes_500, webui.swim_400x49.
Full Changelog: 1.2.64...1.2.65