## §OIP SYSTEM ARTICLE — PSYCH (9 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
- **PSYCH_READER_V1** — The instrument. Reads a corpus of one subject and emits span-cited claim voxels. Never diagnoses, never counse
  when: POST /api/psych/run — one instrument, N models, one subject.
  args: input = the corpus packet built by the psych API.
  doc: https://miscsubjects.com/api/dispatch?key=PSYCH_READER_V1&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=PSYCH_READER_V1&body=%3Cinput%20%3D%20the%20corpus%20packet%20bu%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=PSYCH_READER_V1
- **PSYCH_ADVERSARY_V1** — The refuter. Attacks one standing claim against the same corpus. Defaults to refuted.
  when: POST /api/psych/challenge.
  doc: https://miscsubjects.com/api/dispatch?key=PSYCH_ADVERSARY_V1&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=PSYCH_ADVERSARY_V1&body=%3Cyour%20request%20in%20plain%20words%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=PSYCH_ADVERSARY_V1
- **PSYCH_CONSTRUCT_V1** — Criterion-by-criterion coverage of a named construct against the corpus. Not a diagnosis, and says so.
  when: POST /api/psych/run with instrument PSYCH_CONSTRUCT_V1 and vars.construct.
  doc: https://miscsubjects.com/api/dispatch?key=PSYCH_CONSTRUCT_V1&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=PSYCH_CONSTRUCT_V1&body=%3Cyour%20request%20in%20plain%20words%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=PSYCH_CONSTRUCT_V1
- **PSYCH_CONSOLIDATE_V1** — Merges near-duplicate standing claims from many runs into one claim carrying every span.
  when: POST /api/psych/consolidate.
  doc: https://miscsubjects.com/api/dispatch?key=PSYCH_CONSOLIDATE_V1&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=PSYCH_CONSOLIDATE_V1&body=%3Cyour%20request%20in%20plain%20words%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=PSYCH_CONSOLIDATE_V1
- **PSYCH_INGEST** — Add corpus entries for one subject. Declared frame and state are owner-supplied, never model-inferred.
  args: JSON {subject, entries:[{title,date,frame,state,substance,text}]}
  doc: https://miscsubjects.com/api/dispatch?key=PSYCH_INGEST&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=PSYCH_INGEST&body=%7B%22subject%22%3A%22owner%22%2C%22entries%22%3A%5B%7B%22title%22%3A%22The%20Man%20In%20the%20Mirror%22%2C%22frame%22%3A%22first_person%22%2C%22state%22%3A%22elevated%22%2C%22text%22%3A%22...%22%7D%5D%7D&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=PSYCH_INGEST
- **PSYCH_RUN** — Run the instrument across N models over a subject corpus. Every emitted quote is server-verified against the s
  args: JSON {subject, instrument, models:[], entry_ids:[] or limit}
  doc: https://miscsubjects.com/api/dispatch?key=PSYCH_RUN&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=PSYCH_RUN&body=%7B%22subject%22%3A%22owner%22%2C%22instrument%22%3A%22PSYCH_READER_V1%22%2C%22limit%22%3A6%7D&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=PSYCH_RUN
- **PSYCH_CHALLENGE** — Send standing claims to the refuter panel. Majority refuted marks the claim refuted.
  args: JSON {subject, claim_ids:[] or all:1, models:[]}
  doc: https://miscsubjects.com/api/dispatch?key=PSYCH_CHALLENGE&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=PSYCH_CHALLENGE&body=%7B%22subject%22%3A%22owner%22%2C%22all%22%3A1%7D&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=PSYCH_CHALLENGE
- **PSYCH_PROFILE** — The standing picture: claims by dimension with cross-model agreement, challenge outcomes, and every span.
  args: $1 = subject id.
  doc: https://miscsubjects.com/api/dispatch?key=PSYCH_PROFILE&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=PSYCH_PROFILE&body=owner&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=PSYCH_PROFILE
- **PSYCH_METRICS** — Corpus measurements computed in code, not by a model: volume, lexical range, sentence length, register markers
  args: $1 = subject id.
  doc: https://miscsubjects.com/api/dispatch?key=PSYCH_METRICS&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=PSYCH_METRICS&body=owner&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=PSYCH_METRICS

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