chore: release v0.3.0 #4

Merged
tqwewe merged 1 commit from release-plz-2026-09-06T18-04-25Z into main 2026-09-08 22:13:36 +10:00
Owner

🤖 New release

  • hekla: 0.2.0 -> 0.3.0 (⚠ API breaking changes)

⚠ hekla breaking changes

--- failure constructible_struct_adds_field: struct exhaustively constructible through public API adds field ---

Description:
A pub struct that could be exhaustively constructed with a literal using only public API has a new pub field, breaking existing exhaustive literals.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field Surface.all_command_names in /tmp/.tmpDb7YWZ/hostexecutor/src/openapi.rs:56
  field HeklaHost.secrets in /tmp/.tmpDb7YWZ/hostexecutor/src/heklang_host.rs:183
  field Skipped.collapsed in /tmp/.tmpDb7YWZ/hostexecutor/src/verify.rs:110
  field Coverage.no_secret in /tmp/.tmpDb7YWZ/hostexecutor/src/plan.rs:251
  field Plan.secrets in /tmp/.tmpDb7YWZ/hostexecutor/src/plan.rs:312
  field Config.secrets in /tmp/.tmpDb7YWZ/hostexecutor/src/config.rs:41

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/inherent_method_missing.ron

Failed in:
  LaneState::already_done, previously in file /tmp/.tmpc68GEM/hekla/src/lanes.rs:120

--- failure method_parameter_count_changed: pub method parameter count changed ---

Description:
A publicly-visible method now takes a different number of parameters, not counting the receiver (self) parameter.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/method_parameter_count_changed.ron

Failed in:
  hekla::opdb::OpDb::complete_invocation takes 3 parameters in /tmp/.tmpc68GEM/hekla/src/opdb.rs:219, but now takes 4 parameters in /tmp/.tmpDb7YWZ/hostexecutor/src/opdb.rs:226
  hekla::opdb::OpDb::skip_invocation takes 3 parameters in /tmp/.tmpc68GEM/hekla/src/opdb.rs:242, but now takes 4 parameters in /tmp/.tmpDb7YWZ/hostexecutor/src/opdb.rs:260
  hekla::lanes::LaneState::resuming takes 2 parameters in /tmp/.tmpc68GEM/hekla/src/lanes.rs:92, but now takes 4 parameters in /tmp/.tmpDb7YWZ/hostexecutor/src/lanes.rs:179
  hekla::lanes::LaneState::admit takes 2 parameters in /tmp/.tmpc68GEM/hekla/src/lanes.rs:126, but now takes 4 parameters in /tmp/.tmpDb7YWZ/hostexecutor/src/lanes.rs:223

--- failure method_receiver_ref_became_mut: method receiver changed from immutable to mutable reference ---

Description:
A method's receiver changed from an immutable reference to a mutable one.
        ref: https://doc.rust-lang.org/reference/items/associated-items.html#methods
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/method_receiver_ref_became_mut.ron

Failed in:
  hekla::lanes::LaneState::head now takes &mut Self, not &Self, in /tmp/.tmpDb7YWZ/hostexecutor/src/lanes.rs:388
Changelog

0.3.0 - 2026-09-08

Added

  • [breaking] a project declares the deployment credentials it needs, and no surface ever shows one
  • (ui) the console runs a command, and /admin/commands describes every one
  • (ui) the console browses a projector's rows, and a row links back to the events that built it
  • [breaking] an on latest arm runs once per key per batch, and its invocation records the range it folded

Fixed

  • (ui) the declarations table keeps its columns, a long effect error clips, and a count reads singular at one

Other

  • two private items are named rather than linked, so rustdoc denies nothing
  • (projector) a completed rebuild logs how long it took

