Claude Code Worklog RSS

Development worklog entries from Claude Code sessions

[sbg-webapp] 2026-05-07 20:52: Floorplan pin tooltip polish + a few small bug fixes
Thu, 07 May 2026 20:52

Mostly floorplan-tooltip iteration plus a handful of orthogonal fixes.

[sbg-webapp] 2026-05-07 12:42: Refresh page outside wizard on save without full reload
Thu, 07 May 2026 12:42

Three coupled fixes so dashboards / breadcrumbs / inspector reflect in-wizard edits without manual refresh.

[sbg-webapp] 2026-05-07 10:01: Soften install gate to name-only + drop building step from wizard
Thu, 07 May 2026 10:01
[sbg-webapp] 2026-05-06 13:49: Wizard header polish — orange Set-up chip + progress underline
Wed, 06 May 2026 13:49
[sbg-webapp] 2026-05-06 13:38: Show collapsed install wizard on asset dashboard for unfinished setup
Wed, 06 May 2026 13:38
[sbg-webapp] 2026-05-06 13:00: Render UBX serials in Roboto Mono so the slashed zero matches the printed label
Wed, 06 May 2026 13:00
[sbg-webapp] 2026-05-05 16:54: Setup CTA chip on dashboard widgets + tightened banner copy
Tue, 05 May 2026 16:54
[sbg-webapp] 2026-05-05 15:48: Server-side install status + dashboard banner + wizard simplification
Tue, 05 May 2026 15:48
[sbg-webapp] 2026-05-05 13:57: Show UBX Serial column in tabular reports
Tue, 05 May 2026 13:57
[sbg-webapp] 2026-05-05 11:26: Latch install wizard's initial collapsed state
Tue, 05 May 2026 11:26
[sbg-webapp] 2026-05-05 11:20: Hide marker hover tooltip on floorplan inside install wizard
Tue, 05 May 2026 11:20
[sbg-webapp] 2026-05-05 10:28: Asset install status + collapse install wizard when complete
Tue, 05 May 2026 10:28
[sbg-webapp] 2026-05-05 09:36: Floorplan tooltip stays open and renders below the marker
Tue, 05 May 2026 09:36
[sbg-webapp] 2026-05-04 14:33: Revert asset inspector multi-property layout changes
Mon, 04 May 2026 14:33
[sbg-webapp] 2026-05-04 14:19: Floorplan tooltip shows second primary property next to the first
Mon, 04 May 2026 14:19
[sbg-webapp] 2026-05-04 13:56: Render thermostat humidity in its own column next to temperature
Mon, 04 May 2026 13:56
[sbg-webapp] 2026-05-04 13:51: Inspector multi-property layout; floorplan tooltip below marker
Mon, 04 May 2026 13:51
[sbg-webapp] 2026-05-04 13:33: Switch floorplan tooltip to Leaflet's native LTooltip
Mon, 04 May 2026 13:33
[sbg-webapp] 2026-05-04 13:22: Add hover tooltip on floorplan pins
Mon, 04 May 2026 13:22
[sbg-webapp] 2026-05-04 09:15: Rename KnownAsset.dashboardSection to reportingSection
Mon, 04 May 2026 09:15
[sbg-webapp] 2026-04-30 15:54: Apply category sections + friendly-name labels to thresholds report
Thu, 30 Apr 2026 15:54
[sbg-webapp] 2026-04-30 13:42: Fix sensor-data report render error from merged-config tables
Thu, 30 Apr 2026 13:42
[sbg-webapp] 2026-04-30 13:37: Group sensor-data report by category, then by friendly name
Thu, 30 Apr 2026 13:37
[sbg-webapp] 2026-04-30 12:42: Decouple dashboard category ordering from use-dashboard-config
Thu, 30 Apr 2026 12:42
[sbg-webapp] 2026-04-30 12:18: Move dashboard category assignment onto KNOWN_ASSETS
Thu, 30 Apr 2026 12:18
[sbg-webapp] 2026-04-29 16:30: Surface friendly name + SN in asset header; extend Unnamed fallback further
Wed, 29 Apr 2026 16:30
[sbg-webapp] 2026-04-29 15:54: Apply Unnamed fallback to asset header
Wed, 29 Apr 2026 15:54
[sbg-webapp] 2026-04-29 12:23: Fix asset inspector summary missing for non-UBX known assets
Wed, 29 Apr 2026 12:23
[sbg-webapp] 2026-04-29 12:20: Apply Unnamed fallback to inspector title; wrap dashboard tab tr's in tbody
Wed, 29 Apr 2026 12:20
[sbg-webapp] 2026-04-29 11:51: Style asset inspector primary summary at 16px / rgba(0,0,0,0.78)
Wed, 29 Apr 2026 11:51
[sbg-webapp] 2026-04-29 11:33: Collapse asset inspector details into a single contextual summary line
Wed, 29 Apr 2026 11:33
[sbg-webapp] 2026-04-29 11:24: Centralize Unnamed fallback in SmartAssetName, surface friendly name + SN on chips and pins
Wed, 29 Apr 2026 11:24
[sbg-webapp] 2026-04-29 10:25: Surface serial number and friendly name on building dashboard cards
Wed, 29 Apr 2026 10:25
[sbg-webapp] 2026-04-29 10:00: Add friendlyName to UBX known assets
Wed, 29 Apr 2026 10:00
[sbg-webapp-vue3] 2026-04-27 18:15: Restructure alert dashboard around multi-asset incidents timeline
Mon, 27 Apr 2026 18:15

