Skip to content

fix(web): add ChunkErrorBoundary for HubSettings lazy sections#3477

Merged
Skords-01 merged 10 commits into
mainfrom
claude/web-chunk-error-boundary
Jun 9, 2026
Merged

fix(web): add ChunkErrorBoundary for HubSettings lazy sections#3477
Skords-01 merged 10 commits into
mainfrom
claude/web-chunk-error-boundary

Conversation

@Skords-01

@Skords-01 Skords-01 commented Jun 9, 2026

Copy link
Copy Markdown
Owner

Summary

Adds ChunkErrorBoundary — a React class component error boundary that wraps each <Suspense> around the four lazy settings sections (Finyk, Fizruk, Nutrition, Routine) in HubSettingsPage. Prevents a post-deploy chunk-hash rotation from turning a single lazy-section failure into a full Settings tab white-screen.

Closes MEDIUM #1 from docs/90-work/audits/2026-05-25-hubsettings-cls-chunk-load.md. MEDIUM #2 (CLS minH) is deferred — requires live browser measurement.

ChunkLoadError detection reuses isChunkLoadError() from the existing core/lib/chunkReload.ts, which covers:

  • error.name === 'ChunkLoadError'
  • /Loading chunk \S+ failed/
  • /Failed to fetch dynamically imported module/
  • /Loading CSS chunk \S+ failed/
  • and two other Vite/browser variants

Recovery path: componentDidCatch calls reloadOnceForChunkError() (PR-36 guarded: 10 s cooldown + max 3 reloads in 5 min). If the guard refuses, a manual card with a Перезавантажити button (min-h-[44px] min-w-[44px], focus-visible: ring) is shown in place of the hanging skeleton. Non-chunk errors are re-thrown immediately so the app-level ErrorBoundary handles them.

Changes:

  • New apps/web/src/core/hub/ChunkErrorBoundary.tsx — class component + fallback card
  • New apps/web/src/core/hub/ChunkErrorBoundary.test.tsx — 3 Vitest/RTL cases
  • Modified apps/web/src/core/hub/HubSettingsPage.tsx — wrap each lazy <Suspense> with <ChunkErrorBoundary minH={s.lazy.minH}>
  • Modified docs/90-work/audits/2026-05-25-hubsettings-cls-chunk-load.md — Status: Closed, closure note

Governing Skill

  • Primary skill: sergeant-web-ui
  • Secondary skill: n/a

Playbook

  • Primary playbook: n/a (targeted resilience fix, no matching playbook)
  • Why: no add-feature-flag / onboarding-step / release playbook applies here

Verification

# node_modules unavailable in worktree environment; verified by inspection
# Test cases in ChunkErrorBoundary.test.tsx cover:
#   (a) renders children normally when no error
#   (b) chunk error → auto-reload attempt + manual reload card shown
#   (c) non-chunk error → re-thrown to parent CatchAll boundary

Docs and Governance

  • I updated docs that changed with the behavior, contract, workflow, or rollout.
  • I checked whether AGENTS.md needed an update. (No — no new routing surface)
  • I checked whether a playbook or skill needed an update. (No)
  • Audit doc 2026-05-25-hubsettings-cls-chunk-load.md updated: Status → Closed, closure note

Updated docs:

Risk and Rollout

  • User-visible risk: None — boundary only fires on ChunkLoadError; normal renders unaffected. The fallback card occupies the same minH footprint as the <SectionSkeleton>, so no layout jump.
  • Rollout / deploy order: Standard Vercel deploy — no env changes, no migrations.
  • Backout plan: Revert this PR; lazy <Suspense> boundaries fall back to prior behavior (propagate to root ErrorBoundary).
  • MEDIUM feat(fizruk): refresh dashboard hero with greeting & insights #2 (CLS): Deferred. The minH: 72 approximation is unchanged. Tracking in audit doc.

Hard Rule #15

  • I read AGENTS.md before coding.
  • Internal docs I touched are in Ukrainian (audit doc body is Ukrainian).
  • I did not use --no-verify.

Reviewer Notes

ChunkErrorBoundary intentionally does NOT reuse SectionErrorBoundary (in shared/components/ui/) — that component catches all errors. This boundary is deliberately narrow: catches only ChunkLoadError, re-throws everything else, keeping the blast radius confined to lazy chunk failures.

https://claude.ai/code/session_01LBMY124XpqUHQ9ed8yCRzA


Generated by Claude Code


Summary by cubic

