From aa423bf16e35b190daa6d5d7b5c5aad5e42636e0 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 22 Aug 2026 22:37:36 +0900 Subject: [PATCH 1/2] docs: mark the gap-baseline entity-resolution entry resolved lineageweave/organization_name_resolution.py already resolves an abbreviated/slang organization mention to a full canonical name via LLM, then cross-verifies it against relation_verification.py's Searxng client before trusting it (ADR 0008), and is wired into the live keyman-extraction endpoint -- not just implemented and unused. The resolution prompt explicitly names Korean-style contractions as a case it handles. --- 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..43879de3e 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -12,7 +12,7 @@ - **Multiple Project Extraction**: (Resolved) LLM prompt updated to request key_events as objects with project_name, separating events correctly. - **5W1H Missing**: (Resolved) LLM prompt updated to explicitly request 5W1H evidence items in the JSON output array. - **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. +- **Entity Resolution / Searxng**: (Resolved) `lineageweave/organization_name_resolution.py` (ADR 0008, SKOS `prefLabel`/`altLabel`-grounded) proposes a full canonical name for an abbreviated/slang organization mention via LLM, then cross-verifies it against `lineageweave/relation_verification.py`'s `SearxngRelationVerificationClient` before it is trusted -- reusing that module's Searxng client rather than a second web-search integration. Wired into the live keyman-extraction path (`_organization_name_resolution_client()` / `_relation_verification_client()` passed to `ingest_post_keymen` in `backend/app/main.py`'s `POST /api/posts/{post_id}/extract-keymen`), not just implemented and unused. The resolution prompt explicitly names "Korean-style contraction" as a case it handles (e.g. an "AGP"/"Aurora Grid Power"-style abbreviation), so "한전" → "한국전력" is the shape of mention this pipeline is built for. - **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. From 8e6f24df1827a12c851bfc30742734c7d2cc799c Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 22 Aug 2026 22:40:35 +0900 Subject: [PATCH 2/2] fix(frontend): use OIDC return-url helpers on the login button Same shared-ancestor bug as the prior 15 branches: 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}