Files
claudetools/.claude/memory/feedback_syncro_comment_dedup.md
Mike Swanson 2a1ccfac73 Add memory-dream skill + additive cross-machine memory sync
memory-dream: read-only memory lint/consolidation analyzer (index, backlinks,
stale refs, dup clusters, profile drift); additive-only --apply-safe, all
merges/deletes are proposals. sync-memory.sh: additive repo<->harness-profile
union (no delete/overwrite, conflicts surfaced), wired to a SessionStart hook.
Migrates the useful profile-only memories into the synced repo store.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 15:22:12 -07:00

2.4 KiB

name, description, type, originSessionId
name description type originSessionId
Syncro duplicate prevention — tickets AND comments Never retry ANY Syncro POST (ticket create or comment) without first GETting to confirm the action didn't already succeed — Syncro has no idempotency on any endpoint feedback 7034be43-1464-4085-b765-dc1226b1f8e0

Never retry a POST /comment to Syncro without first doing GET /tickets/{id} to confirm the comment did not already post. The server has no idempotency — one POST always creates one comment, regardless of whether the client saw an error.

ALSO: Always show the full comment draft to the user and wait for explicit confirmation before posting ANY comment — including internal/hidden notes. This rule has been violated twice. There are no exceptions.

ALSO: This applies to ticket CREATION too — not just comments. When a POST /tickets response looks wrong (null fields, jq error, etc.), do GET /customers/{id}/tickets BEFORE retrying. The response wrapper is {"ticket": {...}} — always use .ticket.id not .id. Duplicate tickets were created twice by retrying a succeeded POST. Violated 2026-04-22.

Why: A comment was duplicated on ticket #32185 because the first POST succeeded but jq threw a parse error on the response (em-dash in subject caused shell interpolation issue), making the request look failed. A retry posted a second copy. Comments cannot be deleted via API — duplicates require manual GUI removal.

How to apply:

  • Always write comment payloads to a temp file (/tmp/syncro_comment.json) before posting — avoids shell quoting/encoding failures that produce misleading errors
  • If any POST /comment tool call returns an error or ambiguous result, immediately GET /tickets/{id} and check .ticket.comments for the subject/timestamp before retrying
  • A jq parse error, curl error, or timeout on the response does NOT mean the POST failed — verify first
  • CRITICAL — jq path: POST /comment response is {"comment": {...}} — ALWAYS use .comment.id, .comment.created_at etc. Using .id returns null and looks like failure even when the comment landed. This caused a duplicate on 2026-04-23 (#32142). When GETting to verify, check ALL comments not just [-3:] — the new comment may not be the most recent if other activity occurred.
  • When GETting to verify after an ambiguous POST, search by subject: .ticket.comments[] | select(.subject == "...")