Description
tailscale2otel.subrequest.coverage and subrequest.failures (internal/apistate/catalog.go) are visualised but not alertable, so partial per-device posture or invite data degrades silently.
Acceptance Criteria
- #1 A shipped alert fires when coverage stays below 1 for a sustained window per collector/tailnet and resolves on recovery, generated via just gen
- #2 Rule tests cover firing, a transient dip that must not fire, and recovery
Definition of Done
- #1 just check passes (the full gate; it is what CI enforces)
- #2 just gen leaves no diff (only if a generated artifact’s inputs changed)
- #3 just –fmt –check passes and every new recipe has a # doc comment and a [group(…)]
Implementation Plan
Loop33 coverage lane: sustained/transient/recovery alert behavior proven using promtool, generated outputs root-owned.
Implementation Notes
loop33 landed9f2abc6efa1283270cbc7b1774d04aa46e9cc85d. Sustained/transient/recovery/isolation fixtures pass; healthy1 survives Grafana last reduction before threshold. CodeRabbit/dsreview and independent guarded PASS; exact composed gate20261101T211921Z-tailscale2otel-8f1b2d1c exit0. Root output/count/disposition integration complete.
Final Summary
Shipped sustained incomplete-subrequest coverage alert with recovery and transient suppression proof.