Skip to content

1.2.76

Latest

Choose a tag to compare

@github-actions github-actions released this 12 Nov 08:48
· 2 commits to main since this release
Immutable release. Only release title and notes can be modified.
  • The -fedora image is built on Fedora 45 and runs Python 3.15.
  • Jobs and workflows can declare run parameters under params:. Each
    parameter is a string, integer, number, or boolean with a default
    and optional constraints: allowed, minimum, maximum, pattern, and
    maxLength. A workflow without a schedule can mark a parameter
    required: true in place of a default. You supply values when you start
    a job, trigger a workflow, or run a backfill, and a run that gets none
    uses the defaults. A value that doesn't fit the declaration returns 400
    with the reason under paramErrors, and nothing starts.
  • A command reads its run's values from CRONSTABLE_PARAM_<NAME>
    environment variables, or by running cronstable param, which needs a
    state: section. Every workflow task, and every job that declares
    params, gets only its own run's values: a CRONSTABLE_PARAM_* variable
    in the daemon's environment isn't passed on. Anyone with the view scope
    can read a run's values, so keep secrets in secrets:. A parameter whose
    name ends in a word such as password or token is a configuration
    error.
  • With scoped tokens, supplying values needs the params scope as well as
    control. A token without params can still start, trigger, and
    backfill with the defaults, and gets a 403 when its request carries
    values. GET /whoami reports allScopes: false for a token that has
    view, control, and approve but not params.
  • A job run that was started with values is a single attempt outside the
    job's retry sequence. Its failure isn't retried, and its success or
    cancellation leaves a pending retry in place. The run records the
    requesting token's label as triggeredBy, and so does a workflow run
    that a trigger or a backfill created.
  • Workflows can branch. A task ends skipped when its command exits with a
    code listed in its skipExitCodes, or when a when: condition on a run
    parameter or an upstream XCom value isn't met, in which case the command
    never starts. A condition tests for equality with equals, notEquals,
    in, or notIn, or compares numbers with lessThan, lessThanOrEqual,
    greaterThan, or greaterThanOrEqual. The task's skipReason records
    why, and both dashboards show it.
  • A triggerRule joins the branches back together. none_failed runs a
    task when no upstream failed, even if some were skipped.
    none_failed_min_one_success also requires at least one upstream to
    succeed. all_done_min_one_failed runs a task only when an upstream
    failed, which makes it a failure handler. Under the default
    all_success, a skipped upstream skips the task too.
  • skipExitCodes and when: also work on sensors and mapped tasks, and
    when: works on approval gates. A gate whose condition isn't met is
    skipped without asking anyone to decide, and a mapped task whose condition
    isn't met creates no instances. A skip uses no retry attempt, runs no
    verify step, and fires neither onFailure nor onSuccess.
  • A when: condition is a configuration error when it names an undeclared
    parameter, compares against a value the parameter can never hold, or
    reads XCom from a task that is mapped or isn't upstream. A misspelled
    value such as equals: ful fails the load.
  • Every workflow task gets its run's logical date in
    CRONSTABLE_DAG_LOGICAL_DATE, as a UTC timestamp such as
    2026-01-05T02:00:00+00:00. A backfill, catch-up, or recovery run can
    start days after the date it stands for, so use this variable in a
    command that depends on the date. It's empty for a manual run that was
    triggered without a logicalDate.
  • A workflow that uses params:, when:, skipExitCodes, or a
    triggerRule other than all_success and all_done needs run engine
    level 2. An earlier release refuses such a configuration, and if it picks
    up a level 2 run, it ignores the run's conditions and parameters. On a
    state store that several nodes share, upgrade every node before any
    configuration uses these keys.
  • While a live host on a shared store runs a build below the level a
    workflow needs, GET /dags names the host in the workflow's
    fleetWarnings, and both dashboards show the warning.
  • GET /dags returns each task's skipExitCodes and when: conditions. A
    run document records engine: 2 for a workflow that needs level 2, and
    whenMet: true on a task whose conditions were met.
  • At load, the daemon warns about three parameter problems: a pattern
    with nested repeats such as (a+)+, which can take exponential time to
    check; a command that reads a CRONSTABLE_PARAM_* variable that its job
    or workflow doesn't declare; and a cmd.exe command that expands
    %CRONSTABLE_PARAM_<NAME>% for a string parameter with no allowed list
    or pattern, because cmd.exe can run part of the value as a command.
  • The daemon also warns at load about skipExitCodes that include 1,
    2, 126, or 127, because a broken command exits with those codes
    too, and about an all_success task that joins branches that can skip,
    because one skipped branch skips the join. A configuration with any of
    these warnings still loads.
  • POST /jobs/{name}/start, POST /dags/{name}/trigger, and
    POST /dags/{name}/backfill return 400, start nothing, and log a
    warning for a body that isn't a JSON object or that has a field the route
    doesn't accept, so a misspelled params key can't start a run with the
    defaults. The body is optional on start and trigger.
  • On a trigger, logicalDate sets the date that a manual run stands for,
    and requestId makes the request safe to repeat: a second request with
    the same ID returns the first run with created: false. The same ID with
    other parameters or another date returns 409.
  • A backfill response counts the runs that the request created (created,
    runKeys) separately from the dates that already had a run (existing,
    existingRunKeys), so repeating a backfill returns created: 0. One
    request covers at most 100 scheduled dates. For a longer range, the
    response has truncated: true and nextFrom, the from to send next.
  • Backfill, failed-dates recovery, and a trigger's logicalDate take RFC
    3339 dates or date-times, such as 2026-01-05 or
    2026-01-05T02:00:00+00:00, and read a value with no offset as UTC. They
    refuse the ISO 8601 basic form, such as 20260105T020000Z, and week
    dates.
  • When a manual start of a concurrencyPolicy: Replace job has to wait for
    another node to yield the job's cluster concurrency slot,
    POST /jobs/{name}/start returns 200 with pending: true, and the run
    starts when the slot frees.
  • The MCP tools cron_run_job, cron_trigger_dag, and cron_backfill_dag
    take a params argument, and cron_trigger_dag also takes
    logical_date and request_id. cron_backfill_dag returns the same
    counts and truncated flag as the HTTP route. cron_list_jobs and
    cron_list_dags return each params declaration, as GET /jobs and
    GET /dags do.
  • A recovery run reuses its source run's parameter values, and the preview
    lists them. With scoped tokens, executing a recovery needs the params
    scope when a stored value differs from its declared default. Recovery
    returns 409 when the stored values don't fit the current declaration.
  • A recovery run keeps a skipped branch skipped, and the preview lists those
    tasks under preservedSkipped. To decide a branch again, recover from the
    task that skipped: its command runs again, or its when: condition is
    read again.
  • For a job or workflow that declares parameters, the web dashboard's Run,
    Trigger, and backfill buttons open a form with a field for each
    parameter. In the terminal dashboard, r and t open a row that takes
    name=value pairs, and the backfill row takes the same pairs after its
    dates. When the daemon refuses a request, the form or row stays open and
    shows the daemon's reasons.
  • Both dashboards send a requestId with each workflow trigger and keep it
    until the daemon answers, for up to 10 minutes after the last attempt, so
    you can send an unanswered trigger again without starting a second run.
    Both warn when the daemon's response doesn't confirm the values you sent
    with a start or a trigger.
  • After a backfill, the dashboards report how many runs it created and how
    many dates already had one, and they keep the backfill open on the rest
    of a truncated range. They also show a workflow run's parameter values
    and mark each task that has a when: condition or a trigger rule other
    than all_success. The web dashboard's History tab lists the values each
    job run took and the token that supplied them.
  • A mapped task whose list is empty waits for all of its upstreams and then
    follows its triggerRule, as any other task does, so it can end
    skipped or upstream_failed.
  • Workflow catch-up counts missed dates from the latest scheduled or
    catch-up run. Manual runs, backfills, and recovery runs don't move that
    starting point. Retention always keeps that run, so a workflow can hold
    one terminal run more than retainRuns.
  • If another node takes over a workflow run while a node is reading XCom
    values for it or preparing a recovery run, the first node starts none of
    the run's tasks.
  • A daemon that refuses a reloaded configuration keeps running its
    durable-state chores: it writes its store manifest, collects garbage, and
    claims retries from other nodes.
  • The Sentry reporter's client sends the daemon's error events without the
    local variables of the stack frames and without HTTP request bodies, so
    neither can carry a parameter value to Sentry.

