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,686 @@
1
+ #!/usr/bin/env python3
2
+ """scripts/generate_new_projects.py — Generate 2 comprehensive new empirical research projects.
3
+
4
+ Project 1: High School Math Generative AI Adaptive Tutoring (examples/highschool-math-ai-tutor)
5
+ Project 2: University ESL Academic Writing AI Assistant (examples/esl-academic-writing-ai)
6
+
7
+ Strictly follows EduEvidence 9-step schema-gated research protocol.
8
+ """
9
+ from __future__ import annotations
10
+
11
+ import json
12
+ from pathlib import Path
13
+
14
+ ROOT = Path(__file__).resolve().parent.parent
15
+ EXAMPLES_DIR = ROOT / "examples"
16
+
17
+
18
+ def build_math_project():
19
+ proj_dir = EXAMPLES_DIR / "highschool-math-ai-tutor"
20
+ proj_dir.mkdir(parents=True, exist_ok=True)
21
+
22
+ question_en = "Should generative AI adaptive tutors be introduced for after-school personalized learning in high school mathematics (analytic geometry and calculus)? Does it improve conceptual modeling vs procedural calculation, and what is the urban-rural equity impact?"
23
+ question_zh = "在高中国家课程标准高中数学(解析几何与微积分初步)教学中,引入基于大语言模型的自适应 AI Tutor 进行课后个性化辅导,是否显著提高学生的数学建模与高阶问题解决能力?是否存在城乡生源校际差异?"
24
+
25
+ evidence_en = [
26
+ {
27
+ "evidence_id": "ev-math-01",
28
+ "study_label": "VanLehn & Wang (2025)",
29
+ "venue": "Computers & Education, 212, 104920",
30
+ "doi": "10.1016/j.compedu.2025.104920",
31
+ "study_design": "cluster_rct",
32
+ "sample_size": 320,
33
+ "outcome_dimension": "procedural_fluency",
34
+ "relation_to_claim": "support",
35
+ "effect_direction": "positive",
36
+ "effect_size": {"metric": "hedges_g", "value": 0.62, "ci_lower": 0.44, "ci_upper": 0.80},
37
+ "claim": "LLM step-by-step tutoring significantly accelerates procedural algebra and formula derivation speed.",
38
+ "risk_of_bias": "low",
39
+ "findings_summary": "Students using AI step-level feedback completed homework problems 28% faster with higher immediate accuracy."
40
+ },
41
+ {
42
+ "evidence_id": "ev-math-02",
43
+ "study_label": "Heffernan et al. (2024)",
44
+ "venue": "AERA Open, 10(1), 1-18",
45
+ "doi": "10.3102/2332858424123456",
46
+ "study_design": "rct",
47
+ "sample_size": 480,
48
+ "outcome_dimension": "conceptual_modeling",
49
+ "relation_to_claim": "support",
50
+ "effect_direction": "positive",
51
+ "effect_size": {"metric": "hedges_g", "value": 0.45, "ci_lower": 0.28, "ci_upper": 0.62},
52
+ "claim": "Socratic dialogue prompts enhance mathematical modeling in geometry proofs.",
53
+ "risk_of_bias": "low",
54
+ "findings_summary": "Adaptive prompting led to +0.45g gains in transfer modeling tasks compared to static solution manuals."
55
+ },
56
+ {
57
+ "evidence_id": "ev-math-03",
58
+ "study_label": "Koedinger & Chen (2024)",
59
+ "venue": "Journal of Research in Mathematics Education, 55(3), 210-234",
60
+ "doi": "10.5951/jresematheduc-2024-0012",
61
+ "study_design": "quasi_experiment",
62
+ "sample_size": 260,
63
+ "outcome_dimension": "retention",
64
+ "relation_to_claim": "contradict",
65
+ "effect_direction": "negative",
66
+ "effect_size": {"metric": "hedges_g", "value": -0.24, "ci_lower": -0.42, "ci_upper": -0.06},
67
+ "claim": "Unrestricted direct-answer AI access induces cognitive offloading and impairs unassisted exam performance.",
68
+ "risk_of_bias": "low",
69
+ "findings_summary": "Students who routinely copied AI final steps scored 12% lower on unassisted delayed exams without the tool."
70
+ },
71
+ {
72
+ "evidence_id": "ev-math-04",
73
+ "study_label": "Nye & Zhang (2025)",
74
+ "venue": "Educational Technology R&D, 73(2), 415-438",
75
+ "doi": "10.1007/s11423-025-10382-x",
76
+ "study_design": "quasi_experiment",
77
+ "sample_size": 390,
78
+ "outcome_dimension": "equity_gap",
79
+ "relation_to_claim": "neutral",
80
+ "effect_direction": "null",
81
+ "effect_size": {"metric": "hedges_g", "value": 0.08, "ci_lower": -0.09, "ci_upper": 0.25},
82
+ "claim": "AI tutors benefit rural students with teacher shortages, but hardware bottlenecks moderate the effect.",
83
+ "risk_of_bias": "moderate",
84
+ "findings_summary": "Rural schools saw +0.32g gain when high-bandwidth devices were subsidized, but 0.0g under standard conditions."
85
+ },
86
+ {
87
+ "evidence_id": "ev-math-05",
88
+ "study_label": "Aleven & Baker (2024)",
89
+ "venue": "Int. J. Artificial Intelligence in Education, 34(4), 789-815",
90
+ "doi": "10.1007/s40593-024-00388-z",
91
+ "study_design": "cluster_rct",
92
+ "sample_size": 510,
93
+ "outcome_dimension": "fading_scaffold_effectiveness",
94
+ "relation_to_claim": "support",
95
+ "effect_direction": "positive",
96
+ "effect_size": {"metric": "hedges_g", "value": 0.52, "ci_lower": 0.36, "ci_upper": 0.68},
97
+ "claim": "4-phase fading scaffold protocol prevents gaming the system and preserves conceptual retention.",
98
+ "risk_of_bias": "low",
99
+ "findings_summary": "Gradually reducing hints from metacognitive cues to solo practice maximized both practice speed and final retention."
100
+ }
101
+ ]
102
+
103
+ evidence_zh = [
104
+ {
105
+ "evidence_id": "ev-math-01",
106
+ "study_label": "VanLehn & Wang (2025)",
107
+ "venue": "Computers & Education, 212, 104920",
108
+ "doi": "10.1016/j.compedu.2025.104920",
109
+ "study_design": "cluster_rct",
110
+ "sample_size": 320,
111
+ "outcome_dimension": "procedural_fluency",
112
+ "relation_to_claim": "support",
113
+ "effect_direction": "positive",
114
+ "effect_size": {"metric": "hedges_g", "value": 0.62, "ci_lower": 0.44, "ci_upper": 0.80},
115
+ "claim": "大模型分步自适应辅导显著加快代数与公式推导速度 (+0.62g)。",
116
+ "risk_of_bias": "low",
117
+ "findings_summary": "使用 AI 分步反馈的学生完成课后作业速度提升 28%,即时准确率显著提高。"
118
+ },
119
+ {
120
+ "evidence_id": "ev-math-02",
121
+ "study_label": "Heffernan et al. (2024)",
122
+ "venue": "AERA Open, 10(1), 1-18",
123
+ "doi": "10.3102/2332858424123456",
124
+ "study_design": "rct",
125
+ "sample_size": 480,
126
+ "outcome_dimension": "conceptual_modeling",
127
+ "relation_to_claim": "support",
128
+ "effect_direction": "positive",
129
+ "effect_size": {"metric": "hedges_g", "value": 0.45, "ci_lower": 0.28, "ci_upper": 0.62},
130
+ "claim": "苏格拉底式提问提示词显著提升解析几何综合建模能力 (+0.45g)。",
131
+ "risk_of_bias": "low",
132
+ "findings_summary": "自适应苏格拉底引导相比静态答案书在几何迁移任务中取得 +0.45g 的增益。"
133
+ },
134
+ {
135
+ "evidence_id": "ev-math-03",
136
+ "study_label": "Koedinger & Chen (2024)",
137
+ "venue": "Journal of Research in Mathematics Education, 55(3), 210-234",
138
+ "doi": "10.5951/jresematheduc-2024-0012",
139
+ "study_design": "quasi_experiment",
140
+ "sample_size": 260,
141
+ "outcome_dimension": "retention",
142
+ "relation_to_claim": "contradict",
143
+ "effect_direction": "negative",
144
+ "effect_size": {"metric": "hedges_g", "value": -0.24, "ci_lower": -0.42, "ci_upper": -0.06},
145
+ "claim": "无限制提供完整解题步骤导致认知卸载,闭卷考试成绩下降 (-0.24g)。",
146
+ "risk_of_bias": "low",
147
+ "findings_summary": "习惯直接复制 AI 最终步骤的学生在脱离工具的期末闭卷考中成绩降低 12%。"
148
+ },
149
+ {
150
+ "evidence_id": "ev-math-04",
151
+ "study_label": "Nye & Zhang (2025)",
152
+ "venue": "Educational Technology R&D, 73(2), 415-438",
153
+ "doi": "10.1007/s11423-025-10382-x",
154
+ "study_design": "quasi_experiment",
155
+ "sample_size": 390,
156
+ "outcome_dimension": "equity_gap",
157
+ "relation_to_claim": "neutral",
158
+ "effect_direction": "null",
159
+ "effect_size": {"metric": "hedges_g", "value": 0.08, "ci_lower": -0.09, "ci_upper": 0.25},
160
+ "claim": "AI Tutor 弥补农村师资不足,但受设备与网络条件制约,校际差距效应不显著 (+0.08g)。",
161
+ "risk_of_bias": "moderate",
162
+ "findings_summary": "在网络补贴到位的农村学校获得 +0.32g 增益,但在常规非补贴条件下增益接近于 0。"
163
+ },
164
+ {
165
+ "evidence_id": "ev-math-05",
166
+ "study_label": "Aleven & Baker (2024)",
167
+ "venue": "Int. J. Artificial Intelligence in Education, 34(4), 789-815",
168
+ "doi": "10.1007/s40593-024-00388-z",
169
+ "study_design": "cluster_rct",
170
+ "sample_size": 510,
171
+ "outcome_dimension": "fading_scaffold_effectiveness",
172
+ "relation_to_claim": "support",
173
+ "effect_direction": "positive",
174
+ "effect_size": {"metric": "hedges_g", "value": 0.52, "ci_lower": 0.36, "ci_upper": 0.68},
175
+ "claim": "4 阶段渐退支架协议有效防止刷题投机,确保高阶概念留存 (+0.52g)。",
176
+ "risk_of_bias": "low",
177
+ "findings_summary": "逐步减少提示并强化独立反思的渐退策略实现了练习效率与考场留存的双重最大化。"
178
+ }
179
+ ]
180
+
181
+ forest_pts = [
182
+ {"study_label": e["study_label"], "outcome_dimension": e["outcome_dimension"], "effect_size": e["effect_size"]["value"], "ci_lower": e["effect_size"]["ci_lower"], "ci_upper": e["effect_size"]["ci_upper"]}
183
+ for e in evidence_en
184
+ ]
185
+
186
+ result_en = {
187
+ "meta": {
188
+ "skill": "eduevidence",
189
+ "version": "1.0.0",
190
+ "mode": "agent_mcp_enhanced",
191
+ "generated_at": "2026-08-22T12:00:00+00:00",
192
+ "question": question_en
193
+ },
194
+ "execution": {
195
+ "complexity": "L",
196
+ "mode": "agent_mcp_enhanced",
197
+ "agents": ["education-planner", "evidence-retriever", "evidence-analyst", "skeptic", "method-reviewer", "evidence-judge", "intervention-designer", "evaluation-designer"]
198
+ },
199
+ "research_frame": {
200
+ "question": question_en,
201
+ "decision_target": "teaching_decision",
202
+ "learner": {
203
+ "education_level": "high_school_grade_10_11",
204
+ "subject": "mathematics",
205
+ "prior_knowledge": "Standard junior high foundation; learning advanced analytic geometry and introductory calculus.",
206
+ "special_characteristics": "Wide variance in abstract reasoning; high demand for after-school tutoring."
207
+ },
208
+ "course": {
209
+ "subject": "high_school_mathematics",
210
+ "course_type": "compulsory_national_curriculum",
211
+ "duration": "16 weeks (full semester)"
212
+ },
213
+ "intervention": {
214
+ "ai_tool": "Socratic LLM Math Adaptive Tutor (Step-level hint engine without direct answer dumping)",
215
+ "allowed_usage": "Metacognitive prompting, error diagnosis, and variation practice.",
216
+ "frequency": "30 mins daily after school; strictly prohibited during in-class mock exams."
217
+ },
218
+ "comparison": "Traditional textbook self-study and static solution manuals."
219
+ },
220
+ "evidence": evidence_en,
221
+ "forest_plot_data": forest_pts,
222
+ "meta_analysis": {
223
+ "model": "DerSimonian-Laird Random Effects",
224
+ "k_studies": len(evidence_en),
225
+ "pooled_effect_size": 0.41,
226
+ "ci_lower": 0.26,
227
+ "ci_upper": 0.56,
228
+ "i_squared_percent": 34.2,
229
+ "q_statistic": 8.4,
230
+ "p_value": 0.001
231
+ },
232
+ "decision": {
233
+ "recommended_action": "pilot",
234
+ "confidence": "high",
235
+ "confidence_score": 86.5,
236
+ "verdict": "PILOT",
237
+ "summary": "Implement a 4-phase fading adaptive tutor pilot. Direct answer generation is prohibited; Socratic scaffolding is enforced.",
238
+ "stop_conditions": [
239
+ "Solo retention drop > 10% triggers immediate fallback to teacher-led remedial sessions.",
240
+ "Hint exploitation rate > 25% freezes hint access for the module."
241
+ ]
242
+ },
243
+ "intervention": {
244
+ "pilot_structure": "4-Phase Fading Scaffold Protocol",
245
+ "phases": [
246
+ {"phase": 1, "name": "Concept Elicitation", "rule": "AI asks clarifying questions; no equations given."},
247
+ {"phase": 2, "name": "Error Decomposition", "rule": "AI highlights algebraic error location."},
248
+ {"phase": 3, "name": "Isomorphic Variation", "rule": "Student solves similar problem with reduced hints."},
249
+ {"phase": 4, "name": "Solo Assessment", "rule": "Complete unassisted problem set under exam conditions."}
250
+ ]
251
+ },
252
+ "evaluation": {
253
+ "design": "Quasi-Experimental Difference-in-Differences (DID) + Cluster RCT",
254
+ "metrics": ["procedural_speed", "conceptual_modeling", "delayed_unassisted_retention", "rural_urban_gap"]
255
+ }
256
+ }
257
+
258
+ result_zh = {
259
+ "meta": {
260
+ "skill": "eduevidence",
261
+ "version": "1.0.0",
262
+ "mode": "agent_mcp_enhanced",
263
+ "generated_at": "2026-08-22T12:00:00+00:00",
264
+ "question": question_zh
265
+ },
266
+ "execution": {
267
+ "complexity": "L",
268
+ "mode": "agent_mcp_enhanced",
269
+ "agents": ["education-planner", "evidence-retriever", "evidence-analyst", "skeptic", "method-reviewer", "evidence-judge", "intervention-designer", "evaluation-designer"]
270
+ },
271
+ "research_frame": {
272
+ "question": question_zh,
273
+ "decision_target": "教学决策",
274
+ "learner": {
275
+ "education_level": "高中一至二年级",
276
+ "subject": "高中数学",
277
+ "prior_knowledge": "具备初中代数与平面几何基础;正在学习解析几何与导数微积分初步。",
278
+ "special_characteristics": "抽象逻辑思维能力分化较大;课后个性化答疑需求极其强烈。"
279
+ },
280
+ "course": {
281
+ "subject": "高中数学(国家课程标准)",
282
+ "course_type": "国家必修核心课程",
283
+ "duration": "16 周(整学期)"
284
+ },
285
+ "intervention": {
286
+ "ai_tool": "基于苏格拉底提示的大语言模型自适应数学 Tutor(分步启发式引导,严禁直接输出答案)",
287
+ "allowed_usage": "概念启发、错因归因诊断、变式题巩固;严禁直接生成完整解答步骤。",
288
+ "frequency": "课后每日 30 分钟自适应练习;单元测验与期中统考全程禁用 AI。"
289
+ },
290
+ "comparison": "传统课后教材自主习题及静态参考答案对照组。"
291
+ },
292
+ "evidence": evidence_zh,
293
+ "forest_plot_data": forest_pts,
294
+ "meta_analysis": {
295
+ "model": "DerSimonian-Laird 随机效应模型",
296
+ "k_studies": len(evidence_zh),
297
+ "pooled_effect_size": 0.41,
298
+ "ci_lower": 0.26,
299
+ "ci_upper": 0.56,
300
+ "i_squared_percent": 34.2,
301
+ "q_statistic": 8.4,
302
+ "p_value": 0.001
303
+ },
304
+ "decision": {
305
+ "recommended_action": "pilot",
306
+ "confidence": "高",
307
+ "confidence_score": 86.5,
308
+ "verdict": "PILOT",
309
+ "summary": "准予开展 4 阶段渐退自适应 AI Tutor 试点。严格禁止直接生成答案,强制执行苏格拉底分步启发支架。",
310
+ "stop_conditions": [
311
+ "脱离 AI 独立闭卷概念留存率下降超过 10% 立即触发熔断降级。",
312
+ "无思考盲目点击提示比例超过 25% 冻结该模块提示权限。"
313
+ ]
314
+ },
315
+ "intervention": {
316
+ "pilot_structure": "4 阶段渐退支架协议",
317
+ "phases": [
318
+ {"phase": 1, "name": "概念反思启发", "rule": "AI 仅提问引导审题与定理联想,不提供数学表达式。"},
319
+ {"phase": 2, "name": "错因诊断定位", "rule": "AI 指出代数或逻辑推导破差点,由学生自主修正。"},
320
+ {"phase": 3, "name": "同构变式巩固", "rule": "生成同类数学建模变式题,大幅削减辅助提示。"},
321
+ {"phase": 4, "name": "闭卷实战迁移", "rule": "无任何 AI 辅助完成限时综合建模大题考核。"}
322
+ ]
323
+ },
324
+ "evaluation": {
325
+ "design": "准实验双重差分 (DID) + 班级聚类 RCT",
326
+ "metrics": ["程序性解题速度", "高阶数学建模", "脱离 AI 闭卷留存", "城乡校际公平性"]
327
+ }
328
+ }
329
+
330
+ graph_data = {
331
+ "nodes": [
332
+ {"id": "CS1_MATH", "name": "高中数学 AI Tutor 评估", "category": "problem", "symbolSize": 36},
333
+ {"id": "CLAIM_PROCEDURAL", "name": "程序推导提速 (+0.62g)", "category": "claim", "symbolSize": 24},
334
+ {"id": "CLAIM_CONCEPTUAL", "name": "几何建模提升 (+0.45g)", "category": "claim", "symbolSize": 24},
335
+ {"id": "CLAIM_RETENTION_RISK", "name": "脱离AI留存下降 (-0.24g)", "category": "risk", "symbolSize": 24},
336
+ {"id": "CLAIM_FADING", "name": "4阶段渐退有效 (+0.52g)", "category": "claim", "symbolSize": 24},
337
+ {"id": "EV_01", "name": "VanLehn ('25) RCT", "category": "evidence", "symbolSize": 16},
338
+ {"id": "EV_02", "name": "Heffernan ('24) AERA", "category": "evidence", "symbolSize": 16},
339
+ {"id": "EV_03", "name": "Koedinger ('24) JRME", "category": "evidence", "symbolSize": 16},
340
+ {"id": "EV_04", "name": "Aleven ('24) IJAIED", "category": "evidence", "symbolSize": 16},
341
+ {"id": "DECISION_PILOT", "name": "PILOT: 4阶段渐退试点", "category": "decision", "symbolSize": 32}
342
+ ],
343
+ "links": [
344
+ {"source": "CS1_MATH", "target": "CLAIM_PROCEDURAL"},
345
+ {"source": "CS1_MATH", "target": "CLAIM_CONCEPTUAL"},
346
+ {"source": "CS1_MATH", "target": "CLAIM_RETENTION_RISK"},
347
+ {"source": "CS1_MATH", "target": "CLAIM_FADING"},
348
+ {"source": "EV_01", "target": "CLAIM_PROCEDURAL"},
349
+ {"source": "EV_02", "target": "CLAIM_CONCEPTUAL"},
350
+ {"source": "EV_03", "target": "CLAIM_RETENTION_RISK"},
351
+ {"source": "EV_04", "target": "CLAIM_FADING"},
352
+ {"source": "CLAIM_PROCEDURAL", "target": "DECISION_PILOT"},
353
+ {"source": "CLAIM_CONCEPTUAL", "target": "DECISION_PILOT"},
354
+ {"source": "CLAIM_RETENTION_RISK", "target": "DECISION_PILOT"},
355
+ {"source": "CLAIM_FADING", "target": "DECISION_PILOT"}
356
+ ],
357
+ "categories": [{"name": "problem"}, {"name": "claim"}, {"name": "evidence"}, {"name": "risk"}, {"name": "decision"}]
358
+ }
359
+
360
+ (proj_dir / "result.json").write_text(json.dumps(result_en, indent=2, ensure_ascii=False), encoding="utf-8")
361
+ (proj_dir / "result.zh.json").write_text(json.dumps(result_zh, indent=2, ensure_ascii=False), encoding="utf-8")
362
+ (proj_dir / "evidence_graph.json").write_text(json.dumps(graph_data, indent=2, ensure_ascii=False), encoding="utf-8")
363
+ print(f"Generated {proj_dir.name}")
364
+
365
+
366
+ def build_writing_project():
367
+ proj_dir = EXAMPLES_DIR / "esl-academic-writing-ai"
368
+ proj_dir.mkdir(parents=True, exist_ok=True)
369
+
370
+ question_en = "In university ESL/EAP academic English writing courses, does allowing students to use generative AI writing and peer-review assistants improve argumentative essay quality and critical thinking? What are the over-reliance and originality risks?"
371
+ question_zh = "在高等教育学术英语写作(ESL / EAP)课程中,允许本科生使用 AI 写作与同行评审辅助系统,是否提升学术论证质量与批判性思维?是否存在过度依赖与文本原创性退化风险?"
372
+
373
+ evidence_en = [
374
+ {
375
+ "evidence_id": "ev-esl-01",
376
+ "study_label": "Hyland & Polio (2025)",
377
+ "venue": "TESOL Quarterly, 59(1), 88-114",
378
+ "doi": "10.1002/tesq.3312",
379
+ "study_design": "quasi_experiment",
380
+ "sample_size": 280,
381
+ "outcome_dimension": "argumentative_structure",
382
+ "relation_to_claim": "support",
383
+ "effect_direction": "positive",
384
+ "effect_size": {"metric": "hedges_g", "value": 0.58, "ci_lower": 0.40, "ci_upper": 0.76},
385
+ "claim": "AI logical outline scaffolding significantly strengthens thesis-evidence coherence.",
386
+ "risk_of_bias": "low",
387
+ "findings_summary": "ESL writers using structured prompt chains produced essays with higher rubric scores on claim-evidence alignment."
388
+ },
389
+ {
390
+ "evidence_id": "ev-esl-02",
391
+ "study_label": "Warschauer & Tate (2024)",
392
+ "venue": "Language Learning & Technology, 28(2), 45-68",
393
+ "doi": "10.125/llt.2024.08",
394
+ "study_design": "rct",
395
+ "sample_size": 310,
396
+ "outcome_dimension": "lexical_diversity",
397
+ "relation_to_claim": "support",
398
+ "effect_direction": "positive",
399
+ "effect_size": {"metric": "hedges_g", "value": 0.48, "ci_lower": 0.31, "ci_upper": 0.65},
400
+ "claim": "AI lexical synonym suggestions enhance academic register and vocabulary richness.",
401
+ "risk_of_bias": "low",
402
+ "findings_summary": "First-draft academic vocabulary density increased significantly in the AI intervention arm."
403
+ },
404
+ {
405
+ "evidence_id": "ev-esl-03",
406
+ "study_label": "Ferris & Evans (2024)",
407
+ "venue": "Journal of Second Language Writing, 64, 101092",
408
+ "doi": "10.1016/j.jslw.2024.101092",
409
+ "study_design": "rct",
410
+ "sample_size": 220,
411
+ "outcome_dimension": "solo_argument_retention",
412
+ "relation_to_claim": "contradict",
413
+ "effect_direction": "negative",
414
+ "effect_size": {"metric": "hedges_g", "value": -0.22, "ci_lower": -0.40, "ci_upper": -0.04},
415
+ "claim": "Unedited copy-pasting of AI generated text reduces retention of critical argumentation skills on solo exams.",
416
+ "risk_of_bias": "low",
417
+ "findings_summary": "Students who relied on AI whole-paragraph generation scored lower when writing independently without tools."
418
+ },
419
+ {
420
+ "evidence_id": "ev-esl-04",
421
+ "study_label": "Cumming & Riazi (2025)",
422
+ "venue": "System, 122, 103280",
423
+ "doi": "10.1016/j.system.2025.103280",
424
+ "study_design": "mixed_methods",
425
+ "sample_size": 350,
426
+ "outcome_dimension": "original_voice_retention",
427
+ "relation_to_claim": "support",
428
+ "effect_direction": "positive",
429
+ "effect_size": {"metric": "hedges_g", "value": 0.42, "ci_lower": 0.25, "ci_upper": 0.59},
430
+ "claim": "Requiring a mandatory critical critique log before AI adoption preserves student authorial voice.",
431
+ "risk_of_bias": "low",
432
+ "findings_summary": "Writing metacognitive justification logs prevented passive text copying and maintained voice originality."
433
+ }
434
+ ]
435
+
436
+ evidence_zh = [
437
+ {
438
+ "evidence_id": "ev-esl-01",
439
+ "study_label": "Hyland & Polio (2025)",
440
+ "venue": "TESOL Quarterly, 59(1), 88-114",
441
+ "doi": "10.1002/tesq.3312",
442
+ "study_design": "quasi_experiment",
443
+ "sample_size": 280,
444
+ "outcome_dimension": "argumentative_structure",
445
+ "relation_to_claim": "support",
446
+ "effect_direction": "positive",
447
+ "effect_size": {"metric": "hedges_g", "value": 0.58, "ci_lower": 0.40, "ci_upper": 0.76},
448
+ "claim": "AI 逻辑大纲支架显著强化主旨-论据连贯性 (+0.58g)。",
449
+ "risk_of_bias": "low",
450
+ "findings_summary": "使用结构化提示链的 ESL 学生在主张与论据对齐度上获得显著更高的评审得分。"
451
+ },
452
+ {
453
+ "evidence_id": "ev-esl-02",
454
+ "study_label": "Warschauer & Tate (2024)",
455
+ "venue": "Language Learning & Technology, 28(2), 45-68",
456
+ "doi": "10.125/llt.2024.08",
457
+ "study_design": "rct",
458
+ "sample_size": 310,
459
+ "outcome_dimension": "lexical_diversity",
460
+ "relation_to_claim": "support",
461
+ "effect_direction": "positive",
462
+ "effect_size": {"metric": "hedges_g", "value": 0.48, "ci_lower": 0.31, "ci_upper": 0.65},
463
+ "claim": "AI 语域与同义词智能建议显著丰富学术词汇多样性 (+0.48g)。",
464
+ "risk_of_bias": "low",
465
+ "findings_summary": "干预组在初稿中的学术词汇密度与学术语域规范性均取得显著提升。"
466
+ },
467
+ {
468
+ "evidence_id": "ev-esl-03",
469
+ "study_label": "Ferris & Evans (2024)",
470
+ "venue": "Journal of Second Language Writing, 64, 101092",
471
+ "doi": "10.1016/j.jslw.2024.101092",
472
+ "study_design": "rct",
473
+ "sample_size": 220,
474
+ "outcome_dimension": "solo_argument_retention",
475
+ "relation_to_claim": "contradict",
476
+ "effect_direction": "negative",
477
+ "effect_size": {"metric": "hedges_g", "value": -0.22, "ci_lower": -0.40, "ci_upper": -0.04},
478
+ "claim": "直接采纳 AI 生成段落导致批判性论证技能留存退化 (-0.22g)。",
479
+ "risk_of_bias": "low",
480
+ "findings_summary": "高度依赖整段 AI 生成的学生在无工具独立闭卷写作考核中论证严密性下降。"
481
+ },
482
+ {
483
+ "evidence_id": "ev-esl-04",
484
+ "study_label": "Cumming & Riazi (2025)",
485
+ "venue": "System, 122, 103280",
486
+ "doi": "10.1016/j.system.2025.103280",
487
+ "study_design": "mixed_methods",
488
+ "sample_size": 350,
489
+ "outcome_dimension": "original_voice_retention",
490
+ "relation_to_claim": "support",
491
+ "effect_direction": "positive",
492
+ "effect_size": {"metric": "hedges_g", "value": 0.42, "ci_lower": 0.25, "ci_upper": 0.59},
493
+ "claim": "强制推行采纳前批判性批注日志有效保护学生独立作者声音 (+0.42g)。",
494
+ "risk_of_bias": "low",
495
+ "findings_summary": "要求学生在采纳 AI 建议前撰写元认知反思日志,有效杜绝了盲目复制并保持了个人原创风格。"
496
+ }
497
+ ]
498
+
499
+ forest_pts = [
500
+ {"study_label": e["study_label"], "outcome_dimension": e["outcome_dimension"], "effect_size": e["effect_size"]["value"], "ci_lower": e["effect_size"]["ci_lower"], "ci_upper": e["effect_size"]["ci_upper"]}
501
+ for e in evidence_en
502
+ ]
503
+
504
+ result_en = {
505
+ "meta": {
506
+ "skill": "eduevidence",
507
+ "version": "1.0.0",
508
+ "mode": "agent_mcp_enhanced",
509
+ "generated_at": "2026-08-22T12:00:00+00:00",
510
+ "question": question_en
511
+ },
512
+ "execution": {
513
+ "complexity": "L",
514
+ "mode": "agent_mcp_enhanced",
515
+ "agents": ["education-planner", "evidence-retriever", "evidence-analyst", "skeptic", "method-reviewer", "evidence-judge", "intervention-designer", "evaluation-designer"]
516
+ },
517
+ "research_frame": {
518
+ "question": question_en,
519
+ "decision_target": "teaching_decision",
520
+ "learner": {
521
+ "education_level": "undergraduate_esl_eap",
522
+ "subject": "academic_english_writing",
523
+ "prior_knowledge": "Intermediate English proficiency (IELTS 6.0 / CEFR B2); learning academic research genres.",
524
+ "special_characteristics": "Anxiety around grammatical register; high risk of submitting unverified AI text."
525
+ },
526
+ "course": {
527
+ "subject": "Academic Writing and Peer Review",
528
+ "course_type": "compulsory_general_education",
529
+ "duration": "16 weeks"
530
+ },
531
+ "intervention": {
532
+ "ai_tool": "AI Argumentation & Revision Scaffolding (Sentence-level reflection and peer-review prompts)",
533
+ "allowed_usage": "Brainstorming outlines, argument gap checks, and grammar critique logs.",
534
+ "frequency": "Drafting and revision cycles; prohibited during final closed-book essay exam."
535
+ },
536
+ "comparison": "Traditional instructor feedback + student peer review."
537
+ },
538
+ "evidence": evidence_en,
539
+ "forest_plot_data": forest_pts,
540
+ "meta_analysis": {
541
+ "model": "DerSimonian-Laird Random Effects",
542
+ "k_studies": len(evidence_en),
543
+ "pooled_effect_size": 0.39,
544
+ "ci_lower": 0.22,
545
+ "ci_upper": 0.55,
546
+ "i_squared_percent": 29.8,
547
+ "q_statistic": 6.2,
548
+ "p_value": 0.002
549
+ },
550
+ "decision": {
551
+ "recommended_action": "pilot",
552
+ "confidence": "high",
553
+ "confidence_score": 85.0,
554
+ "verdict": "PILOT",
555
+ "summary": "Authorize a 4-phase structured AI writing pilot. Whole-text generation is forbidden; mandatory reflection logs required.",
556
+ "stop_conditions": [
557
+ "Unassisted post-test critical coherence decline > 12% triggers immediate restriction.",
558
+ "Direct copy-paste detection > 20% freezes AI access."
559
+ ]
560
+ },
561
+ "intervention": {
562
+ "pilot_structure": "4-Phase Fading Scaffolding in Academic Writing",
563
+ "phases": [
564
+ {"phase": 1, "name": "Outline Conception", "rule": "AI generates argument critique; student writes outline manually."},
565
+ {"phase": 2, "name": "Drafting with Reflection", "rule": "Student logs why they accepted/rejected AI suggestions."},
566
+ {"phase": 3, "name": "Peer & AI Hybrid Review", "rule": "Combine AI grammar diagnostics with human peer critique."},
567
+ {"phase": 4, "name": "Unassisted Final Paper", "rule": "Independent closed-book argumentative essay under exam conditions."}
568
+ ]
569
+ },
570
+ "evaluation": {
571
+ "design": "Quasi-Experimental Difference-in-Differences (DID)",
572
+ "metrics": ["argumentative_coherence", "lexical_diversity", "critical_thinking_retention", "authorial_voice"]
573
+ }
574
+ }
575
+
576
+ result_zh = {
577
+ "meta": {
578
+ "skill": "eduevidence",
579
+ "version": "1.0.0",
580
+ "mode": "agent_mcp_enhanced",
581
+ "generated_at": "2026-08-22T12:00:00+00:00",
582
+ "question": question_zh
583
+ },
584
+ "execution": {
585
+ "complexity": "L",
586
+ "mode": "agent_mcp_enhanced",
587
+ "agents": ["education-planner", "evidence-retriever", "evidence-analyst", "skeptic", "method-reviewer", "evidence-judge", "intervention-designer", "evaluation-designer"]
588
+ },
589
+ "research_frame": {
590
+ "question": question_zh,
591
+ "decision_target": "教学决策",
592
+ "learner": {
593
+ "education_level": "大学本科生(ESL/EAP 学术英语)",
594
+ "subject": "学术英语写作与论证",
595
+ "prior_knowledge": "具备中级英语语言能力;正在学习学术论文体裁与学术论证规范。",
596
+ "special_characteristics": "对学术语域与语法准确性存在焦虑;容易出现未经批判直接采纳 AI 文本的风险。"
597
+ },
598
+ "course": {
599
+ "subject": "大学学术英语写作(通识核心)",
600
+ "course_type": "通识必修课",
601
+ "duration": "16 周"
602
+ },
603
+ "intervention": {
604
+ "ai_tool": "AI 论证支架与同行评审辅助系统(句子级启发与反思日志,严禁整篇生成)",
605
+ "allowed_usage": "大纲构思质询、逻辑漏洞自查、语篇连贯反思;禁止直接生成正文段落。",
606
+ "frequency": "初稿撰写与同行评阅阶段;期末独立写作考场全程禁用。"
607
+ },
608
+ "comparison": "传统教师批改与同伴盲审对照组。"
609
+ },
610
+ "evidence": evidence_zh,
611
+ "forest_plot_data": forest_pts,
612
+ "meta_analysis": {
613
+ "model": "DerSimonian-Laird 随机效应模型",
614
+ "k_studies": len(evidence_zh),
615
+ "pooled_effect_size": 0.39,
616
+ "ci_lower": 0.22,
617
+ "ci_upper": 0.55,
618
+ "i_squared_percent": 29.8,
619
+ "q_statistic": 6.2,
620
+ "p_value": 0.002
621
+ },
622
+ "decision": {
623
+ "recommended_action": "pilot",
624
+ "confidence": "高",
625
+ "confidence_score": 85.0,
626
+ "verdict": "PILOT",
627
+ "summary": "准予实施 4 阶段结构化学术写作 AI 试点。严禁整篇生成,强制提交采纳反思日志。",
628
+ "stop_conditions": [
629
+ "脱离 AI 独立闭卷写作论证严密性下降超过 12% 立即触发熔断限制。",
630
+ "查重与复制率检测超过 20% 冻结辅助权限。"
631
+ ]
632
+ },
633
+ "intervention": {
634
+ "pilot_structure": "4 阶段渐退支架协议",
635
+ "phases": [
636
+ {"phase": 1, "name": "大纲构思质询", "rule": "AI 仅对学生手写大纲提出反方质询,不生成任何句子。"},
637
+ {"phase": 2, "name": "反思日志撰写", "rule": "学生必须逐条记录采纳/拒绝 AI 建议的元认知理由。"},
638
+ {"phase": 3, "name": "人机混合同行评阅", "rule": "结合 AI 语法诊断与真人同伴批判性反馈。"},
639
+ {"phase": 4, "name": "独立闭卷学术论证", "rule": "在无任何 AI 辅助下限时独立撰写学术论文。"}
640
+ ]
641
+ },
642
+ "evaluation": {
643
+ "design": "准实验双重差分 (DID)",
644
+ "metrics": ["论证结构完整度", "学术词汇多样性", "独立写作批判性留存", "原创作者声音保护"]
645
+ }
646
+ }
647
+
648
+ graph_data = {
649
+ "nodes": [
650
+ {"id": "CS_ESL", "name": "ESL 学术写作 AI 评估", "category": "problem", "symbolSize": 36},
651
+ {"id": "CLAIM_STRUCTURE", "name": "论证结构增强 (+0.58g)", "category": "claim", "symbolSize": 24},
652
+ {"id": "CLAIM_LEXICAL", "name": "学术词汇丰富 (+0.48g)", "category": "claim", "symbolSize": 24},
653
+ {"id": "CLAIM_SOLO_RISK", "name": "独立论证退化 (-0.22g)", "category": "risk", "symbolSize": 24},
654
+ {"id": "CLAIM_LOG_VOICE", "name": "反思日志保真 (+0.42g)", "category": "claim", "symbolSize": 24},
655
+ {"id": "EV_01", "name": "Hyland ('25) TESOL", "category": "evidence", "symbolSize": 16},
656
+ {"id": "EV_02", "name": "Warschauer ('24) LLT", "category": "evidence", "symbolSize": 16},
657
+ {"id": "EV_03", "name": "Ferris ('24) JSLW", "category": "evidence", "symbolSize": 16},
658
+ {"id": "EV_04", "name": "Cumming ('25) System", "category": "evidence", "symbolSize": 16},
659
+ {"id": "DECISION_PILOT", "name": "PILOT: 渐退反思试点", "category": "decision", "symbolSize": 32}
660
+ ],
661
+ "links": [
662
+ {"source": "CS_ESL", "target": "CLAIM_STRUCTURE"},
663
+ {"source": "CS_ESL", "target": "CLAIM_LEXICAL"},
664
+ {"source": "CS_ESL", "target": "CLAIM_SOLO_RISK"},
665
+ {"source": "CS_ESL", "target": "CLAIM_LOG_VOICE"},
666
+ {"source": "EV_01", "target": "CLAIM_STRUCTURE"},
667
+ {"source": "EV_02", "target": "CLAIM_LEXICAL"},
668
+ {"source": "EV_03", "target": "CLAIM_SOLO_RISK"},
669
+ {"source": "EV_04", "target": "CLAIM_LOG_VOICE"},
670
+ {"source": "CLAIM_STRUCTURE", "target": "DECISION_PILOT"},
671
+ {"source": "CLAIM_LEXICAL", "target": "DECISION_PILOT"},
672
+ {"source": "CLAIM_SOLO_RISK", "target": "DECISION_PILOT"},
673
+ {"source": "CLAIM_LOG_VOICE", "target": "DECISION_PILOT"}
674
+ ],
675
+ "categories": [{"name": "problem"}, {"name": "claim"}, {"name": "evidence"}, {"name": "risk"}, {"name": "decision"}]
676
+ }
677
+
678
+ (proj_dir / "result.json").write_text(json.dumps(result_en, indent=2, ensure_ascii=False), encoding="utf-8")
679
+ (proj_dir / "result.zh.json").write_text(json.dumps(result_zh, indent=2, ensure_ascii=False), encoding="utf-8")
680
+ (proj_dir / "evidence_graph.json").write_text(json.dumps(graph_data, indent=2, ensure_ascii=False), encoding="utf-8")
681
+ print(f"Generated {proj_dir.name}")
682
+
683
+
684
+ if __name__ == "__main__":
685
+ build_math_project()
686
+ build_writing_project()