Sheets-link delivery, always-on scheduling, and reply-naming, on top of the v0.1.1 hardening pass.
New
- Sheets-link delivery — an address can be routed to
sheets-linkinstead of an attachment: the output is uploaded to Google Drive, converted to a Sheet, and shared by link. Live for iwk@ end to end, including a 30-day retention sweep of published files. - Report naming in replies — a transformer can declare a
labelintransformers.yaml; the reply (both the sheets-link sentence and each job line) names the report by that label instead of the raw operation name, and two operations that only differ in output layout share one label. - Runs at boot, not just at logon — the scheduled task now starts before anyone signs in, with a supervisor that auto-restarts the worker on crash (escalating backoff).
- CI — build/vet/test now run on every push and PR (windows-latest).
Reliability
- Fixed a worker crash on
SQLITE_BUSYunder concurrent load. - Stopped retrying permanently-rejected attachments (was causing a retry storm); the rejection is now logged with the sender.
- The webhook now exits fatally if its port can't be bound, instead of silently listening on nothing.
- Email submissions are now keyed on message + recipient, so the same message to two addresses no longer collides.
- A route with no
layoutconfigured no longer logs a spurious delivery-mismatch warning.
Internal / Docs
- Repo prepared for a public GitHub audience: real
config/*.yamlgitignored with.exampletemplates, personal domain and paths scrubbed from docs and code, MIT LICENSE added, README rewritten (setup order, job.json walkthrough, badges). - A second example transformer (
uppercase) replaces internal references to the privateworkerlistproject in public-facing docs.
Verified
go build,go vet,go test ./...clean.- The documented "Run your first job" walkthrough (submit → run --once → jobs get) verified end to end with the
uppercaseexample.