Skip to content

🎨 fix: Fall Back From an Invalid Theme in librechat.yaml Instead of Exiting - #16462

Merged
berry-13 merged 2 commits into
canaryfrom
berry-13/theme-config-validation
Sep 28, 2026
Merged

berry-13 merged 2 commits into
canaryfrom
berry-13/theme-config-validation

Conversation

@berry-13

@berry-13 berry-13 commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Pull Request

Summary

A mistake in interface.theme in librechat.yaml failed validation of the whole config, and the loader exits the process at startup (packages/api/src/app/loader.ts). A color key without the rgb- prefix, a mistyped field such as colours:, a value spaced as '240 244 255', or a theme written as a list was enough to stop the server. Other mistakes, like an rgb- token that does not exist or an out-of-range value, passed the loose server schema and were rejected silently in the browser.

The loader now checks interface.theme with the same rules the client applies before painting a theme. A theme the client would reject is removed before the config is validated, with one warning that names each problem by its path (interface.theme.modes.light.colors.rgb-surfce-secondary: Unknown color token: rgb-surfce-secondary), so the deployment runs on the default theme and every other setting loads. Unknown appearance tokens only warn and the theme is kept, matching the reader semantics from #16373. Startup and reload behave the same, and an error anywhere else in the config still exits at startup or rejects the reload. A valid theme is returned as the same object.

To keep one list, the color, appearance and brand token names and the validator move from the client registry to a new librechat-data-provider module (theme.ts). The client registry re-exports them with unchanged messages, and a compile-time check fails the build if the client theme types drift from the shared lists. config.ts is not touched.

How it works

loadCustomConfig
  yaml.load
  checkConfigTheme(config)          # packages/api/src/app/theme.ts
    collectThemeIssues(theme)       # librechat-data-provider theme.ts, shared with the client
    deploymentThemeSchema           # shape the client accepts but the schema would reject
    -> invalid: config without interface.theme, warn with paths
    -> unknown appearance token: same config, warn
  configSchema.strict().safeParse   # unchanged

Type of change

  • Bug fix
  • Refactor

Testing

Tested environments/configuration:

  • Node 24, loading yaml fixtures through the real api/server/services/Config/loadCustomConfig.js wiring in a child process.

Automated tests:

  • Added packages/api/src/app/loader.spec.ts with real yaml fixtures under packages/api/src/app/__fixtures__/theme: valid theme (unchanged, no warning), unknown color token, bad values, a malformed theme, a value only the schema rejects, an unknown appearance token (kept), an unrelated config error (still exits), and the same cases in reload mode. 10 passed.
  • Added e2e/specs/mock/scenarios/yaml-theme-fallback.spec.ts, 5 scenarios driving the /api loader wiring. 5 passed.
  • packages/client theme specs (registry, ThemeProvider, applyTheme, high contrast, ClickHouse, tailwind, tokens, SegmentedMeter): 314 passed with the moved validator.
  • api/server/services/Config/loadCustomConfig.spec.js: 28 passed. client DeploymentTheme spec: 16 passed.
  • npm run static-checks:full -- --against origin/canary: passed (depcheck not installed locally).

Screenshots / recordings

No user-facing change. An invalid theme already rendered the default theme in the browser; it now does so without stopping the server.

Risk / compatibility

A theme that used to load but was rejected by the client (for example an unknown rgb- token) is now also removed from /api/config. The browser result is the same default theme, and the reason moves from the browser console to the server log. Principal-scoped admin overrides of interface.theme do not go through this loader and are unchanged. Two appearance checks (a named shadow color and the full box-shadow value) use the browser's CSS parser, which Node does not have, so the server can keep a shadow value the browser later rejects; the client then discards the theme and falls back as it does today. The server never drops a theme the browser would paint.

Checklist

  • I reviewed my own changes
  • Relevant tests have been added or updated
  • Existing relevant tests pass
  • The change does not introduce new warnings or errors
  • Required dependency changes have been merged/published
  • Required documentation PR: N/A

A mistake in interface.theme failed the whole librechat.yaml and stopped
the server. The loader now checks the theme with the rules the client
applies before painting it, drops a theme the client would reject with a
warning naming each problem by path, and loads the rest of the config.
Unknown appearance tokens only warn, matching the reader. Startup and
reload behave the same.

The token lists and the validator move to librechat-data-provider so the
client registry and the server check against one list.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-28T20:34:17.593620Z c7c4bb1 New commits
🔒 Security Review ✅ Completed 2026-09-28T20:13:30.551985Z ebdb7e6 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ebdb7e6b78

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/api/src/app/theme.ts Outdated
if (typeof theme !== 'string' && !isPlainThemeRecord(theme)) {
return [{ path: [], message: 'Expected a bundled theme name or an inline theme definition' }];
}
const issues = typeof theme === 'string' ? [] : collectThemeIssues(theme);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Reject unknown bundled theme names during server validation

When interface.theme is a string such as clickhous, this branch skips collectThemeIssues, and deploymentThemeSchema accepts every non-empty string. However, resolveDeploymentTheme in client/src/Providers/DeploymentTheme.tsx recognizes only librechat and clickhouse, so the client still rejects the value. The new loader therefore neither removes nor server-warns about this invalid theme, contrary to its intended server-side fallback behavior; validate string values against the bundled theme registry or otherwise surface them as unsupported.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed in c7c4bb1. The bundled names now live in librechat-data-provider (bundledThemeNames); the client map in DeploymentTheme.tsx is typed Record<BundledThemeName, ThemeDefinition> so the two cannot drift, and the loader drops an unknown name with 'interface.theme: Unknown bundled theme "clickhous", expected one of: librechat, clickhouse'. Covered by loader.spec (unknown-name, bundled) and scenario yaml-theme-unknown-name-falls-back.

Comment thread packages/data-provider/src/theme.ts
A misspelled bundled name such as clickhous passed the server and was
rejected only in the browser. The bundled names now live in
librechat-data-provider; the client's theme map is typed against that
list and the loader drops a name outside it with a warning.
@github-actions

Copy link
Copy Markdown
Contributor

Lighthouse CI failed. The last 80 log lines contain the measured budgets and assertion failures.

│ 23      │ 'http://localhost:3080/api/permissions/mcpServer/effective/all'                                                 │ 3064.3400000000256 │ 3825.482000000018  │ 200    │
│ 24      │ 'http://localhost:3080/api/prompts/groups?limit=10'                                                             │ 3066.284000000014  │ 4333.15400000001   │ 200    │
│ 25      │ 'http://localhost:3080/api/keys?name=openAI'                                                                    │ 3354.107000000018  │ 3956.061000000016  │ 200    │
│ 26      │ 'http://localhost:3080/api/presets'                                                                             │ 3354.7460000000137 │ 3956.3270000000193 │ 200    │
│ 27      │ 'http://localhost:3080/api/tags'                                                                                │ 3355.5310000000172 │ 3961.9800000000105 │ 200    │
│ 28      │ 'http://localhost:3080/api/share/link/16390000-0000-4000-8000-000000000001'                                     │ 3356.5720000000147 │ 4333.648000000016  │ 200    │
│ 29      │ 'http://localhost:3080/api/messages/16390000-0000-4000-8000-000000000001'                                       │ 3357.0310000000172 │ 4464.762000000017  │ 200    │
│ 30      │ 'http://localhost:3080/api/files/config'                                                                        │ 3357.2640000000247 │ 4213.128000000026  │ 200    │
│ 31      │ 'http://localhost:3080/api/user/settings/favorites/tools'                                                       │ 3358.3980000000156 │ 4466.9190000000235 │ 200    │
│ 32      │ 'http://localhost:3080/api/endpoints/token-config'                                                              │ 3358.5930000000226 │ 4470.347000000009  │ 200    │
│ 33      │ 'http://localhost:3080/api/user/settings/skills/active'                                                         │ 3359.3490000000165 │ 4845.430000000022  │ 200    │
│ 34      │ 'http://localhost:3080/api/agents/tools/web_search/auth'                                                        │ 3359.8360000000102 │ 7355.875           │ 200    │
│ 35      │ 'http://localhost:3080/api/agents/tools/calls?conversationId=16390000-0000-4000-8000-000000000001'              │ 3362.418000000034  │ 4843.2850000000035 │ 200    │
│ 36      │ 'http://localhost:3080/api/agents/chat/status/16390000-0000-4000-8000-000000000001?generationProtocolVersion=2' │ 4593.3610000000335 │ 4848.78800000003   │ 200    │
└─────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴────────────────────┴────────┘

