eduevidence 5.2.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 (312) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +506 -0
  3. package/README.zh-CN.md +434 -0
  4. package/SKILL.md +195 -0
  5. package/bin/eduevidence.js +127 -0
  6. package/domains/education/manifest.json +183 -0
  7. package/domains/education/outcome_taxonomy.json +127 -0
  8. package/domains/manifest.json +26 -0
  9. package/domains/policy/frame.schema.json +234 -0
  10. package/domains/policy/manifest.json +10 -0
  11. package/domains/policy/methodology_checklist.json +109 -0
  12. package/domains/policy/outcome_taxonomy.json +53 -0
  13. package/domains/policy/references/causal-identification.md +45 -0
  14. package/domains/policy/references/cost-evidence.md +44 -0
  15. package/domains/policy/references/equity.md +42 -0
  16. package/domains/policy/references/evidence-hierarchy.md +41 -0
  17. package/domains/policy/references/implementation-evidence.md +47 -0
  18. package/eduevidence_cli.py +26 -0
  19. package/engine/__init__.py +11 -0
  20. package/engine/__pycache__/__init__.cpython-312.pyc +0 -0
  21. package/engine/__pycache__/analysis.cpython-312.pyc +0 -0
  22. package/engine/__pycache__/bias.cpython-312.pyc +0 -0
  23. package/engine/__pycache__/briefs.cpython-312.pyc +0 -0
  24. package/engine/__pycache__/capabilities.cpython-312.pyc +0 -0
  25. package/engine/__pycache__/citation_check.cpython-312.pyc +0 -0
  26. package/engine/__pycache__/contracts.cpython-312.pyc +0 -0
  27. package/engine/__pycache__/datasets.cpython-312.pyc +0 -0
  28. package/engine/__pycache__/events.cpython-312.pyc +0 -0
  29. package/engine/__pycache__/evidence_graph.cpython-312.pyc +0 -0
  30. package/engine/__pycache__/evidence_review.cpython-312.pyc +0 -0
  31. package/engine/__pycache__/evidencecore.cpython-312.pyc +0 -0
  32. package/engine/__pycache__/gap_lens.cpython-312.pyc +0 -0
  33. package/engine/__pycache__/gaps.cpython-312.pyc +0 -0
  34. package/engine/__pycache__/graph_store.cpython-312.pyc +0 -0
  35. package/engine/__pycache__/graph_validate.cpython-312.pyc +0 -0
  36. package/engine/__pycache__/ids.cpython-312.pyc +0 -0
  37. package/engine/__pycache__/library.cpython-312.pyc +0 -0
  38. package/engine/__pycache__/library_builtin.cpython-312.pyc +0 -0
  39. package/engine/__pycache__/living.cpython-312.pyc +0 -0
  40. package/engine/__pycache__/log.cpython-312.pyc +0 -0
  41. package/engine/__pycache__/meta_analysis.cpython-312.pyc +0 -0
  42. package/engine/__pycache__/meta_synthesis.cpython-312.pyc +0 -0
  43. package/engine/__pycache__/migration.cpython-312.pyc +0 -0
  44. package/engine/__pycache__/mode_router.cpython-312.pyc +0 -0
  45. package/engine/__pycache__/paths.cpython-312.pyc +0 -0
  46. package/engine/__pycache__/pilot.cpython-312.pyc +0 -0
  47. package/engine/__pycache__/planner.cpython-312.pyc +0 -0
  48. package/engine/__pycache__/project.cpython-312.pyc +0 -0
  49. package/engine/__pycache__/projections.cpython-312.pyc +0 -0
  50. package/engine/__pycache__/robustness.cpython-312.pyc +0 -0
  51. package/engine/__pycache__/run.cpython-312.pyc +0 -0
  52. package/engine/__pycache__/semantics.cpython-312.pyc +0 -0
  53. package/engine/__pycache__/study_design.cpython-312.pyc +0 -0
  54. package/engine/__pycache__/synthesis.cpython-312.pyc +0 -0
  55. package/engine/__pycache__/tribunal.cpython-312.pyc +0 -0
  56. package/engine/__pycache__/update.cpython-312.pyc +0 -0
  57. package/engine/__pycache__/versions.cpython-312.pyc +0 -0
  58. package/engine/analysis.py +308 -0
  59. package/engine/bias.py +178 -0
  60. package/engine/briefs.py +106 -0
  61. package/engine/capabilities.py +99 -0
  62. package/engine/citation_check.py +192 -0
  63. package/engine/contracts.py +117 -0
  64. package/engine/datasets.py +165 -0
  65. package/engine/events.py +67 -0
  66. package/engine/evidence_graph.py +571 -0
  67. package/engine/evidence_review.py +88 -0
  68. package/engine/evidencecore.py +182 -0
  69. package/engine/gap_lens.py +132 -0
  70. package/engine/gaps.py +169 -0
  71. package/engine/graph_store.py +335 -0
  72. package/engine/graph_validate.py +87 -0
  73. package/engine/ids.py +77 -0
  74. package/engine/library.py +268 -0
  75. package/engine/library_builtin.py +301 -0
  76. package/engine/living.py +671 -0
  77. package/engine/log.py +39 -0
  78. package/engine/meta_analysis.py +333 -0
  79. package/engine/meta_synthesis.py +111 -0
  80. package/engine/migration.py +397 -0
  81. package/engine/mode_router.py +72 -0
  82. package/engine/paths.py +15 -0
  83. package/engine/pilot.py +368 -0
  84. package/engine/planner.py +126 -0
  85. package/engine/project.py +118 -0
  86. package/engine/projections.py +240 -0
  87. package/engine/robustness.py +109 -0
  88. package/engine/run.py +85 -0
  89. package/engine/semantics.py +135 -0
  90. package/engine/study_design.py +87 -0
  91. package/engine/synthesis.py +187 -0
  92. package/engine/tribunal.py +408 -0
  93. package/engine/update.py +113 -0
  94. package/engine/versions.py +12 -0
  95. package/install.sh +510 -0
  96. package/integrations/__init__.py +1 -0
  97. package/integrations/__pycache__/__init__.cpython-312.pyc +0 -0
  98. package/integrations/__pycache__/agent_mcp.cpython-312.pyc +0 -0
  99. package/integrations/__pycache__/smart_web_fetch.cpython-312.pyc +0 -0
  100. package/integrations/agent_mcp.py +856 -0
  101. package/integrations/smart_web_fetch.py +59 -0
  102. package/package.json +50 -0
  103. package/pyproject.toml +55 -0
  104. package/references/applicability-policy.md +88 -0
  105. package/references/education-framing.md +132 -0
  106. package/references/effect_size_formulas.md +35 -0
  107. package/references/evaluation-design.md +111 -0
  108. package/references/evidence-quality.md +79 -0
  109. package/references/grade_framework.md +29 -0
  110. package/references/intervention-design.md +98 -0
  111. package/references/methodology-audit.md +103 -0
  112. package/references/outcome-taxonomy.md +106 -0
  113. package/references/retrieval-protocol.md +142 -0
  114. package/references/skeptic-protocol.md +93 -0
  115. package/references/social_science_pitfalls.md +48 -0
  116. package/references/source-validity.md +140 -0
  117. package/references/tribunal-policy.md +112 -0
  118. package/references/wwc_standards.md +29 -0
  119. package/retrieval/__init__.py +1 -0
  120. package/retrieval/__pycache__/__init__.cpython-312.pyc +0 -0
  121. package/retrieval/__pycache__/corpus_store.cpython-312.pyc +0 -0
  122. package/retrieval/__pycache__/dedupe.cpython-312.pyc +0 -0
  123. package/retrieval/__pycache__/failures.cpython-312.pyc +0 -0
  124. package/retrieval/__pycache__/fetch.cpython-312.pyc +0 -0
  125. package/retrieval/__pycache__/search.cpython-312.pyc +0 -0
  126. package/retrieval/__pycache__/source.cpython-312.pyc +0 -0
  127. package/retrieval/__pycache__/validate.cpython-312.pyc +0 -0
  128. package/retrieval/corpus_store.py +181 -0
  129. package/retrieval/dedupe.py +127 -0
  130. package/retrieval/failures.py +90 -0
  131. package/retrieval/fetch.py +435 -0
  132. package/retrieval/search.py +493 -0
  133. package/retrieval/source.py +160 -0
  134. package/retrieval/validate.py +257 -0
  135. package/schemas/agent-mcp-approval.schema.json +57 -0
  136. package/schemas/chart-spec.schema.json +88 -0
  137. package/schemas/cross-model-review.schema.json +28 -0
  138. package/schemas/education-frame.schema.json +106 -0
  139. package/schemas/evaluation.schema.json +35 -0
  140. package/schemas/evidence.schema.json +81 -0
  141. package/schemas/fetch-result.schema.json +119 -0
  142. package/schemas/intervention.schema.json +46 -0
  143. package/schemas/methodology.schema.json +102 -0
  144. package/schemas/report-result.schema.json +381 -0
  145. package/schemas/report-spec.schema.json +130 -0
  146. package/schemas/source.schema.json +311 -0
  147. package/schemas/v2/analysis-plan.schema.json +28 -0
  148. package/schemas/v2/analysis-run.schema.json +33 -0
  149. package/schemas/v2/claim.schema.json +26 -0
  150. package/schemas/v2/dataset-asset.schema.json +40 -0
  151. package/schemas/v2/decision-snapshot.schema.json +53 -0
  152. package/schemas/v2/evidence-link.schema.json +38 -0
  153. package/schemas/v2/finding.schema.json +47 -0
  154. package/schemas/v2/graph-revision.schema.json +30 -0
  155. package/schemas/v2/knowledge-gap.schema.json +40 -0
  156. package/schemas/v2/methodology-audit.schema.json +30 -0
  157. package/schemas/v2/outcome.schema.json +18 -0
  158. package/schemas/v2/project.schema.json +31 -0
  159. package/schemas/v2/research-intent.schema.json +24 -0
  160. package/schemas/v2/run.schema.json +43 -0
  161. package/schemas/v2/source.schema.json +24 -0
  162. package/schemas/v2/study-design.schema.json +67 -0
  163. package/schemas/v2/study.schema.json +37 -0
  164. package/schemas/v3/pilot-outcome.schema.json +132 -0
  165. package/schemas/v3/run-manifest.schema.json +193 -0
  166. package/schemas/v3/synthesis.schema.json +86 -0
  167. package/schemas/v4/drift-report.schema.json +66 -0
  168. package/schemas/v4/evidence-library.schema.json +42 -0
  169. package/schemas/v4/living-subscription.schema.json +55 -0
  170. package/schemas/v4/meta-analysis.schema.json +152 -0
  171. package/schemas/verdict.schema.json +56 -0
  172. package/scripts/__init__.py +0 -0
  173. package/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
  174. package/scripts/__pycache__/benchmark.cpython-312.pyc +0 -0
  175. package/scripts/__pycache__/benchmark_evaluator.cpython-312.pyc +0 -0
  176. package/scripts/__pycache__/benchmark_judge.cpython-312.pyc +0 -0
  177. package/scripts/__pycache__/benchmark_routing.cpython-312.pyc +0 -0
  178. package/scripts/__pycache__/benchmark_v2.cpython-312.pyc +0 -0
  179. package/scripts/__pycache__/benchmark_v3.cpython-312.pyc +0 -0
  180. package/scripts/__pycache__/build_result.cpython-312.pyc +0 -0
  181. package/scripts/__pycache__/claim_audit.cpython-312.pyc +0 -0
  182. package/scripts/__pycache__/complexity_gate.cpython-312.pyc +0 -0
  183. package/scripts/__pycache__/compute_confidence.cpython-312.pyc +0 -0
  184. package/scripts/__pycache__/dashboard_server.cpython-312.pyc +0 -0
  185. package/scripts/__pycache__/did_regression.cpython-312.pyc +0 -0
  186. package/scripts/__pycache__/effect_calculator.cpython-312.pyc +0 -0
  187. package/scripts/__pycache__/evidence_matrix.cpython-312.pyc +0 -0
  188. package/scripts/__pycache__/evidence_score.cpython-312.pyc +0 -0
  189. package/scripts/__pycache__/evidence_semantics.cpython-312.pyc +0 -0
  190. package/scripts/__pycache__/fetch_benchmark.cpython-312.pyc +0 -0
  191. package/scripts/__pycache__/lint_report_layout.cpython-312.pyc +0 -0
  192. package/scripts/__pycache__/orchestrator.cpython-312.pyc +0 -0
  193. package/scripts/__pycache__/pre_verdict_gate.cpython-312.pyc +0 -0
  194. package/scripts/__pycache__/recompute_demo_quality.cpython-312.pyc +0 -0
  195. package/scripts/__pycache__/render_report.cpython-312.pyc +0 -0
  196. package/scripts/__pycache__/render_report_html.cpython-312.pyc +0 -0
  197. package/scripts/__pycache__/run_workspace.cpython-312.pyc +0 -0
  198. package/scripts/__pycache__/skill_lint.cpython-312.pyc +0 -0
  199. package/scripts/__pycache__/startup_probe.cpython-312.pyc +0 -0
  200. package/scripts/__pycache__/sync_killer_demo_report.cpython-312.pyc +0 -0
  201. package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.0.2.pyc +0 -0
  202. package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.1.1.pyc +0 -0
  203. package/scripts/__pycache__/validate_schema.cpython-312.pyc +0 -0
  204. package/scripts/audit_dois.py +292 -0
  205. package/scripts/bake_pack.sh +37 -0
  206. package/scripts/benchmark.py +183 -0
  207. package/scripts/benchmark_evaluator.py +371 -0
  208. package/scripts/benchmark_judge.py +535 -0
  209. package/scripts/benchmark_routing.py +120 -0
  210. package/scripts/benchmark_v2.py +304 -0
  211. package/scripts/benchmark_v3.py +552 -0
  212. package/scripts/build_esl_artifacts.py +1921 -0
  213. package/scripts/build_evidence_library.py +307 -0
  214. package/scripts/build_killer_demo.py +295 -0
  215. package/scripts/build_result.py +311 -0
  216. package/scripts/check_version_consistency.py +96 -0
  217. package/scripts/citation_check.py +123 -0
  218. package/scripts/claim_audit.py +157 -0
  219. package/scripts/complexity_gate.py +180 -0
  220. package/scripts/compute_confidence.py +176 -0
  221. package/scripts/dashboard_server.py +536 -0
  222. package/scripts/did_regression.py +315 -0
  223. package/scripts/effect_calculator.py +99 -0
  224. package/scripts/enrich_projects_human_and_lieflat.py +315 -0
  225. package/scripts/evidence_matrix.py +129 -0
  226. package/scripts/evidence_score.py +234 -0
  227. package/scripts/evidence_semantics.py +87 -0
  228. package/scripts/fetch_benchmark.py +177 -0
  229. package/scripts/generate_metrics.py +99 -0
  230. package/scripts/generate_new_projects.py +686 -0
  231. package/scripts/generate_promo.py +192 -0
  232. package/scripts/lint_report_layout.py +182 -0
  233. package/scripts/orchestrator.py +1456 -0
  234. package/scripts/pre_verdict_gate.py +513 -0
  235. package/scripts/quickstart.py +121 -0
  236. package/scripts/rebake_all_5themes.py +88 -0
  237. package/scripts/recompute_demo_quality.py +205 -0
  238. package/scripts/render_report.py +270 -0
  239. package/scripts/render_report_html.py +356 -0
  240. package/scripts/retraction_watch.py +110 -0
  241. package/scripts/run_workspace.py +337 -0
  242. package/scripts/serve_web.py +54 -0
  243. package/scripts/skill_lint.py +150 -0
  244. package/scripts/startup_probe.py +265 -0
  245. package/scripts/sync_killer_demo_report.py +270 -0
  246. package/scripts/test_adversarial_empirical.py +541 -0
  247. package/scripts/validate_schema.py +256 -0
  248. package/skill/agents/education-planner.md +80 -0
  249. package/skill/agents/evaluation-designer.md +74 -0
  250. package/skill/agents/evidence-analyst.md +106 -0
  251. package/skill/agents/evidence-judge.md +111 -0
  252. package/skill/agents/evidence-retriever.md +80 -0
  253. package/skill/agents/intervention-designer.md +82 -0
  254. package/skill/agents/method-reviewer.md +104 -0
  255. package/skill/agents/skeptic.md +89 -0
  256. package/skill/sub-skills/aihot-trend-analysis/SKILL.md +31 -0
  257. package/skill/sub-skills/contradiction-analysis/SKILL.md +17 -0
  258. package/skill/sub-skills/data-analysis/SKILL.md +23 -0
  259. package/skill/sub-skills/ethics-review/SKILL.md +25 -0
  260. package/skill/sub-skills/evidence-extraction/SKILL.md +19 -0
  261. package/skill/sub-skills/evidence-review/SKILL.md +18 -0
  262. package/skill/sub-skills/gap-analysis/SKILL.md +25 -0
  263. package/skill/sub-skills/literature-review/SKILL.md +21 -0
  264. package/skill/sub-skills/methodology-audit/SKILL.md +20 -0
  265. package/skill/sub-skills/report-generation/SKILL.md +51 -0
  266. package/skill/sub-skills/research-planning/SKILL.md +21 -0
  267. package/skill/sub-skills/study-design/SKILL.md +16 -0
  268. package/skill/task-briefs/adjudicate.md +17 -0
  269. package/skill/task-briefs/audit.md +15 -0
  270. package/skill/task-briefs/challenge.md +15 -0
  271. package/skill/task-briefs/evaluate.md +13 -0
  272. package/skill/task-briefs/extract.md +16 -0
  273. package/skill/task-briefs/frame.md +17 -0
  274. package/skill/task-briefs/intervene.md +14 -0
  275. package/skill/task-briefs/present.md +16 -0
  276. package/skill/task-briefs/retrieve.md +15 -0
  277. package/visualization/eduevidence-report/assets/base.css +337 -0
  278. package/visualization/eduevidence-report/motion/motion.css +157 -0
  279. package/visualization/eduevidence-report/motion/motion.js +107 -0
  280. package/visualization/eduevidence-report/references/bilingual-style.md +7 -0
  281. package/visualization/eduevidence-report/references/component-catalog.md +145 -0
  282. package/visualization/eduevidence-report/references/evidence-expansion.md +65 -0
  283. package/visualization/eduevidence-report/references/full-report-outline.md +86 -0
  284. package/visualization/eduevidence-report/references/layout-constraints.md +63 -0
  285. package/visualization/eduevidence-report/references/lieflat-composition.md +79 -0
  286. package/visualization/eduevidence-report/references/motion-system.md +31 -0
  287. package/visualization/eduevidence-report/schemas/adapter-envelope.schema.json +22 -0
  288. package/visualization/eduevidence-report/schemas/visual-layout.schema.json +87 -0
  289. package/visualization/eduevidence-report/scripts/__pycache__/adapter_contract.cpython-312.pyc +0 -0
  290. package/visualization/eduevidence-report/scripts/__pycache__/build_artifact_manifest.cpython-312.pyc +0 -0
  291. package/visualization/eduevidence-report/scripts/__pycache__/build_charts.cpython-312.pyc +0 -0
  292. package/visualization/eduevidence-report/scripts/__pycache__/build_figures.cpython-312.pyc +0 -0
  293. package/visualization/eduevidence-report/scripts/__pycache__/build_infographics.cpython-312.pyc +0 -0
  294. package/visualization/eduevidence-report/scripts/__pycache__/build_report.cpython-312.pyc +0 -0
  295. package/visualization/eduevidence-report/scripts/__pycache__/charts_data.cpython-312.pyc +0 -0
  296. package/visualization/eduevidence-report/scripts/__pycache__/lieflat_engine.cpython-312.pyc +0 -0
  297. package/visualization/eduevidence-report/scripts/__pycache__/zh_labels.cpython-312.pyc +0 -0
  298. package/visualization/eduevidence-report/scripts/adapter_contract.py +72 -0
  299. package/visualization/eduevidence-report/scripts/build_artifact_manifest.py +70 -0
  300. package/visualization/eduevidence-report/scripts/build_charts.py +283 -0
  301. package/visualization/eduevidence-report/scripts/build_figures.py +515 -0
  302. package/visualization/eduevidence-report/scripts/build_infographics.py +268 -0
  303. package/visualization/eduevidence-report/scripts/build_report.py +3211 -0
  304. package/visualization/eduevidence-report/scripts/charts_data.py +617 -0
  305. package/visualization/eduevidence-report/scripts/check_mobile_layout.js +220 -0
  306. package/visualization/eduevidence-report/scripts/lieflat_engine.py +852 -0
  307. package/visualization/eduevidence-report/scripts/zh_labels.py +245 -0
  308. package/visualization/eduevidence-report/themes/academic.css +94 -0
  309. package/visualization/eduevidence-report/themes/claude.css +96 -0
  310. package/visualization/eduevidence-report/themes/datalab-dark.css +147 -0
  311. package/visualization/eduevidence-report/themes/datalab.css +151 -0
  312. package/visualization/eduevidence-report/themes/presentation.css +140 -0
