Skip to content

v0.30.0

Choose a tag to compare

@piercefreeman piercefreeman released this 03 Nov 23:49
· 15 commits to main since this release
b262905

What's Changed

  • Fix reading WAYMARK_SCHEDULER_BATCH_SIZE env var by @MOZGIII in #295
  • Use newtypes instead of raw UUIDs for some core ID types by @MOZGIII in #296
  • Add an waymark-fn-main-common and rework the log initialization by @MOZGIII in #299
  • Add prometheus metrics exporter server by @MOZGIII in #302
  • Add a symlink to the last soak run by @MOZGIII in #301
  • Add color-eyre to waymark-fn-main-common by @MOZGIII in #300
  • Add waymark-timed and waymark-timed-channels crates by @MOZGIII in #303
  • Eliminate extra nesting of the CoordinatorEvents at runloop by @MOZGIII in #305
  • Allow fastapi cross-dependencies by @piercefreeman in #294
  • Initial integration of the timed messages by @MOZGIII in #304
  • Run soak test in CI by @piercefreeman in #306
  • Avoid messing with the start workers' RUST_LOG defaults at soak harness by @MOZGIII in #309
  • Move dag-related errors to proper places and split builder and validator errors by @MOZGIII in #311
  • Refactor the scheuler loop and eliminate blocking in dag resolver by @MOZGIII in #312
  • More triggers for chained-prs CI checks by @MOZGIII in #313
  • Add timed-future crate by @MOZGIII in #316
  • Update docker compose to use postgres 18 with auto explain by @MOZGIII in #314
  • Use postgres 18 at CI by @MOZGIII in #315
  • Add proper timed annotations to all db invocation at postgres backend by @MOZGIII in #317
  • Rework how soak harness counts queued instances & switch some params to non-zero by @MOZGIII in #319
  • Add a limit on the nodes number by @MOZGIII in #322
  • Make FaultInjectingBackend generic around the inner backend by @MOZGIII in #323
  • Extract the runner retry policy to a separate crate by @MOZGIII in #324
  • Refactor synthetic exceptions by @MOZGIII in #325
  • Revert "Add a limit on the nodes number" by @MOZGIII in #327
  • Add the ability to produce large results in soak harness by @MOZGIII in #321
  • Wrap the execution result with typed wrappers by @MOZGIII in #326
  • Improve the synthetic exceptions API by @MOZGIII in #330
  • Add a limit on the nodes number as an instance terminal error by @MOZGIII in #328
  • A fix for "Enhance error handling for runner state node limit exceeded scenarios" by @MOZGIII in #331
  • Optimize update:runner_instances_state performance with indexing and autovacuum tuning [do not merge, yet?] by @MOZGIII in #320
  • Compile python list comprehensions into IR by @piercefreeman in #334
  • Support list merging by star unpacking by @piercefreeman in #333
  • Support dataclasses as typehints by @piercefreeman in #336
  • Add waymark-jsonlines by @MOZGIII in #289
  • Update rand 0.9.2 to 0.9.3 by @MOZGIII in #341
  • Integrate tokio-metrics crate by @MOZGIII in #337
  • Add metrics and logs from the bughunt by @MOZGIII in #338
  • Refactor hydration and how the dag is kept alongisde the instances by @MOZGIII in #342
  • Introduce a proper id type for WorkflowVersionId by @MOZGIII in #343
  • Switch schedule id to a waymark-ids newtype and use it consistently by @MOZGIII in #344
  • Switch dag node ids to newtypes by @MOZGIII in #345
  • Drop unutilized NodeUuid and node uuids in DAG by @MOZGIII in #346
  • Make queued instance state non-optional by @MOZGIII in #347
  • Refactor the RunnerState construction API by @MOZGIII in #348
  • Add either support to more backends by @MOZGIII in #351
  • Bump rustls-webpki by @MOZGIII in #352
  • Split expression types out from runner state into their own crate by @MOZGIII in #354
  • Split value visitor parts with better encapsulation by @MOZGIII in #355
  • Split the runner state parts into separate mods and restructure its internals by @MOZGIII in #356
  • Extract execution state from runner-state into a new runner-execution-core crate by @MOZGIII in #357
  • Introduce a new ExecutionGraph type and use it at the RunnerState and GraphUpdate by @MOZGIII in #359
  • Switch from keeping runner state at queued instance to keeping only the graph by @MOZGIII in #361
  • Add runner-execution-id crate for deterministic ids by @MOZGIII in #362
  • Drop serde from runner state by @MOZGIII in #363
  • Add worker reservation crate by @MOZGIII in #368
  • Add worker message protocol crate by @MOZGIII in #372
  • Add worker process crate by @MOZGIII in #370
  • Bump rust to 1.95.0 by @MOZGIII in #373
  • Add worker remote bridge service crate by @MOZGIII in #371
  • Bump rustls-webpki to 0.103.13 by @MOZGIII in #379
  • Introduce new core backend traits by @MOZGIII in #365
  • Add worker process pool and spec by @MOZGIII in #374
  • Add worker python crate by @MOZGIII in #375
  • Add worker-remote-pool crate by @MOZGIII in #380
  • Integrate new workers into executables by @MOZGIII in #377
  • Add waymark_runner_register_node_graph_nodes_len metric by @MOZGIII in #381
  • Increase grpc message limit by @piercefreeman in #383
  • Fail actions if grpc bridge is closed by @piercefreeman in #384
  • Drop unused execution proto by @MOZGIII in #387
  • Add vm-ast-old and ast-old parsing from proto by @MOZGIII in #386
  • Add machinery for loading python workflows from rust by @MOZGIII in #390
  • Drop unused cargo deny licenses by @MOZGIII in #389
  • Initial version of the new VM by @MOZGIII in #388
  • Add support-test-python crate by @MOZGIII in #391
  • Add an assert for type-safety at python/scripts/export_workflow_ir.py by @MOZGIII in #392
  • Add more structure to the vm cli by @MOZGIII in #394
  • Preserve order of call definitions at the python AST by @MOZGIII in #395
  • Initial compiler version by @MOZGIII in #393
  • Add snapshot testing to the old-ast compiler by @MOZGIII in #396
  • Refactor the compiler by @MOZGIII in #397
  • Optimize frame register usage at compiler by @MOZGIII in #398
  • Implement support for binary and unary scalar ops by @MOZGIII in #399
  • Proper VM extcalls by @MOZGIII in #400
  • Implement support for sleep at the VM by @MOZGIII in #401
  • Add vm-value crate and integrate it at vm-cli by @MOZGIII in #403
  • Integrate vm-value at compiler-ast-old tests by @MOZGIII in #405
  • Add dict and list creation support (and all pre-requisites) by @MOZGIII in #404
  • Add vm-compiler-for-ast-old-const-value by @MOZGIII in #406
  • Clean up the compiler test support crate and helpers by @MOZGIII in #407
  • Implement length instruction / global function by @MOZGIII in #408
  • Implement index and dict dot ops by @MOZGIII in #409
  • Implement for loops support at compiler by @MOZGIII in #410
  • Split compiler tests by @MOZGIII in #415
  • Add bytecode formatting facilities by @MOZGIII in #413
  • Add the ast to the snapshots by @MOZGIII in #414
  • Refactor the promises architecture at the VM runtime by @MOZGIII in #411
  • Eliminate synthetics from for loops by @MOZGIII in #416
  • Implement spreads support by @MOZGIII in #417
  • Add append instruction by @MOZGIII in #418
  • Optimize indexed spreads register usage by @MOZGIII in #419
  • Add support for spreads without targets by @MOZGIII in #421
  • Optimize away extra copies for spread iteration by @MOZGIII in #420
  • Add support for exceptions at the VM runtime and compiler by @MOZGIII in #424
  • Add runtime snapshotting by @MOZGIII in #429
  • Import website docs by @piercefreeman in #433
  • More serde implementations for VM types (and small correction to the previous work in this domain) by @MOZGIII in #434
  • Add vm-codec-core and vm-codec-rmp by @MOZGIII in #436
  • Implement effect counting at vm-runtime by @MOZGIII in #441
  • Advanced VM driver facilities by @MOZGIII in #437
  • Add workload pinning subsystem by @MOZGIII in #438
  • Bump anyhow by @MOZGIII in #444
  • Tweak some AI annoyances at AGENTS.md by @MOZGIII in #435
  • Add conversions machinery by @MOZGIII in #439
  • Add vm-value-convert-json by @MOZGIII in #443
  • VM effects handling machinery by @MOZGIII in #445
  • Bump crossbeam-epoch by @MOZGIII in #451
  • State managers by @MOZGIII in #446
  • Add workflow-service-vm-runtimes-backend by @MOZGIII in #447
  • Implement vm-runtimes and workload pinning backends for postgres by @MOZGIII in #448
  • Add pr-stack script by @MOZGIII in #465
  • Add execution-driver crate by @MOZGIII in #449
  • Add system-vm crate by @MOZGIII in #450
  • Various small adjustments by @MOZGIII in #452
  • Add compiler metadata machinery by @MOZGIII in #456
  • Add fullset-effect-handler by @MOZGIII in #453
  • Add durable workflow completion machinery by @MOZGIII in #454
  • Add transient workflows completions machinery by @MOZGIII in #455
  • Add service for VM runtimes managements by @MOZGIII in #457
  • Add executables management by @MOZGIII in #458
  • Add execution-bringup crate by @MOZGIII in #459
  • Add transient-execution-bringup by @MOZGIII in #460
  • Crude PoC of the VM integration into start-workers by @MOZGIII in #461
  • Crude PoC of the VM integration into bridge by @MOZGIII in #462
  • Minor corrections to the example app docker setup by @MOZGIII in #463
  • Cleanup dead code (partial) by @MOZGIII in #464
  • Integrate VMs [wip] by @MOZGIII in #428
  • Proper handling of the action runtime metadata by @MOZGIII in #467
  • Small refactor to the extcall-reconciler-core traits and more documentation for the vm-driver promise settler by @MOZGIII in #470
  • Durable action completions by @MOZGIII in #469
  • Durable action requests by @MOZGIII in #471
  • Expose the driver error to the execution-runtime by @MOZGIII in #472
  • Tidy the workload-pinnings-related glossary and naming in preparation for scheduling by @MOZGIII in #514
  • Parking support at the workload pinnings by @MOZGIII in #474
  • Preparations for the durable sleep implementation by @MOZGIII in #475
  • Durable sleep by @MOZGIII in #476
  • Share promise settlement pollers implementation by @MOZGIII in #477
  • Replace the db purge interfaces with a trigger on vm_runtime_snapshots DELETE by @MOZGIII in #478
  • Correct the vm-driver-level semantics on the stale promise resolutions by @MOZGIII in #479
  • Switch from passing timestamps to passing durations to the DB layer by @MOZGIII in #480
  • Defensive fencing for workloads by @MOZGIII in #481
  • Refactor and correct unpin loop / cleanup at workload pinnings by @MOZGIII in #482
  • Extract settled vm promise state variants into a unified enum by @MOZGIII in #484
  • Add "select" control flow instruction to the VM by @MOZGIII in #486
  • Implement creating exception values in the VM by @MOZGIII in #487
  • Implement extra functions at vm-compiler-for-ast-old by @MOZGIII in #490
  • Implement unskippable sleep instructions by @MOZGIII in #496
  • Implement timeouts and retries at the vm compiler side by @MOZGIII in #489
  • Cleanup unused fields from ActionRef by @MOZGIII in #491
  • VM runtime builder by @MOZGIII in #492
  • Correct the symmetry of the action-runtime-worker-pool metadata by @MOZGIII in #494
  • Refactor transient-execition-bringup to allow for more variety by @MOZGIII in #493
  • Upgrade vm-cli for the real worker-pool transient execution by @MOZGIII in #495
  • Upgrade smoke binary with the new VM by @MOZGIII in #497
  • Upgrade integration-test binary with the new VM by @MOZGIII in #498
  • Upgrade benchmark binary with the new VM by @MOZGIII in #499
  • Upgrade fuzzer binary with the new VM by @MOZGIII in #500
  • Port soak-harness binary to use new VM by @MOZGIII in #501
  • Reorder fns at smoke sources to match the calling convention by @MOZGIII in #503
  • Implement support for kwargs at user-defined functions by @MOZGIII in #502
  • Lock python tools versions by @MOZGIII in #541
  • Add support for multi-value assignments by @MOZGIII in #504
  • Implement range assignments at the vm compiler by @MOZGIII in #505
  • Work around the division-by-zero error in benchmark for now by @MOZGIII in #506
  • Poll rate limiting at workload-pinning-manager by @MOZGIII in #507
  • Unconfirmed locks at action-effect-reconciler by @MOZGIII in #508
  • Fix the span propagation at state-vm-runtimes by @MOZGIII in #509
  • Allow configuring db pool size at bench by @MOZGIII in #510
  • Add batcher by @MOZGIII in #511
  • Batch snapshot writes by @MOZGIII in #513
  • Batch more database operations to improve the performance by @MOZGIII in #515
  • Use the time instant for the backend calls at the action effect reconciler by @MOZGIII in #516
  • Workflow registration batching by @MOZGIII in #517
  • Refactor benchmarking cli command by @MOZGIII in #519
  • Drop anyhow from the codebase by @MOZGIII in #520
  • Re-add queue-batch-size flag to soak-harness by @MOZGIII in #521
  • Turn some interpreter errors into catchable exceptions by @MOZGIII in #522
  • Bump tonic to 0.13 and then to 0.14; then bump h2 by @MOZGIII in #552
  • Tighter CI checks by @MOZGIII in #523
  • Run the worker pool per test case at integration tests by @MOZGIII in #524
  • Clean up legacy runloop: phase 1 by @MOZGIII in #525
  • Clean up legacy runloop: phase 2 by @MOZGIII in #526
  • Clean up legacy runloop: phase 3 by @MOZGIII in #527
  • Clean up legacy runloop: phase 4 by @MOZGIII in #528
  • Clean up legacy runloop: phase 5 by @MOZGIII in #529
  • Clean up legacy runloop: phase 6 by @MOZGIII in #530
  • Clean up legacy runloop: phase 7 by @MOZGIII in #531
  • Consolidate and fix database cleanup helpers by @MOZGIII in #532
  • Add machine-readable JSON output to the benchmark by @MOZGIII in #545
  • Drop the dead benchmark harness and run the benchmark directly in CI by @MOZGIII in #546
  • Add a smoke check job to CI by @MOZGIII in #547
  • Fix manylinux build by @piercefreeman in #554
  • Support macOS 11+ in release wheels by @piercefreeman in #555
  • Deliver the workflow outcome before waiting for VM to terminate at transient execution by @MOZGIII in #556
  • Drop the WorkflowNodeResult and return the completion value as-is by @MOZGIII in #557
  • Classify terminal VM driver exits correctly by @piercefreeman in #558
  • Fix stale python proto codegen by @MOZGIII in #607
  • Migrate well-known proto types to prost-wkt-types by @MOZGIII in #609
  • Implement scheduler by @MOZGIII in #610
  • Generalize spread fan-out to accept workflow helper functions by @MOZGIII in #606
  • Drop dead id types from ids crate by @MOZGIII in #612
  • Define blanket impl for dummy grouping traits via a macro by @MOZGIII in #533
  • Use derive_more for more compact fullset instruction set declaration by @MOZGIII in #534
  • Fixup Cargo.lock by @MOZGIII in #613
  • Update mountaineer-di to 0.3.0 by @piercefreeman in #619
  • A hotfix for postgres deadlocks by @MOZGIII in #617
  • Switch to a more robust CaptureRuntimeView design by @MOZGIII in #535
  • Bump rustls and some of its deps by @MOZGIII in #702
  • Macro-powered interpreter composition by @MOZGIII in #536
  • Apply useful changes from the cancelled operations refactor by @MOZGIII in #539
  • Generalize VM values over flavors and make a python flavor by @MOZGIII in #544
  • Make workflow arguments opaque bytes at the protocol level by @MOZGIII in #559
  • Improve the RoundTripMetrics composition by @MOZGIII in #560
  • Simplify the worker-core and related API surface by @MOZGIII in #561
  • Rework worker protocol by @MOZGIII in #562
  • Eliminate JSON intermediary conversions for values by @MOZGIII in #563
  • Rename the WorkflowArgumentValue to just Value (and the rest accordigly) by @MOZGIII in #564
  • Cleaned up the value-related conversion machinery by @MOZGIII in #565
  • Rename vm-value-convert-proto to vm-value-python-convert-proto by @MOZGIII in #566
  • Split and rework the worker-core APIs at the rust side by @MOZGIII in #567
  • Make the action execution loss explicit at the worker API by @MOZGIII in #568
  • Distinct error states at the worker-message-protocol by @MOZGIII in #701
  • Avoid re-exports of the PendingPromiseError by @MOZGIII in #569
  • Adjust and cleanup the conversion API surface by @MOZGIII in #570
  • Fix tonic build composition by @MOZGIII in #553
  • Explicitly propagate action loss though the action completions reconciler by @MOZGIII in #571
  • Make WorkflowOutcome shape explicit at the proto level by @MOZGIII in #572
  • Define proper protocol-level boundaries for value trees by @MOZGIII in #573
  • Generalize the action-runtime-convert around the actual value type by @MOZGIII in #574
  • Remove the webapp for the rework by @MOZGIII in #621
  • Metrics to track the workers by @MOZGIII in #622
  • Core HTTP API machinery by @MOZGIII in #624
  • Add lossy-batcher by @MOZGIII in #625
  • Add retention-sweeper by @MOZGIII in #626
  • Add sqlx-postgres-schema-pool by @MOZGIII in #627
  • Proper node id type by @MOZGIII in #628
  • Essential metrics subsystem core parts by @MOZGIII in #629
  • Add observability-store-postgres (and -migrations) by @MOZGIII in #630
  • Allow configuration of max connections for the main db pool by @MOZGIII in #631
  • Observability core and essential-metrics config by @MOZGIII in #632
  • Wire the observability core and essential-metrics pipeline through vertically by @MOZGIII in #633
  • Add counter-rate by @MOZGIII in #634
  • Port the soak harness to essential metrics by @MOZGIII in #635
  • Remove the worker-status pipeline in favor of essential metrics by @MOZGIII in #636
  • Add http-api-types by @MOZGIII in #659
  • Add api-essential-metrics-http by @MOZGIII in #637
  • Serve the observability API from start-workers by @MOZGIII in #638
  • Serve the HTTP interface from soak runs by @MOZGIII in #639
  • Serve the HTTP interface from the example app by @MOZGIII in #640
  • Serve Swagger UI from the API by @MOZGIII in #641
  • Extend the prometheus seconds buckets down to microseconds by @MOZGIII in #642
  • Add node-sequence by @MOZGIII in #643
  • Add the observability-events core and payload by @MOZGIII in #644
  • Add cursor-core by @MOZGIII in #645
  • Add query-limit by @MOZGIII in #656
  • Add the observability-events backend traits by @MOZGIII in #646
  • Add observability-events-emitter and -compat by @MOZGIII in #647
  • Implement observability events backends at observability-store-postgres by @MOZGIII in #648
  • Add the page, the cursor and the limit to http-api-types by @MOZGIII in #660
  • Add api-observability-events-http-types by @MOZGIII in #661
  • Add timestamp crate by @MOZGIII in #703
  • Add api-observability-events-http by @MOZGIII in #649
  • Wire the observability-events pipeline through vertically by @MOZGIII in #650
  • VM driver hooks machinery by @MOZGIII in #651
  • Feed the observability events from the VM driver hooks by @MOZGIII in #652
  • Route the VM driver run logging through the hooks by @MOZGIII in #653
  • Trace every transient VM driver run via the hooks by @MOZGIII in #723
  • Per-VM timeline of the observability events by @MOZGIII in #654
  • Observability state API and the instance view by @MOZGIII in #655
  • Reword the scheduler-core crate doc by @MOZGIII in #657
  • Separate read pool for observability database by @MOZGIII in #662
  • Set a statement timeout on the observability pools by @MOZGIII in #663
  • Sweep the observability retention in chunks by @MOZGIII in #664
  • Record the snapshot_persisted events only when asked by @MOZGIII in #665
  • Carry the observability events' drops in the essential metrics by @MOZGIII in #724
  • Bring the observability subsystem up under the benchmark on request by @MOZGIII in #666
  • Take the essential-metrics series range as the timestamp proxy by @MOZGIII in #721
  • Take the essential-metrics series range as the timestamp proxy by @MOZGIII in #752
  • List the observability knobs in the start-workers configuration doc by @MOZGIII in #731
  • Better clarify the WAYMARK_OBSERVABILITY_READ_DATABASE_URL purpose in the docs by @MOZGIII in #753
  • Add os-shutdown-requests crate by @MOZGIII in #668
  • Fix soak harness Ctrl+C handling by @MOZGIII in #667
  • Port start-workers shutdown signals to os-shutdown-requests by @MOZGIII in #671
  • Add task-supervisor crate by @MOZGIII in #672
  • Supervise every start-workers task from main by @MOZGIII in #673
  • Rework the worker pool initialization and error surface by @MOZGIII in #674
  • Drop the transient worker pool bringup's caller reminder by @MOZGIII in #728
  • Act once per worker generation on recycle reports by @MOZGIII in #720
  • Add the managed-spawner crates by @MOZGIII in #675
  • Switch the secondary binaries to task-supervisor by @MOZGIII in #676
  • Keep the execution driver loop alive while the VM drivers execute by @MOZGIII in #677
  • Run the inline worker pool's actions from a pool loop that waits for them by @MOZGIII in #678
  • Rework the managed-process API around observing the child's exit by @MOZGIII in #679
  • Stop the soak worker gracefully through managed-process by @MOZGIII in #680
  • Fix the worker bridge bringup's returned-address doc by @MOZGIII in #681
  • Drain secondary binaries' supervisors on every exit by @MOZGIII in #682
  • Make workload-pinning-manager's outcome an error by @MOZGIII in #683
  • Add an error converter to fn-main-common by @MOZGIII in #684
  • Route the binaries' supervisors through managed-spawner-supervised by @MOZGIII in #685
  • Make the state sweeper a future at execution-bringup by @MOZGIII in #686
  • Bring everything up through the managed spawner by @MOZGIII in #687
  • Correct execution-bringup cancellation token application by @MOZGIII in #688
  • Bring the Prometheus exporter up through the managed spawner by @MOZGIII in #689
  • Bring the tokio metrics reporters up through the managed spawner by @MOZGIII in #690
  • Make the transient execution's response stream own its per-request tasks by @MOZGIII in #691
  • Document what lossy means for the lossy batcher by @MOZGIII in #692
  • Route the batchers' shutdown through the force shutdown token by @MOZGIII in #693
  • Make the lossy batchers end on their last handle by @MOZGIII in #694
  • Stop the state-manager sweeper loop only when its state is gone by @MOZGIII in #695
  • Stop the demand registry bookkeeping and the ackers when their registrars and handles are gone by @MOZGIII in #696
  • Report the worker pool shutdown from poll_complete as None instead of an error by @MOZGIII in #697
  • Split the worker pool handle into requests and completions sides by @MOZGIII in #698
  • Stop the lock renewal loop as soon as its channel is closed and nothing is tracked by @MOZGIII in #699
  • End the lock renewal with the worker pool by @MOZGIII in #700
  • Add schedules to the example app's dev reset by @MOZGIII in #705
  • Declare the typing-extensions dependency by @MOZGIII in #706
  • Declare exactly the tonic and tokio features the bridge crates use by @MOZGIII in #707
  • Gate rustdoc warnings in the extended Rust lint by @MOZGIII in #708
  • Document the server bringups' spawned tasks by @MOZGIII in #709
  • Replace RoundTripMetrics with ActionRoundTrip in the worker message protocol by @MOZGIII in #710
  • Drop the worker's inert cleanup timeout by @MOZGIII in #711
  • Bring the docs in line with the current knobs and helpers by @MOZGIII in #712
  • Raise a typed error when a workflow fails by @MOZGIII in #713
  • Mark the exception class hierarchy as input to the planned base-class matching by @MOZGIII in #765
  • Run the binaries' supervisors on the report's Error form by @MOZGIII in #714
  • Add fn-main-lifecycle crate by @MOZGIII in #715
  • Run the start-workers lifecycle through fn-main-lifecycle by @MOZGIII in #716
  • Take a shutdown future in the worker pool loop by @MOZGIII in #717
  • Relax the pinning error bounds at the execution bringup by @MOZGIII in #718
  • Run the Rust tests with all features by @MOZGIII in #722
  • Bring the AGENTS.md trait-method and metrics rules up to date by @MOZGIII in #729
  • Log level tweaks by @MOZGIII in #730
  • Mark the soak harness's observability connect for the database setup rework by @MOZGIII in #732
  • Add error-fmt crate by @MOZGIII in #754
  • Inline the sources in the library error messages by @MOZGIII in #733
  • Make out-of-range worker indices a panic in the process pool by @MOZGIII in #735
  • Drop the unused default features of metrics-exporter-prometheus by @MOZGIII in #736
  • VM driver hooks: a unifying trait, exposed at the transient bringups by @MOZGIII in #737
  • Take the task monitor as an input of the tokio metrics bringup by @MOZGIII in #738
  • Drop the unused googleapis-common-protos dependency by @MOZGIII in #739
  • Run the coverage suite once for both reports by @MOZGIII in #740
  • Document the observability store as one schema by @MOZGIII in #741
  • Run the lossy batcher's flushers as tasks by @MOZGIII in #742
  • Derive the action runtime metadata decode errors with thiserror by @MOZGIII in #743
  • Log each shutdown request as one line in start-workers by @MOZGIII in #744
  • Stop the durable integration run at the first early task end by @MOZGIII in #745
  • Declare exactly the tokio features the remote worker pool uses by @MOZGIII in #746
  • Align the transient stream missing-result status with the sibling messages by @MOZGIII in #747
  • Reflow two ragged doc comments by @MOZGIII in #748
  • Correct the lossy batcher's sharing doc and swapchain closers list by @MOZGIII in #749
  • Take the README wording for the max concurrent instances knob by @MOZGIII in #750
  • Document the worker remote bringup crates and their start error by @MOZGIII in #751
  • Render the soak harness's database wait error with its optional source by @MOZGIII in #755
  • Skip the lock renewal heartbeats a slow renewal held up by @MOZGIII in #756
  • Declare exactly the tokio features the worker process uses by @MOZGIII in #757
  • Sweep the runloop term out of the guides, scope the instances cap per process and name the HTTP variables by @MOZGIII in #758
  • Truncate a timedelta timeout once, after adding up its keywords by @MOZGIII in #762
  • Document the retry policy as the runtime enforces it by @MOZGIII in #761
  • Delete the example app's orphan uv.lock by @MOZGIII in #759
  • Derive IdDecodeError with thiserror by @MOZGIII in #760
  • Log per-workflow, per-schedule and per-worker events at debug level by @MOZGIII in #763
  • Update sqlx to 0.9 and switch to a git rev by @MOZGIII in #767
  • Build and embed a hello-world SPA in the HTTP server by @piercefreeman in #670
  • Redesign the observability webapp and wire it to the API by @piercefreeman in #704
  • Read the PyPI readme from the shared README at build time by @MOZGIII in #777
  • Separate the raised exception from the exception value as a runtime-level generic by @MOZGIII in #785
  • Resolve dotted except types to their class name and reject unsupported handler and retry filter forms by @MOZGIII in #786
  • Reject retry and timeout policy fields the compiler cannot carry faithfully by @MOZGIII in #787
  • Switch to fractional timeouts and backoffs by @MOZGIII in #788
  • Rework Python spec preparation by @MOZGIII in #766
  • Run the worker beside the start-workers binary and from its working directory by @MOZGIII in #789
  • Drop the unread port variables from the example app image by @MOZGIII in #778
  • Remove the stale while and continue recommendations from the IR builder by @MOZGIII in #779
  • Update the docs and README for the current runtime by @MOZGIII in #780
  • Rename the start-workers bin to executor by @MOZGIII in #764
  • Decouple executables provider at the VM runtimes factory from the state manager by @MOZGIII in #791
  • Extract the shutdown signal listener into fn-main-lifecycle-ctrl-c by @MOZGIII in #793
  • Run the bridge under the fn-main lifecycle by @MOZGIII in #794
  • Split the observability-events emitter bringup out of start by @MOZGIII in #795
  • Split the observability store config into per-use modes by @MOZGIII in #796
  • Run the observability store migrations on a dedicated connection by @MOZGIII in #797
  • Allow turning off the observability store's statement timeouts by @MOZGIII in #798
  • Add a schema version check for SQLx migrations by @MOZGIII in #799
  • Check the schema version in the bridge instead of migrating by @MOZGIII in #800
  • Extract the shared Postgres config and bringup out of the observability store by @MOZGIII in #801
  • Move the main database onto the shared Postgres config and bringup by @MOZGIII in #802
  • Per-process defaults for the Postgres pool config by @MOZGIII in #803
  • Move the main database's bringup out of the bridge's workflow store into its fn main by @MOZGIII in #804
  • Add check_migrations to the Postgres bringup by @MOZGIII in #805
  • Add a schema version check for the observability store migrations by @MOZGIII in #806
  • Give every observability store mode a migrations connection or a migrations check by @MOZGIII in #807
  • Bring the observability-events emitter up in the bridge by @MOZGIII in #808
  • Pass the executable's name and version from the VM executables backend to the VM executables state by @MOZGIII in #809
  • Pass the executable's metadata to the VM driver hooks provider by @MOZGIII in #810
  • Add the executable to the VM driver's start events by @MOZGIII in #811
  • Add the bridge's executable_registered event by @MOZGIII in #812
  • Emit the executables registered through the bridge by @MOZGIII in #813
  • Keep the executables the events carry by @MOZGIII in #814
  • Serve the instance's executable by @MOZGIII in #815
  • Move the migrations check's wait claim from the configs to the check by @MOZGIII in #816
  • Keep the config docs to what the config holds by @MOZGIII in #817
  • Call wrap_err_with as a method in the bridge by @MOZGIII in #818
  • Make a failed startup the result over a task's early end by @MOZGIII in #819
  • Fix SPA refreshes and streamline workflow navigation by @piercefreeman in #776
  • Put the language-neutral docs groups first in the navigation by @MOZGIII in #824
  • Correct the docs, README and CONTRIBUTING against the current runtime by @MOZGIII in #822
  • Pass workflow and action arguments as written by @MOZGIII in #823
  • Describe the language-neutral docs without centering Python by @MOZGIII in #830
  • Update dependencies to pull in latest CA blocklists by @MOZGIII in #831
  • Update deps to clear CVEs by @MOZGIII in #836
  • Adopt lapsed action-call requests during the settlement wait by @MOZGIII in #835
  • Defer gRPC imports until the first RPC by @piercefreeman in #834
  • Update pulldown-cmark to fix nested wikilink parsing by @piercefreeman in #863
  • Standardize compilation global handlers (gather POC) by @piercefreeman in #839
  • Extend shared compiler handler dispatch by @piercefreeman in #840
  • Move run_action policies into a registered handler by @piercefreeman in #841
  • Move asyncio.sleep into a registered handler by @piercefreeman in #842
  • Register len with explicit compiler support by @piercefreeman in #843
  • Register range with explicit compiler support by @piercefreeman in #844
  • Register enumerate with explicit compiler support by @piercefreeman in #845
  • Reject unsupported isinstance calls through a handler by @piercefreeman in #846
  • Move data constructors into a registered model handler by @piercefreeman in #847
  • Resolve registered actions by callable identity by @piercefreeman in #848
  • Register list.append with ownership validation by @piercefreeman in #849
  • Reject unsupported Python source semantics by @piercefreeman in #850
  • Separate shared source analysis and register syntax handlers by @piercefreeman in #851
  • Let append decide whether shared ownership facts permit mutation by @piercefreeman in #852
  • Move try statement validation and lowering into its syntax handler by @piercefreeman in #853
  • Move loop validation and lowering into a syntax handler by @piercefreeman in #854
  • Move arithmetic support checks and lowering into a syntax handler by @piercefreeman in #855
  • Move comparison validation and lowering into a syntax handler by @piercefreeman in #856
  • Move assignment rules and lowering into a syntax handler by @piercefreeman in #857
  • Move dictionary validation and lowering into a syntax handler by @piercefreeman in #858
  • Move attribute and index access rules into a syntax handler by @piercefreeman in #859
  • Move literal validation and lowering into a syntax handler by @piercefreeman in #860
  • Move await validation and expression lowering into a syntax handler by @piercefreeman in #861
  • Group compiler helpers in a dedicated package by @piercefreeman in #864
  • Remove unused legacy compiler lowering helpers by @piercefreeman in #865
  • Separate workflow source loading from IR lowering by @piercefreeman in #866
  • Move conditional lowering into its syntax handler by @piercefreeman in #867
  • Move return lowering into its syntax handler by @piercefreeman in #868
  • Move sequence literal lowering into its syntax handler by @piercefreeman in #869
  • Require expression compilation to return IR or raise by @piercefreeman in #870
  • Resolve calls without emitting and lower each call once by @piercefreeman in #871
  • Lower initializer constructors once for attribute access by @piercefreeman in #872
  • Group syntax handlers by statements and expressions by @piercefreeman in #873
  • Type compiler recommendation and policy keys by @piercefreeman in #874
  • Use one nested form for conditional lowering by @piercefreeman in #875
  • Centralize unsupported syntax diagnostics in a catalog by @piercefreeman in #876
  • Share AST argument binding across compiler call paths by @piercefreeman in #877
  • Document compiler limitations and verified safeguards by @piercefreeman in #881
  • Add a make target that rewrites the Python compiler's snapshots by @MOZGIII in #878
  • Fix string length calculation in integration fixture by @piercefreeman in #882

Full Changelog: v0.22.0...v0.30.0