Inspect .lighthouse HTML/JSON and e2e/lighthouse/README.md. Reuse loaded user/config data; overlap independent reads without bypassing authorization.

┌─────────┬────────────────────────────┬──────────────────────┬───────┐
│ (index) │ audit                      │ median               │ limit │
├─────────┼────────────────────────────┼──────────────────────┼───────┤
│ 0       │ 'largest-contentful-paint' │ 4615.583             │ 4500  │
│ 1       │ 'cumulative-layout-shift'  │ 0.017903559196509346 │ 0.1   │
│ 2       │ 'total-blocking-time'      │ 369.31400000000076   │ 500   │
└─────────┴────────────────────────────┴──────────────────────┴───────┘

  1) [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

    Error: Median largest-contentful-paint must stay within 4500

    expect(received).toBeLessThanOrEqual(expected)

    Expected: <= 4500
    Received:    4615.583

       at audit.ts:159

      157 |   console.table(measured);
      158 |   for (const { audit, median, limit } of measured) {
    > 159 |     expect(median, `Median ${audit} must stay within ${limit}`).toBeLessThanOrEqual(limit);
          |                                                                 ^
      160 |   }
      161 |   return results;
      162 | }
        at auditPage (/home/runner/work/LibreChat/LibreChat/e2e/lighthouse/audit.ts:159:65)
        at /home/runner/work/LibreChat/LibreChat/e2e/lighthouse/load.spec.ts:33:19

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/error-context.md

    attachment #3: trace (application/zip) ─────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip
    Usage:

        npx playwright show-trace e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────


