Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
## Unreleased

### Release: the Raindrop gap closure, for every runtime (2026-09-05)

- **Why:** operators could see cost and stuck loops but not what people and agents were saying about a run, could not compare a fleet before and after a change, and could not let an agent report its own trouble. These signals are now computed from transcripts ClawMetry already holds, judge-free and local, across every runtime in the store.
- **What:** this release carries signal shift detection with issues and scheduled briefs (#5506). The previous release (0.12.810) carried the six behaviour signals and Signals tab (#5485), self-diagnostics over MCP (#5481), cohort compare and similar runs (#5482), and the full Claude Code hook lifecycle with personal-data redaction (#5483).
- **Verified:** each PR shipped its tests in the moat-tests job with a red-then-green proof; the local daemon on 0.12.810 produced its first real rollup (109 user turns, 4 frustration matches, headline "Frustration is up on Grok Bot since Saturday"); the hosted node page serves the new interceptors with a clean console.

### Added: signal shifts open issues, and briefs post a scheduled question to a channel (WO-62)
- **Why:** Behaviour Signals produce rates, and a rate that doubles on Tuesday was a bump on a chart nobody opened. Sentry opens an issue for a new exception; the equivalent here is a rate leaving the band its own history taught. The other half is delivery for the operator who does not open dashboards: Dives already turns a question into a query, the narrator already writes a few sentences, the daemon already runs a scheduler, and nothing wired them into a message that arrives on Monday morning.
- **What:** `clawmetry/signal_shifts.py` runs on the daemon's signals tick and compares, per (signal, runtime), the last 24 hours to the runtime's own 28-day history. The band is `mean + k * spread` over daily rates, clamped the way Guard thresholds are (a floor of two points above the mean so a flat history cannot fire on noise, a ceiling of 5x the mean so a noisy one cannot put the threshold out of reach), with a minimum sample on both sides (`CLAWMETRY_SHIFT_MIN_SHORT` 30 turns, `CLAWMETRY_SHIFT_MIN_HISTORY` 200, `CLAWMETRY_SHIFT_K` 2.0). A shift opens one row in the additive `signal_issues` table with the rate before and during, the sample sizes, and a breakdown by model, runtime version, tool and repository ranked by how much of the shift each explains; a second tick refreshes the row, a resolved issue reopens (`reopen_count` + 1) once its window has aged out, an ignored one stays silent until the operator reopens it. Each open or reopen is delivered through the daemon's local alert path as the built-in rule kind `signal_shift` (banner row, generic webhook, six-hour cooldown per signal and runtime) with a payload that names the numbers and the top breakdown line and never carries text. `GET /api/signals/issues` and `POST /api/signals/issues/<id>/status` (origin-checked) serve the Signals tab's "Open issues" block, which reads in plain words ("Frustration on Cursor jumped from 4% to 11% since Tuesday, mostly on claude-x") with Resolve and Ignore; the snapshot gains `signalIssues`. `clawmetry/briefs.py` adds the `briefs` table, `GET/POST /api/briefs`, `DELETE /api/briefs/<id>`, `POST /api/briefs/<id>/run`, an in-house five-field cron matcher, and a daemon scheduler thread that runs due briefs through the Dives pipeline, narrates when a credential exists (otherwise posts the raw table and says so), posts to the channel configured on the Alerts tab with a link back, and posts failures too. Briefs are capped per node (`CLAWMETRY_BRIEFS_MAX`, default 10), metered in the daemon state, and a built-in Daily digest with canned SQL is offered on the tab, off by default.
Expand Down
Loading