From 2549287665654a3121a407d6f05d98eb1a7acf6f Mon Sep 17 00:00:00 2001 From: ysyneu Date: Mon, 24 Aug 2026 21:03:42 -0700 Subject: [PATCH] fix(skills): grouping `equals` needs the `labels.` prefix The card's own example used `equals: [["service","env"]]`, which the server rejects with `equal service is not supported` (400). Only `title`, `description` and `severity` may be written bare; every label must carry its `labels.` prefix, in `equals`, `i_keys` and each `cases[].equals`. The trap is sharpest right after creating a label through `enrichment upsert`: the label exists, but it is still `labels.` to the grouping config, never the bare name. --- skills/flashduty/reference/channel.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/skills/flashduty/reference/channel.md b/skills/flashduty/reference/channel.md index 9c23b72..3723fe6 100644 --- a/skills/flashduty/reference/channel.md +++ b/skills/flashduty/reference/channel.md @@ -103,7 +103,19 @@ Update channel ## Key concepts - **`--auto-resolve-mode`** enum: `trigger` (timer resets on each new alert trigger) | `update` (timer resets on any alert update). -- **Alert grouping `group.method`**: `i` = intelligent (embedding similarity), `p` = pattern (label equality), `n` = none. **`group.time_window` is in minutes** (default cap 1440 = 24h; extended accounts may allow up to 43200 = 30 days). Set via `--data '{"group":{"method":"p","equals":[["service","env"]],"time_window":30}}'` on `create`/`update`. +- **Alert grouping `group.method`**: `i` = intelligent (embedding similarity), `p` = pattern (label equality), `n` = none. **`group.time_window` is in minutes** (default cap 1440 = 24h; extended accounts may allow up to 43200 = 30 days). Set via `--data` on `create`/`update`: + + ```bash + --data '{"group":{"method":"p","equals":[["labels.service","labels.env"]],"time_window":30}}' + ``` + + **Every entry in `equals` (and in `i_keys`, and in each `cases[].equals`) must + be either one of the three built-in fields — `title`, `description`, + `severity` — or a label written with its `labels.` prefix.** A bare label name + is rejected: `equals: [["service"]]` returns `equal service is not supported` + (400). This is the most common way a grouping update fails, and it bites + hardest right after `fduty enrichment upsert` creates a new label — the label + exists, but it is `labels.` here, never the bare name. Escalation, silence, inhibit and unsubscribe rules live on their own cards: `reference/escalation.md` and `reference/noise.md`.