# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.41.0](https://github.com/obeli-sk/obelisk/compare/v0.40.0...v0.41.0)

This release adds operator-controlled security boundaries for secrets and outbound HTTP, together
with offline deployment verification and repair. It also improves JavaScript workflow ergonomics
and makes workflow backtrace persistence explicit. Review the configuration and API migrations
below before upgrading.

### Added

- `obelisk deployment verify` compiles and checks a local deployment without a running server or
  database. `--fix` repairs content digests, updates the exec activity allowlist, and scaffolds
  missing secret declarations.
- Operators can define a global outbound HTTP allowlist and an environment-backed secret registry
  in `server.toml`. Runtime access is limited by both the operator policy and each deployment's
  component policy.
- Workflow backtraces can be persisted on demand through `obelisk execution persist-backtraces`,
  gRPC, or the web API.
- JavaScript workflows may export `async` functions, accept `Date` values for absolute schedule
  times, and use the deterministic Obelisk clock through `Date`, `Date()`, and `Date.now()`.
- *(cli)* `obelisk generate server-config --trusted` emits a minimal single-party configuration
  that allows all exec activities and component-originated outbound HTTP without registering
  secrets.

### Changed

- **Breaking:** *(server)* Component outbound HTTP now requires a matching
  `[[outbound_http.allowed_host]]` entry in both `server.toml` and the deployment. An omitted server
  allowlist denies all component-originated HTTP. Copy existing deployment entries into the server
  configuration as a migration starting point, then narrow them as needed.
- **Breaking:** *(deployment)* Secrets are now operator-owned names declared in the `server.toml`
  `[secrets]` table. Replace `[activity_exec.secrets] env_vars` with
  `activity_exec.secrets = ["NAME"]`, and
  replace nested `allowed_host.secrets.env_vars` with flattened `secrets = ["NAME"]` and
  `replace_in = [...]`. Deployment interpolation of secret values is no longer supported.
- **Breaking:** *(server)* Workflow backtraces are captured lazily during user-issued replay and
  advance operations. The global `wasm.backtrace.persist` setting was removed. Webhooks may opt in
  with `backtrace_persist = true`, which defaults to `false`.
- **Breaking:** *(wit, js, web API)* Execution failure JSON now consistently uses
  `execution_failed`. This replaces the `execution-failed` string projected onto
  `result<_, string>` errors and the web API's `execution_failure` field.
- *(cli)* `obelisk generate token` now prints only the token to stdout and can append its hash
  directly to a server configuration with `--server-config`.
- **Breaking:** *(cli)* `obelisk generate server-config` and `obelisk generate deployment` now
  print their configuration to stdout when no output path is given instead of writing to
  `server.toml` and `deployment.toml`.

### Fixed

- **Breaking:** *(http)* `replace_in = ["params"]` replaces secret placeholders only in URL query
  parameter values, not in paths or parameter names.
- *(deployment)* `--allow-unavailable-runtime-config` now tolerates missing environment variable
  interpolation in plain key/value `env_vars` entries.
- *(js)* Awaited child platform failures retain their projected error value, allowing uncaught
  `ChildError` instances to serialize as a correctly typed workflow error.

### Deprecated

- *(js)* Renamed `obelisk.ChildExecutionError` to `obelisk.ChildError`, which also represents
  cancelled delays. The old name remains an alias for the same constructor.

### Removed

- **Breaking:** *(api)* Removed the deprecated `CancelActivity` gRPC endpoint. Use `CancelExecution`.
- **Breaking:** *(api)* Removed the `allow_missing_runtime_config` REST alias. Use
  `allow_unavailable_runtime_config`.
- **Breaking:** *(cli)* Removed the development-only `obelisk generate *-schema` subcommands.
  Schema assets are now regenerated through `scripts/update-schemas.sh`.

## [0.40.0](https://github.com/obeli-sk/obelisk/compare/v0.39.5...v0.40.0)

This release secures access to host executable activities and the Obelisk API. Exec activities are
disabled by default and can be enabled globally or allowlisted by content digest. The API now uses
bearer token authentication and rejects unauthenticated requests by default. This release also bumps
the Obelisk WIT packages to new major versions, exposing structured child failure information to WASM
callers and through a dedicated error type in JavaScript.

### Added

