From 6b08201e3613e69ef27bbe83e637ebcd0f35e401 Mon Sep 17 00:00:00 2001
From: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Date: Mon, 9 Nov 2026 09:36:14 +0800
Subject: [PATCH] Show case conclusion citations in one disclosure
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
---
.../personal-workspace/research-case-study.css | 4 +++-
.../personal-workspace/research-case-study.tsx | 17 ++++++++++-------
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/apps/presentation/dashboard/src/features/personal-workspace/research-case-study.css b/apps/presentation/dashboard/src/features/personal-workspace/research-case-study.css
index 6a65e96d47..719e020888 100644
--- a/apps/presentation/dashboard/src/features/personal-workspace/research-case-study.css
+++ b/apps/presentation/dashboard/src/features/personal-workspace/research-case-study.css
@@ -36,7 +36,9 @@
.case-section-number { color: var(--pw-muted); font-size: var(--text-body); margin-bottom: 6px; }
.research-case-study .case-section h3 { font-size: 23px; font-weight: 600; line-height: 1.5; margin: 0 0 18px; }
.case-section > .personal-md { max-width: 80ch; }
-.case-sources { margin-block-top: 8px; }.case-sources button { display: block; text-align: start; font: inherit; font-size: var(--text-body); color: var(--pw-text); background: none; border: 0; min-height: 44px; padding: 8px 0; cursor: pointer; overflow-wrap: anywhere; }
+.case-sources { margin-block-top: 8px; }
+.case-citation-links { list-style: none; margin: 0; padding: 0; }
+.case-citation-links button { display: block; text-align: start; font: inherit; font-size: var(--text-body); color: var(--pw-text); background: none; border: 0; min-height: 44px; padding: 8px 0; cursor: pointer; overflow-wrap: anywhere; }
.case-table-scroll { overflow-x: auto; margin-block: 24px; }.case-table-scroll table { border-collapse: collapse; width: 100%; font-size: var(--text-body); line-height: 1.7; }
.case-table-scroll :is(th,td) { border-bottom: 1px solid var(--pw-line); text-align: start; vertical-align: top; padding: 12px 16px 12px 0; min-width: 85px; }
.case-table-scroll th { font-weight: 500; }.case-table-scroll thead th { color: var(--pw-muted); }.goal-research-workbench .research-case-reader .research-case-study .case-table-scroll .personal-md { font-size: inherit; }.case-table-scroll .personal-md p { margin: 0; }
diff --git a/apps/presentation/dashboard/src/features/personal-workspace/research-case-study.tsx b/apps/presentation/dashboard/src/features/personal-workspace/research-case-study.tsx
index 30ca9075f1..d9d03d5b0c 100644
--- a/apps/presentation/dashboard/src/features/personal-workspace/research-case-study.tsx
+++ b/apps/presentation/dashboard/src/features/personal-workspace/research-case-study.tsx
@@ -51,10 +51,11 @@ export function ResearchCaseStudy({study, zh, historical, scope, onCitation}: {
onCitation: (c: AssessmentCitation, origin?: HTMLButtonElement) => void;
}) {
const id = useId().replace(/:/g, '');
- const sources = (citations: AssessmentCitation[]) => {zh ? '依据与原文' : 'Evidence and originals'}
- {citations.map((c, i) => onCitation(c, e.currentTarget)}>
- {c.source_id} · {c.first_line}–{c.last_line} ↗ )}
- ;
+ const citationLinks = (citations: AssessmentCitation[]) =>
+ {citations.map((c, i) => onCitation(c, e.currentTarget)}>
+ {c.source_id} · {zh ? '行' : 'lines'} {c.first_line}–{c.last_line} ↗
+ )}
+ ;
return
{scope.case_id} · {zh ? 'Case 深度解读' : 'Case study'}
@@ -62,10 +63,10 @@ export function ResearchCaseStudy({study, zh, historical, scope, onCitation}: {
{historical ? {zh ? '来源已变化或暂不可读。下文保留注册时的解读与证据快照,不能视作当前结果。' : 'The source changed or is unavailable. This reading and its evidence snapshot describe the registered version, not current results.'}
: null}
{study.language !== (zh ? 'zh' : 'en') ? {zh ? '显示已保存的英文原文。' : 'Showing the saved Chinese original.'}
: null}
- {zh ? '范围与来源' : 'Scope and provenance'}
+ {zh ? '结论依据与范围' : 'Conclusion evidence and scope'}
+ {citationLinks(study.citations)}
{zh ? '已保存的作者分析;来源绑定不代表结论已独立验证。' : 'Saved author analysis; source binding does not independently verify the conclusions.'}
{zh ? '观察窗口' : 'Window'} {scope.window} {zh ? '运行' : 'Run'} {scope.run_id} {zh ? '版本' : 'Revision'} {scope.revision}
- {sources(study.citations)}
@@ -79,7 +80,9 @@ export function ResearchCaseStudy({study, zh, historical, scope, onCitation}: {
{s.table ?
{s.table.columns.map((c, i) => {c} )}
{s.table.rows.map((row, i) => {row.map((cell, j) => j === 0 ? {cell} : )} )}
: null}
{s.timeline ?
{s.timeline.map((event, i) => {event.label}
{event.title} )} : null}
- {sources(s.citations)}
+
{zh ? '依据与原文' : 'Evidence and originals'}
+ {citationLinks(s.citations)}
+
)}
{study.limitations.length ?
{zh ? '这份解读还缺什么' : 'What this reading cannot resolve'} {study.limitations.map((text, i) => {text} )} : null}