Report changed archived import matches as conflicts before Apply - #3068
Conversation
Refuse changed archived matches before any batch writes while preserving unchanged skips and duplicate ambiguity. Add 13 application cases and explicit validation limits for #2935.
|
Hosted verification update for head This supersedes the absence of any executable application-test evidence at initial submission, but does not change the fact that local dotnet execution was unavailable. The draft stays draft pending the remaining CI and independent review. Architecture, migration validation, both frontend unit jobs, dependency/security signals, SAST and secret scanning had also completed successfully in the observed run. @codex review |
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. |
|
Codex Review: Didn't find any major issues. Nice work! 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". |
|
Local qualification is now running in an isolated Windows checkout because the submitted tests could not run in the author environment. Source56d7a8ef4d4a58726cf2ef88e10d1ab2b4a89ae2 is merged with delivered main44d041ca7 for proof, and Git confirms the backend tree is byte-identical to the submitted head. Independent review and focused ExternalImport tests are queued behind the current bounded backend test job. No source edits or ready/merge claim yet; exact-head results will be attached. |
|
Independent read-only review of source56d7a8ef4d4a58726cf2ef88e10d1ab2b4a89ae2 against delivered main44d041ca7 is CLEAN: the archive guard follows unchanged-row skipping and duplicate ambiguity, and precedes upsert planning/transaction work. The repository includes archived cards in the lookup. All13 new cases are relevant application-boundary proofs; no broader SQL/HTTP claim is made. Coordinator then verified focused50/50 and fullbackend9747pass34skip0fail atdbe21a3e2, and confirmed final main9a8c14c6b integration leaves every backend file identical. The final484aa6781 head is ready and must pass hosted CI; no merge claim. |
External imports could plan an update to an archived dedupe match, only to fail when Apply reached the domain lifecycle guard. The planner now reports a structured ArchivedExistingMatch conflict before starting a transaction. It identifies the row and existing card and asks for an explicit restore or removal of that incoming row.
Unchanged archived matches in the target column remain skips, move-only archived matches conflict, and duplicate active/archived matches remain ambiguous. The batch is never silently restored, duplicated or partially applied. Existing authorization, active-row behavior and all-or-nothing planning remain intact. The runtime correction is 13 lines; it adds no route, schema, migration or concurrency guarantee.
Validation:
The initial author environment had no .NET SDK; the Windows results above supersede that untested state. The new scenario tests use real domain objects with mocked repositories, so no new SQL rollback, HTTP, browser or competing-writer acceptance is claimed. Existing physical-device, screen-reader, provider, release/hosting and other human actions in OUTSTANDING_TASKS.md remain unchanged.
Closes #2935