v0.1.0 — CI failure auto-diagnosis for DeepSeek Harness
First release of dsh-ci-doctor: watch GitHub Actions for new failures, diagnose raw job logs into structured findings, and remember every failure signature across diagnoses — all through two agent tools and your authenticated gh CLI.
Features
- ci_watch — background watch job on the host jobs registry: baseline-aware polling for new failed runs (historical red never fires the alarm), exponential backoff on transient errors, kill any time via
job_kill, detection summary with a ready-madeci_diagnosenext step. - ci_diagnose — fetches failed-run jobs/logs through the host shell +
ghCLI, extracts normalized error signatures, classifies failures (test/build/lint/typecheck/dependency/network/permission/timeout/infra), mines suspect files, renders a markdown diagnosis card with honestly trimmed log excerpts. - Failure-signature ledger — durable via the host storage domain (
ci_doctorunit, lazy open with memory fallback); repeat failures surface asseen N×. - Read-only contract — every canonical result carries
repositoryWrites: false; optional invariant companion (dsh-ci-doctor/invariant) fails loudly if a result ever loses the marker. - Robust gh transport —
--jqprojections keep API payloads under the host shell's 64 KiB capture cap; raw job logs get a raisedstdoutMaxBytesbudget; failures classified (auth/not-found/rate-limit/timeout/api).
Tests
- 85/85 unit tests green — signature extraction/normalization, log trimming, gh client, watcher state machine, ledger (memory + domain), plugin wiring, invariant companion.
Docs
Verification conclusions
- Local gate:
pnpm typecheck✅ ·pnpm test(85/85) ✅ ·pnpm build✅ ·pnpm format:check✅ - Real environment: in-process
boot()of the actual localwebprofile composition (dsh-app-boot exports, webserver overlaid to port 0) — 18/18 checks passed: tools registered on the real ToolRuntime, both waterfalls accepted the real host exec shape{ name, arguments }, live read-only diagnosis ofcli/clirun #31782742089 extracted 8 signatures, a real watch job streamed its baseline and settled on kill, and the ledger persisted to~/.dsh/storages/ci_doctor.jsonacross process exit. - The real-environment check caught and fixed two genuine bugs before release: a service mount-order race (shell/storageDomain now resolved lazily) and shell capture truncation of large
gh apipayloads (now--jq-projected).
Full Changelog: https://github.com/jkrandom-sudo/dsh-ci-doctor/commits/v0.1.0