Added

  • a project declares the deployment credentials it needs with secret NAME, and hekla resolves each
    from [secrets] in hekla.toml ({ env = "..." } or { file = "..." }) or from
    HEKLA_SECRET_<NAME>. hekla serve refuses to start when a required one is unset, naming every
    missing one at once
  • hekla secrets reports every declared credential, where this machine reads it from, and a short
    fingerprint, and exits non-zero when a required one is unset, so it works as a pre-deploy gate
  • hekla plan reports the same, always present in --json, and --replay counts invocations it
    could not replay because an effect reads a credential this machine has not set
  • /admin/system and /admin/schema list the declared credentials beside the keystore: a name, a
    source and a fingerprint, never a value
  • hekla check warns about a declared credential nothing reads, and about a [secrets] entry naming
    no declaration. It never reads the environment, so it stays a CI gate
  • an on latest arm runs once per key per dispatch batch, at the newest matching position in it,
    and the surviving invocation records the range it folded
  • /admin/effects/{name} reports latest_collapsed, the positions folded into another invocation
    since this process started

Changed

  • [breaking] an effect arm declaring on latest loads and runs, where the previous release
    refused it at load rather than running it as on
  • an effect's in-flight cap counts units of work rather than positions, so a lane's whole backlog
    collapses to one invocation however long it is
  • schema v9 adds effect_invocation.collapsed_from; rows written before it read back as null, which
    is the same answer as an invocation that folded nothing
  • a transport failure's message now names a credential rather than spelling it. ureq writes the url
    it was given into its own error text, and hekla concatenates that onto the wedge message, so a
    webhook whose whole address is the credential used to reach /status, /admin and the logs on the
    first DNS failure
  • heklang 0.5.0


This PR was generated with release-plz.

## 🤖 New release * `hekla`: 0.2.0 -> 0.3.0 (⚠ API breaking changes) ### ⚠ `hekla` breaking changes ```text --- failure constructible_struct_adds_field: struct exhaustively constructible through public API adds field --- Description: A pub struct that could be exhaustively constructed with a literal using only public API has a new pub field, breaking existing exhaustive literals. ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/constructible_struct_adds_field.ron Failed in: field Surface.all_command_names in /tmp/.tmpDb7YWZ/hostexecutor/src/openapi.rs:56 field HeklaHost.secrets in /tmp/.tmpDb7YWZ/hostexecutor/src/heklang_host.rs:183 field Skipped.collapsed in /tmp/.tmpDb7YWZ/hostexecutor/src/verify.rs:110 field Coverage.no_secret in /tmp/.tmpDb7YWZ/hostexecutor/src/plan.rs:251 field Plan.secrets in /tmp/.tmpDb7YWZ/hostexecutor/src/plan.rs:312 field Config.secrets in /tmp/.tmpDb7YWZ/hostexecutor/src/config.rs:41 --- failure inherent_method_missing: pub method removed or renamed --- Description: A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/inherent_method_missing.ron Failed in: LaneState::already_done, previously in file /tmp/.tmpc68GEM/hekla/src/lanes.rs:120 --- failure method_parameter_count_changed: pub method parameter count changed --- Description: A publicly-visible method now takes a different number of parameters, not counting the receiver (self) parameter. ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/method_parameter_count_changed.ron Failed in: hekla::opdb::OpDb::complete_invocation takes 3 parameters in /tmp/.tmpc68GEM/hekla/src/opdb.rs:219, but now takes 4 parameters in /tmp/.tmpDb7YWZ/hostexecutor/src/opdb.rs:226 hekla::opdb::OpDb::skip_invocation takes 3 parameters in /tmp/.tmpc68GEM/hekla/src/opdb.rs:242, but now takes 4 parameters in /tmp/.tmpDb7YWZ/hostexecutor/src/opdb.rs:260 hekla::lanes::LaneState::resuming takes 2 parameters in /tmp/.tmpc68GEM/hekla/src/lanes.rs:92, but now takes 4 parameters in /tmp/.tmpDb7YWZ/hostexecutor/src/lanes.rs:179 hekla::lanes::LaneState::admit takes 2 parameters in /tmp/.tmpc68GEM/hekla/src/lanes.rs:126, but now takes 4 parameters in /tmp/.tmpDb7YWZ/hostexecutor/src/lanes.rs:223 --- failure method_receiver_ref_became_mut: method receiver changed from immutable to mutable reference --- Description: A method's receiver changed from an immutable reference to a mutable one. ref: https://doc.rust-lang.org/reference/items/associated-items.html#methods impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/method_receiver_ref_became_mut.ron Failed in: hekla::lanes::LaneState::head now takes &mut Self, not &Self, in /tmp/.tmpDb7YWZ/hostexecutor/src/lanes.rs:388 ``` <details><summary><i><b>Changelog</b></i></summary><p> <blockquote> ## [0.3.0](https://git.tqwewe.com/tephra/hekla/compare/v0.2.0...v0.3.0) - 2026-09-08 ### Added - [**breaking**] a project declares the deployment credentials it needs, and no surface ever shows one - *(ui)* the console runs a command, and /admin/commands describes every one - *(ui)* the console browses a projector's rows, and a row links back to the events that built it - [**breaking**] an on latest arm runs once per key per batch, and its invocation records the range it folded ### Fixed - *(ui)* the declarations table keeps its columns, a long effect error clips, and a count reads singular at one ### Other - two private items are named rather than linked, so rustdoc denies nothing - *(projector)* a completed rebuild logs how long it took ### Added - a project declares the deployment credentials it needs with `secret NAME`, and hekla resolves each from `[secrets]` in `hekla.toml` (`{ env = "..." }` or `{ file = "..." }`) or from `HEKLA_SECRET_<NAME>`. `hekla serve` refuses to start when a required one is unset, naming every missing one at once - `hekla secrets` reports every declared credential, where this machine reads it from, and a short fingerprint, and exits non-zero when a required one is unset, so it works as a pre-deploy gate - `hekla plan` reports the same, always present in `--json`, and `--replay` counts invocations it could not replay because an effect reads a credential this machine has not set - `/admin/system` and `/admin/schema` list the declared credentials beside the keystore: a name, a source and a fingerprint, never a value - `hekla check` warns about a declared credential nothing reads, and about a `[secrets]` entry naming no declaration. It never reads the environment, so it stays a CI gate - an `on latest` arm runs once per key per dispatch batch, at the newest matching position in it, and the surviving invocation records the range it folded - `/admin/effects/{name}` reports `latest_collapsed`, the positions folded into another invocation since this process started ### Changed - [**breaking**] an effect arm declaring `on latest` loads and runs, where the previous release refused it at load rather than running it as `on` - an effect's in-flight cap counts units of work rather than positions, so a lane's whole backlog collapses to one invocation however long it is - schema v9 adds `effect_invocation.collapsed_from`; rows written before it read back as null, which is the same answer as an invocation that folded nothing - a transport failure's message now names a credential rather than spelling it. `ureq` writes the url it was given into its own error text, and hekla concatenates that onto the wedge message, so a webhook whose whole address is the credential used to reach `/status`, `/admin` and the logs on the first DNS failure - heklang 0.5.0 </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/).
chore: release v0.3.0
All checks were successful
ci / ci (pull_request) Successful in 1m46s
ci / msrv (pull_request) Successful in 13s
88394c8926
Signed-off-by: release-plz <dev@tqwewe.com>
tqwewe force-pushed release-plz-2026-09-06T18-04-25Z from 88394c8926
All checks were successful
ci / ci (pull_request) Successful in 1m46s
ci / msrv (pull_request) Successful in 13s
to d590407403
Some checks failed
ci / ci (pull_request) Failing after 2m10s
ci / msrv (pull_request) Successful in 14s
2026-09-08 19:57:34 +10:00
Compare
tqwewe force-pushed release-plz-2026-09-06T18-04-25Z from d590407403
Some checks failed
ci / ci (pull_request) Failing after 2m10s
ci / msrv (pull_request) Successful in 14s
to 6c7d165215
All checks were successful
ci / ci (pull_request) Successful in 1m59s
ci / msrv (pull_request) Successful in 14s
2026-09-08 20:04:11 +10:00
Compare
tqwewe merged commit a5a88de046 into main 2026-09-08 22:13:36 +10:00
tqwewe deleted branch release-plz-2026-09-06T18-04-25Z 2026-09-08 22:13:36 +10:00
tqwewe referenced this pull request from a commit 2026-09-08 22:13:37 +10:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
tephra/hekla!4
No description provided.