eduevidence 6.0.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/CHANGELOG.md +395 -0
  2. package/CONTRIBUTING.md +105 -0
  3. package/README.md +113 -49
  4. package/README.zh-CN.md +39 -12
  5. package/SKILL.md +15 -5
  6. package/assets/readme/landing-tour.gif +0 -0
  7. package/assets/readme/studio-tour.gif +0 -0
  8. package/benchmarks/evidence-library.json +277 -1
  9. package/bin/eduevidence.js +2 -1
  10. package/docs/architecture.md +325 -46
  11. package/docs/demo-workplace-ai.md +1 -1
  12. package/docs/install-guide.md +1 -1
  13. package/docs/j-ev-experimental.md +250 -0
  14. package/docs/orchestration-role-model.md +1 -1
  15. package/docs/release-closeout/README.md +1 -1
  16. package/docs/reproducibility.md +138 -0
  17. package/docs/sciverse-api.md +125 -0
  18. package/domains/_neutral/copy/few_shots.json +21 -0
  19. package/domains/_neutral/copy/framing_lexicon.json +19 -0
  20. package/domains/_neutral/copy/module_labels.json +5 -0
  21. package/domains/_neutral/copy/module_labels_footer.json +102 -0
  22. package/domains/_neutral/copy/module_labels_modules.json +204 -0
  23. package/domains/_neutral/copy/module_labels_nav.json +126 -0
  24. package/domains/_neutral/copy/module_labels_summary.json +98 -0
  25. package/domains/_neutral/copy/module_labels_tables.json +164 -0
  26. package/domains/_neutral/copy/module_labels_v2.json +90 -0
  27. package/domains/_neutral/copy/risk_constructs.json +20 -0
  28. package/domains/_neutral/copy/section_titles.json +66 -0
  29. package/domains/_neutral/copy/terminology.json +11 -0
  30. package/domains/check_copy_packs.py +103 -0
  31. package/domains/education/copy/few_shots.json +22 -0
  32. package/domains/education/copy/framing_enums.json +167 -0
  33. package/domains/education/copy/framing_lexicon.json +166 -0
  34. package/domains/education/copy/module_labels.json +169 -0
  35. package/domains/education/copy/risk_constructs.json +48 -0
  36. package/domains/education/copy/section_titles.json +186 -0
  37. package/domains/education/copy/terminology.json +70 -0
  38. package/domains/education/manifest.json +1 -1
  39. package/domains/education/outcome_taxonomy.json +2 -2
  40. package/domains/manifest.json +1 -1
  41. package/domains/policy/copy/few_shots.json +22 -0
  42. package/domains/policy/copy/framing_enums.json +94 -0
  43. package/domains/policy/copy/framing_lexicon.json +174 -0
  44. package/domains/policy/copy/module_labels.json +168 -0
  45. package/domains/policy/copy/risk_constructs.json +33 -0
  46. package/domains/policy/copy/section_titles.json +186 -0
  47. package/domains/policy/copy/terminology.json +64 -0
  48. package/eduevidence_cli.py +10 -0
  49. package/engine/capabilities.py +57 -5
  50. package/engine/decision_policy.py +167 -0
  51. package/engine/evidence_graph.py +14 -10
  52. package/engine/gaps.py +42 -22
  53. package/engine/ids.py +2 -0
  54. package/engine/library.py +6 -2
  55. package/engine/library_builtin.py +7 -4
  56. package/engine/living.py +34 -4
  57. package/engine/migration.py +88 -3
  58. package/engine/orchestration.py +5 -5
  59. package/engine/paths.py +2 -0
  60. package/engine/pilot.py +34 -32
  61. package/engine/taxonomy.py +211 -0
  62. package/engine/tribunal.py +49 -43
  63. package/engine/versions.py +1 -1
  64. package/examples/ai-coding-assistant-evidence/EduEvidence_Report.html +1361 -147
  65. package/examples/ai-coding-assistant-evidence/artifact_manifest.json +3 -3
  66. package/examples/ai-coding-assistant-evidence/citation_check.json +1 -1
  67. package/examples/ai-coding-assistant-evidence/final_verdict.json +107 -0
  68. package/examples/ai-coding-assistant-evidence/gate_report.json +101 -0
  69. package/examples/ai-coding-assistant-evidence/report_spec.json +23 -12
  70. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_academic.html +448 -128
  71. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_claude.html +448 -128
  72. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_datalab-dark.html +448 -128
  73. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_datalab.html +448 -128
  74. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_presentation.html +448 -128
  75. package/examples/ai-coding-assistant-evidence/reports-5themes/report_academic.html +1360 -146
  76. package/examples/ai-coding-assistant-evidence/reports-5themes/report_claude.html +1360 -146
  77. package/examples/ai-coding-assistant-evidence/reports-5themes/report_datalab-dark.html +1360 -146
  78. package/examples/ai-coding-assistant-evidence/reports-5themes/report_datalab.html +1360 -146
  79. package/examples/ai-coding-assistant-evidence/reports-5themes/report_presentation.html +1360 -146
  80. package/examples/ai-coding-assistant-evidence/result.json +13 -9
  81. package/examples/ai-coding-assistant-evidence/result.zh.json +45 -41
  82. package/examples/ai-coding-assistant-evidence/skeptic.json +72 -0
  83. package/examples/ai-coding-assistant-evidence/verdict.json +6 -2
  84. package/examples/spaced-retrieval-practice/EduEvidence_Report.html +2728 -0
  85. package/examples/spaced-retrieval-practice/applicability.json +14 -0
  86. package/examples/spaced-retrieval-practice/artifact_manifest.json +15 -0
  87. package/examples/spaced-retrieval-practice/claims.jsonl +3 -0
  88. package/examples/spaced-retrieval-practice/evidence.jsonl +6 -0
  89. package/examples/spaced-retrieval-practice/final_verdict.json +93 -0
  90. package/examples/spaced-retrieval-practice/frame.json +58 -0
  91. package/examples/spaced-retrieval-practice/gate_report.json +101 -0
  92. package/examples/spaced-retrieval-practice/methodology.json +78 -0
  93. package/examples/spaced-retrieval-practice/report.html +2522 -0
  94. package/examples/spaced-retrieval-practice/report_spec.json +212 -0
  95. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_academic.html +2728 -0
  96. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_claude.html +2728 -0
  97. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_datalab-dark.html +2728 -0
  98. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_datalab.html +2728 -0
  99. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_presentation.html +2728 -0
  100. package/examples/spaced-retrieval-practice/reports-5themes/report_academic.html +2728 -0
  101. package/examples/spaced-retrieval-practice/reports-5themes/report_claude.html +2728 -0
  102. package/examples/spaced-retrieval-practice/reports-5themes/report_datalab-dark.html +2728 -0
  103. package/examples/spaced-retrieval-practice/reports-5themes/report_datalab.html +2728 -0
  104. package/examples/spaced-retrieval-practice/reports-5themes/report_presentation.html +2728 -0
  105. package/examples/spaced-retrieval-practice/result.json +942 -0
  106. package/examples/spaced-retrieval-practice/result.zh.json +942 -0
  107. package/examples/spaced-retrieval-practice/skeptic.json +70 -0
  108. package/examples/spaced-retrieval-practice/sources.jsonl +7 -0
  109. package/examples/spaced-retrieval-practice/verdict.json +93 -0
  110. package/examples/workplace-ai-assistant/EduEvidence_Report.html +2814 -0
  111. package/examples/workplace-ai-assistant/artifact_manifest.json +15 -0
  112. package/examples/workplace-ai-assistant/claims.jsonl +4 -4
  113. package/examples/workplace-ai-assistant/evidence.jsonl +4 -4
  114. package/examples/workplace-ai-assistant/evidence_graph.json +15 -15
  115. package/examples/workplace-ai-assistant/final_verdict.json +78 -0
  116. package/examples/workplace-ai-assistant/gate_report.json +101 -0
  117. package/examples/workplace-ai-assistant/report_spec.json +209 -40
  118. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_academic.html +449 -119
  119. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_claude.html +449 -119
  120. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_datalab-dark.html +449 -119
  121. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_datalab.html +449 -119
  122. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_presentation.html +449 -119
  123. package/examples/workplace-ai-assistant/reports-5themes/report_academic.html +2814 -0
  124. package/examples/workplace-ai-assistant/reports-5themes/report_claude.html +2814 -0
  125. package/examples/workplace-ai-assistant/reports-5themes/report_datalab-dark.html +2814 -0
  126. package/examples/workplace-ai-assistant/reports-5themes/report_datalab.html +2814 -0
  127. package/examples/workplace-ai-assistant/reports-5themes/report_presentation.html +2814 -0
  128. package/examples/workplace-ai-assistant/result.json +82 -20
  129. package/examples/workplace-ai-assistant/result.zh.json +82 -20
  130. package/examples/workplace-ai-assistant/skeptic.json +72 -0
  131. package/examples/workplace-ai-assistant/verdict.json +36 -10
  132. package/integrations/agent_mcp.py +2 -2
  133. package/integrations/jev/__init__.py +115 -0
  134. package/integrations/jev/approval.py +212 -0
  135. package/integrations/jev/cli.py +84 -0
  136. package/integrations/jev/config.py +112 -0
  137. package/integrations/jev/gateway.py +128 -0
  138. package/integrations/jev/modes.py +38 -0
  139. package/integrations/jev/tools_classify.py +88 -0
  140. package/integrations/jev/tools_extract.py +111 -0
  141. package/integrations/jev/tools_rerank.py +71 -0
  142. package/integrations/jev/tools_screen.py +87 -0
  143. package/integrations/jev/tools_verify.py +95 -0
  144. package/integrations/jev_mcp.py +22 -0
  145. package/integrations/semantic_decide.py +286 -0
  146. package/integrations/semdecide_cli.py +55 -0
  147. package/package.json +19 -2
  148. package/pyproject.toml +4 -3
  149. package/references/report-copy-style.md +107 -0
  150. package/references/retrieval-compliance.md +75 -0
  151. package/references/retrieval-protocol.md +20 -0
  152. package/retrieval/audit.py +27 -3
  153. package/retrieval/fetch.py +96 -0
  154. package/retrieval/sciverse.py +398 -0
  155. package/retrieval/search.py +47 -7
  156. package/schemas/applicability.schema.json +94 -0
  157. package/schemas/chart-spec.schema.json +10 -3
  158. package/schemas/evidence.schema.json +316 -43
  159. package/schemas/fetch-result.schema.json +2 -1
  160. package/schemas/report-result.schema.json +3 -3
  161. package/schemas/report-spec.schema.json +98 -100
  162. package/schemas/skeptic.schema.json +86 -0
  163. package/schemas/source.schema.json +21 -2
  164. package/schemas/v2/decision-snapshot.schema.json +20 -9
  165. package/schemas/v2/finding.schema.json +5 -1
  166. package/schemas/v2/intake.schema.json +191 -0
  167. package/schemas/v2/methodology-audit.schema.json +5 -1
  168. package/schemas/v2/outcome.schema.json +28 -5
  169. package/schemas/v2/study.schema.json +5 -1
  170. package/schemas/vNext/autoevolve-session.schema.json +34 -1
  171. package/schemas/vNext/eval-snapshot.schema.json +77 -1
  172. package/schemas/vNext/execution-plan.schema.json +50 -1
  173. package/schemas/vNext/gap-priority.schema.json +54 -1
  174. package/schemas/vNext/negative-search-record.schema.json +68 -1
  175. package/schemas/vNext/research-iteration.schema.json +87 -1
  176. package/schemas/vNext/research-strategy.schema.json +62 -1
  177. package/schemas/vNext/skill-experiment.schema.json +90 -1
  178. package/schemas/vNext/task-spec.schema.json +156 -1
  179. package/schemas/vNext/worker-result.schema.json +60 -1
  180. package/schemas/verdict.schema.json +164 -28
  181. package/scripts/build_evidence_library.py +15 -5
  182. package/scripts/build_report_variants.py +18 -2
  183. package/scripts/build_result.py +74 -9
  184. package/scripts/check_package_parity.py +85 -0
  185. package/scripts/check_protocol_alignment.py +375 -0
  186. package/scripts/check_versioned_schemas.py +254 -0
  187. package/scripts/claim_audit.py +13 -8
  188. package/scripts/compute_confidence.py +10 -0
  189. package/scripts/dashboard_server.py +13 -2
  190. package/scripts/did_regression.py +12 -2
  191. package/scripts/evidence_score.py +5 -2
  192. package/scripts/intake/__init__.py +31 -0
  193. package/scripts/intake/__main__.py +18 -0
  194. package/scripts/intake/background.py +78 -0
  195. package/scripts/intake/browser.py +79 -0
  196. package/scripts/intake/cli.py +57 -0
  197. package/scripts/intake/constants.py +57 -0
  198. package/scripts/intake/depth.py +53 -0
  199. package/scripts/intake/enhancements.py +106 -0
  200. package/scripts/intake/hooks.py +90 -0
  201. package/scripts/intake/prefs.py +76 -0
  202. package/scripts/intake/prompts.py +85 -0
  203. package/scripts/intake/session.py +152 -0
  204. package/scripts/lint_file_layers.py +126 -0
  205. package/scripts/orchestrator.py +187 -40
  206. package/scripts/pre_verdict_gate.py +241 -29
  207. package/scripts/quickstart.py +18 -2
  208. package/scripts/run_workspace.py +7 -1
  209. package/scripts/skill_lint.py +11 -1
  210. package/scripts/skill_payload.py +6 -3
  211. package/scripts/test_adversarial_empirical.py +96 -25
  212. package/scripts/validate_schema.py +31 -1
  213. package/skill/agents/evaluation-designer.md +20 -4
  214. package/skill/agents/evidence-analyst.md +19 -3
  215. package/skill/agents/evidence-judge.md +98 -8
  216. package/skill/agents/evidence-retriever.md +20 -3
  217. package/skill/agents/intervention-designer.md +20 -4
  218. package/skill/agents/method-reviewer.md +18 -2
  219. package/skill/agents/{education-planner.md → research-planner.md} +19 -3
  220. package/skill/agents/skeptic.md +18 -2
  221. package/skill/roles/registry.yaml +11 -11
  222. package/skill/sub-skills/aihot-trend-analysis/SKILL.md +28 -9
  223. package/skill/sub-skills/contradiction-analysis/SKILL.md +31 -11
  224. package/skill/sub-skills/data-analysis/SKILL.md +34 -15
  225. package/skill/sub-skills/ethics-review/SKILL.md +33 -10
  226. package/skill/sub-skills/evidence-extraction/SKILL.md +29 -11
  227. package/skill/sub-skills/evidence-review/SKILL.md +31 -12
  228. package/skill/sub-skills/gap-analysis/SKILL.md +31 -9
  229. package/skill/sub-skills/literature-review/SKILL.md +35 -14
  230. package/skill/sub-skills/methodology-audit/SKILL.md +29 -12
  231. package/skill/sub-skills/report-generation/SKILL.md +28 -0
  232. package/skill/sub-skills/research-planning/SKILL.md +41 -14
  233. package/skill/sub-skills/study-design/SKILL.md +30 -9
  234. package/skill/task-briefs/adjudicate.md +32 -7
  235. package/skill/task-briefs/applicability.md +37 -2
  236. package/skill/task-briefs/audit.md +32 -7
  237. package/skill/task-briefs/challenge.md +34 -5
  238. package/skill/task-briefs/evaluate.md +30 -5
  239. package/skill/task-briefs/extract.md +31 -8
  240. package/skill/task-briefs/frame.md +39 -10
  241. package/skill/task-briefs/intervene.md +32 -6
  242. package/skill/task-briefs/present.md +32 -8
  243. package/skill/task-briefs/projection.md +36 -2
  244. package/skill/task-briefs/retrieve.md +36 -6
  245. package/skill/workflows/decision-and-pilot.md +76 -1
  246. package/skill/workflows/evaluate-and-update.md +83 -0
  247. package/skill/workflows/evidence-review.md +104 -0
  248. package/skill/workflows/experimental-jev.md +170 -0
  249. package/skill/workflows/intake.md +120 -0
  250. package/visualization/eduevidence-report/scripts/build_figures.py +25 -3
  251. package/visualization/eduevidence-report/scripts/build_infographics.py +37 -15
  252. package/visualization/eduevidence-report/scripts/build_report.py +435 -575
  253. package/visualization/eduevidence-report/scripts/charts_data.py +2 -0
  254. package/visualization/eduevidence-report/scripts/lieflat_engine.py +349 -38
  255. package/visualization/eduevidence-report/scripts/report_copy_pack.py +296 -0
  256. package/visualization/eduevidence-report/scripts/report_copy_policy_guard.py +47 -0
  257. package/visualization/eduevidence-report/scripts/zh_labels.py +141 -1
  258. package/web/architecture.html +14885 -0
  259. package/web/studio/assets/index-B8tkF44Q.css +1 -0
  260. package/web/studio/index.html +2 -2
  261. package/scripts/build_esl_artifacts.py +0 -1921
  262. package/scripts/build_killer_demo.py +0 -295
  263. package/scripts/enrich_projects_human_and_lieflat.py +0 -315
  264. package/scripts/generate_new_projects.py +0 -686
  265. package/scripts/sync_killer_demo_report.py +0 -270
  266. package/web/studio/assets/index-CzXocaGv.css +0 -1
  267. /package/web/studio/assets/{index-pa7jD7n4.js → index-CQ6Keoyc.js} +0 -0
@@ -0,0 +1,94 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://github.com/37chengshan/eduevidence/schemas/applicability.schema.json",
4
+ "title": "ApplicabilityAssessment",
5
+ "description": "Stage-7 deliverable: who the evidence applies to, in which contexts, for which outcomes, and where it stops. Either an assessment or an explicit NOT_CAPTURED record is required - silence used to render as an empty report section with no gate failing.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "status"
10
+ ],
11
+ "properties": {
12
+ "status": {
13
+ "type": "string",
14
+ "enum": [
15
+ "ASSESSED",
16
+ "NOT_CAPTURED"
17
+ ]
18
+ },
19
+ "reason": {
20
+ "type": "string"
21
+ },
22
+ "who": {
23
+ "type": "string"
24
+ },
25
+ "suitable_for": {
26
+ "type": "string"
27
+ },
28
+ "not_suitable_for": {
29
+ "type": "string"
30
+ },
31
+ "which_course": {
32
+ "type": "string"
33
+ },
34
+ "which_outcome": {
35
+ "type": "string"
36
+ },
37
+ "conditions": {
38
+ "type": [
39
+ "string",
40
+ "array"
41
+ ]
42
+ },
43
+ "target_population": {
44
+ "type": "string"
45
+ },
46
+ "target_context": {
47
+ "type": "string"
48
+ },
49
+ "boundary": {
50
+ "type": "string"
51
+ },
52
+ "notes": {
53
+ "type": "string"
54
+ },
55
+ "excluded_populations": {
56
+ "type": [
57
+ "string",
58
+ "array"
59
+ ]
60
+ },
61
+ "uncertainty": {
62
+ "type": [
63
+ "string",
64
+ "array"
65
+ ]
66
+ },
67
+ "extensions": {
68
+ "type": "object",
69
+ "additionalProperties": true
70
+ },
71
+ "required_conditions": {
72
+ "type": [
73
+ "string",
74
+ "array"
75
+ ],
76
+ "description": "Conditions that must hold for the evidence to apply."
77
+ },
78
+ "evidence_boundary": {
79
+ "type": "string"
80
+ },
81
+ "transfer_boundaries": {
82
+ "type": [
83
+ "string",
84
+ "array"
85
+ ]
86
+ },
87
+ "outcome_limits": {
88
+ "type": [
89
+ "string",
90
+ "array"
91
+ ]
92
+ }
93
+ }
94
+ }
@@ -2,14 +2,14 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://github.com/37chengshan/eduevidence/schemas/chart-spec.schema.json",
4
4
  "title": "ChartSpec",
5
- "description": "Chart spec produced by visualization build_charts.py. integrity is a per-check map with PASS/FAIL/NOT_CHECKED strings (P0-2 rewrite to match the real producer).",
5
+ "description": "One chart record inside a ReportSpec. Producer: visualization/eduevidence-report/scripts/build_report.py::build_report_spec. Kept in sync with the producer by scripts/check_protocol_alignment.py.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": [
9
9
  "chart_id",
10
10
  "purpose",
11
11
  "engine",
12
- "chart_type"
12
+ "data_ref"
13
13
  ],
14
14
  "properties": {
15
15
  "chart_id": {
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "chart_type": {
30
30
  "type": "string",
31
- "minLength": 1
31
+ "description": "Optional chart family label. The Lieflat gallery carries its own type on result.visual_layout; this field is only used by callers that build chart specs by hand."
32
32
  },
33
33
  "semantic_basis": {
34
34
  "type": "string"
@@ -83,6 +83,13 @@
83
83
  ]
84
84
  }
85
85
  }
86
+ },
87
+ "data_ref": {
88
+ "type": [
89
+ "string",
90
+ "null"
91
+ ],
92
+ "description": "Pointer to the data the chart reads, or null when the chart is rendered inline from result.json by the report builder."
86
93
  }
87
94
  }
88
95
  }
@@ -5,77 +5,350 @@
5
5
  "description": "Claim-level evidence object. MANDATORY fields (schema v1.1): evidence_id, source_id, study_id, sample_id, claim_id, claim, outcome_type, relation_to_claim, effect_direction, source_location. Missing any mandatory field marks the object as UNSUPPORTED. 三种方向语义严格分开:relation_to_claim(支持/反驳某条 claim)、effect_direction(研究观察到的效应方向)、decision_relation(对最终教学决策的意义)。direction 为旧契约字段,仅向后兼容,已废弃(deprecated)。扩展字段一律放在 extensions 内。",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
- "required": ["evidence_id", "source_id", "study_id", "sample_id", "claim_id", "claim", "outcome_type", "relation_to_claim", "effect_direction", "source_location"],
8
+ "required": [
9
+ "evidence_id",
10
+ "source_id",
11
+ "study_id",
12
+ "sample_id",
13
+ "claim_id",
14
+ "claim",
15
+ "outcome_type",
16
+ "relation_to_claim",
17
+ "effect_direction",
18
+ "source_location"
19
+ ],
9
20
  "properties": {
10
- "evidence_id": { "type": "string", "examples": ["E-001"] },
11
- "source_id": { "type": "string", "examples": ["S-2023-kazemitabaar"] },
12
- "study_id": { "type": "string", "description": "所属研究的稳定标识,用于独立研究计数(独立于 evidence_id,防止同一研究的多条 Evidence Object 重复放大信心)。" },
13
- "sample_id": { "type": "string", "description": "所属样本的稳定标识,用于独立样本计数。无法区分样本时可显式使用 UNKNOWN-SAMPLE-<study_id>,但不能静默缺失。" },
14
- "claim_id": { "type": "string", "description": "该证据所绑定 Claim 的稳定标识(Claim Registry 一等字段,Claim -> Evidence -> Source 不再依赖渲染阶段临时编号)。", "examples": ["C-003"] },
15
- "title": { "type": "string" },
16
- "year": { "type": ["integer", "null"] },
21
+ "evidence_id": {
22
+ "type": "string",
23
+ "examples": [
24
+ "E-001"
25
+ ]
26
+ },
27
+ "source_id": {
28
+ "type": "string",
29
+ "examples": [
30
+ "S-2023-kazemitabaar"
31
+ ]
32
+ },
33
+ "study_id": {
34
+ "type": "string",
35
+ "description": "所属研究的稳定标识,用于独立研究计数(独立于 evidence_id,防止同一研究的多条 Evidence Object 重复放大信心)。"
36
+ },
37
+ "sample_id": {
38
+ "type": "string",
39
+ "description": "所属样本的稳定标识,用于独立样本计数。无法区分样本时可显式使用 UNKNOWN-SAMPLE-<study_id>,但不能静默缺失。"
40
+ },
41
+ "claim_id": {
42
+ "type": "string",
43
+ "description": "该证据所绑定 Claim 的稳定标识(Claim Registry 一等字段,Claim -> Evidence -> Source 不再依赖渲染阶段临时编号)。",
44
+ "examples": [
45
+ "C-003"
46
+ ]
47
+ },
48
+ "title": {
49
+ "type": "string"
50
+ },
51
+ "year": {
52
+ "type": [
53
+ "integer",
54
+ "null"
55
+ ]
56
+ },
17
57
  "study_type": {
18
58
  "type": "string",
19
- "enum": ["rct", "quasi_experimental", "observational", "survey", "qualitative", "meta_analysis", "literature_review", "case_study", "mixed_methods"]
59
+ "enum": [
60
+ "rct",
61
+ "quasi_experimental",
62
+ "observational",
63
+ "survey",
64
+ "qualitative",
65
+ "meta_analysis",
66
+ "literature_review",
67
+ "case_study",
68
+ "mixed_methods"
69
+ ]
70
+ },
71
+ "education_level": {
72
+ "type": "string",
73
+ "examples": [
74
+ "undergraduate",
75
+ "k12",
76
+ "graduate"
77
+ ]
78
+ },
79
+ "subject": {
80
+ "type": "string",
81
+ "examples": [
82
+ "programming",
83
+ "mathematics",
84
+ "writing"
85
+ ]
86
+ },
87
+ "population": {
88
+ "type": "string",
89
+ "examples": [
90
+ "first_year_CS_students"
91
+ ]
92
+ },
93
+ "sample_size": {
94
+ "type": [
95
+ "integer",
96
+ "null"
97
+ ],
98
+ "minimum": 0
99
+ },
100
+ "intervention": {
101
+ "type": "string",
102
+ "examples": [
103
+ "copilot_allowed_in_lab"
104
+ ]
105
+ },
106
+ "comparison": {
107
+ "type": "string",
108
+ "examples": [
109
+ "no_ai_control_group"
110
+ ]
20
111
  },
21
- "education_level": { "type": "string", "examples": ["undergraduate", "k12", "graduate"] },
22
- "subject": { "type": "string", "examples": ["programming", "mathematics", "writing"] },
23
- "population": { "type": "string", "examples": ["first_year_CS_students"] },
24
- "sample_size": { "type": ["integer", "null"], "minimum": 0 },
25
- "intervention": { "type": "string", "examples": ["copilot_allowed_in_lab"] },
26
- "comparison": { "type": "string", "examples": ["no_ai_control_group"] },
27
112
  "outcome_type": {
28
113
  "type": "string",
29
114
  "enum": [
30
- "knowledge_gain", "concept_understanding", "retention", "transfer",
31
- "independent_problem_solving", "completion_time", "accuracy",
32
- "code_quality", "assignment_score", "engagement", "motivation",
33
- "cognitive_load", "help_seeking", "metacognition", "ai_dependency",
34
- "over_reliance", "reduced_effort", "reduced_transfer",
35
- "academic_integrity_risk", "false_confidence"
115
+ "knowledge_gain",
116
+ "concept_understanding",
117
+ "retention",
118
+ "transfer",
119
+ "independent_problem_solving",
120
+ "completion_time",
121
+ "accuracy",
122
+ "code_quality",
123
+ "assignment_score",
124
+ "engagement",
125
+ "motivation",
126
+ "cognitive_load",
127
+ "help_seeking",
128
+ "metacognition",
129
+ "ai_dependency",
130
+ "over_reliance",
131
+ "reduced_effort",
132
+ "reduced_transfer",
133
+ "academic_integrity_risk",
134
+ "false_confidence",
135
+ "policy_effectiveness",
136
+ "cost_effectiveness",
137
+ "equity",
138
+ "feasibility",
139
+ "implementation_risk"
140
+ ],
141
+ "description": "Outcome Taxonomy token, as registered in domains/<id>/outcome_taxonomy.json. Education registers the first 20 tokens (learning / task_performance / process / risk categories); policy registers the remaining 5 (effectiveness / cost / equity / feasibility / risk). The registry is the authority - scripts/check_protocol_alignment.py fails if this enum and the registry disagree."
142
+ },
143
+ "outcome_measure": {
144
+ "type": "string",
145
+ "examples": [
146
+ "final_exam_score",
147
+ "post_test_transfer_task"
148
+ ]
149
+ },
150
+ "claim": {
151
+ "type": "string",
152
+ "description": "The specific claim this evidence supports or contradicts."
153
+ },
154
+ "direction": {
155
+ "type": "string",
156
+ "enum": [
157
+ "support",
158
+ "contradict",
159
+ "neutral"
160
+ ],
161
+ "description": "DEPRECATED: legacy direction field, kept for backward compatibility only. Use relation_to_claim instead."
162
+ },
163
+ "relation_to_claim": {
164
+ "type": "string",
165
+ "enum": [
166
+ "support",
167
+ "contradict",
168
+ "neutral"
169
+ ],
170
+ "description": "该证据与 claim 的关系(支持/反驳/中性)。Claim Audit 只依据此字段判断支持/反驳,不得用 effect_direction 或 legacy direction 替代。"
171
+ },
172
+ "effect_direction": {
173
+ "type": "string",
174
+ "enum": [
175
+ "positive",
176
+ "negative",
177
+ "null"
178
+ ],
179
+ "description": "研究观察到的效应方向。Outcome 可视化 / 聚合只依据此字段。"
180
+ },
181
+ "decision_relation": {
182
+ "type": "string",
183
+ "enum": [
184
+ "support_adoption",
185
+ "oppose_adoption",
186
+ "conditional",
187
+ "neutral"
188
+ ],
189
+ "description": "该证据对最终教学决策的意义(支持采纳/反对采纳/有条件采纳/中性)。跨研究一致性(Consistency)与 Tribunal 依据此字段计算。"
190
+ },
191
+ "effect": {
192
+ "type": "string",
193
+ "examples": [
194
+ "positive_medium",
195
+ "null",
196
+ "negative_small"
197
+ ]
198
+ },
199
+ "duration": {
200
+ "type": "string",
201
+ "examples": [
202
+ "8_weeks"
36
203
  ]
37
204
  },
38
- "outcome_measure": { "type": "string", "examples": ["final_exam_score", "post_test_transfer_task"] },
39
- "claim": { "type": "string", "description": "The specific claim this evidence supports or contradicts." },
40
- "direction": { "type": "string", "enum": ["support", "contradict", "neutral"], "description": "DEPRECATED: legacy direction field, kept for backward compatibility only. Use relation_to_claim instead." },
41
- "relation_to_claim": { "type": "string", "enum": ["support", "contradict", "neutral"], "description": "该证据与 claim 的关系(支持/反驳/中性)。Claim Audit 只依据此字段判断支持/反驳,不得用 effect_direction 或 legacy direction 替代。" },
42
- "effect_direction": { "type": "string", "enum": ["positive", "negative", "null"], "description": "研究观察到的效应方向。Outcome 可视化 / 聚合只依据此字段。" },
43
- "decision_relation": { "type": "string", "enum": ["support_adoption", "oppose_adoption", "conditional", "neutral"], "description": "该证据对最终教学决策的意义(支持采纳/反对采纳/有条件采纳/中性)。跨研究一致性(Consistency)与 Tribunal 依据此字段计算。" },
44
- "effect": { "type": "string", "examples": ["positive_medium", "null", "negative_small"] },
45
- "duration": { "type": "string", "examples": ["8_weeks"] },
46
- "method": { "type": "string", "examples": ["quasi_experimental_pre_post"] },
47
- "strengths": { "type": "array", "items": { "type": "string" } },
48
- "limitations": { "type": "array", "items": { "type": "string" } },
49
- "confounders": { "type": "array", "items": { "type": "string" } },
50
- "source_location": { "type": "string", "description": "Verifiable pointer to the source (DOI / URL / database identifier / page)." },
205
+ "method": {
206
+ "type": "string",
207
+ "examples": [
208
+ "quasi_experimental_pre_post"
209
+ ]
210
+ },
211
+ "strengths": {
212
+ "type": "array",
213
+ "items": {
214
+ "type": "string"
215
+ }
216
+ },
217
+ "limitations": {
218
+ "type": "array",
219
+ "items": {
220
+ "type": "string"
221
+ }
222
+ },
223
+ "confounders": {
224
+ "type": "array",
225
+ "items": {
226
+ "type": "string"
227
+ }
228
+ },
229
+ "source_location": {
230
+ "type": "string",
231
+ "description": "Verifiable pointer to the source (DOI / URL / database identifier / page)."
232
+ },
51
233
  "quality_dimensions": {
52
234
  "type": "object",
53
235
  "additionalProperties": true,
54
236
  "description": "D1 Study Design, D2 Sample Quality, D3 Measurement Validity, D4 Temporal Strength, D5 Directness. Each scored 0/1/2.",
55
237
  "properties": {
56
- "D1_study_design": { "type": "integer", "minimum": 0, "maximum": 2 },
57
- "D2_sample_quality": { "type": "integer", "minimum": 0, "maximum": 2 },
58
- "D3_measurement_validity": { "type": "integer", "minimum": 0, "maximum": 2 },
59
- "D4_temporal_strength": { "type": "integer", "minimum": 0, "maximum": 2 },
60
- "D5_directness": { "type": "integer", "minimum": 0, "maximum": 2 }
238
+ "D1_study_design": {
239
+ "type": "integer",
240
+ "minimum": 0,
241
+ "maximum": 2
242
+ },
243
+ "D2_sample_quality": {
244
+ "type": "integer",
245
+ "minimum": 0,
246
+ "maximum": 2
247
+ },
248
+ "D3_measurement_validity": {
249
+ "type": "integer",
250
+ "minimum": 0,
251
+ "maximum": 2
252
+ },
253
+ "D4_temporal_strength": {
254
+ "type": "integer",
255
+ "minimum": 0,
256
+ "maximum": 2
257
+ },
258
+ "D5_directness": {
259
+ "type": "integer",
260
+ "minimum": 0,
261
+ "maximum": 2
262
+ }
61
263
  }
62
264
  },
63
- "quality_score": { "type": ["number", "null"], "minimum": 0, "maximum": 10 },
265
+ "quality_score": {
266
+ "type": [
267
+ "number",
268
+ "null"
269
+ ],
270
+ "minimum": 0,
271
+ "maximum": 10
272
+ },
64
273
  "evidence_level": {
65
274
  "type": "string",
66
- "enum": ["strong", "moderate", "weak", "very_weak"]
275
+ "enum": [
276
+ "strong",
277
+ "moderate",
278
+ "weak",
279
+ "very_weak"
280
+ ]
67
281
  },
68
282
  "applicability": {
69
283
  "type": "object",
70
284
  "additionalProperties": true,
71
285
  "description": "Match against the target context: learner match, subject match, tool match, usage match, teacher support match."
72
286
  },
73
- "confidence": { "type": ["number", "null"], "minimum": 0, "maximum": 1 },
74
- "status": { "type": "string", "enum": ["SUPPORTED", "UNSUPPORTED", "DOWNGRADE_CONFIDENCE", "CONTRADICT"], "default": "SUPPORTED" },
287
+ "confidence": {
288
+ "type": [
289
+ "number",
290
+ "null"
291
+ ],
292
+ "minimum": 0,
293
+ "maximum": 1
294
+ },
295
+ "status": {
296
+ "type": "string",
297
+ "enum": [
298
+ "SUPPORTED",
299
+ "UNSUPPORTED",
300
+ "DOWNGRADE_CONFIDENCE",
301
+ "CONTRADICT"
302
+ ],
303
+ "default": "SUPPORTED"
304
+ },
75
305
  "extensions": {
76
306
  "type": "object",
77
307
  "description": "结构化扩展字段的统一容器(P1-01)。未列入本 schema 的字段必须放在这里,禁止在顶层新增属性。",
78
308
  "additionalProperties": true
309
+ },
310
+ "effect_size": {
311
+ "type": [
312
+ "number",
313
+ "object",
314
+ "null"
315
+ ],
316
+ "description": "Standardized effect size for this finding: a bare number for g, or an object such as {metric, value, ci_lower, ci_upper, p_value}. Read by the forest-plot and cascade extractors; rendering is suppressed when absent rather than approximated."
317
+ },
318
+ "effect_estimate": {
319
+ "type": [
320
+ "number",
321
+ "object",
322
+ "null"
323
+ ],
324
+ "description": "Raw effect estimate carried through V1 -> V2 migration so magnitudes survive the hop."
325
+ },
326
+ "wwc_rating": {
327
+ "type": [
328
+ "string",
329
+ "null"
330
+ ],
331
+ "enum": [
332
+ "meets_without_reservations",
333
+ "meets_with_reservations",
334
+ "does_not_meet",
335
+ null
336
+ ],
337
+ "description": "WWC 5.0 study rating, when the auditor assigned one."
338
+ },
339
+ "outcome_dimension": {
340
+ "type": [
341
+ "string",
342
+ "null"
343
+ ],
344
+ "description": "Coarse outcome dimension used for grouping (falls back to outcome_type)."
345
+ },
346
+ "study_label": {
347
+ "type": [
348
+ "string",
349
+ "null"
350
+ ],
351
+ "description": "Human-readable study label used on chart axes."
79
352
  }
80
353
  }
81
354
  }
@@ -33,7 +33,8 @@
33
33
  "markdown_new",
34
34
  "defuddle",
35
35
  "raw_html",
36
- "pdf_parser"
36
+ "pdf_parser",
37
+ "sciverse_content"
37
38
  ]
38
39
  },
39
40
  "fetch_status": {
@@ -232,9 +232,9 @@
232
232
  "required": [
233
233
  "evidence_id",
234
234
  "source_id",
235
- "outcome_type",
236
- "direction"
237
- ]
235
+ "outcome_type"
236
+ ],
237
+ "description": "Evidence row as embedded in a rendered result. `direction` is NOT required: it is deprecated in schemas/evidence.schema.json, and consumers must read relation_to_claim (claim support) and effect_direction (observed effect) instead."
238
238
  },
239
239
  "description": "Evidence rows (projection of evidence.schema.json; stage-level gate enforces the full contract)."
240
240
  },