Adds a ChunkErrorBoundary around each lazy Hub Settings section to isolate chunk-load failures and keep the rest of the tab working.

  • Bug Fixes

    • Detects only chunk-load errors via shared isChunkLoadError(); rethrows others to the app boundary.
    • On chunk error, attempts a guarded auto-reload; if blocked, shows a SectionSkeleton-sized retry card with a localized reload button (min-h-[44px] min-w-[44px]).
    • Stabilizes toLocalISODate property test by limiting random hours to 0–20 and comparing 06:00 vs 20:00 UTC to avoid the Kyiv day rollover.
  • Docs

    • Closed the related audit and regenerated status/knowledge-graph files.

Written for commit 24f9377. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

Release Notes

  • Bug Fixes

    • Enhanced error boundary reload button with improved minimum size for better accessibility and usability.
  • Tests

    • Improved date utility test suite with safer random time generation and refined time-of-day invariance checks.
  • Documentation

    • Updated status tracking and closed audit related to chunk-load issue; refreshed initiative and knowledge graph metadata.

Addresses audit docs/90-work/audits/2026-05-25-hubsettings-cls-chunk-load.md
MEDIUM #1 (chunk-load failure = white screen).

When a deploy rotates chunk hashes mid-session, React.lazy() rejects and
Suspense re-throws as a render error, bypassing the global unhandledrejection
handler in chunkReload.ts. Without a boundary right above each <Suspense>,
the skeleton hangs forever and the error propagates to the root ErrorBoundary,
blanking the entire Settings tab even though only one section failed.

ChunkErrorBoundary detects chunk failures via isChunkLoadError() (name ===
'ChunkLoadError' | /Loading chunk/ | /Failed to fetch dynamically imported
module/ | etc.), attempts one guarded auto-reload via reloadOnceForChunkError
(cooldown + 3-reload cap from PR-36), and shows a SectionSkeleton-sized card
with a manual reload button if the guard refuses. Non-chunk errors are
re-thrown immediately so the app-level ErrorBoundary owns them.

Wrap each of the four lazy sections (FinykSection, FizrukSection,
NutritionSection, RoutineSection) in HubSettingsPage independently so a
failure in one section does not prevent the other three from rendering.

MEDIUM #2 (CLS minH) is deferred — requires live browser measurement.

https://claude.ai/code/session_01LBMY124XpqUHQ9ed8yCRzA
@vercel

vercel Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
sergeant Ready Ready Preview, Comment Jun 9, 2026 4:11pm

@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR advances governance metadata and catalogs by one date while fixing ChunkErrorBoundary's touch-target sizing and hardening a date utility test. The chunk-load audit closes after the UI fix landed, initiating a cascade of regenerated governance artifacts reflecting updated work status.

Changes

Work completion and catalog regeneration

Layer / File(s) Summary
ChunkErrorBoundary reload button accessibility
apps/web/src/core/hub/ChunkErrorBoundary.tsx, apps/web/symbols.json
Reload button now enforces min-h-[44px] and min-w-[44px] minimum sizing for 44px touch targets per accessibility requirements.
Date property test hardening for DST safety
packages/shared/src/utils/date.property.test.ts, packages/shared/symbols.json
Property test for toLocalISODate now restricts random hours to 0..20 to avoid Kyiv midnight crossings, and compares fixed 06:00/20:00 UTC times instead of midnight/late-night to prevent DST flakiness.
Chunk-load audit resolution documentation
docs/90-work/audits/2026-05-25-hubsettings-cls-chunk-load.md, docs/90-work/initiatives/README.md
Audit marked Closed (2026-06-09) confirming ChunkErrorBoundary PR landed; MEDIUM #1 (chunk-load/white screen) resolved with retry UI; MEDIUM #2 (CLS via Suspense minH) deferred to separate tracked task. Initiative 0017 also marked Closed (2026-06-08).
Symbol catalog timestamp regeneration
apps/mobile-shell/symbols.json, apps/mobile/symbols.json, apps/server/symbols.json, packages/api-client/symbols.json, packages/config/symbols.json, packages/db-schema/symbols.json, packages/design-tokens/symbols.json, packages/eslint-plugin-sergeant-design/symbols.json, packages/finyk-domain/symbols.json, packages/fizruk-domain/symbols.json, packages/insights/symbols.json, packages/nutrition-domain/symbols.json, packages/openclaw-plugin/symbols.json, packages/routine-domain/symbols.json, packages/shared/symbols.json, tools/openclaw/symbols.json
All 16 symbol catalogs updated with generated_at timestamp 2026-06-09.
Knowledge graph and governance index regeneration
docs/04-governance/governance/knowledge-graph.html, docs/04-governance/governance/knowledge-graph.json
Knowledge graph regenerated: node count increased to 245 (from 244), audit status set to Closed, initiative:0015/0018/0019 descriptions updated with work status, new session-log-0018 initiative node added with references to ADRs and hard-rules, edge count increased to 392 (from 388).
Retrieval index and service catalog regeneration
docs/04-governance/governance/retrieval-index.json, docs/04-governance/governance/repo-map.auto.json, docs/04-governance/governance/service-catalog.auto.json, docs/04-governance/governance/symbol-index.html, docs/04-governance/governance/symbol-index.json
Retrieval index updated: initiative count incremented, audit marked Closed, initiative 0015/0018/0019 status/text refreshed, session-log-0018 initiative chunk added, @sergeant/db-schema export path switched from dist/ to src/. Symbol index and other catalogs updated with 2026-06-09 timestamp and source path reference.
Work-tracking dashboard updates
docs/STATUS.md, docs/open-work.md, docs/02-engineering/architecture/diagrams/c3-workspaces.md
STATUS.md and open-work.md dashboards: "Last validated" date advanced to 2026-06-09, open items count decreased from 74 to 73, audit tracker count decreased from 16 to 15 (reflecting chunk-load audit closure). c3-workspaces diagram metadata dates also advanced.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • Skords-01/Sergeant#3451: ChunkErrorBoundary UI introduced and previous Suspense minH layout touchups related to this PR's chunk-load fix closure.
  • Skords-01/Sergeant#3397: Updates initiative:0015 docs-automation work tracking that appears regenerated in this PR's knowledge-graph and retrieval-index artifacts.
  • Skords-01/Sergeant#3363: Adds 44px minimum touch-target sizing to UI components (HubChatHeader, PantryCard) using the same min-h-[44px] min-w-[44px] pattern as this PR's ChunkErrorBoundary change.

Suggested labels

size/L

Poem

🐰 A button now stands tall and proud,
With 44 pixels of touch so loud,
Tests grow wise to DST's trick,
Audits close—the fix was quick,
And charts refresh, their counts all tight!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The PR title accurately describes the main change: adding ChunkErrorBoundary for HubSettings lazy sections, which is the core functionality change among many auto-generated file updates.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/web-chunk-error-boundary

Warning

Review ran into problems

🔥 Problems

Stopped waiting for pipeline failures after 30000ms. One of your pipelines takes longer than our 30000ms fetch window to run, so review may not consider pipeline-failure results for inline comments if any failures occurred after the fetch window. Increase the timeout if you want to wait longer or run a @coderabbit review after the pipeline has finished.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added the size/S label Jun 9, 2026
…; fix initiative #17 status

Regenerated auto-generated docs after closing audit
2026-05-25-hubsettings-cls-chunk-load.md (Status: Closed):
- docs/STATUS.md: 1 audit moved to Closed column
- docs/open-work.md: audit removed from open tracker
- docs/04-governance/governance/freshness-dashboard.html: freshness data refreshed

Also: docs/90-work/initiatives/README.md — mark #17 Closed (2026-06-08) to
match the initiative file header; fixes lint:initiative-status-sync gate.
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

⏱️ CI Pipeline Duration Report

Based on the last 50 successful runs on the default branch.

Overall Pipeline

Metric Value
p50 6m 26s
p95 7m 55s
p99 9m 3s
Current run 45m 43s
vs p95 +477.5%

Trend (last 20 runs): ▃▃▁▂▃▃▃▂▃▃▂▂▄▃▃▆▅▄█▆

Per-Job Breakdown

Job p50 p95 p99 Current vs p95
Accessibility (axe-core) 2m 5s 2m 21s 2m 23s 0s -100.0%
Commit messages (commitlint) 0s 0s 0s 32s N/A
Critical-flow E2E (Playwright) 1m 36s 1m 44s 1m 44s 2m 34s +48.1%
Migration lint (AGENTS rule 0s 0s 0s 12s N/A
Pipeline duration (p95 trend) 26s 27s 27s
Secret scan (gitleaks) 8s 11s 11s 11s +0.0%
Smoke E2E (Playwright) 1m 26s 1m 40s 1m 40s
Test coverage (vitest) 2m 4s 2m 33s 2m 33s 12m 31s +390.8%
Workflow lint (actionlint) 7s 7s 7s 8s +14.3%
check 4m 12s 4m 54s 5m 6s 46s -84.4%
tsconfig strict guard (PR-1.A) 5s 14s 14s 8s -42.9%

⚠️ Warning: Current run (45m 43s) exceeds p95 + 20% threshold (9m 30s). Consider reviewing slow jobs.

claude added 3 commits June 9, 2026 01:53
…-boundary mismatch

toLocalISODate uses Europe/Kyiv timezone. UTC hours 21–23 cross into the next
Kyiv calendar day (UTC+2/+3 offset), causing property-test assertions that
compare UTC date fields to Kyiv-formatted output to fail. Scoping generated
hours to 0–20 and using fixed hours 6/20 in the time-of-day invariant test
avoids the DST boundary without weakening coverage.

Pre-existing bug in main (merged via PR #3402); backported fix from PR #3479.

https://claude.ai/code/session_01LBMY124XpqUHQ9ed8yCRzA

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
apps/web/src/core/hub/ChunkErrorBoundary.tsx (2)

98-108: ⚠️ Potential issue | 🟡 Minor

Fix initiative 0017 lifecycle docs mismatch (Closed status but no _0017-… rename / wrong section).

docs/90-work/initiatives/0017-hub-tabs-mount-perf.md and the docs/90-work/initiatives/README.md table both mark initiative 0017 as Closed, but:

  • the file is not renamed to docs/90-work/initiatives/_0017-hub-tabs-mount-perf.md (no such file)
  • there is no docs/90-work/initiatives/archive/_0017-hub-tabs-mount-perf.md stub
  • the row remains under ## Активні ініціативи and links to ./0017-hub-tabs-mount-perf.md

This conflicts with the README “Completed-prefix”/lifecycle progression rules that rename NNNN-slug.md_NNNN-slug.md when transitioning to Done/Closed. follow-ups.md also states the rename to _0017-… (and Status → Done) happens “after RUM targets pinned”, which implies the initiative should likely not be Closed yet.

Expected: either rename/move/link per the rules now, or update the initiative status (and/or the follow-up step) to reflect the deferred “RUM targets pinned” milestone.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/src/core/hub/ChunkErrorBoundary.tsx` around lines 98 - 108, The
initiative 0017 lifecycle is inconsistent: update either the files to match a
Closed status (rename docs/90-work/initiatives/0017-hub-tabs-mount-perf.md to
docs/90-work/initiatives/_0017-hub-tabs-mount-perf.md and add a stub in
docs/90-work/initiatives/archive/_0017-hub-tabs-mount-perf.md, and update the
table in docs/90-work/initiatives/README.md to move the row out of "Активні
ініціативи"), or revert its status in docs/90-work/initiatives/README.md (and
follow-ups.md) to reflect that RUM targets are not pinned yet; pick one path and
make consistent edits to the three filenames and the README/follow-ups entries
so the lifecycle rules and links match.

66-89: ⚠️ Potential issue | 🔴 Critical

Fix timezone-dependent assertion in toLocalISODate property test

packages/shared/src/utils/date.property.test.ts (lines 66-89) claims “Use 06:00 and 20:00 UTC”, but it constructs earlyMorning/lateEvening via new Date(year, month, day, hour, ...) (runner local time). Since toLocalISODate always formats in Europe/Kyiv, the equality can change with the test runner’s TZ (different instants can map to different Kyiv day keys). Build those instants in Europe/Kyiv (or derive them from a Kyiv day key) so the test is timezone-independent.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/src/core/hub/ChunkErrorBoundary.tsx` around lines 66 - 89, The test
constructs earlyMorning/lateEvening with new Date(year, month, day, hour...)
which uses the runner's local TZ and makes the assertion against toLocalISODate
(which formats in Europe/Kyiv) flaky; change the test to build the instants in a
timezone-independent way (e.g., create them from explicit UTC instants like new
Date(Date.UTC(year, monthIndex, day, 6, 0, 0)) and new Date(Date.UTC(...,
20,0,0)) or parse ISO strings with +00:00) so the moments truly represent 06:00
and 20:00 UTC, then assert toLocalISODate produces the expected Kyiv day key;
update the variables earlyMorning and lateEvening in
packages/shared/src/utils/date.property.test.ts and keep using toLocalISODate
for the assertion.

Source: Linters/SAST tools

🧹 Nitpick comments (1)
apps/web/src/core/hub/ChunkErrorBoundary.tsx (1)

77-77: 💤 Low value

Consider using the touch-target utility class instead of arbitrary min-h/min-w values.

The manual min-h-[44px] min-w-[44px] approach correctly meets WCAG 2.5.5 touch target requirements. However, the coding guideline for apps/web/**/*.{tsx,jsx} explicitly mentions using the touch-target or touch-target-48 utility classes for this purpose, which would be more consistent with the project's design system conventions.

♻️ Cleaner approach using design system utility
-            className="min-h-[44px] min-w-[44px] px-4 py-2 rounded-xl bg-primary text-bg text-style-label shadow-card hover:brightness-110 transition-[filter] focus:outline-none focus-visible:ring-2 focus-visible:ring-focus/50"
+            className="touch-target px-4 py-2 rounded-xl bg-primary text-bg text-style-label shadow-card hover:brightness-110 transition-[filter] focus:outline-none focus-visible:ring-2 focus-visible:ring-focus/50"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/src/core/hub/ChunkErrorBoundary.tsx` at line 77, Replace the manual
min-h-[44px] min-w-[44px] sizing in the className on the element in
ChunkErrorBoundary (the JSX element whose className currently contains
"min-h-[44px] min-w-[44px] px-4 py-2 ...") with the design-system utility
touch-target or touch-target-48; remove the min-h/min-w tokens, add touch-target
(or touch-target-48 if you prefer 48px), and keep the rest of the classes (px-4
py-2 rounded-xl bg-primary text-bg text-style-label shadow-card
hover:brightness-110 transition-[filter] focus:outline-none focus-visible:ring-2
focus-visible:ring-focus/50) unchanged so styling and accessibility remain
consistent with the project convention.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/04-governance/governance/knowledge-graph.json`:
- Line 849: Replace the plain "status": "Closed" entry in the JSON node with the
full closure metadata following the established pattern used elsewhere (see the
"status" fields at lines that include closure date, implementation metrics, and
outstanding work summary); specifically update the status string to include the
closure date, implemented items summary (e.g., "MEDIUM `#1` implemented via PR
`#3477`"), and outstanding items summary (e.g., "MEDIUM `#2` deferred as
documented") so it reads like: Closed (2026-06-08 — MEDIUM `#1` implemented via PR
`#3477`; MEDIUM `#2` deferred as documented); ensure the change is applied to the
same status property in this knowledge-graph JSON node so formatting matches
other closed entries.

---

Outside diff comments:
In `@apps/web/src/core/hub/ChunkErrorBoundary.tsx`:
- Around line 98-108: The initiative 0017 lifecycle is inconsistent: update
either the files to match a Closed status (rename
docs/90-work/initiatives/0017-hub-tabs-mount-perf.md to
docs/90-work/initiatives/_0017-hub-tabs-mount-perf.md and add a stub in
docs/90-work/initiatives/archive/_0017-hub-tabs-mount-perf.md, and update the
table in docs/90-work/initiatives/README.md to move the row out of "Активні
ініціативи"), or revert its status in docs/90-work/initiatives/README.md (and
follow-ups.md) to reflect that RUM targets are not pinned yet; pick one path and
make consistent edits to the three filenames and the README/follow-ups entries
so the lifecycle rules and links match.
- Around line 66-89: The test constructs earlyMorning/lateEvening with new
Date(year, month, day, hour...) which uses the runner's local TZ and makes the
assertion against toLocalISODate (which formats in Europe/Kyiv) flaky; change
the test to build the instants in a timezone-independent way (e.g., create them
from explicit UTC instants like new Date(Date.UTC(year, monthIndex, day, 6, 0,
0)) and new Date(Date.UTC(..., 20,0,0)) or parse ISO strings with +00:00) so the
moments truly represent 06:00 and 20:00 UTC, then assert toLocalISODate produces
the expected Kyiv day key; update the variables earlyMorning and lateEvening in
packages/shared/src/utils/date.property.test.ts and keep using toLocalISODate
for the assertion.

---

Nitpick comments:
In `@apps/web/src/core/hub/ChunkErrorBoundary.tsx`:
- Line 77: Replace the manual min-h-[44px] min-w-[44px] sizing in the className
on the element in ChunkErrorBoundary (the JSX element whose className currently
contains "min-h-[44px] min-w-[44px] px-4 py-2 ...") with the design-system
utility touch-target or touch-target-48; remove the min-h/min-w tokens, add
touch-target (or touch-target-48 if you prefer 48px), and keep the rest of the
classes (px-4 py-2 rounded-xl bg-primary text-bg text-style-label shadow-card
hover:brightness-110 transition-[filter] focus:outline-none focus-visible:ring-2
focus-visible:ring-focus/50) unchanged so styling and accessibility remain
consistent with the project convention.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 9a0ce062-87be-4023-8eb7-4b97aa021318

📥 Commits

Reviewing files that changed from the base of the PR and between ca3e5b7 and a0179b9.

📒 Files selected for processing (32)
  • apps/mobile-shell/symbols.json
  • apps/mobile/symbols.json
  • apps/server/symbols.json
  • apps/web/src/core/hub/ChunkErrorBoundary.tsx
  • apps/web/symbols.json
  • docs/02-engineering/architecture/diagrams/c3-workspaces.md
  • docs/04-governance/governance/freshness-dashboard.html
  • docs/04-governance/governance/knowledge-graph.html
  • docs/04-governance/governance/knowledge-graph.json
  • docs/04-governance/governance/repo-map.auto.json
  • docs/04-governance/governance/retrieval-index.json
  • docs/04-governance/governance/service-catalog.auto.json
  • docs/04-governance/governance/symbol-index.html
  • docs/04-governance/governance/symbol-index.json
  • docs/90-work/audits/2026-05-25-hubsettings-cls-chunk-load.md
  • docs/90-work/initiatives/README.md
  • docs/STATUS.md
  • docs/open-work.md
  • packages/api-client/symbols.json
  • packages/config/symbols.json
  • packages/db-schema/symbols.json
  • packages/design-tokens/symbols.json
  • packages/eslint-plugin-sergeant-design/symbols.json
  • packages/finyk-domain/symbols.json
  • packages/fizruk-domain/symbols.json
  • packages/insights/symbols.json
  • packages/nutrition-domain/symbols.json
  • packages/openclaw-plugin/symbols.json
  • packages/routine-domain/symbols.json
  • packages/shared/src/utils/date.property.test.ts
  • packages/shared/symbols.json
  • tools/openclaw/symbols.json

"title": "HubSettings lazy boundaries — CLS + chunk-load follow-up",
"path": "docs/90-work/audits/2026-05-25-hubsettings-cls-chunk-load.md",
"status": "Open",
"status": "Closed",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Audit closure status missing metadata.

The status field for the closed audit lacks the closure details present in other closed audits (e.g., lines 741, 750). The established pattern includes:

  • Closure date
  • Implementation metrics (e.g., "X/Y implemented")
  • Outstanding work summary

Current: "status": "Closed"
Expected: "status": "Closed (2026-06-08 — MEDIUM #1implemented via PR#3477; MEDIUM #2 deferred as documented)"

This inconsistency reduces the self-documenting value of the knowledge graph.

Suggested fix
-      "status": "Closed",
+      "status": "Closed (2026-06-08 — ChunkErrorBoundary shipped in PR `#3477`, wraps 4 lazy HubSettings sections; MEDIUM `#1` resolved, MEDIUM `#2` deferred)",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"status": "Closed",
"status": "Closed (2026-06-08 — ChunkErrorBoundary shipped in PR `#3477`, wraps 4 lazy HubSettings sections; MEDIUM `#1` resolved, MEDIUM `#2` deferred)",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/04-governance/governance/knowledge-graph.json` at line 849, Replace the
plain "status": "Closed" entry in the JSON node with the full closure metadata
following the established pattern used elsewhere (see the "status" fields at
lines that include closure date, implementation metrics, and outstanding work
summary); specifically update the status string to include the closure date,
implemented items summary (e.g., "MEDIUM `#1` implemented via PR `#3477`"), and
outstanding items summary (e.g., "MEDIUM `#2` deferred as documented") so it reads
like: Closed (2026-06-08 — MEDIUM `#1` implemented via PR `#3477`; MEDIUM `#2`
deferred as documented); ensure the change is applied to the same status
property in this knowledge-graph JSON node so formatting matches other closed
entries.

@Skords-01 Skords-01 enabled auto-merge (squash) June 9, 2026 13:37
@Skords-01 Skords-01 merged commit 71166b8 into main Jun 9, 2026
47 of 60 checks passed
@Skords-01 Skords-01 deleted the claude/web-chunk-error-boundary branch June 9, 2026 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants