## §OIP SYSTEM ARTICLE — OBJECT (7 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
- **OBJECT_FIELDS** — The field contract of one object type: every field with its stable id (<object>.<field>), type, min, max, defa
  when: before editing anything; to learn what a table or settings group contains; "what can I change here".
  args: $1 = object type (directory, settings, automations, hooks, watch_rules, connections, work_tasks, events, …)
  doc: https://miscsubjects.com/api/dispatch?key=OBJECT_FIELDS&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=OBJECT_FIELDS&body=settings&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=OBJECT_FIELDS
- **OBJECT_GET** — The cells of one object instance: every field id with its current value.
  when: read one directory row, one setting, one automation, one hook by its key or id.
  args: $1 = object type, $2 = ref (primary key)
  doc: https://miscsubjects.com/api/dispatch?key=OBJECT_GET&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=OBJECT_GET&body=directory%7CNOW&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=OBJECT_GET
- **OBJECT_SET** — Change one cell. Routes to the governed write path for that object (directory PATCH, settings dual-write, auto
  when: "set X to Y", "turn this automation off", "raise this limit to 500" — anything that is a cell.
  args: $1 = object type, $2 = ref, $3 = field id, $4 = value
  doc: https://miscsubjects.com/api/dispatch?key=OBJECT_SET&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=OBJECT_SET&body=settings%7Cresolve.plan_ref_ttl_s%7Cvalue%7C1200&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=OBJECT_SET
- **OBJECT_DESCRIBE** — Describe a provider object row (STRIPE_CUSTOMER, GITHUB_ISSUE, …): provider, object, id prefix, the rows that 
  when: a model wants the shape of an external object before acting on it.
  args: $1 = object row key
  doc: https://miscsubjects.com/api/dispatch?key=OBJECT_DESCRIBE&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=OBJECT_DESCRIBE&body=STRIPE_CUSTOMER&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=OBJECT_DESCRIBE
- **OBJECT_READ** — Read a mutable object and its current_hash. The hash is the concurrency primitive.
  when: before changing a file or object. You receive content and current_hash. There is no lock.
  args: $1 = path
  doc: https://miscsubjects.com/api/dispatch?key=OBJECT_READ&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=OBJECT_READ&body=functions%2F_lib%2Fobject_mutate.js&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=OBJECT_READ
- **OBJECT_MUTATE** — Compare-and-swap a mutable object. If base_hash equals current_hash, apply and return the new hash. If not, re
  when: after OBJECT_READ, to submit a mutation against the hash you read.
  args: $1 = task_id | $2 = path | $3 = base_hash | $4+ = mutation JSON {content} or {old_string,new_string}
  doc: https://miscsubjects.com/api/dispatch?key=OBJECT_MUTATE&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=OBJECT_MUTATE&body=WT-1%7Cfunctions%2Fa.js%7C%3Chash%3E%7C%7B%22content%22%3A%22ok%22%7D&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=OBJECT_MUTATE
- **OBJECT_CHANGESET** — Atomic multi-file mutation. All paths apply or none do. Whole composed state is tested before write. STALE aft
  when: any change that touches more than one path, or any change that must be accepted as a unit.
  args: $1 = task_id | $2 = JSON {changes:[{path,base_hash,mutation}]} | $3 = retry_count
  doc: https://miscsubjects.com/api/dispatch?key=OBJECT_CHANGESET&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=OBJECT_CHANGESET&body=WT-1%7C%7B%22changes%22%3A%5B%7B%22path%22%3A%22a.js%22%2C%22base_hash%22%3A%22%3Ch%3E%22%2C%22mutation%22%3A%7B%22content%22%3A%22x%22%7D%7D%5D%7D%7C0&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=OBJECT_CHANGESET

### 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