## §OIP SYSTEM ARTICLE — GSHEETS (6 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
- **GSHEETS_VALUES_GET** — Read a range from a Google Sheet on the OAuth grant (not the Apps Script web app).
  when: read cells from a sheet the connected account can open.
  args: $1 = spreadsheet id · $2 = A1 range, e.g. Sheet1!A1:D20
  doc: https://miscsubjects.com/api/dispatch?key=GSHEETS_VALUES_GET&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=GSHEETS_VALUES_GET&body=1AbC%E2%80%A6%7CSheet1!A1%3AD20&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=GSHEETS_VALUES_GET
- **GSHEETS_META** — A spreadsheet's title and its tabs (names, ids, sizes).
  when: learn the tab names before GSHEETS_VALUES_GET.
  args: $1 = spreadsheet id
  doc: https://miscsubjects.com/api/dispatch?key=GSHEETS_META&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=GSHEETS_META&body=1AbC%E2%80%A6&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=GSHEETS_META
- **GSHEETS_PUSH** — Write the directory (every editable column, full content) to the DIRECTORY tab of the owner Google Sheet, the 
  when: after directory edits on the build, or to seed the sheet. $1 = all | directory | ledger | full (rewrite every row)
  args: $1 = what (default all)
  doc: https://miscsubjects.com/api/dispatch?key=GSHEETS_PUSH&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=GSHEETS_PUSH&body=directory&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=GSHEETS_PUSH
- **GSHEETS_PULL** — Read the DIRECTORY tab of the owner Google Sheet and apply every row the owner changed there as a PATCH /api/d
  when: the owner edited the sheet; runs every few minutes by automation.
  args: $1 = dry | (empty)
  doc: https://miscsubjects.com/api/dispatch?key=GSHEETS_PULL&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=GSHEETS_PULL&body=dry&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=GSHEETS_PULL
- **GSHEETS_SYNC** — One tick of the two-way sync: pull owner edits from the DIRECTORY tab, push changed directory rows and prompts
  when: keep the owner Google Sheet and the directory identical.
  args: none
  doc: https://miscsubjects.com/api/dispatch?key=GSHEETS_SYNC&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=GSHEETS_SYNC&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=GSHEETS_SYNC
- **GSHEETS_MCP_GET** — Read a range from a Google Sheet (Sheets MCP).
  when: read cells as the owner.
  args: $1 = spreadsheet id · $2 = A1 range
  doc: https://miscsubjects.com/api/dispatch?key=GSHEETS_MCP_GET&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=GSHEETS_MCP_GET&body=1QrGVz07B1ZVBzxH2hNXcwhFIVHZzeM3H4apcCaTap6A%7CDIRECTORY!A1%3AC3&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=GSHEETS_MCP_GET

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