eduevidence 5.2.0 → 6.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 (386) hide show
  1. package/CONTRIBUTING.md +105 -0
  2. package/README.md +142 -75
  3. package/README.zh-CN.md +73 -30
  4. package/SKILL.md +397 -131
  5. package/agents/openai.yaml +4 -0
  6. package/assets/readme/controlled-execution.svg +34 -0
  7. package/assets/readme/landing-tour.gif +0 -0
  8. package/assets/readme/logo.png +0 -0
  9. package/assets/readme/research-workflow.svg +56 -0
  10. package/assets/readme/studio-graph.png +0 -0
  11. package/assets/readme/studio-overview.png +0 -0
  12. package/assets/readme/studio-reports.png +0 -0
  13. package/assets/readme/studio-tour.gif +0 -0
  14. package/autoevolve/config.yaml +17 -0
  15. package/autoevolve/program.md +25 -0
  16. package/autoevolve/protected.manifest.yaml +34 -0
  17. package/benchmarks/adversarial/cases.jsonl +7 -0
  18. package/benchmarks/evidence-library.json +5268 -0
  19. package/benchmarks/partitions.json +8 -0
  20. package/bin/eduevidence.js +2 -1
  21. package/docs/architecture.md +496 -0
  22. package/docs/autoresearch-evolution-plan.md +2903 -0
  23. package/docs/autoresearch-implementation-status.md +101 -0
  24. package/docs/demo-storyboard.md +20 -0
  25. package/docs/demo-workplace-ai.md +92 -0
  26. package/docs/demo.md +32 -0
  27. package/docs/install-guide.md +150 -0
  28. package/docs/orchestration-role-model.md +1254 -0
  29. package/docs/release-closeout/README.md +17 -0
  30. package/docs/release-closeout/frontend-acceptance.md +23 -0
  31. package/docs/release-closeout/issues.md +19 -0
  32. package/docs/release-closeout/verification.md +28 -0
  33. package/docs/release-contract.md +108 -0
  34. package/docs/research-studio-guide.zh-CN.md +166 -0
  35. package/docs/sciverse-api.md +125 -0
  36. package/eduevidence_cli.py +29 -13
  37. package/engine/_resources.py +13 -0
  38. package/engine/autoevolve/__init__.py +3 -0
  39. package/engine/autoevolve/agent_view.py +167 -0
  40. package/engine/autoevolve/core.py +357 -0
  41. package/engine/autoevolve/events.py +11 -0
  42. package/engine/autoevolve/git_workspace.py +77 -0
  43. package/engine/autoevolve/projection.py +23 -0
  44. package/engine/autoevolve/runner.py +413 -0
  45. package/engine/autoevolve/trust.py +146 -0
  46. package/engine/autoresearch/__init__.py +6 -0
  47. package/engine/autoresearch/commit.py +132 -0
  48. package/engine/autoresearch/contracts.py +126 -0
  49. package/engine/autoresearch/controller.py +207 -0
  50. package/engine/autoresearch/events.py +12 -0
  51. package/engine/autoresearch/gap_priority.py +168 -0
  52. package/engine/autoresearch/projection.py +30 -0
  53. package/engine/autoresearch/research_memory.py +59 -0
  54. package/engine/autoresearch/saturation.py +91 -0
  55. package/engine/briefs.py +2 -1
  56. package/engine/capabilities.py +1 -0
  57. package/engine/contracts.py +3 -1
  58. package/engine/decision_policy.py +96 -0
  59. package/engine/evidence_graph.py +14 -10
  60. package/engine/evidencecore.py +7 -5
  61. package/engine/gaps.py +132 -73
  62. package/engine/ids.py +2 -0
  63. package/engine/judge_pack.py +65 -0
  64. package/engine/library.py +6 -2
  65. package/engine/library_builtin.py +3 -1
  66. package/engine/living.py +36 -5
  67. package/engine/meta_synthesis.py +3 -1
  68. package/engine/migration.py +88 -3
  69. package/engine/orchestration.py +460 -0
  70. package/engine/paths.py +2 -0
  71. package/engine/pilot.py +36 -33
  72. package/engine/project.py +2 -2
  73. package/engine/research_service.py +113 -0
  74. package/engine/studio_read_model.py +400 -0
  75. package/engine/taxonomy.py +211 -0
  76. package/engine/tribunal.py +44 -33
  77. package/engine/update.py +1 -0
  78. package/engine/versions.py +1 -1
  79. package/engine/worker_result.py +109 -0
  80. package/engine/workflows.py +70 -0
  81. package/examples/ai-coding-assistant-evidence/EduEvidence_Report.html +2934 -0
  82. package/examples/ai-coding-assistant-evidence/artifact_manifest.json +15 -0
  83. package/examples/ai-coding-assistant-evidence/citation_check.json +79 -0
  84. package/examples/ai-coding-assistant-evidence/claims.jsonl +12 -0
  85. package/examples/ai-coding-assistant-evidence/evaluation.json +35 -0
  86. package/examples/ai-coding-assistant-evidence/evidence.jsonl +12 -0
  87. package/examples/ai-coding-assistant-evidence/final_verdict.json +107 -0
  88. package/examples/ai-coding-assistant-evidence/frame.json +48 -0
  89. package/examples/ai-coding-assistant-evidence/gate_report.json +101 -0
  90. package/examples/ai-coding-assistant-evidence/intervention.json +51 -0
  91. package/examples/ai-coding-assistant-evidence/methodology.json +36 -0
  92. package/examples/ai-coding-assistant-evidence/raw_verdict.json +86 -0
  93. package/examples/ai-coding-assistant-evidence/report_spec.json +230 -0
  94. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_academic.html +2934 -0
  95. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_claude.html +2934 -0
  96. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_datalab-dark.html +2934 -0
  97. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_datalab.html +2934 -0
  98. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_presentation.html +2934 -0
  99. package/examples/ai-coding-assistant-evidence/reports-5themes/report_academic.html +2934 -0
  100. package/examples/ai-coding-assistant-evidence/reports-5themes/report_claude.html +2934 -0
  101. package/examples/ai-coding-assistant-evidence/reports-5themes/report_datalab-dark.html +2934 -0
  102. package/examples/ai-coding-assistant-evidence/reports-5themes/report_datalab.html +2934 -0
  103. package/examples/ai-coding-assistant-evidence/reports-5themes/report_presentation.html +2934 -0
  104. package/examples/ai-coding-assistant-evidence/result.json +1457 -0
  105. package/examples/ai-coding-assistant-evidence/result.zh.json +1457 -0
  106. package/examples/ai-coding-assistant-evidence/skeptic.json +72 -0
  107. package/examples/ai-coding-assistant-evidence/sources.jsonl +8 -0
  108. package/examples/ai-coding-assistant-evidence/verdict.json +107 -0
  109. package/examples/spaced-retrieval-practice/applicability.json +14 -0
  110. package/examples/spaced-retrieval-practice/artifact_manifest.json +15 -0
  111. package/examples/spaced-retrieval-practice/claims.jsonl +3 -0
  112. package/examples/spaced-retrieval-practice/evidence.jsonl +6 -0
  113. package/examples/spaced-retrieval-practice/final_verdict.json +93 -0
  114. package/examples/spaced-retrieval-practice/frame.json +58 -0
  115. package/examples/spaced-retrieval-practice/gate_report.json +101 -0
  116. package/examples/spaced-retrieval-practice/methodology.json +78 -0
  117. package/examples/spaced-retrieval-practice/report_spec.json +212 -0
  118. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_academic.html +2728 -0
  119. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_claude.html +2728 -0
  120. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_datalab-dark.html +2728 -0
  121. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_datalab.html +2728 -0
  122. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_presentation.html +2728 -0
  123. package/examples/spaced-retrieval-practice/reports-5themes/report_academic.html +2728 -0
  124. package/examples/spaced-retrieval-practice/reports-5themes/report_claude.html +2728 -0
  125. package/examples/spaced-retrieval-practice/reports-5themes/report_datalab-dark.html +2728 -0
  126. package/examples/spaced-retrieval-practice/reports-5themes/report_datalab.html +2728 -0
  127. package/examples/spaced-retrieval-practice/reports-5themes/report_presentation.html +2728 -0
  128. package/examples/spaced-retrieval-practice/result.json +942 -0
  129. package/examples/spaced-retrieval-practice/result.zh.json +942 -0
  130. package/examples/spaced-retrieval-practice/skeptic.json +70 -0
  131. package/examples/spaced-retrieval-practice/sources.jsonl +7 -0
  132. package/examples/spaced-retrieval-practice/verdict.json +93 -0
  133. package/examples/workplace-ai-assistant/artifact_manifest.json +15 -0
  134. package/examples/workplace-ai-assistant/claims.jsonl +4 -0
  135. package/examples/workplace-ai-assistant/evaluation.json +19 -0
  136. package/examples/workplace-ai-assistant/evidence.jsonl +4 -0
  137. package/examples/workplace-ai-assistant/evidence_graph.json +444 -0
  138. package/examples/workplace-ai-assistant/final_verdict.json +78 -0
  139. package/examples/workplace-ai-assistant/frame.json +41 -0
  140. package/examples/workplace-ai-assistant/gate_report.json +101 -0
  141. package/examples/workplace-ai-assistant/intervention.json +27 -0
  142. package/examples/workplace-ai-assistant/legacy-link-check.json +16 -0
  143. package/examples/workplace-ai-assistant/methodology.json +60 -0
  144. package/examples/workplace-ai-assistant/report_spec.json +224 -0
  145. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_academic.html +2814 -0
  146. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_claude.html +2814 -0
  147. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_datalab-dark.html +2814 -0
  148. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_datalab.html +2814 -0
  149. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_presentation.html +2814 -0
  150. package/examples/workplace-ai-assistant/reports-5themes/report_academic.html +2814 -0
  151. package/examples/workplace-ai-assistant/reports-5themes/report_claude.html +2814 -0
  152. package/examples/workplace-ai-assistant/reports-5themes/report_datalab-dark.html +2814 -0
  153. package/examples/workplace-ai-assistant/reports-5themes/report_datalab.html +2814 -0
  154. package/examples/workplace-ai-assistant/reports-5themes/report_presentation.html +2814 -0
  155. package/examples/workplace-ai-assistant/result.json +615 -0
  156. package/examples/workplace-ai-assistant/result.zh.json +615 -0
  157. package/examples/workplace-ai-assistant/search_log.json +19 -0
  158. package/examples/workplace-ai-assistant/skeptic.json +72 -0
  159. package/examples/workplace-ai-assistant/sources.jsonl +3 -0
  160. package/examples/workplace-ai-assistant/validation_result.json +9 -0
  161. package/examples/workplace-ai-assistant/verdict.json +78 -0
  162. package/install.sh +7 -7
  163. package/integrations/agent_mcp.py +2 -2
  164. package/integrations/orchestration_dispatch.py +146 -0
  165. package/package.json +46 -3
  166. package/pyproject.toml +14 -22
  167. package/references/autoresearch.md +30 -0
  168. package/references/evaluation-policy.md +24 -0
  169. package/references/orchestration.md +22 -0
  170. package/references/report-copy-style.md +67 -0
  171. package/references/retrieval-compliance.md +75 -0
  172. package/references/retrieval-protocol.md +20 -0
  173. package/references/scientific-invariants.md +19 -0
  174. package/retrieval/audit.py +178 -0
  175. package/retrieval/fetch.py +96 -0
  176. package/retrieval/sciverse.py +398 -0
  177. package/retrieval/search.py +47 -7
  178. package/schemas/applicability.schema.json +94 -0
  179. package/schemas/chart-spec.schema.json +10 -3
  180. package/schemas/evidence.schema.json +316 -43
  181. package/schemas/fetch-result.schema.json +2 -1
  182. package/schemas/intervention.schema.json +106 -21
  183. package/schemas/report-result.schema.json +12 -4
  184. package/schemas/report-spec.schema.json +98 -100
  185. package/schemas/skeptic.schema.json +86 -0
  186. package/schemas/source.schema.json +21 -2
  187. package/schemas/v2/finding.schema.json +5 -1
  188. package/schemas/v2/methodology-audit.schema.json +5 -1
  189. package/schemas/v2/outcome.schema.json +28 -5
  190. package/schemas/v2/project.schema.json +2 -2
  191. package/schemas/v2/run.schema.json +1 -1
  192. package/schemas/v2/study.schema.json +5 -1
  193. package/schemas/vNext/autoevolve-session.schema.json +34 -0
  194. package/schemas/vNext/eval-snapshot.schema.json +77 -0
  195. package/schemas/vNext/execution-plan.schema.json +50 -0
  196. package/schemas/vNext/gap-priority.schema.json +54 -0
  197. package/schemas/vNext/negative-search-record.schema.json +68 -0
  198. package/schemas/vNext/research-iteration.schema.json +87 -0
  199. package/schemas/vNext/research-strategy.schema.json +62 -0
  200. package/schemas/vNext/skill-experiment.schema.json +90 -0
  201. package/schemas/vNext/task-spec.schema.json +156 -0
  202. package/schemas/vNext/worker-result.schema.json +60 -0
  203. package/schemas/verdict.schema.json +164 -28
  204. package/scripts/benchmark_judge.py +2 -2
  205. package/scripts/benchmark_v3.py +26 -43
  206. package/scripts/build_esl_artifacts.py +4 -4
  207. package/scripts/build_evidence_library.py +2 -2
  208. package/scripts/build_gh_pages.py +98 -0
  209. package/scripts/build_readme_diagrams.py +72 -0
  210. package/scripts/build_report_variants.py +101 -0
  211. package/scripts/build_result.py +74 -9
  212. package/scripts/check_autoresearch_invariants.py +95 -0
  213. package/scripts/check_package_parity.py +85 -0
  214. package/scripts/check_protocol_alignment.py +375 -0
  215. package/scripts/check_versioned_schemas.py +254 -0
  216. package/scripts/claim_audit.py +13 -8
  217. package/scripts/compute_confidence.py +10 -0
  218. package/scripts/daily_evolve.py +30 -0
  219. package/scripts/dashboard_server.py +130 -101
  220. package/scripts/did_regression.py +17 -32
  221. package/scripts/enrich_projects_human_and_lieflat.py +1 -1
  222. package/scripts/evidence_score.py +5 -2
  223. package/scripts/generate_metrics.py +4 -3
  224. package/scripts/generate_new_projects.py +5 -5
  225. package/scripts/orchestrator.py +286 -36
  226. package/scripts/pre_verdict_gate.py +224 -26
  227. package/scripts/quickstart.py +18 -2
  228. package/scripts/rebake_all_5themes.py +1 -2
  229. package/scripts/research_auto_cli.py +475 -0
  230. package/scripts/run_workspace.py +24 -8
  231. package/scripts/search_provenance.py +64 -0
  232. package/scripts/serve_web.py +9 -10
  233. package/scripts/skill_lint.py +1 -1
  234. package/scripts/skill_payload.py +81 -0
  235. package/scripts/test_adversarial_empirical.py +26 -19
  236. package/scripts/validate_schema.py +46 -2
  237. package/scripts/vnext_cli.py +133 -0
  238. package/setup.py +12 -0
  239. package/skill/agents/evaluation-designer.md +20 -4
  240. package/skill/agents/evidence-analyst.md +19 -3
  241. package/skill/agents/evidence-judge.md +50 -2
  242. package/skill/agents/evidence-retriever.md +20 -3
  243. package/skill/agents/intervention-designer.md +20 -4
  244. package/skill/agents/method-reviewer.md +18 -2
  245. package/skill/agents/{education-planner.md → research-planner.md} +19 -3
  246. package/skill/agents/skeptic.md +18 -2
  247. package/skill/roles/registry.yaml +45 -0
  248. package/skill/sub-skills/aihot-trend-analysis/SKILL.md +28 -9
  249. package/skill/sub-skills/contradiction-analysis/SKILL.md +31 -11
  250. package/skill/sub-skills/data-analysis/SKILL.md +34 -15
  251. package/skill/sub-skills/ethics-review/SKILL.md +33 -10
  252. package/skill/sub-skills/evidence-extraction/SKILL.md +29 -11
  253. package/skill/sub-skills/evidence-review/SKILL.md +31 -12
  254. package/skill/sub-skills/gap-analysis/SKILL.md +31 -9
  255. package/skill/sub-skills/literature-review/SKILL.md +35 -14
  256. package/skill/sub-skills/methodology-audit/SKILL.md +29 -12
  257. package/skill/sub-skills/report-generation/SKILL.md +40 -6
  258. package/skill/sub-skills/research-planning/SKILL.md +41 -14
  259. package/skill/sub-skills/study-design/SKILL.md +30 -9
  260. package/skill/task-briefs/adjudicate.md +32 -7
  261. package/skill/task-briefs/applicability.md +38 -0
  262. package/skill/task-briefs/audit.md +32 -7
  263. package/skill/task-briefs/challenge.md +34 -5
  264. package/skill/task-briefs/evaluate.md +30 -5
  265. package/skill/task-briefs/extract.md +31 -8
  266. package/skill/task-briefs/frame.md +39 -10
  267. package/skill/task-briefs/intervene.md +32 -6
  268. package/skill/task-briefs/present.md +32 -8
  269. package/skill/task-briefs/projection.md +37 -0
  270. package/skill/task-briefs/retrieve.md +36 -6
  271. package/skill/workflows/decision-and-pilot.md +85 -0
  272. package/skill/workflows/evaluate-and-update.md +93 -0
  273. package/skill/workflows/evidence-review.md +117 -0
  274. package/visualization/eduevidence-report/assets/base.css +2 -2
  275. package/visualization/eduevidence-report/assets/reader.css +752 -0
  276. package/visualization/eduevidence-report/assets/reader.js +132 -0
  277. package/visualization/eduevidence-report/references/chart-selection-catalog.md +109 -0
  278. package/visualization/eduevidence-report/references/lieflat-composition.md +3 -1
  279. package/visualization/eduevidence-report/scripts/build_figures.py +25 -3
  280. package/visualization/eduevidence-report/scripts/build_infographics.py +5 -1
  281. package/visualization/eduevidence-report/scripts/build_report.py +561 -121
  282. package/visualization/eduevidence-report/scripts/charts_data.py +2 -0
  283. package/visualization/eduevidence-report/scripts/lieflat_engine.py +371 -136
  284. package/visualization/eduevidence-report/scripts/zh_labels.py +80 -1
  285. package/visualization/eduevidence-report/themes/academic.css +1 -1
  286. package/visualization/eduevidence-report/themes/claude.css +1 -1
  287. package/visualization/eduevidence-report/themes/datalab-dark.css +2 -2
  288. package/visualization/eduevidence-report/themes/datalab.css +2 -2
  289. package/visualization/eduevidence-report/themes/presentation.css +2 -2
  290. package/web/README.md +18 -0
  291. package/web/architecture.html +14885 -0
  292. package/web/index.html +53 -0
  293. package/web/studio/THIRD_PARTY_LICENSES.txt +146 -0
  294. package/web/studio/assets/index-B8tkF44Q.css +1 -0
  295. package/web/studio/assets/index-CQ6Keoyc.js +230 -0
  296. package/web/studio/config.json +1 -0
  297. package/web/studio/index.html +14 -0
  298. package/engine/__pycache__/__init__.cpython-312.pyc +0 -0
  299. package/engine/__pycache__/analysis.cpython-312.pyc +0 -0
  300. package/engine/__pycache__/bias.cpython-312.pyc +0 -0
  301. package/engine/__pycache__/briefs.cpython-312.pyc +0 -0
  302. package/engine/__pycache__/capabilities.cpython-312.pyc +0 -0
  303. package/engine/__pycache__/citation_check.cpython-312.pyc +0 -0
  304. package/engine/__pycache__/contracts.cpython-312.pyc +0 -0
  305. package/engine/__pycache__/datasets.cpython-312.pyc +0 -0
  306. package/engine/__pycache__/events.cpython-312.pyc +0 -0
  307. package/engine/__pycache__/evidence_graph.cpython-312.pyc +0 -0
  308. package/engine/__pycache__/evidence_review.cpython-312.pyc +0 -0
  309. package/engine/__pycache__/evidencecore.cpython-312.pyc +0 -0
  310. package/engine/__pycache__/gap_lens.cpython-312.pyc +0 -0
  311. package/engine/__pycache__/gaps.cpython-312.pyc +0 -0
  312. package/engine/__pycache__/graph_store.cpython-312.pyc +0 -0
  313. package/engine/__pycache__/graph_validate.cpython-312.pyc +0 -0
  314. package/engine/__pycache__/ids.cpython-312.pyc +0 -0
  315. package/engine/__pycache__/library.cpython-312.pyc +0 -0
  316. package/engine/__pycache__/library_builtin.cpython-312.pyc +0 -0
  317. package/engine/__pycache__/living.cpython-312.pyc +0 -0
  318. package/engine/__pycache__/log.cpython-312.pyc +0 -0
  319. package/engine/__pycache__/meta_analysis.cpython-312.pyc +0 -0
  320. package/engine/__pycache__/meta_synthesis.cpython-312.pyc +0 -0
  321. package/engine/__pycache__/migration.cpython-312.pyc +0 -0
  322. package/engine/__pycache__/mode_router.cpython-312.pyc +0 -0
  323. package/engine/__pycache__/paths.cpython-312.pyc +0 -0
  324. package/engine/__pycache__/pilot.cpython-312.pyc +0 -0
  325. package/engine/__pycache__/planner.cpython-312.pyc +0 -0
  326. package/engine/__pycache__/project.cpython-312.pyc +0 -0
  327. package/engine/__pycache__/projections.cpython-312.pyc +0 -0
  328. package/engine/__pycache__/robustness.cpython-312.pyc +0 -0
  329. package/engine/__pycache__/run.cpython-312.pyc +0 -0
  330. package/engine/__pycache__/semantics.cpython-312.pyc +0 -0
  331. package/engine/__pycache__/study_design.cpython-312.pyc +0 -0
  332. package/engine/__pycache__/synthesis.cpython-312.pyc +0 -0
  333. package/engine/__pycache__/tribunal.cpython-312.pyc +0 -0
  334. package/engine/__pycache__/update.cpython-312.pyc +0 -0
  335. package/engine/__pycache__/versions.cpython-312.pyc +0 -0
  336. package/integrations/__pycache__/__init__.cpython-312.pyc +0 -0
  337. package/integrations/__pycache__/agent_mcp.cpython-312.pyc +0 -0
  338. package/integrations/__pycache__/smart_web_fetch.cpython-312.pyc +0 -0
  339. package/retrieval/__pycache__/__init__.cpython-312.pyc +0 -0
  340. package/retrieval/__pycache__/corpus_store.cpython-312.pyc +0 -0
  341. package/retrieval/__pycache__/dedupe.cpython-312.pyc +0 -0
  342. package/retrieval/__pycache__/failures.cpython-312.pyc +0 -0
  343. package/retrieval/__pycache__/fetch.cpython-312.pyc +0 -0
  344. package/retrieval/__pycache__/search.cpython-312.pyc +0 -0
  345. package/retrieval/__pycache__/source.cpython-312.pyc +0 -0
  346. package/retrieval/__pycache__/validate.cpython-312.pyc +0 -0
  347. package/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
  348. package/scripts/__pycache__/benchmark.cpython-312.pyc +0 -0
  349. package/scripts/__pycache__/benchmark_evaluator.cpython-312.pyc +0 -0
  350. package/scripts/__pycache__/benchmark_judge.cpython-312.pyc +0 -0
  351. package/scripts/__pycache__/benchmark_routing.cpython-312.pyc +0 -0
  352. package/scripts/__pycache__/benchmark_v2.cpython-312.pyc +0 -0
  353. package/scripts/__pycache__/benchmark_v3.cpython-312.pyc +0 -0
  354. package/scripts/__pycache__/build_result.cpython-312.pyc +0 -0
  355. package/scripts/__pycache__/claim_audit.cpython-312.pyc +0 -0
  356. package/scripts/__pycache__/complexity_gate.cpython-312.pyc +0 -0
  357. package/scripts/__pycache__/compute_confidence.cpython-312.pyc +0 -0
  358. package/scripts/__pycache__/dashboard_server.cpython-312.pyc +0 -0
  359. package/scripts/__pycache__/did_regression.cpython-312.pyc +0 -0
  360. package/scripts/__pycache__/effect_calculator.cpython-312.pyc +0 -0
  361. package/scripts/__pycache__/evidence_matrix.cpython-312.pyc +0 -0
  362. package/scripts/__pycache__/evidence_score.cpython-312.pyc +0 -0
  363. package/scripts/__pycache__/evidence_semantics.cpython-312.pyc +0 -0
  364. package/scripts/__pycache__/fetch_benchmark.cpython-312.pyc +0 -0
  365. package/scripts/__pycache__/lint_report_layout.cpython-312.pyc +0 -0
  366. package/scripts/__pycache__/orchestrator.cpython-312.pyc +0 -0
  367. package/scripts/__pycache__/pre_verdict_gate.cpython-312.pyc +0 -0
  368. package/scripts/__pycache__/recompute_demo_quality.cpython-312.pyc +0 -0
  369. package/scripts/__pycache__/render_report.cpython-312.pyc +0 -0
  370. package/scripts/__pycache__/render_report_html.cpython-312.pyc +0 -0
  371. package/scripts/__pycache__/run_workspace.cpython-312.pyc +0 -0
  372. package/scripts/__pycache__/skill_lint.cpython-312.pyc +0 -0
  373. package/scripts/__pycache__/startup_probe.cpython-312.pyc +0 -0
  374. package/scripts/__pycache__/sync_killer_demo_report.cpython-312.pyc +0 -0
  375. package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.0.2.pyc +0 -0
  376. package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.1.1.pyc +0 -0
  377. package/scripts/__pycache__/validate_schema.cpython-312.pyc +0 -0
  378. package/visualization/eduevidence-report/scripts/__pycache__/adapter_contract.cpython-312.pyc +0 -0
  379. package/visualization/eduevidence-report/scripts/__pycache__/build_artifact_manifest.cpython-312.pyc +0 -0
  380. package/visualization/eduevidence-report/scripts/__pycache__/build_charts.cpython-312.pyc +0 -0
  381. package/visualization/eduevidence-report/scripts/__pycache__/build_figures.cpython-312.pyc +0 -0
  382. package/visualization/eduevidence-report/scripts/__pycache__/build_infographics.cpython-312.pyc +0 -0
  383. package/visualization/eduevidence-report/scripts/__pycache__/build_report.cpython-312.pyc +0 -0
  384. package/visualization/eduevidence-report/scripts/__pycache__/charts_data.cpython-312.pyc +0 -0
  385. package/visualization/eduevidence-report/scripts/__pycache__/lieflat_engine.cpython-312.pyc +0 -0
  386. package/visualization/eduevidence-report/scripts/__pycache__/zh_labels.cpython-312.pyc +0 -0