- *(server)* Gate `activity_exec` behind a new `allow_exec_activities` server.toml setting (default
  disabled), since exec activities run host processes outside the WASM sandbox. Deployments that
  declare exec activities fail verification unless the operator enables the setting or sets
  `OBELISK__ALLOW_EXEC_ACTIVITIES=true` - ([239f564](https://github.com/obeli-sk/obelisk/commit/239f5640516d73fcc38f18ad54b39a29bf08c92a))
- *(server)* `allow_exec_activities` also accepts an allowlist of exec script content digests
  (`["sha256:..."]`), so only reviewed scripts may run. A rejected deployment logs the digest line
  to copy into server.toml after review - ([40ad49d](https://github.com/obeli-sk/obelisk/commit/40ad49d4f05b8c18dce16b04b6f5dbf85652048d))
- *(api)* Bearer token authentication on the API port, covering the web API, gRPC, and gRPC-web.
  Persistent tokens can be configured as SHA-256 hashes in `api.token_hashes` or supplied as
  plaintext through `OBELISK__API__TOKEN`. An ephemeral startup token is always generated and
  printed to the console - ([81e8006](https://github.com/obeli-sk/obelisk/commit/81e8006704496ced8f122bc9a764ca170020da0c))
- *(cli)* `obelisk generate token` prints a fresh API token and its ready-to-paste
  `api.token_hashes` entry. The global `--api-token` flag falls back to `OBELISK_API_TOKEN`, then
  `OBELISK__API__TOKEN`, and authenticates all gRPC and web API calls - ([81e8006](https://github.com/obeli-sk/obelisk/commit/81e8006704496ced8f122bc9a764ca170020da0c))
- *(js)* Awaited child failures are exposed as `obelisk.ChildExecutionError`, with `value`,
  `childId`, `cancelled`, and `failureKind` properties - ([f8c02f3](https://github.com/obeli-sk/obelisk/commit/f8c02f309fe36912ce78521725d7bec65588efc4))

### Changed

- **Breaking:** *(api)* The API port now denies unauthenticated requests by default (HTTP `401`, gRPC
  `UNAUTHENTICATED`), where previously it accepted anything. Clients must present an accepted token; the
  `--allow-unauthenticated-api` server flag restores the old behavior for development or recovery.
  Webhook `http_server`s are unaffected and stay open - ([81e8006](https://github.com/obeli-sk/obelisk/commit/81e8006704496ced8f122bc9a764ca170020da0c)), ([70ea477](https://github.com/obeli-sk/obelisk/commit/70ea47733e96c72d2acf761bd6255b517f5a572d))
- **Breaking:** *(api)* Renamed the runtime-config availability policy from "missing" to "unavailable" so it also covers
  server capabilities (such as exec activities), not only environment variables and secrets. The CLI flag
  `--allow-missing-runtime-config` (and `server verify --ignore-missing-env-vars`) is now
  `--allow-unavailable-runtime-config`, the REST field `allow_missing_runtime_config` is now
  `allow_unavailable_runtime_config`, and the gRPC enum value `RUNTIME_CONFIG_CHECK_ALLOW_MISSING` is now
  `RUNTIME_CONFIG_CHECK_ALLOW_UNAVAILABLE`. The gRPC numeric tag `2` is unchanged, and the REST field
  keeps a serde alias for `allow_missing_runtime_config` so 0.39.x HTTP clients keep working for now - ([239f564](https://github.com/obeli-sk/obelisk/commit/239f5640516d73fcc38f18ad54b39a29bf08c92a))
- **Breaking:** *(wit)* Bumped `obelisk:types` from 4.2.0 to 5.0.0 and both
  `obelisk:workflow` and `obelisk:webhook` to 6.0.0. Child platform failures now expose an
  `execution-failure-kind`; join operations return the value directly and expose the processed response ID
  separately; delay cancellation uses the same result path; and deprecated interfaces were removed. Existing
  components must be rebuilt against the new packages - ([0d9bc60](https://github.com/obeli-sk/obelisk/commit/0d9bc609829e6f8f578419ce1d365adb8cfdc9ed))
- *(wit)* Native components now import support functions without backtrace parameters. Backtrace-carrying
  variants used by interpreted runtimes live in separate support interfaces - ([f478285](https://github.com/obeli-sk/obelisk/commit/f4782858698d09f9788fd73858857ea05bcadd51))
- *(js)* `joinNext` now follows the same throwing behavior as `joinNextTry`, direct calls, and generated
  `awaitNext` functions. Business errors and platform failures throw `obelisk.ChildExecutionError`, while
  successful unit results and completed delays return `null` - ([7962ca5](https://github.com/obeli-sk/obelisk/commit/7962ca59da229fb54eb5f1cf49d17fc8e22dc6b6)), ([088a8c1](https://github.com/obeli-sk/obelisk/commit/088a8c1a2bc7c5ab074a5f81bbfb9b1ecd3989d7)), ([f8c02f3](https://github.com/obeli-sk/obelisk/commit/f8c02f309fe36912ce78521725d7bec65588efc4))


### Removed

- **Breaking:** *(wit)* Removed the never-implemented `submit-config` type and parameters - ([ab8999f](https://github.com/obeli-sk/obelisk/commit/ab8999f969a58a39c1f4b0c6c10f06ddd51202c4))
- **Breaking:** *(cli)*: Disallow `-s` shorthand for `--suppress-type-checking-errors` - ([ced8a19e](https://github.com/obeli-sk/obelisk/commit/ced8a19ec94d16720afb056859a5e523499e8a62))

## [0.39.5](https://github.com/obeli-sk/obelisk/compare/v0.39.4...v0.39.5)

This release introduces execution cancellation, enforcing the structured-concurrency guarantee that a
child does not outlive its parent. Activities are killed mid-run (best effort). Workflows are only
cancellable when their FFQN carries the `-cancellable` suffix. A cancelled workflow is never advanced
again; instead, all its join sets are closed. Closing a join set cancels every activity and
cancellable workflow it holds, awaiting any non-cancellable workflows that remain. The state is
exposed through a `CancelExecution` gRPC call, a `CancellationRequested` log event, the `Cancelling`
pending state, the `get-status-v2` webhook WIT, and the CLI and observability views.

### Added

- *(cancellation)* Execution cancellation via a first-class `Cancelling` pending state and driver:
  `-cancellable` workflows stop being advanced, and each workflow's join sets are closed, cancelling
  the activities and cancellable workflows they hold while awaiting any non-cancellable workflows
  before the cancellation completes; surfaced in observability - ([2baeec2](https://github.com/obeli-sk/obelisk/commit/2baeec2cbbc3173c6f7cb41a62c9fbef56a1a816)), ([8f53bb6](https://github.com/obeli-sk/obelisk/commit/8f53bb666e532a9c8746df20e59e2c1228f917db)), ([c5e10e0](https://github.com/obeli-sk/obelisk/commit/c5e10e003ac5088e6e723f2937a9cc02d80b304b)), ([07dbda8](https://github.com/obeli-sk/obelisk/commit/07dbda807313f5a99b731174e67a861efc3c48eb))
- *(cancellation)* `CancelExecution` gRPC surface and `cancel_workflow` control-plane entrypoint - ([2a9a8fc](https://github.com/obeli-sk/obelisk/commit/2a9a8fcea9705742fd27e169e9362b3eca4b3b8b)), ([8f58687](https://github.com/obeli-sk/obelisk/commit/8f586878f3b9c65eeafde2523c70f09733bf6592))
- *(cancellation)* `CancellationRequested` log event, with `list_executions` state filters rendered against the execution lifecycle - ([0f47e6e](https://github.com/obeli-sk/obelisk/commit/0f47e6e29aa4a81170ea717208df8b02a0b7614a)), ([daf5906](https://github.com/obeli-sk/obelisk/commit/daf5906e6b010d1d62f2ff111dea11ad81a2cb0c))

### Fixed

- *(activity)* Kill a running activity before reporting its cancellation finished, so it cannot outlive its parent - ([a101faa](https://github.com/obeli-sk/obelisk/commit/a101faaa706fb4e82eaf4329b99f21bb275721e6))
- *(activity)* Reject pausing a running activity - ([9b84024](https://github.com/obeli-sk/obelisk/commit/9b840243360f6f196debbf96b9c9f0471c0a4aea))
- *(db)* Update deployment id only after successful auto-upgrade - ([cad7e2c](https://github.com/obeli-sk/obelisk/commit/cad7e2c867264c3834fdb3665a168861464f75d1))
- Emit synthesized component WIT with world in root:component package - ([b951c57](https://github.com/obeli-sk/obelisk/commit/b951c57edab70888799faef6bfb58636c2ec53cd))

### Changed

- *(wit)* Bump obelisk_webhook to 5.3.0, adding `get-status-v2` that reports the `cancelling` state - ([3ea6afb](https://github.com/obeli-sk/obelisk/commit/3ea6afb10033c02eb31e5f5f3265bf85a0705479))
- *(db)* Add a `seq` column to responses and use it for per-execution response cursors; replace the
  `t_state.is_paused` boolean with a single `lifecycle` flag - ([0007f4d](https://github.com/obeli-sk/obelisk/commit/0007f4d7045eee18e16925d8a108b1900860c7e0)), ([c5109ef](https://github.com/obeli-sk/obelisk/commit/c5109ef1b68c2727ff1804ad56dc84aa8d77498e))
- *(cli)* Without an explicit cursor, show the newest events or responses - ([68fb984](https://github.com/obeli-sk/obelisk/commit/68fb984459962eedd77bc17b825664319a548af0))


## [0.39.4](https://github.com/obeli-sk/obelisk/compare/v0.39.3...v0.39.4)

This release hardens deployment submission and switching against cancellation, stores backtrace
sources solely in the content-addressed store, and extends outbound HTTP allowlists with request
URL regex matching.

### Added

- *(toml)* Outbound HTTP allowlists now support request URL regex matching, with env var
  interpolation in the regex - ([7718019](https://github.com/obeli-sk/obelisk/commit/7718019650b860c1e5bbf74d4db9488f99b1d7fe))
- *(deployment)* Enqueuing the active deployment now clears any pending one - ([03447d8](https://github.com/obeli-sk/obelisk/commit/03447d827d0367fe5a9d749b9f36de7a9a359e7b))

### Fixed

- *(deployment)* Deployment submission and switching are now cancel-safe, so an interrupted request
  no longer leaves partial state - ([2573c88](https://github.com/obeli-sk/obelisk/commit/2573c880ab5687817a62c4d9c2d3bd023a78028a)), ([82db51a](https://github.com/obeli-sk/obelisk/commit/82db51ab42561e5e49ad611a7e41e0807ae026a3))
- *(activity-wasm)* Handle the executor shutdown signal in the main `select!` so activities stop
  cleanly - ([bbfb86b](https://github.com/obeli-sk/obelisk/commit/bbfb86b14c2b649ccf6a3352e095b48f4cc9f63c))

### Changed

- JS runtimes now compile in parallel, speeding up startup - ([b8d4d18](https://github.com/obeli-sk/obelisk/commit/b8d4d18c2189d629ab67becc01d7da5fa02c9a60))

### Removed

- *(db)* Dropped the `t_source_file` table; backtrace source blobs are now stored only in the
  content-addressed store. The migration drops existing backtrace source mappings; sources are
  repopulated when deployments are resubmitted or loaded again - ([9e81398](https://github.com/obeli-sk/obelisk/commit/9e813988a2ee7af2f5d570ec0e28775176c84459))

## [0.39.3](https://github.com/obeli-sk/obelisk/compare/v0.39.2...v0.39.3)

Re-release because `cargo publish` failed on an internal error.

## [0.39.2](https://github.com/obeli-sk/obelisk/compare/v0.39.1...v0.39.2)

Re-release because `cargo publish` failed on an internal error.

## [0.39.1](https://github.com/obeli-sk/obelisk/compare/v0.39.0...v0.39.1)

Re-release because `cargo publish` failed on an interal error.

## [0.39.0](https://github.com/obeli-sk/obelisk/compare/v0.38.3...v0.39.0)

This release makes deployments more self-contained and easier to inspect. Obelisk now stores
deployment TOML and deployment-owned source files, can reconstruct deployments back to disk, verifies
deployment packages earlier, and exposes more deployment metadata through the CLI, gRPC, and web API.
It also includes important database fixes for response ordering and missed notifications.

### Added

- *(cli)* `deployment get <ID> [--output DIR] [--force]` retrieves a stored deployment as a
  re-submittable `deployment.toml` plus deployment-owned source files - ([c9b4ecd](https://github.com/obeli-sk/obelisk/commit/c9b4ecd716f4914fa9d4acbd67fb5a50d0f38e19))
- *(cli)* `deployment show <ID>` can show reconstructed deployment TOML or a specific stored source
  file; pass `--json` to render the stored TOML manifest as JSON - ([d4294b0](https://github.com/obeli-sk/obelisk/commit/d4294b0d47e8e77851811c666158c08f4efb4b87))
- *(cli)* `deployment active` prints the active deployment ID - ([dd2279b](https://github.com/obeli-sk/obelisk/commit/dd2279b030b0da24d8f810c60d33829f5db7f6fe))
- *(deployment)* REST accepts multipart deployment packages and verifies deployment packages before
  persisting them - ([4fdb2fc](https://github.com/obeli-sk/obelisk/commit/4fdb2fc64233b08f5f877e07115081c405882710)), ([8378c30](https://github.com/obeli-sk/obelisk/commit/8378c3075ae01940462c55153457ea11c84f59a6)), ([f5f088b](https://github.com/obeli-sk/obelisk/commit/f5f088b634fae3dc2b7aa57156d6bff3a4284f58))
- *(deployment)* Deployment records now include optional descriptions, deployment digests, WASM
  content digests, and backtrace source digests - ([886f298](https://github.com/obeli-sk/obelisk/commit/886f298a0d2df43e8473f8f188002e3e4a667b0c)), ([4baf221](https://github.com/obeli-sk/obelisk/commit/4baf2218ab80141d003058cefdb5fa95b97ce871)), ([988f61e](https://github.com/obeli-sk/obelisk/commit/988f61e9c1d80f30cea79ae7462514add6374aa1)), ([f7a5a2e](https://github.com/obeli-sk/obelisk/commit/f7a5a2e51a4dcade3887113829485c9c43f1eb7a))
- *(grpc,webapi)* Deployment and execution list APIs expose component summaries and support broader
  filtering - ([5a29d42](https://github.com/obeli-sk/obelisk/commit/5a29d42a36aa4b6ffafd9aee4858a9b9e1672cc6)), ([f39f595](https://github.com/obeli-sk/obelisk/commit/f39f595ecd36b2247e708deee175db80027f672e))
- *(toml)* `activity_exec.params_via_stdin` passes activity parameters through stdin, avoiding
  `execve` argument-size limits - ([e4f52f8](https://github.com/obeli-sk/obelisk/commit/e4f52f8bbf25fc77276daae7fa6c6bb571329f44))

### Fixed

- *(pg)* Avoid nondeterministic response replay caused by out-of-order response IDs and missed
  watermark refetches - ([75e09b1](https://github.com/obeli-sk/obelisk/commit/75e09b199d37faec6841e68870499700ae0c50cc)), ([4d59e0f](https://github.com/obeli-sk/obelisk/commit/4d59e0f880074202d084f957d11250dd5ab8826a))
- *(sqlite)* Avoid needless waits for unlock on unordered response notifications - ([7d61726](https://github.com/obeli-sk/obelisk/commit/7d61726ecca28c315fa8a1e67eff50d6ee54e743))
- *(toml)* Disallow configuration that lets the Web UI hijack the server listener - ([e700e3d](https://github.com/obeli-sk/obelisk/commit/e700e3d7dd64401eb24fc2c4e99cef35fe8ec51d))
- *(webapi)* Paginate logs by index and serialize log cursors as opaque strings - ([1a6e0c1](https://github.com/obeli-sk/obelisk/commit/1a6e0c13d2751d872b0385261389fdc67f7f9d43))
- *(webhook)* Persist the execution ID on the first app log - ([c56caf8](https://github.com/obeli-sk/obelisk/commit/c56caf83661c950ddb09f99746f60b1d3cdd07be))

### Changed

- *(deployment)* `deployment.toml` is now the stored source of truth, and deployment-owned files are
  stored in a content-addressed store - ([0b76c74](https://github.com/obeli-sk/obelisk/commit/0b76c748b71b23f777e48fa8104b83a00bc7e8dd)), ([91e8125](https://github.com/obeli-sk/obelisk/commit/91e81253be12605e401d963b434d2c9549071ba7))
- *(deployment)* The `${DEPLOYMENT_DIR}/` prefix is now implicit for deployment-local paths. The
  prefix is still accepted for compatibility, but bare relative paths are resolved from the
  `deployment.toml` directory - ([208779a](https://github.com/obeli-sk/obelisk/commit/208779aa4304a7496dd87a84b97ea0971ab8808b))
- *(deployment)* [**breaking**] JS and exec source files and backtrace source files must now be
  deployment-local. Absolute local paths and `..` escapes are rejected, and referenced source files
  are stored with the deployment - ([d187edd](https://github.com/obeli-sk/obelisk/commit/d187eddb41f164c15d3960eda39b72169cf9d912)), ([c1dd1a5](https://github.com/obeli-sk/obelisk/commit/c1dd1a51c9b6d1ca49333b70d2a69ae3c43e164e)), ([386bcb4](https://github.com/obeli-sk/obelisk/commit/386bcb47c9c6ff2ed256253793763f428c54ec51))
- *(deployment)* [**breaking**] `activity_exec` secrets passed over stdin are now nested under
  `"secrets"` instead of being the top-level JSON object - ([3874aba](https://github.com/obeli-sk/obelisk/commit/3874aba4596bce800358132bf7921d6b470fbbd9))
- *(grpc)* [**breaking**] Deployment execution summaries are now optional in gRPC responses - ([746c211](https://github.com/obeli-sk/obelisk/commit/746c2114ac30a61e8a04aabc84a49f5e4ebf6cff))
- *(webapi)* [**breaking**] The top-level error variant serializes as `err` again, and structural
  endpoints now default to JSON output - ([b315a3a](https://github.com/obeli-sk/obelisk/commit/b315a3a373b65b9991e7502c3492ff5dfb3bc424)), ([02625d6](https://github.com/obeli-sk/obelisk/commit/02625d6ed7cf38372fa6a0e34bff2e3bd9855622))
- *(api,cli)* Deployment submission can provide an optional deployment ID for idempotency, and
  deployment list calls can skip execution counts - ([2c9b894](https://github.com/obeli-sk/obelisk/commit/2c9b894e9877ea3b3b078f353a5042ff07040a5f)), ([607fc42](https://github.com/obeli-sk/obelisk/commit/607fc42767f63208ee40ff22ebcaaad98af07729))
- *(js)* JavaScript runtime errors are more consistent, and mixed imports are verified during
  linking - ([34eca8b](https://github.com/obeli-sk/obelisk/commit/34eca8b5aa6f127e7450f89e25c7435287cfad78)), ([c08b817](https://github.com/obeli-sk/obelisk/commit/c08b817f3318870a3222e494f76360a43a6c4e13))

## [0.38.3](https://github.com/obeli-sk/obelisk/compare/v0.38.2...v0.38.3)

This release adds the `auto` locking strategy and makes it the default for workflows. With this strategy, in-progress executions of a workflow
are automatically replayed and upgraded to the current version right after redeployment.

### Added

- *(grpc,webapi,pg,sqlite)* Implement `auto` locking strategy - ([c88ce2a](https://github.com/obeli-sk/obelisk/commit/c88ce2a13f74260fcb528779ae099079554eeac0))

### Fixed

- *(cli)* Disable WebUI in `generate wit-deps` to aviod panicing - ([8cf254e](https://github.com/obeli-sk/obelisk/commit/8cf254e6fa716c79aa54e5cac424f736660febd1))

### Changed

- *(workflow)* Associate execution with current deployment on upgrade - ([a20d4b9](https://github.com/obeli-sk/obelisk/commit/a20d4b993bd2ce7f1a7bf93b00555769ee64b878))
- *(workflow,grpc,webapi)* Record auto-upgrade outcome in history - ([cd7ac97](https://github.com/obeli-sk/obelisk/commit/cd7ac97c5c393f26605b6d822711f7a74e2c0c0c))

### Removed

- *(test)* Remove in-memory database - ([5ebdaaf](https://github.com/obeli-sk/obelisk/commit/5ebdaafecbea066e2dd1d9c700e6928eba5a490f))


## [0.38.2](https://github.com/obeli-sk/obelisk/compare/v0.38.1...v0.38.2)

### Fixed

- Make `generate wit-deps --skip-local` ignore broken local components - ([296ad6a](https://github.com/obeli-sk/obelisk/commit/296ad6a974741a38335b9d6df8acc05bfdb0fee4))
- Reject rounded float integer conversions - ([a9b8b1f](https://github.com/obeli-sk/obelisk/commit/a9b8b1f5c46b529811043e776d431b7cd84ece42))
- Accept lossless numeric conversions - ([695b8fc](https://github.com/obeli-sk/obelisk/commit/695b8fcad5778d92f35529ec4884321fcf559ad3))


## [0.38.1](https://github.com/obeli-sk/obelisk/compare/v0.38.0...v0.38.1)

### Fixed

- Use fetchCargoVendor for Nix cargo deps - ([1ec52d0](https://github.com/obeli-sk/obelisk/commit/1ec52d067855ac8485da7ad2674e00bb41342234))

### Changed

- *(toml)* Make `cancel_watcher` mandatory, removing `enabled` property - ([a30ef54](https://github.com/obeli-sk/obelisk/commit/a30ef54d451ce2467ec822e9e360ea51e53d1d02))


## [0.38.0](https://github.com/obeli-sk/obelisk/compare/v0.37.7...v0.38.0)

This release adds stepwise execution debugging and recovery with `execution replay` / `execution advance`,
including support for creating paused executions and pausing delays or submitted child executions while advancing.

This release also adds first-class native executable activities in `deployment.toml`:

```toml
[[activity_exec]]
ffqn = "myapp:ops/tasks.run"
location = "${DEPLOYMENT_DIR}/scripts/run-task.sh"
params = [{ name = "name", type = "string" }]
return_type = "result<string, string>"
env_vars = ["PATH", { key = "MODE", value = "prod" }]

[activity_exec.secrets]
env_vars = [{ name = "API_TOKEN", value = "${HOST_API_TOKEN}" }]
```
Result of exec activity execution is read from the process's stdout, which must be encoded as JSON.
Both stdout and stderr are collected and can be viewed using `obelisk execution logs`.
Because of this change, the more limited preopened-directory/process support has been removed from WASM activities.

Deployment configuration is broader and more self-contained: JavaScript components can now use inline `content` or
OCI-backed `location`s.
It also includes several user-visible CLI and API changes, including `execution status` / `execution result`,
more detailed failure reporting and logs, and breaking
protocol/storage changes such as the new `AdvanceExecution` RPC, schema migrations.


### Added

- *(activity)* Interrupt activities in `pause` RPC - ([62d1d76](https://github.com/obeli-sk/obelisk/commit/62d1d76fbec8f830654da344c3d5ac18e8fe9691))
- *(activity_exec)* Stream std streams, only apply limit to stdout - ([b5450d0](https://github.com/obeli-sk/obelisk/commit/b5450d0a3bb7c3bac37c6169b76f900c15a4ddf0))
- *(advance)* Allow changing the paused state of created executions - ([8b17890](https://github.com/obeli-sk/obelisk/commit/8b1789049c3c190819b6adebe3b70b7df3b084d0))
- *(advance)* Allow sending trimmed events - ([df52922](https://github.com/obeli-sk/obelisk/commit/df5292220c0deb7ea3b5a58a4208c2b5ab8f6c31))
- *(cli)* Show std streams in `execution logs` unless disabled - ([ecd0e63](https://github.com/obeli-sk/obelisk/commit/ecd0e639ab4ed5249757c7124a9654e7e292e568))
- *(exec,oci,toml)* Add OCI support for exec activities - ([81734de](https://github.com/obeli-sk/obelisk/commit/81734de2317563d8c870b257d47d705b320048d9))
- *(grpc)* [**breaking**] Implement `AdvanceExecution` RPC - ([8ce19f5](https://github.com/obeli-sk/obelisk/commit/8ce19f59e1a306e03d111b29db6e13d5f2d94ad0))
- *(grpc,webapi)* Add `version` to replay response - ([d65aa44](https://github.com/obeli-sk/obelisk/commit/d65aa44b64e7931a6dd1499d23df2712a5f4ff92))
- *(grpc,webapi)* Extend replay response with next events and return value - ([9be37fd](https://github.com/obeli-sk/obelisk/commit/9be37fd8044dfeb0e0f46082ade99a85ac173d09))
- *(grpc,webapi,cli)* Allow creation of paused executions - ([3a91e1b](https://github.com/obeli-sk/obelisk/commit/3a91e1bc567cf53c0b89312d40f8d391ae517e06))
- *(grpc,webapi,cli,db)* [**breaking**] Allow pausing and unpausing of delay requests - ([47296ef](https://github.com/obeli-sk/obelisk/commit/47296ef0b5f822d005a169983f31d9639857b8d2))
- *(pg,sqlite)* Persist component metadada per deployment - ([e2db54a](https://github.com/obeli-sk/obelisk/commit/e2db54af8f687519b59d28d2848066765c68ba64))
- *(toml)* Allow `content` for JS components - ([c1e2c0b](https://github.com/obeli-sk/obelisk/commit/c1e2c0b7515cee92446ca4b585b8542058ad62bd))
- *(toml)* Add optional per-executor task limiter - ([63b8b0b](https://github.com/obeli-sk/obelisk/commit/63b8b0bd8ed90b1810a60b84f518ce002de58d45))
- *(webapi,cli)* Add `replay`, `advance` - ([35233a3](https://github.com/obeli-sk/obelisk/commit/35233a3eb9c9c6751ce226272a2eba114df30b7c))
- *(webhook-js)* Add support for direct and `-schedule` imports - ([e178a0b](https://github.com/obeli-sk/obelisk/commit/e178a0b9ecd75be9349f22be8e0aed4170e9bd3c))
- *(wit,workflow_js)* Add `sleep-named-bt`, allowing to pass name to `sleep` - ([6772e8e](https://github.com/obeli-sk/obelisk/commit/6772e8ecbec0f2f672299372612bd77bfe0e0558))
- *(workflow-js)* Add stub imports - ([38d6511](https://github.com/obeli-sk/obelisk/commit/38d6511ca2c1f5a16411ed8588eef3f153f82e6a))
- *(workflow-js)* Add support for workflow extension imports - ([8d2b7a9](https://github.com/obeli-sk/obelisk/commit/8d2b7a914f231dc6cb3c81a60d150accae334e11))
- *(workflow-js)* Add support for `-schedule` imports - ([f8f1832](https://github.com/obeli-sk/obelisk/commit/f8f1832fbd9c7b77041ccf1050cf9167be86879e))
- *(workflow-js)* Enable star imports - ([c055875](https://github.com/obeli-sk/obelisk/commit/c055875500b5f54060840c44a3be9b1fc258ab38))
- *(workflow-js)* Add support for idiomatic direct child call - ([e919857](https://github.com/obeli-sk/obelisk/commit/e91985711056e07f30e43c0209b1d767e44a0163))
- *(workflow-js)* Add `obelisk.executionIdCurrent()` - ([7d923ff](https://github.com/obeli-sk/obelisk/commit/7d923ff3d57d373039a43c3733ef2812a3d7500c))
- Implement `activity_exec` - ([1604d1a](https://github.com/obeli-sk/obelisk/commit/1604d1a1e4be6324da8163089d5854a33aa8e5eb))
- *(db)* [**breaking**] Manage database schemas using Refinery - ([d85cfdf](https://github.com/obeli-sk/obelisk/commit/d85cfdf4324638835f57124cdf6a86617757bc10))
- *(workflow)* Add `fn advance` - ([f8db923](https://github.com/obeli-sk/obelisk/commit/f8db92365a5cf0dcf0f895391e914b134931fa33))

### Fixed
- *(cli,js,exec)* Handle multiple functions of same interface in `wit-deps` - ([c80af7b](https://github.com/obeli-sk/obelisk/commit/c80af7b1b3e3bdb1d14fb011b5ce939362e93083))

### Changed

- *(advance)* Capture and send app logs - ([5186c87](https://github.com/obeli-sk/obelisk/commit/5186c877fc2517f31ade8e65ea2fca82189acf06))
- *(advance)* Apply cancellations during `advance` - ([c8f91c5](https://github.com/obeli-sk/obelisk/commit/c8f91c583131661a0796dee543e1be377971b463))
- *(ci)* Add `--json` flag to `generate` subcommands - ([a358a95](https://github.com/obeli-sk/obelisk/commit/a358a95032aeb1e4babcbdff1a11517c3d4520c6))
- *(cli)* Show execution errors and failures in `execution status` - ([210a49c](https://github.com/obeli-sk/obelisk/commit/210a49c1326c563c1d59bb8cc586175017a42f6e))
- *(cli)* Add `--pause-all` to `execution advance` - ([044bcdd](https://github.com/obeli-sk/obelisk/commit/044bcddaa8b0018ccaaa575277b5fe689d5c22ac))
- *(cli)* Add `--pause-delays` flag to `execution advance` - ([69ac356](https://github.com/obeli-sk/obelisk/commit/69ac356c525f64f73b4787e92a3219108bcac01b))
- *(cli)* Let `generate prompt` accept unquoted arguments - ([f57d4d7](https://github.com/obeli-sk/obelisk/commit/f57d4d745c0dd05b2cfa39f9dfcd15a44aea9ead))
- *(cli)* Simplify `generate prompt` - ([fbc4af2](https://github.com/obeli-sk/obelisk/commit/fbc4af2dd237eba65c120a8a843e712a4e9d9cbb))
- *(cli)* Use `DeploymentId` for `deployment show` - ([561e443](https://github.com/obeli-sk/obelisk/commit/561e4432df0b638038a62eb4676d1fbb887426f1))
- *(cli)* Make all flags use snake_case, placeholders all caps - ([8f7f36f](https://github.com/obeli-sk/obelisk/commit/8f7f36f4a2be4e81f4cee1993b14c79ddb50eebb))
- *(cli)* [**breaking**] Unify `generate` overwrite flags under `--force` - ([f8b1a30](https://github.com/obeli-sk/obelisk/commit/f8b1a301c9fcf97d5e285b091fa7ceb7cc8ac0e3))
- *(cli)* Split `execution get` to `status` and `result` - ([1420a6a](https://github.com/obeli-sk/obelisk/commit/1420a6ab3766b56701572cba73a0e93e42f39e7c))
- *(cli)* Add `--trim` option to `execution advance` - ([c5b9d8c](https://github.com/obeli-sk/obelisk/commit/c5b9d8c90ad8593190eebec0fd3626e8d559cad9))
- *(cli)* Fix pagination parsing when plaintext logs contain `\n` - ([dd57bfa](https://github.com/obeli-sk/obelisk/commit/dd57bfac7d83580bcadcd956299921eee4dfb451))
- *(db)* [**breaking**] Add `_wasm` suffixes to workflows and webhooks, simplify uniquensss checks - ([065656e](https://github.com/obeli-sk/obelisk/commit/065656e263e1575ebc89e5f593a16598dd787cb0))
- *(db)* [**breaking**] Rename execution error to execution failure - ([e7ef62d](https://github.com/obeli-sk/obelisk/commit/e7ef62d9959b19747c47c4fcc26bdbf09052d70f))
- *(db)* Remove `PendingStatePaused::Locked` - ([4fe1e73](https://github.com/obeli-sk/obelisk/commit/4fe1e73af3452eb4fef4184f7e73ff8927d5e14a))
- *(db)* Append `Unlocked` on pausing a locked exe, ignore `Paused(Locked)` in `get_expired_timers` - ([c6aab25](https://github.com/obeli-sk/obelisk/commit/c6aab25af9d9903205545337e46661749691ee26))
- *(db)* Fix paused execution creation - ([49b7c49](https://github.com/obeli-sk/obelisk/commit/49b7c49403e93a508cb123cf05a3aefe8430262c))
- *(exec)* Rename `task_limiter` to `task_limiter_global` - ([276ff7f](https://github.com/obeli-sk/obelisk/commit/276ff7fceb89dd13640db28a105f46d9f99268c5))
- *(exec)* Remove exposing `PATH` when `env_vars` is empty - ([3de69a2](https://github.com/obeli-sk/obelisk/commit/3de69a27b01715f23c0c5bd58c9cf06659776589))
- *(grpc)* Add `ExecutionFunctionFilter` to fix searching by package with version - ([3e59cab](https://github.com/obeli-sk/obelisk/commit/3e59cabc66ccfbac852c00d95edbe419b2f16a5a))
- *(grpc)* Make it no-op when a delay is already (un)paused - ([a4874e6](https://github.com/obeli-sk/obelisk/commit/a4874e65a4861aedb597f1d54cb3d26ef51ad4bb))
- *(grpc)* Split `Cancel` to `CancelActivity` and `CancelDelay` - ([d758da4](https://github.com/obeli-sk/obelisk/commit/d758da451a873dcbe7202dd3c691a04656cab2c7))
- *(grpc)* Send `finished_result` in `AdvanceExecutionResponse` - ([3902070](https://github.com/obeli-sk/obelisk/commit/3902070dea6d799eb74d05d6abca1088105ec0f1))
- *(grpc,webapi)* Add optional `deployment_id` to the WIT query - ([8f1c6ca](https://github.com/obeli-sk/obelisk/commit/8f1c6ca54400a207c7f01cc519e0043f6d9c05ac))
- *(grpc,webapi)* Collect backtraces for captured `AppendStubResponse` - ([8c0e4b6](https://github.com/obeli-sk/obelisk/commit/8c0e4b639a5534bf6a96a27918351ad1814c0cf3))
- *(grpc,webapi)* Expose captured writes in replay failed error - ([eb2e43d](https://github.com/obeli-sk/obelisk/commit/eb2e43dcfc630562453d1a0e70a46fc407231877))
- *(grpc,webapi)* Send finished events, remove retval and version from replay response - ([b0d7e42](https://github.com/obeli-sk/obelisk/commit/b0d7e423c3f76fecce9e2278ec38d03f8149ef85))
- *(js)* [**breaking**] Unify JS result APIs — return ok value, throw err value - ([89968e9](https://github.com/obeli-sk/obelisk/commit/89968e9ea9b5b3d4f699b28292c4cc059b8fa949))
- *(js,exec)* Make unit type accept any response - ([068eb4c](https://github.com/obeli-sk/obelisk/commit/068eb4c83ed8bed530b5404b16d16737f9ba3a7d))
- *(replay)* Send captured writes to persist execution errors in `ReplayError::ReplayFailed` - ([04f4343](https://github.com/obeli-sk/obelisk/commit/04f4343167b362571ca52c54e6c4fa364caa4511))
- *(replay)* Capture and persist `FatalError`s as execution errors - ([da5bca4](https://github.com/obeli-sk/obelisk/commit/da5bca4e0772a58affe0c912b3d13f53494c8b82))
- *(replay)* Capture WASM backtrace - ([4c6d2bf](https://github.com/obeli-sk/obelisk/commit/4c6d2bf347531e01069b3b2391c5dee427eb80b5))
- *(replay)* Do not append `Finished` event on `ReplayKind::Finished` - ([3348e75](https://github.com/obeli-sk/obelisk/commit/3348e75f2b54826ac3593e95d5970a2afb5e2822))
- *(replay)* Interrupt replay in `get_stub_create_request` instead of flush - ([f0a35a8](https://github.com/obeli-sk/obelisk/commit/f0a35a869f3ae6505f9f1ccf7c250bfe383e1744))
- *(toml)* Honor `--missing-env-vars` when verifying exec with secrets - ([6589a78](https://github.com/obeli-sk/obelisk/commit/6589a78e553d6c886aca93ccf8f213596dc6c3ef))
- *(toml)* Make names optional for inline stub and external activities - ([2a6cab8](https://github.com/obeli-sk/obelisk/commit/2a6cab8a7991fe13a42fb3142fd322ddd0b1298d))
- *(toml)* Make name optional for `workflow_js`,`activity_js`,`activity_exec` - ([203ec9a](https://github.com/obeli-sk/obelisk/commit/203ec9a63b65fc0cac425ec49fc9ac3a221885c3))
- *(webapi)* Show error / execution failure in `/events` - ([8249a1c](https://github.com/obeli-sk/obelisk/commit/8249a1cf02f88b7a49afaa8fcfb8e378abcece24))
- *(webapi)* Show error / failure in plaintext execution status response - ([1b23900](https://github.com/obeli-sk/obelisk/commit/1b2390071b2ae149d19dfc6388ba06e84f58b675))
- *(webapi)* [**breaking**] Use `error` instead of `err` for retval - ([0adaef6](https://github.com/obeli-sk/obelisk/commit/0adaef6b80bfa6f96b8a8c61c00925b0e652df28))
- *(webhook)* Gracefully shutdown connection on hot redeply - ([9f6041f](https://github.com/obeli-sk/obelisk/commit/9f6041ff4824530a7aee668bf68ea1b73c208847))
- *(wit)* Bump `obelisk_webhook` to 5.2.0, add `execution-id-current` - ([6a46e14](https://github.com/obeli-sk/obelisk/commit/6a46e149b62f3bc7339cdc76d5c7d8a708cd91a2))
- *(wit)* Bump `workflow-support` to 5.1.0 - ([2302566](https://github.com/obeli-sk/obelisk/commit/23025664081747ea4e763a1ae6038718c2b7209e))
- *(workflow-js)* Make `joinNextTry` idiomatic - ([1026d31](https://github.com/obeli-sk/obelisk/commit/1026d31965e6fad234afe7e07a0024c1b9b6e617))
- *(workflow-js,replay)* Transform `AppendFinished` to user specified type - ([ecf16cd](https://github.com/obeli-sk/obelisk/commit/ecf16cd5108e4dcd45615034b0195e73149e3e5b))
- Drop `Option` from `ExecutionMetadata` - ([ffdc544](https://github.com/obeli-sk/obelisk/commit/ffdc5441973b060f526cee9c1a51ea787463b885))

### Removed

- *(activity_wasm)* [**breaking**] Remove preopened dir and process API - ([33ab372](https://github.com/obeli-sk/obelisk/commit/33ab37259c4976d11881bc44e513ee3490d8820b))


## [0.37.7](https://github.com/obeli-sk/obelisk/compare/v0.37.6...v0.37.7)

### Added

- *(cli)* Add `--skip-local` switch to `generate wit-deps` - ([2b0e045](https://github.com/obeli-sk/obelisk/commit/2b0e0457757cf71bdda4d20aa42ccc631a6d3ac8))
- *(cli)* Add execution upgrade - ([881bc63](https://github.com/obeli-sk/obelisk/commit/881bc6322b3df00afd99363360872c14f362dd1e))
- *(cli)* Add replay - ([51ad2d5](https://github.com/obeli-sk/obelisk/commit/51ad2d550efbb87b1f61911ed74e8a4ed739eceb))
- *(cli)* Add pause/unpause - ([38ee34a](https://github.com/obeli-sk/obelisk/commit/38ee34a0c41dc6083ea016a714678d7fbdf1f3b6))
- *(cli)* Allow filtering by execution id prefix in `execution list` - ([057174b](https://github.com/obeli-sk/obelisk/commit/057174ba0c008ba66384d99c7a951b22738ddea1))
- *(cli,webui)* Add `logs`, `events`, `responses`, `list` commands to `execution` - ([f4e0fe3](https://github.com/obeli-sk/obelisk/commit/f4e0fe31d21f73cec26a06778198c374f99b44f1))
- *(webapi)* Allow filtering by ffqn in `/components` - ([c438b3d](https://github.com/obeli-sk/obelisk/commit/c438b3d710a6ebb7acfc9eae8ab9e1b518ad0578))
- *(workflow-js)* Return `Date` object on `obelisk.sleep` - ([9652d98](https://github.com/obeli-sk/obelisk/commit/9652d985e9865c17ea1a6ec5024a4abba8cbbf0f))

### Fixed

- *(cli)* Avoid failing on missing old files in `generate wit-deps` - ([7f1c7e8](https://github.com/obeli-sk/obelisk/commit/7f1c7e80a3186e7f7756208b970f8519cf227ef8))
- *(grpc)* Apply filtering by `FunctionName` in `ListComponents` - ([7973620](https://github.com/obeli-sk/obelisk/commit/79736202686d6dd5433cb73dfff498df65e4e695))
- Fix replaying of unfinished executions - ([7a49db7](https://github.com/obeli-sk/obelisk/commit/7a49db7e7d2ec0107f3b0650b270c31754d0520a))
- *(cli)* Suppress linking errors on `generate wit-deps` - ([860896c](https://github.com/obeli-sk/obelisk/commit/860896ca5a30b8aa7aed07df938655e4fadbe945))


## [0.37.6](https://github.com/obeli-sk/obelisk/compare/v0.37.5...v0.37.6)

### Added

- *(activity-js)* Persist sources for better introspection - ([ff99b33](https://github.com/obeli-sk/obelisk/commit/ff99b3393cf2ca559a647e321b4d0d3078ddabdc))

### Fixed

- Unpublish cron workers from registry, make ffqn searchable - ([dd1baaf](https://github.com/obeli-sk/obelisk/commit/dd1baaf9779851889ff2cf7168ee99be341101b8))

### Changed

- *(web-api)* Return `upgraded` even if component digests match - ([b8ade35](https://github.com/obeli-sk/obelisk/commit/b8ade3584e4e52a4769b6f53b0ed3182d0735836))
- *(webhook-js)* Rename `currentExecutionId` to `executionIdCurrent` - ([9ead241](https://github.com/obeli-sk/obelisk/commit/9ead241da8270bda65470e51bff73548f613d94b))


## [0.37.5](https://github.com/obeli-sk/obelisk/compare/v0.37.4...v0.37.5)

### Fixed

- *(webhook-js)* Allow parsing request body via `text`, `json`, `form_data` - ([56f4a2c](https://github.com/obeli-sk/obelisk/commit/56f4a2ceff140682afd62cc065bcc070daa8d9ee))


## [0.37.4](https://github.com/obeli-sk/obelisk/compare/v0.37.3...v0.37.4)

### Fixed

- Inject `webui` to deployment before constructing `http_servers_to_webhook_names` - ([8bf715d](https://github.com/obeli-sk/obelisk/commit/8bf715dd03258c35793a9560777844d2622e90b2))


## [0.37.3](https://github.com/obeli-sk/obelisk/compare/v0.37.2...v0.37.3)

### Fixed

Fixed Garnix build automation that went wrong with the 0.37.2 release.

## [0.37.2](https://github.com/obeli-sk/obelisk/compare/v0.37.1...v0.37.2)

This release adds support for specifying periodic and one-off executions directly in `deployment.toml`:
```toml
[[cron]]
name = "my-daily-job"
ffqn = "myapp:tasks/jobs@1.0.0.daily-cleanup"
params = '["arg1", 42]'
schedule = "@daily"     # cron expression, or one of "@once", "@daily", "@hourly", "@weekly", "@monthly", "@yearly".
```

### Added

- *(cron)* Add first-class periodic execution support - ([6099e9a](https://github.com/obeli-sk/obelisk/commit/6099e9ae81acdd31b85e12d8511db6fa499f111c))

### Fixed

- *(webhook-js)* Rename `generateExecutionId` to `executionIdGenerate` - ([cb5e3dc](https://github.com/obeli-sk/obelisk/commit/cb5e3dc97e0af964d5032bea04b9258849c1f998))

## [0.37.1](https://github.com/obeli-sk/obelisk/compare/v0.37.0...v0.37.1)

### Fixed

- *(cli)* Output WASM WITs using their `Resolve` in `generate wit-deps` - ([9a8cb04](https://github.com/obeli-sk/obelisk/commit/9a8cb043a53f7039b604d71ea84c74868d624ce0))
- Disallow JS and WASM components sharing the same `IfcFqn` - ([c8b595b](https://github.com/obeli-sk/obelisk/commit/c8b595b9579b4578bf05825145e07b1609a82b9f))

### Changed

- Print WIT indended with 4 spaces - ([edad80a](https://github.com/obeli-sk/obelisk/commit/edad80a628b98ec201fa1af97868080692566148))


## [0.37.0](https://github.com/obeli-sk/obelisk/compare/v0.36.1...v0.37.0)

JavaScript components are now first-class: they can be pushed to and pulled from OCI registries just like WASM components.
OCI images now carry Obelisk metadata, like allowed hosts, env vars, and secrets for activities and webhooks, directly in the manifest.
GitHub (`gh://`) references have been removed from JS component configuration in favor of OCI.

### Added

- *(cli)* Pin OCI location with manifest digest when using --locked - ([7a3cdd5](https://github.com/obeli-sk/obelisk/commit/7a3cdd54e4f3f66197f19ef2040026fe9b4ea494))
- *(cli)* [**breaking**] Add OCI metadata for `component push` and `component add` - ([d1f69d4](https://github.com/obeli-sk/obelisk/commit/d1f69d44bdaa16a6bbd43bde5c5b6fbff24afcd0))
- *(cli)* Generate webhook support WIT - ([c851159](https://github.com/obeli-sk/obelisk/commit/c851159f3fb937eb352c8be7b3afe1b7eed61a82))
- *(js,oci)* Add OCI push / pull support for JS components - ([ecd1c34](https://github.com/obeli-sk/obelisk/commit/ecd1c3466f54025e5232ba46c448dd95dda9c12c))
- *(webapi)* Mirror missing deployment APIs from gRPC - ([611c8aa](https://github.com/obeli-sk/obelisk/commit/611c8aaa6b7a6a35fcde1c874a402df071b75c50))
- *(webapi)* Expose backtrace and sources - ([981257e](https://github.com/obeli-sk/obelisk/commit/981257e7f0871a01397eca20b896176ecce1b1a5))
- *(webapi,grpc)* Allow getting logs of derived executions in a single request - ([1ba3a0b](https://github.com/obeli-sk/obelisk/commit/1ba3a0b9b0529beed19c43e954cfe0382403b96f))
- *(webhook)* Add currentExecutionId() JS API - ([ca56ae3](https://github.com/obeli-sk/obelisk/commit/ca56ae38f7b7d29737ffef2ce37a895001c403d0))
- *(workflow-js)* Add support for `Date.now()` - ([2ae9c96](https://github.com/obeli-sk/obelisk/commit/2ae9c96c473f4182d26261b7acd2f1be4795724a))
- *(workflow-js)* Add support for `Math.random` - ([bcb5066](https://github.com/obeli-sk/obelisk/commit/bcb5066f0e1ca1d0e4c7552339928afbeb258551))
- Feat(cli) Add `-d` short arg to `server run` and `verify` commands - ([c9e0921](https://github.com/obeli-sk/obelisk/commit/c9e092174057233d6c021d48aa2529076e41cc96))

### Fixed

- *(cli)* Output JS activities, merged interfaces in `generate wit-deps` - ([01fb978](https://github.com/obeli-sk/obelisk/commit/01fb9784e9f4cbc899c6b3b2ec843c61c5620ba6))

### Changed

- *(docker)* Remove env vars, bundle `server.toml`, bind to `[::]` - ([a133b18](https://github.com/obeli-sk/obelisk/commit/a133b184a5d381a55cb091d05f5831b63b3c4774))
- *(js)* Include actual return type in error message when throwing non-null - ([bbcf612](https://github.com/obeli-sk/obelisk/commit/bbcf61276a1d72794e47839a9a7e3eb733c7ad39))
- *(toml)* Remove all prefix support from deployment except for `DEPLOYMENT_DIR` - ([6a6cfb3](https://github.com/obeli-sk/obelisk/commit/6a6cfb3bb82b73b5bf0924578d3c515213eca6b5))
- *(toml)* Convert wit params to kebab case transparently - ([14bcb72](https://github.com/obeli-sk/obelisk/commit/14bcb7253cf9a5c1f093130bd803e51db7480a66))
- *(wit)* Bump `webhook-support` to 5.1.0 - ([96c7504](https://github.com/obeli-sk/obelisk/commit/96c750463333bf6f306f0bfafb14bc4965f36466))
- Expand JS webhoook local paths - ([91b4cc3](https://github.com/obeli-sk/obelisk/commit/91b4cc3af01afa9dca1184d1d1287b5f5d96926d))

### Removed

- *(toml)* [**breaking**] Remove github references - ([e472311](https://github.com/obeli-sk/obelisk/commit/e472311db1a14b13d16ff83563ede898bdaf959c))

## [0.36.1](https://github.com/obeli-sk/obelisk/compare/v0.36.0...v0.36.1)

### Fixed

- *(cli)* Use actual section names in `component add` - ([30673be](https://github.com/obeli-sk/obelisk/commit/30673be465829f006a69faf2b201da16cd5b22ff))


## [0.36.0](https://github.com/obeli-sk/obelisk/compare/v0.35.4...v0.36.0)

This is a large release introducing JavaScript support for activities, workflows, and webhooks, alongside a new deployment management system, outbound HTTP security controls, and numerous configuration improvements. It contains several breaking changes to config file structure, database schema, and internal APIs.

### Added

- Add JavaScript support for activities (`[[activity_js]]`), workflows (`[[workflow_js]]`), and webhooks — write components in JavaScript using the embedded Boa engine; supports custom parameters, rich return types, `fetch()`, `crypto.subtle`, `process.env`, and ESM default exports

- Add outbound HTTP host allowlists via `[[allowed_host]]` config — requests to non-listed hosts return `HttpRequestDenied`; supports env var interpolation and wildcards for HTTP methods and ports

- Add secret placeholder injection via `secrets` config — components receive opaque placeholders; the runtime substitutes real values only in requests to approved hosts

- Add deployment management: deployments are now persisted in the database; `obelisk.toml` is split into `server.toml` and `deployment.toml`; new `deployment apply` CLI command for hot-redeploying immediately

- Add hot redeploy support for activities, workflows, and webhooks — running executions are gracefully unlocked on shutdown or redeploy

- Add `stub-json` and `schedule-json` to the workflow WIT API

- Add inline stub and external activity definitions in `deployment.toml`

- Add bash-style default values in env var interpolation (`${VAR:-default}`) and `${VAR}` interpolation in `env_vars` values

### Changed

- [**breaking**] Rename TOML section `workflow` to `workflow_wasm` and `webhook_endpoint` to `webhook_endpoint_wasm`

- [**breaking**] Remove `ignore_component_digest` config option

- [**breaking**] Remove `retry_on_err` setting — retry on error is always enabled; return a variant containing `permanent` to skip retrying

## [0.35.4](https://github.com/obeli-sk/obelisk/compare/v0.35.3...v0.35.4)

### Added

- *(cli)* Add `--overwrite` option to `obelisk generate wit-support` - ([24dfe10](https://github.com/obeli-sk/obelisk/commit/24dfe1099281c2cefd16191ded95edca65da9404))

### Fixed

- Replace deprecated 'obelisk client' with 'obelisk' in README - ([d109392](https://github.com/obeli-sk/obelisk/commit/d109392e640efd45126324484efcf78e7e5798ed))
- Install system CAs in docker images - ([f78ce87](https://github.com/obeli-sk/obelisk/commit/f78ce87d5c657e3bc29b4a983dd701d24e8bea44))
- Use consistent ns_package@version.wit naming for all generated WIT files - ([cdc1e47](https://github.com/obeli-sk/obelisk/commit/cdc1e47e2a88c71a6e1705861f5c84df52838574))

### Changed

- Write Obelisk header in `generate wit-deps` files - ([3fe7b7a](https://github.com/obeli-sk/obelisk/commit/3fe7b7aa255bab9cc2ef5c05c24058f32c4bb0be))
- Indent WIT by 4 spaces - ([65a0908](https://github.com/obeli-sk/obelisk/commit/65a090838a9e59895a8ce86d91ceb0fbea2f0a2a))
- Replace `found_response: bool` in `JoinNextTry` history event with `JoinNextTryOutcome` enum (`found`, `pending`, `all_processed`). Old serialized data is deserialized via backwards-compatible serde support. The gRPC `JoinNextTry` message now has an `Outcome` enum field alongside the deprecated `found_response` bool. ([#247](https://github.com/obeli-sk/obelisk/pull/247))


## [0.35.3](https://github.com/obeli-sk/obelisk/compare/v0.35.2...v0.35.3)

### Fixed

- Move the `rustls` crypto provider `ring` into `main` - ([2d97e5d](https://github.com/obeli-sk/obelisk/commit/2d97e5d34ab62bd221ef106f1489623014ce40ca))
- Use actual version instead of `latest` in `generate wit-support` - ([64946fc](https://github.com/obeli-sk/obelisk/commit/64946fcd493212fb0e9f4ce8836b654cd31ff8e4))


## [0.35.2](https://github.com/obeli-sk/obelisk/compare/v0.35.1...v0.35.2)
Fixes the previous release, which has moved to `rustls-no-provider` feature of `reqwest` but failed to initialize the
`rustls-ring` crypto provider.

### Fixed

- Download artifacts from GH releases using - ([ed3dfcd](https://github.com/obeli-sk/obelisk/commit/ed3dfcd586a7da81ce3e9cbf9af37c28baf53d16))
- Explicitly initialize default TLS provider - ([159548d](https://github.com/obeli-sk/obelisk/commit/159548db3bedcbbe03e660ff88e47e405ea91fdc))

## [0.35.1](https://github.com/obeli-sk/obelisk/compare/v0.35.1...v0.35.1)
Fixes cross-compilation for MacOS.

## [0.35.0](https://github.com/obeli-sk/obelisk/compare/v0.34.1...v0.35.0)

This release introduces **workflow replay** for debugging and recovery, **execution pausing/unpausing**, and **persistent logs storage**. Component management has been streamlined with `component add` and GitHub release path support (`gh://`). The database schema has changed - delete the old SQLite database with `obelisk server run --clean-sqlite-directory`.

### Highlights

- **Workflow Replay**: Re-execute workflows from their event history for compatibility testing between workflow versions
- **Pause/Unpause Executions**: Temporarily halt and resume workflow executions via API or WebUI
- **Persistent Logs**: Store execution logs and output streams in the database, access via API or WebUI
- **Component Management**: New `component add` command with `--locked` support and GitHub release paths (`gh://`)
- **OpenAPI Schema**: Auto-generated OpenAPI documentation for the Web API
- **Permanent Error Handling**: Activities returning a variant containing `permanent` skip retries
- **snake_case JSON Serialization**: JSON representation of WIT values now uses `snake_case` instead of `kebab-case`

### Added

- Implement workflow replay ([e4d9a92](https://github.com/obeli-sk/obelisk/commit/e4d9a92281cda744bba0687df5eb09ce0feaa615))
- Implement pausing/unpausing of executions ([3f4df76](https://github.com/obeli-sk/obelisk/commit/3f4df76742689cd6d717b2dd92cc5c9795b37147))
- Implement persistence layer for logs and streams ([3257336](https://github.com/obeli-sk/obelisk/commit/32573361c7cdcded8e0a95c559d9c58d6cf745d2))
- Add `component add` command with `--locked` option ([19b990e](https://github.com/obeli-sk/obelisk/commit/19b990ea9f9d72137ac4f58be6308a815a098b06), [d1dac13](https://github.com/obeli-sk/obelisk/commit/d1dac13f3ecba0d695bf3f733f79ec251f47b6ce))
- Allow specifying component location as GitHub release path (`gh://`) ([d704f31](https://github.com/obeli-sk/obelisk/commit/d704f315ec687d4cba86f6c5098b74e570dd181b))
- Add OpenAPI schema generation for web API ([5aae330](https://github.com/obeli-sk/obelisk/commit/5aae3301b26436dfe4639ddcacba4539fbb990b2))
- Skip retrying activity if it returns variant containing `permanent` ([ba08f0a](https://github.com/obeli-sk/obelisk/commit/ba08f0ae2e5f0c62f66cde8d6ef9df58097f37b5))
- Add `join-next-try` to WIT ([0e33fb7](https://github.com/obeli-sk/obelisk/commit/0e33fb75644a62e36f84f3002b6415eedd074b4c))
- Add `submit-json` and `get-result-json` to `workflow_support` ([9a9a66e](https://github.com/obeli-sk/obelisk/commit/9a9a66eac6be61d7ebf25681b3b160be23459383))
- Add `obelisk-version` field to config for version compatibility checking ([3df7516](https://github.com/obeli-sk/obelisk/commit/3df75160e477527f3f8d8dd963f861b7ed03ef20))
- Allow using URLs as a TOML config source ([ad5284b](https://github.com/obeli-sk/obelisk/commit/ad5284b6c98cc628638c6897a9c216f6e0ddb586))
- [**breaking**] Allow inspecting remote components ([84b6468](https://github.com/obeli-sk/obelisk/commit/84b6468caf78e30443a2c00cfab96c106899d384))
- Implement `/v1/executions/{id}/logs` ([ab068cf](https://github.com/obeli-sk/obelisk/commit/ab068cfde3a29b5ea7c3e15d61ef633c4545cbd3))
- Allow filtering executions by digest, deployment ID ([1c305b6](https://github.com/obeli-sk/obelisk/commit/1c305b62613e38551251ed535cc92256a58388ff))
- Add `GET /v1/deployment-id` and deployment state listing ([b0c7935](https://github.com/obeli-sk/obelisk/commit/b0c79355db749ab2942e11bff21869614bd2aa16), [b2c163d](https://github.com/obeli-sk/obelisk/commit/b2c163d33bf42755e8585e8575b4e75dbf2099b5))
- Add `/v1/functions` and `/v1/functions/wit?ffqn={ffqn}` endpoints ([b7b9a13](https://github.com/obeli-sk/obelisk/commit/b7b9a13768b4a69259b49d4ac04670494fc872ac), [73c47fd](https://github.com/obeli-sk/obelisk/commit/73c47fd7f389301b80b877c1ee67c8095d7ce8f8))
- Fail on type checking errors by default for `run`, `verify` ([fd7ac55](https://github.com/obeli-sk/obelisk/commit/fd7ac55c348071fc979d735a0c38b9f640583a05))

### Fixed

- Fix off-by-one errors in `random-u64` and `random_string` ([b1d8953](https://github.com/obeli-sk/obelisk/commit/b1d89539cb89d05d3d6200eece7af42d128d0119), [fd24910](https://github.com/obeli-sk/obelisk/commit/fd249108e60839262a14bd85e5c75356e0f16911))
- Return to pending if paused execution receives a response and unpauses ([bfcec56](https://github.com/obeli-sk/obelisk/commit/bfcec5600d016e776bf11852532cf6e73e5ff3e7))
- Close join sets on fatal errors ([0058fb2](https://github.com/obeli-sk/obelisk/commit/0058fb2fdac6843a19165440cf626fe178cc5022))
- Flush db cache before join set close ([48054ab](https://github.com/obeli-sk/obelisk/commit/48054abc5beabb6b3e9292b522173bc3a5a7ed52))
- Make server WIT types 4.0.0 compatible ([c3b0906](https://github.com/obeli-sk/obelisk/commit/c3b090685c78f5fc111dbc520ffa5fd681f487e9))

### Changed

- [**breaking**] Use `snake_case` for JSON serialization ([31e523e](https://github.com/obeli-sk/obelisk/commit/31e523e2e2629e9356e67de1014f8a99512d7547))
- [**breaking**] Use single `location` field with optional `oci://` prefix ([b744628](https://github.com/obeli-sk/obelisk/commit/b7446286e22ea88d2ebb96aabfda8a9102522461))
- [**breaking**] Make locking `by_component_digest` the default ([d2a3da6](https://github.com/obeli-sk/obelisk/commit/d2a3da6148cec48ec59432bd7c415c191e613a33))
- [**breaking**] Rename `log.stdout` to `log.console` ([ff07143](https://github.com/obeli-sk/obelisk/commit/ff07143cc3927d23976f80846e55cd51884ebb74))
- [**breaking**] Add "UNSPECIFIED" variant and prefixes to gRPC enums ([d26301f](https://github.com/obeli-sk/obelisk/commit/d26301f7afd3b296a96126b6225a5eeda0e306fd))
- [**breaking**] Database schema changes - delete old database required

### Removed
- [**breaking**] Remove `convert_core_module` from TOML config ([f28fa9e](https://github.com/obeli-sk/obelisk/commit/f28fa9e7b4fcec2940cae71772140036f27d0748))


## [0.34.1](https://github.com/obeli-sk/obelisk/compare/v0.34.0...v0.34.1)

This release contains a fix for transforming Core WASM workflows to WASM Components which was skipped in 0.34.0 if the WASM file was pulled from an OCI registry.

### Fixed

- Output transformed file as `sha256_{input_digest}_transformed.wasm` - ([941f52d](https://github.com/obeli-sk/obelisk/commit/941f52d38f3b246f56d555b4865d889ab5ba5b8d))


## [0.34.0](https://github.com/obeli-sk/obelisk/compare/v0.33.1...v0.34.0)

This release changes serialization format in the database. Error reporting has been improved.

The most notable change is the ability to generate exported WIT packages of activities and workflows directly from the TOML configuration:
```sh
obelisk generate wit-deps some.toml dstpath
```

### Added

- *(cli)* Generate all importable WITs from a TOML - ([8958cb9](https://github.com/obeli-sk/obelisk/commit/8958cb933ba68f210820ab7de226c1387a6dad87))
- *(toml)* Make `out` logging enabled by default - ([0afe30b](https://github.com/obeli-sk/obelisk/commit/0afe30bf73525536324f65a4b3d650eae897e3e6))
- *(toml)* Allow ignoring component's digest when requesting sources - ([5d5d6ee](https://github.com/obeli-sk/obelisk/commit/5d5d6eed63a34742b862bcde8838ca899e61dcf7))
- Allow running without exposing API server - ([3311497](https://github.com/obeli-sk/obelisk/commit/33114972a54e9a47e4519c9d897de360cf40467a))
- Add Litestream sample config - ([020a2dd](https://github.com/obeli-sk/obelisk/commit/020a2dd73cc0f72a00f5d5a495442e0429f8f75d))
- Print content digest in `inspect` - ([cf84e45](https://github.com/obeli-sk/obelisk/commit/cf84e454437503a4d717d884ce4e5edf70d71d72))

### Changed

- *(cli)* [**breaking**] Rename `generate extensions` to `generate wit-extensions` - ([7151ef9](https://github.com/obeli-sk/obelisk/commit/7151ef964cc71389250e88592f79ddaaacb751bd))
- *(db)* [**breaking**] Serialize all enum variants as `snake_case` - ([c1adb34](https://github.com/obeli-sk/obelisk/commit/c1adb34de89f12789595110648268b655b3ac8e9))
- *(cli)* Move `server generate-config` to `generate config` - ([869f7e5](https://github.com/obeli-sk/obelisk/commit/869f7e54af4c600f49e134178125653e3871267d))

### Removed
- Stop transforming core modules on `push` - ([f2058ad](https://github.com/obeli-sk/obelisk/commit/f2058ad2779019cf99acbedbd84d3221ea6b9b25))
- *(cli)* Enable `config-schema` only in debug builds - ([2799995](https://github.com/obeli-sk/obelisk/commit/27999953f0e4eacf8d175c91ed678f4d114eb61b))


## [0.33.1](https://github.com/obeli-sk/obelisk/compare/v0.33.0...v0.33.1)
Re-release because Garnix cache did not register the release 0.33.0.


## [0.33.0](https://github.com/obeli-sk/obelisk/compare/v0.32.1...v0.33.0)

This release adds major UI improvements.
CLI support for JSON output was removed because of the duplicity with the WebAPI.

### Added
- *(grpc,webapi)* Allow filtering executions by prefix and unfinished status - ([f4abc08](https://github.com/obeli-sk/obelisk/commit/f4abc0807e9ebfbb30fa76a735313f5e5442fba7))
- *(grpc,webapi)* Allow searching by FFQN prefix - ([5c7ccc0](https://github.com/obeli-sk/obelisk/commit/5c7ccc07b8fc128eef0ba3ae9b757f06cc0fefda))
- *(webapi)* Add PUT `/v1/executions/{id}/upgrade` - ([788bcb3](https://github.com/obeli-sk/obelisk/commit/788bcb3727b2e92d0d3bd09237348b22ebb61e7a))
- WebUI has been refreshed:
    - Execution log detail page has been redesigned, showing color-coded join sets, rail lines between submissions and awaits.
    - Debug view now allows stepping out to submission and awaits.
    - Pending status including join set name is now shown everywhere where status component is used.
    - Tracing view now has and "Autoload child executions" and "Hide finished" checkboxes.
    - Execution list page allows showing derived executions, searching by FFQN prefix and Execution ID prefix.


### Removed
- *(cli)* [**breaking**] Remove JSON output - ([0706188](https://github.com/obeli-sk/obelisk/commit/0706188756b8996b3ecda086cd2f4dd78ca4ba89))

### Fixed

- *(serde)* Do not report "expected Bool" on empty `result` variant - ([6370986](https://github.com/obeli-sk/obelisk/commit/6370986a31adb2d944a7f72ac8cea384a317e124))

### Changed

- *(grpc)* [**breaking**] Rename `ResultDetail` to `SupportedFunctionResult` - ([ac81af6](https://github.com/obeli-sk/obelisk/commit/ac81af6f344d41dfdbbc949cc73f834bfaf83faf))
- *(grpc)* [**breaking**] Rename `FallibleError` to `Error` - ([83f7c89](https://github.com/obeli-sk/obelisk/commit/83f7c89efc197698c250ee7c53d3c8afda5555d8))
- *(grpc)* Add `component_digest` to `ExecutionSummary` - ([a8f0073](https://github.com/obeli-sk/obelisk/commit/a8f007368008be6092fe0ffb4168f00fe6cde399))
- *(toml)* Change the default level of `app` logs from `trace` to `debug` - ([25e3493](https://github.com/obeli-sk/obelisk/commit/25e349328850ead93fbc66d288933c7a9b317752))
- *(webapi)* Rename `show_nested` to `show_derived` - ([87f22c3](https://github.com/obeli-sk/obelisk/commit/87f22c397840199066f07ac6716807978faa1ae7))
- *(webapi)* [**breaking**] Move digest from pending state to `ExecutionWithState` - ([aa8b417](https://github.com/obeli-sk/obelisk/commit/aa8b4174ed6cbce0bc3fd1c558af3ba2a4fd0134))
- *(webapi)* [**breaking**] Change format of `/v1/components` JSON, add fns to plain text output - ([2591900](https://github.com/obeli-sk/obelisk/commit/2591900b8bedb5cb4e769ed54b5df3485e3e0af5))
- *(webapi)* [**breaking**] Rename `get_component_id_input_digest` to `input_digest` - ([1afe1b1](https://github.com/obeli-sk/obelisk/commit/1afe1b1670e57c8fe0ea561a5e94d1165dcee000))
- Log errors when SQL query fails or database contains invalid data - ([5ae287a](https://github.com/obeli-sk/obelisk/commit/5ae287ad1e48090ece550dd610e1fcba1b95db49))
- Hide database errors from external API endpoints - ([f3695aa](https://github.com/obeli-sk/obelisk/commit/f3695aa5214dd85f1190ea06122264a0f9ad55d9))
- *(wit)* Correct join set charset restriction - ([3bb9185](https://github.com/obeli-sk/obelisk/commit/3bb918524cefd22df80cf80bde4f4eb1b8a61501))
- *(toml)* Adjust the default out stlye to `plain_compact` - ([42407bf](https://github.com/obeli-sk/obelisk/commit/42407bf3d64c76fab1a6e42412add4e7a60ec021))


## [0.32.1](https://github.com/obeli-sk/obelisk/compare/v0.32.0...v0.32.1)

### Fixed

- *(sqlite)* Serialize `component_id` as JSON when saving backtrace - ([5a0556a](https://github.com/obeli-sk/obelisk/commit/5a0556ac269d91ae167949999ead6539d859d8d5))


## [0.32.0](https://github.com/obeli-sk/obelisk/compare/v0.31.0...v0.32.0)

This release adds PostgreSQL support: Obelisk is finally able to run with one of most popular traditional SQL databases.

### Added

- *(pg)* Add `db-postgres` - ([733784c](https://github.com/obeli-sk/obelisk/commit/733784c96a4ea9a91ee88bf31a92064aacd0351e))
- *(toml)* Support environment variable interpolation for postgres connection - ([8aa60a4](https://github.com/obeli-sk/obelisk/commit/8aa60a45500ab534968757ac87f331a8a0be89b5))
- *(toml)* [**breaking**] Change configuration to allow switching between SQLite and Postgres - ([2e90a30](https://github.com/obeli-sk/obelisk/commit/2e90a30e89ff023a417c6d85d426962e9c26a032))
- *(toml,pg)* Configure whether a missing database is created on startup - ([839177b](https://github.com/obeli-sk/obelisk/commit/839177b14412fc7ae2016b3d24d9d513f5044f12))

### Fixed
- Detection and handling of client connection drop and server shutdown has been improved for all HTTP servers - gRPC, WebAPI and Webhook endpoints.

### Changed
- SQLite schema version was incremented due to aligning various serialization formats with Postgres.

## [0.31.0](https://github.com/obeli-sk/obelisk/compare/v0.30.0...v0.31.0)

This release adds Web API - JSON over HTTP API next to existing gRPC and gRPC-Web protocols.

### Added
- *(cli)* Add `client generate execution-id` - ([170a672](https://github.com/obeli-sk/obelisk/commit/170a67236e80ee22879e567b62aaf3059c5ac876))
- *(webapi)* Add POST `/v1/executions` - ([d8b8202](https://github.com/obeli-sk/obelisk/commit/d8b820260a468e18403452cbb6c54dc5258b36b0))
- *(webapi)* Implement GET `/v1/executions/:id/responses` - ([733ecc0](https://github.com/obeli-sk/obelisk/commit/733ecc086f9f70d669fd7d95b1107fcab59af23e))
- *(webapi)* Implement GET `/v1/executions/:id/events` - ([53f4b9a](https://github.com/obeli-sk/obelisk/commit/53f4b9a55506f3312d3739e62326123e4d25eeb0))
- *(webapi)* Implement GET `/v1/executions` with filtering - ([88c1235](https://github.com/obeli-sk/obelisk/commit/88c12353a0bcecd7c2e62a61d81d97cdcb36e6b0))
- *(webapi)* Implement GET `/v1/components/:digest/wit` - ([c2852b4](https://github.com/obeli-sk/obelisk/commit/c2852b48344248aac8676430592befab5ab410a6))
- *(webapi)* Implement PUT `/v1/executions/:id/stub` - ([c028e35](https://github.com/obeli-sk/obelisk/commit/c028e353b8aa4d372645baaa6a06361506f82dcb))
- *(webapi)* Implement PUT `/v1/delays/:id/cancel` - ([935fd20](https://github.com/obeli-sk/obelisk/commit/935fd200583e8e00e330e000fcb3ae2af72270b7))
- *(webapi)* Implement PUT `/v1/executions/:id/cancel` - ([4f98796](https://github.com/obeli-sk/obelisk/commit/4f9879616662cbb094934853775a52d104a7613a))
- *(webapi)* Implement `/v1/components` - ([c036eaf](https://github.com/obeli-sk/obelisk/commit/c036eaf4130035bd3eac2d6c587613bc21227392))
- *(webapi)* Implement GET `/executions/{execution-id}` - ([8913cec](https://github.com/obeli-sk/obelisk/commit/8913cecb49b596e19cd6fea526d90b57b5f420c9))
- *(webapi)* Add router with `/execution-id` gen, `/executions/{execution-id}/status` - ([6f71f92](https://github.com/obeli-sk/obelisk/commit/6f71f9220d048b7c46ec73e3861e38ef0426b051))
- *(webapi)* Add `follow` param to stream the execution result - ([4c93ae5](https://github.com/obeli-sk/obelisk/commit/4c93ae51b913f652e03d9074be5846ba0da51497))
- *(webapi)* Implement PUT `/v1/executions/:id` - ([235f535](https://github.com/obeli-sk/obelisk/commit/235f535bb14a7289c60063370e9e9332962012e4))

### Removed
The `-invoke` extension has been removed as it was just a syntax sugar over `-submit` and `-await-next`.
- *(grpc,wit)* [**breaking**] Remove `-invoke` extension - ([b80fefe](https://github.com/obeli-sk/obelisk/commit/b80fefe3441125c7877a7871ae660dfc62d172ef))

### Fixed
- *(grpc)* Close tokio task if client aborts `GetStatus` connection - ([cc10fcc](https://github.com/obeli-sk/obelisk/commit/cc10fcc1f1c3befa92054fb42bdd4ad31c2eb86c))
- *(grpc,webapi)* Strip correct suffix when submitting `-schedule` ext fns - ([03d7725](https://github.com/obeli-sk/obelisk/commit/03d77254ea244bca0df5430ff0d7d5cc628ef966))

### Changed
Sqlite and gRPC schemas have been changed slightly.
- *(db)* [**breaking**] Use string representation for FFQN serde - ([222fd00](https://github.com/obeli-sk/obelisk/commit/222fd009072a1d6ead0ffc219119b08514092fc0))
- *(grpc)* [**breaking**] Make `GetWitResponse.content` optional - ([60493f8](https://github.com/obeli-sk/obelisk/commit/60493f8cf0c6ef0205ab97edae54f24fe1a3743b))
- *(grpc)* [**breaking**] Request WIT by components' digest - ([70e7eba](https://github.com/obeli-sk/obelisk/commit/70e7ebaddb114de57a9c03757dde2cf94e6d2fbf))
- *(grpc,sqlite)* [**breaking**] Rename `scheduled_at` to `first_scheduled_at` - ([7bc30ae](https://github.com/obeli-sk/obelisk/commit/7bc30ae326b3331684654826251f45e2c8cf49b0))
- *(ser)* Skip serializing `backtrace_id` if empty - ([28fe01b](https://github.com/obeli-sk/obelisk/commit/28fe01be5e9ce846032d3c08b7069ffc757f4ebb))
- Make `submit` return ok if parameters are the same - ([944e78e](https://github.com/obeli-sk/obelisk/commit/944e78e2adab6256c9fd9fce71540868d382f53f))


## [0.30.0](https://github.com/obeli-sk/obelisk/compare/v0.29.1...v0.30.0)

### Added
- *(cli)* Allow specifying execution id in `submit` - ([697b456](https://github.com/obeli-sk/obelisk/commit/697b456058fbe9c20d46bdf5adf26bbfc0977142))
- *(grpc)* Add `rpc UpgradeExecutionComponent` - ([b290230](https://github.com/obeli-sk/obelisk/commit/b2902304ff846666bde12fb73a5d68a61f194efd))
- *(grpc)* Add reflection API - ([ad0bd8f](https://github.com/obeli-sk/obelisk/commit/ad0bd8fb090d0a9a26c26d5e87ffad7f3e3da8fc))
- *(toml)* Allow configuring executor's locking strategy - ([064ac8d](https://github.com/obeli-sk/obelisk/commit/064ac8d9399f04d6e06479a674ee2affa95d58f2))

### Changed
- *(wit)* [**breaking**] Include execution id in `-invoke` result - ([4cadbf8](https://github.com/obeli-sk/obelisk/commit/4cadbf83b895861445fe86acfa6d15b69752685e))
- *(grpc)* [**breaking**] Allow searching by component digest in `ListComponents` - ([97cb366](https://github.com/obeli-sk/obelisk/commit/97cb36605446b7e86a1788acb77c61be7bd8b27f))
- *(sqlite)* Add index for `count_join_next` - ([050479f](https://github.com/obeli-sk/obelisk/commit/050479f4c2b8b1b04572787fdce4102a3148e882))
- *(sqlite)* [**breaking**] Store component's digest in `t_state` allowing locking by it

### Fixed
- *(sqlite)* Detect schema version mismatch - ([3db7038](https://github.com/obeli-sk/obelisk/commit/3db7038cffdc25cc2e08a5a46557552006b1b2d2))


## [0.29.1](https://github.com/obeli-sk/obelisk/compare/v0.29.0...v0.29.1)

### Changed
- Termination is triggered on cancelled activities.


## [0.29.0](https://github.com/obeli-sk/obelisk/compare/v0.28.1...v0.29.0)

### Added
- Implemented cancellation of activities and durable sleep in join set close.
- Added RPC for cancellation of activities and durable sleep.

### Changed
- WIT, Database schema and `obelisk.proto` were reworked for cancellation, those are breaking changes.
- Improved delayed submission of all non-blocking events. Previously only async submission was supported.
- Implicit Join set close now supports backtrace capture.
- Web UI was extracted to a [separate repository](https://github.com/obeli-sk/webui)

### Removed
- Removed `ClosingStrategy` concepts from WIT definitions. When a join set is closed, activities and delays are cancelled, workflows are awaited.

### Fixed
- Removed ANSI symbols from the log file output.
- Added version numbers to nondeterminism detected errors.

## [0.28.1](https://github.com/obeli-sk/obelisk/compare/v0.28.0...v0.28.1)

### Fixed
- Fixed a bug in lock extension. Non-blocking event cache is now flushed before the lock is extened.

## [0.28.0](https://github.com/obeli-sk/obelisk/compare/v0.27.0...v0.28.0)
This release adds support for extending the lock of running workflows.

### Added
- Workflows now automatically extend the execution lock when they are not blocked by waiting for a response.

### Changed
- Pending state representation stored in SQLite has changed.


## [0.27.0](https://github.com/obeli-sk/obelisk/compare/v0.26.2...v0.27.0)

### Fixed
Nondeterminism detection was improved: FFQN and parameters of child executions are now compared with the event stored in the database.

### Changed
- Database format, namely execution events structure, has been changed. This is an incompatible change, delete the old database with: `obelisk server run --clean-sqlite-directory`
- Retry configuration has moved from `Created` to `Locked` event, meaning it applies the current configuration by the last executor.

## [0.26.2](https://github.com/obeli-sk/obelisk/compare/v0.26.1...v0.26.2)

### Added
- Add support for [Python](https://github.com/bytecodealliance/componentize-py/) in workflows: all remaining WASI interfaces are stubbed when `stub_wasi` is enabled.

## [0.26.1](https://github.com/obeli-sk/obelisk/compare/v0.26.0...v0.26.1)

### 🚜 Refactor

- *(grpc)* Use `opentelemetry-http` for the http header extractor - ([35c0fac](https://github.com/obeli-sk/obelisk/commit/35c0fac2ddb3a878e39e07864b1f767c3e7d8b34))
- *(grpc)* Set span name to the request path - ([f870758](https://github.com/obeli-sk/obelisk/commit/f8707580cb3ba8c1dbe747bb119e5a9d555d303c))
- *(sqlite)* Introduce bulk transactions - ([0d96de4](https://github.com/obeli-sk/obelisk/commit/0d96de4c678e03faf6bdefe43cd4a3b6c43b12d3))
- *(sqlite)* Break down bulk transaction on commit failure - ([f28db97](https://github.com/obeli-sk/obelisk/commit/f28db978077c539aec0666aa01d194dd64af36e0))
- *(sqlite)* Prepare for replaying logical transactions - ([8ffb9fb](https://github.com/obeli-sk/obelisk/commit/8ffb9fb518806487d3de7499d26e4ae990b33750))
- *(sqlite)* Make `ThreadCommand::Func` accept `FnMut` - ([837b038](https://github.com/obeli-sk/obelisk/commit/837b0387aaa295346aae3ac150370c677e06746c))
- Extract structs from `append_batch_respond_to_parent` parameters - ([16bc2ca](https://github.com/obeli-sk/obelisk/commit/16bc2ca590eee985dc619fd2f630309464397ce2))
- Remove generic db parameter from `ServerInit` - ([e7c2f97](https://github.com/obeli-sk/obelisk/commit/e7c2f977090e885bd1f12b84663e4ca0871b20e0))


## [0.26.0](https://github.com/obeli-sk/obelisk/compare/v0.25.4...v0.26.0)

This release contains database schema changes.

### ⛰️ Features

- *(toml)* Allow disabling the timers watcher - ([bb651fe](https://github.com/obeli-sk/obelisk/commit/bb651fe6794e5c72853b9992dd9f4addce816db4))
- *(toml)* Allow debugging of WASM components - ([9f0beb9](https://github.com/obeli-sk/obelisk/commit/9f0beb9c55f8edaeb53a9dec03a1c7d12f079f60))

### 🐛 Bug Fixes

- *(grpc)* Fix panic when `get`ting an unfinished execution - ([5e9b080](https://github.com/obeli-sk/obelisk/commit/5e9b080b9e95a779ec0e358b3160f3aafd0f55c6))

### 🚜 Refactor

- *(sqlite)* Print metrics on configurable duration - ([266aa00](https://github.com/obeli-sk/obelisk/commit/266aa00e6893f4632cdd29249955fcc62021c0a5))
- *(sqlite)* [**breaking**] Readd column `last_lock_version` - ([d049ec4](https://github.com/obeli-sk/obelisk/commit/d049ec487d1ca563edca5b49f26dde682788a27d))
- *(sqlite)* Allow handling of `Locked` events in `append` - ([bb70f83](https://github.com/obeli-sk/obelisk/commit/bb70f83211dd1f8722f2a62c56b9b60850670722))
- *(sqlite)* Make `wait_for_finished_result` use channels instead of poll - ([fa90fe5](https://github.com/obeli-sk/obelisk/commit/fa90fe50e7cafaa4a4ecb7dd7241b49ac33d732c))
- *(sqlite)* Prototype using append-only `t_state` - ([cb3c2c1](https://github.com/obeli-sk/obelisk/commit/cb3c2c184fabd45943e524c0505cf57ac156e3e5))
- *(sqlite)* Shutdown right when the flag is read - ([b0d3ea7](https://github.com/obeli-sk/obelisk/commit/b0d3ea76c15171663d408b662b7e4756bc1eeaf3))
- *(sqlite)* Ignore metric recording errors - ([aedf3d8](https://github.com/obeli-sk/obelisk/commit/aedf3d86e463c3b34157ba7a2c7d75d3899d0335))
- *(sqlite)* Avoid sending `ThreadCommand::Shutdown` on full channel - ([6e895b1](https://github.com/obeli-sk/obelisk/commit/6e895b1ec572a626f546e63a062735825186bb22))
- *(sqlite)* Replace panic in init thread with `InitializationError` - ([ffbbc1c](https://github.com/obeli-sk/obelisk/commit/ffbbc1cb2cb1de790e0d741c2eb20b07d6babe05))
- *(sqlite)* [**breaking**] Revert to using single row per execution in `t_state` - ([29941ff](https://github.com/obeli-sk/obelisk/commit/29941ff3e29256ff38e0340d408ea6f4fe55c5a6))
- *(sqlite)* Change indexes - ([a7ad76d](https://github.com/obeli-sk/obelisk/commit/a7ad76dbe40ab0f8d394ebd8f498059ddc1d9876))
- *(sqlite)* [**breaking**] Make `t_metadata` append only - ([c5c33f7](https://github.com/obeli-sk/obelisk/commit/c5c33f73550119006c004fff9c4b0288fbdc4ede))
- *(sqlite,toml)* Improve metrics configuration - ([b787782](https://github.com/obeli-sk/obelisk/commit/b7877820dd4b9d49a32514f39738092de58b92e0))
- Clean up `ffqn_to_pending_subscription` - ([836d5a4](https://github.com/obeli-sk/obelisk/commit/836d5a4a3d88e98c825f3c4b1c405ab619dfdbe5))
- Remove return type from `DbPoolCloseable::close` - ([4434cbb](https://github.com/obeli-sk/obelisk/commit/4434cbb176002298046050b4bdc860e9db411420))
- Remove `Sleep` generics from `SqlitePool` - ([1b3fc36](https://github.com/obeli-sk/obelisk/commit/1b3fc36480332d82095d9aeacc3b6392c4c44a4b))
- Replace `DbError` with generic, read and write variants - ([976f7a1](https://github.com/obeli-sk/obelisk/commit/976f7a1e1caa16308fb9fe0f8d7b181ebed11098))
- Disconnect `DbPoolCloseable` from `DbPool` - ([1f0678f](https://github.com/obeli-sk/obelisk/commit/1f0678fe1617e87f06ba6747d3aa88d60d2c701e))
- Use `watch` channel for shutdown - ([4a3a240](https://github.com/obeli-sk/obelisk/commit/4a3a240781922934df345c43fdd6b5b27c883a03))
- Remove `DbPool::is_closing` - ([5fc53fb](https://github.com/obeli-sk/obelisk/commit/5fc53fb24eff33fce741a561ba0db71b1b6ff22e))
- Use `DbExecutor` in `executor` - ([eca31f9](https://github.com/obeli-sk/obelisk/commit/eca31f9ff429237cc7b2907a2b973cdb89bda2dd))
- Extract `poll_status` - ([6077a44](https://github.com/obeli-sk/obelisk/commit/6077a44788e5ebb4a31cf85f89ada174cf1b5289))
- Extract `Engines::new` - ([4bebf1d](https://github.com/obeli-sk/obelisk/commit/4bebf1d555934b3ec95c58a7b2beb00bcabd5c4e))
- Move `lock_one` to `DbExecutor` - ([548c0ab](https://github.com/obeli-sk/obelisk/commit/548c0ab1bc2c7231d725ccfd5b71353f736f239d))
- Extract `DbCloseable` - ([d808e99](https://github.com/obeli-sk/obelisk/commit/d808e9940332bf04800db98bfcfea0dc64fb94c0))
- Introduce `DbExecutor` - ([90772d9](https://github.com/obeli-sk/obelisk/commit/90772d9233f03a104bfad911295f8aa4d3a77e95))
- Rename `Lock.version` to `next_version` - ([cdfef49](https://github.com/obeli-sk/obelisk/commit/cdfef499f94c68e5e0ae8b031728e656505d334a))
- Send response notification only after tx succeeds - ([19ba75d](https://github.com/obeli-sk/obelisk/commit/19ba75d47c0013182df63d65b2385378e475f3ba))
- Clean up `response_subscribers` on timeout and select error - ([954ea50](https://github.com/obeli-sk/obelisk/commit/954ea50148e1591fae1e630e1578ed77296a86f8))
- Replace `ResponseSubscribers` alias with actual type - ([0db1632](https://github.com/obeli-sk/obelisk/commit/0db163201de38b6d4983304a8b26da7f48958dca))
- Move `backtrace` to `NonBlockingCache::StartAsync` - ([6c5d92d](https://github.com/obeli-sk/obelisk/commit/6c5d92d54f1a16c00fa48cd97872815cd64b72a8))
- Avoid `append_backtrace_batch` on empty batch - ([b0f0b92](https://github.com/obeli-sk/obelisk/commit/b0f0b92fcd706e4908dfa5851c9745b4effd85d9))
- Extract common engine configuration - ([0cfd092](https://github.com/obeli-sk/obelisk/commit/0cfd0928dadedda8cd8980d253df54fd0c3a2ea6))


## [0.25.4](https://github.com/obeli-sk/obelisk/compare/v0.25.3...v0.25.4)

### ⛰️ Features

- *(sqlite)* Allow running pragma queries at startup - ([969d5d1](https://github.com/obeli-sk/obelisk/commit/969d5d14521ffeccf66e588f09f9a75a2dff4d7e))

### 🐛 Bug Fixes

- Correct error variant detection in `execution_error_to_wast_val` - ([714deeb](https://github.com/obeli-sk/obelisk/commit/714deebf5215760273df2eaccb30035ce72923db))

### 🚜 Refactor

- *(sqlite)* Perform integrity check at startup - ([04339fe](https://github.com/obeli-sk/obelisk/commit/04339fe90ef63bba11c0db293942bfeb323cb7d7))


## [0.25.3](https://github.com/obeli-sk/obelisk/compare/v0.25.2...v0.25.3)

### 🐛 Bug Fixes

- *(cli)* Avoid printing plaintext when JSON output is selected - ([4bd4cb9](https://github.com/obeli-sk/obelisk/commit/4bd4cb958af05e1db2df139c4bda1e7ca2a3186f))

### 📚 Documentation

- Merge licensing info into readme - ([19c300a](https://github.com/obeli-sk/obelisk/commit/19c300a0d19d0fd904902f682589815aab4a0d27))


## [0.25.2](https://github.com/obeli-sk/obelisk/compare/v0.25.1...v0.25.2)
This release contains small tweaks to the web UI, better ergonomics in CLI and in TOML.
More notably, sqlite now uses `FULL` sync, lowering the chance of data loss.

### ⛰️ Features

- *(cli)* Allow omitting package in `submit` - ([918acb8](https://github.com/obeli-sk/obelisk/commit/918acb82e22e2bc37ac74ec69747de612ad98f8d))
- Allow specifying just the suffix of frame symbol path - ([b76254c](https://github.com/obeli-sk/obelisk/commit/b76254cd8c9a6286f4864e1b05fa6f35e132fba6))
- Add function name / `sleep` as label to one-off join sets - ([663cbf5](https://github.com/obeli-sk/obelisk/commit/663cbf55dab487922ff8549c8a000d9bd25eaee8))

### 🐛 Bug Fixes

- *(cli)* Ignore old version header in `generate extensions` - ([79b2bbd](https://github.com/obeli-sk/obelisk/commit/79b2bbde5c2b75a56884cfe55a217aa1948a41e4))

### 🚜 Refactor

- *(sqlite)* Use `FULL` sync instead of `NORMAL` - ([7c4a570](https://github.com/obeli-sk/obelisk/commit/7c4a570ab68a2e1f50e851d2a8dcd5d6fffde662))
- Extract all occurrences of `execution-failed` into a constant - ([dcf043d](https://github.com/obeli-sk/obelisk/commit/dcf043d0a901b9d02487e7c28bc4f7122c954a99))
- Make the panic hook report the payload more clearly - ([f24c253](https://github.com/obeli-sk/obelisk/commit/f24c25390e231c97942b1e37ce41f3f711d5bb16))


## [0.25.1](https://github.com/obeli-sk/obelisk/compare/v0.25.0...v0.25.1)

### 🐛 Bug Fixes

- *(wit)* Rename extendable error variant `execution-failure` to `execution-failed` - ([e4bcdf2](https://github.com/obeli-sk/obelisk/commit/e4bcdf202953305859fe28c1a8877b4888cc14de))


## [0.25.0](https://github.com/obeli-sk/obelisk/compare/v0.24.2...v0.25.0)

### ⛰️ Features

- *(wit)* Add explicit `close(join-set)` - ([eecc907](https://github.com/obeli-sk/obelisk/commit/eecc9075d9d450f0d377e61559ee36b23e65b03f))
- *(wit)* [**breaking**] Make `-invoke` accept a label of join set name - ([fdc9ce0](https://github.com/obeli-sk/obelisk/commit/fdc9ce0009298a836d807180fc357f4c78ca1cd8))
- *(wit)* [**breaking**] Translate execution errors to `err` variants in `-await-next` - ([0f27f6a](https://github.com/obeli-sk/obelisk/commit/0f27f6aac30bd3f9989c1878dec787a5f380b101))
- Add `obelisk generate wit-support` - ([a4dd8a3](https://github.com/obeli-sk/obelisk/commit/a4dd8a34906067c3afd7695cff406a249c3da81d))
- [**breaking**] Disallow infallible exports - ([db1dd5e](https://github.com/obeli-sk/obelisk/commit/db1dd5e42f2d9a1d35b92ae2d1ca61af459ad35c))

### 🐛 Bug Fixes

- *(wit)* Properly duplicate types into extension interfaces - ([f5cfe59](https://github.com/obeli-sk/obelisk/commit/f5cfe59b1456da3c98d0312a8580e41ee4933ca5))
- Unblock execution during join set close on full replay - ([3de827a](https://github.com/obeli-sk/obelisk/commit/3de827a95bd00e8a8ef04ca743c84bf6ac7e6f9a))

### 📚 Documentation

- *(wit)* Add `@since` annotation to WIT definitions - ([095485f](https://github.com/obeli-sk/obelisk/commit/095485f8c986a17254b979aebb0fb1bc6c238e17))
- Remove stray `forward_unhandled_child_errors_in_completing_join_set_close` - ([795bc11](https://github.com/obeli-sk/obelisk/commit/795bc11ebf6c14aa8f8aa4cde85090d3c44198fb))

### 🚜 Refactor

- *(cli)* [**breaking**] Make output dir of `generate extensions` mandatory - ([5183929](https://github.com/obeli-sk/obelisk/commit/5183929447cd98cf9d2a2b55ddf515fc3debaf27))
- *(cli)* [**breaking**] Make output dir of `generate wit-support` mandatory - ([9b2ba47](https://github.com/obeli-sk/obelisk/commit/9b2ba4783f28c0144e37148d9904b57a1bb8cc3b))
- *(wit)* [**breaking**] Rename resource `join-set-id` to `join-set` - ([6bcf127](https://github.com/obeli-sk/obelisk/commit/6bcf127ace0fc16734dbe6b18722882fbd304e0e))
- *(wit)* [**breaking**] Bump version of `obelisk:types`,`obelisk:workflow` - ([d4b38c6](https://github.com/obeli-sk/obelisk/commit/d4b38c620047a76ec072d1141f50de310c81aacb))
- *(wit,grpc)* [**breaking**] Remove `execution-failed`, introduce `ReturnTypeCompatible` - ([bc05671](https://github.com/obeli-sk/obelisk/commit/bc056716bdcdc7c3b85ca08bc2e6f5881398fd49))
- Check for supported return types in `populate_ifcs` - ([08e907e](https://github.com/obeli-sk/obelisk/commit/08e907e61a279c25527493b1d00f92100c816cb2))
- Rename `SupportedFunctionReturnValue` variants to `Ok`,`Err` - ([4cf302b](https://github.com/obeli-sk/obelisk/commit/4cf302b665645ebc2f15bdfbca3b1c10104e4dff))
- Extract `is_package_name_ext` - ([ef31f20](https://github.com/obeli-sk/obelisk/commit/ef31f204ae051c337b1589b25c814c76ceab7226))
- Readd ext fns to `ExIm` imports, detect compatibility - ([f31eae1](https://github.com/obeli-sk/obelisk/commit/f31eae1b634c2e70bcc1900c621f1f62621e7168))


## [0.24.2](https://github.com/obeli-sk/obelisk/compare/v0.24.1...v0.24.2)

### ⛰️ Features

- *(oci)* Write the WASM directly to file - ([74ce3c6](https://github.com/obeli-sk/obelisk/commit/74ce3c67c00c2fc116192d1eec815db4ca284b7e))
- Implement `-invoke` extension - ([c2db309](https://github.com/obeli-sk/obelisk/commit/c2db309d95c562aecb7163ad9a24cf00c6f83014))
- Allow disabling parallel compilation - ([7aad70d](https://github.com/obeli-sk/obelisk/commit/7aad70d697116f035daa0d8a63590efa405c7f7c))
- Add `build_semaphore` - ([64e41c2](https://github.com/obeli-sk/obelisk/commit/64e41c26d5ac5f526440892f093ab7d4114cd250))

### 🐛 Bug Fixes

- *(oci)* Pull the image again if content digest does not match - ([77b0041](https://github.com/obeli-sk/obelisk/commit/77b0041c1ec06ac54c5f177e815e9a8749cfc8ec))
- Prioritize oci digest when tag is specified as well - ([9ddcc0a](https://github.com/obeli-sk/obelisk/commit/9ddcc0a3f7bbeb96b411e26aa1c06d76ec58b856))

### 🚜 Refactor

- *(oci)* Ignore corrupted mapping file - ([1832e4d](https://github.com/obeli-sk/obelisk/commit/1832e4d667223d3ac06fedf677e4c202cec081ab))
- *(oci)* Move fetching metadata out of `pull` - ([7c8402b](https://github.com/obeli-sk/obelisk/commit/7c8402bbf9fe7fcb55c5f85d99e3ed4ab02af2ec))
- *(oci)* Avoid fetching metadata twice - ([3276630](https://github.com/obeli-sk/obelisk/commit/3276630dbe0f9c02593afc76a64c8f26318a7173))
- *(oci)* Pull on consistency errors in `metadata_to_content_digest` - ([d7783aa](https://github.com/obeli-sk/obelisk/commit/d7783aa625d72a39364a1f5feca3b7326e425b6e))
- *(toml)* Move `wasmtime_pooling_config` under `wasm` - ([949fc10](https://github.com/obeli-sk/obelisk/commit/949fc10832bc8735a028d6daaa423916c33e2687))
- *(toml)* Move `codegen_cache` under `wasm` - ([7e99d5f](https://github.com/obeli-sk/obelisk/commit/7e99d5fbff9ccbd5182a6f02a44159a08616c0db))
- Avoid duplicating generated header in cycled WITs - ([e89f94a](https://github.com/obeli-sk/obelisk/commit/e89f94a6b4392155709190a544e504cfab21ada3))
- Avoid printing the backtrace in panic hook twice - ([32d1bc0](https://github.com/obeli-sk/obelisk/commit/32d1bc04a761a1c0d2083a77d1566bd383a1fcd2))
- Move all checks to `pull_manifest_and_config` - ([d0cc176](https://github.com/obeli-sk/obelisk/commit/d0cc1762972a82dc5f01ad1b29281de9ea28b61a))
- Pull using `oci-client` instead of  `oci-wasm` - ([e846b74](https://github.com/obeli-sk/obelisk/commit/e846b746c28859ce93259915c6a29abdbe2d23f0))
- Remove `anyhow` from `grpc` - ([f801b03](https://github.com/obeli-sk/obelisk/commit/f801b036b6d40733088321991c45aa2cdda34581))
- Extract `grpc` crate - ([dc042e2](https://github.com/obeli-sk/obelisk/commit/dc042e21f5d5ff518277b53de2ccd83e1010f086))
- Serialize `FunctionExtension` as `snake_case` - ([8c78ca8](https://github.com/obeli-sk/obelisk/commit/8c78ca8edc28ee61df72c2548370731c28234523))
- Attempt to shut down sqlite thread in `SqlitePool::drop` - ([2ed7f4b](https://github.com/obeli-sk/obelisk/commit/2ed7f4b79e93d2d72d2d26f9dca604b187ae0718))


## [0.24.1](https://github.com/obeli-sk/obelisk/compare/v0.24.0...v0.24.1)
This release improves `obelisk client` ergonomics.

### ⛰️ Features

- *(cli)* Make `exported-ext-wits` accept component type as its 1st arg - ([b1930dc](https://github.com/obeli-sk/obelisk/commit/b1930dce6edf7973e1ebeee3fb9de07ba9e041f6))
- *(cli)* Make `inspect` accept the component type as its 1st arg - ([6dba0ab](https://github.com/obeli-sk/obelisk/commit/6dba0ab3edcde4257ffbf784aac74b94ed4e57aa))
- *(cli)* Allow referencing json files when submitting - ([3445ef1](https://github.com/obeli-sk/obelisk/commit/3445ef175756558bac49a072d113120427228211))

### 📚 Documentation

- Describe various cli options and args - ([0e8b977](https://github.com/obeli-sk/obelisk/commit/0e8b97739ca84bd3b699e609034fef6bfff7f86a))

### 🚜 Refactor

- *(cli)* Rename `exported-ext-wit` to `extensions` - ([5402fbe](https://github.com/obeli-sk/obelisk/commit/5402fbe5f79b44da1dc94e3e35d0e981993cf1c0))


## [0.24.0](https://github.com/obeli-sk/obelisk/compare/v0.23.2...v0.24.0)

This release represents a major refactoring of both the WIT schemas and features provided. Most notable features include:
* Heterogenous join sets, allowing mixing different functions as well as delays into one join set.
* Stub activities
* Join sets are closed when they get out of scope.
* Fuel configuration for all WASM components.
* Ability to generate extension WIT files.

### ⛰️ Features

- *(toml)* Add Timers Watcher configuration - ([4abbf91](https://github.com/obeli-sk/obelisk/commit/4abbf91484adba825eb28490148b6f97ba4720fa))
- *(toml)* [**breaking**] Add global limiters on executors and webhook requests - ([5789ca4](https://github.com/obeli-sk/obelisk/commit/5789ca4b8a5c7be21d09f55b412e079dd322d5aa))
- *(toml)* [**breaking**] Remove forwarding of errors on join set close - ([310d3b7](https://github.com/obeli-sk/obelisk/commit/310d3b706ddc0beda3c45cda1e24b3a85c7b51a3))
- *(toml)* Allow path prefixes in `location.path` - ([4408b6e](https://github.com/obeli-sk/obelisk/commit/4408b6eaad5ea060d32aca76fa0fda27223626cf))
- *(wit)* [**breaking**] Allow stubing execution errors - ([1427e43](https://github.com/obeli-sk/obelisk/commit/1427e43b2f67cc0c76e5de3e0c72651a1af5e60f))
- *(wit,db)* [**breaking**] Add `workflow-support@2.0.0` - ([2af5ea4](https://github.com/obeli-sk/obelisk/commit/2af5ea4ade9044941a7ae4f402764b6b4c26cdcb))
- Add `obelisk generate exported-ext-wits` - ([42dcb66](https://github.com/obeli-sk/obelisk/commit/42dcb66d8eb58cf8a07b79390623f4bd663e5de0))
- Add configuratble fuel - ([e381967](https://github.com/obeli-sk/obelisk/commit/e3819672c011e53be15cd1d89cc3c6a2023378d9))
- Add `-get` extension - ([edac0eb](https://github.com/obeli-sk/obelisk/commit/edac0ebc60db51d8fdef13cfdb14e32b75cbdbba))
- Close join sets on drop - ([128db5f](https://github.com/obeli-sk/obelisk/commit/128db5f0bc2df81d3a29e7645d7ed000713d8a98))
- Implement `join-next` - ([d9c6b68](https://github.com/obeli-sk/obelisk/commit/d9c6b6887fc1d7ac18c75730e1f9f9ccd4914855))

### 🐛 Bug Fixes

- *(db)* Return `all-processed` when awaiting nonexistent submision - ([7be126b](https://github.com/obeli-sk/obelisk/commit/7be126b9426153341242010b0a08c65bd9be6f50))
- *(wit)* Avoid parameter name conflict in extension functions - ([645bbaf](https://github.com/obeli-sk/obelisk/commit/645bbaf1a05bc135aa2a96918535d41322c0e60a))

### 📚 Documentation

- Update roadmap - ([3b7d5dc](https://github.com/obeli-sk/obelisk/commit/3b7d5dc456e1b82549a29fe3a3cfb822184c7bf6))
- Add note about full sync in sqlite config - ([9521728](https://github.com/obeli-sk/obelisk/commit/9521728817bb032e2c18856098f4dcc57507b038))
- Clean up the roadmap - ([4213172](https://github.com/obeli-sk/obelisk/commit/4213172b5391d4f3baaa0c948122ad4f98b62581))
- Correct `reuse_on_retry` - ([8a8f4b4](https://github.com/obeli-sk/obelisk/commit/8a8f4b4c6a02a21ec0a5f949e1da4eb4d1d8c28b))

### 🚜 Refactor

- *(db)* [**breaking**] Rename stub `return_value`,`target_result` - ([551a1f3](https://github.com/obeli-sk/obelisk/commit/551a1f34a6dd58cbc622a9079a4a77704b27aaf2))
- *(db)* [**breaking**] Rename `HistoryEvent::Schedule.scheduled_at` - ([8fd94f5](https://github.com/obeli-sk/obelisk/commit/8fd94f54a8fcb8bc2f95ad05b3a88342643b02b4))
- *(db)* [**breaking**] Make `DelayId` generation conflict free - ([544f793](https://github.com/obeli-sk/obelisk/commit/544f7930f0f2c5d44c883662e757b57adfbb4cfe))
- *(grpc)* [**breaking**] Allow sending stub errors via cli and web ui - ([feaed66](https://github.com/obeli-sk/obelisk/commit/feaed664dfc1cfdfb172f0d5742b5a781ce22099))
- *(toml)* [**breaking**] Remove `retry_on_trap` - ([5a77a3b](https://github.com/obeli-sk/obelisk/commit/5a77a3bbef16a324ded915754b510521098e72e8))
- *(wit)* [**breaking**] Make `new-join-set-named` fallible - ([76edb46](https://github.com/obeli-sk/obelisk/commit/76edb4612b93a5adf1a32410554cf40b42b804ea))
- *(wit)* [**breaking**] Rename `execution-error` to `await-next-extension-error` - ([f5267fe](https://github.com/obeli-sk/obelisk/commit/f5267fec740b2543a6478fa68877fe45deea2147))
- *(wit)* Rename `await-next` to `join-next` - ([bc3b5b8](https://github.com/obeli-sk/obelisk/commit/bc3b5b8b4c194627fdc5417bc5cb9e0c27b97ff4))
- *(wit)* [**breaking**] Move scheduled fns to `-obelisk-scheduled` interface - ([c33e8a6](https://github.com/obeli-sk/obelisk/commit/c33e8a63b6ffd39887120caf7eaeababbbf3da59))
- *(wit)* [**breaking**] Readd `function-mismatch` - ([b187ff0](https://github.com/obeli-sk/obelisk/commit/b187ff011b470f9c4b9b9d8ba4822f3414616fc2))
- *(wit)* Extract opaque join next - ([a42a157](https://github.com/obeli-sk/obelisk/commit/a42a1572d6d3cca128547f89a47ea4ecb9888379))
- *(wit)* [**breaking**] Add `execution-error::all-processed` variant - ([32a8f1c](https://github.com/obeli-sk/obelisk/commit/32a8f1cd33baa5aac32690a641c6c536b5bc578a))
- *(wit)* Introduce `get-execution-error` - ([29b23dc](https://github.com/obeli-sk/obelisk/commit/29b23dc200fd79a8baee69049345bfbabfd97365))
- *(wit)* Introduce `join-set-await-next-error` - ([f08f1b2](https://github.com/obeli-sk/obelisk/commit/f08f1b25afa80fae36c8a32a25805e3bf917f879))
- *(wit)* [**breaking**] Move execution ID to `execution-error` - ([8f12da7](https://github.com/obeli-sk/obelisk/commit/8f12da74541f1f200ec5ecc01a479306e0ca25fa))
- Extract stub activity config to `[[activity_stub]]` - ([fb1101b](https://github.com/obeli-sk/obelisk/commit/fb1101b791accb094ec103918647b3e76155393f))
- Add Obelisk version to the generated header - ([30aa959](https://github.com/obeli-sk/obelisk/commit/30aa9596bab92de776bd9a363e3b7e2f0df4255e))
- Add "Generated by" header to the generated WIT files - ([fd45100](https://github.com/obeli-sk/obelisk/commit/fd45100055b2f78b4d05307ebda64cf8feda62d4))
- Remove `wasmtime` from `ActivityStub` initialization - ([b3bf721](https://github.com/obeli-sk/obelisk/commit/b3bf721c75989b9a0ae2eb5bdf78a02575d235bd))
- Remove `wasmtime` from `utils` - ([2c5deef](https://github.com/obeli-sk/obelisk/commit/2c5deef6f049b741e7362cf416e409a1b8ba1d6f))
- Populate `ExIm` exclusively using `wit-parser` - ([d67ffaf](https://github.com/obeli-sk/obelisk/commit/d67ffaf14020f842ed094fa0ae8cfeb355db4897))
- Skip `build.rs` unless `obelisk.proto` changes - ([1df2a1d](https://github.com/obeli-sk/obelisk/commit/1df2a1d13549e1fea602e1654a3bafd720e67ccf))
- Make deletion of sqlite dir more explicit - ([8322c8d](https://github.com/obeli-sk/obelisk/commit/8322c8d3a3ba2e87bc26c6280673e0e69dff4fce))
- Remove race between workflow and timeout - ([c16f810](https://github.com/obeli-sk/obelisk/commit/c16f8102c9ae3309c8bf1fca0a1f148607ab5a81))
- Support submitting a single delay request - ([f27f8ca](https://github.com/obeli-sk/obelisk/commit/f27f8ca192ced0141211598374dd29b9ae352752))
- Disable ANSII when not running in a terminal - ([356bf69](https://github.com/obeli-sk/obelisk/commit/356bf69ff4860d4bc378297f91d59048729c680f))
- Send `reason` in stubbed error - ([3708347](https://github.com/obeli-sk/obelisk/commit/37083471788ab92664c0aa8c3608428bf5a16367))
- Add `ScheduleAtConversionError` - ([e8b61c5](https://github.com/obeli-sk/obelisk/commit/e8b61c5e09e14e9967a572e180ff642bf525e88a))
- Move `SleepFactory` to `event_history` - ([d86c045](https://github.com/obeli-sk/obelisk/commit/d86c045663dfcf75f45be512bc67498ce6bf995c))
- Do not subscribe if deadline  has been reached - ([834435a](https://github.com/obeli-sk/obelisk/commit/834435ad013b1a28b120957c2264082a8aa6f03b))
- Include `-schedule` in `is_extension()` - ([2f8a0d4](https://github.com/obeli-sk/obelisk/commit/2f8a0d47ed1d33adeb9840ba2dd9e0a8261e66ed))
- Unify join set naming errors - ([78e430d](https://github.com/obeli-sk/obelisk/commit/78e430d526c9bc5481fa458e6cba4f3271664d91))
- Change `random_part` to return `u128` - ([e906fad](https://github.com/obeli-sk/obelisk/commit/e906fad21379b5de27e91ec94573e07378a88d2e))
- Replace `wasmtime` imports with full type names - ([eac59ad](https://github.com/obeli-sk/obelisk/commit/eac59ad7465c6f1c59efd66ca4b4384d3c32c772))
- Simplify `-await-next` insertion in `wasm_tools` - ([d8ffbb3](https://github.com/obeli-sk/obelisk/commit/d8ffbb309ef97a19ff4f79fe805ed198bceb01e5))
- Update the `-stub` parameter in `wit` module - ([2fe9516](https://github.com/obeli-sk/obelisk/commit/2fe951631f189ce687b2d255621908c0d21b6d40))
- Remove "Import not found" error handling - ([b925e76](https://github.com/obeli-sk/obelisk/commit/b925e76c74e802c8d7678884542c45d42f280bb7))
- Extract `*FnCall::new` - ([93db847](https://github.com/obeli-sk/obelisk/commit/93db84784bc839fbe28f2b5394d1e061434c5562))
- Remove `backtrace` from `WorkflowCtx` - ([034b70e](https://github.com/obeli-sk/obelisk/commit/034b70ee75e1a8c067091999b7358dc0252e73dc))
- Extract separate `call_imported_fn` for each struct - ([0337016](https://github.com/obeli-sk/obelisk/commit/03370162e35a60971a297c227c2d4d63a3e995c8))
- Extract `*FnCall` structs - ([f1f50cb](https://github.com/obeli-sk/obelisk/commit/f1f50cb8953440f7483c2ed7d6d034bca937e750))
- Move fn metadata resolution to `ImportedFnCall::new` - ([da99a3f](https://github.com/obeli-sk/obelisk/commit/da99a3ffedc94d62801947f7829a98ec7421600a))
- Remove `Optional` from retval of `Stub::apply` - ([30abab0](https://github.com/obeli-sk/obelisk/commit/30abab061d1926b32ae9121030b63c2c79e6eb85))
- Add asserts preventing use of closed join sets - ([2008a2e](https://github.com/obeli-sk/obelisk/commit/2008a2ea03d06dd1e638c3fbd9bb1857538994c3))
- Add `Stub::apply` - ([ab5c862](https://github.com/obeli-sk/obelisk/commit/ab5c862ed9128d0dab51ed287506922cd09fa381))
- Add `JoinNextRequestingFfqn::apply` - ([4a6a23b](https://github.com/obeli-sk/obelisk/commit/4a6a23b1b0256eaa4f6d341670bbdf10675e77bb))
- Add `SubmitExecution::apply` - ([be2995e](https://github.com/obeli-sk/obelisk/commit/be2995e78943d3c46de6602725d6584ca77e38ce))
- Add `Schedule::apply` - ([27b4edf](https://github.com/obeli-sk/obelisk/commit/27b4edfe0a3bd09683cf416024dd60dbf3ab7c9b))
- Add `OneOffChildExecutionRequest::apply` - ([752adeb](https://github.com/obeli-sk/obelisk/commit/752adeb00d67900dff760b16e7438b62a7af531f))
- Add `OneOffDelayRequest::apply` - ([7817280](https://github.com/obeli-sk/obelisk/commit/7817280f6fa38621e0bbb8cf1f7dce61d1834fdb))
- Add `JoinSetCreate::apply` - ([ad38f27](https://github.com/obeli-sk/obelisk/commit/ad38f27297764b8a8ec9489249c867e6f079d5ec))
- Add `apply` to `JoinNext` - ([3e31b09](https://github.com/obeli-sk/obelisk/commit/3e31b098a22fb7be3efd159b7d6fd20f97895c88))
- Add `apply` to `Persist`, `SubmitDelay` - ([b0e1884](https://github.com/obeli-sk/obelisk/commit/b0e1884aba95d0be0203346377d3328a6c90c2a6))
- Rename `EventHistoryKey` to `DeterministicKey` - ([1ad2898](https://github.com/obeli-sk/obelisk/commit/1ad2898e14e0f53c36a62c538a36350ea000616c))
- Extract `EventCall` variants into struts - ([aff4403](https://github.com/obeli-sk/obelisk/commit/aff440351f323fb1baf3f2081dabfbc9c14436f0))
- Add dummy `close_opened_join_set` - ([1d0c771](https://github.com/obeli-sk/obelisk/commit/1d0c7717426683b02d91f7f9ab0e982f49fa7d95))
- Correct Execution ID: response mapping to fix `-get` - ([93bc645](https://github.com/obeli-sk/obelisk/commit/93bc645ac31b2d8cbda16679a0664d0ba0b0ccc9))
- Add `Processed` flag on matching `await-next` with `all-processed` - ([683ca80](https://github.com/obeli-sk/obelisk/commit/683ca80cdb969d4d244bc4f760ee3af7d3f103b7))
- Add `Processed` flag on matching `JoinNext` with `all-processed` - ([eed87a0](https://github.com/obeli-sk/obelisk/commit/eed87a00b67beccae9d10cb768055da6688e7fb2))
- Return `response-id` when matched `ChildExecutionFinished` - ([3b50456](https://github.com/obeli-sk/obelisk/commit/3b5045621abe176ef0f80c6efdad81567644264b))
- Implement `all-processed` error for `join-next` - ([0326607](https://github.com/obeli-sk/obelisk/commit/0326607d7fc241187fd761b7c56c3361036149b3))
- Disregard unprocessed events when determining `all-processed` - ([3bb6df3](https://github.com/obeli-sk/obelisk/commit/3bb6df356d84866caed154cabc780bbc67463bff))
- Generate delay IDs with unique name per join set - ([20e7951](https://github.com/obeli-sk/obelisk/commit/20e7951759fd80f1cf58cedc583c2808e25ed49e))
- Use `trappable_error_type` for `spawn-error` - ([e024fdc](https://github.com/obeli-sk/obelisk/commit/e024fdc5964b17a5e8ddb63d86e61827dfcda84b))
- Rename `EventCall:BlockingJoinNext` to `JoinNextClosing` - ([6958d04](https://github.com/obeli-sk/obelisk/commit/6958d047bf34a3337626f4f834255884b5dcf0f7))
- Move one-off join set creation to `event_history` - ([7836194](https://github.com/obeli-sk/obelisk/commit/78361948f858a84b309941acb4b3aad890be1dff))
- Remove `ClockFn` from `event_history` - ([76298ec](https://github.com/obeli-sk/obelisk/commit/76298ec6fbb589e33fe1f4883c953f0e35c3c7cc))


## [0.23.2](https://github.com/obeli-sk/obelisk/compare/v0.23.1...v0.23.2)

### ⛰️ Features

- *(grpc,cli)* Implement `stub` RPC - ([397ae90](https://github.com/obeli-sk/obelisk/commit/397ae9058f535d27d5c02580803a6157029e9bcf))
- Add persistent handling of `-stub` calls - ([b7d85bd](https://github.com/obeli-sk/obelisk/commit/b7d85bda5438c5075b8c3a39ec44e65b46f5dca6))
- Generate `-stub` interface when serializing to WIT - ([eae74b3](https://github.com/obeli-sk/obelisk/commit/eae74b3e009ebcd22267e042d2b0e6cf085fd00d))
- Add `-stub` functions to `WasmComponent`'s `exim` - ([e84fcee](https://github.com/obeli-sk/obelisk/commit/e84fceeaa7dcc68f36a44dcfdf3401e1b26b3f3e))
- Allow specifying stub activities in config - ([066fdd6](https://github.com/obeli-sk/obelisk/commit/066fdd6750e11c6339cfbef7e6151837da99c022))

### 🐛 Bug Fixes

- *(cli)* Pass retval as string, verify it is a JSON - ([a545760](https://github.com/obeli-sk/obelisk/commit/a54576093e2ae4fef323d8fe2f2e62ec78c94b06))
- Mark `Schedule` event as `Processed` - ([07bc053](https://github.com/obeli-sk/obelisk/commit/07bc053a19dd1b14eb02b856311e54fb80220bab))

### 🚜 Refactor

- *(sqlite)* Use strict tables - ([125e0cc](https://github.com/obeli-sk/obelisk/commit/125e0cce550117519e0ce1428e06b059bf78ad9f))
- *(webui)* Make `is_extension` detect stubs - ([7445d9e](https://github.com/obeli-sk/obelisk/commit/7445d9ec55b596ddcd46c35ca1b887908eeaa70b))
- Support no return type for stubbed activities - ([b557b61](https://github.com/obeli-sk/obelisk/commit/b557b61248e90475169fc72e92178ead74e252a2))
- Find stub function using `find_by_exported_ffqn_stub` - ([aa8cb2c](https://github.com/obeli-sk/obelisk/commit/aa8cb2c3a04760efdff75c79dd7f4fb055461ba1))
- Unify stub req/resp into a single event - ([519d400](https://github.com/obeli-sk/obelisk/commit/519d400f2ebad96733b5a7900c1bf2432ac11074))
- Add `StubRequest` - ([8e801da](https://github.com/obeli-sk/obelisk/commit/8e801dab484e86f70a6c0a91a16466aba478cea3))
- Eagarly get fn metadata from `FunctionRegistry` into `EventCall` - ([342bfe0](https://github.com/obeli-sk/obelisk/commit/342bfe074e701a37792b2a4a5c09b0f0cad0295c))
- Convert generic `DbPool` into `Arc`s - ([f75a8ac](https://github.com/obeli-sk/obelisk/commit/f75a8ac2e31d0031a48d194bcdb33e2950e91f56))
- Make activity stub functions externally unsubmittable - ([445d3c3](https://github.com/obeli-sk/obelisk/commit/445d3c30fc97189f0d07492d7192b6087b07a9b2))
- Compare `ClosingStrategy` when replaying log - ([26c2ff9](https://github.com/obeli-sk/obelisk/commit/26c2ff98bef390421d14bcb333e7618fc26ed77f))
- Remove params and retvals from debug output - ([20b9f0b](https://github.com/obeli-sk/obelisk/commit/20b9f0bf9beacb9eef294d10026a1367d32658f4))
- Render WIT of stub activities - ([d5b9bbe](https://github.com/obeli-sk/obelisk/commit/d5b9bbe9bf56298945f5216ea725f744b00f1be9))
- Skip `-schedule` generation for activity stubs - ([c69a091](https://github.com/obeli-sk/obelisk/commit/c69a091a99e9ac8b0786091d328bc59019ebc214))
- Replace `expect` with `WorkflowFunctionError` - ([07d5b4d](https://github.com/obeli-sk/obelisk/commit/07d5b4d4aaea082873b2002eaa38246e2130f610))
- Simplify `imported_fn_to_event_call` - ([9955fcf](https://github.com/obeli-sk/obelisk/commit/9955fcf0f628264d00dc0ba67ec685bc7ccd5f92))
- Allow multiple `EventCall`s from a single `ImportedFnCall` - ([ccd5ccd](https://github.com/obeli-sk/obelisk/commit/ccd5ccd511b123f59746c5ed0bce71b34f01eb65))


## [0.23.1](https://github.com/obeli-sk/obelisk/compare/v0.23.0...v0.23.1)

### ⛰️ Features

- Allow missing JSON fields for optional record fields - ([f5c5049](https://github.com/obeli-sk/obelisk/commit/f5c5049ff69ff7690942beee47ac3c4daafcff8c))

### 🐛 Bug Fixes

- Fix order of record field deserialization - ([7c5109c](https://github.com/obeli-sk/obelisk/commit/7c5109c5eb8762fada62faaddeed72ed20abbd29))
- Report missing record fields on deser - ([c54a366](https://github.com/obeli-sk/obelisk/commit/c54a36640d7f698df2408393055c9ba9ef5ed9d5))

### 🚜 Refactor

- Add `AbortOnDropHandle::new` - ([3574253](https://github.com/obeli-sk/obelisk/commit/3574253f98b043bcc2ee36a8eaa006922351571c))


## [0.23.0](https://github.com/obeli-sk/obelisk/compare/v0.22.5...v0.23.0)

Adds support for process spawning and disk IO in activities. Introduces WIT for local process control, and refactors TOML configuration. Includes a breaking change in cache/allocator config.

### ⛰️ Features

- *(activity)* Use process groups - ([659d8d5](https://github.com/obeli-sk/obelisk/commit/659d8d5fdee7b43cf5a64d3828a260f67fbedaa5))
- *(activity)* Implement stdio for child processes - ([372c2f7](https://github.com/obeli-sk/obelisk/commit/372c2f794c4c5197e6af69ed13fce18239ef1ea5))
- *(activity)* Allow spawning of local processes - ([a5a84f7](https://github.com/obeli-sk/obelisk/commit/a5a84f7832f456b7817b11c7e395245b160bae46))
- *(activity)* Allow disabling the preopened directories cleaner - ([6d840d1](https://github.com/obeli-sk/obelisk/commit/6d840d12e799277530f8e0e2f160ad3cb37eef9f))
- *(toml)* Allow enabling local process spawning - ([443619b](https://github.com/obeli-sk/obelisk/commit/443619bff3cfde0493f63067928e7e2a6ab94856))
- *(toml,activity)* Add periodic preopen dir cleanup - ([d449831](https://github.com/obeli-sk/obelisk/commit/d449831356eeb89853437a925d8c734c7ba01702))
- *(wit)* Add `subscribe-wait` - ([47c6ad5](https://github.com/obeli-sk/obelisk/commit/47c6ad52fa9e1dc64e98fab5647afde1055d5095))
- Add preopened dir support to activities - ([d868e71](https://github.com/obeli-sk/obelisk/commit/d868e71a1189d1724b4e4d1ee72233207b3bad80))

### 🚜 Refactor

- *(toml)* [**breaking**] Move cache and allocator config to `wasm` - ([1c58141](https://github.com/obeli-sk/obelisk/commit/1c581413a9870ad53596e8cce114a84186300b39))
- *(toml)* Change default `cleanup.older_than` to 5 mins - ([ea342f2](https://github.com/obeli-sk/obelisk/commit/ea342f2d7ec30fe68da44bf35c5d99774c2b4d71))
- *(wit)* Change type of `child-process.id` to `u32` - ([ece7de7](https://github.com/obeli-sk/obelisk/commit/ece7de7e24753418a09ecea0b0fb97a3dfb0abb1))
b967706217968d3f1381e34ef58a240b506f957c))
- Allow sqlite shutdown during batch processing - ([01e11a1](https://github.com/obeli-sk/obelisk/commit

## [0.22.5](https://github.com/obeli-sk/obelisk/compare/v0.22.4...v0.22.5)

### ⛰️ Features

- *(cli)* Remove backtrace printing - ([fd957a5](https://github.com/obeli-sk/obelisk/commit/fd957a5ef8613a696ad8491eba6767989c3a843f))

### 🐛 Bug Fixes

- Lower `verify_imports` error to a warning - ([e3a1909](https://github.com/obeli-sk/obelisk/commit/e3a1909a8db1ceb2d413b2bcdd93e3c78eace4d2))

### 📚 Documentation

- Update the roadmap - ([ad74fb1](https://github.com/obeli-sk/obelisk/commit/ad74fb1039efa71d4a308d039a76c99b1cf37879))
- Describe `stub_wasi` - ([8eac345](https://github.com/obeli-sk/obelisk/commit/8eac34528120a22be3e12985f622d3fa3d61ef9c))

### 🚜 Refactor

- Drop "com" from `ProjectDir`'s qualifier - ([ee16178](https://github.com/obeli-sk/obelisk/commit/ee16178b4f93e454d92a610e83fec36b07fa6fe6))
- Use `tokio::task::yield_now` on epoch interruption - ([c3b9799](https://github.com/obeli-sk/obelisk/commit/c3b979975946e25bec38b3feabd9e3b07d1b9244))


## [0.22.4](https://github.com/obeli-sk/obelisk/compare/v0.22.3...v0.22.4)

Adds experimental support for creating workflows in TinyGo.

### ⛰️ Features

- *(workflow)* Add preliminary support for `stub_wasi` - ([ed8a297](https://github.com/obeli-sk/obelisk/commit/ed8a297e3e812b2fa3428768e013e83d59097f79))

### 🐛 Bug Fixes

- *(cli)* Work around dots in function name - ([c382787](https://github.com/obeli-sk/obelisk/commit/c382787fd1a72c6cd145c7fb34ffa90ca4959468))
- *(workflow)* Switch to minimal impl for supporting  `stub_wasi` - ([2babfec](https://github.com/obeli-sk/obelisk/commit/2babfec04afe9fc44cea1eb79c17d59105e99734))

### 📚 Documentation

- Update README.md - ([8532630](https://github.com/obeli-sk/obelisk/commit/8532630a8fa78d382ec87e07b7cdbd334ed10073))

### 🚜 Refactor

- *(worker)* Rename `extract_exported_ffqns_noext` - ([6c27f6c](https://github.com/obeli-sk/obelisk/commit/6c27f6cc958824901ec0e4c712a8d42eecb78faa))
- Remove `Worker.imported_functions` - ([8204459](https://github.com/obeli-sk/obelisk/commit/8204459bad8ce029bdc183776fafea2f33c0a6e5))


## [0.22.3](https://github.com/obeli-sk/obelisk/compare/v0.22.2...v0.22.3)

Fixes instantiation error that blocked starting components built by TinyGo.

### 🐛 Bug Fixes

- *(runtime)* Configure epoch callback before instantiation - ([8056afe](https://github.com/obeli-sk/obelisk/commit/8056afee78894c011699ab034d04d57713e67a6a))


## [0.22.2](https://github.com/obeli-sk/obelisk/compare/v0.22.1...v0.22.2)

Fixes missing host export that blocked components generated by [ComponentizeJs](https://github.com/bytecodealliance/ComponentizeJS) from running.

### 🐛 Bug Fixes

- *(webhook)* Link `obelisk:types@1.1.0` in webhook - ([b47c826](https://github.com/obeli-sk/obelisk/commit/b47c826aa36de4ee2b9fdcf383c07a228430899f))


## [0.22.1](https://github.com/obeli-sk/obelisk/compare/v0.22.0...v0.22.1)

### 🐛 Bug Fixes

- Catch webhooks importing `workflow-support` in `verify_imports` - ([39f7a05](https://github.com/obeli-sk/obelisk/commit/39f7a05f7b3ae448c26a3a6f77a11c06d8816d9c))
- Allow workflows to use `join-set-id`.`id()` - ([e14c71d](https://github.com/obeli-sk/obelisk/commit/e14c71d2246aa5d1acefe1e9bc01b12f556bc8d9))


## [0.22.0](https://github.com/obeli-sk/obelisk/compare/v0.21.0...v0.22.0)

This release requires components to upgrade to version 1.1 of `obelisk:types` and `obelisk:workflow`.
The main motivation is to work around a bug in [ComponentizeJs](https://github.com/bytecodealliance/ComponentizeJS),
which enables writing workflows and activities in JavaScript.
There are two changes in the WIT files:
* Removed `closing-strategy` variant `cancel`, which was not implemeted yet
* Added `id` function to `join-set-id` resource. This is the workaround.

### ⛰️ Features

- *(cli)* Skip printing the error twice when reconnect is enabled - ([8e9850f](https://github.com/obeli-sk/obelisk/commit/8e9850faa504e007f4a7cc8cbe9dab0c4da9f310))
- *(wit)* [**breaking**] Switch `types`,`workflow-support` to 1.1.0 - ([fc031ab](https://github.com/obeli-sk/obelisk/commit/fc031ab7700096984263433f70d4c7df4c4bfdf0))
- *(wit)* Add `types`,`workflow-support` version 1.1.0 - ([51d7367](https://github.com/obeli-sk/obelisk/commit/51d736751d4384aff54d6031bc620a185fb790ee))

### 🚜 Refactor

- *(workflow)* Disregard `closing-strategy` - ([6822d09](https://github.com/obeli-sk/obelisk/commit/6822d0946a3f2375940eae93cf92f3aea99f51b5))
- *(workflow)* Move generated types and support to `v1_0_0` - ([4ac8b09](https://github.com/obeli-sk/obelisk/commit/4ac8b09809e8d72945323d6087bd35d355cbfaac))


## [0.21.0](https://github.com/obeli-sk/obelisk/compare/v0.20.0...v0.21.0)

Performance: Workflows that make progress after being locked are now unlocked and allowed to continue immediately. Previously they were sometimes marked as timed out
and became pending only after backoff period.

**Breaking (sqlite)**: This release fixes performance regression in sqlite introduced in v0.20.0, and changes the SQL schema. Use `--clean-db` to wipe out the old
sqlite database files on first run if affected.

**Breaking (toml)**: Setting `workflows.backtrace.persist` was renamed to `wasm.backtrace.persist`.

### ⛰️ Features

- *(db)* [**breaking**] Unlock workflows with progress instead of timing out - ([f193858](https://github.com/obeli-sk/obelisk/commit/f193858b6962b04915d697615368a432cf5f20ef))
- *(toml,sqlite)* Allow customizing PRAGMA statements - ([5d1cbd2](https://github.com/obeli-sk/obelisk/commit/5d1cbd2df82a7921f80448cb19d032fa50a33f4a))
- Decouple backtrace capture from persisting - ([6bd7244](https://github.com/obeli-sk/obelisk/commit/6bd7244014bd1a341a0d97db90663be8b5788c1e))
- Do not capture nor persit backtrace if disabled - ([11c9d4d](https://github.com/obeli-sk/obelisk/commit/11c9d4d41953dcf7aeba9160a32af997f2182c66))

### 🐛 Bug Fixes

- *(sqlite)* Fix `PRAGMA` settings broken by 316ee7a - ([859d335](https://github.com/obeli-sk/obelisk/commit/859d33597321e4f1c965e7ef67d48f2cc3de6578))
- *(toml)* Make `SqliteConfigToml` defaults consistent - ([0f0d8b4](https://github.com/obeli-sk/obelisk/commit/0f0d8b4c699582cab724d8ea99a0bfc603f9ebf5))

### 🚜 Refactor

- *(toml)* [**breaking**] Rename key `workflows` to `wasm` - ([c4f6a3a](https://github.com/obeli-sk/obelisk/commit/c4f6a3a37ff14914967d023888e22f67169c7097))
- Merge `TemporaryTimeoutHandledByWatcher` into `DbUpdatedByWorkerOrWatcher` - ([3572301](https://github.com/obeli-sk/obelisk/commit/3572301d9b3ffe588ec9ce69eb37eca040b06885))
- Remove `interrupt_on_timeout_container` - ([e5031e7](https://github.com/obeli-sk/obelisk/commit/e5031e78e6cb28f0994db234a4e1541bf0f59283))


## [0.20.0](https://github.com/obeli-sk/obelisk/compare/v0.19.3...v0.20.0)

### ⛰️ Features

- *(cli)* Add `generate config-schema` - ([d3f5506](https://github.com/obeli-sk/obelisk/commit/d3f55063d08a397f406f34ca3149f9d5eece200c))
- *(cli)* Add `no-reconnect` and `no-backtrace` to `get` and `submit` - ([eb96ae7](https://github.com/obeli-sk/obelisk/commit/eb96ae78fcb2baf2e53645fbd1af644116134028))

### 🐛 Bug Fixes

- *(cli)* Fix reconnect while polling status stream - ([4a1ef58](https://github.com/obeli-sk/obelisk/commit/4a1ef58d974a1487693453502b9fe11a78464355))

### 📚 Documentation

- Update roadmap - ([860232c](https://github.com/obeli-sk/obelisk/commit/860232c8bcbf3905ce7bcd803ef44e5492d8014d))

### 🚜 Refactor

- *(cli)* Remove `TonicClientResultExt` - ([7cfcba1](https://github.com/obeli-sk/obelisk/commit/7cfcba13db446127035b57c055fb71d876c7ac47))
- *(toml)* [**breaking**] Simplify config attribute `blocking_strategy` - ([d8c216c](https://github.com/obeli-sk/obelisk/commit/d8c216c3fcf2ccf649c9c82ca5e113e210933f33))
- *(toml)* [**breaking**] Make `non_blocking_event_batching` part of `await` strategy - ([3cac492](https://github.com/obeli-sk/obelisk/commit/3cac4925f4ce959c13316d864ead015ea4f26f29))
- Replace `continue` with `filter` when skipping already linked fns - ([7bd8579](https://github.com/obeli-sk/obelisk/commit/7bd8579b0157668cd1fa9083525d89282816c1d5))


## [0.19.3](https://github.com/obeli-sk/obelisk/compare/v0.19.2...v0.19.3)

### 🐛 Bug Fixes

- Use `release` profile when building MacOS artifacts - ([401cf19](https://github.com/obeli-sk/obelisk/commit/401cf193739eaf8600971275a8e7afc9df0416e5))


## [0.19.2](https://github.com/obeli-sk/obelisk/compare/v0.19.1...v0.19.2)

### 🐛 Bug Fixes

- Make sure the runtime is deterministic when using `simd` - ([47728cd](https://github.com/obeli-sk/obelisk/commit/47728cde20d1c2cdd0edafc390feb726adffc00e))

### 📚 Documentation

- Add screencast - ([1e00057](https://github.com/obeli-sk/obelisk/commit/1e0005745a32651827fd1593bb80c28f33dac5e1))

### 🚜 Refactor

- Cross-compile Linux and MacOS targets from `nix` using [cargo-zigbuild](https://github.com/rust-cross/cargo-zigbuild).
- Remove git sha from version - ([b575c5e](https://github.com/obeli-sk/obelisk/commit/b575c5e07159a0463e0c5389954956ede76ae54e))
- Remove `shadow-rs` - ([7aa0847](https://github.com/obeli-sk/obelisk/commit/7aa084763ab6cbc0a45860d6626cf380692f36bf))
- Rename devShell `release` to `publish` - ([6b7a852](https://github.com/obeli-sk/obelisk/commit/6b7a85233daab669c0238027e9a144e9036d3f42))


## [0.19.1](https://github.com/obeli-sk/obelisk/compare/v0.19.0...v0.19.1)

### ⛰️ Features

- *(toml)* Allow specifying backtrace sources for webhooks - ([d0563fa](https://github.com/obeli-sk/obelisk/commit/d0563fa318303c215ea55d905fed54d8e336de60))
- *(webhook)* Capture and persist backtrace for direct and scheduled child executions - ([29dac20](https://github.com/obeli-sk/obelisk/commit/29dac20d5ade05f3f599332296dbf5a824540273))
- *(workflow)* Persist backtrace for all `workflow-support` functions - ([30849a6](https://github.com/obeli-sk/obelisk/commit/30849a62c61cb336266ef8d7d29c5b48cd008f70))

### 🐛 Bug Fixes

- *(workflow)* Replace panics with errors in host functions - ([923ace7](https://github.com/obeli-sk/obelisk/commit/923ace71749b3cd2abba9783095daf1c663c6dfc))
- Stop sharing the same one-off join set in webhook - ([7c85d13](https://github.com/obeli-sk/obelisk/commit/7c85d13b64e900307b170a63122e3e08b0e959ad))

### 📚 Documentation

- Update readme, add logo - ([8d302b1](https://github.com/obeli-sk/obelisk/commit/8d302b1687e25304ccffd08b8f585ce1b07eabb7))


## [0.19.0](https://github.com/obeli-sk/obelisk/compare/v0.18.2...v0.19.0)

### ⛰️ Features

- *(db)* Allow querying backtrace by version - ([13910c1](https://github.com/obeli-sk/obelisk/commit/13910c1c9a8cb86d3d7d1269a5657a4a7bd58266))
- *(db)* [**breaking**] Track and persist `HttpClientTrace` - ([6d6fa62](https://github.com/obeli-sk/obelisk/commit/6d6fa62f545e52667f693d6d2c586f05dcdb0c94))
- *(db,grpc)* [**breaking**] Allow listing top level executions only - ([6c72057](https://github.com/obeli-sk/obelisk/commit/6c720576875371c51190950825f155eafa16a758))
- *(grpc)* [**breaking**] Rename `GetLastBacktrace` to `GetBacktrace` - ([1a25e4e](https://github.com/obeli-sk/obelisk/commit/1a25e4eaeda1f40cfb851db954fcd4b46c780650))
- *(grpc)* Allow requesting `backtrace_id` for events - ([1a0bb9b](https://github.com/obeli-sk/obelisk/commit/1a0bb9bc7faa56ac91d6fcbc396d456e71b971dc))
- *(grpc)* Add RPC `ListExecutionEventsAndResponses` - ([9b04d94](https://github.com/obeli-sk/obelisk/commit/9b04d9460c0a621a9ba21f3ff2a3010e2d25bd40))
- *(grpc)* Send the http client traces in rpc `ListExecutionEvents` - ([8931b89](https://github.com/obeli-sk/obelisk/commit/8931b897033db306fd52b84aa5623ce7961774db))
- *(grpc,db)* Add http client traces to `TemporarilyTimedOut` - ([4526ada](https://github.com/obeli-sk/obelisk/commit/4526ada66b6ee8d21892eac16c98f45ac7a6ccd5))
- *(tracing)* Instrument `send_request` - ([72454c0](https://github.com/obeli-sk/obelisk/commit/72454c03962f1c313ae823877469af8cacc90a5c))
- *(webui)* Add backtrace browser - ([6bdca4b](https://github.com/obeli-sk/obelisk/commit/6bdca4b9144952bec9a3b385283a7ebc4ba1aabe))
- *(webui)* Fetch the whole log in trace view - ([0be53fe](https://github.com/obeli-sk/obelisk/commit/0be53fece75045052db08aedd300c0cd4d04303a))
- Start one-off and generated joinsets with index 1 - ([ef63277](https://github.com/obeli-sk/obelisk/commit/ef632772d56ce54293efe8bc5fba33b03fddc819))

### 🐛 Bug Fixes

- *(sqlite)* Fix statement and parameter name in `get_backtrace` - ([9661dcf](https://github.com/obeli-sk/obelisk/commit/9661dcf9cae054c5be5d0ac8e9f372a42b50a3e8))
- Persist `http_client_trace` on activity trap - ([4e1e72a](https://github.com/obeli-sk/obelisk/commit/4e1e72a2b56e7ed51606687966ec8b17f4577157))

### 📚 Documentation

- Update roadmap - ([5bebda2](https://github.com/obeli-sk/obelisk/commit/5bebda2d9e128732058dc646aa220c67931b7804))
- Remove mention of `drop` in `closing-strategy` - ([4b643bc](https://github.com/obeli-sk/obelisk/commit/4b643bcd1176153e1ce41649f6e2abbd32dfd09e))

### ⚡ Performance

- *(webui)* Move syntax highlighting to `source_code_state` - ([b1f3a45](https://github.com/obeli-sk/obelisk/commit/b1f3a45fc7812b977cd1f2908e25c2ee6c90c8ec))

### 🚜 Refactor

- *(cli)* Increase the indent when printing the backtrace - ([ad50a49](https://github.com/obeli-sk/obelisk/commit/ad50a498a9738486b658b175abd4e4867b82c115))
- *(concepts)* [**breaking**] Change derive execution id format - ([83e4b37](https://github.com/obeli-sk/obelisk/commit/83e4b3736ab954c50f883e75039242da3ab397fe))
- *(grpc)* Allow getting first backtrace - ([a9519b7](https://github.com/obeli-sk/obelisk/commit/a9519b735fbcb6619b14b7608fff22f1313ab9ed))
- *(grpc)* [**breaking**] Add `temporarily_` to `failed` and `timed_out` - ([ac2ba90](https://github.com/obeli-sk/obelisk/commit/ac2ba90f28a639422b96659f776f1699f5775ea1))
- *(grpc,db)* Rename `http_client_trace` to `http_client_traces` - ([48f2a1e](https://github.com/obeli-sk/obelisk/commit/48f2a1ee6fad3c67a16b33fce369e9fba24c2efc))
- *(logging)* Change grpc failure logging level to debug - ([798105b](https://github.com/obeli-sk/obelisk/commit/798105b4240358ac86c98fc0b72108ba9853379e))
- *(webui)* Move serialized JSON tree to `json_tree` - ([c3b020e](https://github.com/obeli-sk/obelisk/commit/c3b020e97dbb650fe831395cf9441bae0ce34d33))
- *(webui)* Add `BusyIntervalStatus` - ([d95ecf2](https://github.com/obeli-sk/obelisk/commit/d95ecf2d0bae7431f797913ed7a5f0705f7cb348))
- *(webui)* Extract the effect hook in tracing - ([35c7849](https://github.com/obeli-sk/obelisk/commit/35c784908ec27f2752ce8b95ebbfbfcb764fad28))


## [0.18.2](https://github.com/obeli-sk/obelisk/compare/v0.18.1...v0.18.2)

### ⛰️ Features

- *(cli)* Send execution error via exit code on json output - ([d02e574](https://github.com/obeli-sk/obelisk/commit/d02e574b6db02f62feee32e1befaad499ed14791))

### 🐛 Bug Fixes

- *(cli)* Reconnect only on tonic errors - ([23fa4b5](https://github.com/obeli-sk/obelisk/commit/23fa4b56ebf647bae6f72d1adc24c392017f346e))


## [0.18.1](https://github.com/obeli-sk/obelisk/compare/v0.18.0...v0.18.1)

### ⛰️ Features

- Support path prefixes on both sides of `backtrace.sources` - ([521c489](https://github.com/obeli-sk/obelisk/commit/521c489441b62069f2a42a7b652079851774cdf6))


## [0.18.0](https://github.com/obeli-sk/obelisk/compare/v0.17.0...v0.18.0)

### ⛰️ Features

- *(cli)* Reconnect TUI on status polling - ([fdcf6c2](https://github.com/obeli-sk/obelisk/commit/fdcf6c2adb6f020f6c627ce47ab218e15788b342))
- *(cli)* Print source hunk in `submit` and `get` - ([72f9237](https://github.com/obeli-sk/obelisk/commit/72f9237fe8537811be8ffd438d524d333f265706))
- *(cli)* Show the whole source file of the first frame with file and line - ([eacb121](https://github.com/obeli-sk/obelisk/commit/eacb121115c5efa8efff97ca3db3dce8942b21a2))
- *(cli)* Display last backtrace - ([6354e9b](https://github.com/obeli-sk/obelisk/commit/6354e9b4b7bebd9959ff83dd76a2c4cfea137b9e))
- *(db)* Implement `get_last_backtrace` - ([fd98793](https://github.com/obeli-sk/obelisk/commit/fd9879305ca9fc94d8a334fb5c835b9247b188db))
- *(grpc)* Include version in `GetLastBacktraceResponse` - ([c0409b9](https://github.com/obeli-sk/obelisk/commit/c0409b926224d0b60662057d5e8953fb37e93fdf))
- *(grpc)* Demangle function names, make `FrameInfo.func_name` required - ([2e91456](https://github.com/obeli-sk/obelisk/commit/2e91456618c3e4fe2f4eb2d6d7f64933f2d2dc3e))
- *(grpc)* Implement `rpc GetBacktraceSource` - ([fcef6b5](https://github.com/obeli-sk/obelisk/commit/fcef6b51cbb87b9003ecd3c51522cbba24b04163))
- *(grpc)* Implement `rpc GetLastBacktrace` - ([77adffc](https://github.com/obeli-sk/obelisk/commit/77adffc8ac916cb80677c86cd51d142c63f55f88))
- *(grpc,db)* Add `ComponentDigest` to `BacktraceInfo` and `GetLastBacktraceResponse` - ([1d93c49](https://github.com/obeli-sk/obelisk/commit/1d93c49cdb83eea2230392f2e2ebea15233df8b5))
- *(toml)* Introduce `OBELISK_TOML_DIR` path prefix - ([d58db23](https://github.com/obeli-sk/obelisk/commit/d58db2374ae059b04cae4eb0d1a32c7ae084f313))
- Enable path prefixes on mapped backtrace sources - ([539c9f4](https://github.com/obeli-sk/obelisk/commit/539c9f46232e10121ae774a1385d360d5d0170a5))
- Allow workflows to share name with activities - ([e7d570a](https://github.com/obeli-sk/obelisk/commit/e7d570ad4d6b02f29c02de477919b8e4a4fd81ce))
- Allow turning off backtrace capture - ([69c958f](https://github.com/obeli-sk/obelisk/commit/69c958f0bace8937dbd852ff5f0e4d42ece12f36))
- Enable `forward_unhandled_child_errors_in_completing_join_set_close` by default - ([aacdfa7](https://github.com/obeli-sk/obelisk/commit/aacdfa7357344581f1e209e6c6e4672e0b3d67da))
- Capture and persist backtrace for direct, submit, await-next, schedule calls - ([2a260bc](https://github.com/obeli-sk/obelisk/commit/2a260bca756e1473f4bec6847c6de70336698eb5))
- Enable wasm backtrace details for workflow engine - ([9265458](https://github.com/obeli-sk/obelisk/commit/9265458272606c671461062358aa0f81bcf00d17))

### 🐛 Bug Fixes

- *(cli)* Display the full join set id - ([668bd2a](https://github.com/obeli-sk/obelisk/commit/668bd2a77de4ecc95b488317e3c56a8df2992db3))
- Downgrade missing backtrace source to a warning - ([2f31659](https://github.com/obeli-sk/obelisk/commit/2f31659e1f400d93faf89fc1fa5da32c8397aeae))
- Fix parsing ffqn containing version - ([7f1072e](https://github.com/obeli-sk/obelisk/commit/7f1072e8c24aebbadbf8c94b4db3b2b9524eb50e))

### 📚 Documentation

- Expand roadmap todos - ([cef24a0](https://github.com/obeli-sk/obelisk/commit/cef24a012741f257783309b6360d7b0bfbb08c5e))

### 🚜 Refactor

- *(cli)* Simplify backtrace output - ([24a1f2e](https://github.com/obeli-sk/obelisk/commit/24a1f2e76dafaf813a9de36a283fe7d5774d5304))
- *(cli)* Get rid of `old_pending_status` - ([88b857b](https://github.com/obeli-sk/obelisk/commit/88b857b96900fc89a01a64d76770ee6408c17150))
- *(cli)* Simplify screen cleaning - ([6824ec4](https://github.com/obeli-sk/obelisk/commit/6824ec41d850d8b6520afc8da1af0dca04800048))
- *(cli)* Cache sources - ([bfa25e9](https://github.com/obeli-sk/obelisk/commit/bfa25e9d160d0f7f2cacc6d63f6d97722fbc35e1))
- *(cli)* Extract `get_json` - ([9396d9a](https://github.com/obeli-sk/obelisk/commit/9396d9a5e3cd4dc1ef40e33fa262b2af55c83f43))
- *(cli)* Clean up source file formatting - ([7ebc1ef](https://github.com/obeli-sk/obelisk/commit/7ebc1ef50ec4362dc14fde22589bfa9d8b2981cc))
- *(db)* [**breaking**] Rename `HistoryEvent::JoinSet` to `JoinSetCreate` - ([d8d3f20](https://github.com/obeli-sk/obelisk/commit/d8d3f20c819f6ecc2174639c923f1b4603223aba))
- *(grpc, db)* Replace `ComponentDigest` with `ComponentId` in backtrace support - ([6627759](https://github.com/obeli-sk/obelisk/commit/6627759e8eb8bc8d5e0291840bf13f71962800a8))
- *(toml)* Add `#[serde(deny_unknown_fields)]` to all structs - ([ce64955](https://github.com/obeli-sk/obelisk/commit/ce649558c1f35d2f26317951276649b9f30435b6))
- *(toml)* Rename `workflows.backtrace.persist` - ([be23736](https://github.com/obeli-sk/obelisk/commit/be23736fba39f42eb24a8ee64c3fe58da320a103))
- Wait 1s when polling for execution status - ([7ffe506](https://github.com/obeli-sk/obelisk/commit/7ffe506cd953b01e4d0de7a9b47dd7ab22283b8a))
- Record `content_id` at beginning of each `fetch_and_verify` - ([8f90818](https://github.com/obeli-sk/obelisk/commit/8f90818a1a24d3b8d907ddee68e36e9013ef880f))
- Remove configuration hash from `ComponentId` - ([3375ee4](https://github.com/obeli-sk/obelisk/commit/3375ee40a31d22f7961f21f96682cc20f757fc59))
- Rename toml structs - ([cd6c0bb](https://github.com/obeli-sk/obelisk/commit/cd6c0bb39a2ec32894274f0a234c079a02fc4fff))


## [0.17.0](https://github.com/obeli-sk/obelisk/compare/v0.16.3...v0.17.0)

### ⛰️ Features

- *(wit)* [**breaking**] Add `closing-strategy` - ([cfd27ad](https://github.com/obeli-sk/obelisk/commit/cfd27adc231faefa4ad2ddeb60b7d65cfd87581c))

### 📚 Documentation

- Add description to scripts - ([d166811](https://github.com/obeli-sk/obelisk/commit/d16681107b735ec0d98358791be973acd1d410cd))


## [0.16.3](https://github.com/obeli-sk/obelisk/compare/v0.16.2...v0.16.3)

### ⛰️ Features

- Compare `wit_type` in `ReturnType` and `ParameterType` - ([da3faf3](https://github.com/obeli-sk/obelisk/commit/da3faf36b71ab5264f37d4b1d974a0b45672330e))

### 📚 Documentation

- Update the roadmap - ([72ad832](https://github.com/obeli-sk/obelisk/commit/72ad8323be92884b91b7f6d82e97fde4b39f178f))

### 🚜 Refactor

- *(webui)* Replace `futurs-util` with `futures-concurrency` - ([e7ea856](https://github.com/obeli-sk/obelisk/commit/e7ea8569bb09a801953ac26762817b4c25991b41))
- Replace `derivative` with `derive-where` - ([e5c4e14](https://github.com/obeli-sk/obelisk/commit/e5c4e14754c255ad3addc0f79efbc3cd1ad3f07d))


## [0.16.1](https://github.com/obeli-sk/obelisk/compare/v0.16.0...v0.16.1)

### ⛰️ Features

- Disable determinism checking for unfinished executions - ([f94f862](https://github.com/obeli-sk/obelisk/commit/f94f8623c3e2b9c57cd5d18f4302015a70c95c72))

### 🐛 Bug Fixes

- *(sqlite)* Return delays in `nth_response`, `get_responses_with_offset` - ([de53521](https://github.com/obeli-sk/obelisk/commit/de5352126e09f4871d878b3340e7bf2982e4f475))
- *(sqlite)* `list_responses` must return delays - ([86be046](https://github.com/obeli-sk/obelisk/commit/86be04657ceac1cd239a3d5a68351ca8eebfc33e))
- *(sqlite)* Set PendingAt to max(now, lock_expirey) - ([01c9501](https://github.com/obeli-sk/obelisk/commit/01c95015acecea394dfabc3336d3a450bc596275))
- *(workflow)* Account for join set kinds when checking name uniqueness - ([f625496](https://github.com/obeli-sk/obelisk/commit/f625496ac7dd3aa3c8599151084d7e511713a48a))
- Rollback dependency updates as `yew` needs `getrandom` 0.2 - ([1f2911f](https://github.com/obeli-sk/obelisk/commit/1f2911f15b5696eda5bfad559a30284baa33c405))
- Gracefully handle deadline before start of execution in workflow worker - ([8f246d7](https://github.com/obeli-sk/obelisk/commit/8f246d713cc52e4a40b893f82a7068b8fc55c1c3))
- Gracefully handle deadline before start of execution in activity worker - ([3d012b1](https://github.com/obeli-sk/obelisk/commit/3d012b143923edcf3620fba03746f041bc97eb8f))

### 🚜 Refactor

- *(webui)* Switch `webui-proxy` to `wstd` - ([dfad85c](https://github.com/obeli-sk/obelisk/commit/dfad85c94feedd13a42cc1732192707e2c8e6d66))
- Make `sqlite_dao` use `Sleep` trait - ([bdf319d](https://github.com/obeli-sk/obelisk/commit/bdf319d21cb6ac38b5f3c0c048aa8d6fdda09f1d))
- Introduce `Sleep` - ([b12d2ea](https://github.com/obeli-sk/obelisk/commit/b12d2ea3393068c0df84684e8c202acf28c673d1))
- Skip `Persist.value` in debug output - ([c124345](https://github.com/obeli-sk/obelisk/commit/c124345f76eae47b6476d39ea6bea80b2550c280))
- Return `Option<ChildReturnValue>` in `find_matching_atomic` - ([a2d55bb](https://github.com/obeli-sk/obelisk/commit/a2d55bbcab806e9596cf709b1d0b169f9d9c30dd))


## [0.16.0](https://github.com/obeli-sk/obelisk/compare/v0.15.1...v0.16.0)

### ⛰️ Features

- *(toml)* [**breaking**] Rename duration variants `secs`,`millis` to `seconds`,`milliseconds` - ([2f1a3f9](https://github.com/obeli-sk/obelisk/commit/2f1a3f9f61a3487fbce388b6561e42ea537aaafe))


## [0.15.1](https://github.com/obeli-sk/obelisk/compare/v0.15.0...v0.15.1)

### ⛰️ Features

- *(cli)* Add `--json` parameter to `submit` and `get` - ([e437ef9](https://github.com/obeli-sk/obelisk/commit/e437ef9c1c050dcceec1d71097b63cea0eecf5f2))
- *(toml)* Add `~` prefix expansion - ([43050f5](https://github.com/obeli-sk/obelisk/commit/43050f57e05e98b6ec4745b4aad46d8de0bb6826))
- Print join set name in CLI - ([1c9225d](https://github.com/obeli-sk/obelisk/commit/1c9225de47104b0db28d41f7d11ff79447b3e34d))

### 🚜 Refactor

- Add "Server is ready" info message - ([bfa966f](https://github.com/obeli-sk/obelisk/commit/bfa966f1a7a78bd6f8086d5faa6bfd57e9fbb9ed))


## [0.15.0](https://github.com/obeli-sk/obelisk/compare/v0.14.2...v0.15.0)

### ⛰️ Features

- *(db)* [**breaking**] Change format of `JoinSetId` - introduce `JoinSetKind` - ([ed83a5f](https://github.com/obeli-sk/obelisk/commit/ed83a5fca4d1fcf19cee738acfeabc3d6ec9b7d2))
- Remove `.` from join set name charset - ([4524fef](https://github.com/obeli-sk/obelisk/commit/4524fefce40045f6b68eaeb842f49870f0f50e48))
- Allow more characters to be used in join set name - ([7ae009b](https://github.com/obeli-sk/obelisk/commit/7ae009b3d8ce69ef6cd8139778780fe37d50b3df))

### 🐛 Bug Fixes

- *(db)* [**breaking**] Change serde format of `PendingStateFinishedResultKind` to snake_case - ([2f9343d](https://github.com/obeli-sk/obelisk/commit/2f9343d483b4bdc856804ecdd0b6138dd7a257d5))

### 🧪 Testing

- Use -submit ffqn for `WorkflowStep::SubmitWithoutAwait` - ([6ad9f8e](https://github.com/obeli-sk/obelisk/commit/6ad9f8e65c4f1002a914d8022a661acf31f54599))

### 🚜 Refactor

- *(doc)* Rename `install.sh` to `download.sh` - ([8b0f07c](https://github.com/obeli-sk/obelisk/commit/8b0f07caa231349b1c4395dcc8539344be3e887d))
- *(grpc)* [**breaking**] Remove "user defined" prefix from `JoinSetId` - ([6a22e25](https://github.com/obeli-sk/obelisk/commit/6a22e253cf3a07344be0775e26ca9c063241bba9))
- *(grpc)* [**breaking**] Remove execution id part from join set id - ([55a8108](https://github.com/obeli-sk/obelisk/commit/55a8108b92da073403895e9d5061a3b0cd32f76d))
- *(grpc)* [**breaking**] Rename join set kind suffix `random` to `generated` - ([947ff57](https://github.com/obeli-sk/obelisk/commit/947ff57c103661e9e98c1f7be11411e57ba412e5))
- *(grpc)* [**breaking**] Add `kind` to `JoinSetId` message - ([9190b2a](https://github.com/obeli-sk/obelisk/commit/9190b2a893d6fa97fb482b658db81a89ea0ac61d))
- *(sqlite)* [**breaking**] Add join set id to the child execution id - ([ee811ba](https://github.com/obeli-sk/obelisk/commit/ee811ba96127d678b66ba3f9c289e4f366118af4))
- *(sqlite)* [**breaking**] Store child version in `t_join_set_response` - ([aba3019](https://github.com/obeli-sk/obelisk/commit/aba301970a5432f3ca53cebe0b6cd604e73ba277))
- *(sqlite)* [**breaking**] Remove `t_join_set_response.result` - ([f9e91e1](https://github.com/obeli-sk/obelisk/commit/f9e91e1863c70ad0a5e082802b2d7f8cfdbbf4f5))
- *(ui)* Display join set kind in join sets - ([925f1ec](https://github.com/obeli-sk/obelisk/commit/925f1ece86dfa0f0cf9af4cd560232c4b8d880cd))
- *(wit)* [**breaking**] Rename join set creation functions to `-named` and `-generated` - ([64f0877](https://github.com/obeli-sk/obelisk/commit/64f0877652c95e0694ce0df3220f25580339d805))
- *(wit,grpc)* [**breaking**] Remove unhandled errors from `execution-error` - ([97136fd](https://github.com/obeli-sk/obelisk/commit/97136fd6f709399b3d1cfc6e4b327cba1f82cc74))
- Use all parts of execution id for random seed - ([f68dd7c](https://github.com/obeli-sk/obelisk/commit/f68dd7caea63c4e3d582774fc0c6a2af2bab49b9))
- Remove `UserDefined` from `JoinSetKind` variants - ([54acfc3](https://github.com/obeli-sk/obelisk/commit/54acfc3e4fa13c60b637be924d3074def16ccd01))
- Wrap names in `ConfigName` - ([8b1727f](https://github.com/obeli-sk/obelisk/commit/8b1727f53a27e071a2599ec5be8c4ef3842d16c3))
- Use auto-incremented index for unnamed join sets - ([a60e9e0](https://github.com/obeli-sk/obelisk/commit/a60e9e0c11c69983d31bde7de4655a9efd737f7a))
- Shorten `JoinSetKind` string representation - ([8f520be](https://github.com/obeli-sk/obelisk/commit/8f520be110141d7135793ed0ead9630c50b5e118))
- Externalize special characters used in `check_name` - ([5108652](https://github.com/obeli-sk/obelisk/commit/5108652cc63e09a1aa8c9c3a4b70044334015ba9))


## [0.14.2](https://github.com/obeli-sk/obelisk/compare/v0.14.1...v0.14.2)

### 🐛 Bug Fixes

- *(wit)* Readd missing `new-` prefix to join set WIT functions - ([aa17e42](https://github.com/obeli-sk/obelisk/commit/aa17e4213fd5ac3be008a72c55960d6c55de809c))


## [0.14.1](https://github.com/obeli-sk/obelisk/compare/v0.14.0...v0.14.1)

### 🐛 Bug Fixes

- Symlink wit path in `utils` - ([51c85c1](https://github.com/obeli-sk/obelisk/commit/51c85c111a3d133a0068436e57d3323afe9877c4))


## [0.14.0](https://github.com/obeli-sk/obelisk/compare/v0.13.3...v0.14.0)

### ⛰️ Features

- *(grpc,db,wit)* [**breaking**] Add support for random values in workflows - ([098351e](https://github.com/obeli-sk/obelisk/commit/098351e35173dd2b1a28aee60005f9bca203e9ae))
- *(toml)* [**breaking**] Replace `sqlite.file` with `sqlite.directory` - ([57c37f8](https://github.com/obeli-sk/obelisk/commit/57c37f8622a52d87ce1398adf89edb237d277fdb))
- *(webhook)* Persist `JoinNext` - ([f27eb35](https://github.com/obeli-sk/obelisk/commit/f27eb35fa966e6658cf8202f9f0ce9c0d020e7c1))
- *(webhook)* Persist finished status - ([8a8dbc7](https://github.com/obeli-sk/obelisk/commit/8a8dbc724f951c55e838b39c1f203051f7c7a63d))
- *(wit)* [**breaking**] Rename `new-join-set()` to `join-set(name:string)` - ([ae1a67f](https://github.com/obeli-sk/obelisk/commit/ae1a67fca0fb387c8cd36a4370002ffa02779805))
- *(wit)* [**breaking**] Add version 1.0.0 to Obelisk WIT files - ([b05b586](https://github.com/obeli-sk/obelisk/commit/b05b58636bb99e8e0f95d54aeb612fcd0be5d5f5))
- *(wit,grpc,sqlite)* [**breaking**] Implement named join sets - ([c99d71f](https://github.com/obeli-sk/obelisk/commit/c99d71fcdb420bb38a65ea01cf5e1aab91d7b82e))
- Get rid of `convert_core_module` in `client component push` - ([0943ada](https://github.com/obeli-sk/obelisk/commit/0943ada140ff66018caf97f8a2fc9af324b993a9))
- Create a dummy join set in webhook - ([5a40379](https://github.com/obeli-sk/obelisk/commit/5a40379512f9a6c2e3d93f7f840f8ec20082f477))

### 🚜 Refactor

- Remove `ConfigIdError` - ([50c5b26](https://github.com/obeli-sk/obelisk/commit/50c5b260ebbc0af0cdb572a5e3f53904ffdd5d8c))


## [0.13.3](https://github.com/obeli-sk/obelisk/compare/v0.13.2...v0.13.3)

### 📚 Documentation

- Add arm64-linux to supported targets - ([0ee1e67](https://github.com/obeli-sk/obelisk/commit/0ee1e677fb44361f0d3e2d31d172bdcb416ef57a))


## [0.13.2](https://github.com/obeli-sk/obelisk/compare/v0.13.1...v0.13.2)

### 🐛 Bug Fixes

- *(sqlite)* Flush the cache before writing `CreateJoinSet` - ([a2a6787](https://github.com/obeli-sk/obelisk/commit/a2a6787e4e1110e97da9bc39197123ded4909368))
- Fix duplicate `JoinNext` if the response did not arrive yet - ([84b6f29](https://github.com/obeli-sk/obelisk/commit/84b6f29354e7f9de1d6fbda3710cfad2c3a3f17c))
- Make `close_opened_join_set` deterministic - ([398148d](https://github.com/obeli-sk/obelisk/commit/398148d14834e873b43f601600b1e755c0aa5182))

### 📚 Documentation

- Add screenshot - ([a7519ce](https://github.com/obeli-sk/obelisk/commit/a7519ce608c74b636f7346a481a32000fa88558a))

### 🧪 Testing

- Replace `join_set_requests` with `find_join_set_request` - ([2a2ab2e](https://github.com/obeli-sk/obelisk/commit/2a2ab2e59cbbedcc4ec469384210506da1a7da4c))

### 🚜 Refactor

- Use `derive_more` for `Debug` instead of `derivative` - ([2858f82](https://github.com/obeli-sk/obelisk/commit/2858f82637598ea568054f03c15be391fbf612b9))
- Replace `ValToJoinSetIdError` with a `String` - ([2212ec2](https://github.com/obeli-sk/obelisk/commit/2212ec2e7893279c212001cd0f5bf5a8365feaf0))
- Close all join sets in `event_history` - ([cd1ef49](https://github.com/obeli-sk/obelisk/commit/cd1ef49f63cf6003c259c7764f381ecf08df6d88))


## [0.13.1](https://github.com/obeli-sk/obelisk/compare/v0.13.0...v0.13.1)

### ⛰️ Features

- *(sqlite)* Add `t_metadata` table - ([69788e8](https://github.com/obeli-sk/obelisk/commit/69788e84f71993e3fca6c8a922732850f42cabc0))

### 🚜 Refactor

- *(sqlite)* Extract `init_thread`,`connection_rpc` - ([691ff8e](https://github.com/obeli-sk/obelisk/commit/691ff8e0815e1e2a35df4510cf0aa6d9ddd590ec))


## [0.13.0](https://github.com/obeli-sk/obelisk/compare/v0.12.0...v0.13.0)

### ⛰️ Features

- *(cli)* Use `--imports` instead of `-v` to show imports - ([c803ed4](https://github.com/obeli-sk/obelisk/commit/c803ed426eb82b19e11c8bda9f2acf2bb930b0aa))
- Propagate the execution error into exit code - ([4992b1a](https://github.com/obeli-sk/obelisk/commit/4992b1afb7b775543fb311db7846a861c5e61abd))
- Add `install.sh` - ([fccf514](https://github.com/obeli-sk/obelisk/commit/fccf5144e3295b5e75427d6ba3f33d94be86f439))

### 🐛 Bug Fixes

- *(cli)* Handle `None` in `ResultDetail::ResultDetail::return_value` - ([c482775](https://github.com/obeli-sk/obelisk/commit/c4827753b59f10a18eae5a375dae1e863796d0c0))
- Avoid equality footgun of `indexmap` in `TypeWrapper`, `WastVal` - ([9285c74](https://github.com/obeli-sk/obelisk/commit/9285c743bf072682e851db0733407243f649fe80))
- Do not drop `EpochTicker` prematurely - ([3c9d639](https://github.com/obeli-sk/obelisk/commit/3c9d63924794cc743ade782719a80604eea135f5))
- Remove all `serde_json::Value` occurrences from `sqlite_dao` - ([1b33e6d](https://github.com/obeli-sk/obelisk/commit/1b33e6d80a2b4858b32f1dd71f151b036e38fe3e))
- Print references of types in original interface in -ext interface's WIT - ([5c73859](https://github.com/obeli-sk/obelisk/commit/5c73859d28fa764bd47b6cc1ca3b2fdfad5a1105))
- Sort nested packages when printing WIT - ([0f19019](https://github.com/obeli-sk/obelisk/commit/0f190194b88310e1cf5d3e35e583c9a14059b280))
- Improve error when input contains more tuple elements than expected - ([ba2e52c](https://github.com/obeli-sk/obelisk/commit/ba2e52c558e2bd11976e1b2a4af30b6db8ac1240))

### 📚 Documentation

- Add a security note to `obelisk.toml` - ([1479b25](https://github.com/obeli-sk/obelisk/commit/1479b25496fb12d692666e1c8e5b4cc542714651))
- Improve readme - ([23365f4](https://github.com/obeli-sk/obelisk/commit/23365f46317e50ef49d2161d1f391d960c0b73a7))
- Simplify the readme - ([73750d7](https://github.com/obeli-sk/obelisk/commit/73750d7e1ae065008de7311e84ff7725f1915fcf))
- Remove note about madsim - ([d7e04ab](https://github.com/obeli-sk/obelisk/commit/d7e04ab40dda02ad8d216aa74c8fa80710289e5b))
- Expand stargazers section - ([332da14](https://github.com/obeli-sk/obelisk/commit/332da1486f39addd13fbb45ac98231daac6a3b82))
- Update the readme - ([d4d58fa](https://github.com/obeli-sk/obelisk/commit/d4d58fa5c26d6d186850ba821397aa8ba9e6f4a1))

### 🧪 Testing

- Verify `obelisk-local.toml` - ([20c7ae4](https://github.com/obeli-sk/obelisk/commit/20c7ae451859b704851d174ebc9d4022505aa4fe))
- Move wit tests to `wit` module - ([e84d85c](https://github.com/obeli-sk/obelisk/commit/e84d85c2861fbdb9047a44a270878371ccf3ef97))
- Stop using `serde_json::Value` in `wast_val_ser` tests - ([a74ca39](https://github.com/obeli-sk/obelisk/commit/a74ca3998fb1f3e046c5ee10f34d8259ee1c39f2))

### 🚜 Refactor

- *(wit)* [**breaking**] Rename `host-activities` to `workflow-support` - ([b51a389](https://github.com/obeli-sk/obelisk/commit/b51a389825dfe895e86c7510232c1c2e2d17b927))
- Move obelisk WIT files to the `wit` folder - ([7dbdaac](https://github.com/obeli-sk/obelisk/commit/7dbdaac43141c7f2380f7a2bba76d1e62ca508f7))
- Instrument the webhook server task - ([7e1df07](https://github.com/obeli-sk/obelisk/commit/7e1df0730b1cec7bfe0554f8b4fe8cbc895c7f9d))
- Improve error messages - ([d73866b](https://github.com/obeli-sk/obelisk/commit/d73866ba3c780793d923229876e235c6811aefd7))


## [0.12.0](https://github.com/obeli-sk/obelisk/compare/v0.11.0...v0.12.0) - 2025-01-15

### Added

- Make `-schedule` submittable
- *(grpc!)* Make `Submit` rpc idempotent
- Add `ignore_missing_env_vars` to `server verify`
- Wait 1,2,... seconds on OCI pull failure
- Make wasmtime allocator configurable
- *(cli)* Display the detail of an execution failure
- *(grpc)* Add `GenerateExecutionId` rpc
- Parse reason and detail of `ChildExecutionError`
- Move activity error details away from `reason`
- Do not ignore `post-return` trap in workflows

### Fixed

- Run `obelisk` using `cargo run` in `webui-bump.sh`
- *(sqlite)* Ignore expired locks in `get_pending`
- Use snake case in `JoinNextBlockingStrategy` serde

### Other

- Set up garnix
- Add `push-webui` workflow
- Optimize release build for size
- Bump `rustc` to 1.84
- Update the roadmap
- Replace `SKIP_WEBUI_BUILDER` with `RUN_TRUNK`
- Fix `ubuntu-24.04-install`
- Fix comparison when building `x86_64-unknown-linux-gnu`
- Log execution error details on `debug` level

## [0.11.0](https://github.com/obeli-sk/obelisk/compare/v0.10.0...v0.11.0) - 2025-01-09


### Fixed

- Build glibc artifact natively

## [0.10.0](https://github.com/obeli-sk/obelisk/compare/v0.8.0...v0.10.0) - 2025-01-08

### Added

- Render function links inside the WIT
- *(ui)* Highlight submittable functions in WIT
- *(ui)* Hide unrelated functions on the submit page
- *(ui)* Filter the WIT to required interfaces in the submit page
- *(ui)* Add syntax highlighting for WIT
- *(grpc)* Implement `GetWit`
- *(ui)* Render interfaces as a code block in `<ComponentListPage />`
- *(toml)* [**breaking**] Rename `api_listening_addr` to `api.listening_addr`
- *(toml)* [**breaking**] Rename `oci.wasm_directory` to `wasm_cache_directory`
- Hide webui config details behind `webui.listening_addr`
- Add `convert_core_module` to `component push`
- Add `convert_core_module` switch to workflows
- Transform Core Module to a Component in `inspect`
- Make the component builder publishable
- Add error detail to the `ExecutionFailure` message
- Add error detail to the `TemporarilyFailed` message
- Increase timeouts exponentially when limit is reached
- *(grpc)* Propagate `Unblock` reason
- *(ui)* Show submission and parameter parsing errors
- *(ui)* Type check parameters before submission

### Fixed

- *(ci)* Save the `blueprint.css` in `webui-builder`
- *(logging)* Skip ansi escape codes when logging to a file
- Explicitly convert from `ConfigIdType` to `grpc::ComopnentType`
- Make router match '/path/' with pattern '/path/*'
- Update `clippy.sh` after `cargo-component` removal
- Fix `null` deserialization into `WastValWithType`
- *(sqlite)* Fix broken attribute ordering in `JsonWrapper`
- *(ui)* Stop leaking connections in `<ExecutionStatus />`

### Other

- Move the `wasm-tools` fork declaration to the `patch section
- Revert "chore: release v0.9.0"
- Add `release-plz` to the dev shell
- Update the disclaimer
- Remove `blueprint.css` from git
- Update the readme
- Turn `EngineConfig` into a struct
- Fix clippy
- *(toml)* [**breaking**] Enable file logger with `enabled` flag
- *(toml)* [**breaking**] Enable stdout logger with `log.stdout.enabled`
- *(toml)* [**breaking**] Require `otlp.enabled`, bump dependencies
- *(grpc)* [**breaking**] Make parameter names mandatory
- Bump `wasmtime` to v28
- Upgrade dependencies
- Run `cargo update`
- Bump `Cargo.lock`
- Move all webui deps to the webui section
- Bump `wasm-tools` after PR merge
- Bump `flake.lock`
- Bump `wasm-tools` fork revision
- Bump fork of `wasm-tools` with the new `WitPrinter` API
- release v0.9.0
- Bump OCI reference of `webui`
- Rename `ConfigId` to `ComponentId`, `ConfigIdType` to `ComponentType`
- Rename `Webhook` to `WebhookEndpoint`
- Move the WIT manipulation to the server side
- *(ui)* Print `-submit` in `print_all`
- Readd `-nosim` suffix
- Bump the `webui` OCI reference
- Rename `ConfigIdType::WebhookWasm` to `WebhookEndpoint`
- Add `build.yml`
- *(grpc)* [**breaking**] Rename `WEBHOOK_WASM` to `WEBHOOK_ENDPOINT`
- Update the roadmap
- Switch to `WitPrinterExt`
- Show only types on nested interfaces
- *(ui)* Remove `yewprint-css`
- *(grpc)* [**breaking**] Rename `function` to `function_name`
- *(grpc)* [**breaking**] Rename `ConfigId` to `ComponentId`
- Bump `flake.lock`
- Extract roadmap from the readme
- *(toml)* [**breaking**] Rename `webhook_wasm` to `webhook_endpoint`
- Change the commented out `external` port
- Simplify the fibo webhook using `waki`
- Update the readme
- Determine architecture of the `macos-13` runner
- Change the the arm architecture for MacOS
- Add Mac OS 13 x64 to the list of supported platforms
- Rename macos artifacts for `cargo-binstall`
- Use `gnu-tar` instead of BSD `tar`
- Remove `jq` as it is already present
- Fix `protobuf` installation on MacOS
- Replace `grep -oP` with MacOS-compatible `jq`
- Add support for building on MacOS
- Mention `protoc` in the instructions
- Fix clippy
- *(toml)* Enable stdout logger by default
- *(toml)* Make `codegen_cache` enabled by default
- *(toml)* [**breaking**] Rename `webhook_component` to `webhook_wasm`
- Remove `wasm32-wasip1`
- Add `cargo-generate` to `flake.nix`
- Update `dev-deps.txt`
- Remove `tracing-chrome`
- Fix clippy
- Update `rustc` to 1.83
- Bump component versions in docker hub
- Stop using `cargo-component` in `webui-proxy`
- Remove `cargo-component`
- Switch workflows away from `cargo-component`
- Remove `cargo-component` from activities, webhooks
- Add `wasm32-wasip2` target
- Bump `wasmtime` to v27
- Add `WasmComponent.wit()`
- Fix missing delimiter
- Build test workflows without `cargo-component`
- Lower error to a warning on unsupported component elements
- *(test)* Simplify tests by extracting `new_activity_worker`

## [0.8.0](https://github.com/obeli-sk/obelisk/compare/v0.7.0...v0.8.0) - 2024-11-25

### Added

- [**breaking**] Remove `request_timeout` configuration from webhooks
- *(grpc)* Implement `ListResponses`
- *(ui)* Show time since scheduling in the execution detail page
- *(grpc)* [**breaking**] send `scheduled_at` in `FinishedStatus`
- *(grpc)* Send `scheduled_at` in `ExecutionSummary`
- *(sqlite)* Persist `t_state.schedule_at`, pass it in `ExecutionWithState`
- *(grpc)* [**breaking**] Remove `WitType.internal`
- *(ui)* Show parameter names in `<CreateEvent />`
- *(grpc)* [**breaking**] Allow sorting executions by creation date, execution ID
- *(sqlite)* [**breaking**] Add `t_state.created_at`
- *(grpc)* Implement `list_execution_events`
- *(grpc)* Add stub for `GetExecutionLog` rpc
- *(grpc)* Add definitions for execution history
- *(sqlite)* Implement `list_responses` with pagination
- *(db)* Add `DbConnection::get_execution_events`
- [**breaking**] Change format for derived `ExecutionId`

### Fixed

- *(grpc)* Fix version in `list_execution_events`
- *(sqlite)* Fix sql statement of `list_responses`

### Other

- Bump the webui OCI image
- *(sqlite)* [**breaking**] Rename `Intermittently...` to `Temporarily...`
- *(grpc)* [**breaking**] Rename `Intermittently...` to `Temporarily...`
- Bump the webui OCI image
- Update the documentation
- Run `cargo upgrade`
- Bump `flake.lock`
- Fix clippy
- Fix clippy
- *(concepts)* Implement `FromSql` and `ToSql` for `ExecutionId`
- Bump `flake.lock`
- *(grpc)* [**breaking**] Change `ListExecutions` pagination to date-based
- *(grpc)* Rename `ListExecutionEvents`
- Update the readme
- *(grpc)* [**breaking**] Rename `FunctionDetail`
- *(grpc)* [**breaking**] Introduce ` ResultDetail` message
- Make `get_finished_result` return `Ok(None)` on unfinished executions
- *(ui)* Build webui with `release_trunk` profile
- Bump `trunk` to v0.21.1
- Run `cargo upgrade`
- Rename `wait_for_pending`
- Fix clippy warnings
- *(concepts)* Change `append_batch`,`append_batch_respond_to_parent`
- *(concepts)* [**breaking**] Change signature of `append_batch_create_new_execution`
- *(db)* Rename `list_execution_events`
- Convert `Version(usize)` to `Version(u32)`
- *(concepts)* [**breaking**] Rename `ExecutionEventInner::IntermittentTimedOut`
- *(concepts)* [**breaking**] `ExecutionEventInner::IntermittentlyFailed`
- *(concepts)* [**breaking**] Rename `JoinNext.run_expires_at`
- Extract `SupportedFunctionReturnValue::FallibleResultErr`
- Rename `list_responses`
- *(sqlite)* [**breaking**] Introduce `t_join_set_response.id`
- *(sqlite)* Add index to `t_state.created_at`
- Remove `ExecutionIdW`
- *(sqlite)* Revert adding `t_ffqn`
- *(sqlite)* Add more stats to the dumped json
- update Cargo.toml dependencies
- Fix clippy

## [0.7.0](https://github.com/obeli-sk/obelisk/compare/v0.6.1...v0.7.0) - 2024-11-09

### Added

- *(ui)* Print status with chrono formatted dates
- Mark traps on workflows as permanent failures, allow overriding via `retry_on_trap`
- [**breaking**] Introduce `ListExecutions` RPC
- Add execution submit page
- Switch component list to `<ComponentTree />`
- Add `submittable` to `FunctionDetails` proto message
- Implement `webui-proxy`, enable it in the TOML
- Validate name of `http_server`
- Add `obelisk-webui`
- Introduce `FunctionExtension`
- *(wit)* [**breaking**] Remove `id` function from `join-set-id`
- Add execution id hierachy for workflows - `-submit` and direct call
- Add execution id hierarchy to direct calls from webhook

### Fixed

- *(grpc)* Send the finished result when requested at all times
- Sync `wasm-bindgen`,`wasm-bindgen-futures` with `wasm-bindgen-cli`
- [**breaking**] Disallow zero `retry_exp_backoff` for workflows
- Disallow submitting ext functions
- Filter out ext fns in `ComponentConfigRegistryRO`
- Return non-ext functions in `Worker::exported_functions`
- Panic when `increment` is called on the top level `ExecutionId`
- Check for multiple '.' separators when parsing FFQN
- *(sqlite)* Rollback wrong sleep when a pending execution is found
- Convert some `ValidationFailed` errors in sqlite to `panic!`
- Sleep until timeout in `subscribe_to_pending` on empty pending list
- Exclude state `BlockedByJoinSet` in sqlite's `get_pending`
- [**breaking**] Use snake_case for `TypeWrapper` serialization
- [**breaking**] Serialize `Enum` into string
- [**breaking**] Serialize unit-like variants as strings
- Serialize result variants into snake_case
- Fix `bindgen!` macro use for v26.0

### Other

- Add `hdrmetrics` to sqlite
- Bump webui
- Improve startup traces
- Update the readme
- *(db)* [**breaking**] Remove `topmost_parent`, add `scheduled_by`
- Fix a typo
- *(gRPC)* [**breaking**] Remove `execution_id` from `SubmitRequest`
- [**breaking**] Make `ExecutionId` hierarchical
- *(grpc)* [**breaking**] Rename pagination messages
- *(db)* [**breaking**] Remove `return_type` from `CreateRequest`, `t_state`
- *(ui)* Move the dev trunk build directory to `dist-dev`
- Increase default pagination size to 20
- [**breaking**] Merge `Scheduler` into `ExecutionRepository` service
- Add `send_finished_status` flag to `GetStatus`
- Simplify return type of `get_finished_result`
- Fix clippy issues
- Query `ListComponents` only once, sort components,ifcs,fns
- Bump `waki`
- Bump `oci-client`,`oci-wasm`
- Run `cargo upgrade`
- Remove `tailwindcss`
- Run `nix flake update`
- Bump `webui` version in TOML
- Bump `wasmtime` to v26.0
- Use `indexmap` for grouping fns by interfaces
- [**breaking**] Extract `ComponentType` in the protobuf schema
- Extract webui components to their own modules
- Add logging to `webui`
- Add `tailwindcss`
- Fix `wasm-bindgen` version based on flakes
- Track binarien version in `dev-deps`
- Add `trunk`,`wasm-bindgen` to dev-deps
- Add `webui-builder`
- Add `http://` prefix when starting http servers
- Remove CORS filter
- Remove unused `prost-build`
- Add and enable `tonic-web`
- Update the readme
- Bump `flake.lock`
- [**breaking**] Rename `max_inflight_instances` default to `unlimited`
- [**breaking**] Drop `default_` from `max_retries`,`retry_exp_backoff`
- Update the milestones
- Fix `release-3-upload-artifacts.yml`
- Fix clippy
- Return executions in a specific order in `list_executions`
- Use `can_be_retried_after` in `expired_timers_watcher`
- Fix clippy
- Fix clippy
- Add name to `tx_begin` and `tx_commit` spans
- *(db)* [**breaking**] Change index and query for `get_pending`
- *(db)* [**breaking**] Add `t_ffqn`
- *(sqlite)* Avoid looking up `ffqn` when possible in `update_state`
- *(sqlite)* Add index on `(id,variant)` of `t_execution_log`
- *(sqlite)* Add index on `(id,version)` of `t_execution_log`
- Make spans usable on debug level
- *(sqlite)* Tweak pragma settings
- Change level for a trace message
- *(sqlite)* [**breaking**] Add `state` column to `t_state`
- Do not bail out `lock_pending` if a row fails to lock
- Verify JSON representation
- Replace an `unwrap` with `expect`
- Fix clippy issues

## [0.6.1](https://github.com/obeli-sk/obelisk/compare/v0.6.0...v0.6.1) - 2024-10-19

### Other

- Rollback to a previous `flake.lock` to unblock musl build
- Use libc variant in `ubuntu-24.04-binstall`
- Disable `fail-fast`
- Make `latest` configurable in `release-5`
- Decouple yaml source from target ref for `release-3`
- Disable musl build
- Update the readme

## [0.6.0](https://github.com/obeli-sk/obelisk/compare/v0.5.0...v0.6.0) - 2024-10-18

### Added

- [**breaking**] Remove `default_max_retries` config for workflows
- Add retry config to workflows
- Remove retry override in workflows
- Remove retry override in webhooks
- [**breaking**] Add `closing` flag to `BlockedByJoinSet`
- [**breaking**] Limit webhook calls to direct and `-schedule`
- Add leeway to `TimersWatcherConfig`
- Allow configuring limits for `max_inflight_*`
- Allow disabling `retry_on_err` in activities
- [**breaking**] Add `result_kind` to `PendingStateFinished`
- [**breaking**] Track `config_id` in `Locked` state
- [**breaking**] Implement structured concurency for child executions

### Fixed

- Subject joinset closing to the execution timeout
- Fix serde of `PendingStateFinishedError`
- Set sqlite's `cache_size` to 10MB

### Other

- Change type of `join-set-id` to a `Resource`
- Update the readme
- Update version of `oci-wasm`
- Run `cargo upgrade`
- Fix clippy
- Bump rust to 1.82
- [**breaking**] Rename `non-determinism` to `nondeterminism`
- Remove `ImportableType`
- Update docs
- Add `sleep-activity-submit` for join set testing
- Add `server_verify` test
- Removev `ConfigStore`
- Update the milestones
- Extract `webhook` module
- Extract `activity` module
- Extract `workflow` module
- Change sqlite's `mmap_size`, `page_size`
- Set sqlite's `temp_store` to `MEMORY`
- Merge `ChildExecutionRequest`,`DelayRequest` into `DbUpdatedByWorker`
- [**breaking**] Use newtypes for `execution_id`,`join-set-id`
- Fix clippy
- Extract `WorkflowWorker::convert_result`
- Extract `ApplyError`
- Remove `FunctionMetadataNotFound`
- Extract `WorkflowWorker::race_func_with_timeout`
- Ignore post return fn errors in workflow worker
- Extract `WorkflowWorker::prepare_func`
- Extract `WorkflowWorker::call_func`
- Log `execution_id` upon processing the request
- Extract `get_called_function_metadata`
- Add `http_get_fallible_err`

## [0.5.0](https://github.com/obeli-sk/obelisk/compare/v0.4.0...v0.5.0) - 2024-10-11

### Added

- Filter out redundant pending state changes
- [**breaking**] Use `__` as separator in envvars overriding the TOML
- Do not require native TLS certs on HTTP
- Retry when an OCI registry returns an error
- [**breaking**] Rename table `wasm_activity` to `activity_wasm`
- [**breaking**] Remove abbreviations in `Duration`
- Change nanos-based `Duration` to a `Variant`
- [**breaking**] Expose execution id and execution errors in `-await-next`
- Expose webhooks via `component list`
- [**breaking**] Do not convert permanent timeouts to `Err`
- Implement Tuple de/serialization
- Implement Flags de/serialization
- Implement `Enum` de/serialization
- Implement Variant de-serialization

### Fixed

- Forwarding of std streams in `[[webhook_component]]` must be optional
- Do not block server shutdown with `get_status`
- Include activity settings in `config_id` computation
- Set `PendingAt` with `scheduled_at` set to `lock_expires_at`
- Verify version consistency in `t_state`

### Other

- Remove `expect(dead_code)` in `env_vars`
- Fix clippy
- Bump non-conflicting breaking dependencies
- Bump `flake.nix`
- Run `cargo update`
- Run `cargo upgrade`
- Warn on missing metadata digest
- [**breaking**] Replace `get` with `get_execution_event`
- Remove logging from fibo workflow
- Unify docker build target in `flake.nix`
- Update milestones
- Tweak `fibo_start_fiboas` to start `fiboa_concurrent`
- Update milestones
- Bump test components
- Update the project plan
- Add more specific logging on OCI pull failure
- Use `ConfigStore` solely for `ConfigId` computation
- Extract `ComponentConfigImportable`
- Rename `ImportableType`
- Rename `ComponentConfig`
- Replace `allow` with `expect`
- Rename `ImportType`
- Fix finished exec log discrepancy in mem db
- Fix clippy
- Fix clippy
- Use `ChildReturnValue` to avoid a db lookup
- [**breaking**] Remove details from `PermanentFailure`
- Format sources
- Fix a clippy warning
- Add index `idx_t_state_expired_timers`
- Fix clippy
- Update test snapshots
- Update test snapshots
- Move `execution_error_tuple` back to `wasm_tools`
- Use `ActivityConfig` in `ActivityWorker`

## [0.4.0](https://github.com/obeli-sk/obelisk/compare/v0.3.0...v0.4.0) - 2024-10-02

### Added

- Verify webhook imports
- Preinstantiate in `WorkflowWorkerLinked`
- Add `server verify`
- Allow `component list` filtering out the extensions
- Verify component imports during startup
- Compile webhook in parallel to other components
- [**breaking**] Reintroduce topmost parent
- Introduce business spans
- Add tracing ctx forwarding on the gRPC boundary
- Link scheduled execution to its origin
- Propagate trace ctx from server submit to executor
- [**breaking**] Replace `correlation_id` with `ExecutionMetadata`
- [**breaking**] Remove `recycle_instances` setting from activities
- Allow setting or forwarding envvars to activities, webhooks
- Add `server generate-config`
- Allow specifying TOML config path
- Allow forwarding std streams for activities
- Make std stream forwarding configurable
- Log webhook guest out,err to host's stderr
- Add `correlation_id` to gRPC definition, CLI switch
- [**breaking**] Change `topmost_parent_id` to `correlation_id`
- [**breaking**] Replace dynamic `schedule` with `-schedule` suffix for workflows and webhooks
- Show obelisk types in function signatures
- [**breaking**] Extract `types.wit`, use `duration` instead of millis
- Add logging support for activities
- Add logging capability to workflows and webhooks

### Fixed

- Fail on `start_webhooks` error
- Parse `obelisk.toml` only when starting the server
- Skip `wasi:` namespace from mocking in webhooks
- Verify activity imports in `new_with_config`
- Reenable epoch interruption in webhook components

### Other

- Use `StrVariant` in `ParameterType`, `ReturnType`
- Rename `ComponentType::ActivityWasm`
- Mock webhook imports based on available exports
- Extract `WebhookCompiled`
- Rename `ConfigIdType::ActivityWasm`
- Rename `ConfigIdType::WebhookWasm`
- Fix clippy
- Bump sleep workflow and activity
- Link workflows during verification
- Fix clippy
- Extract `ExIm::enrich_exports_with_extensions`
- Remove `Optional` from `Component.exports`
- Fix clippy
- Simplify `inspect_fns`
- Bump `example_workflow_http_get`
- Extract `ConfigIdType` from `ComponentType`
- Remove `Component` from `WebhookInstanceAndRoutes`
- Move workflow linking to `into_worker`
- Rename `ConfigVerified`
- Fix clippy
- Extract `WorkflowWorkerPre`, `ComponentConfigRegistryRO`
- Update the readme
- Introduce `ComponentConfigRegistryRO`
- Remove long lived `executor` span
- Unifiy SIGINT handling
- Rename `component_to_instance` to `prespawn_webhook_instance`
- Fix clippy
- Bump `shadow-rs`
- Bump `oci-wasm` to v0.0.5
- Fix deprecation warning in `tonic_build`
- Update milestones
- Run `cargo update`
- Run `cargo upgrade`
- Bump test components
- Filter out everything on an empty `level`
- Enable trace level for component logs by default
- Enable backtrace in test scripts
- Update the readme
- *(deps)* Bump cachix/install-nix-action from V28 to 29
- Replace `SpanKind` with a single span
- Add sleep workflow and activity to the default TOML
- Update the readme
- Add `config_id` to the `worker` span
- Add execution related attributes to `submit`
- Fix clippy
- Bump version of `example_workflow_fibo` in TOML
- Propagate context to child executions
- Extract `ServerInit`
- Revert `vscode-check.sh`
- Update the readme
- Use `DbPool` in `expired_timers_watcher`
- Move component parsing to `webhook_trigger::component_to_instance`
- Block output of `rustfmt` in `vscode-check.sh`
- Move retry override to `WebhookInstance`
- Make sure the generated bindings are formatted
- Regenerate bindings in `clippy.sh`
- Add span around webhook instantiation
- Bump `wasmtime` to version 25
- Require `rustc` version 1.81.0
- Bump flake.nix
- Lower spans to debug for tx functions
- Instrument engine initialization
- Make `write_codegen_config` async
- Fix parent span when calling `WebhookComponent::fetch_and_verify`
- Disable `server generate-config` for debug builds
- Replace `Clone` impl with `derivative`
- Move sqlite config to TOML
- [**breaking**] Move sqlite configuration into a new table
- Add `None` to toml's `StdOutput`
- Update the milestones
- Update readme and TOML configuration comments
- Use `StrVariant` in `ConfigId`
- Bump to latest `example_activity_http_get`
- Push the latest `example_webhook_fibo`
- Rename `ComponentType::WebhookComponent`
- Log failed tests on DEBUG level
- Add `name` to `ConfigId`
- [**breaking**] Rename `webhook` to `webhook_component`
- Update the readme
- Fix clippy
- [**breaking**] Switch `correlation_id` type to `StrVariant`
- Update comments in the TOML configuration file
- Fail curl on non-successful status codes
- Change `_private` marker to `non_exhaustive`
- Rename `ConfigId::dummy_activity()`
- Work around `Span::current` giving a disabled span
- Rename `Params::default()` to `Params::empty()`
- Remove `CancelRequest`
- [**breaking**] Serialize `ConfigId` to a string
- Rename `ConfigIdParseError`
- Fix clippy
- Fix clippy
- Print notification send status to logs
- Lower `sqlite_dao` spans by one level
- Lower level of `notify_` spans
- Connect transaction func to the current span directly
- Lower the span level for `conn_low_prio`
- Lower log level of the shutdown message
- Get rid of `expired_timers_watcher` span
- Update test snapshots
- Fix `exports_imports`
- Check that `-obelisk-ext` is not exported by a WASM component
- Move `SUFFIX_PKG_EXT` to `wasm_tools`
- Rename `component` to `wasmtime_component`
- Update snapshots
- Turn `instance.get_func` not found into a panic
- Turn `exported_ffqn_to_index` miss into a panic
- Log component messages with a separate target
- Introduce `component_logger`
- Fix `workflow_ctx`
- Fix clippy
- Set `millis` to u32 to work around integer overflow
- Fix renaming the local variable
- Rename local variable
- Use `InstancePre` in the activity worker
- Fix clippy
- Simplify `wasi:http` linking in `activity_worker`
- Remove `WebhookComponentInstantiationError`
- Fix `write_codegen_config` for madsim
- Fix clippy

## [0.3.0](https://github.com/obeli-sk/obelisk/compare/v0.2.2...v0.3.0) - 2024-09-13

### Added

- Add `--clean-codegen-cache` flag
- Implement request timeouts for webhook servers
- Implement `-submit`, `-await-next` extensions for webhooks
- Add host activities, `-submit` function handling to webhooks
- [**breaking**] Rename generated function suffix from `future` to `-submit`
- Expose webhooks as gRPC `Component` items
- Implement fetching webhooks from OCI registries
- [**breaking**] Stop exposing `file_path` of a `Component` over gRPC
- Spawn webhook triggers on http servers, configured via TOML
- Make retry overrides on workflows optional
- Implement route matching for the webhook trigger
- Allow `webhook_trigger` to submit child executions and await results
- Make `api_listening_addr` mandatory in the TOML configuration
- Display prettified JSON output of the execution result
- Remove `enabled` key from TOML config
- Handle Ctrl-C signal while downloading the images
- Allow cleaning db and caches with separate flags

### Fixed

- Fix a small race in `subscribe_to_pending`
- Add index on `t_state` for `lock_pending` performance
- Disable epoch interruption for webhooks temporarily
- Re-enable epoch interruption for activity engine
- Keep the epoch ticker for the whole server lifetime
- Do not allow retries on child workflows
- Make retry configuration specific for `wasm_activity` TOML table
- Configure rolling appender using its own properties
- Enable tls for OTEL endpoint
- Delete `-wal` and `-shm` files on `--clean`

### Other

- Merge pull request [#24](https://github.com/obeli-sk/obelisk/pull/24) from obeli-sk/dependabot/github_actions/cachix/install-nix-action-V28
- Add `build_webhook` to `cargo-component-builder`
- Update scripts and config
- Fix clippy issues
- Introduce priorities for sqlite commands
- Replace `async-sqlite` with a dedicated thread
- Make all test steps share the same settings to improve compile times
- Allow system thread for `wasmtime_cache`
- Fix tests for madsim
- Disable parallel execution in the "Populate the codegen cache" step
- Populate the codegen cache in a separate step
- Add `populate_codegen_cache` for activities,workflows,webhooks
- Disable parallel test execution
- Extract `RequestHandler`
- Update TOML configuration documentation
- Turn the epoch ticker from a task to a thread
- Improve test executor logging by (ab)using `config_id`
- Update fibo webhook to use `-submit`, `-await-next`
- Fix messages after `-submit` change
- Rename fibo workflow extension wit function to use `-submit` suffix
- Reorganize `test-programs` wit files
- Make tests write logs with level info and above
- Move `fibo-ext.wit` to `activity/wit/ext`
- Move fibo webhook to `testing/test-programs/fibo/webhook`
- Fix typo, clean up `component list` output
- Rename `ObeliskConfig` fields to plural
- Rename `Workflow` to `WorkflowToml`
- Rename `WasmActivityToml`
- Rename `ActivityConfigVerified`, `WasmActivityConfig`
- Rename `WorkflowConfigVerified`
- Rename `webhook_trigger::RetryConfig` to `RetryConfigOverride`
- Fix madsim tests
- Make `Component::exports` optional to accomodate for webhooks
- Extract `ExecConfigToml` from `ComponentCommon` to accomodate for webhooks
- Add `ConfigStore::WebhookV1`
- Add `ComponentType::Webhook`
- Rename `ComponentConfigHash` to `ConfigId`
- Extract `VerifiedConfig`
- Move webhook validation to `fetch_and_verify_all`
- Rename `ComponentType::WasmWorkflow` to `Workflow`
- Add `git-cliff` to dev shell dependencies
- Check the whole workspace with clippy
- Fix clippy attributes on generated code
- Swap clippy `allow`ances to `expect`ations
- Bump `dev-deps.txt`
- Bump `rustc` to 1.81
- Fix clippy issues
- Use error 503 when number of core instances is exceeded
- Use params instead of named wildcards in the webhook routing test
- Fix clippy issues
- Rename `replay_or_interrupt` to `apply`
- Update the milestones
- Add a hardcoded `call_imported_fn` to `webhook_trigger`
- Rename http trigger to webhook trigger
- Add builder for `trigger-http-simple`
- Remove dead `patch` test activity and workflow
- Reorganize fibo's wit files
- Removev `http_trigger` server test
- Fix clippy issues
- Update milestones
- Add incomplete `http_trigger`  with hardcoded configuration
- Enable all default features of `wasmtime`
- Update docs, todos, draft webhook configuration
- Update milestones
- Sync `wit-bindgen-rt` version with current `cargo-component`
- Add `trigger-http-simple`
- Add `wasmtime` to the dev shell
- Update the milestones
- Add license to `wasi_http`
- Patch `with_printer`
- Update `wit_printer` from upstream
- Bump `wasmtime` to version 24.0.0
- Bump `derive_more`
- Add `cargo-edit`
- Run `cargo upgrade`
- Bump `Cargo.lock`
- Bump `flake.lock`
- Update the milestones
- Update the readme
- Simplify printing of the execution result
- Update TOML documentation
- Serialize `JoinNextBlockingStrategy` using snake case
- Update documentation of the TOML configuration file
- Remove deprecated `component_detector`
- Move sha256 checksum to the `obeli-sk` package
- Fix madsim, clippy issues
- Update the readme
- Extract `prespawn_all` to separate compilation from spawing executors
- Use `Arc<dyn Worker>` in `executor` instead of generic `W`
- Make `[otlp]` enabled if the table is present
- Do not repeat sha256sum for files stored in cache on every startup
- Start components in parallel if possible
- Remove double file hash calculation if the hash is correct
- Add more spans around startup
- Update milestones
- Trace `append`, extract `append_batch_create_new_execution_inner`
- Lock `ffqn_to_pending_subscription` only once when batching
- Move `join_all` to `select!`
- Warn on component name clashes
- Allow passing nested configs via envvars separated by `_`
- Replace `JoinSet` with `join_all` due to a madsim limitation
- Allow pulling the images in parallel
- Extract `Digest` from `ContentDigest`
- Track metadata mapping using separate files
- Remove `content_digest` from `ComponentCommon`
- Fetch and verify components before spawning
- Update the readme
- Add `component_name` and `config_id` to `toml`

## [0.2.2](https://github.com/obeli-sk/obelisk/compare/v0.2.1...v0.2.2) - 2024-08-24

### Added
- Track the topmost parent
- Add rolling file appender configurable via TOML
- Configure OTLP level using `EnvFilter` directive in TOML
- Configure stdout logger via TOML
- Make OTLP configurable via toml
- Make Wasmtime's pooling allocator configurable via toml
- Make `OTEL_ENDPOINT` configurable via envvar
- Allow pushing WASM files to OCI registries

### Fixed
- Print the metadata digest on OCI push
- Verify that pulled image's digest matches specified

### Other
- Remove rust cache
- Run `nix flake update`
- Run `cargo update`
- Fix clippy warnings
- Update the readme
- Rename `component_name` clashing with span name
- Fix clippy warnings
- Rename `[activity]` to `[[wasm_activity]]`
- Rename `fetch_and_verify`
- Rename `SupportedFunctionResult` to `SupportedFunctionReturnValue`
- Calculate config store id from `Hash`
- Shorten display of config id
- Rename `obtain_wasm_from_oci` to `pull_to_cache_dir`
- Inform when the gRPC sever is ready
- Make `otlp` feature default
- Make OTLP disabled by default
- Update `obelisk.toml`
- Extract config dumps into separate log fields
- Fix clippy issues
- Rename TOML table `otlp_config` to `otlp`
- Extract module `config_holder`
- Avoid a subsequent `get` in `get_status`
- Instrument `GetStatus`, `Submit`
- Fix clippy warnings
- Move `to_channel` to `grpc_util`
- Rename feature `otel` to `otlp`
- Make `tracing-chrome` optional
- Refactor `load_components` into `spawn_tasks`
- Shutdown otel provider in `Guard::drop`
- Make OTEL optional
- Remove failing version `tracing-opentelemetry=0.25`
- Lower level of some spans
- Record executor id, name, config id in spans
- Remove `ExecutorId` from `obelisk.proto`
- Move exec spans to top level so that the init span finishes on startup
- Downgrade, add `shutdown_tracer_provider`
- Integrate with latest tracing-otlp - missing root spans on shutdown
- Update the readme
- Update the readme
- Move test component images to `getobelisk`
- Remove `wkg`
- Tag docker image with version-os to allow sorting
- Fix version tagging
- Allow specifying target ref in `release-5-push-docker-image`
- Quiet down wget
- Log commands to stdout

## [0.2.1](https://github.com/obeli-sk/obelisk/compare/v0.2.0...v0.2.1) - 2024-08-11

### Added
- Enable TLS on the client

### Other
- Tag docker images with current version
- Report correct name when printing the version

## [0.2.0](https://github.com/obeli-sk/obelisk/compare/v0.1.15...v0.2.0) - 2024-08-11

### Added
- [**breaking**] Use `server run` instead of `daemon serve`
- Make client url configurable, separate client commands

### Other
- Push alpine-based image
- Fix github token in `release-2-plz-release`
- Push the image to docker hub

## [0.1.15](https://github.com/obeli-sk/obelisk/compare/v0.1.14...v0.1.15) - 2024-08-10

### Added
- Support `api_listening_addr`

### Other
- Extract binary from tgz outside of docker build
- Rename workflows
- Build ubuntu-based docker image
- Rename release workflows
- Update `dev-deps.txt`
- Update `flake.lock`
- Check dev-deps.txt in the `check` workflow
- Add and run `dev-deps.sh`
- Add docs and unify bash settings for scripts
- Add `release-verify`

## [0.1.14](https://github.com/obeli-sk/obelisk/compare/v0.1.13...v0.1.14) - 2024-08-09

### Other
- Trigger `release-artifacts` on release
- Build the release artifacts on ubuntu 20.04

## [0.1.13](https://github.com/obeli-sk/obelisk/compare/v0.1.12...v0.1.13) - 2024-08-09

### Other
- Fix elf interpreter in `obelisk-patch-for-generic-linux`
- Update the readme
- Add `tar.gz` suffix to binary artifacts

## [0.1.12](https://github.com/obeli-sk/obelisk/compare/v0.1.11...v0.1.12) - 2024-08-08

### Other
- update Cargo.toml dependencies

## [0.1.11](https://github.com/obeli-sk/obelisk/compare/v0.1.10...v0.1.11) - 2024-08-07

### Added
- Make `non_blocking_event_batching` configurable
- Enable codegen cache by default
- Expose functions and components via gRPC
- Show function return type in WIT format
- Show parameter types in WIT format
- Add `--follow` flag to `schedule` and `get`
- Show pending state stream when submitting new execution
- Add `StreamStatus` rpc
- Type check `params` in `submit` of the execution
- Enable codegen cache
- Make `oci.wasm_directory` configurable

### Fixed
- Add index on `t_join_set_response`
- Allow partial configuration of `CodegenCache`, `ExecConfig`
- Return `NotFound` in `SqlitePool::get`
- Check params and types cardinality in `Params::as_vals`

### Other
- Tweak logs of intermittent failures
- Rename `execution schedule` to `execution submit`
- Fix snapshots broken by adding `fibo-start-fiboas`
- Add `machine_readable_logs` switch
- Rename `executor` command to `daemon`
- Update the readme
- Add seconds handling to `jq-analyze-span-close.sh`
- Remove `first_locked_at` from the `Finished` message
- Add `fibo-start-fiboas` to test workflow hierarchies
- Replace db-backed component registry with `ComponentConfigRegistry`
- Replace panics with Err in `enrich_function_params`
- Add `scripts` folder
- Fix clippy issues
- Merge `StreamStatus` into `GetStatus`
- Update the readme
- Rename `location.file` to `location.path` in toml
- Measure WASM parsing time
- Simplify `VecVisitor`
- Use `Params::deserialize` instead of `Params::from_json_value`
- Represent Params as `Vec<Value>` instead of `Value`
- Switch execution submission to gRPC
- Update the readme
- Extract `Engines::configure_common`
- Update readme
- Fix a clippy issue
- Remove single thread constraint from `nextest`
- Speed up test by replacing `wit_parser` with a dummy fn_registry
- Move `write_codegen_config` to `wasm-workers`
- Add allowance for `cfg(madsim)`
- Bump Rust to 1.80
- Put the sqlite file to the data dir by default
- Remove unused import
- Extract `ComponentLocation::obtain_wasm`
- Simplify sqlite initialization
- Remove unused clippy allowances
- Move `indexmap` feature selection to workspace deps

## [0.1.10](https://github.com/obeli-sk/obelisk/compare/v0.1.9...v0.1.10) - 2024-07-23

### Other
- update Cargo.toml dependencies

## [0.1.9](https://github.com/obeli-sk/obelisk/compare/v0.1.8...v0.1.9) - 2024-07-23

### Other
- update Cargo.toml dependencies
- Lookup exported function indexes upfront
- Bump `wasmtime` to 23.0.1

## [0.1.8](https://github.com/obeli-sk/obelisk/compare/v0.1.7...v0.1.8) - 2024-07-22

### Added
- Put the database to the user's data directory
- Clean wasm cache using `--clean` switch
- Pull wasm files from an OCI registry
- Make pooling allocator configurable via envvars

### Fixed
- Specify `wasm-pkg-common-0.4.1` hash in `flake.nix`
- Use `wasm32-wasip1` when building activities
- Drop all futures after `select!`
- Create the workdir in the docker image
- Do not deactivate component on instantiation error

### Other
- Fix madsim test
- Fix clippy issues
- Add section about building the docker image
- Unify `wasm-pkg-common` revision between cargo and nix
- Improve configuration file logging
- Read `max_retries` from db when submitting
- Update readme
- Improve instrumentation for `expired_timers_watcher`
- Move cache dir creation to `server`
- Simplify `ExecTask::new`
- Add parent span to `ExecutorTaskHandle`
- Compact log messages, putting span fields at the end
- Move back `wkg` to `packages` to improve `nix develop` build time
- Switch to `wasm32-wasip1` to satisfy `cargo-component` v0.14.0
- Fix a clippy issue
- Bump dependencies
- Switch to `bytecodealliance/wasm-pkg-tools`
- Bump `flake.nix`
- Bump `Cargo.lock`
- Fix clippy issues
- Reenable submitting executions from CLI
- Remove config watcher
- Disable old components on startup
- Enable configured components on startup
- Replace `ConfigId` and `ComponentId` with `ComponentConfigHash`
- Readd component persistence to sqlite
- Cache the oci metadata fetch into a json file
- Clean up unused dependencies in `flake.nix`
- Add more workflow configuration settings
- Add config support for `ExecConfig`
- Use snake_case for configuration keys
- Filter components by `enabled`
- Update the readme
- Spawn executors for components without refresh
- Remove unnecessary pinning in `activity_worker`
- Merge loading and watching into `load_config_watch_changes`
- Add support for `obelisk.toml` live reload
- Fix madsim tests
- Introduce `FunctionRegistry`, remove `component_*` from `storage`
- Bump revision of `wasm-pkg-tools`
- Add `ComponentLocation`
- Sort component list by update date, generalize `component_toggle`
- Compute the sha256 digest using `wasm-pkg-common`
- Introduce `ComponentToggle`
- Rename component's `file_name` to `name`
- Remove unused Dockerfile
- Add `wkg` build to nix
- Increase timeout to 40s
- Show component compilation times
- Test with a single thread to get more accurate durations
- Add `http_get_simple`
- Show exported function types in `component inspect`
- Lower connection timeout in http activity to pass CI
- Remove `wasm` feature, supress clippy warnings
- Simplify http testing wit signatures
- Switch http test activity client to `waki`
- Update the readme
- Add docker image containing `/bin/sh`
- Auto-detect whether to use pooling allocator
- Update the readme
- Extract `engines`
- Update the readme
- Fix clippy issues
- Bump Wasmtime to 22.0.0
- Dynamically determine instance allocation strategy
- Add `/bin/obelisk` symlink, set workdir to `/data`
- Build static executable with musl for docker image
- Build docker image with nix
- Add `Dockerfile`
- Improve build times by disabling debug info
- Simplify `lock_pending` error reporting in `executor`
- Add `component_id` to `CreateRequest`
- Detect workflows based on interface fqn
- Add `cargo-binstall` to the nix shell
- Fix a typo
- Bump rust to 1.79
- Disable test check in flake package
- Update readme
- Add flake package
- Clean up Cargo.toml after removing cargo-dist
- Replace madsim patch with new upstream version
- Delete the `cargo-dist` based workflow
- update Cargo.toml dependencies

## [0.1.7](https://github.com/obeli-sk/obeli-sk/compare/v0.1.6...v0.1.7) - 2024-06-13

### Other
- Add binstall metadata

## [0.1.6](https://github.com/obeli-sk/obeli-sk/compare/v0.1.5...v0.1.6) - 2024-06-13

### Other
- Use fine-grained token to create the GH release

## [0.1.5](https://github.com/obeli-sk/obeli-sk/compare/v0.1.4...v0.1.5) - 2024-06-13

### Other
- Switch `release-artifacts` trigger to `released`

## [0.1.4](https://github.com/obeli-sk/obeli-sk/compare/v0.1.3...v0.1.4) - 2024-06-13

### Other
- Add `publish-artifacts.yml`

## [0.1.3](https://github.com/obeli-sk/obeli-sk/compare/v0.1.2...v0.1.3) - 2024-06-12

### Other
- Remove tag creation from `release.yml`
- Fix dependencies for release
- Add `--allow-dirty` to `cargo dist`

## [0.1.2](https://github.com/obeli-sk/obeli-sk/compare/v0.1.1...v0.1.2) - 2024-06-12

### Other
- Pass tag to `cargo dist`
- Remove `debug-assertions` from release profile
- Pass tag to checkout steps of `release.yml`
- Add cargo-dist
- Run `nix flake update`

## [0.1.1](https://github.com/obeli-sk/obeli-sk/releases/tag/obeli-sk-v0.1.1) - 2024-06-11

### Other
- Switch to published `async-sqlite` fork

## [0.1.0](https://github.com/obeli-sk/obeli-sk/releases/tag/obeli-sk-v0.1.0) - 2024-06-11
Initial release - yanked
