Skip to content

[FEATURE] edit_note on a reviewed note needs a checksum that changes on every web-app comment, and the only way to fetch it is read_note, which returns the whole document #1592

Description

@calebpickerconsulting

Title: edit_note on a reviewed note needs a checksum that changes on every web-app comment, and the only way to fetch it is read_note, which returns the whole document

Concept. Two collaborators on one note: a human commenting in the web app, an agent appending and editing through MCP. Every comment the human adds bumps revision_checksum. Every MCP edit on a reviewed note requires expected_checksum to equal the current revision. So each comment silently voids the agent's next write, and the agent's only recovery path is a full read_note(review_mode="structured") — 120–240K characters returned just to obtain a 64-character token. The result is a document that cannot be worked on by two parties at the same time without one of them stopping.

Caleb's thought: This may also cost a lot of tokens for each and every check. Goal is to smooth, frictionless way to collaborate in realtime.

What happened.

  1. Agent appended chunk N with the checksum from its last successful write.
  2. Human added a comment in the web app between the agent's read and its write.
  3. edit_note"This note contains review threads. Call read_note(review_mode='structured') and retry edit_note with its current revision_checksum."
  4. Agent called read_note → 117K-character payload → extracted the checksum with jq → retried. Repeated four times in forty minutes as comments kept arriving. Each failed retry re-sent a 38K-character append payload.
    Why it matters. The checksum is doing two jobs: protecting prose from conflicting prose edits (good) and protecting the review layer (comments/suggestions) from being clobbered. A comment is not a prose change; it should not fence an append to the end of the document.

Proposal from Fable 5.1 (any one of these would fix the workflow; the first two together would be ideal).

  • Split the checksum: a content_checksum over prose only and a review_checksum over the review layer. edit_note checks content_checksum; review_note checks review_checksum. Comments stop invalidating prose edits.
  • Add a lightweight get_revision(identifier) (or a head/stat tool) returning {revision_checksum, content_checksum, review_summary, total_lines, size} without the body. Even without the split, this turns a 240K-character read into a 300-byte one.
  • Scope the intersection check to the span being edited: an append cannot intersect any anchor, so it should never be refused on review-layer grounds; find_replace should be refused only when the matched span overlaps an open anchor.
  • Optional: accept a section/line-range checksum (checksum of the target section) so concurrent edits in different sections do not conflict at all.

Drafted by Fable 5.1

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions