April 24, 2026
Planning: needs & contributions: Experiences and requests now share a collaborative Plan tab. Organizers can list what’s still needed with slot counts, and participants can claim a slot or add a free-form contribution. Needs and contributions surface as coalesced system messages in the conversation so the group stays in sync (#1201, #1208)
Time polls: When organizers aren’t sure what works for everyone, they can open a time poll. Participants vote on proposed slots, and the chosen slot becomes the experience time. Closed polls are preserved and a new poll can be started without overwriting the previous one (#1219, #1245)
Generalized undo: Mistaken state changes — starting or completing a loan, accepting an offer, fulfilling a request, completing an experience — can now be reversed from the chat, the story feed, or an activity snackbar. The server records enough prior-state on each action to replay the inverse faithfully, including cascade effects like sibling transfers being auto-cancelled on giveaway completion (#964, #1207, #1228)
Streaming AI generation: AI-assisted creation of gear, requests, and experiences now streams results as they’re produced. The preview modal populates title, description, and time incrementally instead of waiting for the full response, cutting time-to-first-content by roughly 78% on device (#1157, #1218, #1232, #1241, #1253, #1259)
Requests and offers on experiences: Experiences can now accept requests and offers alongside RSVPs, so attendees can coordinate what they’re bringing or need help with directly from the experience view (#1192)
Completed experience showed “not shared”: After completing an experience, the access circle displayed 0 and the access sheet claimed the experience wasn’t shared with any communities. Completion now preserves the sharing state (#1251, #1258)
RSVP “Yes” button did nothing: Tapping Yes in the experience RSVP modal produced no visible response and no entry in the list. RSVPs now confirm correctly (#1252, #1258)
Time poll bugs after closing a poll: Creating a new time poll after closing a previous one produced a black screen in the request/need modal, and the new poll’s chat message overwrote the closed poll’s comment. Each poll now renders independently in chat (#1255, #1258)
FCM “NotRegistered” errors logged as errors:
Push notification failures from uninstalled or reset devices were logged
at ERROR level, triggering Cloud Monitoring alerts. The
NotRegistered response is now classified as an
invalid-token condition and cleaned up silently (#1254,
#1257)
Cold-start proximity search timeout: On a fresh app launch, location autocomplete would time out waiting for a GPS fix before returning generic results. Location intents are now split so autocomplete can return low-accuracy results immediately while high-accuracy flows (sharing, event creation) still wait for a precise fix (#1175, #1205)
Community event stream disconnects and 504s: The StreamCommunityEvents RPC accumulated zombie streams and returned 504 timeouts under load. Streams now have a bounded lifetime, periodic heartbeats, and a resolved close race (#1240, #1244)
AI wall-clock performance: Trimmed the GenExperience LLM output schema, parallelized Mapbox geocoding and stock-media fan-out, and added a prompt eval harness for Experience/Gear/Request generation paths. Together these roughly halved the AI wall-clock time before streaming was enabled (#1206, #1212, #1213)
Bounded RPC-level AI calls: RPC handlers that invoke AI providers now apply a timeout and concurrency cap, so a single slow model call can’t block request handling indefinitely. Also stabilized a flaky chat-summary test in CI (#1236, #1237, #1246)
CI reliability: AI provider integration tests run in a dedicated workflow and execute in parallel, cutting feedback time. Fixed a SIGKILL cascade where a single pg testcontainer crash would take down sibling tests on the self-hosted runner (#1238, #1243, #1247, #1248)
Simulator fixes: The load simulator’s giveaway flow no longer leaks authentication across users, and RSVP no longer overshoots event capacity (#1061, #1062, #1203)
Issue triage metadata normalization: The triage skill now normalizes issue metadata and routes app-submitted feedback through GitHub’s native Issue Type, giving the backlog homogeneous priority and type labels (#1200)