## §OIP SYSTEM ARTICLE — WATCH (4 operations)
A generated article for one OIP shelf. It lists every operation in this API/CLI/MCP/device/model/core subsystem, links each leaf article, and gives the ledger path for proof.

### Read Order
- scan operations
- open a leaf doc
- run via run_now or POST /api/dispatch
- open receipt
- repair/replay if needed

### Operations
- **WATCH_ACTION** — Pre-flight gate. Given a proposed {key, body}, look up watch_rules and return {allowed:bool, reason}. Use BEFO
  when: you need to watch action
  args: $1 | $2
  doc: https://miscsubjects.com/api/dispatch?key=WATCH_ACTION&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=WATCH_ACTION&body=%3Carg1%3E%7C%3Carg2%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=WATCH_ACTION
- **WATCH_RULE_ADD** — Add a deny rule to watch_rules. $1=pattern_key (regex over KEY), $2=pattern_body (regex over body, optional), 
  when: you need to watch rule add
  args: $1 | $2 | $3 | $4
  doc: https://miscsubjects.com/api/dispatch?key=WATCH_RULE_ADD&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=WATCH_RULE_ADD&body=%3Carg1%3E%7C%3Carg2%3E%7C%3Carg3%3E%7C%3Carg4%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=WATCH_RULE_ADD
- **WATCH_RULE_LIST** — List every watch_rules entry
  when: you need to watch rule list
  args: none
  doc: https://miscsubjects.com/api/dispatch?key=WATCH_RULE_LIST&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=WATCH_RULE_LIST&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=WATCH_RULE_LIST
- **WATCH_RULE_DELETE** — Delete a watch_rules entry by id. $1=id
  when: you need to watch rule delete
  args: $1
  doc: https://miscsubjects.com/api/dispatch?key=WATCH_RULE_DELETE&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=WATCH_RULE_DELETE&body=%3Carg1%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=WATCH_RULE_DELETE

### Troubleshooting
- If a row's example has placeholders, replace only the placeholder values and preserve separators.
- If a call fails, open its receipt and repair it with POST /api/dispatch {key, body, repairs:'inv_ID'}.
- If token scope denies this system, ask the owner for a row:/rows:/pfx: token scoped to the exact operation set.

Back to the tree: https://miscsubjects.com/api/dispatch?map=1&format=markdown