MCP / Tools / Story Workflows / story_review_run

story_review_run

orchestrationbetaauth: project:writeapproval: suggeststatus: v1

REVIEW existing project material and produce editorial feedback — room review (writers'-room style holistic notes), analysis wizard (scored editorial pass with rewrite guidance and comps), or continuity audit / Sync Screenplay (generate, review, and explicitly apply screenplay rewrite suggestions for pending structural-sync update tasks), or Novel audits, reviewable shared manuscript proposals, revision-checked Canon Ledger updates, AI prose edits of a selected manuscript passage, and plan updates from written prose. For `continuity_audit`, `status` is the review surface and `apply` (or legacy `finalize`) is the selected mutating phase.

When to use

  • For Novel Audit, use readiness then quote with the same audit level and Chapter scope. Present the quote before Start and preserve billing_quote_id and a stable billing_request_id in its payload; changed or expired quotes require renewed acceptance.
  • Room Review returns `room-review/v2` with saved review/note IDs, captured quotations, inspected coverage and suggested editorial decisions. Notes do not choose executable tools. Earlier notes are explicitly unverified and require current evidence before resolution. Keep the note and its evidence attached when continuing revision work.
  • You want analytical feedback first, before deciding whether to mutate — the verb is REVIEW.
  • Use `room_review` for showrunner-style holistic notes across the project.
  • Use `analysis_wizard` for a scored editorial pass with rewrite guidance and comps.
  • For `analysis_wizard`, call `phase=quote` after readiness, present the returned credit range/mode/allowance, then start with `payload={billing_quote_id, billing_request_id}` using that quote and a fresh UUID request ID. A changed or expired quote requires renewed acceptance; never silently reprice and resubmit.
  • For `room_review`, use the same quote-before-start flow with `payload.reviewer_id` on quote and start. Omitted reviewer selects Default. Start also requires the accepted billing quote ID and a fresh UUID request ID.
  • Room Review and Analysis Wizard also review Novel projects; manuscript evidence cites a Chapter code and `block_id`. Novel Room Review reviewers are `default` (Developmental Editor), `line_editor`, `genre_reader` and `sensitivity_reader`; `payload.novel_scope` limits the prose read (quote and start). Too large a book fails quote with `context_too_large`. Novel notes carry `novel_handoff` (Change Story, `prose_proposal`, `plan_reconciliation`) instead of `planning_revision` hand-offs.
  • Use `continuity_audit` after structural updates; call readiness then quote, present its range and allowance, and accept the suggested Start with its captured update_ids and billing IDs. Retry the same accepted IDs after a lost response. Poll job_get, inspect status, and apply explicit page selections. Page application does not resolve planning/page relationships; those require a captured revision decision.
  • If `continuity_audit` readiness returns `scene_authoring_required`, inspect the exact saved changes. Shared references carry `revision_id` and `followup_id` even without beat links. Propose pages with `screenplay_generation_run(workflow=scene_screenplay, phase=readiness, payload.revision_id=..., payload.followup_id=...)`, or explicitly retain/defer the reviewed material. `readiness.structural_followups` preserves all states; changed evidence reopens review. Missing targets remain in saved change history without blocking other scenes; do not request generation for a deleted scene.
  • Use `workflow=novel_review` with `payload.novel_operation=audit`, `change_proposal`, `prose_proposal`, `plan_reconciliation`, or `canon_entry`; audit findings never mutate content. `audit_level=changes` reviews the Chapters flagged by story changes (stale / needs review) plus their dependency-graph dependants, with the recorded changes in the prompt; its suggestions may include Chapter-plan fixes, exact prose fixes for written Chapters, and Writer handoffs. Audit finalize publishes its Chapter-plan suggestions as one shared manuscript proposal (`proposal_id`, `revision_id`). `change_proposal` reads and decides every shared manuscript proposal with `list` (optionally per `chapter_card_id`), `review` (before/after per change for a prose passage, planning card field, Chapter plan field, Chapter insert/reorder/split/merge/delete, Canon create/edit/supersede), and `apply` with explicit accept/reject `choices` and a `request_id` after the author decides. Show a Chapter deletion's `deletes_prose` and word count before accepting it. Changed targets come back as per-change conflicts; nothing is applied silently.
  • For an AI edit of specific Novel prose use `payload.novel_operation=prose_proposal`. Read the Chapter with `project_query(mode=novel, novel_mode=manuscript_chapter)`, then quote with its `revision` as `base_revision`, the selected block ids (optional UTF-16 `start`/`end`), `action` and `instruction`; present the quote, Start with the accepted billing IDs, and finalize the job. Finalize publishes a reviewable before/after proposal and never changes the Chapter; review and decide it with `change_proposal`. Whole-Chapter rewrites belong to `story_development_run` manuscript_generation.
  • After the author writes or revises Chapters, use `payload.novel_operation=plan_reconciliation` with `chapter_card_ids` (up to five written Chapters). Quote, present it, Start with the accepted billing IDs, then finalize. It proposes only Chapter-plan fields the prose changed and Canon entries the prose clearly establishes, as one shared proposal decided with `change_proposal`; an empty result returns `explanation` and no proposal.

When not to use

  • Do not use for direct low-level screenplay mutation; use `screenplay_snapshot_apply` for exact block edits.
  • Do not use to **change or polish** the story material — use `story_revision_run` (change_wizard, polish_wizard, creative_canvas) instead.
  • Do not use to **build** new structured material that does not exist yet — use `story_development_run` (scene_wizard, beat_wizard, story_bootstrap) instead.
  • Do not use `continuity_audit` for freeform scoped prose rewrites that are unrelated to pending structural-sync updates — use `screenplay_rewrite_run` instead.
  • Do not use Novel review operations as a raw manuscript overwrite path; exact supplied prose is saved with `novel_mutate(manuscript_save)`.

Examples

  • “Review this project like a showrunner.”
  • “Run Sync Screenplay readiness, quote the selected updates, accept its suggested Start, inspect status, choose suggestions, then apply explicit selections.”
  • “Boundary - "Get a scored editorial pass on this project with rewrite guidance." Use `analysis_wizard` here because the caller wants notes and scores, not committed changes.”
  • “Boundary - "Sync screenplay after I merged scenes." Inspect the saved follow-up identities, review the affected pages and decide what to change or intentionally keep/defer, then use `continuity_audit` for ripple checks.”
  • “Run a full Novel audit with `workflow=novel_review`, `phase=readiness`, and `payload={"novel_operation":"audit","audit_level":"full"}`.”

Anti-examples

  • Generate a new screenplay from scratch.
  • Polishing dialogue in an existing scene — that is `story_revision_run` with `polish_wizard`.
  • Generating new beats or scenes from an idea — that is `story_development_run` with `beat_wizard` or `scene_wizard`.
  • Restructuring the story based on a free-form direction — that is `story_revision_run` with `change_wizard`.

Workflows

Switch behavior by setting the workflow input field.

WorkflowPhasesCalls
room_reviewreadiness, quote, start, finalizeroom_review.readiness, room_review.quote, room_review.run, room_review.finalize
analysis_wizardreadiness, quote, start, finalizeanalysis_wizard.readiness, analysis_wizard.quote, analysis_wizard.run, analysis_wizard.finalize
continuity_auditreadiness, quote, start, status, apply, finalizecontinuity_audit.start, continuity_audit.get_job, continuity_audit.apply
novel_reviewreadiness, quote, start, finalize, apply, update, list, reviewnovel.review.run

Linked resources

Tool calls may return resource_links pointing at these resource families.

Input schema

story_review_run input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": [
    "workflow",
    "phase",
    "project_id"
  ],
  "properties": {
    "workflow": {
      "type": "string",
      "enum": [
        "room_review",
        "analysis_wizard",
        "continuity_audit",
        "novel_review"
      ]
    },
    "phase": {
      "type": "string",
      "enum": [
        "readiness",
        "quote",
        "start",
        "status",
        "finalize",
        "apply",
        "update",
        "list",
        "review"
      ]
    },
    "project_id": {
      "type": "integer"
    },
    "job_id": {
      "type": "string"
    },
    "reservation_id": {
      "type": "string"
    },
    "payload": {
      "type": "object",
      "properties": {
        "billing_quote_id": {
          "type": "string",
          "format": "uuid"
        },
        "billing_request_id": {
          "type": "string",
          "format": "uuid"
        },
        "reviewer_id": {
          "type": "string",
          "enum": [
            "default",
            "tough_love",
            "character_detective",
            "emotional_reader",
            "line_editor",
            "genre_reader",
            "sensitivity_reader"
          ],
          "description": "Room Review quote/start: one reviewer per run (default if omitted). Screenplay: default, tough_love, character_detective, emotional_reader. Novel: default, line_editor, genre_reader, sensitivity_reader. Readiness lists them."
        },
        "novel_scope": {
          "type": "object",
          "description": "Novel room_review quote/start only: Chapters whose prose is read (default whole book).",
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "whole_book",
                "from_chapter",
                "chapters"
              ]
            },
            "chapter_card_id": {
              "type": "integer",
              "minimum": 1,
              "description": "First Chapter for kind=from_chapter."
            },
            "chapter_card_ids": {
              "type": "array",
              "items": {
                "type": "integer",
                "minimum": 1
              },
              "minItems": 1,
              "maxItems": 500,
              "uniqueItems": true,
              "description": "Chapters for kind=chapters."
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false,
          "allOf": [
            {
              "if": {
                "properties": {
                  "kind": {
                    "const": "from_chapter"
                  }
                }
              },
              "then": {
                "required": [
                  "chapter_card_id"
                ],
                "properties": {
                  "chapter_card_ids": false
                }
              }
            },
            {
              "if": {
                "properties": {
                  "kind": {
                    "const": "chapters"
                  }
                }
              },
              "then": {
                "required": [
                  "chapter_card_ids"
                ],
                "properties": {
                  "chapter_card_id": false
                }
              }
            },
            {
              "if": {
                "properties": {
                  "kind": {
                    "const": "whole_book"
                  }
                }
              },
              "then": {
                "properties": {
                  "chapter_card_id": false,
                  "chapter_card_ids": false
                }
              }
            }
          ]
        },
        "model_hint": {
          "type": "string",
          "description": "Optional model hint for LLM-backed review generation."
        },
        "update_ids": {
          "type": "array",
          "description": "Explicit pending update ids for continuity_audit start. If omitted, start uses readiness' recommended structural-sync scene update ids.",
          "items": {
            "type": "string"
          }
        },
        "include_global_updates": {
          "type": "boolean",
          "description": "For continuity_audit only: opt in to including global dirty markers alongside recommended structural-sync scene updates. Defaults to false."
        },
        "structural_card_codes": {
          "type": "array",
          "description": "Optional structural card code filter forwarded to continuity audit generation.",
          "items": {
            "type": "string"
          }
        },
        "base_rev": {
          "type": "integer",
          "description": "Screenplay snapshot revision used when applying selected continuity suggestions."
        },
        "selections": {
          "type": "array",
          "description": "Explicit continuity suggestions to apply. Applying pages does not resolve planning/page relationships.",
          "items": {
            "type": "object",
            "required": [
              "suggestion_id"
            ],
            "properties": {
              "suggestion_id": {
                "type": "string"
              },
              "edited_after_text": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "novel_operation": {
          "type": "string",
          "enum": [
            "audit",
            "change_proposal",
            "canon_entry",
            "prose_proposal",
            "plan_reconciliation"
          ]
        },
        "audit_level": {
          "type": "string",
          "enum": [
            "blueprint",
            "chapter",
            "full",
            "changes"
          ]
        },
        "chapter_card_id": {
          "type": "integer",
          "minimum": 1,
          "description": "Novel audit Chapter scope; prose_proposal: the Chapter to edit (quote/start); change_proposal list: only proposals that change this Chapter's prose."
        },
        "chapter_card_ids": {
          "type": "array",
          "minItems": 1,
          "maxItems": 5,
          "uniqueItems": true,
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "description": "plan_reconciliation quote/start: the written Chapters whose prose the plan update reads (up to five)."
        },
        "proposal_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "change_proposal review/apply: the shared manuscript proposal id from list, Audit finalize or prose_proposal finalize."
        },
        "entry_id": {
          "type": "string",
          "minLength": 1
        },
        "expected_revision": {
          "type": "integer",
          "minimum": 0
        },
        "entry": {
          "type": "object"
        },
        "base_revision": {
          "type": "integer",
          "minimum": 0,
          "description": "prose_proposal quote/start: the Chapter revision read with project_query(novel_mode=manuscript_chapter)."
        },
        "selection": {
          "type": "array",
          "minItems": 1,
          "maxItems": 60,
          "description": "prose_proposal quote/start: selected top-level blocks by stable id, in reading order. start/end are UTF-16 offsets into the block text; omit both to select the whole block. Private author notes and scene breaks cannot be selected.",
          "items": {
            "type": "object",
            "required": [
              "block_id"
            ],
            "additionalProperties": false,
            "properties": {
              "block_id": {
                "type": "string",
                "pattern": "^[A-Za-z0-9_-]{1,64}
quot; }, "start": { "type": "integer", "minimum": 0 }, "end": { "type": "integer", "minimum": 1 } } } }, "action": { "type": "string", "enum": [ "tighten", "expand", "more_dialogue", "more_interiority", "change_tone", "fix_continuity", "custom" ], "description": "prose_proposal quote/start: the edit to make. change_tone and custom require instruction." }, "instruction": { "type": "string", "maxLength": 4000, "description": "prose_proposal quote/start: the author's direction for the edit." }, "revision_id": { "type": "string", "minLength": 1, "maxLength": 200, "description": "change_proposal review/apply: the proposal's editing revision id." }, "request_id": { "type": "string", "minLength": 1, "maxLength": 128, "description": "change_proposal apply: idempotency key; retry a lost reply with the same id and choices." }, "choices": { "type": "array", "minItems": 1, "maxItems": 200, "description": "change_proposal apply: explicit decisions for reviewed suggestion ids (any unit kind: prose, planning card, Chapter plan, Chapter structure, Canon). accept applies the shown change; reject dismisses it. Changed targets are reported as conflicts and never applied.", "items": { "type": "object", "required": [ "suggestion_id", "decision" ], "additionalProperties": false, "properties": { "suggestion_id": { "type": "string", "minLength": 1, "maxLength": 300 }, "decision": { "type": "string", "enum": [ "accept", "reject" ] } } } } }, "additionalProperties": false } }, "allOf": [ { "if": { "properties": { "workflow": { "enum": [ "analysis_wizard", "room_review" ] }, "phase": { "const": "start" } } }, "then": { "required": [ "payload" ], "properties": { "payload": { "required": [ "billing_quote_id", "billing_request_id" ], "propertyNames": { "enum": [ "billing_quote_id", "billing_request_id", "reviewer_id", "novel_scope" ] } } }, "if": { "properties": { "workflow": { "const": "analysis_wizard" } } }, "then": { "properties": { "payload": { "propertyNames": { "enum": [ "billing_quote_id", "billing_request_id" ] } } } } }, "else": { "if": { "properties": { "workflow": { "const": "novel_review" }, "phase": { "const": "start" }, "payload": { "properties": { "novel_operation": { "enum": [ "audit", "prose_proposal", "plan_reconciliation" ] } }, "required": [ "novel_operation" ] } }, "required": [ "workflow", "phase", "payload" ] }, "then": { "properties": { "payload": { "required": [ "billing_quote_id", "billing_request_id" ] } } }, "else": { "if": { "properties": { "workflow": { "const": "continuity_audit" }, "phase": { "const": "start" } }, "required": [ "workflow", "phase" ] }, "then": { "required": [ "payload" ], "properties": { "payload": { "required": [ "billing_quote_id", "billing_request_id", "update_ids" ], "properties": { "update_ids": { "minItems": 1 } } } } }, "else": { "properties": { "payload": { "not": { "anyOf": [ { "required": [ "billing_quote_id" ] }, { "required": [ "billing_request_id" ] } ] } } } } } } }, { "if": { "properties": { "workflow": { "const": "room_review" } } }, "then": { "properties": { "phase": { "enum": [ "readiness", "quote", "start", "finalize" ] } } } }, { "if": { "properties": { "workflow": { "const": "analysis_wizard" } } }, "then": { "properties": { "phase": { "enum": [ "readiness", "quote", "start", "finalize" ] } } } }, { "if": { "properties": { "workflow": { "const": "continuity_audit" } } }, "then": { "properties": { "phase": { "enum": [ "readiness", "quote", "start", "status", "apply", "finalize" ] } } } }, { "if": { "properties": { "phase": { "const": "finalize" }, "workflow": { "enum": [ "room_review", "analysis_wizard" ] } } }, "then": { "required": [ "job_id" ] } }, { "if": { "properties": { "workflow": { "const": "continuity_audit" }, "phase": { "const": "readiness" } } }, "then": { "properties": { "payload": { "properties": { "structural_card_codes": { "description": "Optional filter for continuity audit readiness/start; readiness returns the pending update_ids to use." } } } } } }, { "if": { "properties": { "workflow": { "const": "continuity_audit" }, "phase": { "const": "start" } } }, "then": {} }, { "if": { "properties": { "workflow": { "const": "continuity_audit" }, "phase": { "enum": [ "apply", "finalize" ] } } }, "then": { "required": [ "job_id", "payload" ], "properties": { "payload": { "required": [ "base_rev", "selections" ], "properties": { "selections": { "minItems": 1 } } } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" } }, "required": [ "workflow" ] }, "then": { "required": [ "payload" ], "properties": { "phase": { "enum": [ "readiness", "quote", "start", "finalize", "apply", "update", "list", "review" ] }, "payload": { "required": [ "novel_operation" ] } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "phase": { "enum": [ "readiness", "quote", "start" ] }, "payload": { "properties": { "novel_operation": { "const": "audit" } }, "required": [ "novel_operation" ] } }, "required": [ "workflow", "phase", "payload" ] }, "then": { "properties": { "payload": { "required": [ "audit_level" ] } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "phase": { "const": "finalize" }, "payload": { "properties": { "novel_operation": { "const": "audit" } }, "required": [ "novel_operation" ] } }, "required": [ "workflow", "phase", "payload" ] }, "then": { "required": [ "job_id" ] } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "payload": { "properties": { "novel_operation": { "const": "change_proposal" } }, "required": [ "novel_operation" ] } }, "required": [ "workflow", "payload" ] }, "then": { "properties": { "phase": { "enum": [ "list", "review", "apply" ] } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "payload": { "properties": { "novel_operation": { "const": "canon_entry" } }, "required": [ "novel_operation" ] } }, "required": [ "workflow", "payload" ] }, "then": { "properties": { "phase": { "const": "update" }, "payload": { "required": [ "entry_id", "expected_revision", "entry" ] } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "payload": { "properties": { "novel_operation": { "const": "prose_proposal" } }, "required": [ "novel_operation" ] } }, "required": [ "workflow", "payload" ] }, "then": { "properties": { "phase": { "enum": [ "quote", "start", "finalize" ] } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "payload": { "properties": { "novel_operation": { "const": "prose_proposal" } }, "required": [ "novel_operation" ] }, "phase": { "enum": [ "quote", "start" ] } }, "required": [ "workflow", "phase", "payload" ] }, "then": { "properties": { "payload": { "required": [ "chapter_card_id", "base_revision", "selection", "action" ] } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "payload": { "properties": { "novel_operation": { "const": "prose_proposal" } }, "required": [ "novel_operation" ] }, "phase": { "const": "finalize" } }, "required": [ "workflow", "phase", "payload" ] }, "then": { "required": [ "job_id" ] } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "payload": { "properties": { "novel_operation": { "const": "change_proposal" } }, "required": [ "novel_operation" ] }, "phase": { "const": "review" } }, "required": [ "workflow", "phase", "payload" ] }, "then": { "properties": { "payload": { "required": [ "revision_id", "proposal_id" ] } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "payload": { "properties": { "novel_operation": { "const": "change_proposal" } }, "required": [ "novel_operation" ] }, "phase": { "const": "apply" } }, "required": [ "workflow", "phase", "payload" ] }, "then": { "properties": { "payload": { "required": [ "revision_id", "proposal_id", "request_id", "choices" ] } } } }, { "if": { "properties": { "payload": { "properties": { "action": { "enum": [ "change_tone", "custom" ] } }, "required": [ "action" ] } }, "required": [ "payload" ] }, "then": { "properties": { "payload": { "required": [ "instruction" ], "properties": { "instruction": { "pattern": "\\S" } } } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "payload": { "properties": { "novel_operation": { "const": "plan_reconciliation" } }, "required": [ "novel_operation" ] } }, "required": [ "workflow", "payload" ] }, "then": { "properties": { "phase": { "enum": [ "quote", "start", "finalize" ] } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "payload": { "properties": { "novel_operation": { "const": "plan_reconciliation" } }, "required": [ "novel_operation" ] }, "phase": { "enum": [ "quote", "start" ] } }, "required": [ "workflow", "phase", "payload" ] }, "then": { "properties": { "payload": { "required": [ "chapter_card_ids" ] } } } }, { "if": { "properties": { "workflow": { "const": "novel_review" }, "payload": { "properties": { "novel_operation": { "const": "plan_reconciliation" } }, "required": [ "novel_operation" ] }, "phase": { "const": "finalize" } }, "required": [ "workflow", "phase", "payload" ] }, "then": { "required": [ "job_id" ] } }, { "if": { "required": [ "payload" ], "properties": { "payload": { "required": [ "novel_scope" ] } } }, "then": { "properties": { "workflow": { "const": "room_review" }, "phase": { "enum": [ "quote", "start" ] } } } } ], "additionalProperties": false }

Output schema

story_review_run output
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": [
    "workflow",
    "phase"
  ],
  "properties": {
    "workflow": {
      "type": "string"
    },
    "phase": {
      "type": "string"
    },
    "async": {
      "type": "boolean"
    },
    "job_id": {
      "type": "string"
    },
    "reservation_id": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "estimated_credits": {
      "type": [
        "integer",
        "number"
      ]
    },
    "readiness": {
      "type": "object"
    },
    "update_ids": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "scene_authoring_required": {
      "type": "array",
      "description": "Saved scene-change references requiring review before continuity ripple checks. Shared references carry revision_id and followup_id, independently of beat links or private execution jobs. Propose pages through screenplay_generation_run(scene_screenplay), or record an intentional retain/defer decision; changed evidence reopens review.",
      "items": {
        "type": [
          "string",
          "object"
        ]
      }
    },
    "defaulted_update_ids": {
      "type": "boolean"
    },
    "suggestion_count": {
      "type": "integer"
    },
    "dirty_result_count": {
      "type": "integer"
    },
    "changed_scene_ids": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "no_change_scene_ids": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "conflict_count": {
      "type": "integer"
    },
    "recommended_apply_args": {
      "type": [
        "object",
        "null"
      ]
    },
    "apply_candidates": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "result": {
      "type": "object"
    },
    "summary": {
      "type": "string"
    },
    "reviewer": {
      "type": "object",
      "description": "Captured reviewer identity for Room Review. Historical reviews have no attribution.",
      "required": [
        "id",
        "name",
        "description"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "notes": {
      "type": "array",
      "maxItems": 10,
      "items": {
        "additionalProperties": false,
        "properties": {
          "title": {
            "maxLength": 240,
            "minLength": 1,
            "type": "string"
          },
          "priority": {
            "maximum": 10,
            "minimum": 1,
            "type": "integer"
          },
          "category": {
            "maxLength": 80,
            "minLength": 1,
            "type": "string"
          },
          "note": {
            "maxLength": 6000,
            "minLength": 1,
            "type": "string"
          },
          "why_it_matters": {
            "maxLength": 4000,
            "type": "string"
          },
          "evidence": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "kind": {
                  "enum": [
                    "planning",
                    "pages",
                    "manuscript"
                  ],
                  "type": "string"
                },
                "block_id": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Manuscript evidence: the cited block."
                },
                "entity_id": {
                  "maxLength": 200,
                  "minLength": 1,
                  "type": "string"
                },
                "field_name": {
                  "anyOf": [
                    {
                      "maxLength": 200,
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "quote": {
                  "maxLength": 4000,
                  "minLength": 1,
                  "type": "string"
                },
                "source_fingerprint": {
                  "maxLength": 64,
                  "minLength": 64,
                  "type": "string"
                },
                "episode_id": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "kind",
                "entity_id",
                "quote",
                "source_fingerprint"
              ],
              "type": "object"
            },
            "maxItems": 20,
            "type": "array"
          },
          "suggested_decisions": {
            "items": {
              "enum": [
                "inspect",
                "explore",
                "propose",
                "defer",
                "retain"
              ],
              "type": "string"
            },
            "maxItems": 5,
            "minItems": 1,
            "type": "array"
          },
          "id": {
            "type": "string"
          },
          "review_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "evidence_status": {
            "enum": [
              "captured",
              "unverified"
            ]
          },
          "scope": {
            "additionalProperties": true,
            "type": "object"
          },
          "novel_handoff": {
            "type": "object",
            "description": "Novel notes: change_story (change_wizard request and novel_scope), prose_edits (prose_proposal block selections) and plan_update (plan_reconciliation Chapters)."
          },
          "affected_card_codes": {
            "items": {
              "type": "string"
            },
            "maxItems": 500,
            "type": "array"
          },
          "affected_scene_codes": {
            "items": {
              "type": "string"
            },
            "maxItems": 500,
            "type": "array"
          }
        },
        "required": [
          "title",
          "priority",
          "category",
          "note",
          "evidence",
          "suggested_decisions",
          "id",
          "evidence_status"
        ],
        "type": "object"
      }
    },
    "note_count": {
      "type": [
        "integer",
        "number"
      ]
    },
    "top_note_titles": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "resource_links": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "pipeline_state": {
      "$ref": "./_common/pipeline_state.schema.json"
    },
    "next_actions": {
      "type": "array",
      "items": {
        "$ref": "./_common/next_action.schema.json"
      }
    },
    "credits_charged": {
      "type": "number",
      "minimum": 0
    },
    "credits_previously_committed": {
      "type": "number",
      "minimum": 0
    },
    "credit_status": {
      "type": "string",
      "enum": [
        "quoted",
        "reserved",
        "committed",
        "refunded",
        "not_metered",
        "unavailable"
      ]
    },
    "credits_quoted": {
      "type": "number",
      "minimum": 0
    },
    "credits_reserved": {
      "type": "number",
      "minimum": 0
    },
    "credits_refunded": {
      "type": "number",
      "minimum": 0
    },
    "credits_skipped_reason": {
      "type": "string"
    },
    "schema_version": {
      "const": "room-review/v2"
    },
    "review_id": {
      "type": [
        "string",
        "null"
      ]
    },
    "coverage": {
      "type": [
        "object",
        "null"
      ]
    },
    "snapshot_rev": {
      "type": [
        "integer",
        "null"
      ]
    },
    "suggested_decisions": {
      "type": "array",
      "items": {
        "enum": [
          "inspect",
          "explore",
          "propose",
          "retain",
          "defer"
        ]
      }
    }
  },
  "additionalProperties": true
}
← All toolsv1 · workflow_runner