Add comprehensive logging to BricksRenderer for DevPanel visibility:
1. Unknown widgettypes: WARN log with full JSON dump in DevPanel Logs tab.
Also shows [? WidgetType] orange placeholder on screen when no subwidgets.
2. Placeholder widgets (Html, MarkdownViewer, etc.): INFO log with widget summary.
3. urlwidget load failures: ERROR log with full widget JSON and error message.
4. widgetSummary(): compact one-line summary (type, id, options keys, counts).
5. widgetJsonDump(): pretty-printed JSON for deep inspection in DevPanel.
Previously: unknown widgets silently fell through to subwidget rendering.
Now: every unrecognized widget is visible in DevPanel with full context.
Bug: index.ui has VBox with 3 urlwidget subwidgets (top.ui, center.ui, bottom.ui).
When RenderUrlWidget dispatched through ActionDispatcher, loadWidget called
onWidgetLoaded which replaced the ENTIRE root widget. The last urlwidget to
finish loading (bottom.ui) overwrote top.ui and center.ui.
Fix: RenderUrlWidget now maintains local state (loadedWidget) and renders
loaded content in-place. Added ActionDispatcher.loadWidgetInPlace() that loads
via callbacks without calling onWidgetLoaded. Each urlwidget replaces only
itself, preserving sibling widgets in the parent container.
Bug: when fetchUi('/public') resolves to http://host:port/public, the
isWebBricksBackendResource() check compared the full URL string against
'/public' and always returned false, so _webbricks_=1 was never added.
Fix: extract the path component from full URLs (strip scheme+host) before
running the .ui/.dspy/public/root detection logic. All HTTP methods
(getText/getJson/postJson/postForm) delegate to withBackendContextIfNeeded
which calls isWebBricksBackendResource, so this fix covers all code paths.
- isWebBricksBackendResource() now matches /public and / as WebBricks backend resources
- BricksHttp.kt switched from manual URL query string to Ktor parameter() API
- Added test/generic-client/build.sh for one-click build/run/package
- DevLogStore: centralized log store with Flow-based observation (INFO/WARN/ERROR/EXCEPTION levels)
- DevHttpInterceptor: capture request/response pairs with timing and body details
- DevPanel: bottom panel with Logs/Network/Errors tabs, expandable entries, JSON formatting
- Integrated into BricksHttp (all HTTP methods), BricksParser, ActionDispatcher, Main
- Move Main.kt from shared/ to test/generic-client/ (library module should not have main)
- Add test/generic-client/ as generic bricks-mp desktop host with DevMode toggle
- Add kotlinx-datetime dependency for timestamp handling
- Add materialIconsExtended for DevPanel icons
- Endpoint was /rbac/user/userpassword_login.dspy (401), changed to /rbac/user/up_login.dspy
- Form param was passwd (500 error), changed to password (matches login.ui form field name)