# Event management — local learner walkthrough, 24 September 2026

Status: complete for the course’s local acceptance scope. 28 of 36 courses verified.

## Verified with the running application

- Created **Tutorial Makers Conference 2026** through Studio. The original generic repository Save failed; the event form and list now use the dedicated CRM event create/update service. Saved event was read back from the real database.
- Reproduced Publish → **Cannot modify enriched data**. The lifecycle service now fetches a raw record before writing. Real publish returned 201 and persisted `published`; Studio's Publish also showed success.
- Reproduced Nov 14–15 displaying as Nov 13–14. Event detail now shows the selected Nov 14–15 calendar dates. Dashboard has the same fix applied; its fresh browser verification is pending.
- Reproduced stale **Draft** after successful publication. Event detail refresh now explicitly bypasses the record cache. Its edit handler also uses the dedicated event service. Fresh browser verification is pending.
- Created **Tutorial General Admission** (free, capacity 300, one per customer, main-hall access) and **Tutorial Workshop Pass** (USD25, capacity40, main-hall/workshop-lab access) through Studio. Both persisted with re-entry enabled. No paid transaction was attempted.
- Configured both 17:00 days, two zones, entrance/workshop checkpoint type restrictions and an online-pickup registration desk using the course's supported raw-record update.
- Registered Zara and Kofi separately through the documented public purchase endpoint. Both returned201, paid bookings totaling0 and one confirmed ticket each. Both histories were empty and neither had a fulfillment timestamp.
- These registrations retained Studio's full date/time fields. Calendar generation no longer fails by concatenating a date with another full date/time.

## Source fixes and checks

`events/event.service.ts`: writable records for publish/live/complete; preserve existing custom day hours; initialize new days from configured clocks; calendar generation accepts form date/time or clock values and uses the event timezone; string venue/address supported.

Studio event components: dedicated event service saves; calendar-day formatting; fresh event-detail reads after changes. Dashboard and detail refresh follow-up are awaiting browser retest.

Backend TypeScript no-emit check passed. Focused regressions cover create/update routing, failure propagation, publishing raw records, day-hour preservation, winter/summer calendar offsets, invalid clocks and calendar-day display in America/Chicago. These checks supplement the live tests; they do not substitute for the remaining mobile workflows.

Evidence: [events-local](assets/events-local/). `03-publish-fixed.json`, `06-configured.json` and `07-registrations.json` are sanitized live results. Full tickets and tokens remain in private local state, outside documentation.

## Still to verify

Fresh Studio lifecycle status/dashboard/edit; speaker and session selectors/save; booking summaries; native ticket pricing; admission, denied workshop access, checkout and re-entry; desk fulfillment attribution; refreshed course instructions and screenshots. Physical camera scanning/printing and iOS have not been exercised.

## Further live verification

- Booking mapping corrected to `eventId` / `productItems`, with ticketTypes included in the store selector. Both global and event-scoped Bookings now show two paid-zero bookings, the correct event, and one General Admission ticket per buyer. Screenshot10.
- DataSelector no longer erases a valid email when a later configured display field is absent. Nia was selected through the repaired dropdown and saved as a confirmed speaker. The participant list now reads actual `customerData.data` enrichment and displays Nia Tutorial/email. Screenshot11. Three focused selector regressions passed.
- Created the 11:00–12:00 talk through Studio and linked Nia using **Participants**. The actual current schema uses `participants`, not the older manuscript's `speakers` field. Fixed the visually enabled Public toggle not being saved when untouched. Reopened, edited and saved the session; real readback has `isPublic: true` and Nia's participant ID.
- Native price/availability mapping fixed, three Flutter tests passed, local debug APK installed. Actual screen shows Free/298 available and USD25.00/40 available. Screenshot mobile-local/event-price-fixed.png.
- Native Main hall first admission succeeded; Workshop lab refused General Admission; Main hall checkout succeeded. Sanitized database readback confirms entry and exit, while Kofi remains confirmed with no movement. Screenshots mobile-local/event-first-main-hall.png, event-workshop-denied.png, event-main-hall-checkout.png.
- Added selected event ID to native entry/exit requests and server comparison before mutation. Live API mismatched-event check-in and checkout both refused; Kofi's status/history unchanged. `09-event-boundary.json`. Updated APK installed, emulator API reverse now3311→3312. Positive return admission with that build is in progress.
- Studio check-in/checkout now treat `success: false` as denial instead of a successful HTTP response. Latest checkout UI change still needs browser retest.

Backend no-emit compilation passed after the boundary guard. Documentation build passed after the first course corrections. Remaining: positive/repeat return, disabled re-entry refusal/restoration, registration desk fulfillment, fresh Studio denied response, final course/production refresh and evidence links.

## Final acceptance

All core course actions now passed locally. The updated native scanner accepted a return and then a repeat without an intervening exit when re-entry was enabled; disabled re-entry produced ALREADY CHECKED IN, and the rule was restored/reopened as true. Kofi was fulfilled once through the phone's Desk / Point ID field. Saved state has desk-1, staff identity and timestamp; ticket remains confirmed with no admission history. No tickets were reset or re-created.

The web desk found Kofi. Actual invalid-code check-in and unadmitted Kofi checkout displayed DENIED, not success. Real successful/denied/unique-attendee statistics and zone occupancy now render from the correct response fields. Repeated entries no longer inflate occupancy: latest successful direction per ticket counts one person once; four regressions and real occupancy readback prove Main hall remains1. The event edit form reads actual session/participant totals; final browser shows1/1. Street address edit saved and reloaded successfully.

Fresh assets17-final-readback.json and18-programme-counts-fixed.png close the last checks. Backend no-emit compilation passed after all backend changes. Three Flutter pricing cases and all event/selector/occupancy checks pass. Appmint docs build227pages and all44 course image URLs returned200 in Chromium. Manuscript and production guide now use current fields, working UI and actual screenshots. No finished video is claimed.

Earlier progress sections preserve diagnostic chronology; their pending statements are superseded by this final acceptance. Optional paid checkout, automatic community enrollment, venue-stock generation, physical camera/printer and iOS branches were not claimed as exercised course requirements.
