propose_changes
PROPOSES changes without applying them: they are saved in a review queue, and a human accepts or rejects CHANGE BY CHANGE. This is the tool of the "meeting notes → graph update" flow: the project state is read first (get_schema_overview, search_cells), then a list of operations is sent, each with its identifier and — whenever a transcript accompanies the submission — the QUOTE of the sentence that justifies it. An operation without a quote is refused: this is what lets the reviewer read the sentence rather than the whole meeting notes. Nothing is ever written to the schema. The response carries reviewUrl, the review link meant for the user; get_proposal then reads back what became of the proposal.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | The proposed changes. Each entry: { id, op, evidence?: { quote, speaker? }, confidence?: 'high'|'medium'|'low', rationale? }. `op` is write vocabulary: { kind: 'cell.add', cell: {...} }, { kind: 'task.add', task: {...} }, { kind: 'cell.update', cellId, patch }, { kind: 'task.set_status', taskId, status }, { kind: 'person.add', person }, { kind: 'assignment.set', assignment }, { kind: 'dependency.add', dependency }… The creation identifiers are SUPPLIED BY YOU: replaying the same burst then duplicates nothing. Maximum 200. | |
| title | Yes | Title of the proposal, in the user's language (e.g. "Product committee notes, July 22") | |
| source | No | ||
| baseVersion | No | Version number you reasoned on. Used to REPORT drift at review, and not to block. | |
| idempotencyKey | Yes | REQUIRED. A stable key derived from the source (e.g. the meeting identifier). Replaying with the same key returns the proposal ALREADY created instead of creating a second one. | |
| expectedProjectId | No | UUID of the project targeted by THIS call. ACTUALLY targets this project instead of the session project. Refused without changing anything if access is not granted. |