Performance compared with 1.2.75

Regression check: passed for 191 of 192 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 (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.75 1.2.76 Change Noise (±) Regression limit
mcp.fleet_15x400 132.64 ms 41.09 ms -69.0% 1.9% 15%
loop.stall_mcp_jobs_500 6.39 ms 2.81 ms -56.0% 3.9% Not enforced
mcp.list_jobs_500 106.65 ms 54.23 ms -49.2% 1.2% 15%
mcp.list_jobs_page_500 107.39 ms 71.58 ms -33.3% 0.5% 15%
loop.stall_launch_herd_8k 61.51 ms 71.55 ms +16.3% 2.1% Not enforced
dag.build_chain_10k 22.08 ms 25.39 ms +15.0% 5.2% 45.29% (declared 15%)
dag.recover_plan_from_1k 80.87 ms 69.09 ms -14.6% 0.6% 15%
mcp.handle_200 114.35 ms 101.01 ms -11.7% 1.3% 15%
dag.build_layered_10k 37.40 ms 41.66 ms +11.4% 1.7% 26.74% (declared 15%)
webapi.trends_build_5k 126.95 ms 140.98 ms +11.1% 1.1% 15%
dag.full_sweep_50x200 93.29 ms 102.84 ms +10.2% 1.0% 25%
startup.jobcli_state_get 85.02 ms 79.71 ms -7.7% 0.7% 25%
startup.mcp_bridge 82.33 ms 77.46 ms -7.4% 0.4% 25%
mem.launch_reap_steady_20x55 0.38 MB 0.40 MB +6.1% 0.0% 15%
job.launch_reap_2k 107.46 ms 113.07 ms +5.2% 1.5% 15%
mem.gc_pause_100k 139.31 ms 145.49 ms +4.4% 10.3% 25%
mcp.tools_list_bytes 33.51 KB 34.99 KB +4.4% 0.0% 15%
schedule.duplicates_20k 13.36 ms 13.95 ms +4.3% 7.1% 74.83% (declared 15%)
webui.tick_500 64.40 ms 67.20 ms +4.3% 10.2% 25%
job.launch_fail_retry_2k 122.28 ms 127.59 ms +4.3% 1.9% 15%
statsd.emit_2k 10.18 ms 10.62 ms +4.3% 0.8% 98.24% (declared 25%)
webapi.index_gzip_bytes 188.32 KB 195.43 KB +3.8% 0.0% 15%
dag.adopt_scan_500 59.79 ms 61.99 ms +3.7% 1.1% 33.45% (declared 25%)
state.append_pruned_1k 255.98 ms 246.72 ms -3.6% 12.5% 25%
webapi.index_bytes 657.66 KB 680.79 KB +3.5% 0.0% 15%
schedule.pressure_20k_48h 12.52 ms 12.95 ms +3.4% 5.7% 79.85% (declared 15%)
jobapi.sem_denied_64x10 47.89 ms 49.48 ms +3.3% 0.8% 25%
startup.import_tui 82.53 ms 84.89 ms +3.3% 0.4% 25%
state.gc_sweep_2k_streams 36.29 ms 37.45 ms +3.2% 1.6% 41.34% (declared 25%)
webui.swim_400x49 60.90 ms 62.80 ms +3.1% 1.9% 25%
state.inventory_2k_streams 82.38 ms 84.93 ms +3.1% 1.0% Not enforced
state.fanout_gather_100 18.95 ms 19.54 ms +3.1% 7.7% 52.76% (declared 25%)
tui.palette_type_5k 135.94 ms 140.04 ms +3.0% 1.8% 15%
loop.stall_metrics_2000 22.65 ms 23.31 ms +2.9% 6.1% Not enforced
startup.import_daemon 152.38 ms 156.47 ms +2.9% 0.2% 25%
webui.dag_tasks_2k 39.40 ms 40.50 ms +2.8% 1.3% 25%
dag.list_runs_warm 9.03 ms 9.27 ms +2.7% 0.9% 25%
tui.log_search_20k 10.81 ms 11.09 ms +2.7% 2.6% 92.54% (declared 15%)
webui.render_term_5k 80.35 ms 82.45 ms +2.6% 1.1% 25%
webui.dirty_frame_rows_500 710.7 us 727.8 us +2.4% 7.0% Not enforced
cronexpr.next_simple 29.22 ms 28.59 ms -2.2% 1.7% 34.23% (declared 15%)
config.reload_warm_dir_1k 60.98 ms 62.28 ms +2.1% 1.2% 25%
webui.timeline_500 42.20 ms 43.10 ms +2.1% 1.4% 25%
cronexpr.parse_simple 32.38 ms 31.70 ms -2.1% 1.9% 30.89% (declared 15%)
resources.monitor_stop_100 236.99 ms 241.92 ms +2.1% 1.9% 25%
state.list_documents_600 49.90 ms 50.90 ms +2.0% 1.1% 24.05% (declared 15%)
mcp.query_metrics_500 102.73 ms 100.71 ms -2.0% 1.0% 25%
webui.filter_keys_500 46.30 ms 47.20 ms +1.9% 1.0% 25%
state.artifact_put_distinct_2k 129.67 ms 127.30 ms -1.8% 1.4% 25%
webapi.resources_poll_20x240 110.53 ms 108.56 ms -1.8% 1.7% 15%
startup.import_cronexpr 21.19 ms 21.21 ms -1.8% 1.7% 30.01% (declared 25%)
state.boot_rehydrate_populated 33.81 ms 34.40 ms +1.7% 1.7% 29.58% (declared 15%)
cronexpr.next_complex 11.70 ms 11.90 ms +1.7% 2.0% 85.46% (declared 15%)
webui.ledger_analyze_500x600 53.60 ms 52.70 ms -1.7% 0.8% 25%
redact.secrets_5k 16.06 ms 16.33 ms +1.7% 0.5% 62.27% (declared 15%)
webui.select_move_500 48.40 ms 49.20 ms +1.7% 2.5% 25%
mem.rss_daemon_import 39.11 MB 39.73 MB +1.6% 0.2% 25%
dag.mapped_drain_256 22.98 ms 23.34 ms +1.6% 2.0% 43.52% (declared 25%)
state.kv_roundtrip_200 133.45 ms 131.37 ms -1.6% 2.7% 15%
webui.render_rows_500 11.90 ms 12.08 ms +1.5% 0.9% 25%
startup.job_set_id_100 145.49 ms 147.54 ms +1.5% 1.0% 25%
dag.list_dags_warm_x300 43.58 ms 44.18 ms +1.4% 1.2% 25%
webui.rows_layout_200 45.00 ms 45.60 ms +1.3% 1.2% 25%
config.parse_crontab_1k 9.68 ms 9.80 ms +1.3% 1.0% 103.4% (declared 15%)
dag.gc_excess_60 121.45 ms 122.98 ms +1.3% 4.2% 25%
resources.usage_from_dict_500 71.33 ms 72.16 ms +1.2% 1.9% 15%
cronexpr.test_match_200k 18.71 ms 18.49 ms -1.2% 4.0% 53.44% (declared 15%)
cluster.parse_summaries_6k 67.77 ms 67.02 ms -1.1% 2.6% 15%
webapi.sse_tail_pump_4x20k 79.41 ms 80.28 ms +1.1% 1.4% 15%
pools.enqueue_burst_200 204.18 ms 201.99 ms -1.1% 5.0% 25%
state.artifact_get_newest 11.79 ms 11.91 ms +1.0% 1.8% 42.42% (declared 25%)
loop.stall_completions_500 6.51 ms 6.57 ms +1.0% 1.1% 76.83% (declared 25%)
state.list_records_warm 98.05 ms 99.05 ms +1.0% 1.6% 15%
cronexpr.next_dst_2k 30.51 ms 30.20 ms -1.0% 4.6% 32.78% (declared 15%)
tui.log_restyle_5k 22.57 ms 22.80 ms +1.0% 1.3% 44.3% (declared 15%)
dag.run_chain_100 289.02 ms 286.14 ms -1.0% 6.2% 25%
startup.import_config 86.34 ms 87.19 ms +1.0% 0.3% 25%
mem.jobconfig_2k 1.60 MB 1.61 MB +1.0% 0.0% 31.28% (declared 15%)
startup.python_baseline 14.53 ms 14.66 ms +0.9% 0.7% Not enforced
tui.mark_idle_300 206.42 ms 208.18 ms +0.9% 1.7% 15%
schedule.lint_2500_zoned 44.65 ms 45.02 ms +0.8% 1.5% 15%
webui.radar_walk_500x150 50.20 ms 50.60 ms +0.8% 3.3% 25%
tui.dag_graph_paint_2k 178.81 ms 180.21 ms +0.8% 1.0% 15%
state.append_1k 430.10 ms 433.34 ms +0.8% 5.1% 15%
dag.advance_quiescent_1k 56.45 ms 56.04 ms -0.7% 0.4% 25%
json.loads_wide_int_2k 163.42 ms 162.24 ms -0.7% 1.1% 15%
cronexpr.occurrences_1k 10.66 ms 10.73 ms +0.7% 0.9% 93.83% (declared 15%)
webapi.jobs_payload_500 38.07 ms 38.34 ms +0.7% 2.3% 26.27% (declared 15%)
prometheus.counter_snapshot_2k 95.98 ms 96.64 ms +0.7% 1.6% 15%
cluster.peer_serve_400 119.29 ms 120.04 ms +0.6% 0.6% 15%
webapi.auth_scope_20k 65.40 ms 64.98 ms -0.6% 0.3% 15%
dag.run_wide_500 109.11 ms 108.42 ms -0.6% 1.4% 25%
mem.rss_daemon_web_100 53.87 MB 54.20 MB +0.6% 0.2% 25%
push.seal_500 71.43 ms 71.00 ms -0.6% 0.5% 15%
dag.fanin_barrier_1k 142.76 ms 141.92 ms -0.6% 0.5% 25%
loop.stall_jobs_500 14.95 ms 14.86 ms -0.6% 2.2% Not enforced
config.interp_2k 48.33 ms 48.61 ms +0.6% 0.4% 20.69% (declared 15%)
schedule.reseed_local_20k 73.44 ms 73.86 ms +0.6% 3.8% 15%
state.depends_on_past_gate 2.25 ms 2.23 ms -0.6% 1.4% 89.06% (declared 25%)
tui.table_paint_5k 130.46 ms 129.74 ms -0.6% 1.2% 15%
webapi.summary_status_500 120.68 ms 120.02 ms -0.5% 1.3% 15%
startup.validate_config_100 142.01 ms 141.45 ms -0.5% 0.5% 25%
fingerprint.job_set_id_rich_2k 182.33 ms 183.31 ms +0.5% 0.4% 15%
schedule.next_fires_2k 18.22 ms 18.32 ms +0.5% 1.7% 54.88% (declared 15%)
fingerprint.job_set_id_10k 224.67 ms 225.83 ms +0.5% 0.8% 15%
webui.render_fleet_15x400 17.62 ms 17.71 ms +0.5% 1.6% 25%
webui.palette_keys_500 39.70 ms 39.90 ms +0.5% 1.2% 25%
dag.finish_fanin_20x1k 65.44 ms 65.76 ms +0.5% 1.4% 25%
webapi.activity_build_500 134.92 ms 134.26 ms -0.5% 0.5% 15%
state.artifact_list_churn_x500 38.88 ms 39.07 ms +0.5% 1.2% 25%
prometheus.render_500 13.14 ms 13.20 ms +0.5% 0.5% 76.11% (declared 15%)
dag.plan_claim_10k 10.80 ms 10.85 ms +0.5% 5.6% 92.63% (declared 15%)
ical.render_500x7d 38.49 ms 38.31 ms -0.5% 0.4% 25.98% (declared 15%)
webui.rows_diff_500 42.80 ms 42.60 ms -0.5% 3.0% 25%
webui.sort_500 43.40 ms 43.60 ms +0.5% 1.2% 25%
push.seal_xwing_500 101.35 ms 101.82 ms +0.5% 0.2% 15%
webui.tail_term_2k 44.30 ms 44.10 ms -0.5% 1.1% 25%
tui.week_rows_500 104.71 ms 104.25 ms -0.4% 1.0% 15%
config.jobconfig_3k 37.59 ms 37.75 ms +0.4% 1.2% 26.61% (declared 15%)
schedule.reseed_100k 160.93 ms 160.23 ms -0.4% 2.7% 15%
cluster.job_owner_2k 41.56 ms 41.74 ms +0.4% 1.7% 24.06% (declared 15%)
tui.view_sort_5k 87.95 ms 88.32 ms +0.4% 1.6% 15%
mem.rss_daemon_10k 144.45 MB 145.06 MB +0.4% 0.1% 25%
cluster.derive_cold_50 122.45 ms 121.94 ms -0.4% 0.1% 15%
webapi.pools_poll_4x130 83.67 ms 84.00 ms +0.4% 0.7% 25%
tui.fleet_paint_15x400 115.87 ms 115.43 ms -0.4% 0.6% 15%
webapi.gzip_body_500 43.83 ms 43.66 ms -0.4% 1.2% 22.82% (declared 15%)
state.list_records_2k 21.95 ms 22.03 ms +0.4% 1.2% 45.56% (declared 15%)
config.parse_yaml_rich_20 173.70 ms 174.30 ms +0.3% 1.2% 15%
job.stream_passthrough_240k 109.61 ms 109.98 ms +0.3% 0.5% 15%
tui.tail_ingest_30k 127.62 ms 128.05 ms +0.3% 2.0% 15%
prometheus.first_scrape_after_reload_500 139.88 ms 140.35 ms +0.3% 1.2% 15%
schedule.cold_build_100k 374.96 ms 373.78 ms -0.3% 1.7% 15%
jobapi.read_path_10k 97.92 ms 97.61 ms -0.3% 0.4% 15%
redact.adversarial_10k 28.60 ms 28.68 ms +0.3% 0.7% 34.97% (declared 15%)
config.reload_warm_50 29.14 ms 29.22 ms +0.3% 1.6% 34.32% (declared 25%)
json.roundtrip_3k 429.07 ms 427.85 ms -0.3% 0.9% 15%
schedule.due_pass_100k 11.18 ms 11.21 ms +0.3% 3.9% 89.44% (declared 25%)
state.derive_max_cold 20.11 ms 20.16 ms +0.3% 0.7% 49.72% (declared 15%)
webapi.dags_poll_1k 97.80 ms 98.05 ms +0.2% 0.6% 15%
job.report_noop_100k 37.98 ms 37.89 ms -0.2% 1.1% 15%
config.parse_dir_cold_200 193.31 ms 193.78 ms +0.2% 1.6% 25%
webui.wallboard_poll_500 42.30 ms 42.40 ms +0.2% 4.1% 25%
pair.qr_encode_14 194.39 ms 194.84 ms +0.2% 1.3% 15%
state.lease_renew_200 107.27 ms 107.05 ms -0.2% 3.2% 46.61% (declared 25%)
loop.idle_wake_rate 11.95 ms 11.98 ms +0.2% 1.0% 41.83% (declared 25%)
startup.version 43.54 ms 43.73 ms +0.2% 1.2% 25%
config.reload_warm_include_50 63.42 ms 63.30 ms -0.2% 2.2% 25%
dag.advance_quiescent_chain 55.54 ms 55.64 ms +0.2% 0.1% 25%
startup.daemon_first_pass_2k 1.073 s 1.075 s +0.2% 0.8% 25%
loop.sla_pass_5k_x10 114.24 ms 114.43 ms +0.2% 2.7% 15%
redact.clean_20k 16.18 ms 16.15 ms -0.2% 1.7% 61.81% (declared 15%)
cronexpr.parse_complex 16.51 ms 16.49 ms -0.2% 0.9% 60.57% (declared 15%)
json.roundtrip_orjson_3k 161.12 ms 161.36 ms +0.1% 1.0% 15%
dag.advance_waiting_mapped_1k 95.31 ms 95.45 ms +0.1% 0.4% 25%
mem.rss_version 14.68 MB 14.66 MB -0.1% 0.2% 25%
webui.logo_recovery 85.70 ms 85.60 ms -0.1% 0.2% 25%
job.stream_capture_120k 28.32 ms 28.29 ms -0.1% 0.9% 35.31% (declared 15%)
cluster.poll_round_15x400 125.69 ms 125.57 ms -0.1% 0.8% 15%
mem.jobconfig_envfile_2k 16.35 MB 16.37 MB +0.1% 0.0% 15%
tui.wallboard_paint_5k 139.62 ms 139.49 ms -0.1% 0.6% 15%
config.reload_gc_100k 1.465 s 1.466 s +0.1% 1.2% 25%
mem.run_history_series_5 9.58 MB 9.58 MB +0.1% 0.0% 15%
tui.drawer_paint_5k 75.03 ms 74.99 ms -0.1% 1.5% 15%
config.parse_yaml_3k 1.166 s 1.166 s +0.1% 1.5% 15%
config.parse_yaml_300 116.87 ms 116.92 ms +0.0% 1.3% 15%
state.artifact_get_oldest_2k 99.85 ms 99.89 ms +0.0% 0.5% 25%
tui.poll_absorb_5k 68.07 ms 68.09 ms +0.0% 3.1% 15%
state.derive_max_warm 184.90 ms 184.84 ms -0.0% 0.2% 15%
push.fanout_8x100 118.05 ms 118.01 ms -0.0% 0.6% 15%
cluster.fleet_view_15x400 69.23 ms 69.25 ms +0.0% 1.0% 25%
schedule.suggest_slot_5k_x20 58.49 ms 58.48 ms -0.0% 3.0% 15%
mem.parse_peak_rich_20 4.21 MB 4.21 MB +0.0% 0.0% 15%
state.mutate_document_1k 163.74 ms 163.77 ms +0.0% 1.3% 30.54% (declared 25%)
webapi.sse_burst_20k 32.85 ms 32.85 ms -0.0% 1.1% 15%
webapi.dag_run_poll_1k 69.33 ms 69.34 ms +0.0% 0.4% 25%
pools.admit_cycle_1k 116.89 ms 116.88 ms -0.0% 0.7% 25%
mem.gc_manifest_scan_128x2k 14.32 MB 14.32 MB -0.0% 0.0% 15%
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.append_line_5k 10.0 us 10.0 us +0.0% 7.1% 25%
webui.week_walk_500x20 52.00 ms 52.00 ms +0.0% 1.4% 25%
webui.boot_rows_500 331.30 ms 331.30 ms +0.0% 4.3% Not enforced
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.retired_output_1k 0.12 MB 0.12 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%

No percentage comparison available: dag.join_verdict_2k.

What's Changed

  • Bump the docker group across 2 directories with 5 updates by @dependabot[bot] in #68
  • Bump the github-actions group across 1 directory with 3 updates by @dependabot[bot] in #69
  • Bump the github-actions group across 2 directories with 5 updates by @dependabot[bot] in #71
  • Link the live demo from the README and wiki by @ptweezy in #49

Full Changelog: 1.2.75...1.2.76