@@ -1,16 +1,40 @@
1
1
  # Task Brief — stage: present(角色:report-generation)
2
2
 
3
3
  ## 目标
4
- 汇总 result.json → result.zh.json(语义对齐、非机翻、数字/ID/枚举/URL 不变),并经
5
- visualization/eduevidence-report/scripts/build_report.py 烘焙双语报告
4
+ 汇总 `result.json` → `result.zh.json`(语义对齐、非机翻、数字/ID/枚举/URL 不变),并经
5
+ `visualization/eduevidence-report/scripts/build_report.py` 烘焙双语报告
6
6
  (主题生成时五选一,最终 HTML 只保留中英文切换)。
7
7
 
8
- ## 输入
9
- - result.json + result.zh.json(叙述字段必须先过语言门禁 check_language_parallel)
8
+ ## 前置输入
9
+ - `result.json` + `result.zh.json`(叙述字段必须先过语言门禁 `check_language_parallel`)
10
+ - 五主题:claude / academic / datalab / datalab-dark / presentation
10
11
 
11
12
  ## 产出
12
- - EduEvidence_Report.html / reports-5themes/*.html + report_spec.json + artifact_manifest.json
13
+ - `EduEvidence_Report.html` / `reports-5themes/*.html` + `report_spec.json` + `artifact_manifest.json`
13
14
 
14
- ## 规则
15
- - 语言门禁:叙述字段人话化(禁 E-xxx 堆砌/schema 键/null 残留/中英交叉污染);
16
- 表格/ID/URL/枚举保留可追溯性。
15
+ ## 执行规则
16
+ - 语言门禁:叙述字段人话化(禁 E-xxx 堆砌 / schema 键 / null 残留 / 中英交叉污染);
17
+ 表格/ID/URL/枚举保留可追溯性。
18
+ - 图表由 AI 写 `visual_layout` 计划、渲染器从 `result.json` 取数:**数值不得由模型写入**;
19
+ 未注册 type 显式报错,数据不足则该图抑制并记录原因。
20
+ - 主题在生成时锁定,HTML 内不提供运行时换肤。
21
+ - 报告与导出是投影:渲染失败不得改变任何科学结论。
22
+
23
+ ## 质量门
24
+ - [ ] `check_language_parallel` 通过(中英语义对齐)。
25
+ - [ ] 渲染完整性门通过(`REPORT_INVALID` 探针无命中,显示值可回溯到 `result.json`)。
26
+ - [ ] 布局不变量通过 `scripts/lint_report_layout.py`(含 390/768/1280 × brief/full)。
27
+ - [ ] 溯源表格保留(来源表、证据矩阵、Claim Trace),图表只作补充。
28
+
29
+ ## 失败模式与回退
30
+ | 失败 | 处理 |
31
+ |---|---|
32
+ | `REPORT_INVALID` | 阻断发布并重跑渲染;不得带缺陷投放。 |
33
+ | 双语不对齐 | 修复 `result.zh.json` 后重新烘焙。 |
34
+ | 数据不足以支撑某图 | 抑制该图并写明原因,不用占位或虚构数据补位。 |
35
+
36
+ ## 语言与呈现契约
37
+ 面向读者的人话报告;可核验行保持可点击、可回查。
38
+
39
+ ## 交接说明
40
+ 报告仅为投影产物;任何结论修订都回到科学阶段并生成新 revision。
@@ -0,0 +1,37 @@
1
+ # Task Brief — stage: projection(投影层,非科学阶段)
2
+
3
+ ## 目标
4
+ 仅从已完成的科学产物与 decision snapshot 生成报告与导出;投影错误不得改变任何科学结论。
5
+ 记录确切的来源 revision 与渲染产物哈希。
6
+
7
+ ## 前置输入
8
+ - 已通过各自 schema 与闸门的科学产物(frame / evidence / skeptic / methodology / verdict / 等)
9
+ - 当前 Graph Revision 与 decision snapshot 标识
10
+
11
+ ## 产出
12
+ - `result.json` / `result.zh.json`、`report_spec.json`、`report.html`、`reports-5themes/*.html`、
13
+ `artifact_manifest.json`(含来源 revision 与产物哈希)、各类导出(证据包 / 判题包)。
14
+
15
+ ## 执行规则
16
+ - 投影只读:**不得回写或修改任何科学产物**,不得据显示需要调整结论。
17
+ - 投影产物一律标注来源 revision 与渲染哈希,使报告可被追溯回具体快照。
18
+ - 呈现层与事实层分离:`result.json` / HTML / Markdown 都不是事实库。
19
+ - 渲染失败只影响该产物本身:阻断发布、重跑渲染,不降级、不改写结论。
20
+
21
+ ## 质量门
22
+ - [ ] `artifact_manifest.json` 记录来源 revision 与各产物哈希。
23
+ - [ ] 投影内容与快照一一对应,无"报告比证据更新"的情况。
24
+ - [ ] 渲染完整性门与布局不变量通过。
25
+
26
+ ## 失败模式与回退
27
+ | 失败 | 处理 |
28
+ |---|---|
29
+ | 渲染失败 | 阻断发布,重跑渲染(`REPORT_INVALID` → `block_publish_rerun_render`)。 |
30
+ | 快照缺失 | 回到上游科学阶段补齐;禁止用默认值或占位内容生成报告。 |
31
+ | 报告与快照不一致 | 以快照为准重建投影。 |
32
+
33
+ ## 语言与呈现契约
34
+ 面向读者的人话呈现;可追溯行(ID / URL / 数值)保持可核验。
35
+
36
+ ## 交接说明
37
+ 投影产物可自由删除重建;重建不应改变任何科学结论或修订历史。
@@ -4,12 +4,42 @@
4
4
  按 Frame 的 scope 与 inclusion criteria 检索支持证据与独立反方证据;只检索,不下结论。
5
5
  Fetch/Validate 是 Retrieve 内部强制 gate(RULE 2:snippet ≠ 证据内容)。
6
6
 
7
- ## 输入
8
- - frame.json(检索边界、纳排标准)
7
+ ## 前置输入
8
+ - `frame.json`(检索边界、纳排标准)
9
+ - 复杂度等级对应的检索预算(S/M/L)
9
10
 
10
11
  ## 产出
11
- - sources.jsonl:每行一个 Source Object(source_id/title/canonical_url/authority_level),
12
- 经 retrieval/validate.py 校验;抓取内容存 fetch/(raw + clean + provenance + fallback_chain)。
12
+ - `sources.jsonl`:每行一个 Source Object(source_id / title / canonical_url / authority_level),
13
+ 经 `retrieval/validate.py` 校验;抓取内容存 `fetch/`(raw + clean + provenance + fallback_chain)。
14
+ - 检索审计导出(`scripts/search_provenance.py`):`search-provenance.json`、`search-attempts.jsonl`、
15
+ `source-screening.csv`、`exclusion-log.csv`;Sciverse 通道命中另写 `chunks.jsonl`(定位子)。
13
16
 
14
- ## 规则
15
- - 来源权威等级可验证(DOI/期刊/机构),禁止编造 canonical URL;检索记录真实来源。
17
+ ## 执行规则
18
+ - **反方证据必须独立构造查询**(`purpose=counter_evidence`),不得复用支持证据的检索式。
19
+ - 先写 `SearchPlan` 再执行;每条查询、每次 provider 尝试、每个排除决定都要留痕。
20
+ - 来源权威等级可验证(DOI/期刊/机构),禁止编造 canonical URL;无 DOI 且无 URL 的记录标 `needs_manual_location`,
21
+ 进入人工筛选,不得伪造定位。
22
+ - **snippet/abstract 只是发现线索**:必须经 `retrieval/fetch.py` 抓取并通过 `retrieval/validate.py` 才可作为证据内容。
23
+ - Sciverse 通道(`SCIVERSE_API_TOKEN`):`/agentic-search` 返回的是 chunk 定位子,必须经 `/content` 读原文并过校验门。
24
+ - 检索合规见 `references/retrieval-compliance.md`(robots、限速、paywall、署名与缓存政策)。
25
+
26
+ ## 质量门
27
+ - [ ] `sources.jsonl` 每行通过 `schemas/source.schema.json`。
28
+ - [ ] 审计导出四件套齐全,且反方查询计数 > 0。
29
+ - [ ] 每条进入证据链的来源都有 FETCH_VALID 或经规则确认的 FETCH_PARTIAL。
30
+ - [ ] 排除记录写明原因,人工筛选项显式标注。
31
+
32
+ ## 失败模式与回退
33
+ | 失败 | 处理 |
34
+ |---|---|
35
+ | `SEARCH_NO_RESULT` | 放宽词族、切换 provider,或记录 negative-search record;不得静默降低证据标准。 |
36
+ | `FETCH_FAILED` | 走 provider 降级链;链尽则弃用该来源并回退到检索。 |
37
+ | `FETCH_PARTIAL` | 需规则或人工确认后才可进入抽取。 |
38
+ | `SOURCE_INVALID` | 弃用并寻找替代来源。 |
39
+ | `SOURCE_DUPLICATE` | 合并同一论文的镜像 URL,保留最高权威等级条目。 |
40
+
41
+ ## 语言与呈现契约
42
+ 筛选理由与排除原因用人话表述;来源标题保留原文,不改写、不翻译。
43
+
44
+ ## 交接说明
45
+ `sources.jsonl` + `fetch/` 是 Extract 的唯一输入;snippet 不得作为抽取依据随链传递。
@@ -0,0 +1,85 @@
1
+ ---
2
+ name: decision-and-pilot
3
+ description: Convert a bounded evidence decision into a reversible, measurable pilot.
4
+ ---
5
+
6
+ # Decision & Pilot
7
+
8
+ Use only after an Evidence Review has produced an auditable decision snapshot. Add `Intervene` with a minimal pilot, explicit stop conditions, owner, population, and outcome measures. A pilot is not an adoption claim.
9
+
10
+ When this workflow is reached from Evidence Autoresearch, require the bridge in `references/autoresearch.md`: the KnowledgeGap is HIGH-DVI and decision-material, remains unresolved, bounded secondary search is saturated, and the empirical study is ethically/operationally feasible. Then still pass the existing grounded StudyDesign gate; "few papers found" alone never authorizes a pilot.
11
+
12
+ ## When this workflow applies
13
+
14
+ - The review reached `PILOT` (or `ADOPT` with conditions) and the decision must become something a team can actually run.
15
+ - The user asks for an intervention plan, a rollout, a phased adoption, a stop rule, or "what would we do next week".
16
+ - A bounded empirical gap must be closed before the institution can move further.
17
+
18
+ Not for: producing the review itself (`evidence-review.md`), analysing data that already exists (`evaluate-and-update.md`), or recommending institution-wide deployment — that is an adoption claim this workflow is designed to prevent.
19
+
20
+ ## Prerequisites
21
+
22
+ 1. A completed, schema-valid `final_verdict.json` that passed the Pre-Verdict Gate. A pilot design without a review is a guess with extra steps.
23
+ 2. An applicability statement — the pilot population must sit inside the supported population.
24
+ 3. If the pilot closes an empirical gap: an explicit evidence-grounded KnowledgeGap ID. No KnowledgeGap, no study design.
25
+
26
+ ## Runbook
27
+
28
+ | # | Stage | Role | Input | Artifact | Gate |
29
+ |---|---|---|---|---|---|
30
+ | 1–7 | (inherit the review) | — | prior run | `final_verdict.json` + `applicability.json` | the review's own gates must be green |
31
+ | 8 | Intervene | intervention-designer | verdict + frame | `intervention.json` | `schemas/intervention.schema.json`; minimal reversible pilot, not a deployment plan |
32
+ | 8b | (grounding check) | — | `intervention.json` | KnowledgeGap reference | `scripts/complexity_gate.py` + grounded StudyDesign gate |
33
+ | 9 | Evaluate | evaluation-designer | `intervention.json` + verdict | `evaluation.json` | `schemas/evaluation.schema.json`; task vs learning separated, retention and transfer present |
34
+
35
+ ### Stage 8 — Intervene
36
+
37
+ Design the minimum viable pilot: phased rollout with explicit usage rules and guardrails, an owner, the participating population, and the evidence it aligns to. Every phase needs a **stop condition** (including a harm/risk stop) and a decision point — weeks, not quarters. Resist scope creep: a pilot that cannot be stopped cheaply is not a pilot.
38
+
39
+ ### Stage 8b — Grounding check
40
+
41
+ A design may proceed only when it answers a real, unresolved gap that the review identified and the evidence cannot close. If the gap is already answered by existing evidence, the correct output is an applicability-bounded decision, not a new trial.
42
+
43
+ ### Stage 9 — Evaluate
44
+
45
+ Define the measurement plan: baseline, immediate post-test, retention, and transfer, plus process and risk indicators. Success thresholds must be pre-registered; failure and stop thresholds are equally mandatory. Make the analysis plan explicit enough that `scripts/did_regression.py` can execute it on the returned data without further decisions.
46
+
47
+ ## Failure handling and fallbacks
48
+
49
+ | Failure | Handling |
50
+ |---|---|
51
+ | `NEEDS_USER_CONTEXT` | Ask for population, duration, staffing, and constraints; never invent an operating context. |
52
+ | `INSUFFICIENT_EVIDENCE` | Stop here and return to the review — a pilot cannot substitute for missing evidence about safety or harm. |
53
+ | `SCOPE_MISMATCH` | Shrink the pilot population until it sits inside the supported population. |
54
+ | No grounded KnowledgeGap | Do not design the study; report what evidence would be needed instead. |
55
+ | Ethics review unresolved | Block the pilot; see `skill/sub-skills/ethics-review/SKILL.md`. |
56
+
57
+ ## Human hand-off points
58
+
59
+ - Before the pilot design is accepted: the course owner confirms feasibility, staffing, and time budget.
60
+ - Before enrolment: ethics/IRB review where human participants or personal telemetry are involved.
61
+ - Before every phase transition: the stop-condition check is a human decision, not an automatic continuation.
62
+
63
+ ## Resuming and updating
64
+
65
+ Pilot outcome data returns through `reference/` and is re-injected by the `evaluate-and-update` workflow, which commits a new Evidence Graph revision and a new decision snapshot. Never edit a pilot's success threshold after seeing the data.
66
+
67
+ ## Minimal example
68
+
69
+ ```bash
70
+ eduevidence project create --question "Unguarded AI coding assistance in CS1" --domain education # policy / other registered domains work identically
71
+ eduevidence project show --project PRJ-... # confirm the decision snapshot
72
+ eduevidence study design --project PRJ-... --gap GAP-RETENTION-001 # grounded design
73
+ # write intervention.json (phases + stop conditions) and evaluation.json (thresholds)
74
+ eduevidence pilot register --project PRJ-... --decision DEC-... --title "Phased CS1 pilot"
75
+ ```
76
+
77
+ ## Acceptance checklist
78
+
79
+ - [ ] The pilot traces to a schema-valid verdict and an applicability boundary.
80
+ - [ ] Every phase has an owner, a duration, a stop condition, and a decision point.
81
+ - [ ] Guardrails and usage rules are explicit (what participants may and may not do).
82
+ - [ ] Evaluation separates task performance from learning and includes retention + transfer.
83
+ - [ ] Success and failure thresholds were set before enrolment.
84
+ - [ ] The KnowledgeGap reference exists, or the workflow exited without a study design.
85
+ - [ ] Nothing in the output claims adoption, deployment, or proven benefit.
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: evaluate-and-update
3
+ description: Re-inject validated outcome data into an evidence graph and re-adjudicate.
4
+ ---
5
+
6
+ # Evaluate & Update
7
+
8
+ Use when pilot or field data exists. Validate provenance and missingness before analysis, fail closed when inference is not estimable, commit a graph revision, then produce a new decision snapshot and a decision diff.
9
+
10
+ For autonomous/living refreshes, preserve prior revisions and treat the newly re-adjudicated decision as a candidate update until the applicable review/human gate accepts it. New evidence does not need to flip the action; unchanged action with changed certainty, applicability, or boundary is a valid revision.
11
+
12
+ ## When this workflow applies
13
+
14
+ - Pilot, field, or survey data has been collected and must now update the decision.
15
+ - New literature or a retraction changes what the existing decision can rest on.
16
+ - A scheduled Living Evidence refresh fires and must feed a decision diff.
17
+
18
+ Not for: running the original review (`evidence-review.md`) or designing the pilot that produced the data (`decision-and-pilot.md`).
19
+
20
+ ## Prerequisites
21
+
22
+ 1. The dataset plus its collection provenance: who collected it, when, from which population, under which consent.
23
+ 2. The prior decision snapshot and the pilot's pre-registered thresholds — they must not be revised now.
24
+ 3. Confirmation that the analysis plan was fixed before the data arrived.
25
+
26
+ ## Runbook
27
+
28
+ | # | Stage | Role | Input | Artifact | Gate |
29
+ |---|---|---|---|---|---|
30
+ | 1 | Validate data | (deterministic) | raw dataset | `dataset-manifest` | provenance, hash, and missingness checked before any analysis |
31
+ | 2 | Analyse | evaluation-designer / `data-analysis` | manifest + analysis plan | `analysis-run` | fail closed when not estimable; never fabricate p-values |
32
+ | 3 | Merge | (deterministic) | analysis + prior graph | new Evidence Graph revision | append-only; prior revisions preserved |
33
+ | 4 | Re-adjudicate | evidence-judge | revised graph | new decision snapshot | verdict schema + Pre-Verdict Gate re-run |
34
+ | 5 | Diff | (deterministic) | old vs new snapshot | `decision-diff` | every change states which evidence caused it |
35
+
36
+ ### Step 1 — Validate before analysing
37
+
38
+ Profile the dataset for missingness, attrition, and provenance. `provenance/hash/missingness before analysis` is a hard gate: an undocumented dataset is not evidence, and a treatment/control label that cannot be verified is not a comparison.
39
+
40
+ ### Step 2 — Analyse under the pre-registered plan
41
+
42
+ Run the fixed plan — for the standard classroom case, Difference-in-Differences via `scripts/did_regression.py`, with Hedges' g via `scripts/effect_calculator.py`. If the design is not estimable (no baseline, no control, attrition beyond tolerance), the correct output is `ANALYSIS_NOT_ESTIMABLE`, not a weaker statistic presented as if it were the plan.
43
+
44
+ ### Step 3 — Commit a revision, never an overwrite
45
+
46
+ A local finding enters the graph as a new node (`EVD-LOCAL-*`) and a new graph revision. Existing sources, findings, and prior decisions stay untouched — the Single Writer rule applies to the commit.
47
+
48
+ ### Step 4 — Re-adjudicate against the whole body of evidence
49
+
50
+ Local data is one study among many. Re-run the four-state decision over the complete evidence set; a single favourable classroom result never outvotes a body of contrary evidence, and a null local result does not erase positive evidence elsewhere.
51
+
52
+ ### Step 5 — Publish a decision diff
53
+
54
+ The deliverable is the diff: what changed in action, confidence, applicability, or boundary, and which evidence moved each one. Unchanged action with changed uncertainty is a real result and should be reported as such.
55
+
56
+ ## Failure handling and fallbacks
57
+
58
+ | Failure | Handling |
59
+ |---|---|
60
+ | `ANALYSIS_NOT_ESTIMABLE` / `ANALYSIS_CAPABILITY_UNAVAILABLE` | Fail closed: report the design limitation; never substitute a weaker estimator silently. |
61
+ | Missingness above tolerance | Report attrition explicitly; downgrade certainty rather than dropping participants silently. |
62
+ | Thresholds changed post-hoc | Stop; the change is a protocol deviation and must be recorded, not absorbed. |
63
+ | New evidence contradicts on method only | Keep the finding, strip its support role (methodology gate). |
64
+ | Retraction of a cited source | Run `scripts/retraction_watch.py`, remove the source's support, re-adjudicate. |
65
+
66
+ ## Human hand-off points
67
+
68
+ - Before analysis: data owner confirms consent and de-identification.
69
+ - Before the new decision is effective: the review/human gate accepts or rejects the candidate update (`living` refresh).
70
+ - When the diff changes a stop condition: the course owner decides whether the pilot continues.
71
+
72
+ ## Resuming and updating
73
+
74
+ Autonomous refreshes create candidate updates only. Living Evidence subscriptions keep prior revisions and surface each refresh as a diff for acceptance; nothing overwrites a published decision. Repeated no-change refreshes are recorded, not re-announced.
75
+
76
+ ## Minimal example
77
+
78
+ ```bash
79
+ eduevidence data ingest --project PRJ-... --file pilot-results.csv
80
+ eduevidence analyze --project PRJ-... --outcome retention --design did
81
+ eduevidence adjudicate --project PRJ-... # new decision snapshot + diff
82
+ eduevidence living status --project PRJ-... # scheduled refresh state
83
+ ```
84
+
85
+ ## Acceptance checklist
86
+
87
+ - [ ] Dataset provenance, hashing, and missingness recorded before analysis.
88
+ - [ ] Analysis followed the pre-registered plan; non-estimable designs failed closed.
89
+ - [ ] A new graph revision was committed; no prior revision was modified.
90
+ - [ ] Re-adjudication used the full evidence set, not the local data alone.
91
+ - [ ] The decision diff states each change and the evidence that caused it.
92
+ - [ ] Any retracted source was removed from the support structure.
93
+
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: evidence-review
3
+ description: Traceable evidence review with mandatory counter-evidence and methodology gates.
4
+ ---
5
+
6
+ # Evidence Review
7
+
8
+ Use for a question that needs a bounded, decision-grade evidence assessment.
9
+ Run `Frame → Retrieve → Extract → Challenge → Audit → Adjudicate → Applicability`.
10
+
11
+ The required outputs are a search plan and attempt log, validated sources, claim-level evidence links, a methodology audit, a decision boundary, and applicability limits. Search snippets are discovery metadata, never evidence.
12
+
13
+ When the user asks to continue autonomously, identify the next most decision-relevant evidence, or keep iterating until the evidence state reaches a bounded stopping condition, load `references/autoresearch.md`. Keep the public workflow unchanged: Evidence Autoresearch is a meta-layer over this review, not a fourth user-facing workflow. Preserve append-only evidence and the Single Writer rule.
14
+
15
+ ## When this workflow applies
16
+
17
+ - A decision question can be answered from **existing** research — across any field: teaching methods, curriculums, AI tools, policies, programmes, clinical or organisational practice, cultural or media interventions.
18
+ - The user needs to know what the evidence supports, what it cannot support, for whom, and under which conditions.
19
+ - The user explicitly asks for a review, synthesis, appraisal, or an evidence-bounded recommendation.
20
+
21
+ Not for: designing a new study or pilot (use `decision-and-pilot.md`), re-injecting field data into an existing decision (use `evaluate-and-update.md`), or a quick literature list with no decision target.
22
+
23
+ The **domain** changes the frame vocabulary, not the protocol. `education` frames populations as learner/course; `policy` frames them as decision object/population/stakeholders; other domains register their own frame contract under `domains/`. Every stage below is domain-independent.
24
+
25
+ ## Prerequisites
26
+
27
+ 1. A research question plus the decision it feeds — if the decision target is missing, run the `frame` stage before anything else.
28
+ 2. A run workspace (`eduevidence run --question "..."`) so every artifact has a durable home; do not carry state in chat.
29
+ 3. A Complexity Gate level (S/M/L) from `scripts/complexity_gate.py`; it fixes the retrieval breadth, not the protocol.
30
+
31
+ ## Runbook
32
+
33
+ | # | Stage | Role | Input | Artifact | Gate |
34
+ |---|---|---|---|---|---|
35
+ | 1 | Frame | research-planner | user question | `frame.json` | the selected domain's frame schema (`domains/<id>/manifest.json` → `frame_schema`); no intervention advice before framing completes |
36
+ | 2 | Retrieve | evidence-retriever | `frame.json` | `sources.jsonl` + `fetch/` | `schemas/source.schema.json`; Fetch/Validate gate inside Retrieve (RULE 2) |
37
+ | 3 | Extract | evidence-analyst | `sources.jsonl` + `fetch/` | `evidence.jsonl` | `schemas/evidence.schema.json`; outcome separation (task ≠ learning) |
38
+ | 4 | Challenge | skeptic | `evidence.jsonl` | `skeptic.json` | all 9 fixed checks executed; no fabricated counter-evidence |
39
+ | 5 | Audit | method-reviewer | `evidence.jsonl` + fetched text | `methodology.json` | `schemas/methodology.schema.json`; `task_vs_learning_guard` present |
40
+ | 6 | Adjudicate | evidence-judge | all of the above | `raw_verdict.json` → `final_verdict.json` | `schemas/verdict.schema.json`; Pre-Verdict Gate before finalising |
41
+ | 7 | Applicability | evidence-judge | `evidence.jsonl` + verdict | `applicability.json` | supported population, conditions, exclusions and uncertainty stated |
42
+
43
+ Execute the stages in order. A stage may be delegated to a sub-agent, a script, or the host model itself — the artifact and its gate are what count, never which adapter produced it.
44
+
45
+ ### Stage 1 — Frame
46
+
47
+ Produce the PICO-style frame with decision target, scope, and inclusion/exclusion criteria, using the vocabulary of the selected domain (education: learner/course; policy: decision object/population/stakeholders). Ask the user only for inputs that cannot be inferred (target population, intervention variant, comparison, primary outcome); never invent defaults for them. Emit the suggested complexity level alongside the frame.
48
+
49
+ ### Stage 2 — Retrieve
50
+
51
+ Write an auditable search plan (`SearchPlan`) with core, expansion, and **independent counter-evidence** queries, then execute it through `scripts/search_provenance.py` so attempts, screening decisions and exclusions are exported. `Fetch`/`Validate` are mandatory gates inside this stage: a snippet or abstract is a discovery aid; only fetched, validated content can be extracted from. Zero-config channels (OpenAlex / Semantic Scholar / CrossRef / AIHot / AgentSearch) work without keys; Sciverse (`SCIVERSE_API_TOKEN`) adds citation-grade retrieval with `doc_id`/`offset` provenance, and its chunk hits must be expanded through `/content` before use.
52
+
53
+ ### Stage 3 — Extract
54
+
55
+ Extract claim-level Evidence Objects with effect sizes, CIs, sample sizes, outcome type and source location. Keep `relation_to_claim` on the link, never on the study. Do not merge task-performance and learning outcomes into one record.
56
+
57
+ ### Stage 4 — Challenge
58
+
59
+ Run the nine fixed checks: null results, negative results, contradictory findings, alternative explanations, measurement mismatch, sampling bias, novelty effect, AI dependency, scope overreach. If nothing is found, state `NO CONTRADICTORY EVIDENCE FOUND` — absence of counter-evidence is a finding, not a gap to fill with invented sources.
60
+
61
+ ### Stage 5 — Audit
62
+
63
+ Appraise each study against the methodology checklist and WWC 5.0 / GRADE-informed criteria. The auditor judges whether the evidence stands, never what it says. Record the `task_vs_learning_guard` verdict explicitly.
64
+
65
+ ### Stage 6 — Adjudicate
66
+
67
+ Integrate frame, evidence matrix, skeptic findings and methodology audit into one of four states — `ADOPT` / `PILOT` / `REJECT` / `INSUFFICIENT EVIDENCE` — with `what_can_be_claimed` / `what_cannot_be_claimed` and a confidence breakdown. Run `scripts/pre_verdict_gate.py` **before** the verdict is treated as final; a critical failure caps confidence and forbids a high-confidence adoption claim.
68
+
69
+ ### Stage 7 — Applicability
70
+
71
+ State who the evidence applies to, in which contexts, for which outcomes, under which conditions, and where it stops. A positive average effect never transfers automatically.
72
+
73
+ ## Failure handling and fallbacks
74
+
75
+ | Failure | Handling |
76
+ |---|---|
77
+ | `SEARCH_NO_RESULT` | Broaden terms, switch discovery provider, or record a negative-search record — never lower the evidence bar silently. |
78
+ | `FETCH_FAILED` | Run the provider degradation chain; if it is exhausted, discard the source and return to Retrieve. |
79
+ | `FETCH_PARTIAL` | Require rule or human confirmation before extraction; never reconstruct missing text from memory. |
80
+ | `SCHEMA_INVALID` | Block the stage, repair the artifact, re-run the gate; do not advance. |
81
+ | `METHODOLOGY_TOO_WEAK` | Keep the study in the matrix but strip its support role. |
82
+ | `CONFLICT_UNRESOLVED` | Stay uncertain; do not force adjudication. |
83
+ | `INSUFFICIENT_EVIDENCE` | Emit `INSUFFICIENT EVIDENCE` with the specific evidence that would change the decision. |
84
+
85
+ ## Human hand-off points
86
+
87
+ - After Frame, when population / intervention / comparison / outcome inputs are missing (`NEEDS_USER_CONTEXT`).
88
+ - After Challenge, when counter-evidence is absent, thin, or directly contradicts the working conclusion.
89
+ - After Adjudicate, before the decision is used for a real change in practice, curriculum, policy or operations.
90
+
91
+ ## Resuming and updating
92
+
93
+ Resume with `eduevidence resume --run-id <id>`: the workspace continues from the first stage whose artifact is missing or schema-invalid. Evidence is append-only — a correction adds a new revision and a new decision snapshot; never overwrite an earlier one. To refresh the same question later, run the `evaluate-and-update` workflow so the change lands as a decision diff rather than a silently rewritten report.
94
+
95
+ ## Minimal example
96
+
97
+ ```bash
98
+ eduevidence run --question "Should first-year CS students use generative AI coding assistants?" --run-id ai-cs1
99
+ python scripts/search_provenance.py "first-year CS generative AI coding assistant learning outcomes" \
100
+ --out runs/ai-cs1/provenance --concept "AI coding assistant"
101
+ eduevidence status --run-id ai-cs1
102
+ eduevidence gate --run-id ai-cs1
103
+ eduevidence report --run-id ai-cs1 --theme claude
104
+ ```
105
+
106
+ The shipped reference result for this exact question is `examples/ai-coding-assistant-evidence/` — read its `frame.json` → `sources.jsonl` → `evidence.jsonl` → `skeptic.json` → `methodology.json` → `verdict.json` chain to see what a completed review looks like.
107
+
108
+ ## Acceptance checklist
109
+
110
+ - [ ] Frame passes its schema and states scope plus inclusion/exclusion criteria.
111
+ - [ ] Search plan shows core, expansion and independent counter-evidence queries with attempts and exclusions exported.
112
+ - [ ] Every extracted finding traces to fetched, validated content — no snippet-only evidence.
113
+ - [ ] All nine skeptic checks ran; the contradiction statement is explicit either way.
114
+ - [ ] Methodology audit separates task performance from learning and records the guard verdict.
115
+ - [ ] Verdict is one of the four states, carries its confidence breakdown, and passed the Pre-Verdict Gate.
116
+ - [ ] Applicability states population, conditions, outcome limits and uncertainty.
117
+ - [ ] Reports and exports are projections of the stored artifacts, not a new source of truth.
@@ -17,7 +17,7 @@ body { margin:0; background:var(--bg); color:var(--text);
17
17
  .controls { width:calc(100% - 36px); max-width:1200px; margin:0 auto 16px; padding:12px clamp(0px,1vw,12px); display:flex; gap:18px; flex-wrap:wrap; align-items:center;
18
18
  border-bottom:1px solid var(--border); }
19
19
  .report-header { border-bottom:1px solid var(--border); padding-bottom:16px; margin-bottom:24px; }
20
- .report-header h1 { font-family:var(--font-head); font-size:1.9rem; margin:0 0 8px; color:var(--text); }
20
+ .report-header h1 { font-family:var(--font-head); font-size:1.55rem; margin:0 0 8px; color:var(--text); }
21
21
  .report-header .meta { color:var(--insufficient); font-size:.85rem; }
22
22
  .lang-switcher { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
23
23
  .lang-switcher span { font-size:.82rem; color:var(--insufficient); }
@@ -300,7 +300,7 @@ button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible
300
300
  .controls { width:calc(100% - 24px); margin-bottom:10px; padding-left:8px; padding-right:8px; }
301
301
  .report-shell { width:100%; padding:12px 14px 56px; }
302
302
  .report-header { width:100%; }
303
- .report-header h1 { font-size:1.55rem; overflow-wrap:anywhere; }
303
+ .report-header h1 { font-size:1.3rem; overflow-wrap:anywhere; }
304
304
  .report-header .meta, .brief-source h3, .claim-cell, .detail-body, .source-detail-grid dd { overflow-wrap:anywhere; word-break:break-word; }
305
305
  .data-table { font-size:.78rem; }
306
306
  .hero-insights, .tribunal-grid, .scope-grid, .retrieval-grid, .brief-source-grid, .method-audit-grid { grid-template-columns:1fr; }