Skip to content

chore(release): v0.12.4 - #207

Merged
oscarvalenzuelab merged 1 commit into
mainfrom
chore/release-0-12-4
Oct 18, 2026
Merged

oscarvalenzuelab merged 1 commit into
mainfrom
chore/release-0-12-4

Conversation

@oscarvalenzuelab

Copy link
Copy Markdown
Collaborator

Bump and changelog only. The tag and the release are not cut here —
publish.yml fires on release: published and ships to PyPI by itself, so that
step is outward-facing and is Oscar's.

main already carried version = "0.12.3" from #203 and v0.12.3 was never
tagged
, so nothing has shipped since v0.12.2 — which is what the daemons on
alkaturbo are running. This is the first release that would reach a running
daemon with any of it, so the changelog entry carries 0.12.3's content as well.

What is in it beyond 0.12.3

#206, closes #204. Three defects on the dispatch failure path, with one
symptom in common: the only evidence was an absent message, and an absent
message is indistinguishable from an uneventful day.

  • The dev lane posted "a PR will be opened for review" before the worker
    started and never returned to the issue when the worker exited non-zero, so
    that sentence stood on the beta tester's own ticket for eighteen hours.
  • 163 consecutive failed dispatches over two days told nobody, while both
    systemd units stayed active (running).
  • sessions.claude_exit_code was never written on the failure path and no
    worker output was retained, so the only durable evidence of why 163
    dispatches failed was that each took about two seconds.

A fourth was found while wiring the second: failure_text was imported inside
if is_task: and called in the shared failure branch, so the ❌ Failed on #N
message could never be sent for a dev issue — the lane the beta tester's
ticket was dispatched on.

Schema and config

Additive and defaulted, so no operator edit is needed:

  • sessions.output_tail — a scrubbed, capped tail of the worker's final output.
  • a new one-row dispatch_health table.
  • an alerts block (alerts.enabled, alerts.consecutive_dispatch_failures,
    default 3).

The migration was run against a copy of the live database — the real schema
with 3,730 sessions rows: the columns are added, no rows are lost, reopening
is a no-op, and a second connection can still write afterwards, which is the
check that matters because the poller and the bridge both open state.db. The
live config loads unchanged, 86 repos, with alerts taking its defaults.

Measured

uv run --extra dev pytest tests/ — 1316 passed, 0 skipped, on 3578268,
run from this worktree on alkaturbo against a clean tree. #206 carries the
review trail: five rounds (three warm, one cold reviewer, one verify), a
44-mutation sweep all red twice, and the known limits.

Deploy, after the release

uv tool install --force --reinstall --no-cache "ctrlrelay==0.12.4"
systemctl --user restart ctrlrelay-bridge ctrlrelay-poller

--no-cache is not optional — --force alone installs stale cached code and
reports success. Both daemons share state.db, so restart both.

Carries 0.12.3's entries as well. v0.12.3 was never tagged, so nothing
has shipped since v0.12.2 -- which is what the daemons on alkaturbo are
running -- and this is the first release that would reach a running
daemon with any of it.

What is in it beyond 0.12.3:

- #204 the dev lane posted "a PR will be opened for review" before the
  worker started and never returned to the issue when the worker exited
  non-zero, so that sentence stood on a beta tester's own ticket for
  eighteen hours; 163 consecutive failed dispatches over two days told
  nobody while both units stayed active (running); and the exit code and
  the worker's output were both discarded, so the only durable evidence
  of why they failed was that each took about two seconds.

Schema and config additions are additive and defaulted -- sessions
gains output_tail, there is a new dispatch_health table, and an alerts
block takes its defaults -- so no operator edit is needed.

Bump and changelog only. The tag and the release are not cut here:
publish.yml fires on release:published and ships to PyPI by itself, so
that step is outward-facing and is Oscar's.
@oscarvalenzuelab
oscarvalenzuelab merged commit 826579b into main Oct 18, 2026
3 checks passed
@oscarvalenzuelab
oscarvalenzuelab deleted the chore/release-0-12-4 branch October 18, 2026 23:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

A dispatch that dies leaves its claim comment standing, and 163 consecutive failures raised no alert

1 participant