Split from cubic P1 on #347 (#347 (comment) — syncer.go shouldSkipLazyUntrackedPush review).
outboxRecordContentIdentity assigns the stable (workspace, path, content hash) create-draft ContentIdentity only when isMountWritebackCreateDraftPath matches (Relayfile UUID-draft / factory-create-*.json spellings). GitHub adapter arbitrary-leaf create commands (e.g. pulls/N/review-comments/ID/replies/new-reply.json — see relayfile-adapters packages/github/src/writeback.ts) fall through to the per-outbox mount-command identity, so a racing direct writeback push or a second mount instance can double-create the provider record.
This is PRE-EXISTING behavior (predates #347 on every push path, lazy and non-lazy): #347 added isGithubAdapterCreateCommandPath but only consults it for lazy skip exemption, deliberately leaving identity semantics unchanged. Fix direction per cubic: treat isGithubAdapterCreateCommandPath as a create path in the content-identity helpers too — needs its own review since it changes dedupe keys for ALL mounts.
🤖 Generated with Claude Code
Split from cubic P1 on #347 (#347 (comment) — syncer.go shouldSkipLazyUntrackedPush review).
outboxRecordContentIdentity assigns the stable (workspace, path, content hash) create-draft ContentIdentity only when isMountWritebackCreateDraftPath matches (Relayfile UUID-draft / factory-create-*.json spellings). GitHub adapter arbitrary-leaf create commands (e.g. pulls/N/review-comments/ID/replies/new-reply.json — see relayfile-adapters packages/github/src/writeback.ts) fall through to the per-outbox
mount-commandidentity, so a racing direct writeback push or a second mount instance can double-create the provider record.This is PRE-EXISTING behavior (predates #347 on every push path, lazy and non-lazy): #347 added isGithubAdapterCreateCommandPath but only consults it for lazy skip exemption, deliberately leaving identity semantics unchanged. Fix direction per cubic: treat isGithubAdapterCreateCommandPath as a create path in the content-identity helpers too — needs its own review since it changes dedupe keys for ALL mounts.
🤖 Generated with Claude Code