Releases: misospace/dispatch
Release list
v0.5.25
v0.5.24
v0.5.23
pr-fix pipeline: see conflicts, and see real CI errors
- Detect merge conflicts in the scheduled sync (#600). The conflict-fix path existed but never fired — the sync read mergeability from the PR list endpoint, which GitHub doesn't populate. Now it fetches per-PR merge state, so conflicting bot PRs enqueue for a rebase instead of sitting forever.
- Give the coder the real CI error (#601). Failing-check feedback was a contentless "check concluded failure" (these CI jobs publish no check-run summary), so coders fixed blind and exhausted their attempts. Dispatch now fetches a bounded excerpt of the failing job log server-side and includes it (plus the log URL) in the feedback.
Requires dispatch's GitHub App to have Actions: read for the log excerpt (degrades to reason + log URL otherwise).
v0.5.22
v0.5.21
Fixes
- pr-fix now auto-handles CI-failing PRs. Failing CI checks route to the actionable lane (
coder-revision) instead of being parked as needs-human, and a summary-less check no longer misclassifies (#586). With 0.5.20's #579 (sync now detects failing checks), CI-failing foreman PRs finally get an automatic fix pass.
CI
- Trivy scan surfaces only actionable alerts (#585).
v0.5.20
Loop reliability fixes
- pr-fix now detects failing CI on bot PRs. The check-runs query used an invalid
status=end, so CI failures were never seen and never enqueued for an auto-fix pass (#579). - Groomer guarantees claimable ready issues. Ready issues now always carry
status/ready(#575/#572) and persistcurrentLane(#563), so groomed work is actually claimable instead of stranded. GET /api/issueshonors thestatusquery param instead of returning all issues (#576).- pr-fix queue surfaces BLOCKED / needs-human items on the PR and the board (#580).
Codebase simplification & hardening
- Dedupe, dead-code removal, and policy unification across the codebase (#581).
- Audit fixes: token race, renovate filters, per-instance rate limiting, groomer null-drift, and added test coverage (#582).
- Hosted groomer LLM config validated at load (#569); groomer comments neutralize @-mentions (#570) and post best-effort so a 504 doesn't abort a run (#562).
- Standardized route-handler error responses (#574); configurable sync-lock stale threshold (#561).
Docs
v0.5.19
dispatch 0.5.19
Fixes
Helm chart actually publishes now. v0.5.18's chart push died 403: GHCR
package creation requires the repo's own Actions token (which auto-links the
new package), not the bot app token. This release is the first to land the
chart at oci://ghcr.io/misospace/charts/dispatch. (#553)
helm install dispatch oci://ghcr.io/misospace/charts/dispatch --version 0.5.19
Chart details in the v0.5.18 notes (bjw-s common library base, migration hook
Job, SKIP_DB_MIGRATIONS pods).
v0.5.18
dispatch 0.5.18
Highlights
First-party Helm chart, published to OCI. charts/dispatch, built on the
bjw-s common library (v5.0.1) — values read exactly like an app-template
HelmRelease. Migrations run in a pre-install,pre-upgrade hook Job
(prisma migrate deploy); server pods always start with
SKIP_DB_MIGRATIONS=true, making >1 replica safe. Published by this release
to oci://ghcr.io/misospace/charts/dispatch (chart version = app version).
Required Secret keys are documented in the chart's secret-contract.md. (#545, #550)
helm install dispatch oci://ghcr.io/misospace/charts/dispatch --version 0.5.18
Fixes
Closed ⇒ done actually enforces now. The sync fetched state=open only, so
closedIssueStatusFix (0.5.16) never saw a closed issue — closed issues kept
stale claimable labels (and could be claimed by agents). All sync paths now
fetch state=all; the first sync after deploy relabels stale closed issues to
status/done on GitHub. (#544)
Dependencies
v0.5.17
dispatch 0.5.17
Fixes
Groomer output is now fully grammar-enforced. The json_schema sent to the
LLM was looser than the output validator, so a small model could emit output the
validator then rejected (seen in prod on the 4B: invented labels like
type/refactor, and an empty proposedTitle instead of omitting it). Label
arrays are now enum-constrained to the allowlist and proposedTitle/proposedBody
carry their length bounds in the grammar itself. (#542)
Image binds all interfaces (HOSTNAME=0.0.0.0). Next standalone binds to
$HOSTNAME, which Kubernetes sets to the pod name — so the server only listened
on the pod IP and the in-app scheduler's loopback POSTs to 127.0.0.1:3000
failed with ECONNREFUSED. Baked into the image; deployments no longer need a
HOSTNAME env override. (#541)
Tests & CI
v0.5.16
dispatch 0.5.16
Highlights
In-app scheduler (retires external cron/heartbeat). Scheduled sync, the
groomer, PR follow-up, and closed-issue pruning now run on internal timers
inside the app process instead of external CronJobs. Opt in with
DISPATCH_SCHEDULER_ENABLED=true. Once enabled, you can retire the
dispatch-heartbeat cron. (#515, #520)
- Per-job intervals are overridable; set any to
0to disable that job:DISPATCH_SYNC_INTERVAL_MS(default 15m)DISPATCH_GROOMER_INTERVAL_MS(default 10m)DISPATCH_PR_FOLLOWUP_INTERVAL_MS(default 15m)DISPATCH_PRUNE_CLOSED_INTERVAL_MS(default daily)
- Startup is delayed by
DISPATCH_SCHEDULER_STARTUP_DELAY_MSso migrations
finish first. Left disabled, dev/CI never spin timers.
Closed issues always move to status/done. Sync now enforces the terminal
status: a closed issue has its status label reconciled to status/done (and
other status/* labels stripped) directly on GitHub, so the next sync can't
revert it. (#521)
Schema-constrained groomer output. The groomer requests json_schema
responses (with the lane enum built from your configured lanes) and falls back
to json_object on a 400. This lets smaller models — e.g. a 4B — groom
reliably. (#516)
Groomer runs are serialized. A DB-backed lock (reusing the sync_lock
table) prevents overlapping groomer runs. (#517)
Fixes & internals
- Prisma client is generated on
postinstallonly when the schema is present,
fixing Docker builds wherenpm ciruns before the schema is copied. (#512) - Shared
isStatusLabelguard across routes; tighter$transactionadapter
cast; removed dead lane-classification code and the unusedeffect
dependency. (#518, #519, #522, #513)
Tests
- Coverage for the agent queue/next-task fetch path and the DB-backed global
sync mutex. (#524)