Repository navigation
feat(reconcile): surface indeterminate rows for review - #2893
Merged
vavallee merged 2 commits intoOct 2, 2026
Merged
Conversation
Signed-off-by: kevinatlee <kevin.atlee@live.ca>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016fJcCVbNnKsmj2MAAMwWj9 Signed-off-by: vavallee <vavallee@protonmail.com>
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
Surface every catalogue-reconciliation row kept because provider or profile evidence is incomplete. The response now separates informational
indeterminateRowsfrom removalcandidates, and the modal renders each kept title with its provider and evidence reason. Closes #2892.Safety invariant
Incomplete provider/profile evidence never becomes deletion evidence. Indeterminate rows remain absent from
candidates, have no selection control, do not affect the removal count, and are never sent by the UI to Apply. Apply still recomputes candidates and intersects the requested IDs with the current candidate set, so submitting an indeterminate ID directly does not delete it.Behavior before / after
Before, the API and modal exposed only
summary.indeterminate, leaving users unable to audit which local rows were protected.After,
indeterminateRowsreports the local book ID, title, metadata provider, and one of five display-only reasons:language_unknownlanguage_evidence_lookup_failededition_evidence_unavailablepartial_catalogueunmatched_cross_providerThe existing deletion-candidate reasons and candidate algorithm remain separate and unchanged in substance.
Jenny Han reproduction
For the English-only Hardcover case described in #2892, the modal now makes the protected rows auditable from reconciliation evidence rather than asking users to infer them from titles. The implementation does not assume that the six named titles are the six protected rows; it reports whichever local rows actually correlate to incomplete language/provider evidence at preview time.
Checklist
README.md, API docs, user guide, and changelog fragment)Tests / verification
go vet ./...golangci-lint run ./...(v2.11.4; 0 issues)cd web && npm run lint(0 errors; 7 pre-existing warnings)cd web && npm run typecheckcd web && npm run buildcd web && npm test(105 files, 1,175 tests)git diff --checkgo test ./cmd/... ./internal/...— attempted on Windows; unrelated existing platform assumptions fail in telemetry/ABS/path, POSIX permission, symlink, and hardlink tests. The telemetry failure passed when rerun in isolation, and all focused reconciliation tests pass.