4.9 KiB
Project: V3 Uniform Lookup & Identity Agnostic Resolution
Status: 🏗️ Implementation (Phase 1 Complete - Feb 20, 2026) Goal: Standardize all
lu_*tables into a hierarchical, identity-agnostic system supporting Global Defaults, Account Overrides, and Object Overrides.
1. Executive Summary
The Aether V3 Lookup System solves the problem of varied data standards (e.g., ISO-2, ISO-3, Numeric codes) and multi-tenant customization needs. It adopts a "Deduplicated Inheritance" pattern:
- Global Defaults: System-wide standard records (provided by Aether).
- Account Overrides: Client-specific labels, sorting, or disabled states.
- Object Overrides: Context-specific overrides (e.g., unique labels for a specific Event or Person).
2. Theoretical Architecture
2.1 Standardized Schema Components
To ensure consistency across the ecosystem, all lookup tables will migrate toward a baseline "V3 Minimal Structure."
Minimal Baseline Fields:
id: Internal Integer (Primary Key).id_random: Public String (ID Vision compliance).account_id: Account context (NULL = Global).for_type/for_id: Polymorphic Context (Optional).group: The primary business key/cluster key (e.g., 'US', 'ACTIVE'). Note: Must be populated for hierarchy to work.name: Primary display label.description: Detailed explanation.enable: Binary (1 = Active, 0 = Disabled). Crucial for Negative Overrides.hide: UI Visibility flag.sort: Ordering priority.created_on/updated_on: Audit timestamps.
2.2 Hierarchical Selection (The "Ranked" Query)
To return a complete list where overrides replace defaults without duplication, we use Window Functions (ROW_NUMBER() OVER).
Finalized SQL Pattern:
SELECT * FROM (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY `group`
ORDER BY
(for_type = :for_type AND for_id = :for_id) DESC,
(account_id = :account_id) DESC,
created_on DESC
) as rank_priority
FROM `v_lu_v3_example`
WHERE (for_type = :for_type AND for_id = :for_id)
OR account_id = :account_id
OR account_id IS NULL
) AS ranked
WHERE rank_priority = 1
AND enable = 1 -- Negative Override enforcement
ORDER BY sort ASC, name ASC;
2.3 Identity Agnostic Resolution
To support external systems using different coding standards, the V3 API implements a multi-field "Any-Match" resolver.
Resolution Logic:
- Accepts a query string
q. - Iterates through
searchable_fieldsdefined in the lookup registry. - Returns the highest-priority hierarchical match.
2.4 Negative Overrides (The "Shadowing" Pattern)
To "delete" a global default for a specific account, the account creates an override record with the same group but enable = 0. The ranking query assigns rank_priority = 1 to the account record, and the outer WHERE enable = 1 then excludes it, effectively hiding the item for that account.
3. Implementation Standards
3.1 Normalization Rules
- Underscore Naming: All database columns must use underscores (e.g.,
alpha_3_code) instead of hyphens to ensure clean Python attribute access. - Group Population: The
groupfield must be physically populated in the table with a stable identity string (ISO codes, standard names). - Physical Name Field: While specialized fields (like
english_short_name) may exist, a physicalnamefield is required for Generic CRUD compatibility.
3.2 View Requirements
- Standard Joins: All
v_lu_v3_*views must join theaccounttable to provideaccount_id_random. - Hybrid Naming: (Proposed) Views may use
COALESCEto provide a defaultnamefrom specialized fields if the physicalnamecolumn is empty.
4. Implementation Roadmap
Phase 1: Normalization & Infrastructure
- Audit first batch of
lu_*tables. - Establish
Lookup_BasePydantic models. - Implement hierarchical
get_lookup_list_v3logic. - Register
/v3/lookup/router.
Phase 2: Migration (Batch 1: High Priority)
lu_v3_country(Group:alpha_2_code)lu_v3_country_subdivision(Group:code)lu_v3_time_zone(Group:name)
Phase 3: Migration (Batch 2: Contextual)
lu_post_topiclu_user_statuslu_file_purpose
Phase 4: Advanced Features
- Implement Whitelist Policies via
data_storeJSON. - Implement Batch Update tools for managers.
5. Key Learnings & Decisions
- Deduplication: The
PARTITION BY groupis the cornerstone of the system. Without a populatedgroupfield, the hierarchy collapses. - Generic CRUD Compatibility: We decided to maintain a physical
namefield to allow the Aether V3 UI to handle all lookups with zero custom code. - Fail-Closed: Account isolation is enforced at the query level via the
account_idfilter.
Created by Gemini CLI for Scott Idem