From 4711f41c34670521b87c74f79061eb67d5f0c723 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Mon, 16 Feb 2026 15:58:17 -0500 Subject: [PATCH] Expanded Recovery Meeting sort options and refined development SOP. Implemented 'Meeting Name (A-Z)' and 'Meeting Name (Z-A)' sorting for Recovery Meetings, including UI dropdown updates and client-side re-sorting logic. Updated documentation/GUIDE__DEVELOPMENT.md to v1.1 with clarified verification steps and inter-agent coordination protocols. Minor label cleanup in Journal editor. --- documentation/GUIDE__DEVELOPMENT.md | 14 ++++++----- .../(idaa)/recovery_meetings/+page.svelte | 9 +++---- .../ae_idaa_comp__event_obj_li_wrapper.svelte | 4 +++- .../ae_idaa_comp__event_obj_qry.svelte | 24 ++++++++++++------- .../ae_comp__journal_obj_id_edit.svelte | 2 +- 5 files changed, 33 insertions(+), 20 deletions(-) diff --git a/documentation/GUIDE__DEVELOPMENT.md b/documentation/GUIDE__DEVELOPMENT.md index 1d256b2f..71bcd943 100644 --- a/documentation/GUIDE__DEVELOPMENT.md +++ b/documentation/GUIDE__DEVELOPMENT.md @@ -1,15 +1,15 @@ # Aether Development SOP (Frontend) -> **Version:** 1.0 (2026-02-11) +> **Version:** 1.1 (2026-02-16) > **Location:** documentation/GUIDE__DEVELOPMENT.md ## 1. 🛡️ Verification (The "Test-First" Mandate) **Rule:** No code is to be committed unless it has passed local verification. Skipping this is a violation of the Aether Dev Protocol. -### Required Checks: +### Required Checks 1. **Svelte Integrity:** `npx svelte-check` 2. **Type Safety:** Ensure interfaces in `src/lib/types/ae_types.ts` match backend schemas. 3. **Reactivity Check:** Verify Svelte 5 runes (`$state`, `$derived`) are not creating race conditions with Dexie `liveQuery`. -4. **Build Check:** For major changes, run `npm run build` to ensure no SSR or build-time failures. +4. **Build Check:** For major changes, run `npm run build:staging` to ensure no SSR or build-time failures. ## 2. 📝 Commit & Sync Policy - **Atomic Commits:** One component or one logic fix per commit. Do not batch unrelated changes. @@ -19,15 +19,17 @@ ## 3. 🤝 The Handshake (Coordination) You are not working in a vacuum. You MUST coordinate with the Backend Agent. -### Mandatory Messaging Triggers: +### Mandatory Messaging Triggers - **Data Requirements:** When a UI feature requires a new field or endpoint. - **API Failures:** When a V3 endpoint returns unexpected data or 500s. -- **Status:** Update your shared Journal in `~/agents_sync/aether/journals/` after significant milestones. +- **Status:** IGNORE THIS FOR NOW: ~~Update your shared Journal in `~/agents_sync/aether/journals/` after significant milestones.~~ +- **Stuck in Loop or Insufficient Information: ** If you find yourself in a loop or lacking information, ask Scott and or use the `message` tool to ask for clarification or assistance from the Backend Agent. -**Tool:** Use the `message` tool to communicate with the Backend Agent. +**Tool:** Use the `message` tool to communicate with the Backend Agent or Scott's other agents. ## 🧠 Continuity Before starting work: 1. Read `~/agents_sync/README.md` to understand the fleet status and cross-agent tasks. 2. Check `README.md` in the project root for technical specs. 3. Review your local `documentation/AGENT_TODO.md` for active tasks. +4. Be sure to describe the plan before you start making code changes to one or more files. diff --git a/src/routes/idaa/(idaa)/recovery_meetings/+page.svelte b/src/routes/idaa/(idaa)/recovery_meetings/+page.svelte index bf339014..bb9c3d8f 100644 --- a/src/routes/idaa/(idaa)/recovery_meetings/+page.svelte +++ b/src/routes/idaa/(idaa)/recovery_meetings/+page.svelte @@ -144,10 +144,11 @@ .toArray(); // Sort local results matching UI selection (Refactored 2026-02-16) - if ($idaa_loc.recovery_meetings.qry__order_by === 'name') { - local_results.sort((a, b) => - (a.name ?? '').localeCompare(b.name ?? '') - ); + const sort_mode = $idaa_loc.recovery_meetings.qry__order_by; + if (sort_mode === 'name_asc' || sort_mode === 'name') { + local_results.sort((a, b) => (a.name ?? '').localeCompare(b.name ?? '')); + } else if (sort_mode === 'name_desc') { + local_results.sort((a, b) => (b.name ?? '').localeCompare(a.name ?? '')); } else { // Robust Chronological Sort using pre-computed tmp_sort_1 // Handles Priority, Manual Sort, and the updated_on/created_on fallback diff --git a/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_li_wrapper.svelte b/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_li_wrapper.svelte index 8bd505d6..f5404775 100644 --- a/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_li_wrapper.svelte +++ b/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_li_wrapper.svelte @@ -83,8 +83,10 @@ .limit(limit > 0 ? limit : 500) .toArray(); - if (order_by === 'name') { + if (order_by === 'name_asc' || order_by === 'name') { results.sort((a, b) => (a.name ?? '').localeCompare(b.name ?? '')); + } else if (order_by === 'name_desc') { + results.sort((a, b) => (b.name ?? '').localeCompare(a.name ?? '')); } else { // Robust Chronological Sort using pre-computed tmp_sort_1 (Refactored 2026-02-16) // This handles Group > Priority > Manual Sort > Date (with updated_on fallback) diff --git a/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_qry.svelte b/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_qry.svelte index bbdad735..e9735fe6 100644 --- a/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_qry.svelte +++ b/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_qry.svelte @@ -356,26 +356,33 @@ id="qry_order_by__events" bind:value={$idaa_loc.recovery_meetings.qry__order_by} onchange={() => { - if ( - $idaa_loc.recovery_meetings.qry__order_by == - 'updated_on' - ) { + const mode = $idaa_loc.recovery_meetings.qry__order_by; + if (mode === 'updated_on') { $idaa_loc.recovery_meetings.qry__order_by_li = { priority: 'DESC', sort: 'DESC', updated_on: 'DESC', created_on: 'DESC', name: 'ASC' - }; // For the SQL query - } else { + }; + } else if (mode === 'name_asc') { $idaa_loc.recovery_meetings.qry__order_by_li = { priority: 'DESC', sort: 'DESC', name: 'ASC', updated_on: 'DESC', created_on: 'DESC' - }; // For the SQL query + }; + } else if (mode === 'name_desc') { + $idaa_loc.recovery_meetings.qry__order_by_li = { + priority: 'DESC', + sort: 'DESC', + name: 'DESC', + updated_on: 'DESC', + created_on: 'DESC' + }; } + handle_search_trigger(); }} class=" select w-40 text-sm inline-block @@ -386,7 +393,8 @@ " > - + + diff --git a/src/routes/journals/ae_comp__journal_obj_id_edit.svelte b/src/routes/journals/ae_comp__journal_obj_id_edit.svelte index ea7f7eb0..c9a050ec 100644 --- a/src/routes/journals/ae_comp__journal_obj_id_edit.svelte +++ b/src/routes/journals/ae_comp__journal_obj_id_edit.svelte @@ -316,7 +316,7 @@