eduevidence 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +506 -0
- package/README.zh-CN.md +434 -0
- package/SKILL.md +195 -0
- package/bin/eduevidence.js +127 -0
- package/domains/education/manifest.json +183 -0
- package/domains/education/outcome_taxonomy.json +127 -0
- package/domains/manifest.json +26 -0
- package/domains/policy/frame.schema.json +234 -0
- package/domains/policy/manifest.json +10 -0
- package/domains/policy/methodology_checklist.json +109 -0
- package/domains/policy/outcome_taxonomy.json +53 -0
- package/domains/policy/references/causal-identification.md +45 -0
- package/domains/policy/references/cost-evidence.md +44 -0
- package/domains/policy/references/equity.md +42 -0
- package/domains/policy/references/evidence-hierarchy.md +41 -0
- package/domains/policy/references/implementation-evidence.md +47 -0
- package/eduevidence_cli.py +26 -0
- package/engine/__init__.py +11 -0
- package/engine/__pycache__/__init__.cpython-312.pyc +0 -0
- package/engine/__pycache__/analysis.cpython-312.pyc +0 -0
- package/engine/__pycache__/bias.cpython-312.pyc +0 -0
- package/engine/__pycache__/briefs.cpython-312.pyc +0 -0
- package/engine/__pycache__/capabilities.cpython-312.pyc +0 -0
- package/engine/__pycache__/citation_check.cpython-312.pyc +0 -0
- package/engine/__pycache__/contracts.cpython-312.pyc +0 -0
- package/engine/__pycache__/datasets.cpython-312.pyc +0 -0
- package/engine/__pycache__/events.cpython-312.pyc +0 -0
- package/engine/__pycache__/evidence_graph.cpython-312.pyc +0 -0
- package/engine/__pycache__/evidence_review.cpython-312.pyc +0 -0
- package/engine/__pycache__/evidencecore.cpython-312.pyc +0 -0
- package/engine/__pycache__/gap_lens.cpython-312.pyc +0 -0
- package/engine/__pycache__/gaps.cpython-312.pyc +0 -0
- package/engine/__pycache__/graph_store.cpython-312.pyc +0 -0
- package/engine/__pycache__/graph_validate.cpython-312.pyc +0 -0
- package/engine/__pycache__/ids.cpython-312.pyc +0 -0
- package/engine/__pycache__/library.cpython-312.pyc +0 -0
- package/engine/__pycache__/library_builtin.cpython-312.pyc +0 -0
- package/engine/__pycache__/living.cpython-312.pyc +0 -0
- package/engine/__pycache__/log.cpython-312.pyc +0 -0
- package/engine/__pycache__/meta_analysis.cpython-312.pyc +0 -0
- package/engine/__pycache__/meta_synthesis.cpython-312.pyc +0 -0
- package/engine/__pycache__/migration.cpython-312.pyc +0 -0
- package/engine/__pycache__/mode_router.cpython-312.pyc +0 -0
- package/engine/__pycache__/paths.cpython-312.pyc +0 -0
- package/engine/__pycache__/pilot.cpython-312.pyc +0 -0
- package/engine/__pycache__/planner.cpython-312.pyc +0 -0
- package/engine/__pycache__/project.cpython-312.pyc +0 -0
- package/engine/__pycache__/projections.cpython-312.pyc +0 -0
- package/engine/__pycache__/robustness.cpython-312.pyc +0 -0
- package/engine/__pycache__/run.cpython-312.pyc +0 -0
- package/engine/__pycache__/semantics.cpython-312.pyc +0 -0
- package/engine/__pycache__/study_design.cpython-312.pyc +0 -0
- package/engine/__pycache__/synthesis.cpython-312.pyc +0 -0
- package/engine/__pycache__/tribunal.cpython-312.pyc +0 -0
- package/engine/__pycache__/update.cpython-312.pyc +0 -0
- package/engine/__pycache__/versions.cpython-312.pyc +0 -0
- package/engine/analysis.py +308 -0
- package/engine/bias.py +178 -0
- package/engine/briefs.py +106 -0
- package/engine/capabilities.py +99 -0
- package/engine/citation_check.py +192 -0
- package/engine/contracts.py +117 -0
- package/engine/datasets.py +165 -0
- package/engine/events.py +67 -0
- package/engine/evidence_graph.py +571 -0
- package/engine/evidence_review.py +88 -0
- package/engine/evidencecore.py +182 -0
- package/engine/gap_lens.py +132 -0
- package/engine/gaps.py +169 -0
- package/engine/graph_store.py +335 -0
- package/engine/graph_validate.py +87 -0
- package/engine/ids.py +77 -0
- package/engine/library.py +268 -0
- package/engine/library_builtin.py +301 -0
- package/engine/living.py +671 -0
- package/engine/log.py +39 -0
- package/engine/meta_analysis.py +333 -0
- package/engine/meta_synthesis.py +111 -0
- package/engine/migration.py +397 -0
- package/engine/mode_router.py +72 -0
- package/engine/paths.py +15 -0
- package/engine/pilot.py +368 -0
- package/engine/planner.py +126 -0
- package/engine/project.py +118 -0
- package/engine/projections.py +240 -0
- package/engine/robustness.py +109 -0
- package/engine/run.py +85 -0
- package/engine/semantics.py +135 -0
- package/engine/study_design.py +87 -0
- package/engine/synthesis.py +187 -0
- package/engine/tribunal.py +408 -0
- package/engine/update.py +113 -0
- package/engine/versions.py +12 -0
- package/install.sh +510 -0
- package/integrations/__init__.py +1 -0
- package/integrations/__pycache__/__init__.cpython-312.pyc +0 -0
- package/integrations/__pycache__/agent_mcp.cpython-312.pyc +0 -0
- package/integrations/__pycache__/smart_web_fetch.cpython-312.pyc +0 -0
- package/integrations/agent_mcp.py +856 -0
- package/integrations/smart_web_fetch.py +59 -0
- package/package.json +50 -0
- package/pyproject.toml +55 -0
- package/references/applicability-policy.md +88 -0
- package/references/education-framing.md +132 -0
- package/references/effect_size_formulas.md +35 -0
- package/references/evaluation-design.md +111 -0
- package/references/evidence-quality.md +79 -0
- package/references/grade_framework.md +29 -0
- package/references/intervention-design.md +98 -0
- package/references/methodology-audit.md +103 -0
- package/references/outcome-taxonomy.md +106 -0
- package/references/retrieval-protocol.md +142 -0
- package/references/skeptic-protocol.md +93 -0
- package/references/social_science_pitfalls.md +48 -0
- package/references/source-validity.md +140 -0
- package/references/tribunal-policy.md +112 -0
- package/references/wwc_standards.md +29 -0
- package/retrieval/__init__.py +1 -0
- package/retrieval/__pycache__/__init__.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/corpus_store.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/dedupe.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/failures.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/fetch.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/search.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/source.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/validate.cpython-312.pyc +0 -0
- package/retrieval/corpus_store.py +181 -0
- package/retrieval/dedupe.py +127 -0
- package/retrieval/failures.py +90 -0
- package/retrieval/fetch.py +435 -0
- package/retrieval/search.py +493 -0
- package/retrieval/source.py +160 -0
- package/retrieval/validate.py +257 -0
- package/schemas/agent-mcp-approval.schema.json +57 -0
- package/schemas/chart-spec.schema.json +88 -0
- package/schemas/cross-model-review.schema.json +28 -0
- package/schemas/education-frame.schema.json +106 -0
- package/schemas/evaluation.schema.json +35 -0
- package/schemas/evidence.schema.json +81 -0
- package/schemas/fetch-result.schema.json +119 -0
- package/schemas/intervention.schema.json +46 -0
- package/schemas/methodology.schema.json +102 -0
- package/schemas/report-result.schema.json +381 -0
- package/schemas/report-spec.schema.json +130 -0
- package/schemas/source.schema.json +311 -0
- package/schemas/v2/analysis-plan.schema.json +28 -0
- package/schemas/v2/analysis-run.schema.json +33 -0
- package/schemas/v2/claim.schema.json +26 -0
- package/schemas/v2/dataset-asset.schema.json +40 -0
- package/schemas/v2/decision-snapshot.schema.json +53 -0
- package/schemas/v2/evidence-link.schema.json +38 -0
- package/schemas/v2/finding.schema.json +47 -0
- package/schemas/v2/graph-revision.schema.json +30 -0
- package/schemas/v2/knowledge-gap.schema.json +40 -0
- package/schemas/v2/methodology-audit.schema.json +30 -0
- package/schemas/v2/outcome.schema.json +18 -0
- package/schemas/v2/project.schema.json +31 -0
- package/schemas/v2/research-intent.schema.json +24 -0
- package/schemas/v2/run.schema.json +43 -0
- package/schemas/v2/source.schema.json +24 -0
- package/schemas/v2/study-design.schema.json +67 -0
- package/schemas/v2/study.schema.json +37 -0
- package/schemas/v3/pilot-outcome.schema.json +132 -0
- package/schemas/v3/run-manifest.schema.json +193 -0
- package/schemas/v3/synthesis.schema.json +86 -0
- package/schemas/v4/drift-report.schema.json +66 -0
- package/schemas/v4/evidence-library.schema.json +42 -0
- package/schemas/v4/living-subscription.schema.json +55 -0
- package/schemas/v4/meta-analysis.schema.json +152 -0
- package/schemas/verdict.schema.json +56 -0
- package/scripts/__init__.py +0 -0
- package/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark_evaluator.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark_judge.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark_routing.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark_v2.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark_v3.cpython-312.pyc +0 -0
- package/scripts/__pycache__/build_result.cpython-312.pyc +0 -0
- package/scripts/__pycache__/claim_audit.cpython-312.pyc +0 -0
- package/scripts/__pycache__/complexity_gate.cpython-312.pyc +0 -0
- package/scripts/__pycache__/compute_confidence.cpython-312.pyc +0 -0
- package/scripts/__pycache__/dashboard_server.cpython-312.pyc +0 -0
- package/scripts/__pycache__/did_regression.cpython-312.pyc +0 -0
- package/scripts/__pycache__/effect_calculator.cpython-312.pyc +0 -0
- package/scripts/__pycache__/evidence_matrix.cpython-312.pyc +0 -0
- package/scripts/__pycache__/evidence_score.cpython-312.pyc +0 -0
- package/scripts/__pycache__/evidence_semantics.cpython-312.pyc +0 -0
- package/scripts/__pycache__/fetch_benchmark.cpython-312.pyc +0 -0
- package/scripts/__pycache__/lint_report_layout.cpython-312.pyc +0 -0
- package/scripts/__pycache__/orchestrator.cpython-312.pyc +0 -0
- package/scripts/__pycache__/pre_verdict_gate.cpython-312.pyc +0 -0
- package/scripts/__pycache__/recompute_demo_quality.cpython-312.pyc +0 -0
- package/scripts/__pycache__/render_report.cpython-312.pyc +0 -0
- package/scripts/__pycache__/render_report_html.cpython-312.pyc +0 -0
- package/scripts/__pycache__/run_workspace.cpython-312.pyc +0 -0
- package/scripts/__pycache__/skill_lint.cpython-312.pyc +0 -0
- package/scripts/__pycache__/startup_probe.cpython-312.pyc +0 -0
- package/scripts/__pycache__/sync_killer_demo_report.cpython-312.pyc +0 -0
- package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.0.2.pyc +0 -0
- package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.1.1.pyc +0 -0
- package/scripts/__pycache__/validate_schema.cpython-312.pyc +0 -0
- package/scripts/audit_dois.py +292 -0
- package/scripts/bake_pack.sh +37 -0
- package/scripts/benchmark.py +183 -0
- package/scripts/benchmark_evaluator.py +371 -0
- package/scripts/benchmark_judge.py +535 -0
- package/scripts/benchmark_routing.py +120 -0
- package/scripts/benchmark_v2.py +304 -0
- package/scripts/benchmark_v3.py +552 -0
- package/scripts/build_esl_artifacts.py +1921 -0
- package/scripts/build_evidence_library.py +307 -0
- package/scripts/build_killer_demo.py +295 -0
- package/scripts/build_result.py +311 -0
- package/scripts/check_version_consistency.py +96 -0
- package/scripts/citation_check.py +123 -0
- package/scripts/claim_audit.py +157 -0
- package/scripts/complexity_gate.py +180 -0
- package/scripts/compute_confidence.py +176 -0
- package/scripts/dashboard_server.py +536 -0
- package/scripts/did_regression.py +315 -0
- package/scripts/effect_calculator.py +99 -0
- package/scripts/enrich_projects_human_and_lieflat.py +315 -0
- package/scripts/evidence_matrix.py +129 -0
- package/scripts/evidence_score.py +234 -0
- package/scripts/evidence_semantics.py +87 -0
- package/scripts/fetch_benchmark.py +177 -0
- package/scripts/generate_metrics.py +99 -0
- package/scripts/generate_new_projects.py +686 -0
- package/scripts/generate_promo.py +192 -0
- package/scripts/lint_report_layout.py +182 -0
- package/scripts/orchestrator.py +1456 -0
- package/scripts/pre_verdict_gate.py +513 -0
- package/scripts/quickstart.py +121 -0
- package/scripts/rebake_all_5themes.py +88 -0
- package/scripts/recompute_demo_quality.py +205 -0
- package/scripts/render_report.py +270 -0
- package/scripts/render_report_html.py +356 -0
- package/scripts/retraction_watch.py +110 -0
- package/scripts/run_workspace.py +337 -0
- package/scripts/serve_web.py +54 -0
- package/scripts/skill_lint.py +150 -0
- package/scripts/startup_probe.py +265 -0
- package/scripts/sync_killer_demo_report.py +270 -0
- package/scripts/test_adversarial_empirical.py +541 -0
- package/scripts/validate_schema.py +256 -0
- package/skill/agents/education-planner.md +80 -0
- package/skill/agents/evaluation-designer.md +74 -0
- package/skill/agents/evidence-analyst.md +106 -0
- package/skill/agents/evidence-judge.md +111 -0
- package/skill/agents/evidence-retriever.md +80 -0
- package/skill/agents/intervention-designer.md +82 -0
- package/skill/agents/method-reviewer.md +104 -0
- package/skill/agents/skeptic.md +89 -0
- package/skill/sub-skills/aihot-trend-analysis/SKILL.md +31 -0
- package/skill/sub-skills/contradiction-analysis/SKILL.md +17 -0
- package/skill/sub-skills/data-analysis/SKILL.md +23 -0
- package/skill/sub-skills/ethics-review/SKILL.md +25 -0
- package/skill/sub-skills/evidence-extraction/SKILL.md +19 -0
- package/skill/sub-skills/evidence-review/SKILL.md +18 -0
- package/skill/sub-skills/gap-analysis/SKILL.md +25 -0
- package/skill/sub-skills/literature-review/SKILL.md +21 -0
- package/skill/sub-skills/methodology-audit/SKILL.md +20 -0
- package/skill/sub-skills/report-generation/SKILL.md +51 -0
- package/skill/sub-skills/research-planning/SKILL.md +21 -0
- package/skill/sub-skills/study-design/SKILL.md +16 -0
- package/skill/task-briefs/adjudicate.md +17 -0
- package/skill/task-briefs/audit.md +15 -0
- package/skill/task-briefs/challenge.md +15 -0
- package/skill/task-briefs/evaluate.md +13 -0
- package/skill/task-briefs/extract.md +16 -0
- package/skill/task-briefs/frame.md +17 -0
- package/skill/task-briefs/intervene.md +14 -0
- package/skill/task-briefs/present.md +16 -0
- package/skill/task-briefs/retrieve.md +15 -0
- package/visualization/eduevidence-report/assets/base.css +337 -0
- package/visualization/eduevidence-report/motion/motion.css +157 -0
- package/visualization/eduevidence-report/motion/motion.js +107 -0
- package/visualization/eduevidence-report/references/bilingual-style.md +7 -0
- package/visualization/eduevidence-report/references/component-catalog.md +145 -0
- package/visualization/eduevidence-report/references/evidence-expansion.md +65 -0
- package/visualization/eduevidence-report/references/full-report-outline.md +86 -0
- package/visualization/eduevidence-report/references/layout-constraints.md +63 -0
- package/visualization/eduevidence-report/references/lieflat-composition.md +79 -0
- package/visualization/eduevidence-report/references/motion-system.md +31 -0
- package/visualization/eduevidence-report/schemas/adapter-envelope.schema.json +22 -0
- package/visualization/eduevidence-report/schemas/visual-layout.schema.json +87 -0
- package/visualization/eduevidence-report/scripts/__pycache__/adapter_contract.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/build_artifact_manifest.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/build_charts.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/build_figures.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/build_infographics.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/build_report.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/charts_data.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/lieflat_engine.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/zh_labels.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/adapter_contract.py +72 -0
- package/visualization/eduevidence-report/scripts/build_artifact_manifest.py +70 -0
- package/visualization/eduevidence-report/scripts/build_charts.py +283 -0
- package/visualization/eduevidence-report/scripts/build_figures.py +515 -0
- package/visualization/eduevidence-report/scripts/build_infographics.py +268 -0
- package/visualization/eduevidence-report/scripts/build_report.py +3211 -0
- package/visualization/eduevidence-report/scripts/charts_data.py +617 -0
- package/visualization/eduevidence-report/scripts/check_mobile_layout.js +220 -0
- package/visualization/eduevidence-report/scripts/lieflat_engine.py +852 -0
- package/visualization/eduevidence-report/scripts/zh_labels.py +245 -0
- package/visualization/eduevidence-report/themes/academic.css +94 -0
- package/visualization/eduevidence-report/themes/claude.css +96 -0
- package/visualization/eduevidence-report/themes/datalab-dark.css +147 -0
- package/visualization/eduevidence-report/themes/datalab.css +151 -0
- package/visualization/eduevidence-report/themes/presentation.css +140 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* EduEvidence npm CLI — wraps install.sh from the published package root.
|
|
4
|
+
*
|
|
5
|
+
* npm install -g eduevidence
|
|
6
|
+
* eduevidence skill # interactive host picker (default)
|
|
7
|
+
* eduevidence skill --host claude
|
|
8
|
+
* npx eduevidence skill --list-hosts
|
|
9
|
+
*/
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
const { spawnSync } = require('child_process');
|
|
13
|
+
const fs = require('fs');
|
|
14
|
+
const path = require('path');
|
|
15
|
+
|
|
16
|
+
const PKG_ROOT = path.resolve(__dirname, '..');
|
|
17
|
+
const INSTALL_SH = path.join(PKG_ROOT, 'install.sh');
|
|
18
|
+
|
|
19
|
+
function usage() {
|
|
20
|
+
console.log(`eduevidence ${readPkgVersion()} — Evidence-Based Education Decision Skill
|
|
21
|
+
|
|
22
|
+
Install (Python runtime + self-check):
|
|
23
|
+
eduevidence install [--dev] [--dry-run]
|
|
24
|
+
|
|
25
|
+
Install as AI Agent Skill:
|
|
26
|
+
eduevidence skill Interactive host picker
|
|
27
|
+
eduevidence skill --host <name> claude | codex | cursor | all | …
|
|
28
|
+
eduevidence skill --dest <dir> Custom skill root (creates <dir>/eduevidence/)
|
|
29
|
+
eduevidence skill --list-hosts Supported agents and install paths
|
|
30
|
+
eduevidence skill --dry-run Preview without writing
|
|
31
|
+
|
|
32
|
+
Legacy install.sh flags (also accepted):
|
|
33
|
+
eduevidence --skill [--host claude] [--dry-run]
|
|
34
|
+
eduevidence --list-hosts
|
|
35
|
+
|
|
36
|
+
Requires: bash, Python 3.10+ (for install / scripts)
|
|
37
|
+
Docs: https://github.com/37chengshan/eduevidence/blob/main/docs/install-guide.md
|
|
38
|
+
`);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function readPkgVersion() {
|
|
42
|
+
try {
|
|
43
|
+
const pkg = JSON.parse(
|
|
44
|
+
fs.readFileSync(path.join(PKG_ROOT, 'package.json'), 'utf8'),
|
|
45
|
+
);
|
|
46
|
+
return pkg.version || '';
|
|
47
|
+
} catch {
|
|
48
|
+
return '';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function runInstallSh(args) {
|
|
53
|
+
if (!fs.existsSync(INSTALL_SH)) {
|
|
54
|
+
console.error('ERROR: install.sh not found in package:', PKG_ROOT);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
if (!fs.existsSync(path.join(PKG_ROOT, 'SKILL.md'))) {
|
|
58
|
+
console.error('ERROR: SKILL.md not found in package:', PKG_ROOT);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const result = spawnSync('bash', [INSTALL_SH, ...args], {
|
|
63
|
+
cwd: PKG_ROOT,
|
|
64
|
+
stdio: 'inherit',
|
|
65
|
+
env: process.env,
|
|
66
|
+
});
|
|
67
|
+
if (result.error) {
|
|
68
|
+
console.error('ERROR: failed to run install.sh:', result.error.message);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
process.exit(result.status === null ? 1 : result.status);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function mapArgs(argv) {
|
|
75
|
+
if (argv.length === 0) {
|
|
76
|
+
usage();
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const first = argv[0];
|
|
81
|
+
if (first === '-h' || first === '--help' || first === 'help') {
|
|
82
|
+
usage();
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (first === 'install') {
|
|
87
|
+
return argv.slice(1);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (first === 'skill') {
|
|
91
|
+
const rest = argv.slice(1);
|
|
92
|
+
if (rest.includes('--list-hosts')) {
|
|
93
|
+
return ['--list-hosts'];
|
|
94
|
+
}
|
|
95
|
+
const out = ['--skill', '--skill-only'];
|
|
96
|
+
for (let i = 0; i < rest.length; i += 1) {
|
|
97
|
+
const arg = rest[i];
|
|
98
|
+
if (arg === '--host' || arg === '--dest') {
|
|
99
|
+
out.push(arg, rest[i + 1] ?? '');
|
|
100
|
+
i += 1;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (arg === '--dry-run') {
|
|
104
|
+
out.push('--dry-run');
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
console.error(`ERROR: unknown skill flag: ${arg}`);
|
|
108
|
+
usage();
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
return out;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Pass through legacy install.sh flags (--skill, --dev, --list-hosts, …).
|
|
115
|
+
return argv;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function main() {
|
|
119
|
+
const argv = process.argv.slice(2);
|
|
120
|
+
const mapped = mapArgs(argv);
|
|
121
|
+
if (mapped === null) {
|
|
122
|
+
process.exit(0);
|
|
123
|
+
}
|
|
124
|
+
runInstallSh(mapped);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
main();
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domain": "education",
|
|
3
|
+
"name": "education(教育研究)",
|
|
4
|
+
"description": "education 域只是“指向现有契约”的注册:不新增任何逻辑路径,不引入新 schema / 新校验器 / 新方法学。引擎层 load_domain('education') 只做契约存在性校验;领域选择由主 agent 接 CLI 完成。",
|
|
5
|
+
"contracts_source": {
|
|
6
|
+
"frame_schema": "schemas/education-frame.schema.json(EducationResearchFrame,顶层 additionalProperties:false,required: question/decision_target)",
|
|
7
|
+
"outcome_taxonomy": "20 token 取自 schemas/evidence.schema.json 的 outcome_type enum;四类映射参考 engine/pilot.py _OUTCOME_CATEGORY",
|
|
8
|
+
"methodology_checklist": "15 项取自 skill/agents/method-reviewer.md;每项 status 枚举 met/partial/missing/not_applicable",
|
|
9
|
+
"golds_dir": "benchmarks/annotations(30 条人工金标 gold-Q*.json)",
|
|
10
|
+
"references_dir": "references(11 篇教育证据方法学文档)"
|
|
11
|
+
},
|
|
12
|
+
"frame_schema": "schemas/education-frame.schema.json",
|
|
13
|
+
"outcome_taxonomy": "domains/education/outcome_taxonomy.json",
|
|
14
|
+
"methodology_checklist": [
|
|
15
|
+
{
|
|
16
|
+
"id": "control_group",
|
|
17
|
+
"label_zh": "有无对照",
|
|
18
|
+
"description_zh": "是否设置对照/控制条件",
|
|
19
|
+
"statuses": [
|
|
20
|
+
"met",
|
|
21
|
+
"partial",
|
|
22
|
+
"missing",
|
|
23
|
+
"not_applicable"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "randomization",
|
|
28
|
+
"label_zh": "是否随机",
|
|
29
|
+
"description_zh": "被试/班级是否随机分配",
|
|
30
|
+
"statuses": [
|
|
31
|
+
"met",
|
|
32
|
+
"partial",
|
|
33
|
+
"missing",
|
|
34
|
+
"not_applicable"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "pre_test",
|
|
39
|
+
"label_zh": "有无前测",
|
|
40
|
+
"description_zh": "是否测量干预前基线",
|
|
41
|
+
"statuses": [
|
|
42
|
+
"met",
|
|
43
|
+
"partial",
|
|
44
|
+
"missing",
|
|
45
|
+
"not_applicable"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "post_test",
|
|
50
|
+
"label_zh": "有无后测",
|
|
51
|
+
"description_zh": "是否测量干预后即时结果",
|
|
52
|
+
"statuses": [
|
|
53
|
+
"met",
|
|
54
|
+
"partial",
|
|
55
|
+
"missing",
|
|
56
|
+
"not_applicable"
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "retention_test",
|
|
61
|
+
"label_zh": "有无延迟/保持测试",
|
|
62
|
+
"description_zh": "是否有延迟保持测量",
|
|
63
|
+
"statuses": [
|
|
64
|
+
"met",
|
|
65
|
+
"partial",
|
|
66
|
+
"missing",
|
|
67
|
+
"not_applicable"
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": "transfer_test",
|
|
72
|
+
"label_zh": "有无迁移测试",
|
|
73
|
+
"description_zh": "是否有迁移/新情境测量",
|
|
74
|
+
"statuses": [
|
|
75
|
+
"met",
|
|
76
|
+
"partial",
|
|
77
|
+
"missing",
|
|
78
|
+
"not_applicable"
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "sample_bias",
|
|
83
|
+
"label_zh": "样本偏差",
|
|
84
|
+
"description_zh": "样本是否具有代表性/存在偏差",
|
|
85
|
+
"statuses": [
|
|
86
|
+
"met",
|
|
87
|
+
"partial",
|
|
88
|
+
"missing",
|
|
89
|
+
"not_applicable"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "self_selection",
|
|
94
|
+
"label_zh": "自选择",
|
|
95
|
+
"description_zh": "被试是否自选进入条件组",
|
|
96
|
+
"statuses": [
|
|
97
|
+
"met",
|
|
98
|
+
"partial",
|
|
99
|
+
"missing",
|
|
100
|
+
"not_applicable"
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "measurement_validity",
|
|
105
|
+
"label_zh": "测量效度",
|
|
106
|
+
"description_zh": "测量工具是否有效测量目标构念",
|
|
107
|
+
"statuses": [
|
|
108
|
+
"met",
|
|
109
|
+
"partial",
|
|
110
|
+
"missing",
|
|
111
|
+
"not_applicable"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "confounders",
|
|
116
|
+
"label_zh": "混杂变量",
|
|
117
|
+
"description_zh": "是否识别并控制混杂变量",
|
|
118
|
+
"statuses": [
|
|
119
|
+
"met",
|
|
120
|
+
"partial",
|
|
121
|
+
"missing",
|
|
122
|
+
"not_applicable"
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"id": "instructor_effect",
|
|
127
|
+
"label_zh": "教师效应",
|
|
128
|
+
"description_zh": "教师/授课者差异是否被控制",
|
|
129
|
+
"statuses": [
|
|
130
|
+
"met",
|
|
131
|
+
"partial",
|
|
132
|
+
"missing",
|
|
133
|
+
"not_applicable"
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"id": "novelty_effect",
|
|
138
|
+
"label_zh": "新奇效应",
|
|
139
|
+
"description_zh": "干预新奇性是否影响结果",
|
|
140
|
+
"statuses": [
|
|
141
|
+
"met",
|
|
142
|
+
"partial",
|
|
143
|
+
"missing",
|
|
144
|
+
"not_applicable"
|
|
145
|
+
]
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"id": "tool_version_effect",
|
|
149
|
+
"label_zh": "工具版本效应",
|
|
150
|
+
"description_zh": "AI 工具版本/配置是否明确固定",
|
|
151
|
+
"statuses": [
|
|
152
|
+
"met",
|
|
153
|
+
"partial",
|
|
154
|
+
"missing",
|
|
155
|
+
"not_applicable"
|
|
156
|
+
]
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "ai_usage_policy",
|
|
160
|
+
"label_zh": "AI 使用规则是否明确",
|
|
161
|
+
"description_zh": "AI 使用边界是否在研究中明确定义",
|
|
162
|
+
"statuses": [
|
|
163
|
+
"met",
|
|
164
|
+
"partial",
|
|
165
|
+
"missing",
|
|
166
|
+
"not_applicable"
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"id": "dropout",
|
|
171
|
+
"label_zh": "流失率",
|
|
172
|
+
"description_zh": "流失率是否报告并处理",
|
|
173
|
+
"statuses": [
|
|
174
|
+
"met",
|
|
175
|
+
"partial",
|
|
176
|
+
"missing",
|
|
177
|
+
"not_applicable"
|
|
178
|
+
]
|
|
179
|
+
}
|
|
180
|
+
],
|
|
181
|
+
"golds_dir": "benchmarks/annotations",
|
|
182
|
+
"references_dir": "references"
|
|
183
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domain": "education",
|
|
3
|
+
"source": {
|
|
4
|
+
"tokens": "schemas/evidence.schema.json -> outcome_type enum(20 token)",
|
|
5
|
+
"categories": "engine/pilot.py -> _OUTCOME_CATEGORY(learning/task_performance/process/risk 四类)"
|
|
6
|
+
},
|
|
7
|
+
"categories": {
|
|
8
|
+
"learning": {
|
|
9
|
+
"name_zh": "学习效果",
|
|
10
|
+
"description_zh": "指向学习本身的持久改变:知识、理解、保持与迁移。任务完成表现不能自动等价为学习效果。"
|
|
11
|
+
},
|
|
12
|
+
"task_performance": {
|
|
13
|
+
"name_zh": "任务表现",
|
|
14
|
+
"description_zh": "任务完成的质量与效率(完成时间/准确率/代码质量/作业成绩),不等于学习效果。"
|
|
15
|
+
},
|
|
16
|
+
"process": {
|
|
17
|
+
"name_zh": "学习过程",
|
|
18
|
+
"description_zh": "过程性变量:参与、动机、认知负荷、求助行为与元认知。"
|
|
19
|
+
},
|
|
20
|
+
"risk": {
|
|
21
|
+
"name_zh": "风险",
|
|
22
|
+
"description_zh": "干预(如 AI 工具)可能带来的风险与负面结果:依赖、过度依赖、努力减少、迁移受损、诚信风险、虚假信心。"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"tokens": [
|
|
26
|
+
{
|
|
27
|
+
"id": "knowledge_gain",
|
|
28
|
+
"category": "learning",
|
|
29
|
+
"description_zh": "知识获得:知识量的增加(测验得分提升)"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "concept_understanding",
|
|
33
|
+
"category": "learning",
|
|
34
|
+
"description_zh": "概念理解:对核心概念的深层理解"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "retention",
|
|
38
|
+
"category": "learning",
|
|
39
|
+
"description_zh": "保持:延迟测试后仍能保持所学"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "transfer",
|
|
43
|
+
"category": "learning",
|
|
44
|
+
"description_zh": "迁移:迁移到新情境/新问题"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "independent_problem_solving",
|
|
48
|
+
"category": "learning",
|
|
49
|
+
"description_zh": "独立解题:无支持下独立解决问题"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "completion_time",
|
|
53
|
+
"category": "task_performance",
|
|
54
|
+
"description_zh": "完成时间:任务完成速度"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "accuracy",
|
|
58
|
+
"category": "task_performance",
|
|
59
|
+
"description_zh": "准确率:任务完成正确率"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "code_quality",
|
|
63
|
+
"category": "task_performance",
|
|
64
|
+
"description_zh": "代码质量:代码可读性/结构/缺陷密度"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "assignment_score",
|
|
68
|
+
"category": "task_performance",
|
|
69
|
+
"description_zh": "作业成绩:作业/测验得分"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "engagement",
|
|
73
|
+
"category": "process",
|
|
74
|
+
"description_zh": "参与度:课堂/任务参与程度"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "motivation",
|
|
78
|
+
"category": "process",
|
|
79
|
+
"description_zh": "动机:学习动机与自我效能"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "cognitive_load",
|
|
83
|
+
"category": "process",
|
|
84
|
+
"description_zh": "认知负荷:任务过程中的认知负荷体验"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "help_seeking",
|
|
88
|
+
"category": "process",
|
|
89
|
+
"description_zh": "求助行为:求助模式(对 AI/教师/同伴)"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "metacognition",
|
|
93
|
+
"category": "process",
|
|
94
|
+
"description_zh": "元认知:元认知监控与学习策略"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "ai_dependency",
|
|
98
|
+
"category": "risk",
|
|
99
|
+
"description_zh": "AI 依赖:对 AI 工具的依赖程度"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "over_reliance",
|
|
103
|
+
"category": "risk",
|
|
104
|
+
"description_zh": "过度依赖:过度依赖 AI 完成任务"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "reduced_effort",
|
|
108
|
+
"category": "risk",
|
|
109
|
+
"description_zh": "努力减少:学习投入/努力下降"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "reduced_transfer",
|
|
113
|
+
"category": "risk",
|
|
114
|
+
"description_zh": "迁移受损:迁移能力受损"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "academic_integrity_risk",
|
|
118
|
+
"category": "risk",
|
|
119
|
+
"description_zh": "学术诚信风险:抄袭/作弊等诚信风险"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "false_confidence",
|
|
123
|
+
"category": "risk",
|
|
124
|
+
"description_zh": "虚假信心:未掌握却过度自信"
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "4.0.0",
|
|
3
|
+
"description": "EduEvidence v4 领域注册表(EvidenceCore 抽象第一步)。每个条目声明一个领域的契约:frame_schema(框架 schema)、outcome_taxonomy(结果分类)、methodology_checklist(方法学清单)、golds_dir(金标目录)与 references_dir(参考文献目录)。education 为“指向现有契约”的注册域,不新增任何逻辑路径;policy 为 v4 首个自带契约的独立领域。domain select(领域选择)由主 agent 接 CLI 完成,引擎层不自行选择领域。",
|
|
4
|
+
"domains": [
|
|
5
|
+
{
|
|
6
|
+
"id": "education",
|
|
7
|
+
"name": "education",
|
|
8
|
+
"description": "教育研究领域(注册域,零逻辑路径):框架复用 schemas/education-frame.schema.json(EducationResearchFrame),结果分类复用 evidence.schema.json 的 20 个 outcome_type token 并按 engine/pilot.py _OUTCOME_CATEGORY 归为四类,方法学清单复用 skill/agents/method-reviewer.md 的 15 项审查清单。",
|
|
9
|
+
"frame_schema": "schemas/education-frame.schema.json",
|
|
10
|
+
"outcome_taxonomy": "domains/education/outcome_taxonomy.json",
|
|
11
|
+
"methodology_checklist": "domains/education/manifest.json#/methodology_checklist",
|
|
12
|
+
"golds_dir": "benchmarks/annotations",
|
|
13
|
+
"references_dir": "references"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "policy",
|
|
17
|
+
"name": "policy",
|
|
18
|
+
"description": "政策分析领域(v4 首个自带契约的独立领域):政策分析框架(decision_object/intervention/population/stakeholders/outcomes/context/scope,不含 education-frame 的 learner/course 概念)、5 类政策结果分类(policy_effectiveness/cost_effectiveness/equity/feasibility/implementation_risk)与 12 项政策证据质量清单。",
|
|
19
|
+
"frame_schema": "domains/policy/frame.schema.json",
|
|
20
|
+
"outcome_taxonomy": "domains/policy/outcome_taxonomy.json",
|
|
21
|
+
"methodology_checklist": "domains/policy/methodology_checklist.json",
|
|
22
|
+
"golds_dir": null,
|
|
23
|
+
"references_dir": "domains/policy/references"
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://github.com/37chengshan/eduevidence/domains/policy/frame.schema.json",
|
|
4
|
+
"title": "PolicyAnalysisFrame",
|
|
5
|
+
"description": "Structured framing of a policy analysis question (v4 policy domain). 政策分析框架:decision_object / intervention / population / stakeholders / outcomes / context / scope。刻意不使用 education-frame 的 learner/course 概念。扩展字段一律放在 extensions 内。",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"question",
|
|
10
|
+
"decision_object",
|
|
11
|
+
"intervention",
|
|
12
|
+
"population",
|
|
13
|
+
"outcomes"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"question": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"minLength": 5,
|
|
19
|
+
"description": "政策分析问题,如 '是否应在公立高中全面推行无手机课堂政策?'"
|
|
20
|
+
},
|
|
21
|
+
"decision_object": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"enum": [
|
|
24
|
+
"adopt",
|
|
25
|
+
"modify",
|
|
26
|
+
"terminate",
|
|
27
|
+
"maintain",
|
|
28
|
+
"evaluate_impact"
|
|
29
|
+
],
|
|
30
|
+
"description": "待决策的政策对象与动作:采纳 / 修改 / 终止 / 维持 / 评估影响。"
|
|
31
|
+
},
|
|
32
|
+
"intervention": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"additionalProperties": true,
|
|
35
|
+
"description": "待评估的政策干预本身(不是教学干预)。",
|
|
36
|
+
"properties": {
|
|
37
|
+
"policy_name": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"examples": [
|
|
40
|
+
"classroom_phone_ban"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"policy_type": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"enum": [
|
|
46
|
+
"regulation",
|
|
47
|
+
"subsidy",
|
|
48
|
+
"tax_incentive",
|
|
49
|
+
"mandate",
|
|
50
|
+
"information_campaign",
|
|
51
|
+
"nudge",
|
|
52
|
+
"institutional_reform",
|
|
53
|
+
"other"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
"jurisdiction": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"examples": [
|
|
59
|
+
"public_high_schools",
|
|
60
|
+
"province_scope"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"mechanism": {
|
|
64
|
+
"type": "string",
|
|
65
|
+
"description": "政策的作用机制/传导路径。"
|
|
66
|
+
},
|
|
67
|
+
"duration": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"examples": [
|
|
70
|
+
"3_years"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
"intensity": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"examples": [
|
|
76
|
+
"full_prohibition",
|
|
77
|
+
"partial"
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"population": {
|
|
83
|
+
"type": "object",
|
|
84
|
+
"additionalProperties": true,
|
|
85
|
+
"description": "政策针对的人群(不是 'learner' 学习者概念)。",
|
|
86
|
+
"properties": {
|
|
87
|
+
"target_group": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"examples": [
|
|
90
|
+
"public_high_school_students"
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
"excluded_groups": {
|
|
94
|
+
"type": "string"
|
|
95
|
+
},
|
|
96
|
+
"scale": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"examples": [
|
|
99
|
+
"district_wide",
|
|
100
|
+
"national"
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"stakeholders": {
|
|
106
|
+
"type": "object",
|
|
107
|
+
"additionalProperties": true,
|
|
108
|
+
"description": "利益相关者:决策者、受益者、受影响方、实施者。",
|
|
109
|
+
"properties": {
|
|
110
|
+
"decision_maker": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"examples": [
|
|
113
|
+
"school_board",
|
|
114
|
+
"education_bureau"
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
"beneficiaries": {
|
|
118
|
+
"type": "array",
|
|
119
|
+
"items": {
|
|
120
|
+
"type": "string"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"affected_parties": {
|
|
124
|
+
"type": "array",
|
|
125
|
+
"items": {
|
|
126
|
+
"type": "string"
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
"implementers": {
|
|
130
|
+
"type": "array",
|
|
131
|
+
"items": {
|
|
132
|
+
"type": "string"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"outcomes": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"additionalProperties": true,
|
|
140
|
+
"description": "政策结果(policy outcome taxonomy 五类)。",
|
|
141
|
+
"properties": {
|
|
142
|
+
"primary": {
|
|
143
|
+
"type": "array",
|
|
144
|
+
"items": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"enum": [
|
|
147
|
+
"policy_effectiveness",
|
|
148
|
+
"cost_effectiveness",
|
|
149
|
+
"equity",
|
|
150
|
+
"feasibility",
|
|
151
|
+
"implementation_risk"
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"secondary": {
|
|
156
|
+
"type": "array",
|
|
157
|
+
"items": {
|
|
158
|
+
"type": "string"
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"context": {
|
|
164
|
+
"type": "object",
|
|
165
|
+
"additionalProperties": true,
|
|
166
|
+
"description": "政策情境:制度环境、历史沿革、政治条件。",
|
|
167
|
+
"properties": {
|
|
168
|
+
"policy_environment": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"examples": [
|
|
171
|
+
"provincial_education_budget_constraint"
|
|
172
|
+
]
|
|
173
|
+
},
|
|
174
|
+
"prior_policy_history": {
|
|
175
|
+
"type": "string"
|
|
176
|
+
},
|
|
177
|
+
"political_conditions": {
|
|
178
|
+
"type": "string"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"scope": {
|
|
183
|
+
"type": "object",
|
|
184
|
+
"additionalProperties": true,
|
|
185
|
+
"description": "证据检索范围:时间窗、地理、证据类型。",
|
|
186
|
+
"properties": {
|
|
187
|
+
"time_range": {
|
|
188
|
+
"type": "string",
|
|
189
|
+
"examples": [
|
|
190
|
+
"2015-2025"
|
|
191
|
+
]
|
|
192
|
+
},
|
|
193
|
+
"geography": {
|
|
194
|
+
"type": "string",
|
|
195
|
+
"examples": [
|
|
196
|
+
"CN",
|
|
197
|
+
"worldwide"
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
"evidence_types": {
|
|
201
|
+
"type": "array",
|
|
202
|
+
"items": {
|
|
203
|
+
"type": "string"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"comparison": {
|
|
209
|
+
"type": "string",
|
|
210
|
+
"description": "对照/反事实条件,如 '无政策地区'、'政策实施前'。"
|
|
211
|
+
},
|
|
212
|
+
"inclusion_criteria": {
|
|
213
|
+
"type": "array",
|
|
214
|
+
"items": {
|
|
215
|
+
"type": "string"
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
"exclusion_criteria": {
|
|
219
|
+
"type": "array",
|
|
220
|
+
"items": {
|
|
221
|
+
"type": "string"
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
"success_condition": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"description": "什么算这项决策的成功结果。"
|
|
227
|
+
},
|
|
228
|
+
"extensions": {
|
|
229
|
+
"type": "object",
|
|
230
|
+
"description": "结构化扩展字段的统一容器。未列入本 schema 的字段必须放在这里,禁止在顶层新增属性。",
|
|
231
|
+
"additionalProperties": true
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|