1. Alert Home (white card): config + recipients (unchanged AlertConfigSummary)

2. Incidents (NEW): Gantt-style Highcharts xrange chart with one row per scope asset; each bar is a firing. Bars include firings on the scope asset itself and on its linked child sensors (resolved via the asset's childLinks GraphQL field). Date range picker (shared with Details) sits above.

3. Details (only when an instance is selected via timeline click or ?ai=): a single PropertyGraph for the associated scope asset's property + the existing AlertInstanceBanner.

[standalone-dev-env-gql-repos-sbp-mono] 2026-04-27 16:51: Bump alert durations to 10 min - 8 hr
Mon, 27 Apr 2026 16:51
[standalone-dev-env-gql-repos-sbp-mono] 2026-04-27 16:47: Constrain ACTIVE/PENDING to recent anchors
Mon, 27 Apr 2026 16:47
[standalone-dev-env-gql-repos-sbp-mono] 2026-04-27 16:39: Shorter, slot-spaced alerts + --clear flag
Mon, 27 Apr 2026 16:39
[standalone-dev-env-gql-repos-sbp-mono] 2026-04-27 11:30: Move alert simulator to its own branch and push
Mon, 27 Apr 2026 11:30
[standalone-dev-env-gql-repos-sbp-mono] 2026-04-27 11:25: Commit alert firing simulator to sbp-mono
Mon, 27 Apr 2026 11:25
[standalone-dev-env-gql-repos-sbp-mono] 2026-04-27 11:23: Build dev-script to simulate alert firings for local UI testing
Mon, 27 Apr 2026 11:23
[standalone-dev-env-gql-repos-sbp-mono] 2026-04-27 11:23: Add generic dev-script launcher to standalone-dev-env
Mon, 27 Apr 2026 11:23
[sbg-webapp-vue3] 2026-04-23 15:10: Alert dashboard — white outer section + dashboard-widget cards
Thu, 23 Apr 2026 15:10
[sbg-webapp-vue3] 2026-04-23 14:20: Lighter instance banner + linkable asset chips
Thu, 23 Apr 2026 14:20
[sbg-webapp-vue3] 2026-04-23 13:50: Redesign Alert Config Dashboard UX
Thu, 23 Apr 2026 13:50

- Condition card: condition property, dwell time, active periods, assets

- Recipients card: each recipient as a row with email/SMS delivery icons (muted when disabled), per-recipient Snooze and work-schedule icon stubs, collective "Snooze all" button in the card header

[sbg-webapp-vue3] 2026-04-23 12:52: Alert Config Dashboard return button
Thu, 23 Apr 2026 12:52
[sbg-webapp-vue3] 2026-04-23 12:39: Fix alert bars for linked-sensor alerts
Thu, 23 Apr 2026 12:39
[sbg-webapp-vue3] 2026-04-23 12:06: Fix dashboard date props disrupting store subscription
Thu, 23 Apr 2026 12:06
[sbg-webapp-vue3] 2026-04-23 12:02: Fix Return button icon regression
Thu, 23 Apr 2026 12:02
[sbg-webapp-vue3] 2026-04-23 11:42: Short alert redirect URLs for notifications
Thu, 23 Apr 2026 11:42
[sbg-webapp] 2026-04-20 19:23: Clean up Vuetify 3 layout bugs on Ops Agents pages
Mon, 20 Apr 2026 19:23

1. Chevrons stacking below the row on the Available Agents and Active Customers lists — the icons were in v-list-item's default slot where Vuetify 3 stacks children vertically. Moved them into #append.

2. Status chip and action buttons vertically stacked on the Configured Agents list. The chip was wrapped in a second v-list-item-subtitle (new line) and the three buttons each took their own row. Put the chip inline with the title and moved the buttons into a .agent-actions flex row below the subtitle (wraps on narrow widths).

3. All list-item link text rendering in brand blue — the global .v-theme--light a:not(...) rule in styles.scss painted every anchor blue, and Vuetify 3's v-list-item with :to renders as <a>, so list-item titles and subtitles inherited the blue. Extended the :not() exclusion to skip .v-list-item and its descendants, matching the rule's original intent (V2 list items weren't anchors).

[sbg-webapp] 2026-04-20 19:05: Fix blank customer list in Ops Agents config
Mon, 20 Apr 2026 19:05
[standalone-dev-env-gql-repos-sbp-mono] 2026-04-16 20:30: Fix inherited_access_map race that returned empty Group.buildings on concurrent requests
Thu, 16 Apr 2026 20:30
[sbg-webapp] 2026-04-16 13:05: Show spinner while install wizard building query loads
Thu, 16 Apr 2026 13:05
[sbg-webapp] 2026-04-16 12:16: Fix floor auto-reselect after clear, rename useAssetBySerial param
Thu, 16 Apr 2026 12:16
[sbg-webapp] 2026-04-16 11:11: Edit mfgSerialNumber in asset form, drop serialNumber from mutations
Thu, 16 Apr 2026 11:11
[sbg-webapp] 2026-04-15 18:15: Scope dashboard widget fit-content rule to hero only
Wed, 15 Apr 2026 18:15
[sbg-webapp] 2026-04-15 13:03: Drop redundant @dblclick on fallback dashboard-widget
Wed, 15 Apr 2026 13:03
[sbg-webapp] 2026-04-15 12:49: Remove debug logging from DashboardWidget card click
Wed, 15 Apr 2026 12:49
[sbg-webapp] 2026-04-15 12:30: Shrink .property-value to content inside dashboard widgets
Wed, 15 Apr 2026 12:30
[sbg-webapp] 2026-04-15 12:22: Drop redundant property-value wrappers (fix hero width)
Wed, 15 Apr 2026 12:22
[sbg-webapp] 2026-04-15 12:19: Move card-click origin check onto PropertyValue class
Wed, 15 Apr 2026 12:19
[sbg-webapp] 2026-04-15 12:15: Extend double-click-to-asset-dashboard to pins, tables, thresholds
Wed, 15 Apr 2026 12:15
[sbg-webapp] 2026-04-15 12:07: Use event.target check to gate card click
Wed, 15 Apr 2026 12:07
[sbg-webapp] 2026-04-15 11:55: Wrap property-value with @click.stop div
Wed, 15 Apr 2026 11:55
[sbg-webapp] 2026-04-15 11:47: Enable dashboard card click on mobile
Wed, 15 Apr 2026 11:47
[sbg-webapp] 2026-04-14 15:36: Install wizard floorplan pointer cursor and install shortcut route
Tue, 14 Apr 2026 15:36
[sbg-webapp] 2026-04-14 15:00: Fix floorplan pin not appearing after placement in install wizard
Tue, 14 Apr 2026 15:00
[sbg-webapp] 2026-04-13 15:18: Double-click dashboard card opens asset dashboard
Mon, 13 Apr 2026 15:18
[sbg-webapp] 2026-04-13 12:35: Configured impeccable design skill for UBX
Mon, 13 Apr 2026 12:35
[sbg-webapp] 2026-04-09 16:32: Install wizard photo delete and lightbox
Thu, 09 Apr 2026 16:32
[sbg-webapp] 2026-04-09 16:26: Install wizard photo lightbox
Thu, 09 Apr 2026 16:26
[sbg-webapp] 2026-04-09 16:10: Install wizard photo loading states
Thu, 09 Apr 2026 16:10
[sbg-webapp] 2026-04-09 16:03: Install wizard floor selector fix
Thu, 09 Apr 2026 16:03
[sbg-webapp] 2026-04-09 16:03: Install wizard floor selector fix
Thu, 09 Apr 2026 16:03
[sbg-webapp] 2026-04-09 15:33: Portless support fixes
Thu, 09 Apr 2026 15:33
[sbg-webapp-vue3] 2026-04-09 14:25: Fix stale Apollo cache in useAccountBuildings
Thu, 09 Apr 2026 14:25
[sbg-webapp-vue3] 2026-04-09 14:20: Install wizard — reorder steps, add reload link
Thu, 09 Apr 2026 14:20

- Multiple: dropdown selector that moves the asset via moveAssetsMutation on selection

- Single: plain text (non-editable)

- Empty: "No buildings loaded." with a reload link — added for testing while the backend race condition is unresolved

[sbg-webapp-vue3] 2026-04-09 14:15: Rebuild portless-support branch
Thu, 09 Apr 2026 14:15
[sbg-webapp] 2026-04-09: Make building dashboard section collapsed state ephemeral
Thu, 09 Apr 2026
[sbg-webapp-vue3] 2026-04-08 16:37: Install wizard — building selector step
Wed, 08 Apr 2026 16:37
[sbg-webapp] 2026-04-08 10:00: Support portless.sh for local development
Wed, 08 Apr 2026 10:00
[sbg-webapp] 2026-04-07 14:03: Install wizard prototype for new device setup
Tue, 07 Apr 2026 14:03
[sbg-webapp-vue3] 2026-04-06: Alert feedback fixes — grouping, graphs, link styling
Mon, 06 Apr 2026
[sbg-webapp-vue3] 2026-04-03: Alert Config Dashboard & Alerts Tab Updates
Fri, 03 Apr 2026
[sbg-webapp-vue3] 2026-04-02: Fix TypeScript warnings in CI
Thu, 02 Apr 2026
[sbg-webapp-vue3] 2026-04-02: Targeted AWS tunnel cleanup in deploy script
Thu, 02 Apr 2026
[sbg-webapp-vue3] 2026-04-02: Fix AssetSelector group header selecting non-asset item
Thu, 02 Apr 2026
[sbg-webapp-vue3] 2026-04-02: Fix Vuetify 3 item.raw and custom-filter in selectors
Thu, 02 Apr 2026
[sbg-webapp-vue3] 2026-04-01: Fix dashboard search hiding search box on no results
Wed, 01 Apr 2026
[sbg-webapp-vue3] 2026-04-01: Address PR review comments on building-dashboard-v2
Wed, 01 Apr 2026
[sbg-webapp-vue3] 2026-04-01: Exclude inferred schedule_enabled from panel status aggregation
Wed, 01 Apr 2026
[sbg-webapp-vue3] 2026-04-01: Position status icon next to panel title
Wed, 01 Apr 2026
[sbg-webapp-vue3] 2026-04-01: Skip pending state sync when device lock is expired
Wed, 01 Apr 2026
[sbg-webapp-vue3] 2026-04-01: Show failure for stale pending fields on unlocked devices
Wed, 01 Apr 2026
[sbg-webapp-vue3] 2026-04-01: Suppress pending spinner when device is not locked
Wed, 01 Apr 2026
[sbg-webapp-vue3] 2026-04-01: Validate parsed DateTime for device lock expiration
Wed, 01 Apr 2026
[sbg-webapp-vue3] 2026-04-01: Handle null schedule_days in schedule bank conversion
Wed, 01 Apr 2026
[sbg-webapp-vue3] 2026-04-01: Ignore expired device locks
Wed, 01 Apr 2026
[sbg-webapp-vue3] 2026-03-31: Fix form dirty state not resetting after save (Vue 3 upgrade regression)
Tue, 31 Mar 2026
[sbg-webapp-vue3] 2026-03-31: Dismiss status tooltip on click
Tue, 31 Mar 2026
[sbg-webapp-vue3] 2026-03-31: Restore Vuetify 2 tooltip color and offset
Tue, 31 Mar 2026
[sbg-webapp-vue3] 2026-03-31: Fix validation messages showing raw translation keys (Vue 3 upgrade regression)
Tue, 31 Mar 2026
[sbg-webapp-vue3] 2026-03-30: Fix mobile date range preset list styling
Mon, 30 Mar 2026
[sbg-webapp-vue3] 2026-03-30: Rename Vuetify 2 typography classes to Vuetify 3 equivalents
Mon, 30 Mar 2026
[sbg-webapp-vue3] 2026-03-30: Update occupancy labels to "since last report"
Mon, 30 Mar 2026
[sbg-webapp-vue3] 2026-03-30: Fix tooltip z-index in asset inspector
Mon, 30 Mar 2026
[sbg-webapp-vue3] 2026-03-30: Floorplan asset inspector full viewport height
Mon, 30 Mar 2026
[sbg-webapp-vue3] 2026-03-30: Asset inspector open-in-new icon stays visible on title overflow
Mon, 30 Mar 2026
[sbg-webapp-vue3] 2026-03-30: Fix string switch OFF toggle not sending mutation (Vue 3 upgrade regression)
Mon, 30 Mar 2026
[sbg-webapp-vue3] 2026-03-26 13:30: Fix asset inspector toolbar title and widget click handling
Thu, 26 Mar 2026 13:30
[sbg-webapp-vue3] 2026-03-26 13:00: Update default dashboard categories and sort order
Thu, 26 Mar 2026 13:00
[sbg-webapp-vue3] 2026-03-26 12:30: Dashboard section asset count chip style
Thu, 26 Mar 2026 12:30
[sbg-webapp-vue3] 2026-03-26 12:00: Mobile dashboard widgets — title-only click to open inspector
Thu, 26 Mar 2026 12:00
[sbg-webapp-vue3] 2026-03-26 11:30: Fix mobile fullscreen dialog dismissing on select click
Thu, 26 Mar 2026 11:30
[sbg-webapp-vue3] 2026-03-26 11:10: Fix mobile floorplan toolbar Vue 3 regressions
Thu, 26 Mar 2026 11:10
[sbg-webapp-vue3] 2026-03-25 15:00: Dashboard cleanup
Wed, 25 Mar 2026 15:00
[sbg-webapp-vue3] 2026-03-25 14:45: Equal-size dashboard widget grid
Wed, 25 Mar 2026 14:45
[sbg-webapp-vue3] 2026-03-25 12:30: Fix reorder mode mutation flurry
Wed, 25 Mar 2026 12:30
[sbg-webapp-vue3] 2026-03-25 12:04: Remove alert indicators from dashboard cards
Wed, 25 Mar 2026 12:04
[sbg-webapp-vue3] 2026-03-25 11:59: Add search field to dashboard overview
Wed, 25 Mar 2026 11:59
[sbg-webapp-vue3] 2026-03-25 11:46: Move report strings to locale file
Wed, 25 Mar 2026 11:46
[sbg-webapp-vue3] 2026-03-25 11:35: Move table views from dashboard to standalone report pages
Wed, 25 Mar 2026 11:35
[sbg-webapp-vue3] 2026-03-25 10:03: Dashboard reorder and settings UX improvements
Wed, 25 Mar 2026 10:03
[sbg-webapp-vue3] 2026-03-25: Dashboard card click opens asset inspector
Wed, 25 Mar 2026
[sbg-webapp-vue3] 2026-03-25: Replace inspector dialog with slideout panel
Wed, 25 Mar 2026
[sbg-webapp-vue3] 2026-03-24 18:09: Add asset inspector slideout to dashboard
Tue, 24 Mar 2026 18:09
[sbg-webapp-vue3] 2026-03-24 16:09: Create dashboard widget card system
Tue, 24 Mar 2026 16:09
[sbg-webapp-vue3] 2026-03-24: Fix pre-existing lint errors across 4 files
Tue, 24 Mar 2026
[sbg-webapp-vue3] 2026-03-24: Systematic asset crawl — 36 model types audited
Tue, 24 Mar 2026
[sbg-webapp-vue3] 2026-03-23: Fix suffix text wrapping on tstat config tolerance fields
Mon, 23 Mar 2026
[sbg-webapp-vue3] 2026-03-23: Add missing i18n options for switch_status
Mon, 23 Mar 2026
[sbg-webapp-vue3] 2026-03-23: Fix Apollo subscription cache warning for assetDataChanges
Mon, 23 Mar 2026
[sbg-webapp-vue3] 2026-03-23: Set up Chrome DevTools MCP for browser debugging
Mon, 23 Mar 2026
[sbg-webapp-vue3] 2026-03-23: Fix VHover extraneous loading prop warning on occupancy dashboards
Mon, 23 Mar 2026
[sbg-webapp-vue3] 2026-03-23: Fix reactive component warning on VRF device dashboards
Mon, 23 Mar 2026
[sbg-webapp-vue3] 2026-03-19 15:30: Fix number spinner arrows on asset selector inputs
Thu, 19 Mar 2026 15:30
[sbg-webapp-vue3] 2026-03-19 15:20: Fix undefined 'value' reference in ComparePropertyDialog
Thu, 19 Mar 2026 15:20
[sbg-webapp-vue3] 2026-03-19 15:15: Fix linked property selection count not updating
Thu, 19 Mar 2026 15:15
[sbg-webapp-vue3] 2026-03-19 15:00: Fix showTimestamp prop type error from v-hover null
Thu, 19 Mar 2026 15:00
[sbg-webapp-vue3] 2026-03-19 14:45: Fix building breadcrumb linking to floorplans instead of dashboard
Thu, 19 Mar 2026 14:45
[sbg-webapp-vue3] 2026-03-19 14:30: Fix stale tstat schedule route names and style attribute
Thu, 19 Mar 2026 14:30
[sbg-webapp-vue3] 2026-03-19 14:00: Fix alert edit form showing UUIDs instead of names
Thu, 19 Mar 2026 14:00
[sbg-webapp-vue3] 2026-03-19 13:00: Fix alert copy-to-days checkboxes all selecting at once
Thu, 19 Mar 2026 13:00
[sbg-webapp-vue3] 2026-03-19 12:45: Fix energy report crash — router.currentRoute
Thu, 19 Mar 2026 12:45
[sbg-webapp-vue3] 2026-03-19 12:30: Fix date picker not updating field value
Thu, 19 Mar 2026 12:30
[sbg-webapp-vue3] 2026-03-19 12:15: Fix journal page errors
Thu, 19 Mar 2026 12:15
[sbg-webapp-vue3] 2026-03-19 10:30: Fix floorplan drag-and-drop rendering in Vue 3
Thu, 19 Mar 2026 10:30

Several drag-and-drop issues on the Building Floorplans page after the Vue 3 migration:

[sbg-webapp-vue3] 2026-03-19 10:30: Drag asset off floorplan to remove
Thu, 19 Mar 2026 10:30

Added the ability to remove an asset from a floorplan by dragging its pin off the edge of the floorplan image. When a marker's moveend fires with coordinates outside the [0, sizeY] × [0, sizeX] bounds, a confirmation dialog appears (reusing the existing "Remove from Floor" dialog strings from the asset inspector). On confirm, the asset is unplaced; on cancel, the pin clamps to the nearest floorplan edge via forceCoordsOntoFloorplan.

[sbg-webapp-vue3] 2026-03-19 09:54: Add timestamps to worklog RSS feed
Thu, 19 Mar 2026 09:54

Updated ~/.claude/bin/generate-worklog-rss.py to support optional HH:MM timestamps in worklog headings. Headings can now be ## YYYY-MM-DD HH:MM: title — the time flows through to RSS pubDate and HTML display. Entries without timestamps remain backward compatible (default to midnight).

[sbg-webapp-vue3] 2026-03-19 09:05: Vue 2 port guide for fridge dashboard alerts
Thu, 19 Mar 2026 09:05

Documented the 3 steps needed to backport fridge dashboard alert overlays to the Vue 2 branch, in case we need to ship this feature before the Vue 3 migration lands:

1. Add useBuildingAlerts to use-asset-alerts.ts and call from AssetView.vue (building-level definitions instead of asset-level)

2. Collect all displayed asset UUIDs in PropertyGraph.vue (not just primary asset)

3. Change assetUuidassetUuids in useAlertInstancesForProperties

Also notes what NOT to port (DeviceDashboardLayout refactor, store rename, Vue 3 reactivity fixes).

Doc location: ~/.claude/projects/-Users-barry-Projects-sbg-webapp-vue3/memory/reference_fridge_alerts_vue2_port.md

[sbg-webapp-vue3] 2026-03-18: Resolve alert composable naming collision
Wed, 18 Mar 2026
[sbg-webapp-vue3] 2026-03-18: Fetch building-level alert definitions
Wed, 18 Mar 2026
[sbg-webapp-vue3] 2026-03-18: Testing fridge dashboard alerts on staging
Wed, 18 Mar 2026

Tested multi-asset alert overlays on the fridge dashboard on staging. Initial deploy only had the instance query changes — discovered that alert *definitions* were still only fetched for the primary asset (AssetAlerts query), so linked asset alerts never appeared. Added useBuildingAlerts composable to fetch building-level definitions, redeployed to staging for further testing.

[sbg-webapp-vue3] 2026-03-18: Design doc — LLM-powered chat agent for UBX
Wed, 18 Mar 2026

Built a design document for integrating an LLM-powered chat agent into the platform. Users would ask natural-language questions about their buildings' HVAC systems and get data-driven suggestions.

Key design challenge: LLMs are stateless, so every request requires full context reconstruction — user identity, current building, session history, and specialist agent selection (scheduling, energy, air quality). Solution is a layered context assembly system: platform knowledge → building config → persistent building memory → specialist agent → conversation history, assembled per call and stored in the DB.

Data access runs through existing Strawberry resolvers so auth, tenant isolation, and permissions are inherited.

Phase 1 is read-only — the agent observes and advises but doesn't modify setpoints or schedules. Future phases: autonomous conversations (e.g. triggered by alerts) and tool usage (making changes with user approval).

[sbg-webapp-vue3] 2026-03-16: Fridge dashboard crash resolved + alerts on fridge graphs
Mon, 16 Mar 2026

Resolved the "Maximum recursive updates exceeded" crash that had been blocking the fridge dashboard since 2026-03-12. This was a multi-session, multi-iteration debugging effort — at least 4-5 attempted fixes across previous sessions before landing on the working approach.

Root cause

Vue 3's Object.is() reactivity check treats every computed re-evaluation as a "change" when the computed returns a new object, even if all field values are identical. The PropertyGraph component tree (Series → Group → Graph) uses exposeDataToParent to pass data upward via use-component-tree. Each level's data computed created a fresh object every evaluation, which the parent saw as changed, which triggered its own recomputation, cascading back down — an infinite reactive loop.

The fix (applied at every level of the tree)

FridgeDashboardTab refactored to DeviceDashboardLayout

LineGraph initialLoading bug fix

[sbg-webapp-vue3] 2026-03-16: Multi-asset alerts on property graphs
Mon, 16 Mar 2026
[sbg-webapp-vue3] 2026-03-16: Extract NewRelic alert conditions for self-hosted migration
Mon, 16 Mar 2026

Extracted all 36 alert conditions from the existing NewRelic instance managed by Mission Cloud, in preparation for decommissioning that instance and moving to a self-hosted NewRelic deployment.

[sbg-webapp-vue3] 2026-03-12: Fix v-data-table selection storing undefined values
Thu, 12 Mar 2026
[sbg-webapp-vue3] 2026-03-12: Fix [object Object] in DocumentCopyDialog selected value
Thu, 12 Mar 2026
[sbg-webapp-vue3] 2026-03-12: Fix [object Object] in manufacturer combobox dropdown
Thu, 12 Mar 2026
[sbg-webapp-vue3] 2026-03-12: Fix multi-select chips not rendering
Thu, 12 Mar 2026
[sbg-webapp-vue3] 2026-03-12: Fix duplicate item text in autocomplete dropdowns
Thu, 12 Mar 2026
[sbg-webapp-vue3] 2026-03-12: Fridge dashboard crash — investigation in progress
Thu, 12 Mar 2026

Two Vue 3 rendering errors when navigating to a fridge asset's dashboard tab. First error fixed; second still under investigation.

Fixed: Cannot read properties of null (reading 'emitsOptions')

Under investigation: Maximum recursive updates exceeded in component <PropertyGraphList>

[sbg-webapp-vue3] 2026-03-11: Promote dashboard layout to account default
Wed, 11 Mar 2026
[sbg-webapp-vue3] 2026-03-11: Bundle code-splitting plan
Wed, 11 Mar 2026
[sbg-webapp-vue3] 2026-03-11: Worklog RSS feed via Tailscale
Wed, 11 Mar 2026
[sbg-webapp-vue3] 2026-03-11: Dashboard section drag-to-reorder
Wed, 11 Mar 2026
[sbg-webapp-vue3] 2026-03-11: Dashboard settings dialog
Wed, 11 Mar 2026
[sbg-webapp-vue3] 2026-03-11: Dashboard lazy loading and lint fixes
Wed, 11 Mar 2026
[sbg-webapp-vue3] 2026-03-11: UI preference backend — fetchone fix and branch setup
Wed, 11 Mar 2026
[sbg-webapp-vue3] 2026-03-11: Fix NULL user_uuid in upsert/delete for account defaults
Wed, 11 Mar 2026
[sbg-webapp-vue3] 2026-03-11: Spacer scoping fix for property cards
Wed, 11 Mar 2026
[sbg-webapp-vue3] 2026-03-11: GraphQL permissions for UI preferences
Wed, 11 Mar 2026
[sbg-webapp-vue3] 2026-03-11: UI preference unit tests
Wed, 11 Mar 2026

## Known Issues to Investigate

VBtnToggle slot warning on asset config page

[sbg-webapp-vue3] 2026-03-10: Building Dashboard layout and styling improvements
Tue, 10 Mar 2026

Field sizing fix for Vuetify 3

DashboardOverview styling

AssetPropertyCard layout improvements

Control panel refinements (manual edits by Barry)

Customizable dashboard layout (backend + frontend)

[sbg-webapp-vue3] 2026-03-09: Building Dashboard - live cards, icons, and bugfixes
Mon, 09 Mar 2026

Dashboard cards refactored to use live components

Building navigation defaults to Dashboard

SVG icons for all sensor types

Bugfixes

[sbg-webapp-vue3] 2026-03-04: More Vuetify 3 migration fixes
Wed, 04 Mar 2026

AppNavbar.vue + UserAvatar.vue (Profile menu)

AssetImageCarousel.vue (Lightbox)

DocumentUploadDialog.vue (Document upload)

Data table toolbar fixes (5 files)

AppFooter.vue

SelectField.vue

LightboxCarousel.vue

StandardDialog.vue (Edit Building timezone dropdown)

FormField.vue (Console warnings)

Global styles (styles.scss)

BuildingControlsTab.vue (Controls sidebar)

[sbg-webapp-vue3] 2026-03-03: Visual regression fixes for Vuetify 3 migration
Tue, 03 Mar 2026

UnplacedAssetsCard.vue + AssetChip.vue (Building Floorplans page)

PortfolioMapTab.vue + PortfolioBuildingCard.vue (Home page)

BuildingView.vue + AppLayout.vue (Tab navigation)

FileField.vue + FormField.vue (Floorplan upload dialog)

- Root cause: FormField passes type: undefined as fallthrough attr; Vuetify's _mergeProps overrides type="file" with undefined

- Fix: Added defineOptions({ inheritAttrs: false }) to FileField.vue

- Root cause: Vuetify 3 v-file-input emits single File (not File[]) when multiple is not set. onFilesChanged tried files.length on a File object → undefined → emitted null

- Fix: Handle both File and File[] in onFilesChanged via instanceof File check. Removed unnecessary filesArray array adapter — pass modelValue directly to v-file-input

- Root cause: validateOnMount was passed as a computed() ref to vee-validate's useField(). vee-validate checks if (validateOnMount) which evaluates the ref OBJECT (always truthy), never accessing .value

- Fix: Changed to pass plain boolean instead of computed ref

- Also: Skip validation on initial value sync watcher (setFieldValue(newVal, false) on first call)