Skip to content

GitHub adapter create-command pushes use per-outbox mount-command identity, not the stable create-draft dedupe key #348

Description

@khaliqgant

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions