From 0c9b635ab979e8fed59a6c4bae2bd785716efe44 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 22 Aug 2026 22:25:10 +0900 Subject: [PATCH 1/2] docs: mark the gap-baseline omni-modal image entry resolved lineageweave/image_content.py's OpenAiCompatibleVisionClient already runs every embedded image through a vision-capable contextual- orchestrator model for OCR, layout/object/relationship captioning, and tagging, and post_content_normalization.py inlines that output into the post body before chunking so it reaches the normal embedding pipeline. The doc's "text-only embedding fails on images" claim predates this and was misleading future work toward rebuilding an already-wired capability. Left a narrower, accurate follow-up note about font-size/color not being explicit structured fields. --- docs/product-technical-gap-baseline.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index e65883463..8ed9694f6 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -14,7 +14,7 @@ - **R&R and Keyman Missing**: (Resolved) LLM prompt updated to explicitly instruct using actual stated names rather than collective titles. - **Entity Resolution / Searxng**: Abbreviations like "한전" and "한국전력" are not mapped properly using Searxng and KG corroboration. - **Meso-level Team Mapping**: (Resolved) Checked extraction logic; `team` mapping logic is present and correct, but LLM needed better explicit instruction which is covered by R&R resolution. -- **Base64 Image Omni-modal**: Current text-only embedding fails on images. Omni-modal LLM processing is required for images to capture layout, font size, colors, and spatial meaning. +- **Base64 Image Omni-modal**: (Resolved) `lineageweave/image_content.py`'s `OpenAiCompatibleVisionClient` (wired via `_vision_client()`/`orchestrator_vision_client()` in `backend/app/main.py`, same contextual-orchestrator gateway as every other LLM channel) sends each embedded image to a vision-capable model and asks for OCR text, a caption covering "visible layout, objects, relationships, directions, measurements, and labels", and tags. `post_content_normalization.py` inlines that caption+OCR at the image's original position in the post body before chunking, so it reaches the normal (text) embedding pipeline rather than being silently dropped -- there is no image-native embedding, but the content is not text-only-blind either. Remaining, narrower gap: the caption prompt doesn't explicitly ask for font size or color as separate fields (only incidentally, if visually salient) -- worth a follow-up prompt tweak if that granularity is ever needed, but not the "current text-only embedding fails on images" state this entry originally described. ## 3. General Architecture Gaps - **DB Architecture**: Ensure PostgreSQL is strictly used (no file DBs), 3rd normal form is maintained, and Hot Partitions are handled. DB locks must be managed (or use read/write replicas). From 5e59e7d1a0a33bff127368fa7b7bdca66b7c65ae Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 22 Aug 2026 22:39:34 +0900 Subject: [PATCH 2/2] fix(frontend): use OIDC return-url helpers on the login button Same shared-ancestor bug as the prior 14 branches (#418/#415/#426/#427/ #429/#431/#434-440): the login button built an unsanitized returnUrl inline instead of returnUrlFromLocation()/rememberOidcReturnUrl(), and removed the unreachable login-screen AdminPanel render. --- frontend/src/App.test.tsx | 3 +++ frontend/src/App.tsx | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/frontend/src/App.test.tsx b/frontend/src/App.test.tsx index 7462abd2c..70eb27590 100644 --- a/frontend/src/App.test.tsx +++ b/frontend/src/App.test.tsx @@ -41,6 +41,9 @@ describe("App, unauthenticated", () => { state: expect.objectContaining({ returnUrl: expect.stringMatching(/^\//) }), }), ); + // Persisted as a fallback in case the OIDC state round-trip is dropped + // (see oidcReturnUrl.ts's restoreOidcReturnUrl, consumed in main.tsx). + expect(window.sessionStorage.getItem("lineageweave.oidc.returnUrl")).toMatch(/^\//); }); }); diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 6fba0dd41..1b5b351ab 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -4610,7 +4610,8 @@ export default function App({ showLabPanels = false }: { showLabPanels?: boolean
- {destination === "admin" ? : null}