Skip to content

feat(review): owner links between loops and conversations, with follow-up mentions - #56

Merged
urnlahzer merged 1 commit into
mainfrom
feat/owner-links-and-mentions
Sep 25, 2026
Merged

urnlahzer merged 1 commit into
mainfrom
feat/owner-links-and-mentions

Conversation

@urnlahzer

Copy link
Copy Markdown
Owner

Summary

PR 1 of 2 for owner-taught loop relations (plan: owner links and mentions now; restated follow-up detection, duplicate retention and thread-merge assertions after the loop-count regression is diagnosed).

  • Link store (link_state.rs): credential OpenLoops/Relations/v1, 73-byte rows, cap 34, same compare-and-swap save and lock pattern as decisions; LoopKeys extracted from Decisions so both stores share one secret (golden fingerprint test unchanged). Kinds: SameLoop, NotSameLoop, SameThread, NotSameThread. Thread key = HMAC over openloops-conversation-v1 | account | conversationId. Status bar: "N saved decisions · M links".
  • Mentions (LoopItem.mentions, fold_into): "Asked again" evidence cards with date and Open email link, "Asked Nx" pill, open cards with mentions sort first in their group, "Linked to" meta line.
  • Two-step select: "Same loop as…" / "Same conversation as…" on the card's second decision row, click the other card, Esc cancels; "Not the same" flips every link on the card to its negative. Same-loop links fold immediately (apply_loop_links, also run at the end of set_scan); conversation links are stored now and applied to merging in PR 2.
  • Export: rules.jsonl with gold rules.duplicate_action rows (SameLoop true / NotSameLoop false) and rules.thread_merge rows (SameThread / NotSameThread), owner-sourced.
  • Docs: inbox-review "Saved decisions and reminders" corrected (55 records, 180-day retention), new "Linking loops and conversations", export section; native-setup lists the three credentials.
  • Scan pipeline byte-identical except mentions: Vec::new() on LoopItem literals.

Test plan

  • fmt; clippy desktop (native-ui, native-ui+live-connection); desktop 424 lib + 3 bin tests (+12); check-model-boundary; test-model-boundary; check-governance; public-repo check
  • Owner: on a loaded scan press "Same loop as…", click another card → one card with an "Asked again" evidence card, "Asked 2x" pill, "Linked to"; status bar "… · 1 links"; "Not the same" flips it and the next scan shows both cards; Export training data → rules.jsonl has one row

🤖 Generated with Claude Code

https://claude.ai/code/session_01EKHrBckgsxYkTUEipKtwmU

…w-up mentions

Adds a second credential (OpenLoops/Relations/v1, 34 links, fingerprints
only) holding SameLoop / NotSameLoop / SameThread / NotSameThread pairs keyed
by the existing loop fingerprints and a new conversation key under the same
secret. Cards gain a mentions list ("Asked again" evidence cards, "Asked Nx"
pill, sort ahead of other open cards) and a "Linked to" line. Two-step
select: press "Same loop as…" or "Same conversation as…", click the other
card, Esc cancels; "Not the same" flips a link to its negative. Same-loop
links fold the newer card into the older immediately; conversation links
take effect on the next scan (next PR). Training export writes rules.jsonl
with gold duplicate_action and thread_merge rows from the links. Scan
pipeline unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EKHrBckgsxYkTUEipKtwmU
@urnlahzer
urnlahzer merged commit b6a01e0 into main Sep 25, 2026
2 checks passed
@urnlahzer
urnlahzer deleted the feat/owner-links-and-mentions branch September 25, 2026 12:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant