Skip to content

fix(observability): five React defects incl. Memory Graph crash on fresh installs - #1735

Open
elhoim wants to merge 5 commits into
danielmiessler:mainfrom
elhoim:fix/observability-ui
Open

fix(observability): five React defects incl. Memory Graph crash on fresh installs#1735
elhoim wants to merge 5 commits into
danielmiessler:mainfrom
elhoim:fix/observability-ui

Conversation

@elhoim

@elhoim elhoim commented Aug 3, 2026

Copy link
Copy Markdown

5 commits, one per fix, so each can be cherry-picked independently. Each was verified to apply cleanly onto 47df8ee by itself.

Commit Fix
bbe709a stop the Memory Graph route crashing on fresh installs
52552da clear the Ledger error on a successful poll
d730b30 clear the Algorithm regenerate interval on unmount
9e04106 make Live-sessions rows actually expand
524028c abort in-flight CapabilityStrip fetches on window switch

Five React defects under LIFEOS/PULSE/Observability/src/.

  • app/memory/graph/page.tsx:257data.themes.map crashes the whole Memory Graph route on a fresh install. handleMemoryGraphApi returns a default 200 carrying communities and no themes when the graph file is absent, and the only guard is !data, which a truthy themeless object passes. themes is now optional on the interface and the call site defaults it.
  • app/ledger/page.tsx:90 — the success path never cleared error, and if (error) replaces the whole page, so one transient fetch failure pinned the Ledger to its error state permanently.
  • app/algorithm/page.tsx:275setInterval created inside a click handler rather than an effect, leaking up to 15 minutes of setState on an unmounted component. Adds a ref plus an unmount effect, matching the file's existing idiom.
  • components/activity/WorkBoard.tsx:950 — the Live-sessions section hard-coded expanded={false} and a no-op onToggle while BoardRow still rendered the chevron, cursor-pointer and hover background, so the row advertised itself as clickable and did nothing. Wired to expandedId/setExpandedId exactly as the sibling sections are.
  • components/activity/CapabilityStrip.tsx:153 — no AbortController or generation guard, so after a window switch the slower 24h response overwrote the newer 1h one.

Verified: tsc --noEmit output is byte-identical to the clean tree (confirmed by stashing and re-running) — the one remaining error is pre-existing in app/telos/_v7/app.tsx, untouched here. next build was deliberately not run: generateBuildId uses a timestamp and distDir is the tracked out/, so it would rewrite committed artifacts, and typescript.ignoreBuildErrors is set so it adds no checking.


Testing. Commands and output are in the per-file notes above. I did not do a fresh-system install verification (contributing step 3) — these are targeted fixes verified per-file, not an install run.

elhoim added 5 commits August 3, 2026 07:01
…talls

The no-graph fallback returns HTTP 200 with communities and no themes, and the
only guard was !data, which a truthy themeless object passes.
The success path never reset error, and `if (error)` replaces the whole page,
so one transient failure pinned the Ledger to its error state permanently.
setInterval was created inside a click handler rather than an effect, leaking
up to 15 minutes of setState on an unmounted component.
The section hard-coded expanded={false} and a no-op onToggle while BoardRow
still rendered the chevron, cursor-pointer and hover background, so the row
advertised itself as clickable and did nothing.
… switch

Without an AbortController the slower 24h response overwrote the newer 1h one.
@elhoim
elhoim force-pushed the fix/observability-ui branch from 59d90b8 to 524028c Compare August 3, 2026 07:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant