Skip to content

feat: persist and explain Event Lineage channel evidence - #387

Open
seonghobae wants to merge 36 commits into
mainfrom
feat/event-lineage-channel-evidence
Open

feat: persist and explain Event Lineage channel evidence#387
seonghobae wants to merge 36 commits into
mainfrom
feat/event-lineage-channel-evidence

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

Implements issue #274 on current main (v2.14.0). Live Event Lineage no longer collapses a reconstructed connection to a fused score.

  • Persist post_lineage_edge_signal beside each post_lineage_edge row: score, the normalized active weight actually used, and weight * score contribution.
  • Batch rebuild-channel, edge, and signal writes with asyncpg.executemany so a full-corpus replacement does not make one database round-trip per row.
  • Persist singleton event_lineage_rebuild + event_lineage_rebuild_channel so reconstruction version, generated-at, and the weight profile cannot silently rewrite historic evidence.
  • ADR 0172 controlled lookups lineage_signal_temporal|secondary_key|text|llm, enforced by table-level CHECK constraints. The LLM row is omitted when it did not participate; it is never fabricated.
  • GET /api/lineage returns additive channel_evidence (signal_code, signal_label, score, weight, contribution, rank) ordered by contribution, then controlled signal order. ABAC never reveals evidence for an invisible endpoint.
  • Buyer DAG discloses exact values with keyboard and screen-reader access, labels the relation as inferred rather than causal, and prints the same values.

This is independent of #264 ontology-path repair, GNB, and unmerged PRs that claim ADR 0119 / 0122 / 0123 and migration 0104. Analysis-run reconstruction stays out of scope.

Head: 6bcd52f1d8b1efb76f160506e15b5fb2cea1dbf4

Tests

  • Latest persistence regression: 23 passed; real PostgreSQL API/schema partition: 110 passed, 6 capability-gated skips.

  • uv run --extra dev --with asyncpg pytest tests/test_lineage_ingestion.py tests/test_lineage_channel_evidence.py tests/test_schema.py — 35 passed against real PostgreSQL.

  • pnpm test — 157 passed in 14 files; lint and the 454.69 kB production build passed.

  • Ruff I001/RUF022, ShellCheck, sh -n, and git diff --check passed.

Merge gates

Independent exact-head APPROVE required. This request is not APPROVE. Do not squash-merge without independent APPROVE plus exact-head required success. Issues #79 and #87 stay open.


Open in Devin Review

Summary by CodeRabbit

  • 새 기능

    • Event Lineage 연결별 채널 점수, 가중치, 기여도 등 근거 정보를 제공합니다.
    • 재구성 버전, 생성 시각, 임계값, 후보 범위 및 가중치 프로필을 확인할 수 있습니다.
    • DAG에서 연결을 클릭하거나 키보드로 선택해 상세 근거를 확인할 수 있습니다.
    • 접근 가능한 연결의 근거만 표시해 정보 노출을 제한합니다.
    • 게시물 본문에서 Markdown 표와 각주, 중첩 목록 표시를 개선했습니다.
  • 버그 수정

    • 재구성 오케스트레이터 장애 시 오류 응답을 500 대신 503으로 제공합니다.

Reconstruct already computed per-channel scores, but live Event Lineage
collapsed each edge to a fused score. Persist the active signals beside
each edge, return them on GET /api/lineage, and disclose exact inferred
values in the Buyer DAG.
@coderabbitai

coderabbitai Bot commented Aug 21, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

Next included review available in 54 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: aa1457a2-0317-463e-baef-e6d6d45e8db6

📥 Commits

Reviewing files that changed from the base of the PR and between 6bcd52f and 7ab8026.

📒 Files selected for processing (28)
  • ARCHITECTURE.md
  • CHANGELOG.md
  • backend/app/lineage_ingestion.py
  • backend/app/main.py
  • backend/tests/test_api.py
  • docs/adr/README.md
  • docs/storybook-inventory.md
  • frontend/src/App.css
  • frontend/src/App.test.tsx
  • frontend/src/LineageDag.stories.tsx
  • frontend/src/LineageDag.test.tsx
  • frontend/src/LineageDag.tsx
  • frontend/src/PostBody.test.tsx
  • frontend/src/PostBody.tsx
  • frontend/src/api.ts
  • frontend/src/i18n.test.ts
  • frontend/src/i18n.ts
  • frontend/src/lineageLayout.ts
  • frontend/src/postBodyDisplay.test.ts
  • frontend/src/postBodyDisplay.ts
  • lineageweave/__init__.py
  • lineageweave/lineage_persistence.py
  • scripts/import_postgresql_posts.py
  • scripts/seed_demo_data.py
  • tests/test_import_postgresql_posts.py
  • tests/test_lineage_channel_evidence.py
  • tests/test_lineage_ingestion.py
  • tests/test_schema.py

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 49df3f85-fa2c-48f5-8f14-7d5845ecbecb

