Commit Graph

2580 Commits

Author SHA1 Message Date
Scott Idem
a37866e5bb fix(pres_mgmt): presenter QR follows session QR global-default pattern
show__presenter_qr (admin) is meant to be the global default for everyone,
signed in or not. show_content__presenter_qr is a trusted-staff-only local
override for when the admin hasn't enabled it globally. Presenter QR was
still on the old logic requiring show_content__presenter_qr to also be
true even when the admin enabled it for everyone — non-trusted users
(presenters) have no way to set that flag, so QR never appeared for them.

- presenter_view.svelte: generation effect + display block now use
  show__presenter_qr || (trusted_access && show_content__presenter_qr),
  matching the session_view.svelte fix from earlier today
- presenter_page_menu.svelte: QR toggle was gated to administrator_access,
  hiding it from plain Trusted onsite staff; loosened to trusted_access
  and dropped the redundant `|| trusted_access` (now only shown when
  admin hasn't already enabled QR globally)
- ae_comp__events_menu_opts.svelte: both session and presenter QR toggles
  were visible to all authenticated_access users whenever admin had
  enabled QR globally, even though the toggle had no effect for them;
  now gated to trusted_access && !show__*_qr, matching session_page_menu.svelte
- Log the fix in PROJECT__AE_Events_PressMgmt_Config_Cleanup.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 12:14:24 -04:00
Scott Idem
2e4547f433 pres_mgmt: fix session QR never showing for POCs/presenters
The condition (show__session_qr || trusted_access) && show_content__session_qr
required the local per-browser toggle to also be true. Non-trusted users
(POCs, presenters) have no way to set it, so QR never appeared even when
admin had enabled it in Config.

New logic: show__session_qr alone is sufficient to generate and display the QR.
show_content__session_qr is now a staff-only override for when admin has NOT
enabled QR globally (allows trusted users to force it on per-browser).

Also: add QR Code toggle to session page Options modal (Display section),
visible to trusted staff only when admin has not already enabled it globally.
2026-06-16 12:02:03 -04:00
Scott Idem
d75c4bbb9f pres_mgmt: fix show__session_qr / show__presenter_qr never syncing
Both keys were inside the lock_config conditional block, so they only
synced when lock_config=true. As opt-in feature enables (like show__copy_access_link)
they should always sync on event load — moved to the always-synced block.
2026-06-16 11:53:58 -04:00
Scott Idem
7335721f6d pres_mgmt: fix QR code display not respecting remote show__session_qr / show__presenter_qr
Gate QR generation effect and display blocks on the remote admin enable flag:
- session_view: effect and display both check show__session_qr || trusted_access
- presenter_view: generation effect and await block check show__presenter_qr || trusted_access
Previously only the toggle buttons were gated; the actual QR content rendered
regardless of the remote config if show_content__*_qr was already true in localStorage
2026-06-16 11:49:15 -04:00
Scott Idem
2364c0edfb pres_mgmt: config schema cleanup phase 2
- Add show__session_qr + show__presenter_qr to PressMgmtRemoteCfg and sync function;
  QR toggles now gated on remote admin enable (trusted_access can still override)
- Remove hide__launcher_link_legacy everywhere (Flask launcher fully retired)
- Remove limit__options (YAGNI)
- Implement limit__navigation: hides Session Search nav link for non-trusted users
- Wire hide__report_kv into reports page: all 8 report tabs now use synced store
  with canonical slug names and edit_mode bypass; config UI now uses structured
  toggles instead of raw JSON textarea
- Gate hide__launcher_link local toggle on show__launcher_link || trusted_access
- Config UI: add show__session_qr + show__presenter_qr to opt-in features section
- Menu opts: add Query Limits / Display & Search / Staff Options section labels
- Bump AE_PRES_MGMT_LOC_VERSION to 2 (schema change forces localStorage reset)
- svelte-check: 0 errors
2026-06-16 11:39:47 -04:00
Scott Idem
a47a2103eb fix(pres_mgmt): make POC list/table column a real per-event config
show__session_li_poc_field was local-browser-only and the session list
prop computation ignored the admin's hide__session_poc master switch
entirely, so disabling POC for an event didn't hide the column if a
user's browser had it toggled on.

- Add show__session_li_poc_field to PressMgmtRemoteCfg + Config page UI
  (Session Field Visibility) + sync_config__event_pres_mgmt() lock-synced
  block, so it's admin-configurable per event like the other display flags
- Fix list/table column visibility to hide__session_poc || !show__session_li_poc_field
  in pres_mgmt/+page.svelte and locations/ae_comp__event_location_obj_li.svelte
- Remove the now-redundant local "Show/Hide POC Column" toggle buttons from
  ae_comp__events_menu_opts.svelte and event_page_menu.svelte
- Log the fix in PROJECT__AE_Events_PressMgmt_Config_Cleanup.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 10:18:10 -04:00
Scott Idem
0954369ef0 Time to wrap up. More style improvements. 2026-06-15 18:17:21 -04:00
Scott Idem
2f2e9d554a The copy link now looks better 2026-06-15 18:10:37 -04:00
Scott Idem
d193004882 More subtle style clean up 2026-06-15 18:05:14 -04:00
Scott Idem
8b1bf64740 Making things look nicer. AI is still not good at this. 2026-06-15 17:59:58 -04:00
Scott Idem
4c210e3e36 feat: email fallback and consistent auth checks across presenter components
ae_comp__event_presenter_obj_li.svelte:
- Email Access Link now shows for presenter.email when person_primary_email is
  null (same fallback logic as +page.svelte). Passes email as person_id when no
  Person record exists. Uses person_passcode ?? passcode.
- Visibility gate changed from administrator_access to trusted_access so staff
  signed in via any method can still send links (was blocking non-admin staff).
- Icon changed to class="mr-1" for consistency.

presenter_view.svelte:
- Email field <li>, passcode <li>, and biography textarea disabled now all check
  auth__kv.presenter[email] as a secondary key alongside auth__kv.presenter[id],
  matching the pattern established in presenter_page_menu.svelte. Presenters who
  signed in via email identity (no Person record) can now see and edit their own
  fields without needing a Person record link.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 17:22:23 -04:00
Scott Idem
a784395d7b fix: consistent Lucide icons and auth checks on all Agreed buttons
session_view.svelte: replaced raw Unicode ✓/✗ in hardcoded color spans with
Check/X Lucide components (class="mr-1") matching the app icon pattern.

ae_comp__event_presenter_obj_li.svelte: same icon cleanup (removed bg-red-500,
px-1, text-green-500 etc). Also brought disabled conditions in line with
presenter_page_menu.svelte — now checks auth__kv.presenter by both
event_presenter_id and email, plus person_id match, so multi-session and
email-identity presenters can interact with their Agreed buttons from the list.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 17:15:37 -04:00
Scott Idem
06f52bae34 fix: clean up Agreed/Not Agreed button icon classes
Icons now use class="mr-1" consistent with all other Lucide icons in the
codebase. Removed hardcoded text-green-500 on Check and bg-red-500/text-white
on X — the button's ae_btn_success_filled/ae_btn_warning_filled classes already
handle theming in both light and dark mode via Skeleton presets.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 17:09:41 -04:00
Scott Idem
affbd0dc20 feat: use email as identity anchor for presenters without Person records
For events like LCI where ~75% of presenters are not in iMIS and have no Person
record, person_id on the presenter is null. Email (from the spreadsheet import)
is now the fallback identity throughout the sign-in flow:

- expand_auth_for_person: detects email via '@', routes Dexie and API lookups to
  presenter.email field instead of person_id. Keys auth__kv.presenter by BOTH
  event_presenter_id and email so any sibling presenter record with the same email
  auto-unlocks without per-ID lookups.
- Copy Access Link button: now visible for any presenter with person_id OR email.
  URL uses person_id ?? email and person_passcode ?? passcode as fallbacks.
- Email Access Link button: now visible for person_primary_email OR email. Sends
  to the best available address; passes email as person_id when no Person record.
- presenter_agree_enabled: checks auth__kv.presenter[email] as a second key so
  the Agreed button unlocks across all sessions for the same email identity.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 17:02:29 -04:00
Scott Idem
28025df038 feat: auto-expand presenter auth to all roles at sign-in
When a presenter or session POC signs in via their access link, expand_auth_for_person
now queries both Dexie (warm cache) and the API in parallel so that cold-cache sessions
are covered. All presenter records and POC sessions for the same person_id in the event
are granted auth in one shot — a multi-session presenter no longer needs to click every
individual link.

Agreed button now also unlocks via person_id match (not only auth__kv.presenter[id]),
covering the case where a presenter signed in via a different session's link and wasn't
individually in auth__kv for this record yet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 16:51:22 -04:00
Scott Idem
01b1729a67 feat(pres_mgmt): auto-expand auth for all presenter/POC roles on sign-in
A person signing in via a single email link previously only got auth for
that one event_presenter_id or event_session_id. Presenters/POCs in
multiple sessions had to click a separate link per role.

On sign-in, expand_auth_for_person() queries Dexie for all presenter
records and POC sessions this person holds in the event and pre-populates
auth__kv.presenter, auth__kv.presentation, and auth__kv.session for all
of them. Runs as fire-and-forget — benign no-op on cold cache since
person_id matching in auth checks provides fallback coverage.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 15:24:55 -04:00
Scott Idem
b90daa0a43 Cleaning things up... again. I will have to come back to this again later probably. 2026-06-15 15:13:09 -04:00
Scott Idem
37c8e20302 fix(pres_mgmt): remove auth gate from presenter email access link button
A signed-in POC/chair/moderator who has session auth was blocked from
seeing the Email Access Link button because presenter_is_authed includes
auth__kv.session[session_id]. POCs need to help presenters sign in
regardless of their own auth state.

show__email_access_link (staff-only feature toggle) is the correct gate.
No auth gate needed — same pattern as the session POC email button.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 14:56:55 -04:00
Scott Idem
6ab4166da0 fix(pres_mgmt): decouple email access link buttons from require_agree flags
Presenter email button: removed dependency on require__presenter_agree,
fixed auth gate that blocked trusted staff (presenter_is_authed includes
trusted_access, so !presenter_is_authed always hid the button from staff).
New condition: show when email feature is on AND person has email AND
(staff OR presenter not yet authed).

Session POC email button: removed dependency on require__session_agree.
Staff need to send sign-in links regardless of whether an agreement form
is in use. Added confirm dialog and descriptive title attribute. Updated
copy-link btn_title for consistency.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 14:43:41 -04:00
Scott Idem
04ae723309 fix(pres_mgmt): restore Add Person and Save Biography on presenter page
Three regressions in presenter_view.svelte:

- update_ae_obj__event_presenter calls for "Add Person" and "Save
  Biography" were missing event_presentation_id. The function falls
  back to events_slct.event_presentation_id which is never set on
  this page, so both calls returned null silently.

- "Add Person" confirm dialog showed null for the presenter's name
  because it referenced person_given_name (the linked person's field,
  which is null when no person is linked) instead of given_name (the
  presenter's own field).

Also: Re-link person list limit raised to 1000 (matching session POC
pattern) and added WHY comment explaining the admin-only re-link
restriction.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 14:09:10 -04:00
Scott Idem
b6d162c66e Minor style changes 2026-06-15 13:23:58 -04:00
Scott Idem
fa30acf31c Minor improvements for assigning a POC to a Session. 2026-06-15 12:57:41 -04:00
Scott Idem
03b3c84921 docs: archive Field Editor V3 project (complete), update Pres Mgmt status (~70% with regressions) 2026-06-12 17:54:38 -04:00
Scott Idem
e89c982022 docs: archive V3 CRUD upgrade project (100% complete) 2026-06-12 17:46:18 -04:00
Scott Idem
c6ef729c55 docs: audit and archive completed Journals and Badges projects 2026-06-12 17:35:02 -04:00
Scott Idem
fd7ccd7ecc docs: normalize Pres Mgmt cleanup formatting 2026-06-12 17:10:31 -04:00
Scott Idem
7831179970 docs: eighth-pass classify remaining active references 2026-06-12 17:07:57 -04:00
Scott Idem
75e7ca541a docs: seventh-pass archive unsafe legacy references 2026-06-12 17:07:03 -04:00
Scott Idem
e6fb4b289f docs: sixth-pass project routing and link validation 2026-06-12 17:05:13 -04:00
Scott Idem
1e3f541a39 docs: fifth-pass guide metadata and doc ownership cues 2026-06-12 16:58:23 -04:00
Scott Idem
e966261324 docs: fourth-pass metadata normalization and archive linking 2026-06-12 16:54:34 -04:00
Scott Idem
67d2607da1 docs: third-pass overlap consolidation and guide scoping 2026-06-12 16:53:35 -04:00
Scott Idem
7192cbc0af docs: second-pass archive and naming normalization 2026-06-12 16:50:56 -04:00
Scott Idem
a227c6aaa7 docs: restructure bootstrap, add module references, and normalize docs 2026-06-12 16:48:35 -04:00
Scott Idem
e05602b87b fix(pres_mgmt): restore POC + Presenter sign-in email and copy link flows
POC (session) sign-in was silently broken:
- sign_in_out.svelte calls session_sign_in() only when session_id is a query
  param; the URL was missing &session_id=... so the function never fired.
- Fixed in: email_sign_in__event_session URL and poc_sign_in_url derivation
  in session_view.svelte.

Presenter email routed to wrong page:
- email_sign_in__event_presenter built a URL to /presenter/[id] which has no
  sign-in handler. Changed to route to /session/[session_id] (same as the
  existing copy-link on the presenter page), including presenter_id and
  presentation_id params so presenter_sign_in() fires correctly.

Multi-session/multi-presentation person-centric auth:
- poc_is_authed in session_view.svelte now also checks
  auth__person.id === poc_person_id, so a POC signed in via any of their
  session links is automatically auth'd on all sessions where they are the POC.
- presenter_is_authed derived bool added to presenter page; includes person_id
  match so a presenter is recognised on all their presentations after one
  sign-in. All file upload and file list auth gates now use it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 16:27:45 -04:00
Scott Idem
10f7f04fbc docs: fix bootstrap — remove JWT Bearer claim; add mistakes 16-17; add pres_mgmt reading entry
- Auth row in stack table wrongly said "JWT Bearer is auto-injected" — this project
  uses custom headers only (x-aether-api-key + x-account-id, NOT Bearer tokens)
- Mistake #16: $ sigil on plain prop value → store_invalid_shape at runtime
- Mistake #17: *_json / *_kv_json columns start as null — require ?. and ?? {} guards
- Renumbered old #16 (service worker) to #18
- Reading order: added Pres Mgmt module doc pointer

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 16:19:52 -04:00
Scott Idem
94bdeb9a26 fix(pres_mgmt): guard poc_kv_json null access in POC profile and agree modals
poc_kv_json is null when a session has never had POC data saved. Any bracket
access on it crashed immediately on modal open. Fix:
- Reads: use ?.[poc_type] optional chaining everywhere (checkboxes, biography_updated_on)
- Writes: initialize from a shallow copy of poc_kv_json ?? {} before indexing into it,
  so the first save on a fresh session creates the structure rather than throwing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 15:55:25 -04:00
Scott Idem
080ad06a45 fix(pres_mgmt): stop treating lq__event_session_obj prop as a Svelte store in POC modals
Both ae_comp__event_session_poc_profile and ae_comp__event_session_poc_form_agree used
$lq__event_session_obj with the $ sigil throughout, expecting a store subscription. They
receive a plain resolved value from session_view.svelte, so Svelte threw store_invalid_shape
on mount. Replace all $lq__event_session_obj → lq__event_session_obj in both files.

Also clean up poc_profile: remove event_session_id_random (legacy alias) → event_session_id
in the auth check and the biography save call.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 15:53:13 -04:00
Scott Idem
45f8bb5e58 fix(pres_mgmt): restore session view — name always visible, POC in hero card, email/copy links
- session_view.svelte: session name/code were only rendered in edit_mode — non-editors
  saw a blank card. Now always visible; edit_mode just wraps them in field editors.
- Restructured hero card as a <ul> with datetime, room, and POC as rows inside the card.
  POC no longer floats below as a disconnected block.
- Dynamic POC label (label__session_poc_name) used throughout: row label, modal titles,
  fallback text, and editor label — no more hardcoded "Host:".
- POC "Select Person" flow: gate select editor on person_options_loaded to prevent empty
  dropdown on open; button reads "Reload Person" after list is loaded.
- Restored email sign-in link button in POC row with idle/sending/sent/error feedback.
  Shown when require__session_agree && show__email_access_link && poc_person_primary_email.
- Restored inline copy-access-link for trusted staff (show__copy_access_link).
- session_page_menu.svelte: fix event_session_id prop — was passing event_id instead of
  event_session_id, breaking the Sign_in_out auth grant.
- ae_comp__event_session_poc_profile.svelte: migrate run() to $effect, fix poc_person_id_random
  → poc_person_id, fix events_slct reference in copy link URL.
- +page.svelte: add pres_mgmt config sync so session pages opened directly by URL get
  correct hide__session_poc and other remote config values.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 15:15:58 -04:00
Scott Idem
3085d1dc63 docs: update IDAA idaa_loc migration project doc
Rewrote PROJECT__IDAA_Stores_Svelte5_Migration_2026.md with complete
detail: full 29-file consumer inventory with hit counts per module,
exact files that only reference the localStorage key string (no changes
needed), store_versions.ts wipe note, explicit Phase 1 ordering, test
seed guidance, and updated Risk Register including R3 nested-object
merge gap.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 17:33:58 -04:00
Scott Idem
7fc073053b feat(idaa): add PersistedState store for idaa_loc (not yet wired in)
Creates ae_idaa_stores__idaa_loc.svelte.ts — the Svelte 5 PersistedState
replacement for the idaa_loc persisted() store in ae_idaa_stores.ts.

Mirrors the exact shape of idaa_local_data_struct with full TypeScript
interfaces (IdaaArchivesLoc, IdaaBbLoc, IdaaRecoveryMeetingsLoc,
IdaaLocState). Drops __version, name, and title (not runtime state).

Same localStorage key (ae_idaa_loc) — existing data loads cleanly.
Not wired into consumers yet; pending review before migration.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 17:22:54 -04:00
Scott Idem
582b43da34 fix(types): add file_display_overrides + launch_profiles to LauncherLocState
Both fields were being written to launcher_loc.current dynamically and
read back via 'as Record<string, unknown>' casts because they were absent
from the LauncherLocState interface and launcher_loc_defaults.

file_display_overrides: Record<string, 'extend' | 'mirror' | 'none'>
  — per-device display override map keyed by event_file_id.
  — local-only workaround until event_file.cfg_json is added on backend.
  — TODO comment preserved; migrate once the backend column exists.

launch_profiles: Record<string, Partial<LaunchProfile>> | null
  — local per-device launch profile overrides (device API config takes
    priority; these override the built-in DEFAULT_LAUNCH_PROFILES).

Defaults added to launcher_loc_defaults ({} and null respectively).
All 3 type casts in launcher_file_cont.svelte removed.
2026-06-11 17:17:29 -04:00
Scott Idem
98e31f1528 docs: update docs to reflect events store migration completion
BOOTSTRAP__AI_Agent_Quickstart.md: rewrite store reactivity trap section
to distinguish events sub-stores (PersistedState, fine-grained) from
ae_loc/idaa_loc (svelte-persisted-store, coarse). Add import/read/write
syntax examples and pointer to migration doc.

PROJECT__Stores_Svelte5_Migration.md: rewritten to reflect events module
fully complete; documents established PersistedState pattern with canonical
examples; tables show all 5 sub-stores done + events_loc retired.

TODO__Agents.md: events migration marked complete (2026-06-11); idaa_loc
and ae_loc listed as remaining work; stale events_loc file_display_overrides
ref fixed.

tests/README.md: replace Leads-only store migration note with full events
sub-store table, localStorage keys, and explanation of PersistedState
deserialization (no __version guard needed).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 16:50:06 -04:00
Scott Idem
573d20e574 feat(stores): retire events_loc — Svelte 4 persisted store fully replaced
events_loc has been completely removed after migrating all consumers:

- EVENTS_MODULE_TITLE constant replaces $events_loc.title (was always
  the static default 'OSIT\'s Æ Events', never written dynamically)
- events/+layout.svelte: qry__* writes moved to events_sess; stale-deploy
  ver check block removed (store_versions.ts handles this already)
- 3 stale pres_mgmt stragglers fixed: device_obj_li, location_page_menu,
  event_reports_page_menu now use pres_mgmt_loc.current directly
- testing/+page.svelte: missed launcher ref fixed (launcher_loc.current)
- events_loc export, events_local_data_struct, persisted import, and
  AE_EVENTS_LOC_VERSION import all removed from ae_events_stores.ts
- events_loc import cleaned from all consumer files

events_sess (in-memory writable) stays in ae_events_stores.ts unchanged.
store_versions.ts keeps its _check_and_wipe('ae_events_loc') entry to
clean lingering old data from users' browsers.

svelte-check: 0 errors, 0 warnings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 16:41:06 -04:00
Scott Idem
83c9b9fd4f feat(stores): promote events auth state to Svelte 5 PersistedState
Creates ae_events_stores__auth.svelte.ts with PersistedState keyed
'ae_events_auth_loc' for auth__person and auth__kv (presenter/session
sign-in state). Migrated 10 component files from $events_loc.auth__* to
events_auth_loc.current.auth__*.

Also fixed stale pres_mgmt stragglers: $events_loc.pres_mgmt.* refs in
presenter_obj_li.svelte, presenter_page_menu.svelte, and [presenter_id]/
+page.svelte now use pres_mgmt_loc.current.* directly.

show_details boolean moved from events_loc to leads_loc (it belongs in
the leads module — one bind in ae_tab__manage.svelte).

auth__person, auth__kv, show_details, events_cfg_json, event_id removed
from events_local_data_struct. events_loc now only carries ver, title,
and qry__* prefs.

svelte-check: 0 errors, 0 warnings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 16:19:49 -04:00
Scott Idem
27c775d816 feat(stores): promote launcher_loc to Svelte 5 PersistedState
Creates ae_events_stores__launcher.svelte.ts with PersistedState keyed
'ae_launcher_loc', following the same pattern as badges, leads, and
pres_mgmt. All 28 launcher component files migrated from
$events_loc.launcher.* to launcher_loc.current.*.

events_local_data_struct in ae_events_stores.ts now carries no sub-module
objects — all four sub-modules (badges, launcher, leads, pres_mgmt) are
authoritative in their own stores. Session state (events_sess.launcher)
is unchanged.

svelte-check: 0 errors, 0 warnings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 16:00:40 -04:00
Scott Idem
5823f18161 chore(stores): remove migrated sub-objects from events_loc persisted struct
badges, leads, and pres_mgmt have each been promoted to their own
PersistedState stores (ae_badges_loc, ae_leads_loc, ae_pres_mgmt_loc).
Remove them from events_local_data_struct and drop the now-unused
*_loc_defaults imports so events_loc only carries what it owns.

launcher stays — not yet migrated (244 active refs).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 15:41:54 -04:00
Scott Idem
94e4fad061 chore(stores): remove unused default properties from ae_loc, ae_sess, events_slct, idaa_loc
Audited all three legacy persisted-store files for properties with zero
references in src/. Removed ~119 lines of dead defaults:

- ae_loc: qr_scanner_version, ds, entire mod block (archives/events/journals/posts/sponsorships)
- ae_sess: hub, mod block (archives/events/journals/posts/sponsorships/testing), download
- events_loc: ds
- events_sess: ds_loaded
- events_slct: abstract_*, badge_template_*, device_*, exhibit_tracking_*, lq__presenter_obj
- idaa_loc: ds, idaa_cfg_json, top-level qry__* (each submodule has its own), novi_rate_limited_until, novi_*_base_url (read from site_cfg_json, not idaa_loc)

No version bumps needed — removing fields from defaults is backwards-compatible.
svelte-check passes: 0 errors, 0 warnings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 15:29:48 -04:00
Scott Idem
9a1ba02b59 Can not use these links within an iframe... 2026-06-11 15:08:50 -04:00
Scott Idem
05841350fe feat(idaa): add /idaa/clear-caches page for Novi iframe cache reset
Clears all IDB databases, localStorage, and sessionStorage for the
prod-idaa.oneskyit.com origin when loaded as an iframe inside www.idaa.org.
Targets the partitioned storage bucket used by IDAA Novi iframes — direct
navigation to the site clears a different partition and has no effect.

Uses Novi-safe styling (explicit bg/text surfaces, no bare h1 elements,
inline styles on links) to survive Bootstrap v3 CSS injected by Novi.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 13:01:34 -04:00