mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-18 21:22:28 +03:00
* fix(memory): auto-check Qdrant health on mount and stop false-red badge The Qdrant engine card on /dashboard/memory?tab=engine showed a red "Error" badge after every page refresh even when Qdrant was healthy: the badge derives its state from a health check, but the mount effect only fetched settings + embedding models — health started as null and the render treated `health?.ok` (undefined) as a failure. Clicking "Test connection" (which runs the same server-side /readyz check) immediately turned it green, proving the connection was fine. Two changes: - Auto-run the health check on mount once settings load and Qdrant is enabled, so a refreshed page reflects the real state (verified live: /api/settings/qdrant/health returns ok:true in ~2ms on a healthy compose deployment). - While health has not been checked yet (null), render a neutral gray "Testing..." state instead of red — red is now reserved for an actual failed health check. Regression test added (fails on the old code): with enabled settings and a healthy mock, the card must hit /api/settings/qdrant/health on mount and show statusActive, never statusError. * chore(changelog): fragment for #10489 * Merge branch 'release/v3.8.50' into fix/qdrant-health-badge * test(fix): refresh expired alibaba quota sample validity and onnxruntime pin for v3.8.50 base - alibaba-free-tier-quota-fetcher.test.ts: sample quotaValidityPeriod (2026-08-16 16:00 UTC) is in the past, making every quota entry classify as expired/not_capable; bump to 2028-01-01 UTC so the text/merge classification tests exercise the intended path again. - optional-transformers-dependency.test.ts: onnxruntime-node pin assertion updated from ~1.24.3 to ~1.27.0 to match package.json (bumped by #10403); the regular-not-optional intent is unchanged. * test(fix): align optional-transformers-dependency with onnxruntime ~1.24.3 pin (base #10543) * docs(fix): sync 150-migration count and document PROXY_LOG_INCLUDE_IPS (base drift #10348/#10507) * fix(memory): re-check Qdrant health after saving settings save() optimistically flipped enabled and started the PUT while the mount effect could immediately GET /api/settings/qdrant/health against the OLD persisted settings. If that GET won, it returned not_configured/failed and - because health was non-null - the effect never retried after the PUT succeeded, leaving a healthy Qdrant red until a manual Test connection. Invalidate health (generation counter + setHealth(null)) at save start and after a successful PUT, then explicitly schedule a fresh check: setting health to null alone is not enough, React bails on the no-op when health is already null (the exact GET-wins ordering). Stale responses are dropped via the sequence guard so an in-flight pre-save check can never overwrite the post-save result. Adds a regression test covering enable ordering. Addresses PR #10489 review finding (issuecomment-5312271806). * fix: narrow omniglyph transform result union (merge baseaa912c42atypecheck gate) * test(compression): align contract tests with baseaa912c42amerge (providerTransport shape, engine metadata) * fix(memory): silence set-state-in-effect on Qdrant auto health-check The health-check re-check fix (3469234) introduced an effect that calls checkHealth() (an async fetch that eventually calls setState) directly from a useEffect gated on loading/enabled/health. The react-hooks/set-state-in-effect rule flags this as a potential cascading render, matching the same pattern already accepted elsewhere in the dashboard (FreePoolTab.tsx, ConnectionsTable.tsx) for gated async data-fetch effects. Suppress with the established inline convention; no behavior change. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> * fix(memory): drop unused set-state-in-effect disable (rule inert on pinned react-hooks 7.0.1) The eslint-disable-next-line for react-hooks/set-state-in-effect is unused: eslint-plugin-react-hooks@7.0.1 (lockfile-pinned) does not report this rule, so the directive itself was flagged as a warning and the 'No new ESLint warnings' CI gate failed with --max-warnings 0. The effect body only calls checkHealth() (async fetch) with no raw setState, so no disable is needed. * ci(quality): sync ratchet configs to release/v3.8.50 (0a74bfbde) merge - re-freeze open-sse typecheck baseline at merged-tree live counts (64 stale entries dropped, 11 frozen; base video/usage drift covered) - register tests/unit/video-bridge-drilldown-route.test.ts in stryker tap.testFiles - regenerate skills/cli-contexts/SKILL.md (contexts migrate docs from CLI closure) --------- Co-authored-by: Rouzbeh <rqzbeh@users.noreply.github.com> Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>