diff --git a/TODO.md b/TODO.md
index 087b418d..f682d7f1 100644
--- a/TODO.md
+++ b/TODO.md
@@ -49,6 +49,7 @@ This is a list of tasks to be completed before the next event/show/conference.
## 🛠️ DX & Tooling (MCP)
- [x] **V3 API Parameter Hardening:** Updated `search_ae_obj_v3` for URL serialization.
- [x] **GEMINI Context Standardization:** Deployed v1.2 Inverted Pyramid template.
+- [x] **Safe Workflow Strategy:** Implemented atomic edit -> format -> lint fix -> svelte-check cycle.
- [ ] **Payload Validation:** Create dry-run tool for Pydantic model checking.
---
diff --git a/src/lib/ae_core/ae_comp__site_config_editor.svelte b/src/lib/ae_core/ae_comp__site_config_editor.svelte
index 7b72e599..f1cf4546 100644
--- a/src/lib/ae_core/ae_comp__site_config_editor.svelte
+++ b/src/lib/ae_core/ae_comp__site_config_editor.svelte
@@ -4,6 +4,8 @@
* Specialized UI for managing site.cfg_json settings.
* Supports General, AI, Performance, and IDAA-specific configurations.
*/
+ import { Modal } from 'flowbite-svelte';
+ import { untrack } from 'svelte';
import {
Palette, Mail, Brain, Timer,
ShieldCheck, CodeXml, Save,
diff --git a/src/lib/element_qr_scanner_v2.svelte b/src/lib/element_qr_scanner_v2.svelte
index 91331e59..e9b299e3 100644
--- a/src/lib/element_qr_scanner_v2.svelte
+++ b/src/lib/element_qr_scanner_v2.svelte
@@ -557,12 +557,6 @@
align-content: stretch;
}
- .ae_element.qr_scanner div.qr_scanner_viewfinder {
- /* max-width: 100vw; */
- /* contain: content; */
- /* contain: contain; */
- }
-
.qr_scanner .qr_scanner_viewfinder {
/* outline: dashed medium blue; */
min-width: 400px;
diff --git a/src/lib/elements/element_input_files_tbl.svelte b/src/lib/elements/element_input_files_tbl.svelte
index a47e3040..7d1261be 100644
--- a/src/lib/elements/element_input_files_tbl.svelte
+++ b/src/lib/elements/element_input_files_tbl.svelte
@@ -422,11 +422,6 @@
font-size: smaller;
}
- .file_size,
- .file_type {
- /* font-size: smaller; */
- }
-
.file_hash {
font-family: 'Courier New', Courier, monospace;
}
diff --git a/src/routes/events/+layout.svelte b/src/routes/events/+layout.svelte
index 0ccd5994..eaf9660e 100644
--- a/src/routes/events/+layout.svelte
+++ b/src/routes/events/+layout.svelte
@@ -124,7 +124,7 @@
{#if $events_loc?.ver && $events_loc?.ver !== $events_sess?.ver}
-
diff --git a/src/routes/events/[event_id]/(badges)/badges/+page.svelte b/src/routes/events/[event_id]/(badges)/badges/+page.svelte
index 8c85b7d4..a1b6fbed 100644
--- a/src/routes/events/[event_id]/(badges)/badges/+page.svelte
+++ b/src/routes/events/[event_id]/(badges)/badges/+page.svelte
@@ -309,10 +309,10 @@
{#if $ae_loc.trusted_access}
- (show_create_badge_modal = true)}>
+ (show_create_badge_modal = true)}>
Add New Badge
- (show_upload_badge_modal = true)}>
+ (show_upload_badge_modal = true)}>
Upload Badge List
diff --git a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view.svelte b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view.svelte
index 18692171..053e9f48 100644
--- a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view.svelte
+++ b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view.svelte
@@ -458,7 +458,7 @@ onkeypress={() => {
// slct_this_badge = true
}} -->
-
+
- {
if ($events_loc.launcher.time_format == 'time_12_short') {
$events_loc.launcher.time_format = 'time_short';
diff --git a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_controller.svelte b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_controller.svelte
index 485c9567..40e6b5a1 100644
--- a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_controller.svelte
+++ b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_controller.svelte
@@ -49,7 +49,7 @@
-
{
if ($events_loc.launcher.ws_connect) {
$events_sess.launcher.trigger__ws_disconnect = true;
@@ -70,7 +70,7 @@
{/if}
-
{
$events_sess.launcher.controller_cmd = 'ae_refresh:now';
$events_sess.launcher.controller_trigger_send = 'trigger';
@@ -94,7 +94,7 @@
readonly={!$events_sess.launcher.controller_unlock_group_code}
ondblclick={() => $events_sess.launcher.controller_unlock_group_code = true}
/>
- $events_sess.launcher.controller_unlock_group_code = !$events_sess.launcher.controller_unlock_group_code}
class="btn btn-xs preset-tonal-surface"
title="Toggle Unlock"
diff --git a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_local_actions.svelte b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_local_actions.svelte
index e2f331f5..db3af833 100644
--- a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_local_actions.svelte
+++ b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_local_actions.svelte
@@ -76,7 +76,7 @@
-
($ae_loc.sys_menu.hide = !$ae_loc.sys_menu.hide)}
class="btn btn-xs preset-tonal-surface hover:preset-filled-primary-500"
title="Show/Hide Aether global system menu"
@@ -85,7 +85,7 @@
{$ae_loc.sys_menu.hide ? 'Show' : 'Hide'} Sys Menu
-
($ae_loc.debug_menu.hide = !$ae_loc.debug_menu.hide)}
class="btn btn-xs preset-tonal-surface hover:preset-filled-primary-500"
title="Show/Hide Aether global debug menu"
diff --git a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_native_os.svelte b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_native_os.svelte
index b7b97d10..c2a9f7b1 100644
--- a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_native_os.svelte
+++ b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_native_os.svelte
@@ -58,25 +58,25 @@
- native.open_folder($ae_loc.local_file_cache_path)}
class="btn btn-xs preset-tonal-primary hover:preset-filled-primary-500 justify-start"
>
Cache
- native.open_folder($ae_loc.host_file_temp_path)}
class="btn btn-xs preset-tonal-primary hover:preset-filled-primary-500 justify-start"
>
Temp
- native.window_control({ action: 'maximize' })}
class="btn btn-xs preset-tonal-surface hover:preset-filled-primary-500"
>
Maximize
- handle_system_action(native.window_control({ action: 'kiosk', value: true }), 'Kiosk Mode')}
class="btn btn-xs preset-tonal-surface hover:preset-filled-primary-500"
>
@@ -96,16 +96,16 @@
- handle_remote_control('prev')} class="btn btn-sm preset-tonal-secondary" title="Previous Slide">
+ handle_remote_control('prev')} class="btn btn-sm preset-tonal-secondary" title="Previous Slide">
- handle_remote_control('start')} class="btn btn-sm preset-tonal-success" title="Start/Resume Slideshow">
+ handle_remote_control('start')} class="btn btn-sm preset-tonal-success" title="Start/Resume Slideshow">
- handle_remote_control('stop')} class="btn btn-sm preset-tonal-error" title="Stop Slideshow">
+ handle_remote_control('stop')} class="btn btn-sm preset-tonal-error" title="Stop Slideshow">
- handle_remote_control('next')} class="btn btn-sm preset-tonal-secondary" title="Next Slide">
+ handle_remote_control('next')} class="btn btn-sm preset-tonal-secondary" title="Next Slide">
@@ -121,13 +121,13 @@
-
handle_system_action(native.set_display_layout({ mode: 'extend' }), 'Extend Display')}
class="btn btn-xs preset-tonal-surface hover:preset-filled-primary-500 justify-start"
>
Extend Mode
-
handle_system_action(native.set_wallpaper({ path: $ae_loc.site_header_image_path }), 'Wallpaper')}
class="btn btn-xs preset-tonal-surface hover:preset-filled-primary-500 justify-start"
disabled={!$ae_loc.site_header_image_path}
@@ -139,13 +139,13 @@
-
show_power_confirm = { action: 'reboot', label: 'Reboot Laptop' }}
class="btn btn-xs preset-tonal-warning hover:preset-filled-warning-500 justify-start"
>
Reboot
-
show_power_confirm = { action: 'shutdown', label: 'Shutdown Laptop' }}
class="btn btn-xs preset-tonal-error hover:preset-filled-error-500 justify-start"
>
@@ -164,7 +164,7 @@
placeholder="ls -la"
class="input input-sm grow text-[10px] preset-tonal-surface h-7"
/>
- {
test_cmd_result = 'Running...';
const res = await native.run_cmd({ cmd: $events_sess.launcher.manual_cmd || 'uptime' });
@@ -190,8 +190,8 @@
Are you sure you want to {show_power_confirm.action} this host machine?
-
show_power_confirm = null} class="btn btn-sm preset-tonal-surface">Cancel
-
show_power_confirm = null} class="btn btn-sm preset-tonal-surface">Cancel
+
{
const action = show_power_confirm?.action;
show_power_confirm = null;
diff --git a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_section.svelte b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_section.svelte
index 7d0f5387..1dba361a 100644
--- a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_section.svelte
+++ b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_section.svelte
@@ -61,7 +61,7 @@
-
- handle_test_action('Primary')}
class="btn btn-xs preset-tonal-primary hover:preset-filled-primary-500 justify-start"
>
Primary
- handle_test_action('Secondary')}
class="btn btn-xs preset-tonal-secondary hover:preset-filled-secondary-500 justify-start"
>
@@ -107,7 +107,7 @@
- handle_test_action('Refresh')}
class="btn btn-xs preset-outlined-surface-500 w-full text-[10px]"
>
@@ -124,7 +124,7 @@
- show_confirm = true}
class="btn btn-xs preset-tonal-warning hover:preset-filled-warning-500 justify-start"
>
@@ -133,7 +133,7 @@
-
+
Wipe Cache
@@ -190,8 +190,8 @@
Are you sure you want to perform this test operation? This demonstrate the standard confirmation pattern.
-
show_confirm = false} class="btn btn-sm preset-tonal-surface">Cancel
-
show_confirm = false} class="btn btn-sm preset-tonal-surface">Cancel
+
{ show_confirm = false; handle_test_action('Confirm'); }}
class="btn btn-sm preset-filled-warning"
>
diff --git a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_updates.svelte b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_updates.svelte
index 14c43f7c..690ad01b 100644
--- a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_updates.svelte
+++ b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_updates.svelte
@@ -91,7 +91,7 @@
{/if}
-
diff --git a/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte b/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte
index 8ed58e57..42627a3f 100644
--- a/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte
+++ b/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte
@@ -376,7 +376,7 @@
"
>
- {
$events_loc.launcher.hide__launcher_menu =
@@ -400,7 +400,7 @@
class="h4 text-center italic text-surface-600-400"
title="Location ID: {$lq__event_location_obj?.event_location_id} Name: {$lq__event_location_obj?.name}"
>
- {
$ae_loc.edit_mode = !$ae_loc.edit_mode;
@@ -537,7 +537,7 @@
class="slct_location_name transition-all duration-1000"
title="Location ID: {$lq__event_location_obj?.event_location_id} Name: {$lq__event_location_obj?.name} | Device ID: {$lq__event_device_obj?.event_device_id} Name: {$lq__event_device_obj?.name}"
>
- {
$ae_loc.edit_mode = !$ae_loc.edit_mode;
@@ -612,8 +612,7 @@
- ($events_loc.launcher.hide_drawer__cfg = false)}
class="btn btn-sm p-2.5 preset-tonal-error hover:preset-filled-error-500 transition-all duration-1000"
class:opacity-25={!$ae_loc.trusted_access}
@@ -686,7 +685,7 @@
Debug
- ($events_loc.launcher.hide_drawer__debug = true)}
class="mb-4 dark:text-white"
>
@@ -730,8 +729,7 @@
>
{$events_sess.launcher?.modal__title ?? 'Digital Poster Display'}
- {
$events_sess.launcher.modal__open_event_file_id = null;
@@ -743,7 +741,7 @@
{/snippet}
- {
$events_sess.launcher.controller_cmd = `ae_close:event_file_modal`;
$events_sess.launcher.controller_trigger_send = true;
@@ -780,7 +778,7 @@
{/if}
- {
$events_sess.launcher.controller_cmd = `ae_close:event_file_modal`;
$events_sess.launcher.controller_trigger_send = true;
@@ -802,7 +800,7 @@
Close Remote Poster Display Only
- {
$events_sess.launcher.modal__title = '';
$events_sess.launcher.modal__open_event_file_id = null;
diff --git a/src/routes/events/[event_id]/(launcher)/launcher_background_sync.svelte b/src/routes/events/[event_id]/(launcher)/launcher_background_sync.svelte
index 95cbc4a2..85ad683a 100644
--- a/src/routes/events/[event_id]/(launcher)/launcher_background_sync.svelte
+++ b/src/routes/events/[event_id]/(launcher)/launcher_background_sync.svelte
@@ -248,7 +248,7 @@
NATIVE SYNC MONITOR
- show_monitor = false} class="text-error-500 hover:text-error-400">×
+ show_monitor = false} class="text-error-500 hover:text-error-400">×
@@ -286,7 +286,7 @@
{/if}
{#if currently_syncing}
-
show_monitor = !show_monitor}
class="bg-black/80 text-white p-2 rounded-lg text-[10px] border border-primary-500 animate-pulse shadow-2xl pointer-events-auto transition-transform active:scale-95"
>
@@ -301,7 +301,7 @@
{:else}
-
show_monitor = !show_monitor}
class="w-8 h-8 opacity-0 hover:opacity-20 bg-primary-500 rounded-full pointer-events-auto flex items-center justify-center transition-opacity"
title="Toggle Sync Monitor"
diff --git a/src/routes/events/[event_id]/(launcher)/launcher_cfg.svelte b/src/routes/events/[event_id]/(launcher)/launcher_cfg.svelte
index 2377e5c9..af132990 100644
--- a/src/routes/events/[event_id]/(launcher)/launcher_cfg.svelte
+++ b/src/routes/events/[event_id]/(launcher)/launcher_cfg.svelte
@@ -66,7 +66,7 @@
Launcher Configuration
- ($events_loc.launcher.hide_drawer__cfg = true)}
class="btn btn-icon dark:text-white hover:bg-surface-500/10 transition-colors"
>
@@ -77,7 +77,7 @@
-
active_tab = 'system'}
class="btn btn-sm text-[10px] uppercase font-bold transition-all"
class:preset-filled-primary-500={active_tab === 'system'}
@@ -85,7 +85,7 @@
>
System
-
active_tab = 'sync'}
class="btn btn-sm text-[10px] uppercase font-bold transition-all"
class:preset-filled-primary-500={active_tab === 'sync'}
@@ -93,7 +93,7 @@
>
Sync
-
active_tab = 'general'}
class="btn btn-sm text-[10px] uppercase font-bold transition-all"
class:preset-filled-primary-500={active_tab === 'general'}
@@ -140,8 +140,7 @@
- ($events_loc.launcher.hide_drawer__debug = false)}
class="btn btn-sm preset-tonal-error hover:preset-filled-error-500 transition-all"
>
@@ -149,8 +148,7 @@
Open Debug
- location.reload()}
class="btn btn-sm preset-tonal-secondary hover:preset-filled-secondary-500 transition-all"
>
diff --git a/src/routes/events/[event_id]/(launcher)/launcher_file_cont.svelte b/src/routes/events/[event_id]/(launcher)/launcher_file_cont.svelte
index 1dd37775..f1b562d3 100644
--- a/src/routes/events/[event_id]/(launcher)/launcher_file_cont.svelte
+++ b/src/routes/events/[event_id]/(launcher)/launcher_file_cont.svelte
@@ -301,8 +301,7 @@
events_func.load_ae_obj_id__event_file({ api_cfg: $ae_api, event_file_id: event_file_obj?.event_file_id, log_lvl });
}}
>
- {
if (!event_file_obj?.open_in_os) ae_tmp.value__open_in_os = 'win';
else if (event_file_obj?.open_in_os == 'win') ae_tmp.value__open_in_os = 'mac';
diff --git a/src/routes/events/[event_id]/(launcher)/launcher_menu.svelte b/src/routes/events/[event_id]/(launcher)/launcher_menu.svelte
index 73980e3e..294e12a3 100644
--- a/src/routes/events/[event_id]/(launcher)/launcher_menu.svelte
+++ b/src/routes/events/[event_id]/(launcher)/launcher_menu.svelte
@@ -214,7 +214,7 @@
flex flex-row gap-1 items-center justify-center
"
>
- {
if ($events_loc.launcher.show_content__hidden_files) {
$events_loc.launcher.show_content__hidden_files = false;
@@ -242,7 +242,7 @@
All Files
{/if}
- {
$events_loc.launcher.show_content__hidden_sessions =
!$events_loc.launcher.show_content__hidden_sessions;
diff --git a/src/routes/events/[event_id]/(launcher)/launcher_session_view.svelte b/src/routes/events/[event_id]/(launcher)/launcher_session_view.svelte
index d95beb51..0d6728d9 100644
--- a/src/routes/events/[event_id]/(launcher)/launcher_session_view.svelte
+++ b/src/routes/events/[event_id]/(launcher)/launcher_session_view.svelte
@@ -277,8 +277,7 @@
$events_loc.launcher.hide__session_datetimes}
class="shrink event_session_datetimes"
>
- {
if ($events_loc.launcher.time_format == 'time_12_short') {
// $events_loc.launcher.datetime_format = 'datetime_long';
@@ -370,7 +369,7 @@
-
{
if (
$events_loc.pres_mgmt.show_content__location_view == 'manage_files'
diff --git a/src/routes/events/[event_id]/(pres_mgmt)/location/[event_location_id]/location_page_menu.svelte b/src/routes/events/[event_id]/(pres_mgmt)/location/[event_location_id]/location_page_menu.svelte
index 97d3edfa..8c432571 100644
--- a/src/routes/events/[event_id]/(pres_mgmt)/location/[event_location_id]/location_page_menu.svelte
+++ b/src/routes/events/[event_id]/(pres_mgmt)/location/[event_location_id]/location_page_menu.svelte
@@ -50,8 +50,7 @@