@@ -0,0 +1,130 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://github.com/37chengshan/eduevidence/schemas/report-spec.schema.json",
4
+ "title": "ReportSpec",
5
+ "description": "report_spec.json — the Visualization Planner output (v5 方案 §9-10, §36). Declares sections and components from the frozen Component Catalog; the deterministic renderer turns it into HTML. No free-form DOM. 扩展字段一律放在各对象 extensions 内。",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "title",
10
+ "theme",
11
+ "sections"
12
+ ],
13
+ "properties": {
14
+ "title": {
15
+ "type": "string"
16
+ },
17
+ "theme": {
18
+ "type": "string",
19
+ "enum": [
20
+ "claude",
21
+ "academic",
22
+ "datalab",
23
+ "datalab-dark",
24
+ "presentation"
25
+ ]
26
+ },
27
+ "mode": {
28
+ "type": "string",
29
+ "enum": [
30
+ "research",
31
+ "demo"
32
+ ],
33
+ "default": "research"
34
+ },
35
+ "generated_at": {
36
+ "type": "string",
37
+ "format": "date-time"
38
+ },
39
+ "sections": {
40
+ "type": "array",
41
+ "items": {
42
+ "type": "object",
43
+ "additionalProperties": false,
44
+ "required": [
45
+ "id",
46
+ "title",
47
+ "component"
48
+ ],
49
+ "properties": {
50
+ "id": {
51
+ "type": "string",
52
+ "examples": [
53
+ "01-executive-decision"
54
+ ]
55
+ },
56
+ "title": {
57
+ "type": "string"
58
+ },
59
+ "component": {
60
+ "type": "string",
61
+ "enum": [
62
+ "ReportShell",
63
+ "Section",
64
+ "DecisionCard",
65
+ "ConfidenceBadge",
66
+ "OutcomeSummary",
67
+ "InteractiveChart",
68
+ "AcademicFigure",
69
+ "InfographicBlock",
70
+ "EvidenceMatrix",
71
+ "EvidenceRow",
72
+ "TribunalView",
73
+ "MethodologyPanel",
74
+ "ConflictCard",
75
+ "ClaimTrace",
76
+ "ApplicabilityCard",
77
+ "InterventionTimeline",
78
+ "EvaluationFlow",
79
+ "BenchmarkPanel",
80
+ "SourceList",
81
+ "ProvenancePanel",
82
+ "Footnote"
83
+ ]
84
+ },
85
+ "data_ref": {
86
+ "type": "string",
87
+ "description": "Pointer into result.json (e.g. 'decision', 'evidence', 'sources')."
88
+ },
89
+ "props": {
90
+ "type": "object",
91
+ "additionalProperties": true,
92
+ "description": "Component props (theme-agnostic)."
93
+ }
94
+ }
95
+ }
96
+ },
97
+ "charts": {
98
+ "type": "array",
99
+ "description": "Chart declarations (see chart-spec.schema.json).",
100
+ "items": {
101
+ "$ref": "chart-spec.schema.json"
102
+ }
103
+ },
104
+ "integrity": {
105
+ "type": "object",
106
+ "additionalProperties": false,
107
+ "description": "Scientific Integrity Gate result (v5 方案 §27).",
108
+ "properties": {
109
+ "status": {
110
+ "type": "string",
111
+ "enum": [
112
+ "VALID",
113
+ "REPORT_INVALID"
114
+ ]
115
+ },
116
+ "checks": {
117
+ "type": "array",
118
+ "items": {
119
+ "type": "string"
120
+ }
121
+ }
122
+ }
123
+ },
124
+ "extensions": {
125
+ "type": "object",
126
+ "description": "结构化扩展字段的统一容器(P1-01)。未列入本 schema 的字段必须放在这里,禁止在顶层新增属性。",
127
+ "additionalProperties": true
128
+ }
129
+ }
130
+ }
@@ -0,0 +1,311 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://github.com/37chengshan/eduevidence/schemas/source.schema.json",
4
+ "title": "SourceObject",
5
+ "description": "Unified source registry entry (总体实施计划 §11 / v3 方案 §14). Evidence Objects reference only source_id. Fetch provider is a reading path, never the citation target. 扩展字段一律放在 extensions 内。",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "source_id",
10
+ "title",
11
+ "canonical_url",
12
+ "authority_level"
13
+ ],
14
+ "properties": {
15
+ "source_id": {
16
+ "type": "string",
17
+ "examples": [
18
+ "S-2023-kazemitabaar"
19
+ ]
20
+ },
21
+ "title": {
22
+ "type": "string"
23
+ },
24
+ "authors": {
25
+ "type": "array",
26
+ "items": {
27
+ "type": "string"
28
+ }
29
+ },
30
+ "year": {
31
+ "type": [
32
+ "integer",
33
+ "null"
34
+ ]
35
+ },
36
+ "doi": {
37
+ "type": "string",
38
+ "examples": [
39
+ "10.1145/3544548.3580919"
40
+ ]
41
+ },
42
+ "canonical_url": {
43
+ "type": "string",
44
+ "format": "uri"
45
+ },
46
+ "source_location": {
47
+ "type": "string",
48
+ "format": "uri",
49
+ "description": "Legacy alias of the canonical citation pointer (kept for backward compatibility)."
50
+ },
51
+ "source_type": {
52
+ "type": "string",
53
+ "enum": [
54
+ "paper",
55
+ "journal_article",
56
+ "conference_paper",
57
+ "report",
58
+ "institution_page",
59
+ "dataset",
60
+ "thesis",
61
+ "news",
62
+ "web_page",
63
+ "pdf",
64
+ "other"
65
+ ]
66
+ },
67
+ "authority_level": {
68
+ "type": "string",
69
+ "enum": [
70
+ "tier1_paper_doi",
71
+ "tier2_academic_database",
72
+ "tier3_professional_institution",
73
+ "tier4_news_secondary",
74
+ "tier5_general_web"
75
+ ],
76
+ "description": "学术来源优先级(v3 方案 §9):Tier 1-5。fetch provider 不能提升此值。"
77
+ },
78
+ "discovered_by": {
79
+ "type": "string",
80
+ "examples": [
81
+ "scholar_search",
82
+ "web_search"
83
+ ]
84
+ },
85
+ "discovery_provider": {
86
+ "type": "string",
87
+ "examples": [
88
+ "SCP",
89
+ "Scholar-KG",
90
+ "bing"
91
+ ]
92
+ },
93
+ "source_locator": {
94
+ "type": "object",
95
+ "description": "精确定位引用内容在源中的位置(P1-03)。type/page/section/paragraph/quote_hash 均可选,但至少应能据此复核原文。",
96
+ "additionalProperties": false,
97
+ "properties": {
98
+ "type": {
99
+ "type": "string",
100
+ "enum": [
101
+ "page",
102
+ "section",
103
+ "paragraph",
104
+ "quote",
105
+ "supplement",
106
+ "other"
107
+ ]
108
+ },
109
+ "page": {
110
+ "type": [
111
+ "string",
112
+ "integer",
113
+ "null"
114
+ ]
115
+ },
116
+ "section": {
117
+ "type": "string"
118
+ },
119
+ "paragraph": {
120
+ "type": [
121
+ "string",
122
+ "integer",
123
+ "null"
124
+ ]
125
+ },
126
+ "quote_hash": {
127
+ "type": "string",
128
+ "description": "SHA-256 或等价指纹,对引用的原文片段计算。"
129
+ }
130
+ }
131
+ },
132
+ "fetch": {
133
+ "$ref": "#/definitions/fetchProvenance"
134
+ },
135
+ "content_hash": {
136
+ "type": "string"
137
+ },
138
+ "dedupe_keys": {
139
+ "type": "object",
140
+ "additionalProperties": false,
141
+ "description": "去重键(v3 方案 §13):canonical_url / doi / title fingerprint / content_hash",
142
+ "properties": {
143
+ "canonical_url": {
144
+ "type": "string"
145
+ },
146
+ "doi": {
147
+ "type": "string"
148
+ },
149
+ "title_fingerprint": {
150
+ "type": "string"
151
+ },
152
+ "content_hash": {
153
+ "type": "string"
154
+ }
155
+ }
156
+ },
157
+ "status": {
158
+ "type": "string",
159
+ "enum": [
160
+ "DISCOVERED",
161
+ "FETCHED",
162
+ "VALID",
163
+ "PARTIAL",
164
+ "FAILED",
165
+ "DUPLICATE",
166
+ "INVALID"
167
+ ]
168
+ },
169
+ "extensions": {
170
+ "type": "object",
171
+ "description": "结构化扩展字段的统一容器(P1-01)。未列入本 schema 的字段必须放在这里,禁止在顶层新增属性。",
172
+ "additionalProperties": true
173
+ },
174
+ "doi_verified": {
175
+ "type": "boolean",
176
+ "description": "True when the DOI resolved against Crossref/DataCite and the registered title matches (engine.citation_check)."
177
+ },
178
+ "retracted": {
179
+ "type": "boolean",
180
+ "description": "True when the registry marks this work as retracted."
181
+ }
182
+ },
183
+ "definitions": {
184
+ "fetchProvenance": {
185
+ "type": "object",
186
+ "additionalProperties": false,
187
+ "description": "Fetch Provenance(v3 方案 §6,P1-06):清洗服务只是读取路径,真正的证据来源仍是原始 URL/论文。fetch_status 必填:只有 FETCH_VALID(或规则确认的 FETCH_PARTIAL)可进入证据提取。",
188
+ "required": [
189
+ "fetch_status"
190
+ ],
191
+ "properties": {
192
+ "original_url": {
193
+ "type": "string",
194
+ "format": "uri"
195
+ },
196
+ "resolved_url": {
197
+ "type": "string",
198
+ "format": "uri"
199
+ },
200
+ "fetch_method": {
201
+ "type": "string",
202
+ "enum": [
203
+ "native",
204
+ "smart_web_fetch"
205
+ ]
206
+ },
207
+ "fetch_provider": {
208
+ "type": "string",
209
+ "enum": [
210
+ "builtin",
211
+ "jina_reader",
212
+ "markdown_new",
213
+ "defuddle",
214
+ "raw_html",
215
+ "pdf_parser"
216
+ ]
217
+ },
218
+ "fetch_status": {
219
+ "type": "string",
220
+ "enum": [
221
+ "FETCH_VALID",
222
+ "FETCH_PARTIAL",
223
+ "FETCH_FAILED"
224
+ ]
225
+ },
226
+ "fetched_at": {
227
+ "type": "string",
228
+ "format": "date-time"
229
+ },
230
+ "content_hash": {
231
+ "type": "string"
232
+ },
233
+ "content_length": {
234
+ "type": "integer",
235
+ "minimum": 0
236
+ },
237
+ "raw_size": {
238
+ "type": "integer",
239
+ "minimum": 0
240
+ },
241
+ "clean_size": {
242
+ "type": "integer",
243
+ "minimum": 0
244
+ },
245
+ "compression_ratio": {
246
+ "type": "number",
247
+ "minimum": 0,
248
+ "maximum": 1
249
+ },
250
+ "fallback_used": {
251
+ "type": "boolean",
252
+ "default": false
253
+ },
254
+ "fallback_chain": {
255
+ "type": "array",
256
+ "items": {
257
+ "type": "string"
258
+ },
259
+ "description": "实际尝试过的 provider 降级链(按顺序)。"
260
+ },
261
+ "content": {
262
+ "type": "string",
263
+ "description": "清洗后的正文(Markdown/文本),仅 FETCH_VALID/PARTIAL 时携带。"
264
+ },
265
+ "status_code": {
266
+ "type": "integer",
267
+ "description": "最终响应 HTTP 状态码(含 redirect 后)。"
268
+ },
269
+ "content_type": {
270
+ "type": "string",
271
+ "description": "最终响应的 Content-Type,如 text/html; charset=utf-8、application/pdf。"
272
+ },
273
+ "charset": {
274
+ "type": "string"
275
+ },
276
+ "response_headers": {
277
+ "type": "object",
278
+ "additionalProperties": {
279
+ "type": "string"
280
+ },
281
+ "description": "最终响应头(供审计,不参与证据判断)。"
282
+ },
283
+ "validation": {
284
+ "type": "object",
285
+ "additionalProperties": true,
286
+ "description": "Fetch Validation Gate 结果(validate_fetch_result 输出)。",
287
+ "properties": {
288
+ "passed": {
289
+ "type": "boolean"
290
+ },
291
+ "checks": {
292
+ "type": "object",
293
+ "additionalProperties": {
294
+ "type": [
295
+ "boolean",
296
+ "null"
297
+ ]
298
+ }
299
+ },
300
+ "issues": {
301
+ "type": "array",
302
+ "items": {
303
+ "type": "string"
304
+ }
305
+ }
306
+ }
307
+ }
308
+ }
309
+ }
310
+ }
311
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://eduevidence.dev/schemas/v2/analysis-plan.schema.json",
4
+ "title": "AnalysisPlan",
5
+ "description": "Separately versioned analysis plan owning design_id (the StudyDesign does NOT reference the plan, avoiding a circular Design↔AnalysisPlan reference).",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "analysis_plan_id", "design_id", "dataset_ids", "primary_analysis",
10
+ "secondary_analyses", "assumption_checks", "preregistered",
11
+ "created_at", "extensions"
12
+ ],
13
+ "properties": {
14
+ "analysis_plan_id": { "type": "string", "pattern": "^APL-" },
15
+ "design_id": { "type": "string", "pattern": "^DSN-" },
16
+ "dataset_ids": {
17
+ "type": "array",
18
+ "items": { "type": "string", "pattern": "^DAT-" },
19
+ "uniqueItems": true
20
+ },
21
+ "primary_analysis": { "type": "string", "minLength": 1 },
22
+ "secondary_analyses": { "type": "array", "items": { "type": "string" } },
23
+ "assumption_checks": { "type": "array", "items": { "type": "string" } },
24
+ "preregistered": { "type": "boolean" },
25
+ "created_at": { "type": "string", "format": "date-time" },
26
+ "extensions": { "type": "object" }
27
+ }
28
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://eduevidence.dev/schemas/v2/analysis-run.schema.json",
4
+ "title": "AnalysisRun",
5
+ "description": "One auditable analysis execution. Advanced results enter only with explicit provider/software/parameter provenance; Native Core never fabricates p-values or effect estimates it cannot compute.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "analysis_run_id", "analysis_plan_id", "dataset_ids", "status",
10
+ "outputs", "assumption_checks", "created_at", "extensions"
11
+ ],
12
+ "properties": {
13
+ "analysis_run_id": { "type": "string", "pattern": "^ANL-" },
14
+ "analysis_plan_id": { "type": "string", "pattern": "^APL-" },
15
+ "dataset_ids": {
16
+ "type": "array",
17
+ "items": { "type": "string", "pattern": "^DAT-" },
18
+ "uniqueItems": true
19
+ },
20
+ "status": { "type": "string", "enum": ["completed", "validated", "failed", "capability_unavailable"] },
21
+ "outputs": { "type": "object" },
22
+ "assumption_checks": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "object",
26
+ "additionalProperties": true,
27
+ "required": ["check", "result"]
28
+ }
29
+ },
30
+ "created_at": { "type": "string", "format": "date-time" },
31
+ "extensions": { "type": "object" }
32
+ }
33
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://eduevidence.dev/schemas/v2/claim.schema.json",
4
+ "title": "Claim",
5
+ "description": "A project-local interpretive statement. Claims keep stable Project-local IDs across edits; supersession is recorded via status, never silent re-identification.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "claim_id", "text", "claim_type", "primary_outcome_ids", "scope",
10
+ "created_in_revision", "status", "extensions"
11
+ ],
12
+ "properties": {
13
+ "claim_id": { "type": "string", "pattern": "^(CLM-|C-)" },
14
+ "text": { "type": "string", "minLength": 1 },
15
+ "claim_type": { "type": "string", "minLength": 1 },
16
+ "primary_outcome_ids": {
17
+ "type": "array",
18
+ "items": { "type": "string", "pattern": "^OUT-" },
19
+ "uniqueItems": true
20
+ },
21
+ "scope": { "type": "string", "minLength": 1 },
22
+ "created_in_revision": { "type": "integer", "minimum": 1 },
23
+ "status": { "type": "string", "enum": ["active", "superseded", "retired"] },
24
+ "extensions": { "type": "object" }
25
+ }
26
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://eduevidence.dev/schemas/v2/dataset-asset.schema.json",
4
+ "title": "DatasetAsset",
5
+ "description": "Immutable project dataset asset. Raw bytes are copied once into datasets/raw/ and hashed; raw user data is never inserted into the Shared Research Library. Project datasets are Project-private by default.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "dataset_id", "project_id", "design_id", "source_type",
10
+ "path", "content_hash", "schema_summary", "row_count", "column_count",
11
+ "variable_dictionary", "privacy_classification", "consent_metadata",
12
+ "deidentification_status", "created_at", "extensions"
13
+ ],
14
+ "properties": {
15
+ "dataset_id": { "type": "string", "pattern": "^DAT-" },
16
+ "project_id": { "type": "string", "pattern": "^PRJ-" },
17
+ "design_id": { "type": "string", "pattern": "^DSN-" },
18
+ "source_type": { "type": "string", "minLength": 1 },
19
+ "path": { "type": "string", "minLength": 1 },
20
+ "content_hash": { "type": "string", "minLength": 1 },
21
+ "schema_summary": { "type": "object" },
22
+ "row_count": { "type": ["integer", "null"], "minimum": 0 },
23
+ "column_count": { "type": ["integer", "null"], "minimum": 0 },
24
+ "variable_dictionary": {
25
+ "type": ["object", "null"],
26
+ "additionalProperties": { "type": "string" }
27
+ },
28
+ "privacy_classification": {
29
+ "type": "string",
30
+ "enum": ["public", "internal", "confidential", "restricted"]
31
+ },
32
+ "consent_metadata": { "type": ["object", "null"] },
33
+ "deidentification_status": {
34
+ "type": "string",
35
+ "enum": ["not_done", "in_progress", "done", "not_required"]
36
+ },
37
+ "created_at": { "type": "string", "format": "date-time" },
38
+ "extensions": { "type": "object" }
39
+ }
40
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://eduevidence.dev/schemas/v2/decision-snapshot.schema.json",
4
+ "title": "DecisionSnapshot",
5
+ "description": "A revision-bound adjudication. Snapshots are immutable: changing the graph later never mutates an old snapshot file.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "decision_snapshot_id", "decision", "confidence_label",
10
+ "confidence_score_internal", "claim_assessments", "key_evidence_links",
11
+ "key_risks", "applicability_boundary", "missing_evidence",
12
+ "graph_revision", "policy_versions", "created_at", "extensions"
13
+ ],
14
+ "properties": {
15
+ "decision_snapshot_id": { "type": "string", "pattern": "^DEC-" },
16
+ "decision": {
17
+ "type": "string",
18
+ "enum": ["ADOPT", "PILOT", "REJECT", "INSUFFICIENT_EVIDENCE"]
19
+ },
20
+ "confidence_label": {
21
+ "type": "string",
22
+ "enum": ["High", "Moderate", "Low", "Insufficient"]
23
+ },
24
+ "confidence_score_internal": { "type": "number", "minimum": 0, "maximum": 1 },
25
+ "claim_assessments": {
26
+ "type": "object",
27
+ "additionalProperties": {
28
+ "type": "object",
29
+ "additionalProperties": true
30
+ }
31
+ },
32
+ "key_evidence_links": {
33
+ "type": "array",
34
+ "items": { "type": "string", "minLength": 1 }
35
+ },
36
+ "key_risks": {
37
+ "type": "array",
38
+ "items": { "type": "string" }
39
+ },
40
+ "applicability_boundary": { "type": "string", "minLength": 1 },
41
+ "missing_evidence": {
42
+ "type": "array",
43
+ "items": { "type": "string" }
44
+ },
45
+ "graph_revision": { "type": "integer", "minimum": 1 },
46
+ "policy_versions": {
47
+ "type": "object",
48
+ "additionalProperties": { "type": "string" }
49
+ },
50
+ "created_at": { "type": "string", "format": "date-time" },
51
+ "extensions": { "type": "object" }
52
+ }
53
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://eduevidence.dev/schemas/v2/evidence-link.schema.json",
4
+ "title": "EvidenceLink",
5
+ "description": "The contextual interpretation connecting a Finding to a Claim. relation_to_claim (does this result support the Claim?) and decision_implication (what does it mean for the current decision?) are strictly separate semantics.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "evidence_link_id", "finding_id", "claim_id", "relation_to_claim",
10
+ "decision_implication", "directness", "applicability",
11
+ "reasoning_note", "created_in_revision", "extensions"
12
+ ],
13
+ "properties": {
14
+ "evidence_link_id": { "type": "string", "pattern": "^LNK-" },
15
+ "finding_id": { "type": "string", "pattern": "^FND-" },
16
+ "claim_id": { "type": "string", "pattern": "^(CLM-|C-)" },
17
+ "relation_to_claim": { "type": "string", "enum": ["support", "contradict", "neutral"] },
18
+ "decision_implication": {
19
+ "type": "string",
20
+ "enum": ["support_adoption", "oppose_adoption", "conditional", "neutral"]
21
+ },
22
+ "directness": { "type": "integer", "minimum": 0, "maximum": 2 },
23
+ "applicability": {
24
+ "type": "object",
25
+ "additionalProperties": false,
26
+ "required": ["scope_match"],
27
+ "properties": {
28
+ "scope_match": { "type": "string", "enum": ["direct", "partial", "mismatch"] },
29
+ "target_population": { "type": "string" },
30
+ "context_notes": { "type": "string" },
31
+ "extensions": { "type": "object" }
32
+ }
33
+ },
34
+ "reasoning_note": { "type": "string", "minLength": 1 },
35
+ "created_in_revision": { "type": "integer", "minimum": 1 },
36
+ "extensions": { "type": "object" }
37
+ }
38
+ }