fix: reconcile Linear publication recovery identities - #619
Closed
mldangelo-oai wants to merge 7 commits into
Closed
fix: reconcile Linear publication recovery identities#619mldangelo-oai wants to merge 7 commits into
mldangelo-oai wants to merge 7 commits into
Conversation
…blication-recovery-identity
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Collaborator
Author
|
@codex review |
|
Codex Review: Didn't find any major issues. Delightful! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Collaborator
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Linear publication could treat incomplete or conflicting identity evidence as determinate. This change verifies exact mutation arguments, reconciles human issue keys, entity UUIDs, and URLs across connector events and durable handoffs, and preserves uncertain outcomes for recovery instead of recording them as published.
Changes
mutation_settledcheckpoints only after each direct API result or error is durable, and emitbatch_settledonly for fully durable batches. On cancellation, stop later batches while allowing every started non-idempotent mutation to settle into confirmed orpossibleMutationrecovery evidence.Testing
publication-events,publication-integration,publication-store,publish, and CLI publication suites: 226 passed, 0 failed, 1,939 assertions in 30.45s.git diff --check: passed.8f9526bd389b52d2d3e912b018a3833a6c7ef7d60f015426b42123a18963b9f3. Installed public import, NodeNext import, CLI, bundled plugin, and nested worker validations passed.12345: 1,748 passed, 28 skipped, 0 failed; 22,697 assertions across 92 files in 279.13s.gpt-5.6-solpasses at maximum reasoning on exact head147ab759a1cad88945e6ebe64586530a1d18413dagainst base86e1c3f5b29c7ca92958a41c62d2bdb58b30483f; all exited 0 with no actionable defects.Risk and rollout
Reconciliation is intentionally stricter: ambiguous, mismatched, or globally reused claims now produce an indeterminate recovery error instead of being recorded as successful publication. Canonical UUID spelling is normalized before claim resolution, so same-owner case aliases deduplicate while globally reused UUID claims, including case variants, remain indeterminate. Independently verified siblings may already be persisted, so retained evidence must be reconciled before retrying.
PublishScanProgressgains neutralmutation_settledandbatch_settledvariants. They are durable recovery checkpoints, not successful publication outcomes; per-finding terminal progress is emitted only after reconciliation. Exhaustive consumers of the progress union must handle or ignore the new variants.Cancellation prevents later direct API batches, but requests already sent to Linear are allowed to settle so their outcomes are durably reconciled. A slow in-flight request can therefore delay cooperative cancellation completion; at the CLI boundary, a later signal forces process exit while leaving recovery evidence intact.
No remote readback or automatic retry deduplication is added.
Public disclosure review
The final pre-host and hosted audits covered the branch name, exact head and base, title and description, seven branch commits, eight changed files, documentation, comments, diagnostics, fixtures, identifiers, checks, links, and metadata. Fixtures use explicit synthetic keys,
SEC-*andSYNTH-*identifiers, patterned UUIDs, andlinear.app/exampleURLs. No screenshots or attachments are included.