Skip to content

Releases: misospace/dispatch

v0.5.25

Choose a tag to compare

@its-saffron its-saffron released this 09 Jul 22:47
493d991

auto add labels on groom

v0.5.24

Choose a tag to compare

@its-saffron its-saffron released this 09 Jul 18:04
c01d04c

fix blocked spam on issues

v0.5.23

Choose a tag to compare

@its-saffron its-saffron released this 09 Jul 15:09
4dd72e8

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

Choose a tag to compare

@its-saffron its-saffron released this 08 Jul 03:55
13c0601

Retune groomer prompt

v0.5.21

Choose a tag to compare

@its-saffron its-saffron released this 07 Jul 22:03
04528c6

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

Choose a tag to compare

@its-saffron its-saffron released this 07 Jul 20:38
1d338d2

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 persist currentLane (#563), so groomed work is actually claimable instead of stranded.
  • GET /api/issues honors the status query 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

  • Accepted-risks tracking for groomer autonomous rewrites + rate limiting (#583, #558); AGENTS subsystem map (#566).

v0.5.19

Choose a tag to compare

@its-saffron its-saffron released this 02 Jul 20:21
3dd144e

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

Choose a tag to compare

@its-saffron its-saffron released this 02 Jul 19:38
ce6c9c0

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

  • tsx 4.22.4 → 4.22.5 (#549); pr-reviewer-action v2.0.2 → v2.0.5 (#546)

v0.5.17

Choose a tag to compare

@its-saffron its-saffron released this 02 Jul 03:54
272b58c

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

  • github.ts coverage backfill: issue/PR/label helpers, review-decision
    derivation, check-failure filtering, PR-health state mapping (+32 tests,
    closes the last half of #511). (#539)
  • PR image builds no longer export the buildx cache (~270s saved on every
    release-bump/Renovate PR build). (#540)

v0.5.16

Choose a tag to compare

@its-saffron its-saffron released this 02 Jul 03:06
1e5eb45

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 0 to 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_MS so 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 postinstall only when the schema is present,
    fixing Docker builds where npm ci runs before the schema is copied. (#512)
  • Shared isStatusLabel guard across routes; tighter $transaction adapter
    cast; removed dead lane-classification code and the unused effect
    dependency. (#518, #519, #522, #513)

Tests

  • Coverage for the agent queue/next-task fetch path and the DB-backed global
    sync mutex. (#524)

Dependencies

  • Next.js 16.2.9 → 16.2.10 (#497); lucide-react 1.22.0 → 1.23.0 (#496)