fix(forensic): misattribution — attribution rules, honest immutability, subject editing (27 F.1–F.3)#178
Closed
bryanmatthewsimonson wants to merge 1 commit into
Conversation
…tability, subject editing (27 F.1–F.3) Phase 27 slices F.1–F.3, from the maintainer report that LLM finding suggestions frequently attribute a maneuver to the person CALLING IT OUT (e.g. a journalist reporting X's deflection gets profiled as the deflector). The investigation found the error over-determined — no attribution guidance in the prompt, anchor-grounding structurally pulling toward the reporter (theirs is the only quotable sentence), the symmetry line inviting it, and NO downstream correction path. - F.2 rulesFindings gains ATTRIBUTION rules: the subject is the party who PERFORMED the move; describing/quoting/criticizing someone else's maneuver is not performing it; the reported-speech case is spelled out (anchor to the reporter's sentence, attribute to the actor, basis "paraphrased"); if the performer is undeterminable, OMIT. The symmetry rule now says every SPEAKER's own moves — and explicitly not the journalist by default. "quoted" basis narrowed to the subject's own verbatim words. - F.1 forensic-modal: editing an existing finding freezes subject / maneuver / anchors (they derive the id; ForensicModel.update silently discarded those edits) with a delete-and-recreate hint. Role/note/counter-read/basis stay editable. - F.3 llm-review: findings gain subject fields in the edit panel (the one field you could never fix), and buildFindingInput / buildBaselineInput join the accepted entity id via entityIdByRef — accepted findings land in the identity keyspace instead of fragmenting into label-only records that silently never publish. Forward-only (D6): existing label-keyed findings are not migrated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 16, 2026
Closed
Owner
Author
|
Landed on main via the #183 consolidation merge (the stacked-merge cascade closed/retargeted intermediates; every commit from this PR is in main). |
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
Phase-27 slices F.1–F.3 — the forensic misattribution fix. Stacked on #177.
The reported failure: LLM finding suggestions attribute a maneuver to the person calling it out (a journalist reporting X's deflection gets profiled as the deflector). Verified as over-determined: zero attribution guidance in the prompt, anchor-grounding structurally pulling toward the reporter (theirs is the only quotable sentence in reported speech), a symmetry instruction that invites profiling the journalist, and no correction path — the review panel had no subject field, and the edit modal rendered subject/maneuver as editable then silently discarded the changes.
rulesFindingsgains explicit ATTRIBUTION rules: subject = who performed the move; reporting ≠ performing; the reported-speech case is spelled out (anchor to the reporter's sentence, attribute to the actor, basisparaphrased); undeterminable performer → omit. Symmetry now reads "every SPEAKER whose own moves the text carries… not the journalist by default."identity_id— healing the keyspace split that made label-only findings unaggregatable and silently unpublishable. Forward-only per decision D6.Tests: 1,793 green (2 new) · build clean · lint 0 errors.
Next
F.4 (baselines actually visible in the reader) follows.
🤖 Generated with Claude Code