fix(identity): stabilize idless message revisions (#3898) - #3898
Merged
Conversation
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
Repair the exact-head identity and attachment-owner findings for PR #3898. The branch remains non-draft and is not being merged.
Problem
The exact review identified remaining collision and stability gaps: same-role same-timestamp idless siblings could be treated as conflicting on edit; whitespace native IDs diverged from missing IDs; duplicate physical coordinates could silently select a last writer; Claude owner evidence could omit attachment identity; and synthetic parser IDs could leak into public identity. The review also identified that the annotation successor's inventory must include
annotation-batch:<id>rows without destroying that provenance.Solution
annotation-batch:<id>rows, preserve the original batch scope, and store session ownership separately. No production backfill is performed here.Acceptance and review matrix
SessionRevisionProjection.mutable_message_identities, multiplicity-aware membership, andtest_timestamped_idless_sibling_edit_is_not_a_membership_conflictMessageOwnerResolutionrecords ambiguous physical coordinates and raisesMessageOwnerAmbiguityError; both duplicate-coordinate tests exercise hash-route failure_message_revision_match_idstrips before branching; whitespace/missing projection equivalence test and writer regression passpolylogue-message-owner-scope-backfillis updated in the branch state with batch-row inventory, provenance preservation, separate durable session ownership, backup, transaction, idempotency, and reindex-preparation acceptance criteriaBead disposition matrix
polylogue-slshypolylogue-message-owner-scope-backfill,polylogue-93xe,polylogue-xseltVerification
direnv exec . devtools test tests/unit/pipeline/test_message_identity_position_fallback.py tests/unit/archive/test_session_revision_membership.py tests/unit/sources/test_claude_web_normalization.py tests/unit/sources/test_parsers_codex.py tests/unit/sources/parsers/test_grok.py tests/unit/sources/parsers/test_antigravity.py tests/unit/sources/test_parsers_claude_design.py tests/unit/pipeline/test_archive_write.py::test_whitespace_only_native_message_id_falls_back_and_writes_blocks tests/unit/pipeline/test_archive_write.py::test_duplicate_message_coordinates_raise_loud_value_error tests/unit/pipeline/test_archive_write.py::test_merge_append_duplicate_message_coordinates_also_guarded: 218 passed in 10.59s.direnv exec . devtools test tests/unit/pipeline/test_message_identity_position_fallback.py: 10 passed in 1.10s after the duplicate-native anti-vacuity addition.direnv exec . devtools test tests/unit/sources/test_parsers_codex.py tests/unit/sources/parsers/test_grok.py tests/unit/sources/parsers/test_antigravity.py tests/unit/sources/parsers/test_parsers_claude_design.pywas run with the repository's actual path astests/unit/sources/test_parsers_claude_design.py: 147 passed in 7.62s.direnv exec . devtools verify --quick: success at1eb36fdb171210ce6fc5440e6fef621605f5a58c, 24 steps passed, including format, lint, mypy, render, layering, policy, schema, and promotion checks.direnv exec . devtools verify: attempted, but refused before tests because this aging worktree has no seeded testmon receipt and requested--seed-testmon.direnv exec . devtools verify --all --skip-slow: attempted as a diagnostic and stopped after broad inherited failures; the exact focused repair routes above are the completion evidence. The known untouched baseline failure istests/unit/pipeline/test_archive_write.py::TestValidationService::test_validation_uses_all_record_samples_by_default.Review status
All unresolved GitHub review threads were enumerated. Addressed threads are replied to with exact evidence; the annotation-batch threads retain the explicit partial successor scope. A fresh exact-head Codex review is requested after pushing this head. No merge is requested.
Structured exact-head carrier
Summary by CodeRabbit
Bug Fixes
Reliability