# Release Watch, free sample: a watch plan template, five rules and a five-check script

Version 1.0, 2026-10-28. By PaperChaseWebb. Works with Grok Bot, Claude Code, Codex and Hermes. Python 3 standard library. Tested on Linux with Python 3.13.5 as described below.

After a change goes live, most teams either watch nothing in particular or ask an agent to stare at dashboards. This sample gives you the smaller, cheaper habit: write down, per change, what should not move, then check that plan before anything watches it. Credit for the core idea, an agent writing the spec and a fixed script running it, goes to Ben Congdon's post on agentic monitoring: https://benjamincongdon.me/blog/2026/10/19/Agentic-Monitoring/

## Five rules

1. One plan per change, written from the diff. Each signal says which changed paths it covers and why.
2. Every time carries a timezone, and the baseline window is at least as long as the watch window.
3. Trip only after two or more bad windows in a row. One blip is not an incident.
4. Ratio rules need a floor, so near-zero traffic does not page you. Watch for drops, not only spikes.
5. Nothing runs automatically. The watch proposes; a named person decides any rollback.

## A plan template

```json
{
 "change_id": "rel-coupons",
 "change_time": "2026-10-20T12:00:00-10:00",
 "owner": "Dana Ops",
 "signals": [
  {"name": "checkout errors", "rule": "increase", "threshold": 2.0, "persist": 2, "floor": 0.02},
  {"name": "checkout traffic", "rule": "drop", "threshold": 0.6, "persist": 2, "floor": 10}
 ],
 "rollback": {"command": "flagctl set coupons_v2 off", "auto": false},
 "actions": []
}
```

## A prompt for any of the four harnesses

"Read the diff for this change. Write watch.plan.json with a timezone on change_time, a human owner, and one to three signals tied to lines in the diff, each with persist of 2 or more and a floor on ratio rules. Set rollback auto to false. Run python3 watch_mini.py watch.plan.json until it prints 0 findings, then show me the plan. Do not start any watch."

## watch_mini.py

```python
#!/usr/bin/env python3
"""Free sample: five read-only checks on one watch plan. python3 watch_mini.py watch.plan.json"""
import json, re, sys
def main(p):
    try:
        plan = json.load(open(p))
    except Exception as e:
        print(f"cannot read {p}: {type(e).__name__}"); return 2
    out = []
    if not re.search(r"(Z|[+-]\d\d:\d\d)$", str(plan.get("change_time", ""))):
        out.append("change_time has no timezone")
    if str(plan.get("owner", "")).strip().lower() in ("", "agent", "bot", "auto"):
        out.append("no human owner")
    for s in plan.get("signals", []):
        if s.get("persist", 0) < 2:
            out.append(f"{s.get('name')}: persist under 2, one blip trips it")
        if s.get("rule") in ("increase", "drop") and "floor" not in s:
            out.append(f"{s.get('name')}: ratio rule with no floor")
    if any(a.get("auto") for a in plan.get("actions", []) + [plan.get("rollback", {})]):
        out.append("something runs automatically; the owner decides rollbacks")
    for f in out:
        print("-", f)
    print(f"{len(out)} findings"); return 1 if out else 0
if __name__ == "__main__":
    sys.exit(main(sys.argv[1] if len(sys.argv) > 1 else "watch.plan.json"))
```

## Worked example

The plan below has five problems:

```json
{
 "change_id": "rel-coupons",
 "change_time": "2026-10-20 12:00",
 "owner": "agent",
 "signals": [
  {"name": "checkout errors", "rule": "increase", "threshold": 2.0, "persist": 1},
  {"name": "checkout traffic", "rule": "drop", "threshold": 0.6, "persist": 2, "floor": 10}
 ],
 "rollback": {"command": "flagctl set coupons_v2 off", "auto": true},
 "actions": []
}
```

Tested on 2026-10-28: python3 watch_mini.py before.plan.json printed 5 findings (no timezone, no human owner, persist under 2, a ratio rule with no floor, a rollback set to run automatically) and exited 1. The template above printed 0 findings and exited 0. A missing file exits 2.

## The full pack

Release Watch ($24) adds the runner that reads CSV or Prometheus read-only, increase, above and drop rules, the plan and triage prompts, skill files for Claude Code, Codex and Hermes and a rules block for Grok Bot, owner approvals tied to the plan hash, fifteen checks on a seeded fixture, and a labeled eval set to measure false alarms and misses before you trust it.

PaperChaseWebb 💸
