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
@@ -0,0 +1,72 @@
1
+ {
2
+ "search_performed": true,
3
+ "method": "Counter-evidence challenge over the three registry-verified sources in this pack: null and negative results, contradictory findings, alternative explanations, measurement mismatch, sampling bias, novelty effect, AI dependency and scope overreach. Every finding cites records already in evidence.jsonl; nothing was invented for the challenge. The AI-dependency check is marked not_found because this corpus contains no study of deskilling or reliance in customer-support work.",
4
+ "skeptic_findings": [
5
+ {
6
+ "check": "1_null_result",
7
+ "status": "found",
8
+ "detail": "No null result is recorded in this corpus, and that absence is itself declared: E-001 reports faster handling and E-002/E-003 report direction changes, so no included study measured a null effect on the support outcome. The pack states that local net cost and sustained performance were never measured.",
9
+ "related_evidence_ids": ["E-001", "E-002", "E-003"]
10
+ },
11
+ {
12
+ "check": "2_negative_result",
13
+ "status": "found",
14
+ "detail": "E-003 finds correctness about 19 percentage points lower on tasks outside the AI capability frontier, and E-004 records small quality declines among the most experienced, highest-skilled support staff. Both are negative results bound to the decision, not incidental notes.",
15
+ "related_evidence_ids": ["E-003", "E-004"]
16
+ },
17
+ {
18
+ "check": "3_contradictory_evidence",
19
+ "status": "found",
20
+ "detail": "E-001 and E-004 come from the same cohort but point in opposite directions for different subgroups: handling speed improves overall while the most experienced staff show a small quality decline. The verdict therefore cannot claim uniform benefit.",
21
+ "related_evidence_ids": ["E-001", "E-004"]
22
+ },
23
+ {
24
+ "check": "4_alternative_explanation",
25
+ "status": "found",
26
+ "detail": "E-001 is a staggered non-random rollout, so the efficiency gain is subject to selection and timing confounders rather than clean random assignment. E-002 and E-003 used brief incentivized tasks and an experimental business case, so task familiarity and context differences are alternative explanations for the observed direction.",
27
+ "related_evidence_ids": ["E-001", "E-002", "E-003"]
28
+ },
29
+ {
30
+ "check": "5_measurement_mismatch",
31
+ "status": "found",
32
+ "detail": "The corpus measures handling time, throughput and short-task correctness, not verified resolution quality, privacy incidents, net cost or sustained performance. E-002 measured writing tasks and E-003 measured consultants, so neither measures the outcome the support decision is actually about.",
33
+ "related_evidence_ids": ["E-002", "E-003"]
34
+ },
35
+ {
36
+ "check": "6_sampling_bias",
37
+ "status": "found",
38
+ "detail": "The only direct evidence is one firm, one tool and one support product cohort (E-001/E-004); E-003 is a single consulting population. Purposive selection from three studies cannot represent the population of enterprise support teams, and the pack records this as a stated limitation rather than a systematic search.",
39
+ "related_evidence_ids": ["E-001", "E-003", "E-004"]
40
+ },
41
+ {
42
+ "check": "7_novelty_effect",
43
+ "status": "found",
44
+ "detail": "E-001 observes the rollout period itself, so a novelty or productivity-signalling effect cannot be separated from a durable change; neither the writing nor the consulting experiment covers a comparable multi-month horizon in the support setting.",
45
+ "related_evidence_ids": ["E-001"]
46
+ },
47
+ {
48
+ "check": "8_ai_dependency",
49
+ "status": "not_found",
50
+ "detail": "No study in this corpus measures deskilling or over-reliance in customer-support work. The pack records it as an unmeasured risk in the intervention guardrails, and the absence of evidence here is not evidence of absence.",
51
+ "related_evidence_ids": []
52
+ },
53
+ {
54
+ "check": "9_scope_overreach",
55
+ "status": "found",
56
+ "detail": "Claiming universal gains, autonomous deployment safety, privacy protection or reduced staffing exceeds this corpus: no included study measures privacy incidents, local net cost or subgroup service quality, and only the support study is direct.",
57
+ "related_evidence_ids": ["E-001", "E-002", "E-003", "E-004"]
58
+ }
59
+ ],
60
+ "contradictory_evidence_found": true,
61
+ "threats_to_validity": [
62
+ "one firm, one tool, staggered non-random rollout",
63
+ "only one of three studies is direct for the support setting",
64
+ "the writing and consulting studies are indirect and use short incentivized tasks",
65
+ "privacy, net cost and sustained performance were never measured",
66
+ "purposive selection of three studies cannot exclude other direct evidence"
67
+ ],
68
+ "extensions": {
69
+ "data_origin": "manual_curated",
70
+ "note": "Challenge stage written from the pack corpus; no new sources were retrieved for this record."
71
+ }
72
+ }
@@ -0,0 +1,3 @@
1
+ {"source_id": "S-001", "title": "Generative AI at Work", "authors": ["Erik Brynjolfsson", "Danielle Li", "Lindsey Raymond"], "year": 2025, "doi": "10.1093/qje/qjae044", "canonical_url": "https://academic.oup.com/qje/article/140/2/889/7990658", "source_type": "journal_article", "authority_level": "tier1_paper_doi", "status": "VALID", "source_locator": {"type": "section", "section": "Abstract; III.B and Table I; IV.A and Table II; IV.B; VIII"}, "fetch": {"original_url": "https://academic.oup.com/qje/article/140/2/889/7990658", "fetch_method": "native", "fetch_provider": "builtin", "fetch_status": "FETCH_VALID"}, "extensions": {"verified_on": "2026-09-08", "data_origin": "manual_curated", "version": "published QJE article", "verification_scope": "Full primary text read through web tool; no Crossref registry or retraction check claimed."}}
2
+ {"source_id": "S-002", "title": "Experimental evidence on the productivity effects of generative artificial intelligence", "authors": ["Shakked Noy", "Whitney Zhang"], "year": 2023, "doi": "10.1126/science.adh2586", "canonical_url": "https://shakkednoy.com/Noy%20Zhang%20NBER%20SI.pdf", "source_type": "journal_article", "authority_level": "tier1_paper_doi", "status": "VALID", "source_locator": {"type": "section", "section": "Author manuscript pp. 1, 3–4, 7; Figure 1 (p. 12)"}, "fetch": {"original_url": "https://shakkednoy.com/Noy%20Zhang%20NBER%20SI.pdf", "fetch_method": "native", "fetch_provider": "builtin", "fetch_status": "FETCH_VALID"}, "extensions": {"verified_on": "2026-09-08", "data_origin": "manual_curated", "version": "author manuscript associated with Science 2023; not the March 444-person draft", "verification_scope": "Full primary text read through web tool; no Crossref registry or retraction check claimed."}}
3
+ {"source_id": "S-003", "title": "Navigating the Jagged Technological Frontier: Field Experimental Evidence of the Effects of Artificial Intelligence on Knowledge Worker Productivity and Quality", "authors": ["Fabrizio Dell’Acqua", "Edward McFowland III", "Ethan Mollick", "Hila Lifshitz-Assaf", "Katherine C. Kellogg", "Saran Rajendran", "Lisa Krayer", "François Candelon", "Karim R. Lakhani"], "year": 2026, "doi": "10.1287/orsc.2025.21838", "canonical_url": "https://pubsonline.informs.org/doi/10.1287/orsc.2025.21838", "source_type": "journal_article", "authority_level": "tier1_paper_doi", "status": "VALID", "source_locator": {"type": "section", "section": "Sections 3 and 4.2; Figure 5; Table 7"}, "fetch": {"original_url": "https://pubsonline.informs.org/doi/10.1287/orsc.2025.21838", "fetch_method": "native", "fetch_provider": "builtin", "fetch_status": "FETCH_VALID"}, "extensions": {"verified_on": "2026-09-08", "data_origin": "manual_curated", "version": "published Organization Science 2026 article", "verification_scope": "Full primary text read through web tool; no Crossref registry or retraction check claimed."}}
@@ -0,0 +1,9 @@
1
+ {
2
+ "status": "PASS",
3
+ "schema_objects_validated": 27,
4
+ "graph_roundtrip": "PASS",
5
+ "report_input_gates": "PASS",
6
+ "studio_scanned": "workplace-ai-assistant",
7
+ "studio_domain": "education",
8
+ "reports_generated": false
9
+ }
@@ -0,0 +1,78 @@
1
+ {
2
+ "decision_question": "Should an enterprise customer-support team introduce a generative AI assistant?",
3
+ "target_population": "Enterprise customer-support staff, stratified by tenure and baseline skill.",
4
+ "target_context": "Human-supervised support using an approved knowledge base.",
5
+ "recommended_action": "pilot",
6
+ "confidence": "Moderate",
7
+ "confidence_score": 0.578,
8
+ "confidence_policy_version": "2026-08-12.v3",
9
+ "raw_model_confidence": "Moderate",
10
+ "raw_model_confidence_breakdown": {
11
+ "score": 0.578,
12
+ "evidence_quality": 0.8,
13
+ "consistency": 0.0,
14
+ "directness": 0.75,
15
+ "evidence_count": 4,
16
+ "independent_studies": 3,
17
+ "independent_samples": 3,
18
+ "count_term": 0.75,
19
+ "conflict_penalty": 0.0,
20
+ "unsupported_penalty": 0.0,
21
+ "note": "Adjudicator-stated confidence before the deterministic override."
22
+ },
23
+ "independent_studies": 3,
24
+ "independent_samples": 3,
25
+ "supported_claims": [
26
+ "AI assistance can shorten customer chat handling in a bounded support setting; throughput is a separate outcome. — E-001",
27
+ "ChatGPT reduced time on short professional writing tasks; this is indirect evidence for customer support. — E-002",
28
+ "AI can reduce correctness on tasks outside its capability frontier; consulting evidence is indirect for support. — E-003",
29
+ "Experienced, high-skill support staff need separate quality monitoring rather than assumed uniform benefits. — E-004"
30
+ ],
31
+ "uncertain_claims": [
32
+ "Local net cost, privacy incident rates, subgroup service quality and sustained performance are not established by this selected evidence set [no direct evidence]."
33
+ ],
34
+ "decision_rationale": "A supervised pilot is warranted because one direct field study supports efficiency gains but also reveals heterogeneous quality effects. Indirect experiments identify task boundaries, while local safety and net value remain unknown.",
35
+ "strongest_support": "Supervised AI assistance improves handling speed and answer consistency in customer-support work, with quality maintained.",
36
+ "key_uncertainty": "Evidence comes from adjacent writing and advisory settings rather than the support floor, so transfer to live customer conversations is unproven.",
37
+ "main_risk": "Unsupervised or knowledge-base-free use can produce confident wrong answers to customers, and over-reliance erodes agent skill over time.",
38
+ "next_action": "Run a supervised pilot on approved knowledge bases with human review on every reply, and track escalation and correction rates.",
39
+ "methodology_summary": "One staggered-rollout quasi-experiment and two randomized experiments. Only the support study is direct; no pooled standardized effect or model benchmark was computed.",
40
+ "what_can_be_claimed": [
41
+ "Under human supervision on an approved knowledge base, AI assistance can shorten handling time while quality is monitored.",
42
+ "Benefits are not uniform across staff: the most experienced agents need their own quality monitoring."
43
+ ],
44
+ "what_cannot_be_claimed": [
45
+ "Universal gains, autonomous deployment safety, privacy protection, reduced staffing requirements or educational learning gains."
46
+ ],
47
+ "exceeds_evidence_boundary": [
48
+ "Claiming universal gains or that autonomous deployment is safe exceeds the boundary: no included study measures privacy incidents, local net cost or subgroup service quality."
49
+ ],
50
+ "missing_evidence": [
51
+ "Local net cost, privacy incident rates, subgroup service quality and sustained performance are not established by this selected evidence set [no direct evidence]."
52
+ ],
53
+ "applicability": {
54
+ "required_conditions": [
55
+ "Start with low-risk, knowledge-base-covered queues; agents inspect and edit every proposed reply.",
56
+ "Stratify by tenure and baseline skill; retain expert discretion and measure review workload.",
57
+ "Minimize and redact customer data, restrict access and retention, and review supplier data-use terms before a pilot.",
58
+ "Escalate unfamiliar, ambiguous, sensitive or high-stakes requests to qualified humans; no autonomous commitments."
59
+ ]
60
+ },
61
+ "extensions": {
62
+ "data_origin": "manual_curated",
63
+ "benchmark_eligible": false,
64
+ "note": "Confidence and the decision bound come from the deterministic policy in engine/decision_policy.py, enforced by the Pre-Verdict Gate; this record is a curated evidence selection, not a systematic review or a model run.",
65
+ "knowledge_gaps": [
66
+ {
67
+ "gap_id": "G-001",
68
+ "evidence_ids": [
69
+ "E-001",
70
+ "E-002",
71
+ "E-003",
72
+ "E-004"
73
+ ],
74
+ "summary": "Local net cost, privacy incident rates, subgroup service quality and sustained performance are not established by this selected evidence set [no direct evidence]."
75
+ }
76
+ ]
77
+ }
78
+ }
package/install.sh CHANGED
@@ -28,7 +28,7 @@ REPO_URL="https://github.com/37chengshan/eduevidence"
28
28
  SKILL_NAME="eduevidence"
