Repository navigation
[Product Slice] Make one Copilot answer fully traceable from question to financial fact to citation #101
Description
Problem
Folio already has most of the components required for a trustworthy financial Copilot, but they are still being developed as separate subsystems. A user can ask a financial question, the Agent can call tools, financial data can be normalized, evidence can be persisted, and citation/source-inspector work is underway — yet there is not one explicit product acceptance path proving that these pieces work together as a single user experience.
The risk is that each subsystem passes its own tests while the final answer still loses provenance, time/currency semantics, evidence identity, or citation navigation somewhere between runtime and UI.
Related: #22 #24 #26 #27 #29 #30 #100
Current state
The repository already contains or is actively developing:
- provider-agnostic financial data routing;
- canonical instrument identity;
FinancialFacttiming/currency/unit semantics;- structured financial evidence persistence;
- typed answer blocks;
- Stream Event work;
- inline citations / Source Inspector work;
- provider conflict/reconciliation work.
What is missing is a single end-to-end Copilot vertical slice that treats these as one product contract.
Expected direction
Establish one canonical Copilot acceptance scenario such as:
“What is Apple’s current valuation / price / key metric, what time is this data from, and where did it come from?”
The exact query may vary, but the path must be:
User question
↓
Agent/tool selection
↓
Provider gateway
↓
FinancialFact / normalized semantics
↓
Persisted evidence
↓
Answer generation
↓
Inline citation / typed block
↓
Source Inspector
The user should be able to inspect the answer and determine:
- which provider supplied the value;
- the canonical instrument and metric;
- currency/unit;
as_ofversusretrieved_at;- live/delayed/EOD/stale state when applicable;
- whether multiple providers conflicted or fallback occurred;
- the evidence identity used by the answer;
- the run/tool identity that produced it.
This Issue should reuse existing contracts. Do not create a parallel Copilot-only evidence model.
Non-goals
- No new orchestration framework.
- No broad UI redesign.
- No requirement to finish all of [Finance Data] Reconcile conflicting values across financial data providers #26 if the selected scenario does not naturally produce a provider conflict.
- No requirement for a large benchmark suite.
- Do not block incremental prerequisite PRs; this Issue is the integration/acceptance target.
Validation / acceptance criteria
- A real Copilot question executes through the production Agent/tool path and real financial provider gateway.
- The final answer includes at least one real structured financial fact with preserved provider, instrument, metric, unit/currency and timing semantics.
- The answer binds that fact to a stable evidence/citation identity rather than only rendering the numeric value as free text.
- The user can open the corresponding source/evidence inspector and see the same value and provenance used by the answer.
- Reloading the conversation preserves the citation/evidence relationship and does not silently recompute it from current data.
- If the selected provider reports delayed/stale/fallback state, that state remains visible to the answer/UI rather than being discarded.
- If conflicting provider candidates are present, the answer does not silently average or hide the conflict.
- Provide a reproducible test report with exact commands, Bun/OS, focused test results, and the real provider used.
- Because this is a visible product flow, attach screenshots showing: (1) the completed answer and citation/typed fact; (2) the opened Source Inspector/evidence detail.
Maintainer note
Success is not “all underlying Issues are closed.” Success is that one ordinary financial question is traceable end to end with the current architecture. Prefer integration and contract fixes over adding new abstractions.
Activity
Theater-ahyeon commentedon Sep 13, 2026
进度说明:本 issue 的确定性溯源层已在 #106 落地(stacked on #104/#105)——
buildAnswerEvidenceTrace从已持久化的回合数据按需计算 问题 → 回答块引用(fe_ id)→ 统一契约 evidence → 来源 的完整链路,未映射引用显式暴露为缺口。数据已全部在消息上持久化,溯源层零新增存储。剩余的 UI 呈现部分(溯源视图/引用检查器)属于 #30 Source Inspector 的范围,为避免与 #30 认领者撞车,我不动 UI,等 #30 或维护者安排。契约侧的
provenance.envelopeIdjoin 字段已在 #106 中以向后兼容方式提供。sclfcz commentedon Sep 14, 2026
/claim
github-actions commentedon Sep 14, 2026
@sclfcz 已认领该 Issue,并已自动设为 Assignee。提交 PR 时请在描述中写
Closes #101。sclfcz commentedon Sep 14, 2026
/unclaim
github-actions commentedon Sep 14, 2026
该 Issue 已释放,可以重新认领。
SEVEN-us commentedon Sep 15, 2026
感谢 @Theater-ahyeon 的说明。我希望协助完成 #101 的剩余工作,但会避免重复 #106 的确定性溯源层,也不会与 #30 的 Source Inspector 认领者重叠。
请维护者确认:
在维护者确认交接范围前,我不会发送 /claim。若有明确的剩余 scope,我可以先提交验收规格与测试计划,再按依赖顺序实现。
SEVEN-us commentedon Sep 15, 2026
我将按非 UI 的集成/验收范围推进 #101:补齐真实 ProviderRouter provenance 到持久化证据的验证、会话 reload 一致性测试,以及真实 provider 的 Copilot acceptance harness;不重复 #106 的 trace 实现,不修改 #30 的 Source Inspector UI。若维护者认为该范围仍与现有工作冲突,请及时指出。
SEVEN-us commentedon Sep 15, 2026
/claim
github-actions commentedon Sep 15, 2026
@SEVEN-us 已认领该 Issue,并已自动设为 Assignee。提交 PR 时请在描述中写
Closes #101。SEVEN-us commentedon Sep 16, 2026
已提交贡献 PR:#112(https://github.com/helsome/folio/pull/112)。本 PR 实现报价纵向切片的真实 Provider 溯源、fallback lineage、延迟/时间戳/规范化 instrument 持久化,以及 Agent 工具到会话重载的验收测试;范围刻意不重复 #106 的 answer-trace 合约和 #30 的 Source Inspector UI。
fix(evidence): preserve routed quote provenance (#112)
feat(evidence): Copilot 回答证据溯源层(问题 → 事实 → 引用)
feat(evidence): Copilot 回答证据溯源层(问题 → 事实 → 引用)
github-actions commentedon Sep 23, 2026
@SEVEN-us 这个 Issue 已认领超过 7 天,目前没有发现关联的 open PR,也没有看到最近 7 天的进度更新。
如果仍在推进,请在 3 天内 留一条简短进度说明(包括正在等待的前置依赖也可以);如果已经有 PR,请贴出链接。若 3 天内没有回应,认领会自动释放,方便其他贡献者接手。
github-actions commentedon Sep 26, 2026
@SEVEN-us 在提醒后 3 天内没有进度回应,且仍未发现关联的 open PR;本次认领已自动释放。Issue 保持开放,可以重新认领。