📥 Commits

Reviewing files that changed from the base of the PR and between 115bd3e and 6bcd52f.

📒 Files selected for processing (10)
  • backend/app/lineage_ingestion.py
  • docs/adr/0172-event-lineage-channel-evidence.md
  • docs/adr/README.md
  • frontend/src/LineageDag.test.tsx
  • frontend/src/LineageDag.tsx
  • lineageweave/__init__.py
  • lineageweave/lineage_persistence.py
  • migrations/0174_post_lineage_edge_signal.sql
  • tests/test_lineage_ingestion.py
  • tests/test_schema.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • frontend/src/LineageDag.tsx
  • lineageweave/lineage_persistence.py

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

Event Lineage가 채널별 점수·가중치·기여도를 저장하고 API와 DAG에 공개합니다. 재구성은 후보 수에 따라 LLM 사용을 제한하며 원자적으로 결과를 교체합니다. 본문 변환기는 각주, 중첩 목록과 Markdown 표를 처리합니다.

Changes

Event Lineage 채널 근거

Layer / File(s) Summary
영속성 계약과 스키마
lineageweave/lineage_persistence.py, migrations/0174_post_lineage_edge_signal.sql, lineageweave/__init__.py, tests/test_lineage_channel_evidence.py, tests/test_schema.py
재구성 버전, 채널 가중치, 점수, 기여도와 순위 계산을 추가했습니다. 재구성 및 엣지 신호 테이블과 무결성 제약을 추가했습니다.
재구성 실행과 API 조회
backend/app/lineage_ingestion.py, backend/app/main.py, scripts/import_postgresql_posts.py, scripts/seed_demo_data.py, backend/tests/test_api.py, tests/test_lineage_ingestion.py
풀 기반 재구성, 후보 수에 따른 LLM 생략, 원자적 저장과 접근 제어된 channel_evidence 조회를 추가했습니다. 오케스트레이터 장애는 503으로 반환합니다.
DAG 근거 표시와 검증
frontend/src/api.ts, frontend/src/lineageLayout.ts, frontend/src/LineageDag.tsx, frontend/src/App.css, frontend/src/LineageDag.stories.tsx, frontend/src/LineageDag.test.tsx, frontend/src/i18n.ts, frontend/src/i18n.test.ts
DAG가 선택된 엣지의 채널 증거와 재구성 프로필을 표시합니다. 키보드 접근성, 다국어 라벨과 인쇄 표시를 지원합니다.

본문 변환과 표시

Layer / File(s) Summary
각주·목록·표 변환
frontend/src/postBodyDisplay.ts, frontend/src/PostBody.tsx, frontend/src/postBodyDisplay.test.ts, frontend/src/PostBody.test.tsx
HTML·Word 각주를 footnote 세그먼트로 분류합니다. 중첩 목록 들여쓰기를 보존합니다. 유효한 Markdown 표를 공통 표 렌더러로 표시합니다.

Estimated code review effort: 4 (Complex) | ~60 minutes

Merge Risk: 🟡 Moderate · up to 6bcd5

The PR adds persisted channel evidence and interactive lineage details, but the current head can accept invalid evidence codes, may leave edge controls unavailable to screen-reader users, and retains a reported lint diagnostic; these could cause incorrect displays, accessibility regressions, or failed quality checks, so merge should wait for fixes or explicit owner acceptance.

Sequence Diagram(s)

sequenceDiagram
  participant 관리자
  participant LineageAPI
  participant LineagePool
  participant AdjudicationClient
  participant PostgreSQL
  관리자->>LineageAPI: POST /api/lineage/rebuild
  LineageAPI->>LineagePool: rebuild_lineage_from_pool
  LineagePool->>PostgreSQL: 원본 스냅샷 조회
  LineagePool->>AdjudicationClient: 후보 쌍 평가
  LineagePool->>PostgreSQL: 엣지와 채널 근거 저장
  LineageAPI-->>관리자: 재구성 결과 또는 503
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 제목은 Event Lineage 채널 증거를 저장하고 설명하는 이 변경사항의 핵심 목적을 명확하고 간결하게 요약합니다.
✨ 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/event-lineage-channel-evidence

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.

Copy link
Copy Markdown
Contributor Author

Requesting independent Copilot review on exact head 03c1946. This is not APPROVE. Do not squash-merge without independent exact-head APPROVE plus required success.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Fixed on exact current head 780fd57: restored the 0102 project-bound summary-event migration constant while retaining the new 0105 channel-evidence migration, so the real PostgreSQL schema fixture applies both in dependency order. Exact schema suite: 10 passed. @claude please review this exact head.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Correction: the current exact PR head is 780fd57 (the prior comment used an incorrect full expansion after the remote head refresh). The migration fixture fix is present at this head, and tests/test_schema.py remains 10 passed. @claude please review this corrected exact head.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Reproduced and fixed a current frontend Checks failure on the exact PR stack.\n\nRoot cause: the unauthenticated render branch mounted AdminPanel with accessToken typed as string but actually undefined, and retained unused OIDC helper imports. That caused TypeScript TS2322 plus oxlint no-unused-vars. The unauthenticated branch now renders only the login screen; the authenticated admin route remains unchanged, and the unused imports are removed.\n\nExact head: cd7044a. Evidence after the concurrent 780fd57 base: server focused tests 20 passed; frontend focused tests 103 passed; lint, TypeScript/Vite build, Storybook build, and git diff --check passed. No approval is asserted; rerun all Checks on this exact head.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@claude Please review exact current head 2c47b353bd71dba78b720edf14bf5708c314f4a0.

The rebuild adjudication fix is present in the remote 10cf59ee base: API rebuild now passes the configured contextual-orchestrator client through lineage_edge_specs, and the separate PostgreSQL import path now passes the same client or the explicit unavailable null. The stale helper docstring was corrected.

Exact-head local validation: 768 passed, 17 skipped; targeted rebuild tests passed; git diff --check and compileall passed. Hosted Checks are queued for this head. This is a review request, not an approval or merge authorization.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Validated on exact concurrent head. Preserved 2c47b35 and pushed 516cc55. GET /api/lineage now orders rebuild weights from common_lookup_value.display_order with a deterministic code tie-breaker, so buyer-facing and audit output do not depend on PostgreSQL row order. Rebuild and PostgreSQL import continue to pass the configured ContextualOrchestratorAdjudicationClient; no local provider call or fabricated LLM score was added. Targeted lineage/adjudication/import tests: 40 passed. Full Python suite with dev and backend extras: 768 passed, 17 skipped; 4 existing dependency warnings. git diff --check: passed. Please rerun required checks for the new exact head.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@claude Please review exact current head 4faf9a31371195c5ec63fca42a5afbb93a95369b.

The current ancestry now also orders persisted rebuild weights by the controlled common_lookup_value.display_order with a code tie-breaker and documents the orchestrator boundary in ADR 0124. Exact-head targeted lineage/API tests passed (2 passed selected; prior full suite on the implementation head was 768 passed, 17 skipped), with diff check clean. Hosted Checks are still pending; this is not an approval.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Reconciled the current review notes on exact head 4faf9a3: (1) channel availability is run-scoped by reconstruct.active_weights, so the stored rebuild profile is uniform by contract; (2) weight_rows now join common_lookup_value and order by display_order plus signal_code, removing PostgreSQL row-order dependence; (3) the administrator rebuild and PostgreSQL import now pass the configured ContextualOrchestratorAdjudicationClient, while an unavailable gateway remains the explicit NullAdjudicationClient three-channel path. No fabricated LLM evidence is emitted.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head follow-up: df2519c09b224f05ac84e6997abd3b4f1bb94cb6 fixes the rounding defect in the channel-evidence persistence boundary.

  • reconciliation tolerance now includes a bounded half-quantum budget per persisted channel plus a small floating-point guard
  • added a four-channel regression whose six-decimal contributions previously exceeded the fixed 1e-6 tolerance and aborted rebuild/import
  • local verification: full backend 769 passed, 17 skipped, 4 warnings; focused channel/ingestion set 20 passed; git diff --check passed

Hosted Checks have restarted for this exact head. This is a review request, not an approval or merge instruction.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@claude Please review exact current head df2519c09b224f05ac84e6997abd3b4f1bb94cb6. The concurrent normal branch update now fixes the actionable corpus-rebuild rounding defect: reconciliation budget scales with active channel count (half-quantum per persisted contribution plus a bounded guard), so valid 3/4-channel evidence cannot abort a rebuild while materially mismatched fused scores still fail. The new regression exercises a four-channel quantization case. Exact-head validation on the remote head: focused channel-evidence checks passed (4 selected); diff check passed. This requests review and is not an approval.

devin-ai-integration[bot]

This comment was marked as resolved.

github-code-quality[bot]

This comment was marked as resolved.

seonghobae added a commit that referenced this pull request Aug 23, 2026
- Renumber migrations/0105_post_lineage_interval_relation.sql to 0140:
  0105 collides with the already-open PR #387's
  migrations/0105_post_lineage_edge_signal.sql on the same
  post_lineage_edge table. Update migrate.sh's whitelist,
  tests/test_schema.py, tests/test_migration_replay.py,
  backend/tests/test_api.py, and scripts/seed_demo_data.py to match.

- Renumber docs/adr/0122-event-lineage-interval-relation.md to 0160:
  0122 collides with the already-open PR #383's
  docs/adr/0122-otel-session-observability.md. Update every in-tree
  "ADR 0122" cross-reference (AGENTS.md, ARCHITECTURE.md, CLAUDE.md,
  CHANGELOG.d entry, the migration's SQL comment, and the seed script
  docstring) to ADR 0160, and note the renumber + collision in the
  ADR itself (see ContextualWisdomLab/.github#1249).

- Drop the unused "Click Contains to open the revised quote." i18n
  key from all four locale dictionaries and the i18n completeness
  test's required-keys list -- no component ever rendered it.

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

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review current-head review for c34681fdc692a25e688fe4a5eb06ad3fe50f2281.

Event Lineage channel evidence (issue #274): persist per-edge scores/weights/contributions, disclose them in the DAG, never invent a fused score. Review threads on this head are resolved. This identity cannot self-approve.

@seonghobae
seonghobae enabled auto-merge (squash) August 23, 2026 15:46
@opencode-agent
opencode-agent Bot disabled auto-merge August 23, 2026 16:54

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review exact-head independent review for c34681fdc692a25e688fe4a5eb06ad3fe50f2281.

Event Lineage channel evidence (issue #274): persist post_lineage_edge_signal, rebuild/channel rows, additive channel_evidence on GET /api/lineage, DAG disclosure without inventing fused scores. Next leverage-order product gap after shared-gate heads. This identity cannot self-approve. Checks are not blockers.

Copy link
Copy Markdown
Contributor Author

Exact-head independent review required on c34681fdc692a25e688fe4a5eb06ad3fe50f2281 (Event Lineage channel evidence).

Next leverage-order product gap after shared-gate heads land. OpenCode / Strix / Noema on this SHA only. Checks are not blockers. No self-approval.

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review exact-head independent review for c34681fdc692a25e688fe4a5eb06ad3fe50f2281 (Event Lineage channel evidence / #274).

Next leverage-order product gap after shared-gate heads land. Product threads resolved; any prior OpenCode CHANGES_REQUESTED that is coverage-evidence-only is not a product finding. Checks are not blockers. This identity cannot self-approve.

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review exact-head independent review for c34681fdc692a25e688fe4a5eb06ad3fe50f2281 (Event Lineage channel evidence / #274).

Next leverage-order product gap after shared-gate heads land. Product threads resolved; any coverage-evidence-only OpenCode CHANGES_REQUESTED is not a product finding. Checks are not blockers. This identity cannot self-approve.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Resolved the remaining independent 0105 migration collision without changing ADR 0124 or Event Lineage evidence behavior. Exact head 115bd3e2 moves only the lineage-signal migration/rollback and their existing replay/test references to unused 0174; the earlier Global Ask migration owner remains unchanged.

Validation: 118 passed, 6 honest integration skips; ShellCheck, sh -n, and git diff --check pass.

coderabbitai[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact head 3c3bcb5 closes current review gaps: accessible SVG grouping, sorted exports, category-safe lineage signal checks with existing-table replay, and visible-only focus traversal. Real PostgreSQL/backend tests pass 35/35; all 157 frontend tests, lint, build, Ruff I001/RUF022, ShellCheck, sh -n, and diff checks pass. All current review threads are resolved; hosted gates and independent protected review have requeued.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae

seonghobae commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

Exact-head review repair: 6bcd52f1d8b1efb76f160506e15b5fb2cea1dbf4 batches rebuild-channel, edge, and channel-signal persistence through the existing asyncpg connection. Verification: 23 focused tests; real PostgreSQL/API/schema partition 110 passed, 6 capability-gated skips; compileall and diff checks clean. All current review threads are resolved; hosted exact-head checks and independent approval remain required.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae
seonghobae enabled auto-merge August 24, 2026 01:33
The login button had regressed to a raw window.location.pathname +
window.location.search concat for the OIDC state.returnUrl, dropping
the hash fragment and the isSafeReturnUrl validation that
returnUrlFromLocation() already provides, and never called
rememberOidcReturnUrl() to persist a storage fallback for
restoreOidcReturnUrl() in main.tsx's onSigninCallback. Use the shared
helpers again, matching the existing recurring-bug pattern already
fixed elsewhere in this stack (the admin-panel-on-unauthenticated-branch
half of the same class of regression).
@opencode-agent
opencode-agent Bot disabled auto-merge August 24, 2026 04:39
# Conflicts:
#	CHANGELOG.md
#	backend/app/lineage_ingestion.py
#	backend/app/main.py
#	backend/tests/test_api.py
#	docker/postgres-init/migrate.sh
#	docs/adr/README.md
#	docs/storybook-inventory.md
#	frontend/package.json
#	frontend/src/LineageDag.stories.tsx
#	frontend/src/LineageDag.test.tsx
#	frontend/src/LineageDag.tsx
#	frontend/src/PostBody.tsx
#	frontend/src/i18n.test.ts
#	frontend/src/postBodyDisplay.ts
#	lineageweave/__init__.py
#	migrations/0103_tenant_settings.sql
#	pyproject.toml
#	tests/test_lineage_ingestion.py
#	tests/test_schema.py
#	uv.lock
…migration-replay tests

Post-merge fixes surfaced by full test verification after merging
origin/main into this branch:

- LineageDag's SVG now uses role="group" (this PR's own accessibility
  fix for the interactive per-edge evidence buttons), superseding
  main's older role="img". Updated the tests that still queried
  role="img" for the lineage graph, and switched the ambiguous
  getAllByRole("group") assertions to precise `svg[role="group"]`
  queries since <details> (added by this PR's channel-evidence panel)
  also carries an implicit ARIA group role.
- postBodyDisplay.ts: adopted main's normalizeScriptText for <sup>/<sub>
  handling (real Unicode superscripts, later re-rendered by
  splitScriptRuns) instead of this PR's older ad hoc "^N" caret
  regex, and dropped the bare-marker FOOTNOTE_START heuristic main
  had already removed as a false-positive source (a bullet list
  starting with "*" was being misread as a footnote). Restored the
  FOOTNOTE_START constant only where still needed transitively, then
  removed it entirely once isMarkedFootnote (this PR's own
  container-aware footnote detection) proved sufficient on its own.
  Updated the one test still asserting the old "^1" caret text.
- migrate.sh's replay gate: this PR's test asserted the old explicit
  per-file allowlist main had already replaced with ADR 0166's general
  four-digit filename pattern. Updated the assertion to check the new
  mechanism covers 0103/0174 without individual entries.
- scripts/import_postgresql_posts.py's rebuild_lineage stub now
  accepts the llm= keyword this PR's own call site passes.
- lineage_persistence.py: added the missing docstring on the nested
  sort_key helper the AST docstring-coverage audit flagged.

Verified: backend `uv run pytest -q` 931 passed / 16 skipped / 0
failed (0:08:37); frontend `pnpm run lint`, `pnpm run build`, and
`pnpm exec vitest run` (245 passed / 245).

@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

connection so version, weights, and generated-at stay aligned with
the new graph.
"""
spec = lineage_rebuild_spec(edges)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔍 Persisted signal weights ignore estimated fusion weights

persist_lineage_edges calls lineage_rebuild_spec(edges) without weights, so the persisted signal weights are always derived by renormalizing DEFAULT_CHANNEL_WEIGHTS. rebuild_lineage (backend/app/lineage_ingestion.py:246-252) fuses fused_score with the vector from load_estimated_channel_weights. If an anchor method is ever approved, those diverge and channel_signal_rows reconciliation raises, failing the rebuild. Unreachable today because _SUPPORTED_ANCHOR_METHOD_CODES is empty; the estimated weights must be passed through when it is not.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@seonghobae
seonghobae enabled auto-merge August 24, 2026 07:58
@opencode-agent
opencode-agent Bot disabled auto-merge August 24, 2026 08:41
@seonghobae
seonghobae enabled auto-merge August 24, 2026 11:51
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