Skip to content

[PR-1] M1 显著性数值修复 + EvidenceLedger 最小结构 #24

Description

@justDance-everybody

本任务属于 Epic #23。共享上下文(整体目标、EvidenceLedger 完整 schema、Agent Execution Contract、Non-goals、回归基线)见 #23,不在此重复。
依赖:无(第一个 PR)。
代码定位按当前仓库版本核对;若行号漂移,以函数名 / 字段名 / 挂载点语义为准,不得因行号变化改变任务目标。

完成本 PR 需遵守 Epic #23 的 Agent Execution Contract 与 Test Execution Protocol:先写失败测试与反例夹具 → 最小实现 → 跑里程碑测试 → 跑回归基线(pytest tests/test_pipeline_contracts.pypytest tests/test_vnext_manuscript.py)。PR 描述需列出:changed files / tests added / tests run / before-after / non-goals。


目标

两件事:① 修掉显著性的子串误判;② 建立 EvidenceLedger 的最小结构 + builder(不要求 full traceability,那是 PR-2)。

Allowed changes

  • agents/paper_completeness.py
  • significance alpha 配置读取相关文件
  • EvidenceLedger builder 的最小对象(build_evidence_ledger,见下)
  • PR-1 fixtures
  • PR-1 tests

Forbidden changes

  • 不修改 contracts/pipeline.py
  • 不改变 :699 的存在性检查语义
  • 不通过修改测试来绕过 p=1.0000 反例
  • 不新增从 manifest.statistical_tests 文本解析显著性的路径
  • 不在本 PR 实现 assert_traceable / full traceability(留 PR-2)

M1 现状(bug,已定位三处)

  • paper_completeness.py:241-242:summary["statistical_tests"] = f"p={packet['p_value']}" —— 把数值塞进字符串。
  • paper_completeness.py:589,591:p_text = _lower(manifest.get("statistical_tests"))has_significance = "p=" in p_text or "bootstrap" in p_text or "permutation" in p_textp=1.0000"p=" 子串即判显著。
  • :699(存在性检查)、:753(显著性问答)也读 statistical_tests 文本。

M1 目标行为

  • has_significance 改为读数值:p_value is not None and p_value < alpha,数值来源 ledger 的 p_value / alpha
  • verdict 绑定:verdict ∈ {confirmed, reproduced} 才允许显著性支撑 Abstract 级断言;verdict ∈ {refuted, inconclusive} 一律不显著、不得进 Abstract。
  • α 默认 0.05,新增 env DEEPGRAPH_SIGNIFICANCE_ALPHA 可覆盖(沿用现有 DEEPGRAPH_* 风格)。
  • 699 与 753 分别处理: :753 是显著性判定,改为按数值判;:699 是"是否记录过检验"的存在性检查,语义不同,本 PR 不动(改成 p<α 会把"记录了但不显著"误报成"缺失")。

取数路径

build_claim_evidence_matrixpacket 已在 scope(paper_completeness.py:586_packet_parts(state)),p_value 就在 packet(packet.get("p_value"))。直接读即可,无需改签名。PR 描述说明数值取自 packet

EvidenceLedger 最小 builder(本 PR 范围)

按 Epic #23 的 schema,实现:

def build_evidence_ledger(packet: dict, benchmark_summary: dict, *, alpha: float,
                          provenance: dict | None = None) -> dict:
    """Build the single source of truth for presentation evidence."""

最小子集需含:alpha / verdict / p_value / effect_size / confidence / per_method / seed_variance / seeds(字段语义与来源见 #23 schema)。validate_evidence_ledger / assert_traceable 留 PR-2。

验收用例(单元,纯 CPU)

# 输入 期望输出
M1-1 p_value=1.0000, verdict=inconclusive has_significance=False;"Improves utility" 行 can_appear_in_abstract=False
M1-2 p_value=0.0123, verdict=confirmed,manifest.seeds ≥3 项、per_method ≥2 键 has_significance=True;该行 can_appear_in_abstract=True(591 行还要 len(manifest["seeds"])>=3,夹具须同时满足)
M1-3 p_value=0.0123, verdict=refuted can_appear_in_abstract=False(verdict 否定)
M1-4 p_value=0.049,DEEPGRAPH_SIGNIFICANCE_ALPHA=0.01 has_significance=False(0.049 ≥ 0.01)
M1-5 p_value=None has_significance=False,不报错
M1-6(回归) manifest.statistical_tests="p=1.0000" 文本仍在,但数值 p_value=1.0 以数值为准判不显著(证明不再走子串)
M1-7 753 显著性问答:p_value=1.0 答 "No";699 存在性语义保持不变

反例夹具: fixtures/m1_p_eq_one.jsonfixtures/m1_significant.json(含 seeds:[0,1,2]per_method 二键)、fixtures/m1_refuted.json

DoD

M1-1~7 全绿;591 与 753 改数值;DEEPGRAPH_SIGNIFICANCE_ALPHA 落地;最小 build_evidence_ledger 可用;回归基线全绿;收敛分支、未确认不强推。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions