feat(phase5): contested status for close-call conflict resolution#166
Open
salishforge wants to merge 1 commit into
Open
feat(phase5): contested status for close-call conflict resolution#166salishforge wants to merge 1 commit into
salishforge wants to merge 1 commit into
Conversation
The final Phase 5 slice — the Feature 1 remnant that never landed with PR #137. Phase 2.5 conflict resolution stops encoding noise as fact. - When the multi-factor score gap between two conflicting live memories is at most one point (one factor's worth of noise on the quantized integer scale), both are marked epistemic_status='contested' and the conflict resolves with a contested(...) strategy and no winner. The umbrella used a relative 20% threshold, which inverts on small integer scores (pure-noise 1-vs-0 reads as decisive, well-evidenced 6-vs-5 as contested) and is distorted by the mutual +100 supersession offset — the absolute delta is immune to both. - Superseded rows never contest: supersession is an absolute signal, and marking stale facts contested would resurface them as live disputes. - Contested is not terminal (the trap this same stack fixed for 'inferred'): Phase 5.12 promotes contested rows that earn the corroboration bar, and a decisive re-resolution of the dispute clears the winner's badge back to provisional. - tests/contested-conflicts.test.ts: 9 tests — close-call semantics, the exact one-vs-two-point boundary, winner/loser path preservation incl. untouched winner confidence, both-superseded decisiveness, contested recovery via decisive re-resolution. Conflict pairs share an identical relative timestamp (separate INSERTs see different now(), silently handing one side the +3 recency factor). - tests/epistemic-confidence.test.ts: the promotion tests now pin the new behavior (corroborated contested rows promote; uncorroborated ones stay). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011xCqQo49d3CEbn6oEvb3Ru
Owner
Author
|
CI status: all 11 checks fail in ~5-30s with an Fix: #167 pins |
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
The final Phase 5 slice — the Feature 1 remnant that never landed with #137. Stacked on #165 → #164 → #163 → #160.
Phase 2.5 conflict resolution now refuses to pick a winner on noise: a score gap of at most one point between two live memories marks both
contested(no winner, no loser penalty). Three deliberate departures from the umbrella reference, all driven by the adversarial review:inferred(the review caught it as a high-severity finding: this diff is the codebase's first-ever writer ofcontested).Review process
Two-lens adversarial review workflow (8 agents): 6 raw findings → 6 confirmed (0 rejected — an unusually accurate review), all fixed, including two test-design flaws (a wall-clock-dependent pinned date, and a degenerate close-call fixture that separate-INSERT
now()drift would have scored 1-vs-3 anyway).Test evidence
npm run type-check/npm run linttests/contested-conflicts.test.ts(new)npm run test:epistemic-confidence(2 tests updated to pin the new promotion behavior)npm run test:multi-devicenpm run test:integration🤖 Generated with Claude Code
https://claude.ai/code/session_011xCqQo49d3CEbn6oEvb3Ru