🤖: global teardown has been started
2026-09-28 20:34:42 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-28 20:34:42 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ✅  Found user in Database
🤖:  ✅  Deleted 1 convos & 2 messages
🤖:  ✅  Deleted user from Database
🤖: global teardown has been started
2026-09-28 20:34:43 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-28 20:34:43 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ⚠️  User not found in Database
  1 failed
    [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

Open the full run

@github-actions

Copy link
Copy Markdown
Contributor

Lighthouse CI failed. The last 80 log lines contain the measured budgets and assertion failures.

│ 23      │ 'http://localhost:3080/api/permissions/mcpServer/effective/all'                                                 │ 3038.659000000014  │ 3801.0780000000086 │ 200    │
│ 24      │ 'http://localhost:3080/api/prompts/groups?limit=10'                                                             │ 3038.9219999999914 │ 4305.247999999992  │ 200    │
│ 25      │ 'http://localhost:3080/api/keys?name=openAI'                                                                    │ 3328.987999999983  │ 3950.314000000013  │ 200    │
│ 26      │ 'http://localhost:3080/api/presets'                                                                             │ 3330.030999999988  │ 3958.847000000009  │ 200    │
│ 27      │ 'http://localhost:3080/api/tags'                                                                                │ 3330.2760000000126 │ 3984.4260000000068 │ 200    │
│ 28      │ 'http://localhost:3080/api/share/link/16390000-0000-4000-8000-000000000001'                                     │ 3331.1479999999865 │ 4307.5869999999995 │ 200    │
│ 29      │ 'http://localhost:3080/api/messages/16390000-0000-4000-8000-000000000001'                                       │ 3331.8150000000023 │ 4456.132000000012  │ 200    │
│ 30      │ 'http://localhost:3080/api/files/config'                                                                        │ 3332.4280000000144 │ 4213.505999999994  │ 200    │
│ 31      │ 'http://localhost:3080/api/user/settings/favorites/tools'                                                       │ 3332.9650000000256 │ 4489.065000000002  │ 200    │
│ 32      │ 'http://localhost:3080/api/endpoints/token-config'                                                              │ 3333.1989999999932 │ 4469.321999999986  │ 200    │
│ 33      │ 'http://localhost:3080/api/user/settings/skills/active'                                                         │ 3333.8099999999977 │ 4813.187000000005  │ 200    │
│ 34      │ 'http://localhost:3080/api/agents/tools/web_search/auth'                                                        │ 3334.2660000000033 │ 7327.185999999987  │ 200    │
│ 35      │ 'http://localhost:3080/api/agents/tools/calls?conversationId=16390000-0000-4000-8000-000000000001'              │ 3335.524999999994  │ 4816.386999999988  │ 200    │
│ 36      │ 'http://localhost:3080/api/agents/chat/status/16390000-0000-4000-8000-000000000001?generationProtocolVersion=2' │ 4567.532999999996  │ 4822.304000000004  │ 200    │
└─────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴────────────────────┴────────┘

Inspect .lighthouse HTML/JSON and e2e/lighthouse/README.md. Reuse loaded user/config data; overlap independent reads without bypassing authorization.

┌─────────┬────────────────────────────┬──────────────────────┬───────┐
│ (index) │ audit                      │ median               │ limit │
├─────────┼────────────────────────────┼──────────────────────┼───────┤
│ 0       │ 'largest-contentful-paint' │ 4601.625             │ 4500  │
│ 1       │ 'cumulative-layout-shift'  │ 0.017905407400110904 │ 0.1   │
│ 2       │ 'total-blocking-time'      │ 323.25400000000036   │ 500   │
└─────────┴────────────────────────────┴──────────────────────┴───────┘

  1) [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

    Error: Median largest-contentful-paint must stay within 4500

    expect(received).toBeLessThanOrEqual(expected)

    Expected: <= 4500
    Received:    4601.625

       at audit.ts:159

      157 |   console.table(measured);
      158 |   for (const { audit, median, limit } of measured) {
    > 159 |     expect(median, `Median ${audit} must stay within ${limit}`).toBeLessThanOrEqual(limit);
          |                                                                 ^
      160 |   }
      161 |   return results;
      162 | }
        at auditPage (/home/runner/work/LibreChat/LibreChat/e2e/lighthouse/audit.ts:159:65)
        at /home/runner/work/LibreChat/LibreChat/e2e/lighthouse/load.spec.ts:33:19

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/error-context.md

    attachment #3: trace (application/zip) ─────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip
    Usage:

        npx playwright show-trace e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────


🤖: global teardown has been started
2026-09-28 20:40:23 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-28 20:40:23 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ✅  Found user in Database
🤖:  ✅  Deleted 1 convos & 2 messages
🤖:  ✅  Deleted user from Database
🤖: global teardown has been started
2026-09-28 20:40:24 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-28 20:40:24 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ⚠️  User not found in Database
  1 failed
    [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

Open the full run

@github-actions

Copy link
Copy Markdown
Contributor

Lighthouse CI failed. The last 80 log lines contain the measured budgets and assertion failures.

│ 24      │ 'http://localhost:3080/api/prompts/groups?limit=10'                                                             │ 3069.2889999999898 │ 4339.071999999986  │ 200    │
│ 25      │ 'http://localhost:3080/api/keys?name=openAI'                                                                    │ 3386.965999999986  │ 3978.4929999999877 │ 200    │
│ 26      │ 'http://localhost:3080/api/presets'                                                                             │ 3388.076999999961  │ 4001.4829999999783 │ 200    │
│ 27      │ 'http://localhost:3080/api/tags'                                                                                │ 3388.3489999999583 │ 4002.2299999999814 │ 200    │
│ 28      │ 'http://localhost:3080/api/share/link/16390000-0000-4000-8000-000000000001'                                     │ 3389.747000000003  │ 4341.157999999967  │ 200    │
│ 29      │ 'http://localhost:3080/api/messages/16390000-0000-4000-8000-000000000001'                                       │ 3389.9689999999828 │ 4487.201000000001  │ 200    │
│ 30      │ 'http://localhost:3080/api/files/config'                                                                        │ 3390.1969999999856 │ 4259.920999999973  │ 200    │
│ 31      │ 'http://localhost:3080/api/user/settings/favorites/tools'                                                       │ 3392.469999999972  │ 4512.3979999999865 │ 200    │
│ 32      │ 'http://localhost:3080/api/endpoints/token-config'                                                              │ 3392.6759999999776 │ 4517.476999999984  │ 200    │
│ 33      │ 'http://localhost:3080/api/user/settings/skills/active'                                                         │ 3393.021999999968  │ 4847.713999999978  │ 200    │
│ 34      │ 'http://localhost:3080/api/agents/tools/web_search/auth'                                                        │ 3393.4019999999728 │ 7373.366999999969  │ 200    │
│ 35      │ 'http://localhost:3080/api/agents/tools/calls?conversationId=16390000-0000-4000-8000-000000000001'              │ 3393.798999999999  │ 4853.245999999985  │ 200    │
│ 36      │ 'http://localhost:3080/api/agents/chat/status/16390000-0000-4000-8000-000000000001?generationProtocolVersion=2' │ 4597.677999999956  │ 4858.243999999977  │ 200    │
└─────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴────────────────────┴────────┘

Inspect .lighthouse HTML/JSON and e2e/lighthouse/README.md. Reuse loaded user/config data; overlap independent reads without bypassing authorization.

┌─────────┬────────────────────────────┬─────────────────────┬───────┐
│ (index) │ audit                      │ median              │ limit │
├─────────┼────────────────────────────┼─────────────────────┼───────┤
│ 0       │ 'largest-contentful-paint' │ 4609.352            │ 4500  │
│ 1       │ 'cumulative-layout-shift'  │ 0.01790359181186702 │ 0.1   │
│ 2       │ 'total-blocking-time'      │ 354.22900000000027  │ 500   │
└─────────┴────────────────────────────┴─────────────────────┴───────┘

  1) [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

    Error: Median largest-contentful-paint must stay within 4500

    expect(received).toBeLessThanOrEqual(expected)

    Expected: <= 4500
    Received:    4609.352

       at audit.ts:159

      157 |   console.table(measured);
      158 |   for (const { audit, median, limit } of measured) {
    > 159 |     expect(median, `Median ${audit} must stay within ${limit}`).toBeLessThanOrEqual(limit);
          |                                                                 ^
      160 |   }
      161 |   return results;
      162 | }
        at auditPage (/home/runner/work/LibreChat/LibreChat/e2e/lighthouse/audit.ts:159:65)
        at /home/runner/work/LibreChat/LibreChat/e2e/lighthouse/load.spec.ts:33:19

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/error-context.md

    attachment #3: trace (application/zip) ─────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip
    Usage:

        npx playwright show-trace e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────


🤖: global teardown has been started
2026-09-28 20:50:25 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-28 20:50:25 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ✅  Found user in Database
🤖:  ✅  Deleted 1 convos & 2 messages
🤖:  ✅  Deleted user from Database
🤖: global teardown has been started
2026-09-28 20:50:26 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-28 20:50:26 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
2026-09-28 20:50:26 �[31merror�[39m: �[31mIndex build failed for "Conversation": Operation interrupted because client was closed�[39m
🤖:  ✅  Connected to Database
🤖:  ⚠️  User not found in Database
  1 failed
    [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

Open the full run

@berry-13
berry-13 merged commit 6ec919e into canary Sep 28, 2026
42 of 45 checks passed
@berry-13
berry-13 deleted the berry-13/theme-config-validation branch September 28, 2026 22:02
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