Skip to content

fix(web): scope memory viewer navigation to the current memory (#790) - #791

Merged
Deeds67 merged 1 commit into
mainfrom
fix/790-memory-viewer-birthday-loop
Jul 16, 2026
Merged

fix(web): scope memory viewer navigation to the current memory (#790)#791
Deeds67 merged 1 commit into
mainfrom
fix/790-memory-viewer-birthday-loop

Conversation

@Deeds67

@Deeds67 Deeds67 commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Fixes #790

Root cause

The memory viewer identifies its position by asset id alone: every next/previous action round-trips through the URL (/memory?id=<assetId>), and findMemoryAsset resolves that id to its first occurrence across all memories.

Rule memories (e.g. birthday) can contain assets that also appear in on-this-day memories — a photo of the birthday person taken on this day in a past year is in both. Since rule memories have memoryAt = today, they sort first in the lane. Advancing past a duplicated asset therefore snapped the viewer back into the earlier (birthday) memory, looping forever — exactly the reported "always loops after the 2-years-ago mark".

This will matter even more once #789 (Tier 1 memory types) lands, since every new rule type multiplies cross-memory asset overlap.

Fix

Carry the memory id through viewer URLs (memoryId query param) and prefer the occurrence inside that memory when resolving the viewer position, falling back to the old first-match behavior for deep links without memoryId.

Verification

  • TDD: new unit tests for findMemoryAsset duplicate-asset scoping + component tests for the URL wiring (watched fail pre-fix, pass post-fix)
  • Full web unit suite green (260 files / 3,408 tests), tsc, svelte-check, eslint, prettier clean
  • End-to-end repro on an isolated stack through the real memory-generation pipeline (birthday person + photos on today's day-of-year across 4 years):
    • pre-fix: viewer ping-pongs between two birthday assets, never reaches "1 year ago"
    • post-fix: birthday → 1 year ago → … → 4 years ago → clean stop, no loop

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
@Deeds67 Deeds67 added the changelog:fix Bug fix for changelog label Jul 16, 2026
@Deeds67
Deeds67 merged commit 0c603f1 into main Jul 16, 2026
43 of 44 checks passed
Deeds67 added a commit that referenced this pull request Jul 17, 2026
…#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
Deeds67 added a commit that referenced this pull request Jul 20, 2026
…#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
Deeds67 added a commit that referenced this pull request Jul 21, 2026
…#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
Deeds67 added a commit that referenced this pull request Jul 22, 2026
…#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
Deeds67 added a commit that referenced this pull request Jul 22, 2026
…#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
Deeds67 added a commit that referenced this pull request Jul 23, 2026
…#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
Deeds67 added a commit that referenced this pull request Jul 23, 2026
…#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
Deeds67 added a commit that referenced this pull request Jul 24, 2026
…#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
Deeds67 added a commit that referenced this pull request Jul 25, 2026
…#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
ya4ept pushed a commit to ya4ept/Noodle_gallery that referenced this pull request Jul 30, 2026
…noodle#790) (open-noodle#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
Deeds67 added a commit that referenced this pull request Aug 10, 2026
…#791)

The memory viewer identifies its position by asset id alone: navigation
round-trips through the URL and findMemoryAsset resolves the id to its
first occurrence across all memories. Rule memories (e.g. birthday) can
contain assets that also appear in on-this-day memories, so advancing
past a duplicated asset snapped the viewer back to the earlier memory
and looped forever.

Carry the memory id through viewer URLs (memoryId query param) and
prefer the occurrence inside that memory when resolving the position,
falling back to the old first-match behavior for deep links.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog:fix Bug fix for changelog 🖥️web

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] Memories broken in case of birthday

1 participant