Skip to content

feat: show persisted image-region locations (v2.12.8) - #405

Merged
seonghobae merged 17 commits into
mainfrom
feat/image-region-locations-main
Aug 24, 2026
Merged

feat: show persisted image-region locations (v2.12.8)#405
seonghobae merged 17 commits into
mainfrom
feat/image-region-locations-main

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Buyer-visible gap

Normalized visual-region coordinates already persist beside captions, OCR, and tags. The post popup listed those regions without their bounding range, so an operator could not tell where on the source image a caption or OCR excerpt came from. A persisted image caption containing only whitespace also reached the <img alt> boundary as a blank accessible name even though the same informative source image already had a localized Embedded image fallback.

Change

  • Render each valid persisted region box as Region location: left%, top% – right%, bottom% (ADR 0155).
  • Reject non-finite, negative, greater-than-one, and right/bottom-overflow bounds instead of displaying a false normalized location.
  • Render distinct captions and OCR as separate buyer-readable rows; suppress OCR only when it exactly duplicates the caption.
  • Treat whitespace-only persisted image captions as missing, preserve the localized Embedded image text alternative, and avoid emitting an empty visual figcaption.
  • Keep the region list open and add Evidence/PostBody Storybook states for region locations and the whitespace-caption fallback using only synthetic fixtures.
  • Repair the inherited frontend build failure by using the existing safe OIDC return helper and removing an unreachable unauthenticated Admin panel render that passed an absent access token.
  • Record the accessibility decision in ADR 0155 against WCAG 2.2 SC 1.1.1, with the W3C Recommendation cited in APA 7 form.

This lands the stacked #395 buyer action independently on protected main. It does not mix into #392 or other feature stacks.

Exact head

  • Protected base: main@ef6f5a5ffcb467bd935dc1e53acc0029669b0bd7.
  • Exact current head: 9f605a55a720dbd57ef6506445e1bac833f2ae59.
  • Test-first regression commit: ec79f17b5595282da1d92e56247f4e54e236ca0c.

Verification

  • The exact base→head compare is 6 commits ahead, 0 behind; the only new delta after predecessor head b170eb4102484a104fb66462fa79a6ec129041d5 is the bounded blank-caption regression, renderer repair, Storybook state, ADR/Storybook inventory, and changelog note.
  • Exact-head Tests, Security Scan, SAST Semgrep, and PROV-O contract were re-triggered by the current head and must be terminal-success before merge. Predecessor-head passes are not counted as current evidence.
  • Storybook/Figma authority was re-read during this maintenance pass: the live LineageWeave Figma file retains desktop/mobile buyer surfaces and shared primary-control states; no dedicated PostBody/image-region frame exists, so Storybook remains the executable state catalog for this bounded evidence substate while reusing the established product tokens.

No real records, identifiers, or provider credentials are included. Synthetic fixtures only.

Merge gate

Merge only after every required check is terminal-success on 9f605a55a720dbd57ef6506445e1bac833f2ae59, all exact-head review threads are resolved, and an eligible independent non-author formal approval exists. Do not self-approve, force-push, or bypass branch protection. Issues #79 and #87 stay open.

Summary by CodeRabbit

  • 새 기능

    • 이미지 증거 영역의 위치를 백분율 범위로 표시합니다.
    • 캡션, OCR 텍스트, 태그와 영역 위치를 함께 확인할 수 있습니다.
    • 이미지 영역 목록을 기본으로 펼쳐 제공합니다.
    • 한국어·중국어·일본어·베트남어 위치 라벨을 지원합니다.
  • 버그 수정

    • 공백만 있는 캡션을 누락된 캡션으로 처리해 Embedded image 대체 텍스트를 유지합니다.
    • 유효하지 않은 영역 좌표는 위치 정보로 표시하지 않습니다.
    • 로그인 후 원래 목적지로 돌아가는 동작을 안정화했습니다.
  • 문서

    • 이미지 영역 표시 및 접근성 동작에 대한 안내를 업데이트했습니다.

Render each stored visual-region bounding range beside its caption,
OCR, and tags so buyers can locate evidence on the source image
(ADR 0133). Hide internal LLM instructions and omit non-finite boxes.

Copy link
Copy Markdown
Contributor Author

Exact current head: 17e9be1e9dd08c604f707f7e51259bd426713c9d.

Copilot review requested for automated feedback only. Copilot is not independent APPROVE. Do not self-approve or squash-merge until an eligible independent non-author formal approval exists on this exact head and required Checks are terminal-success.

Independent main landing of the stacked #395 image-region location action (ADR 0133 / v2.12.8). Does not mix into #392 or other stacks. Issues #79 and #87 stay open.

@coderabbitai

coderabbitai Bot commented Aug 21, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

Next included review available in 51 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 603a1480-b52f-4279-9f82-0a73d8dd4c65

📥 Commits

Reviewing files that changed from the base of the PR and between 80208ba and 7ead76f.

📒 Files selected for processing (15)
  • AGENTS.md
  • CHANGELOG.d/2.12.27-image-region-locations.md
  • CHANGELOG.md
  • docs/adr/0110-buyer-image-evidence-rendering.md
  • docs/adr/0155-buyer-image-region-locations.md
  • docs/storybook-inventory.md
  • frontend/src/App.css
  • frontend/src/App.test.tsx
  • frontend/src/PostBody.blank-caption.test.tsx
  • frontend/src/PostBody.test.tsx
  • frontend/src/PostBody.tsx
  • frontend/src/i18n.test.ts
  • frontend/src/i18n.ts
  • frontend/src/oidcReturnUrl.test.ts
  • lineageweave/__init__.py
📝 Walkthrough

Walkthrough

저장된 이미지 영역의 정규화 좌표를 구매자 화면에 백분율 범위로 표시합니다. 캡션, OCR, 태그, 접근성 대체 텍스트를 조건부로 렌더링합니다. 위치 라벨과 검증 사례를 4개 로케일에 추가하고, 로그인 return URL 처리도 갱신합니다.

Changes

이미지 영역 위치 표시

Layer / File(s) Summary
위치 표시 계약과 릴리스 문서
docs/adr/*, AGENTS.md, CHANGELOG*, docs/product-technical-gap-baseline.md, lineageweave/__init__.py, pyproject.toml
이미지 영역 위치, 공백 캡션, 접근성 대체 텍스트, 내부 LLM 지침 비공개 규칙을 문서화했습니다. 릴리스 기록과 프로젝트 버전을 2.12.8로 갱신했습니다.
PostBody 위치 렌더링
frontend/src/PostBody.tsx, frontend/src/App.css, frontend/src/i18n.ts, frontend/src/vite-env.d.ts
좌표가 이미지 범위 안에 있으면 위치를 백분율 범위로 표시합니다. 캡션, OCR, 태그, 위치 정보를 개별 표시하고 공백 캡션에는 Embedded image 대체 텍스트를 사용합니다.
위치 표시 검증과 Storybook 사례
frontend/src/PostBody.test.tsx, frontend/src/PostBody.stories.tsx, frontend/src/PostBody.blank-caption.test.tsx, frontend/src/i18n.test.ts, docs/storybook-inventory.md
유효 좌표, 잘못된 좌표, 공백 캡션, 영역 목록의 기본 펼침 상태 및 4개 로케일 번역을 검증합니다.

OIDC 로그인 리다이렉트

Layer / File(s) Summary
로그인 return URL 처리
frontend/src/App.tsx
비인증 로그인 화면이 헬퍼로 return URL을 계산하고 저장한 뒤 auth.signinRedirect의 상태에 전달합니다.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: 🔵 Low · up to 80208

The PR now shows region locations, preserves the accessible image fallback for blank captions, and keeps distinct caption and OCR evidence visible. It is mergeable with owner follow-up to document the complete normalized-range rejection contract in ADR 0133.

Sequence Diagram(s)

sequenceDiagram
  participant PostBody
  participant i18n
  participant Buyer
  PostBody->>PostBody: Validate region coordinates
  PostBody->>i18n: Request Region location translation
  i18n-->>PostBody: Return localized label
  PostBody->>Buyer: Render image region details
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring check was indeterminate for this PR — some files could not be analyzed in time. Not blocking.
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.
Title check ✅ Passed 제목은 저장된 이미지 영역 위치를 표시하는 PR의 주요 변경 사항을 정확하고 간결하게 설명합니다.
✨ 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 feat/image-region-locations-main

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.

devin-ai-integration[bot]

This comment was marked as resolved.

Keep the region list expanded so the bounding range is the next
readable action, and put captions, tags, and locations on separate
lines.

Copy link
Copy Markdown
Contributor Author

Follow-up 04bdb18e21f1cb58e005af1a37dcd525f61fe7d8 opens the region list by default and puts caption, tags, and location on separate lines. Copilot re-requested on this exact head for automated feedback only — not independent APPROVE. Do not self-approve.

coderabbitai[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@github-actions
github-actions Bot disabled auto-merge August 21, 2026 23:40
devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae
seonghobae enabled auto-merge (squash) August 22, 2026 00:00
@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent Review only exact current head b170eb4102484a104fb66462fa79a6ec129041d5 now that all hosted checks are terminal. Verify persisted image-region location normalization, buyer-visible rendering, synthetic-only evidence, frontend interaction coverage, and unchanged orchestrator/PROV trust boundaries. Submit an independent formal Reviews API verdict without changing the branch, self-approving, or bypassing protection.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Heads-up: PR #415 (Ask Agent relative-time resolver) is now based cleanly on main and its only failing check, "Frontend lint, test, build," is the pre-existing App.tsx TypeScript breakage this PR already fixes (unused-import + string | undefined assignment). #415 touches zero frontend files, so once this merges I'll rebase and its check should go green with no further changes. No action needed from me here beyond noting the dependency — this PR is fully green already, just waiting on the independent-approval gate.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head b170eb4102484a104fb66462fa79a6ec129041d5.

  • Head SHA: b170eb4102484a104fb66462fa79a6ec129041d5

  • Workflow run: 32562562875

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (6 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (6 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (4 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (4 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Frontend (10 files)"]
  S3 --> I3["browser runtime and bundle"]
  I3 --> R3["Review risk: Frontend (10 files)"]
  R3 --> V3["frontend tests"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 0b1b1fcfed875f8ba6795537567a8b28a2497044
  • Workflow run: 32631196466
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 0b1b1fcfed875f8ba6795537567a8b28a2497044.

  • Head SHA: 0b1b1fcfed875f8ba6795537567a8b28a2497044

  • Workflow run: 32631196466

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 4

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (6 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (6 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (4 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (4 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Frontend (13 files)"]
  S3 --> I3["browser runtime and bundle"]
  I3 --> R3["Review risk: Frontend (13 files)"]
  R3 --> V3["frontend tests"]
Loading

@opencode-agent
opencode-agent Bot disabled auto-merge August 22, 2026 08:36

Copy link
Copy Markdown
Contributor Author

Cycle 2026-08-22T18:05 KST: retrying GitHub writes. Checking exact-head independent APPROVE + required success before any squash-merge. Not self-approving.

Copy link
Copy Markdown
Contributor Author

Independent exact-head APPROVE is still the merge gate for b170eb4102484a104fb66462fa79a6ec129041d5. Author cannot self-approve. OpenCode REQUEST_CHANGES is coverage-evidence (workflow 32562562875), not a product defect. Issues #79 and #87 stay open. #96 is closed as a weaker duplicate of #91.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Follow-up: opencode-review's REQUEST_CHANGES cites coverage-evidence result=failure for head b170eb41, but the GitHub check-runs API shows that exact job (run 32537723637) completed with conclusion=success at 2026-08-21T23:41:01Z — the only coverage-evidence check-run recorded for this SHA. Looks like the review evaluated a stale/intermediate state rather than the final result. Not something to fix in this PR's code; flagging in case a re-dispatch (or a nudge) is needed to get an accurate re-review.

devin-ai-integration[bot]

This comment was marked as resolved.

@github-actions
github-actions Bot disabled auto-merge August 23, 2026 08:20
@seonghobae

Copy link
Copy Markdown
Contributor Author

Resolved the remaining exact-head review findings in 0b1b1fcfed875f8ba6795537567a8b28a2497044: OCR-only regions retain their ADR-defined secondary evidence row, and whitespace-only parent OCR is now omitted consistently with captions and region OCR. Frontend lint, 150 tests, build, and diff check passed. @opencode-agent please independently review this exact head.

@seonghobae
seonghobae enabled auto-merge (squash) August 23, 2026 08:29
devin-ai-integration[bot]

This comment was marked as resolved.

@github-actions
github-actions Bot disabled auto-merge August 23, 2026 08:33

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 0b1b1fcfed875f8ba6795537567a8b28a2497044.

  • Head SHA: 0b1b1fcfed875f8ba6795537567a8b28a2497044

  • Workflow run: 32631196466

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 4

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (6 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (6 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (4 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (4 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Frontend (13 files)"]
  S3 --> I3["browser runtime and bundle"]
  I3 --> R3["Review risk: Frontend (13 files)"]
  R3 --> V3["frontend tests"]
Loading

@seonghobae
seonghobae enabled auto-merge August 24, 2026 01:33
@opencode-agent
opencode-agent Bot disabled auto-merge August 24, 2026 02:31
… v2.12.19)

This branch forked 2026-08-18 and fell 6 days behind main's fast-moving
leftover-pair/RankWeave/ontology-publishing work. Resolved 9 conflicts:

- Version files (CHANGELOG.md, pyproject.toml, frontend/package.json,
  lineageweave/__init__.py, uv.lock): renumbered this PR's own feature
  entry from the stale 2.12.8 to 2.12.19, the next number after main's
  current tip (2.12.18).
- docs/product-technical-gap-baseline.md: took main's fully restructured,
  much newer snapshot wholesale rather than trying to reconcile the old
  format -- a peer session is independently removing "Buyer" terminology
  from this exact class of doc, so left that cleanup to them.
- docs/storybook-inventory.md: both sides added an independent story
  table row; kept both.
- frontend/src/PostBody.tsx: HEAD added the PostImageRegion import for
  this PR's own region-bounding-box feature; main independently added
  the renderStyledText/Fragment helper for quantity superscripts
  (m^3, H_2O). Both are needed -- unioned the import and the helper.
- frontend/src/i18n.test.ts, frontend/src/App.test.tsx: independent test
  cases on each side (region-location translations vs. leftover-residual
  translations; OIDC-return-url history reset vs. main's superseding
  OIDC_RETURN_URL_STORAGE_KEY-based assertion). Kept both/took main's
  superset assertion.

The stale opencode-agent CHANGES_REQUESTED reviews on this PR were
verified stale before this merge: coverage-evidence already passes on
this head, same root cause as the org-wide review-dispatch blocker
(.github#624/#1263), not a real content issue.

Verified: 759 Python tests pass (127 skipped -- local Postgres/Keycloak
availability check, expected under this machine's current heavy
concurrent-session load), frontend build/lint clean. Targeted frontend
test run (App.test.tsx/i18n.test.ts/PostBody.test.tsx) showed 6 timeout
failures in App.test.tsx, all in test cases unrelated to this merge's
changes (analysis-run home page, cutoff-rewritten title, comparison
strip) -- the same environmental 5000ms-timeout flakiness pattern
already diagnosed this session under concurrent system load (different
random tests fail on repeated runs, always pure timeouts not
assertions). i18n.test.ts and PostBody.test.tsx fully passed. Deferring
final confirmation to this PR's isolated GitHub Actions run.
devin-ai-integration[bot]

This comment was marked as resolved.

seonghobae added a commit that referenced this pull request Aug 24, 2026
This branch was behind main (like #547/#405 earlier this session).
Resolved 2 conflicts:

- CHANGELOG.md: both sides added independent [Unreleased] Added/Fixed
  entries; unioned them and merged the resulting duplicate "### Fixed"
  headers into one section.
- docs/product-technical-gap-baseline.md: took main's current
  restructured snapshot wholesale, same reasoning as #405.

frontend/src/App.tsx merged with no conflict and already carries the
accessToken-guarded AdminPanel render (`destination === "admin" &&
accessToken`), confirming this branch doesn't need the recurring
AdminPanel/oidcReturnUrl fix applied elsewhere this session.

Verified: frontend build/lint clean. This PR's own new logic (33 tests
across test_skos_organization_alias_binding.py,
test_corporate_hierarchy_resolution.py, test_tied_organization_no_create.py
-- pure-Python, no DB fixture) passes in 1.36s. Could not complete a
full-suite run this cycle: the shared local Postgres is under the same
sustained ~20-concurrent-session contention documented on #530/#547/#405
earlier this session (one run exceeded 30 minutes with no sign of
finishing). Deferring full-suite confirmation to this PR's isolated
GitHub Actions run, unaffected by local contention.
seonghobae added a commit that referenced this pull request Aug 24, 2026
Downstream of #480's SKOS org-alias catalog work; also behind main.
Resolved 7 conflicts:

- pyproject.toml, frontend/package.json, uv.lock: this PR's own version
  (2.14.0) doesn't collide with main's current tip (2.12.18), kept it.
- CHANGELOG.md: HEAD's Added entry sat under [Unreleased] even though the
  version files claimed 2.14.0 -- promoted it to its own dated "## [2.14.0]"
  section (matching the convention every other version bump in this file
  already follows) and placed main's [Unreleased] additions/fixes above it.
- docs/product-technical-gap-baseline.md: took main's current snapshot
  wholesale, same reasoning as #405/#480.
- docs/storybook-inventory.md, frontend/src/App.test.tsx: independent
  additions on each side (new story row; new stub-config flags); unioned.

frontend/src/App.tsx merged with no conflict and already carries the
accessToken-guarded AdminPanel render.

Verified: frontend build/lint clean. This PR's own new logic (37 tests
across test_organization_alias.py, test_affiliate_tree.py,
test_knowledge_graph.py, test_organization_name_resolution_ingestion.py)
passes in 4.94s. Full-suite run hit the same sustained local-Postgres
contention documented on #530/#547/#405/#480 this session (15+ min with
no sign of finishing); deferring to this PR's isolated GitHub Actions
run as the authoritative check, same precedent as those four.
seonghobae added a commit that referenced this pull request Aug 24, 2026
… reconciled with ADR-0145 weight estimation

Genuine dual-feature conflict, not a mechanical one: this PR's own
rebuild_lineage() rewrite (adjudication/embedding client wiring, session
advisory lock, bounded snapshot-changed retry, ADR 0195 channel_scores
persistence) landed at the same call site main independently modified
for ADR 0145 persisted channel-weight loading. Resolved by threading
all three concerns through one function:

- lineage_edge_specs() / reconstruct() already had all three keyword
  params (llm, embedding, weights) merge cleanly with no conflict --
  confirming the two features are compositionally compatible.
- Rebuilt rebuild_lineage() to: compute the active channel set (adding
  "llm" only when adjudication_client is real, matching how
  load_estimated_channel_weights decides whether a persisted vector
  applies), load weights once, then run this PR's lock+retry+recheck
  structure with weights threaded through the lineage_edge_specs call.
- backend/app/main.py, docker/postgres-init/migrate.sh (took main's ADR
  0166 generalized wildcard replay pattern -- already covers this PR's
  own migration 0195), CHANGELOG.md (promoted this PR's [Unreleased]
  entry to a dated ## [2.24.0] section, matching the file's own
  convention, ahead of main's [2.12.18]), pyproject.toml/uv.lock
  (kept this PR's 2.24.0, no collision with main's 2.12.18 tip),
  frontend/src/App.test.tsx (recurring OIDC-return-url pattern, took
  main's superset assertion): mechanical, low-risk.

tests/test_lineage_ingestion.py needed real fixes, not just marker
removal, to keep passing against the merged rebuild_lineage():
- _RebuildConnection (this PR's own fake asyncpg connection, used by
  7 of its own tests) predates ADR 0145 and had no fetchval -- added
  one returning False (no persisted weight table), matching every
  other fake connection's default in this file.
- 5 monkeypatched lineage_edge_specs stand-ins across this PR's own
  tests only accepted (records, *, llm, embedding) -- rebuild_lineage
  now always passes weights= too. Added weights=None to each stub;
  without this every adjudication/embedding-wiring test would have
  failed with "unexpected keyword argument 'weights'" the moment this
  PR's own branch met main.
- Concatenated main's two lineage_graphs_for_posts tests after this
  PR's ten rebuild_lineage tests -- different function, no overlap.

Verified: this module's own 26 tests pass, 32 more in directly-adjacent
modules (reconstruct, embedding_client, adjudication_client, channel
weight estimation) pass, `python -c "import backend.app.main"` succeeds,
frontend build/lint clean, the one touched App.test.tsx assertion passes
standalone. Could not complete the full ~800-test suite locally --
severe sustained Postgres contention from ~20 concurrent peer sessions,
same as #530/#547/#405/#480/#482 this session (20+ min, no sign of
finishing). Deferring full-suite confirmation to this PR's isolated
GitHub Actions run.
@seonghobae
seonghobae enabled auto-merge (squash) August 24, 2026 08:03
@opencode-agent
opencode-agent Bot disabled auto-merge August 24, 2026 08:41
@seonghobae
seonghobae enabled auto-merge August 24, 2026 11:51
@github-actions
github-actions Bot disabled auto-merge August 24, 2026 16:38
@seonghobae
seonghobae enabled auto-merge August 24, 2026 17:05
@opencode-agent
opencode-agent Bot disabled auto-merge August 24, 2026 17:58
@seonghobae
seonghobae enabled auto-merge August 24, 2026 18:10
@opencode-agent
opencode-agent Bot disabled auto-merge August 24, 2026 19:25
seonghobae and others added 2 commits August 25, 2026 05:24
The fragment claimed 2.12.8 — a version released long before this PR —
and the merged CHANGELOG entry had slid under the released [2.12.19]
section. The entry now sits under [Unreleased], the fragment claims
2.12.27 (next after main's 2.12.26), and the heading drops the 'Buyer'
wording per the naming rule. Review follow-up on this PR's thread.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VENX71RtEntaUq6nkAWZho

@devin-ai-integration devin-ai-integration 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.

Devin Review found 1 new potential issue.

Open in Devin Review

Comment thread frontend/src/PostBody.tsx
@seonghobae

Copy link
Copy Markdown
Contributor Author

Thread addressed in the pushed commit: fragment renumbered 2.12.8 → 2.12.27 (next after main's released 2.12.26), the merged CHANGELOG entry moved back under [Unreleased] (the old base had let it slide into the released [2.12.19] section), and the fragment heading drops the 'Buyer' wording per the naming rule.

@seonghobae
seonghobae merged commit cdeed19 into main Aug 24, 2026
29 of 30 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant