# Skills And Lessons Learned ## Runtime And Driver Bitness - This project depends on a 32-bit Access driver path. - Run IIS Express as 32-bit for local app runtime: - `%ProgramFiles(x86)%\IIS Express\iisexpress.exe` - `applicationhost.config` should keep `enable32BitAppOnWin64="true"` on the active app pool. - Running 64-bit IIS Express or 64-bit script host can trigger: - `Provider cannot be found` (3706) - `Data source name not found and no default driver specified` ## Migration Runner Usage - `scripts\runMigrations.vbs` must be executed with 32-bit `cscript` on this machine: - `C:\Windows\SysWOW64\cscript.exe //nologo scripts\runMigrations.vbs up` - The standalone migration context differs from IIS runtime context: - Do not assume `migration.DB.Execute` / `migration.DB.Query` always exist. - Prefer migration helpers that can fall back to `migration.Connection` + `ADODB.Command`. ## Flash API Contract - `Flash_Class` supports: - `AddError "message"` - `Success = "message"` - `SetError` and `SetSuccess` are not valid methods and cause `438`. ## Linked List Node API - `LinkedList_Node_Class` uses fields: - `m_value` - `m_next` - Using `.Value` or `.Next` causes `Object doesn't support this property or method` (`438`). ## Keycloak User Object Handling - Treat `KeycloakCurrentUser()` defensively. - Do not rely on `.Exists(...)` being available in every execution path. - Safe pattern: - Try `Item("preferred_username")` under `On Error Resume Next` - Fallback to `Item("email")` ## Navigation Pattern - Top nav should include a direct `Boards` link. - Use `Active("controller")` for active CSS state (for example `home`, `boards`).