What the September 2026 test passes fixed in the app and on the server, what is still open, and the dead code to ignore.
Source: TEST_EVENTOXYGEN_2026-09-03.md at the app root — a live pass at phone size against a local appengine, signed in as the demo customer, on the event "Open Source AI Meetup - San Francisco", followed by a second pass over the community features the same day. Fixes are in the working trees of event_app and appengine; nothing was committed or pushed as part of those passes.
Fixed on 2026-09-03: events
| Area | Symptom | Cause and fix |
|---|
| Schedule, People, ticket types, media | Schedule said "No sessions on this day"; People could be empty | The app navigates by the event slug but the server queried data.event with the raw route param, and sessions and participants are stored against the sk. resolveEventId() in events/events-client.service.ts now resolves either form for every event-scoped list. Media was unaffected because its storage path derives from event.data.name |
| Event home | Venue printed as a raw map {name: ExCeL London, …} | Joined as "ExCeL London, Royal Victoria Dock, London, UK" |
| My Events, event home, event detail | "Oct 8 – Oct 8, 2026" for a one-day event | Same-day range collapses to "Oct 8, 2026" |
| Drawer, My Events | The same event listed twice | One ticket referenced the event by slug, another by sk; EventProvider merges by the fetched sk |
| Participant profile | Sessions showed a raw session id | Ids resolved to titles through the event's sessions, including when the page opens with a full participant record (it used to return early) |
| Feed | A failed request rendered as "No posts yet" | Explicit "Couldn't load the feed" with Retry |
| Area | Symptom | Cause and fix |
|---|
| Comments (server) | "Database operation failed" after every comment, though the comment was saved | repository/update-partial wrapped Mongo operators such as $inc inside $set, and Mongo rejected the update. Twenty-nine call sites were affected. Operators are now hoisted to the top level of the update (repositories/repository.provider.mongodb.ts) |
| Likes (server) | A post could never show as liked | The feed looked up the viewer's reactions by data.author; reactions store data.reactor (community/community-post.service.ts) |
| Reaction counters (server) | Counts stuck at zero on some posts | updateReactionCount wrote a literal {$inc: n} object into reactionSummary.<type>, which then blocked every later increment. One $inc now updates both counters; the one corrupted demo post was repaired from its reaction records |
| Feed (app) | Liked and saved state never appeared | The feed was fetched without the customer token; useUserToken: true (services/api_service.dart) |
| Un-like (app) | Un-liking created a second reaction | The app sent type unlike; the server toggles on the same type, so it now always sends like |
| Post detail (app) | Like never updated, Save did nothing, Share reposted silently | Like and Save are driven by the server's answer; Share opens the same share sheet as the feed |
| Reposts (app) | A share rendered as an empty card | Embedded preview of the original (author, text, first image), tappable |
| Drawer (app) | The menu button on Inbox, Explore and Me opened nothing | Those screens have their own Scaffold; they now open the shell's drawer through shellScaffoldKey |
Verified working after the fixes: create post, like with count, comment thread, share with count, Connect → Pending, Connections screen, chat thread with images and a sent message, Notifications tab, bookmarks through the API.
Still open
- "My ticket" inside an event opens all tickets, not that event's.
- Large cover images render blank until loaded. The demo event's cover is a large signed PNG; there is no placeholder.
- My Events is slow in debug on web — 30 to 45 s, one event fetch per ticket. Worth measuring on a device.
- Debug-only layout assertions ("A Stack requires bounded constraints") on route transitions in the web debug build; release builds strip them. Origin not pinned down.
- Participants are fetched three times on event open (speaker, attendee, sponsor). By design, could be one call.
- No notifications are generated in demo for likes, comments or connection requests (
community_notification is empty), so the tab reads as empty there.
- Inbox data quirk: a Stowbo custody thread appears against the user's own name because the same account sits on both sides.
- Not exercised: accepting a request or replying from a second account, meeting booking end to end, media upload, follow from a profile.
Dead code and unimplemented features
| Item | State |
|---|
CustomerShell, CustomerHomeScreen, DiscoverScreen, AnnouncementsScreen, HaHoBottomNavigation | Unreachable from the live navigation graph |
ApiService.getSchedule | Defined; no caller |
| Drawer Settings and Help | Close the drawer |
| Search → People tab | Placeholder that falls back to pages |
| Push notifications, deep links | Not implemented; no FCM/APNs code, no URL schemes |
| QR scanner | Not implemented; the CustomerShell FAB is a TODO |
| Card payment on web | Throwing stub |
README.md | Untouched Flutter template |
Security notes
- Fast Login credentials are behind
kDebugMode in login_screen.dart.
- The feed, posts, comments, pages, people lookup and stories are public on the server; only writes and the viewer-specific fields need a token. Treat anything posted to a public page as public.