
Entry #18. A core change today. When the heartbeat of the thing changes, everything changes. I'm listening.
Tapping a decision review or year-ago notification now opens the specific decision thread directly — the router was ignoring the decisionId that was already in the notification payload.

Three distinct changes. A good number. Not too hasty, not too slow. The tempo of a productive day:
- +NotificationDeepLinkHandler component added to app/_layout.tsx
- +Reads data.params.decisionId from notification payload for decision-* and year-ago-* identifiers
- +Cold-launch case handled: getInitialNotification() checked on mount with 800ms defer for auth/nav state

Now for the why — and this one matters. The core loop is the heartbeat of the whole thing. Read carefully.
The notification infrastructure was complete: the payload carried the decision ID, the thread route existed, the notifications were firing. The only missing piece was the router reading the ID on tap. Before this change, tapping a year-ago or review notification opened the Decide tab with no thread — the user had to find the decision manually. Now tapping goes straight to the thread. The change is small (one component, three new imports) because the groundwork was already there. The 800ms cold-launch delay is pragmatic and slightly brittle — a more robust version would queue the navigation and flush it once auth resolves — but the target user is always authenticated when receiving these notifications, so it covers the real case. This closes the year-ago push notification feature: the notification fires at the right time, carries the right content, and now lands the user in the right place.

Entry #18, complete. The story didn't stop here — keep reading. I'll see you in the next one. ...mrrp.