29
29
  # Skill 本体(运行协议 + 确定性脚本 + 检索/集成层 + 展示层)。
30
30
  # retrieval/ 与 integrations/ 会被 scripts/ 直接 import;visualization/ 负责最终 HTML 渲染。
31
- SKILL_PAYLOAD=(SKILL.md engine domains skill references schemas scripts retrieval integrations visualization)
31
+ SKILL_PAYLOAD=(SKILL.md agents engine domains skill references schemas scripts retrieval integrations visualization web examples docs autoevolve eduevidence_cli.py)
32
32
  # Agent MCP 声明文件:安装完成后写入 AGENT_MCP_INSTALLED=1,供
33
33
  # integrations/agent_mcp.py 作为 env 后备来源读取(真实环境变量优先于该文件)。
34
34
  AGENT_MCP_ENV_FILE="${AGENT_MCP_ENV_FILE:-$HOME/.eduevidence/env}"
@@ -149,7 +149,7 @@ host_skill_root() {
149
149
 
150
150
  # ---------- 通用提示词(方式三:宿主不在支持列表时交给任意 AI) ----------
151
151
  UNIVERSAL_PROMPT="请把 https://github.com/37chengshan/eduevidence 仓库中的 EduEvidence 安装为 skill:
152
- 1. 将仓库根目录的 SKILL.md、skill/、references/、schemas/、scripts/、retrieval/、integrations/、visualization/ 复制到你的 skill 目录
152
+ 1. 将仓库根目录的 完整分发目录(含 SKILL.md、engine/、domains/、skill/、schemas/、scripts/、web/studio/ 等)复制到你的 skill 目录
153
153
  (如 ~/.claude/skills/eduevidence/、~/.omp/agent/skills/eduevidence/、~/.agents/skills/eduevidence/ 等),
154
154
  或按你的 skill 装载机制导入;
155
155
  2. 安装完成后确认能读取 SKILL.md,并能运行 scripts/ 下的确定性脚本;
@@ -268,13 +268,13 @@ local_setup() {
268
268
  # 5. 自检:Schema 校验 + 报告渲染
269
269
  echo "==> 自检:Schema 校验"
270
270
  python scripts/validate_schema.py --schema schemas/verdict.schema.json \
271
- --data examples/ai-coding-assistant/verdict.json
271
+ --data examples/ai-coding-assistant-evidence/verdict.json
272
272
  python scripts/validate_schema.py --schema schemas/evidence.schema.json \
273
- --data examples/ai-coding-assistant/evidence.jsonl
273
+ --data examples/ai-coding-assistant-evidence/evidence.jsonl
274
274
 
275
275
  echo "==> 自检:渲染双语 HTML 报告"
276
276
  python visualization/eduevidence-report/scripts/build_report.py \
277
- --result examples/ai-coding-assistant/result.json \
277
+ --result examples/ai-coding-assistant-evidence/result.json \
278
278
  --out /tmp/eduevidence-smoke.html
279
279
  rm -f /tmp/eduevidence-smoke.html
280
280
 
@@ -291,7 +291,7 @@ local_setup() {
291
291
  local_finish() {
292
292
  echo ""
293
293
  echo "安装完成。下一步:"
294
- echo " 1. 查看示例报告: open examples/ai-coding-assistant/EduEvidence_Report.html"
294
+ echo " 1. 查看示例报告: open examples/ai-coding-assistant-evidence/EduEvidence_Report.html"
295
295
  echo " 2. 渲染自己的 result.json(需同时准备 result.zh.json 中文平行数据):"
296
296
  echo " python visualization/eduevidence-report/scripts/build_report.py \\"
297
297
  echo " --result <你的 result.json> --out REPORT.html"
@@ -315,7 +315,7 @@ install_to_dir() {
315
315
  rm -rf "$dest"
316
316
  fi
317
317
  mkdir -p "$dest"
318
- cp -R "${SKILL_PAYLOAD[@]}" "$dest"/
318
+ python3 scripts/skill_payload.py "$PWD" "$dest"
319
319
  echo " ✅ 已安装: $dest"
320
320
  }
321
321
 
@@ -87,7 +87,7 @@ AGENT_MCP_APPROVAL_REQUIRED = "AGENT_MCP_APPROVAL_REQUIRED"
87
87
  # skeptic requires a *different model family* than the primary analysis;
88
88
  # that can never be satisfied by spawning the same model in another session.
89
89
  ROLE_REQUIREMENTS: dict[str, dict[str, Any]] = {
90
- "education-planner": {
90
+ "research-planner": {
91
91
  "reasoning": "high", "speed": None, "cost": None,
92
92
  "structured_output": None, "context": None, "tool_use": None,
93
93
  "multimodal": None,
@@ -134,7 +134,7 @@ ROLE_REQUIREMENTS: dict[str, dict[str, Any]] = {
134
134
  # Human-readable one-line task per role (for the user-facing recommendation
135
135
  # table). Display metadata only — not a routing decision.
136
136
  ROLE_TASKS: dict[str, str] = {
137
- "education-planner": "Framing:把教学问题转成 EducationResearchFrame",
137
+ "research-planner": "Framing:把教学问题转成 EducationResearchFrame",
138
138
  "evidence-retriever": "检索支持与反方证据,去重初筛",
139
139
  "evidence-analyst": "证据结构化抽取为 Evidence Objects",
140
140
  "skeptic": "独立反证:9 项检查,找 null/negative/contradictory 证据",
@@ -0,0 +1,146 @@
1
+ """TaskSpec-aware dispatch and acceptance adapter for Agent MCP.
2
+
3
+ Agent MCP remains the only implementation of CLI/model approval and spawn
4
+ payload construction. EduEvidence adds two scientific contract gates around
5
+ it:
6
+
7
+ 1. every delegated worker must carry a dispatch-ready TaskSpec;
8
+ 2. every returned worker payload must be reconstructed and validated in the
9
+ main process before any artifact can enter Judge context.
10
+
11
+ Workers are staging-only. Raw host output is never a Judge input.
12
+ """
13
+ from __future__ import annotations
14
+
15
+ from typing import Any, Callable
16
+
17
+ from engine.orchestration import ExecutionMode, TaskSpec
18
+ from engine.worker_result import (
19
+ ArtifactValidator,
20
+ WorkerResult,
21
+ require_validated_artifacts_for_judge,
22
+ validate_worker_output,
23
+ )
24
+ from integrations.agent_mcp import safe_spawn
25
+
26
+
27
+ TASKSPEC_REQUIRED = "TASKSPEC_REQUIRED"
28
+ TASKSPEC_INVALID = "TASKSPEC_INVALID"
29
+ WORKER_OUTPUT_REJECTED = "WORKER_OUTPUT_REJECTED"
30
+ HostExecutor = Callable[[dict[str, Any]], dict[str, Any]]
31
+
32
+
33
+ def dispatch_task(
34
+ task: TaskSpec,
35
+ prompt: str,
36
+ approval: dict[str, Any] | None,
37
+ *,
38
+ target_cli: str | None = None,
39
+ model: str | None = None,
40
+ allowed_clis: list[str] | None = None,
41
+ cwd: str = ".",
42
+ permission_mode: str = "plan",
43
+ context_mode: str = "compact",
44
+ summary_chars: int | None = None,
45
+ ) -> dict[str, Any]:
46
+ """Validate a dispatch-ready TaskSpec, then pass it through safe_spawn()."""
47
+ if not isinstance(task, TaskSpec):
48
+ return {
49
+ "status": TASKSPEC_REQUIRED,
50
+ "spawn_call": None,
51
+ "reason": "subagent dispatch requires a TaskSpec",
52
+ }
53
+ try:
54
+ task.validate_for_dispatch()
55
+ except ValueError as exc:
56
+ return {
57
+ "status": TASKSPEC_INVALID,
58
+ "spawn_call": None,
59
+ "reason": str(exc),
60
+ }
61
+ if task.execution_mode is not ExecutionMode.DELEGATED:
62
+ return {
63
+ "status": TASKSPEC_INVALID,
64
+ "spawn_call": None,
65
+ "reason": "only delegated TaskSpecs may be sent to Agent MCP",
66
+ }
67
+
68
+ worker_prompt = f"{task.to_prompt_contract()}\n\nWORKER INSTRUCTIONS:\n{prompt.strip()}"
69
+ result = safe_spawn(
70
+ task.role,
71
+ worker_prompt,
72
+ approval,
73
+ target_cli=target_cli,
74
+ model=model,
75
+ allowed_clis=allowed_clis,
76
+ cwd=cwd,
77
+ permission_mode=permission_mode,
78
+ context_mode=context_mode,
79
+ summary_chars=summary_chars,
80
+ timeout_seconds=task.timeout_seconds,
81
+ token_budget=task.token_budget,
82
+ )
83
+ if result.get("status") == "READY":
84
+ result["task_id"] = task.task_id
85
+ result["run_id"] = task.run_id
86
+ result["base_revision"] = task.base_revision
87
+ result["stage"] = task.stage
88
+ result["evidence_axis"] = task.evidence_axis
89
+ result["allowed_capabilities"] = list(task.allowed_capabilities)
90
+ result["expected_staging_outputs"] = list(task.expected_outputs)
91
+ result["output_contract"] = dict(task.output_contract)
92
+ return result
93
+
94
+
95
+ def accept_worker_output(
96
+ task: TaskSpec,
97
+ raw_output: dict[str, Any],
98
+ *,
99
+ artifact_validator: ArtifactValidator | None = None,
100
+ ) -> WorkerResult:
101
+ """Main-process acceptance boundary for host/Agent-MCP worker output.
102
+
103
+ Worker self-attestation is ignored by `validate_worker_output`. Callers must
104
+ retain the originating TaskSpec and validate against that exact contract.
105
+ """
106
+ return validate_worker_output(
107
+ task,
108
+ raw_output,
109
+ artifact_validator=artifact_validator,
110
+ )
111
+
112
+
113
+ def execute_dispatched_task(
114
+ task: TaskSpec,
115
+ dispatch_result: dict[str, Any],
116
+ host_executor: HostExecutor,
117
+ *,
118
+ artifact_validator: ArtifactValidator | None = None,
119
+ ) -> WorkerResult:
120
+ """Execute one READY spawn call and immediately pass through acceptance.
121
+
122
+ This is the conformant host adapter. It intentionally does not expose a
123
+ helper that returns raw worker artifacts after execution.
124
+ """
125
+ if dispatch_result.get("status") != "READY":
126
+ raise PermissionError("cannot execute a dispatch result that is not READY")
127
+ if dispatch_result.get("task_id") != task.task_id:
128
+ raise ValueError("dispatch result task_id does not match TaskSpec")
129
+ spawn_call = dispatch_result.get("spawn_call")
130
+ if not isinstance(spawn_call, dict):
131
+ raise ValueError("READY dispatch result must contain one spawn_call object")
132
+ raw = host_executor(dict(spawn_call))
133
+ if not isinstance(raw, dict):
134
+ raise ValueError("host executor must return one worker output object")
135
+ return accept_worker_output(
136
+ task,
137
+ raw,
138
+ artifact_validator=artifact_validator,
139
+ )
140
+
141
+
142
+ def judge_artifacts(
143
+ results: list[WorkerResult] | tuple[WorkerResult, ...],
144
+ ) -> list[dict[str, Any]]:
145
+ """Return Judge inputs only when every worker result passed acceptance."""
146
+ return require_validated_artifacts_for_judge(results)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eduevidence",
3
- "version": "5.2.0",
4
- "description": "Evidence-Based Education Decision Skill — from any education question to an auditable, evidence-grounded decision.",
3
+ "version": "6.2.0",
4
+ "description": "Evidence research and decision skill with education and organizational policy domains.",
5
5
  "license": "MIT",
6
6
  "author": "EduEvidence Contributors",
7
7
  "homepage": "https://github.com/37chengshan/eduevidence#readme",
@@ -42,9 +42,52 @@
42
42
  "scripts/",
43
43
  "retrieval/",
44
44
  "integrations/",
45
- "visualization/eduevidence-report/"
45
+ "visualization/eduevidence-report/",
46
+ "agents/",
47
+ "web/studio/",
48
+ "web/index.html",
49
+ "autoevolve/config.yaml",
50
+ "autoevolve/program.md",
51
+ "autoevolve/protected.manifest.yaml",
52
+ "setup.py",
53
+ "docs/architecture.md",
54
+ "docs/sciverse-api.md",
55
+ "CONTRIBUTING.md",
56
+ "web/architecture.html",
57
+ "docs/install-guide.md",
58
+ "docs/release-contract.md",
59
+ "docs/research-studio-guide.zh-CN.md",
60
+ "docs/autoresearch-evolution-plan.md",
61
+ "docs/orchestration-role-model.md",
62
+ "docs/autoresearch-implementation-status.md",
63
+ "benchmarks/evidence-library.json",
64
+ "benchmarks/partitions.json",
65
+ "benchmarks/adversarial/cases.jsonl",
66
+ "examples/ai-coding-assistant-evidence/*.json",
67
+ "examples/ai-coding-assistant-evidence/*.jsonl",
68
+ "examples/ai-coding-assistant-evidence/*.html",
69
+ "examples/ai-coding-assistant-evidence/reports-5themes/*.html",
70
+ "examples/workplace-ai-assistant/*.json",
71
+ "examples/workplace-ai-assistant/*.jsonl",
72
+ "examples/workplace-ai-assistant/reports-5themes/*.html",
73
+ "examples/spaced-retrieval-practice/*.json",
74
+ "examples/spaced-retrieval-practice/*.jsonl",
75
+ "examples/spaced-retrieval-practice/reports-5themes/*.html",
76
+ "docs/demo-workplace-ai.md",
77
+ "docs/demo.md",
78
+ "docs/demo-storyboard.md",
79
+ "docs/release-closeout/*.md",
80
+ "assets/readme/",
81
+ "!**/__pycache__/",
82
+ "!**/*.pyc",
83
+ "!**/*.pyo",
84
+ "!**/.DS_Store"
46
85
  ],
47
86
  "engines": {
48
87
  "node": ">=18"
88
+ },
89
+ "publishConfig": {
90
+ "registry": "https://registry.npmjs.org/",
91
+ "access": "public"
49
92
  }
50
93
  }
package/pyproject.toml CHANGED
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "eduevidence"
7
- version = "5.2.0"
8
- description = "Evidence-Based Education Decision Skill — from any education question (teaching methods, curriculum, assessment, learning interventions, AI tools) to an evidence-based decision."
7
+ version = "6.2.0"
8
+ description = "Evidence research and decision skill with education and organizational policy domains."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
11
11
  license = { text = "MIT" }
@@ -18,38 +18,30 @@ classifiers = [
18
18
  ]
19
19
 
20
20
  [project.optional-dependencies]
21
- dev = ["pytest>=7.0"]
21
+ dev = ["pytest>=7.0", "jsonschema>=4.0"]
22
22
 
23
23
  [project.scripts]
24
24
  eduevidence = "eduevidence_cli:main"
25
25
 
26
26
  [tool.pytest.ini_options]
27
- # scripts/ 只为收编历史遗留的红队压测 scripts/test_adversarial_empirical.py
28
- # (E5:该文件是全仓唯一 test_*.py 命名的脚本,纳入默认收集后不再"死测试")。
29
27
  testpaths = ["tests", "scripts"]
30
28
  python_files = ["test_*.py"]
31
29
  addopts = "-q"
32
- filterwarnings = ["ignore::pytest.PytestReturnNotNoneWarning:scripts.*"]
30
+ # scripts/* tests must assert; returning a dict is reported, not filtered.
31
+ filterwarnings = []
33
32
 
34
- # wheel 自包含 CLI:eduevidence_cli + engine + scripts(V1/V2 命令实现与
35
- # validate_schema)+ schemas 数据文件(data-files 安装到 share/eduevidence/,
36
- # engine.contracts / orchestrator 按回退路径解析)。Skill 本体(SKILL.md +
37
- # skill/ + references/ + retrieval/ + integrations/ + visualization/ +
38
- # assets/)由 install.sh 或源码包完整分发。
39
33
  [tool.setuptools]
40
34
  py-modules = ["eduevidence_cli"]
41
- packages = ["engine", "scripts"]
42
35
 
43
- [tool.setuptools.data-files]
44
- "share/eduevidence/schemas" = ["schemas/*.json"]
45
- "share/eduevidence/schemas/v2" = ["schemas/v2/*.json"]
46
- "share/eduevidence/schemas/v3" = ["schemas/v3/*.json"]
47
- "share/eduevidence/schemas/v4" = ["schemas/v4/*.json"]
48
- "share/eduevidence/domains" = ["domains/manifest.json", "domains/education/manifest.json", "domains/education/outcome_taxonomy.json", "domains/policy/manifest.json", "domains/policy/frame.schema.json", "domains/policy/outcome_taxonomy.json", "domains/policy/methodology_checklist.json"]
49
- "share/eduevidence/domains/policy/references" = ["domains/policy/references/*.md"]
50
- "share/eduevidence/benchmarks" = ["benchmarks/evidence-library.json"]
36
+ [tool.setuptools.packages.find]
37
+ where = ["."]
38
+ include = ["engine*", "scripts*", "retrieval*", "integrations*"]
51
39
 
52
40
  [tool.ruff.lint]
53
- # E5 最小守门集:语法层错误 + 未定义/重定义名。风格类规则不设(存量代码
54
- # 不做一次性大规模格式化,避免淹没 review)。
55
41
  select = ["E9", "F63", "F7", "F82"]
42
+
43
+ [tool.ruff.lint.per-file-ignores]
44
+ # build_report.py enables postponed annotations; its legacy Optional annotation
45
+ # is not evaluated at runtime. Keep this F821 exception narrowly scoped rather
46
+ # than weakening undefined-name checks for the repository.
47
+ "visualization/eduevidence-report/scripts/build_report.py" = ["F821"]
@@ -0,0 +1,30 @@
1
+ # Evidence Autoresearch
2
+
3
+ Use this reference for bounded autonomous evidence acquisition inside an existing EduEvidence Project.
4
+
5
+ ## Loop
6
+
7
+ `GraphRevision + DecisionSnapshot + KnowledgeGaps → rank DVI → choose ONE gap → ONE falsifiable strategy → bounded execution → validate staging evidence → single-writer graph commit or no-gain log → re-adjudicate → next gap`.
8
+
9
+ ## Hard rules
10
+
11
+ - A KnowledgeGap must already be grounded in the Evidence Graph.
12
+ - DVI is an ordinal HIGH/MEDIUM/LOW prioritization heuristic, never EVPI/EVSI or a probability.
13
+ - Run one primary research hypothesis per ResearchIteration.
14
+ - Validated evidence is append-only whether supportive, contradictory, neutral, or null.
15
+ - A no-gain iteration creates ResearchIteration memory but no GraphRevision.
16
+ - Negative search results may only state that no eligible evidence was found within the recorded search scope.
17
+ - Stop on resolved gap, loss of decision sensitivity, budget exhaustion, saturation, tool blockage, user stop, or need for new empirical evidence.
18
+ - Literature → Pilot requires HIGH DVI + decision materiality + unresolved gap + search saturation + ethical/operational feasibility.
19
+ - New decision outputs created by autonomous refresh remain candidate decisions until an appropriate human/review gate accepts them.
20
+
21
+ ## CLI
22
+
23
+ ```text
24
+ eduevidence research auto step --project <id>
25
+ eduevidence research auto step --project <id> --outcome-file <validated-staging.json>
26
+ eduevidence research auto status --project <id>
27
+ eduevidence research auto stop --project <id>
28
+ ```
29
+
30
+ Without an execution artifact, `step` emits the selected GapPriority and ResearchStrategy and stops at `awaiting_execution`; it never fabricates search results.
@@ -0,0 +1,24 @@
1
+ # Skill Autoresearch Evaluation Policy
2
+
3
+ Evaluate candidate EduEvidence implementations with **constraint-first Pareto evaluation**, never a single LLM score.
4
+
5
+ ## Order
6
+
7
+ 1. **L0 hard gates** — schema validity, provenance, graph integrity, study identity, no false precision, no unsupported ADOPT, synthetic/real separation, grounded gaps, protected integrity, privacy. Any failure = REJECT.
8
+ 2. **L1 scientific correctness** — outcome separation, citation support, contradiction precision/recall, scope/decision calibration, methodology issue detection, gap correctness. Material regression = REJECT.
9
+ 3. **L2 research quality** — direct evidence gain, unique eligible evidence yield, counter-evidence yield, applicability coverage, gap-resolution and saturation efficiency.
10
+ 4. **L3 robustness** — S/M/L, domains, model families, repeated runs, provider variation, missing/adversarial conditions.
11
+ 5. **L4 efficiency** — token, cost, latency, search/fetch calls, subagent count, parallel speedup.
12
+ 6. **L5 simplicity** — LOC, loaded Skill context, branches, dependencies, maintenance surface. Equal evidence quality prefers the simpler candidate.
13
+
14
+ ## Promotion
15
+
16
+ - Hard gate fail or scientific regression → `REJECT`.
17
+ - Candidate improvement within empirical noise → `RETEST`.
18
+ - Material quality improvement without core regression → `KEEP`.
19
+ - Real Pareto trade-off → `HUMAN_REVIEW`.
20
+ - Protected mutation → `INVALID` before scoring.
21
+
22
+ Use at least 3 repeated empirical runs, preferably 5, for stochastic model evaluation. DEV is visible to candidate experiments. HOLDOUT and ADVERSARIAL are evaluator-only promotion inputs. Temporal evaluation is timestamped and not permanent gold.
23
+
24
+ Skill Autoresearch operates only on fixture/benchmark research state and an `autoresearch/<run-tag>` branch/worktree. It never changes real user evidence state, merges main, releases, deploys, or launches a human-subject study automatically.
@@ -0,0 +1,22 @@
1
+ # Orchestration
2
+
3
+ Treat these concepts as distinct:
4
+
5
+ `Protocol Stage ≠ Scientific Role ≠ Capability ≠ Worker/Subagent ≠ Model/CLI`.
6
+
7
+ A Scientific Role is an accountability boundary. It does not imply a permanent agent. A Capability is reusable implementation. A Worker/Subagent is a temporary execution instance. Model/CLI selection is an execution adapter governed by existing user approval.
8
+
9
+ ## Default topology
10
+
11
+ - **S**: lead-only, zero delegated workers.
12
+ - **M**: selectively delegate independent direct/counter evidence acquisition and, when useful, an independent Skeptic.
13
+ - **L**: split retrieval by evidence axis (direct causal; transfer/retention; null/negative/risk; applicability/freshness), then deterministic merge, optional independent Skeptic/Method Reviewer, single-writer commit, Judge, and high-impact independent final review.
14
+ - Hard parallel cap: 6. Never recursive swarm.
15
+
16
+ ## TaskSpec and dispatch
17
+
18
+ Every delegated worker requires a validated TaskSpec. Workers are read-only against canonical project state and return staging artifacts only. Agent MCP delegation must pass through the TaskSpec dispatch adapter and the existing `safe_spawn()` approval gate. Do not route by provider name; providers are tools, while evidence axes are epistemic objectives.
19
+
20
+ ## Single Writer
21
+
22
+ Parallelize independent evidence acquisition and analysis; serialize canonical state transitions. Only the lead/single-writer path may commit GraphRevision, DecisionSnapshot, persistent KnowledgeGap state, StudyDesign, PilotRun, or AnalysisRun. Judges consume validated artifacts, never unvalidated worker prose.