diff --git a/Makefile b/Makefile
index 318f2128..9c64378c 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@ PYTHON ?= python3
LOCAL_SKILL_INSTALL_DIR ?= $(HOME)/.agents/skills.disabled/yao-meta-skill
ACTIVE_SKILL_INSTALL_DIR ?= $(HOME)/.agents/skills/yao-meta-skill
-.PHONY: eval eval-suite route-scorecard route-confusion-check description-optimization judge-blind-eval description-optimization-check promotion-check yao-cli-check skill-overview-check skill-report-metrics-check skill-report-charts-check skill-ir-check compiler-check output-eval-check output-execution-check output-review-adjudication-check runtime-conformance-check runtime-permission-check trust-check skill-atlas-check registry-audit-check package-verify-check install-simulation-check upgrade-check review-viewer-check review-studio-check skill-os2-audit-check skill-os2-coverage-check world-class-evidence-check world-class-ledger-check world-class-intake-check world-class-claim-guard-check benchmark-reproducibility-check feedback-check adoption-drift-check telemetry-import-check telemetry-emit-check telemetry-hooks-check telemetry-native-host-check review-waivers-check review-annotations-check baseline-compare-check reference-scan-check github-benchmark-scan-check intent-confidence-check reference-synthesis-check output-risk-profile-check artifact-design-profile-check prompt-quality-profile-check system-model-check iteration-directions-check description-drift-history iteration-ledger results-panel regression-history context-reports portability-report portability-check failure-regression-check package-check package-failure-check security-boundary-check local-install-sync-check snapshot-check validate lint governance-check resource-boundary-check quality-check sync-local-install sync-active-install test ci-test clean
+.PHONY: eval eval-suite route-scorecard route-confusion-check description-optimization judge-blind-eval description-optimization-check promotion-check python-compat-check yao-cli-check skill-overview-check skill-report-metrics-check skill-report-charts-check skill-ir-check compiler-check output-eval-check output-execution-check output-review-adjudication-check runtime-conformance-check runtime-permission-check trust-check skill-atlas-check registry-audit-check package-verify-check install-simulation-check upgrade-check review-viewer-check review-studio-check skill-os2-audit-check skill-os2-coverage-check world-class-evidence-check world-class-ledger-check world-class-intake-check world-class-claim-guard-check benchmark-reproducibility-check feedback-check adoption-drift-check telemetry-import-check telemetry-emit-check telemetry-hooks-check telemetry-native-host-check review-waivers-check review-annotations-check baseline-compare-check reference-scan-check github-benchmark-scan-check intent-confidence-check reference-synthesis-check output-risk-profile-check artifact-design-profile-check prompt-quality-profile-check system-model-check iteration-directions-check description-drift-history iteration-ledger results-panel regression-history context-reports portability-report portability-check failure-regression-check package-check package-failure-check security-boundary-check local-install-sync-check snapshot-check validate lint governance-check resource-boundary-check quality-check sync-local-install sync-active-install test ci-test clean
eval:
$(PYTHON) scripts/trigger_eval.py --description-file evals/improved_description.txt --cases evals/trigger_cases.json --baseline-description-file evals/baseline_description.txt
@@ -28,6 +28,9 @@ description-optimization-check:
promotion-check:
$(PYTHON) tests/verify_promotion_checker.py
+python-compat-check:
+ $(PYTHON) tests/verify_python_compat_check.py
+
yao-cli-check:
$(PYTHON) tests/verify_yao_cli.py
@@ -220,11 +223,11 @@ sync-local-install: package-check
sync-active-install: package-check
$(PYTHON) scripts/sync_local_install.py --install-dir "$(ACTIVE_SKILL_INSTALL_DIR)"
-test: eval eval-suite route-scorecard route-confusion-check description-optimization description-optimization-check promotion-check yao-cli-check skill-overview-check skill-report-metrics-check skill-report-charts-check skill-ir-check compiler-check output-eval-check output-execution-check output-review-adjudication-check runtime-conformance-check runtime-permission-check trust-check skill-atlas-check registry-audit-check package-verify-check install-simulation-check upgrade-check review-viewer-check review-studio-check skill-os2-audit-check skill-os2-coverage-check world-class-evidence-check world-class-ledger-check world-class-intake-check world-class-claim-guard-check benchmark-reproducibility-check feedback-check adoption-drift-check telemetry-import-check telemetry-emit-check telemetry-hooks-check telemetry-native-host-check review-waivers-check review-annotations-check baseline-compare-check reference-scan-check github-benchmark-scan-check intent-confidence-check reference-synthesis-check output-risk-profile-check artifact-design-profile-check prompt-quality-profile-check system-model-check iteration-directions-check description-drift-history iteration-ledger regression-history context-reports portability-report portability-check failure-regression-check package-check package-failure-check security-boundary-check local-install-sync-check snapshot-check validate lint governance-check resource-boundary-check quality-check
+test: eval eval-suite route-scorecard route-confusion-check description-optimization description-optimization-check promotion-check python-compat-check yao-cli-check skill-overview-check skill-report-metrics-check skill-report-charts-check skill-ir-check compiler-check output-eval-check output-execution-check output-review-adjudication-check runtime-conformance-check runtime-permission-check trust-check skill-atlas-check registry-audit-check package-verify-check install-simulation-check upgrade-check review-viewer-check review-studio-check skill-os2-audit-check skill-os2-coverage-check world-class-evidence-check world-class-ledger-check world-class-intake-check world-class-claim-guard-check benchmark-reproducibility-check feedback-check adoption-drift-check telemetry-import-check telemetry-emit-check telemetry-hooks-check telemetry-native-host-check review-waivers-check review-annotations-check baseline-compare-check reference-scan-check github-benchmark-scan-check intent-confidence-check reference-synthesis-check output-risk-profile-check artifact-design-profile-check prompt-quality-profile-check system-model-check iteration-directions-check description-drift-history iteration-ledger regression-history context-reports portability-report portability-check failure-regression-check package-check package-failure-check security-boundary-check local-install-sync-check snapshot-check validate lint governance-check resource-boundary-check quality-check
ci-test:
$(PYTHON) scripts/ci_test.py
clean:
- rm -rf dist tests/tmp tests/tmp_snapshot tests/tmp_cli tests/tmp_skill_overview tests/tmp_skill_report_metrics tests/tmp_skill_report_charts tests/tmp_skill_ir tests/tmp_compile_skill tests/tmp_output_eval tests/tmp_output_execution tests/tmp_output_review_adjudication tests/tmp_conformance tests/tmp_runtime_permission tests/tmp_trust tests/tmp_skill_atlas tests/tmp_registry tests/tmp_package_verification tests/tmp_install_simulation tests/tmp_upgrade_check tests/tmp_reference_scan tests/tmp_iteration_directions tests/tmp_review_viewer tests/tmp_review_studio tests/tmp_skill_os2_audit tests/tmp_skill_os2_coverage tests/tmp_world_class_evidence tests/tmp_world_class_evidence_ledger tests/tmp_world_class_evidence_intake tests/tmp_world_class_claim_guard tests/tmp_benchmark_reproducibility tests/tmp_feedback tests/tmp_adoption_drift tests/tmp_telemetry_import tests/tmp_telemetry_emit tests/tmp_telemetry_hooks tests/tmp_telemetry_native_host tests/tmp_review_waivers tests/tmp_review_annotations tests/tmp_github_benchmark_scan tests/tmp_intent_confidence tests/tmp_reference_synthesis tests/tmp_output_risk_profile tests/tmp_artifact_design_profile tests/tmp_prompt_quality_profile tests/tmp_system_model tests/tmp_security tests/tmp_baseline_compare.json tests/tmp_baseline_compare.md
+ rm -rf dist tests/tmp tests/tmp_snapshot tests/tmp_cli tests/tmp_python_compat tests/tmp_skill_overview tests/tmp_skill_report_metrics tests/tmp_skill_report_charts tests/tmp_skill_ir tests/tmp_compile_skill tests/tmp_output_eval tests/tmp_output_execution tests/tmp_output_review_adjudication tests/tmp_conformance tests/tmp_runtime_permission tests/tmp_trust tests/tmp_skill_atlas tests/tmp_registry tests/tmp_package_verification tests/tmp_install_simulation tests/tmp_upgrade_check tests/tmp_reference_scan tests/tmp_iteration_directions tests/tmp_review_viewer tests/tmp_review_studio tests/tmp_skill_os2_audit tests/tmp_skill_os2_coverage tests/tmp_world_class_evidence tests/tmp_world_class_evidence_ledger tests/tmp_world_class_evidence_intake tests/tmp_world_class_claim_guard tests/tmp_benchmark_reproducibility tests/tmp_feedback tests/tmp_adoption_drift tests/tmp_telemetry_import tests/tmp_telemetry_emit tests/tmp_telemetry_hooks tests/tmp_telemetry_native_host tests/tmp_review_waivers tests/tmp_review_annotations tests/tmp_github_benchmark_scan tests/tmp_intent_confidence tests/tmp_reference_synthesis tests/tmp_output_risk_profile tests/tmp_artifact_design_profile tests/tmp_prompt_quality_profile tests/tmp_system_model tests/tmp_security tests/tmp_baseline_compare.json tests/tmp_baseline_compare.md
find . -type d -name __pycache__ -prune -exec rm -rf {} +
diff --git a/README.md b/README.md
index f12a8b5e..5cb45c2f 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,7 @@ It turns rough workflows, transcripts, prompts, notes, and runbooks into reusabl
- a benchmark reproducibility manifest that checks methodology sections, required artifacts, failure disclosure, and reproduction commands
- Output Eval Lab evidence with assertion grading, execution/timing/token evidence, a blind A/B review pack, a separate answer key, and reviewer adjudication reports
- a runtime permission probe report that checks packaged target adapters for explicit permission metadata, native-enforcement flags, metadata fallback notes, and residual risks
+- a Python compatibility gate that catches supported-runtime syntax hazards before they reach GitHub Actions or packaged distribution
- a side-by-side HTML review studio for first-pass human review
- an artifact design profile that defines visual direction, layout patterns, and quality gates for reports, tutorials, dashboards, screenshots, and review pages
- a prompt quality profile that abstracts need modeling, RTF mapping, complexity, and quality checks into reviewer-visible evidence instead of bloating `SKILL.md`
@@ -134,6 +135,7 @@ python3 scripts/yao.py output-exec
python3 scripts/yao.py output-review
python3 scripts/yao.py conformance .
python3 scripts/yao.py trust .
+python3 scripts/yao.py python-compat .
python3 scripts/yao.py runtime-permissions . --package-dir dist
python3 scripts/yao.py skill-atlas --workspace-root .
python3 scripts/yao.py registry-audit .
@@ -296,6 +298,7 @@ Full reports: [reports/eval_suite.json](reports/eval_suite.json) and [reports/fa
- world-class public claim guard status is published in [reports/world_class_claim_guard.md](reports/world_class_claim_guard.md)
- benchmark reproducibility evidence is published in [reports/benchmark_reproducibility.md](reports/benchmark_reproducibility.md)
- target compiler evidence is published in [reports/compiled_targets.md](reports/compiled_targets.md)
+- Python runtime compatibility evidence is published in [reports/python_compatibility.md](reports/python_compatibility.md)
- registry package metadata and audit status are published in [reports/registry_audit.md](reports/registry_audit.md)
- package archive verification is published in [reports/package_verification.md](reports/package_verification.md)
- temporary local install simulation is published in [reports/install_simulation.md](reports/install_simulation.md)
@@ -410,7 +413,7 @@ Utility scripts that make the meta-skill operational:
- `run_description_optimization_suite.py`: runs description optimization across the root skill and governed examples, then writes reusable reports and optional drift snapshots with calibration and family summaries
- `promotion_checker.py`: applies promotion policy to current description candidates, writes promotion decisions, builds candidate registries, and emits iteration bundles with review stubs
- `create_iteration_snapshot.py`: freezes the current promotion decision into a versioned release snapshot with review, route, and context evidence
-- `yao.py`: unified authoring CLI that exposes init, validate, optimize-description, promote-check, review, release-snapshot, workspace-flow, report, skill-ir, compile-skill, output-exec, output-review, skill-os2-audit, skill-os2-coverage, world-class-evidence, world-class-ledger, world-class-intake, world-class-claim-guard, benchmark-reproducibility, telemetry-emit, telemetry-hooks, telemetry-import, package, registry-audit, package-verify, install-simulate, upgrade-check, review-waivers, and test as one entrypoint
+- `yao.py`: unified authoring CLI that exposes init, validate, optimize-description, promote-check, python-compat, review, release-snapshot, workspace-flow, report, skill-ir, compile-skill, output-exec, output-review, skill-os2-audit, skill-os2-coverage, world-class-evidence, world-class-ledger, world-class-intake, world-class-claim-guard, benchmark-reproducibility, telemetry-emit, telemetry-hooks, telemetry-import, package, registry-audit, package-verify, install-simulate, upgrade-check, review-waivers, and test as one entrypoint
- `render_description_drift_history.py`: turns description-optimization snapshots into a readable drift-history report
- `build_confusion_matrix.py`: scores route confusion across tracked sibling skills and `no_route` cases, then writes a route scorecard and optional milestone snapshot
- `render_iteration_ledger.py`: compresses regression milestones, description optimization drift, and route scorecards into one iteration-facing ledger
@@ -426,6 +429,7 @@ Utility scripts that make the meta-skill operational:
- `render_world_class_evidence_intake.py`: validates world-class external and human evidence packets against provenance, privacy, artifact, and anti-overclaim requirements before ledger review
- `render_world_class_claim_guard.py`: scans README, docs, and reports for premature world-class completion claims while accepted evidence is still pending
- `render_benchmark_reproducibility.py`: renders methodology, artifact, failure-disclosure, and reproduction-command evidence for public benchmark claims
+- `python_compat_check.py`: checks Python source for supported-runtime compatibility hazards such as Python 3.11 f-string expression backslashes
- `cross_packager.py`: builds client-specific export artifacts from Skill IR plus neutral metadata, with explicit platform contracts and validation
- `render_portability_report.py`: scores cross-environment portability from neutral metadata, degradation rules, and consumer validation coverage
- `render_skill_overview.py`: generates the white-background bilingual HTML skill audit report with sticky four-character Chinese navigation, top-right language switch, v2 scorecard, inline SVG charts, contract boundary, quality review, risk governance, assets, and iteration roadmap
diff --git a/registry/index.json b/registry/index.json
index 7f8897e0..6811f38d 100644
--- a/registry/index.json
+++ b/registry/index.json
@@ -16,7 +16,7 @@
"vscode"
],
"package_metadata": "registry/packages/yao-meta-skill.json",
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
}
]
}
diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json
index 67dafb81..82dc9a55 100644
--- a/registry/packages/yao-meta-skill.json
+++ b/registry/packages/yao-meta-skill.json
@@ -16,8 +16,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d",
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8"
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d",
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05"
},
"compatibility": {
"openai": "pass",
@@ -48,7 +48,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8",
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05",
"package_verification": "reports/package_verification.json",
"install_simulated": true,
"install_simulation": "reports/install_simulation.json"
diff --git a/reports/benchmark_reproducibility.json b/reports/benchmark_reproducibility.json
index 0f0053da..fa7e84dd 100644
--- a/reports/benchmark_reproducibility.json
+++ b/reports/benchmark_reproducibility.json
@@ -3,34 +3,34 @@
"ok": true,
"generated_at": "2026-06-14",
"skill_dir": ".",
- "commit": "2afb802a87468a8cf1bbd11769774ad373425a33",
+ "commit": "ee4879f296d6e6b5dde76afc37b81504806afc82",
"git_status": {
"available": true,
"dirty": true,
- "changed_file_count": 18,
+ "changed_file_count": 44,
"sample": [
+ " M Makefile",
+ " M README.md",
" M registry/index.json",
" M registry/packages/yao-meta-skill.json",
" M reports/benchmark_reproducibility.json",
" M reports/benchmark_reproducibility.md",
+ " M reports/compiled_targets.json",
" M reports/context_budget.json",
+ " M reports/install_simulation.json",
" M reports/output_execution_runs.json",
" M reports/output_execution_runs.md",
- " M reports/package_verification.json",
- " M reports/package_verification.md",
- " M reports/registry_audit.json",
- " M reports/registry_audit.md",
- " M reports/review-studio.html"
+ " M reports/package_verification.json"
]
},
"summary": {
"reproducibility_ready": true,
"methodology_complete": true,
- "required_artifact_count": 19,
+ "required_artifact_count": 20,
"missing_artifact_count": 0,
"output_case_count": 5,
"failure_disclosure_count": 3,
- "command_count": 18,
+ "command_count": 19,
"command_executed_count": 10,
"timing_observed_count": 10,
"model_executed_count": 0,
@@ -42,7 +42,7 @@
"world_class_task_count": 4,
"world_class_ledger_pending_count": 4,
"working_tree_dirty": true,
- "changed_file_count": 18
+ "changed_file_count": 44
},
"methodology": {
"path": "reports/benchmark_methodology.md",
@@ -115,8 +115,8 @@
"label": "output_execution",
"path": "reports/output_execution_runs.json",
"exists": true,
- "bytes": 7965,
- "sha256": "e2cc7e4454a42b7780b63c33c5e2d2393e9e9394a7d5fe4b8521e6e3061f5a65"
+ "bytes": 7966,
+ "sha256": "0340b973c3e967c0e46b36109cc6c0419446be1658a9e02d706aec2fd946acea"
},
{
"label": "blind_review",
@@ -150,36 +150,43 @@
"label": "trust_report",
"path": "reports/security_trust_report.json",
"exists": true,
- "bytes": 86196,
- "sha256": "ce04044319c8b29deab9430ffa7bfeae7dab814d686e11445d2fbaf6e42e5715"
+ "bytes": 87272,
+ "sha256": "0eed3f527cd23ee75ddc2f5bf067366571f43eb99708f3180f2a399810d5d48f"
+ },
+ {
+ "label": "python_compatibility",
+ "path": "reports/python_compatibility.json",
+ "exists": true,
+ "bytes": 18283,
+ "sha256": "435dabcd3ce01fc90fc01f1b359e5063e1ff468eec8ae38daeb05116edc5d08f"
},
{
"label": "registry_audit",
"path": "reports/registry_audit.json",
"exists": true,
"bytes": 3183,
- "sha256": "e75cba25d5196616f1bde6aeb3328b93a7e05d50f7ed49f4e9fa07eba3436c83"
+ "sha256": "dee17f5e1f35cd167f1237e55609b4422e9ff21caf9d87e00a06c1d5c657f319"
},
{
"label": "package_verification",
"path": "reports/package_verification.json",
"exists": true,
"bytes": 19325,
- "sha256": "87f88af64e46ad276e3be55ed0b7d4c96d38b72e78f42034385f7996b0fc19fb"
+ "sha256": "b247e849e011158e40128cda8a40ca4b6f6093b67f7aaa4b26a845fa2a981b9e"
},
{
"label": "install_simulation",
"path": "reports/install_simulation.json",
"exists": true,
"bytes": 8557,
- "sha256": "ae7cccad47924b9f4e2572ae32a9f68209dead4741c982d81446d8ea8474b822"
+ "sha256": "2bb990fc21986c840309a8ca118612ba27baa7538fd426538ab7955ea9bebb57"
},
{
"label": "skill_os2_audit",
"path": "reports/skill_os2_audit.json",
"exists": true,
"bytes": 13946,
- "sha256": "3f1c6fdf7b52a365d9f458797a444b70aa34acffe78f24b4c08b4a428db5e32b"
+ "sha256": "ef085ddc8a1e23ddda43d41adde62b50e6b1988842b232019c28a2e29b1d807a"
},
{
"label": "world_class_evidence_plan",
@@ -206,8 +213,8 @@
"label": "world_class_claim_guard",
"path": "reports/world_class_claim_guard.json",
"exists": true,
- "bytes": 7809,
- "sha256": "7365f6cd85b89326816590cd2403b1210e9afba45f0bc3ca1af6b4a07299b9ad"
+ "bytes": 7898,
+ "sha256": "63628e78d1d2967928b86f73faa133ddc7d712499ffb5dd1d7947b2c070f3899"
}
],
"missing_artifacts": [],
@@ -252,6 +259,11 @@
"command": "python3 scripts/yao.py trust .",
"evidence": "reports/security_trust_report.json"
},
+ {
+ "label": "python compatibility",
+ "command": "python3 scripts/yao.py python-compat .",
+ "evidence": "reports/python_compatibility.json"
+ },
{
"label": "package",
"command": "python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --expectations evals/packaging_expectations.json --output-dir dist --zip",
diff --git a/reports/benchmark_reproducibility.md b/reports/benchmark_reproducibility.md
index d873f5c5..9806c3cd 100644
--- a/reports/benchmark_reproducibility.md
+++ b/reports/benchmark_reproducibility.md
@@ -1,22 +1,22 @@
# Benchmark Reproducibility
Generated at: `2026-06-14`
-Commit: `2afb802a87468a8cf1bbd11769774ad373425a33`
+Commit: `ee4879f296d6e6b5dde76afc37b81504806afc82`
Working tree dirty at generation: `true`
## Summary
- reproducibility ready: `true`
- methodology complete: `true`
-- required artifacts: `19`
+- required artifacts: `20`
- missing artifacts: `0`
- output cases: `5`
- disclosed failure cases: `3`
-- reproduction commands: `18`
+- reproduction commands: `19`
- provider evidence complete: `false`
- human review complete: `false`
- world-class ready: `false`
-- changed files at generation: `18`
+- changed files at generation: `44`
This report proves local benchmark reproducibility only. It keeps external provider and human-review gaps visible instead of counting them as complete.
@@ -40,20 +40,21 @@ This report proves local benchmark reproducibility only. It keeps external provi
| output_cases | `evals/output/cases.jsonl` | present | `a6ae96857116` |
| output_schema | `evals/output/schema.json` | present | `8ee340c95064` |
| output_scorecard | `reports/output_quality_scorecard.json` | present | `0806258a8e08` |
-| output_execution | `reports/output_execution_runs.json` | present | `e2cc7e4454a4` |
+| output_execution | `reports/output_execution_runs.json` | present | `0340b973c3e9` |
| blind_review | `reports/output_blind_review_pack.json` | present | `bbe2db8ec277` |
| review_adjudication | `reports/output_review_adjudication.json` | present | `ddd9af90d42e` |
| trigger_scorecard | `reports/route_scorecard.json` | present | `c164e83e36d0` |
| runtime_conformance | `reports/conformance_matrix.json` | present | `8251329e663d` |
-| trust_report | `reports/security_trust_report.json` | present | `ce04044319c8` |
-| registry_audit | `reports/registry_audit.json` | present | `e75cba25d519` |
-| package_verification | `reports/package_verification.json` | present | `87f88af64e46` |
-| install_simulation | `reports/install_simulation.json` | present | `ae7cccad4792` |
-| skill_os2_audit | `reports/skill_os2_audit.json` | present | `3f1c6fdf7b52` |
+| trust_report | `reports/security_trust_report.json` | present | `0eed3f527cd2` |
+| python_compatibility | `reports/python_compatibility.json` | present | `435dabcd3ce0` |
+| registry_audit | `reports/registry_audit.json` | present | `dee17f5e1f35` |
+| package_verification | `reports/package_verification.json` | present | `b247e849e011` |
+| install_simulation | `reports/install_simulation.json` | present | `2bb990fc2198` |
+| skill_os2_audit | `reports/skill_os2_audit.json` | present | `ef085ddc8a1e` |
| world_class_evidence_plan | `reports/world_class_evidence_plan.json` | present | `ed1274b7c18c` |
| world_class_evidence_ledger | `reports/world_class_evidence_ledger.json` | present | `5ed043491c3d` |
| world_class_evidence_intake | `reports/world_class_evidence_intake.json` | present | `124b9239d7f3` |
-| world_class_claim_guard | `reports/world_class_claim_guard.json` | present | `7365f6cd85b8` |
+| world_class_claim_guard | `reports/world_class_claim_guard.json` | present | `63628e78d1d2` |
## Reproduction Commands
@@ -73,6 +74,8 @@ This report proves local benchmark reproducibility only. It keeps external provi
- evidence: `reports/conformance_matrix.json`
- `python3 scripts/yao.py trust .`
- evidence: `reports/security_trust_report.json`
+- `python3 scripts/yao.py python-compat .`
+ - evidence: `reports/python_compatibility.json`
- `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --expectations evals/packaging_expectations.json --output-dir dist --zip`
- evidence: `dist/yao-meta-skill.zip`
- `python3 scripts/yao.py package-verify . --package-dir dist --require-zip`
diff --git a/reports/compiled_targets.json b/reports/compiled_targets.json
index 1ee317ee..7eeb01fb 100644
--- a/reports/compiled_targets.json
+++ b/reports/compiled_targets.json
@@ -169,6 +169,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -223,8 +224,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
@@ -383,7 +383,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -401,6 +401,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -480,14 +481,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -509,7 +510,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -622,7 +623,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -640,6 +641,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -719,14 +721,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -746,7 +748,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -1004,6 +1006,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -1058,8 +1061,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
@@ -1218,7 +1220,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -1236,6 +1238,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -1315,14 +1318,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -1344,7 +1347,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -1457,7 +1460,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -1475,6 +1478,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -1554,14 +1558,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -1581,7 +1585,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -1839,6 +1843,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -1893,8 +1898,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
@@ -2053,7 +2057,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -2071,6 +2075,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -2150,14 +2155,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -2179,7 +2184,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -2285,7 +2290,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -2303,6 +2308,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -2382,14 +2388,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -2409,7 +2415,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -2658,6 +2664,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -2712,8 +2719,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
@@ -2872,7 +2878,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -2890,6 +2896,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -2969,14 +2976,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -2998,7 +3005,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -3104,7 +3111,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -3122,6 +3129,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -3201,14 +3209,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -3228,7 +3236,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -3477,6 +3485,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -3531,8 +3540,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
@@ -3691,7 +3699,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -3709,6 +3717,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -3788,14 +3797,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -3817,7 +3826,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -3927,7 +3936,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -3945,6 +3954,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -4024,14 +4034,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -4051,7 +4061,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
diff --git a/reports/context_budget.json b/reports/context_budget.json
index 9bcfa5f9..44b18237 100644
--- a/reports/context_budget.json
+++ b/reports/context_budget.json
@@ -6,10 +6,10 @@
"context_budget_tier": "production",
"context_budget_limit": 1000,
"skill_body_tokens": 751,
- "other_text_tokens": 1051189,
+ "other_text_tokens": 1067478,
"estimated_initial_load_tokens": 944,
- "estimated_total_text_tokens": 1051940,
- "relevant_file_count": 455,
+ "estimated_total_text_tokens": 1068229,
+ "relevant_file_count": 461,
"unused_resource_dirs": [],
"quality_signal_points": 130,
"quality_density": 137.7
diff --git a/reports/install_simulation.json b/reports/install_simulation.json
index 0b866162..78bc145e 100644
--- a/reports/install_simulation.json
+++ b/reports/install_simulation.json
@@ -8,7 +8,7 @@
"installed_skill_dir": "[temporary-install-root]/yao-meta-skill",
"summary": {
"archive_present": true,
- "archive_entry_count": 543,
+ "archive_entry_count": 547,
"archive_extracted": true,
"entrypoint_loaded": true,
"manifest_loaded": true,
diff --git a/reports/output_execution_runs.json b/reports/output_execution_runs.json
index d62c107a..0af2703d 100644
--- a/reports/output_execution_runs.json
+++ b/reports/output_execution_runs.json
@@ -34,7 +34,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 29.49,
+ "duration_ms": 28.61,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -62,7 +62,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 27.7,
+ "duration_ms": 28.26,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -85,7 +85,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 27.65,
+ "duration_ms": 28.3,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -113,7 +113,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 27.86,
+ "duration_ms": 28.97,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -136,7 +136,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 28.24,
+ "duration_ms": 28.09,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -164,7 +164,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 27.91,
+ "duration_ms": 28.12,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -187,7 +187,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 28.04,
+ "duration_ms": 27.99,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -214,7 +214,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 28.13,
+ "duration_ms": 27.69,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -237,7 +237,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 27.7,
+ "duration_ms": 28.08,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -266,7 +266,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 28.03,
+ "duration_ms": 27.82,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
diff --git a/reports/output_execution_runs.md b/reports/output_execution_runs.md
index 8ee784c2..6f05043a 100644
--- a/reports/output_execution_runs.md
+++ b/reports/output_execution_runs.md
@@ -23,16 +23,16 @@ Command runner evidence is present. This proves the eval harness executed an ext
| Case | Variant | Mode | Model | Duration ms | Tokens | Score | Status |
| --- | --- | --- | --- | ---: | ---: | ---: | --- |
-| skill-package-contract | baseline | command | local-output-eval-runner | 29.49 | 33 | 0.0 | pass |
-| skill-package-contract | with_skill | command | local-output-eval-runner | 27.7 | 73 | 100.0 | pass |
-| output-eval-expectation | baseline | command | local-output-eval-runner | 27.65 | 36 | 0.0 | pass |
-| output-eval-expectation | with_skill | command | local-output-eval-runner | 27.86 | 80 | 100.0 | pass |
-| ir-before-packaging | baseline | command | local-output-eval-runner | 28.24 | 33 | 0.0 | pass |
-| ir-before-packaging | with_skill | command | local-output-eval-runner | 27.91 | 80 | 100.0 | pass |
-| near-neighbor-boundary | baseline | command | local-output-eval-runner | 28.04 | 36 | 0.0 | pass |
-| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 28.13 | 65 | 100.0 | pass |
-| file-backed-governed-package | baseline | command | local-output-eval-runner | 27.7 | 37 | 0.0 | pass |
-| file-backed-governed-package | with_skill | command | local-output-eval-runner | 28.03 | 98 | 100.0 | pass |
+| skill-package-contract | baseline | command | local-output-eval-runner | 28.61 | 33 | 0.0 | pass |
+| skill-package-contract | with_skill | command | local-output-eval-runner | 28.26 | 73 | 100.0 | pass |
+| output-eval-expectation | baseline | command | local-output-eval-runner | 28.3 | 36 | 0.0 | pass |
+| output-eval-expectation | with_skill | command | local-output-eval-runner | 28.97 | 80 | 100.0 | pass |
+| ir-before-packaging | baseline | command | local-output-eval-runner | 28.09 | 33 | 0.0 | pass |
+| ir-before-packaging | with_skill | command | local-output-eval-runner | 28.12 | 80 | 100.0 | pass |
+| near-neighbor-boundary | baseline | command | local-output-eval-runner | 27.99 | 36 | 0.0 | pass |
+| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 27.69 | 65 | 100.0 | pass |
+| file-backed-governed-package | baseline | command | local-output-eval-runner | 28.08 | 37 | 0.0 | pass |
+| file-backed-governed-package | with_skill | command | local-output-eval-runner | 27.82 | 98 | 100.0 | pass |
## Next Fixes
diff --git a/reports/package_verification.json b/reports/package_verification.json
index 08ea09d7..f9535351 100644
--- a/reports/package_verification.json
+++ b/reports/package_verification.json
@@ -8,8 +8,8 @@
"target_count": 4,
"adapter_count": 4,
"archive_present": true,
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8",
- "archive_entry_count": 543,
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05",
+ "archive_entry_count": 547,
"failure_count": 0,
"warning_count": 0
},
diff --git a/reports/package_verification.md b/reports/package_verification.md
index d0189ab6..150612c4 100644
--- a/reports/package_verification.md
+++ b/reports/package_verification.md
@@ -4,7 +4,7 @@
- Package directory: `dist`
- Targets: `4 / 4` adapters present
- Archive present: `True`
-- Archive SHA256: `737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8`
+- Archive SHA256: `13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05`
- Failures: `0`
- Warnings: `0`
diff --git a/reports/python_compatibility.json b/reports/python_compatibility.json
new file mode 100644
index 00000000..7cb7a7de
--- /dev/null
+++ b/reports/python_compatibility.json
@@ -0,0 +1,871 @@
+{
+ "schema_version": "1.0",
+ "ok": true,
+ "generated_at": "2026-06-14",
+ "root": ".",
+ "summary": {
+ "target_python": "3.11",
+ "file_count": 140,
+ "issue_count": 0,
+ "syntax_error_count": 0,
+ "fstring_311_violation_count": 0,
+ "decision": "pass"
+ },
+ "rules": [
+ {
+ "key": "current-python-syntax",
+ "reason": "Every scanned Python source file must compile under the running interpreter."
+ },
+ {
+ "key": "fstring-expression-backslash",
+ "reason": "Python 3.11 rejects backslashes inside f-string expressions; keep escaping outside the expression."
+ }
+ ],
+ "files": [
+ {
+ "path": "examples/complex-release-orchestrator/generated-skill/scripts/build_release_packet.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "examples/governed-incident-command/generated-skill/scripts/build_incident_packet.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "geo-ranking-article-generator/scripts/build_html_index.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/adjudicate_output_review.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/build_confusion_matrix.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/build_skill_atlas.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/check_update.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/ci_test.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/collect_feedback.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/compile_skill.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/context_sizer.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/create_iteration_snapshot.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/cross_packager.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/diff_eval.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/emit_telemetry_event.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/export_skill_ir.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/github_benchmark_scan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/governance_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/import_telemetry_events.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/init_skill.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/judge_blind_eval.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/lint_skill.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/local_output_eval_runner.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/optimize_description.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/probe_runtime_permissions.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/promotion_checker.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/provider_output_eval_runner.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/python_compat_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/registry_audit.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_adoption_drift_report.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_artifact_design_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_baseline_compare.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_benchmark_reproducibility.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_context_reports.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_description_drift_history.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_eval_dashboard.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_intent_confidence.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_intent_dialogue.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_iteration_directions.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_iteration_ledger.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_output_risk_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_portability_report.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_prompt_quality_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_reference_scan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_reference_synthesis.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_regression_history.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_review_annotations.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_review_studio.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_review_viewer.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_review_waivers.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_skill_os2_audit.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_skill_os2_coverage.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_skill_overview.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_social_preview.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_system_model.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_telemetry_hook_recipes.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_world_class_claim_guard.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_world_class_evidence_intake.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_world_class_evidence_ledger.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_world_class_evidence_plan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/resource_boundary_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/review_studio_formatting.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/review_studio_gates.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/review_studio_layout.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/run_conformance_suite.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/run_description_optimization_suite.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/run_eval_suite.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/run_output_eval.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/run_output_execution.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/simulate_install.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/skill_report_charts.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/skill_report_layout.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/skill_report_metrics.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/skill_report_model.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/sync_local_install.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/telemetry_native_host.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/trigger_eval.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/trust_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/upgrade_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/validate_skill.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/verify_package.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/yao.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/yao_cli_config.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/yao_cli_parser.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/yao_cli_telemetry.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_adapter_snapshots.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_adoption_drift.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_artifact_design_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_baseline_compare.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_benchmark_reproducibility.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_compile_skill.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_conformance_suite.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_description_optimization.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_failure_regressions.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_feedback.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_github_benchmark_scan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_install_simulation.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_intent_confidence.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_iteration_directions.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_local_install_sync.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_output_eval_lab.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_output_execution_runs.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_output_review_adjudication.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_output_risk_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_package_verification.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_packager_failures.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_portability_report.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_promotion_checker.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_prompt_quality_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_python_compat_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_quality_checks.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_reference_scan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_reference_synthesis.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_registry_audit.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_review_annotations.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_review_studio.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_review_viewer.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_review_waivers.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_route_confusion.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_runtime_permission_probes.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_security_boundaries.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_atlas.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_ir.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_os2_audit.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_os2_coverage.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_overview.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_report_charts.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_report_metrics.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_system_model.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_telemetry_emit.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_telemetry_hooks.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_telemetry_import.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_telemetry_native_host.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_trust_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_upgrade_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_world_class_claim_guard.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_world_class_evidence_intake.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_world_class_evidence_ledger.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_world_class_evidence_plan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_yao_cli.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ }
+ ],
+ "issues": [],
+ "artifacts": {
+ "json": "reports/python_compatibility.json",
+ "markdown": "reports/python_compatibility.md"
+ }
+}
diff --git a/reports/python_compatibility.md b/reports/python_compatibility.md
new file mode 100644
index 00000000..fbf432d1
--- /dev/null
+++ b/reports/python_compatibility.md
@@ -0,0 +1,20 @@
+# Python Compatibility
+
+Generated at: `2026-06-14`
+
+## Summary
+
+- decision: `pass`
+- target python: `3.11`
+- files scanned: `140`
+- issues: `0`
+- syntax errors: `0`
+- f-string 3.11 violations: `0`
+
+This report catches Python syntax and compatibility hazards that can pass on a newer local interpreter but fail in the supported CI/runtime interpreter.
+
+## Issues
+
+| Path | Line | Rule | Message |
+| --- | ---: | --- | --- |
+| `none` | 0 | `none` | none |
diff --git a/reports/registry_audit.json b/reports/registry_audit.json
index 9e892eed..2624968e 100644
--- a/reports/registry_audit.json
+++ b/reports/registry_audit.json
@@ -21,8 +21,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d",
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8"
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d",
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05"
},
"compatibility": {
"openai": "pass",
@@ -53,7 +53,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8",
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05",
"package_verification": "reports/package_verification.json",
"install_simulated": true,
"install_simulation": "reports/install_simulation.json"
@@ -78,7 +78,7 @@
"vscode"
],
"package_metadata": "registry/packages/yao-meta-skill.json",
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
}
]
},
diff --git a/reports/registry_audit.md b/reports/registry_audit.md
index 5f8d97a8..192a2e4c 100644
--- a/reports/registry_audit.md
+++ b/reports/registry_audit.md
@@ -6,8 +6,8 @@
- Maturity: `governed`
- Owner: `Yao Team`
- License: `MIT`
-- Package SHA256: `25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d`
-- Archive SHA256: `737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8`
+- Package SHA256: `5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d`
+- Archive SHA256: `13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05`
- Install simulated: `True`
## Compatibility
diff --git a/reports/review-studio.html b/reports/review-studio.html
index 1438b1b6..8d99597f 100644
--- a/reports/review-studio.html
+++ b/reports/review-studio.html
@@ -292,12 +292,12 @@
核心指标
- Skill IR2.0.05 targets in platform-neutral contract
Compiler5/5target contracts compiled from Skill IR
Output Delta100.05 cases; 1 file-backed
Exec Runs10command 10; model 0; recorded 0
Blind A/B5review pairs hide baseline vs with-skill labels
Review A/B0/5adjudication decisions; pending 5
Blueprint20/202.0 coverage; evidence pending 4
Runtime5/5target conformance pass rate
Perm Probe4/40 native enforcement targets
Trust081 scripts scanned; secrets found
Atlas512 scanned skills; route collisions
Driftlow1 metadata events; 0 missed triggers
Waivers00 gates covered; human risk decisions
Intake4/40 valid submissions; 0 invalid
Claim Guard066 public surfaces scanned
Notes0/00 open blocker annotations
Registry1.1.05 targets; MIT license
Archivepass543 zip entries; package verification
Installpass4 adapters; 12 permissions enforced; 0 permission failures
Upgrademinordeclared minor; 0 breaking changes
+ Skill IR2.0.05 targets in platform-neutral contract
Compiler5/5target contracts compiled from Skill IR
Output Delta100.05 cases; 1 file-backed
Exec Runs10command 10; model 0; recorded 0
Blind A/B5review pairs hide baseline vs with-skill labels
Review A/B0/5adjudication decisions; pending 5
Blueprint20/202.0 coverage; evidence pending 4
Runtime5/5target conformance pass rate
Perm Probe4/40 native enforcement targets
Trust082 scripts scanned; secrets found
Py Compat0140 files scanned for Python 3.11
Atlas512 scanned skills; route collisions
Driftlow1 metadata events; 0 missed triggers
Waivers00 gates covered; human risk decisions
Intake4/40 valid submissions; 0 invalid
Claim Guard067 public surfaces scanned
Notes0/00 open blocker annotations
Registry1.1.05 targets; MIT license
Archivepass547 zip entries; package verification
Installpass4 adapters; 12 permissions enforced; 0 permission failures
Upgrademinordeclared minor; 0 breaking changes
审查闸门
- 通过
意图画布
intent confidence 100/100; Intent is clear enough to package the first routeable version.
通过
触发实验
13 trigger cases; 0 misroutes; 0 ambiguous
关注
输出实验
5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5
通过
上下文
initial load 944/1000; quality density 137.7
通过
运行矩阵
5 / 5 targets pass
通过
信任报告
0 secrets; 81 scripts; 3 network-capable scripts; 0 help smoke failures
通过
权限批准
3/3 permissions approved; gaps 0; required file_write, network, subprocess
通过
权限探针
4/4 targets probed; native 0; metadata fallback 4; residual risks 4
通过
组合治理
12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues
通过
运营回路
1 metadata events; adoption 0; missed 0; bad-output 0; risk low
关注
人工批准
0 active waivers; 1 warning gates still need reviewer decision
关注
世界证据
4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true
通过
注册审计
yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures
通过
发布路线
0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended
+ 通过
意图画布
intent confidence 100/100; Intent is clear enough to package the first routeable version.
通过
触发实验
13 trigger cases; 0 misroutes; 0 ambiguous
关注
输出实验
5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5
通过
上下文
initial load 944/1000; quality density 137.7
通过
运行矩阵
5 / 5 targets pass
通过
信任报告
0 secrets; 82 scripts; 3 network-capable scripts; 0 help smoke failures
通过
权限批准
3/3 permissions approved; gaps 0; required file_write, network, subprocess
通过
权限探针
4/4 targets probed; native 0; metadata fallback 4; residual risks 4
通过
组合治理
12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues
通过
运营回路
1 metadata events; adoption 0; missed 0; bad-output 0; risk low
关注
人工批准
0 active waivers; 1 warning gates still need reviewer decision
关注
世界证据
4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true
通过
注册审计
yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures
通过
发布路线
0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended
@@ -323,7 +323,7 @@
证据路径
-
- skill_overviewreports/skill-overview.html
- review_viewerreports/review-viewer.html
- output_evalreports/output_quality_scorecard.md
- output_executionreports/output_execution_runs.md
- output_blind_reviewreports/output_blind_review_pack.md
- output_review_decisionsreports/output_review_decisions.json
- output_review_adjudicationreports/output_review_adjudication.md
- benchmark_reproducibilityreports/benchmark_reproducibility.md
- skill_os2_coveragereports/skill_os2_coverage.md
- runtime_conformancereports/conformance_matrix.md
- trust_reportreports/security_trust_report.md
- permission_policysecurity/permission_policy.md
- runtime_permissionsreports/runtime_permission_probes.md
- skill_atlasreports/skill_atlas.html
- compiled_targetsreports/compiled_targets.md
- adoption_driftreports/adoption_drift_report.md
- review_waiversreports/review_waivers.md
- review_annotationsreports/review_annotations.md
- world_class_evidence_planreports/world_class_evidence_plan.md
- world_class_evidence_ledgerreports/world_class_evidence_ledger.md
- world_class_evidence_intakereports/world_class_evidence_intake.md
- world_class_claim_guardreports/world_class_claim_guard.md
- registry_auditreports/registry_audit.md
- package_verificationreports/package_verification.md
- install_simulationreports/install_simulation.md
- upgrade_checkreports/upgrade_check.md
- migrationdocs/migration-v2.md
+
- skill_overviewreports/skill-overview.html
- review_viewerreports/review-viewer.html
- output_evalreports/output_quality_scorecard.md
- output_executionreports/output_execution_runs.md
- output_blind_reviewreports/output_blind_review_pack.md
- output_review_decisionsreports/output_review_decisions.json
- output_review_adjudicationreports/output_review_adjudication.md
- benchmark_reproducibilityreports/benchmark_reproducibility.md
- skill_os2_coveragereports/skill_os2_coverage.md
- runtime_conformancereports/conformance_matrix.md
- trust_reportreports/security_trust_report.md
- python_compatibilityreports/python_compatibility.md
- permission_policysecurity/permission_policy.md
- runtime_permissionsreports/runtime_permission_probes.md
- skill_atlasreports/skill_atlas.html
- compiled_targetsreports/compiled_targets.md
- adoption_driftreports/adoption_drift_report.md
- review_waiversreports/review_waivers.md
- review_annotationsreports/review_annotations.md
- world_class_evidence_planreports/world_class_evidence_plan.md
- world_class_evidence_ledgerreports/world_class_evidence_ledger.md
- world_class_evidence_intakereports/world_class_evidence_intake.md
- world_class_claim_guardreports/world_class_claim_guard.md
- registry_auditreports/registry_audit.md
- package_verificationreports/package_verification.md
- install_simulationreports/install_simulation.md
- upgrade_checkreports/upgrade_check.md
- migrationdocs/migration-v2.md
@@ -363,10 +363,15 @@
- 信任报告
- Secret
- 0
- 脚本数
- 81
- 网络脚本
- 3
- Help 失败
- 0
- 包体哈希
25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d
+ 信任报告
- Secret
- 0
- 脚本数
- 82
- 网络脚本
- 3
- Help 失败
- 0
- 包体哈希
5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d
安全边界
高风险 secret、远程 inline execution、缺失依赖策略或无法解释的脚本接口应阻断 governed release。
+
+ Python 兼容
- 目标 Python
- 3.11
- 文件数
- 140
- 问题数
- 0
- 语法错误
- 0
- F-string 3.11
- 0
+ 解释器边界
CI 和发布审查以 Python 3.11 兼容为底线;本地更高版本允许的新语法不能绕过兼容门禁。
+
+
权限批准
3/3 permissions approved; gaps 0; required file_write, network, subprocess
批准策略
高权限能力需要 reviewer、scope、reason、expires_at 和 openai/claude/generic 目标端 enforcement 说明。
@@ -414,18 +419,18 @@
- 声明守卫
- 台账可声明
- 否
- 台账待补
- 4
- 声明面
- 66
- 违规数
- 0
- Overclaim Guard Active
- 是
+ 声明守卫
- 台账可声明
- 否
- 台账待补
- 4
- 声明面
- 67
- 违规数
- 0
- Overclaim Guard Active
- 是
声明边界
claim guard 扫描 README、docs 和 reports 中的完成态表述;ledger 未 ready 时,任何英文完成断言、true 状态声明或中文完成态都会阻断发布审查。
注册审计
yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures
- 包体元数据
- 名称
- yao-meta-skill
- 版本
- 1.1.0
- Maturity
- governed
- Owner
- Yao Team
- License
- MIT
- 信任级别
- local
- 目标平台
- openai, claude, generic, agent-skills-compatible, vscode
- 兼容通过
- 6/6
- 归档哈希
737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8
+ 包体元数据
- 名称
- yao-meta-skill
- 版本
- 1.1.0
- Maturity
- governed
- Owner
- Yao Team
- License
- MIT
- 信任级别
- local
- 目标平台
- openai, claude, generic, agent-skills-compatible, vscode
- 兼容通过
- 6/6
- 归档哈希
13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05
发布路线
0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended
- 包体验证
- 目标数
- 4
- Adapter
- 4
- 归档存在
- 是
- Zip 条目
- 543
- 失败数
- 0
- 警告数
- 0
- 归档哈希
737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8
+ 包体验证
- 目标数
- 4
- Adapter
- 4
- 归档存在
- 是
- Zip 条目
- 547
- 失败数
- 0
- 警告数
- 0
- 归档哈希
13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05
diff --git a/reports/review-studio.json b/reports/review-studio.json
index 6cd1792e..8af45483 100644
--- a/reports/review-studio.json
+++ b/reports/review-studio.json
@@ -59,7 +59,7 @@
"key": "trust-report",
"label": "信任报告",
"status": "pass",
- "detail": "0 secrets; 81 scripts; 3 network-capable scripts; 0 help smoke failures",
+ "detail": "0 secrets; 82 scripts; 3 network-capable scripts; 0 help smoke failures",
"evidence": "reports/security_trust_report.json",
"link": "security_trust_report.md"
},
@@ -363,6 +363,7 @@
"skill_os2_coverage": "reports/skill_os2_coverage.md",
"runtime_conformance": "reports/conformance_matrix.md",
"trust_report": "reports/security_trust_report.md",
+ "python_compatibility": "reports/python_compatibility.md",
"permission_policy": "security/permission_policy.md",
"runtime_permissions": "reports/runtime_permission_probes.md",
"skill_atlas": "reports/skill_atlas.html",
@@ -819,7 +820,7 @@
"path": "scripts",
"label": "Deterministic helpers or local tooling",
"kind": "folder",
- "file_count": 81
+ "file_count": 82
},
{
"path": "evals",
@@ -831,10 +832,10 @@
"path": "reports",
"label": "Generated evidence and overview artifacts",
"kind": "folder",
- "file_count": 191
+ "file_count": 193
}
],
- "file_count": 336,
+ "file_count": 339,
"folder_count": 4,
"distribution": [
{
@@ -859,7 +860,7 @@
},
{
"label": "scripts",
- "value": 81
+ "value": 82
},
{
"label": "evals",
@@ -867,7 +868,7 @@
},
{
"label": "reports",
- "value": 191
+ "value": 193
}
]
},
@@ -988,7 +989,7 @@
"path": "scripts",
"label": "Deterministic helpers or local tooling",
"kind": "folder",
- "file_count": 81
+ "file_count": 82
},
{
"path": "evals",
@@ -1000,7 +1001,7 @@
"path": "reports",
"label": "Generated evidence and overview artifacts",
"kind": "folder",
- "file_count": 191
+ "file_count": 193
}
],
"strengths": [
@@ -1272,11 +1273,11 @@
"summary": {
"reproducibility_ready": true,
"methodology_complete": true,
- "required_artifact_count": 19,
+ "required_artifact_count": 20,
"missing_artifact_count": 0,
"output_case_count": 5,
"failure_disclosure_count": 3,
- "command_count": 18,
+ "command_count": 19,
"command_executed_count": 10,
"timing_observed_count": 10,
"model_executed_count": 0,
@@ -1288,9 +1289,9 @@
"world_class_task_count": 4,
"world_class_ledger_pending_count": 4,
"working_tree_dirty": true,
- "changed_file_count": 19
+ "changed_file_count": 44
},
- "commit": "2afb802a87468a8cf1bbd11769774ad373425a33",
+ "commit": "ee4879f296d6e6b5dde76afc37b81504806afc82",
"missing_artifacts": [],
"limitations": [
"Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.",
@@ -1365,8 +1366,8 @@
"failures": []
},
"trust_security": {
- "scanned_files": 165,
- "script_count": 81,
+ "scanned_files": 166,
+ "script_count": 82,
"internal_module_count": 10,
"secret_findings": 0,
"dependency_files": [
@@ -1375,18 +1376,18 @@
"network_script_count": 3,
"network_policy_covered_count": 3,
"network_policy_missing_count": 0,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"permission_required_count": 3,
"permission_approved_count": 3,
"permission_missing_count": 0,
"permission_invalid_count": 0,
"permission_expired_count": 0,
- "help_smoke_checked_count": 71,
+ "help_smoke_checked_count": 72,
"help_smoke_failed_count": 0,
"interactive_script_count": 0,
"package_hash_scope": "source-contract-without-generated-reports",
- "package_hash_file_count": 165,
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "package_hash_file_count": 166,
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
},
"skill_atlas": {
"skill_count": 12,
@@ -1424,8 +1425,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d",
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8"
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d",
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05"
},
"compatibility": {
"openai": "pass",
@@ -1456,7 +1457,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8",
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05",
"package_verification": "reports/package_verification.json",
"install_simulated": true,
"install_simulation": "reports/install_simulation.json"
@@ -1472,8 +1473,8 @@
"target_count": 4,
"adapter_count": 4,
"archive_present": true,
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8",
- "archive_entry_count": 543,
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05",
+ "archive_entry_count": 547,
"failure_count": 0,
"warning_count": 0
},
@@ -1484,7 +1485,7 @@
"ok": true,
"summary": {
"archive_present": true,
- "archive_entry_count": 543,
+ "archive_entry_count": 547,
"archive_extracted": true,
"entrypoint_loaded": true,
"manifest_loaded": true,
@@ -1551,12 +1552,12 @@
{
"field": "archive_sha256",
"from": "",
- "to": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8"
+ "to": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05"
},
{
"field": "package_sha256",
"from": "0000000000000000000000000000000000000000000000000000000000000000",
- "to": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "to": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
}
]
},
@@ -3673,7 +3674,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 29.49,
+ "duration_ms": 28.61,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3701,7 +3702,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 27.7,
+ "duration_ms": 28.26,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3724,7 +3725,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 27.65,
+ "duration_ms": 28.3,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3752,7 +3753,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 27.86,
+ "duration_ms": 28.97,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3775,7 +3776,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 28.24,
+ "duration_ms": 28.09,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3803,7 +3804,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 27.91,
+ "duration_ms": 28.12,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3826,7 +3827,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 28.04,
+ "duration_ms": 27.99,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3853,7 +3854,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 28.13,
+ "duration_ms": 27.69,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3876,7 +3877,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 27.7,
+ "duration_ms": 28.08,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3905,7 +3906,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 28.03,
+ "duration_ms": 27.82,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -4336,7 +4337,7 @@
"label": "Trust Security",
"status": "pass",
"objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.",
- "current": "81 scripts; secrets 0; help failures 0",
+ "current": "82 scripts; secrets 0; help failures 0",
"command": "python3 scripts/yao.py trust .",
"test": "python3 tests/verify_trust_check.py",
"evidence": [
@@ -4410,7 +4411,7 @@
"label": "Registry Distribution",
"status": "pass",
"objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.",
- "current": "archive entries 543; install failures 0",
+ "current": "archive entries 547; install failures 0",
"command": "python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .",
"test": "python3 tests/verify_registry_audit.py",
"evidence": [
@@ -4519,7 +4520,7 @@
"label": "Benchmark Methodology",
"status": "pass",
"objective": "Recommended Skill OS 2.0 implementation PR from the upgrade plan.",
- "current": "19 required artifacts checked",
+ "current": "20 required artifacts checked",
"command": "make ci-test",
"test": "tests/verify_benchmark_reproducibility.py",
"evidence": [
@@ -4999,6 +5000,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -5053,8 +5055,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
@@ -5213,7 +5214,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -5231,6 +5232,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -5310,14 +5312,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -5339,7 +5341,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -5452,7 +5454,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -5470,6 +5472,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -5549,14 +5552,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -5576,7 +5579,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -5834,6 +5837,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -5888,8 +5892,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
@@ -6048,7 +6051,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -6066,6 +6069,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -6145,14 +6149,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -6174,7 +6178,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -6287,7 +6291,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -6305,6 +6309,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -6384,14 +6389,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -6411,7 +6416,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -6669,6 +6674,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -6723,8 +6729,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
@@ -6883,7 +6888,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -6901,6 +6906,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -6980,14 +6986,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -7009,7 +7015,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -7115,7 +7121,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -7133,6 +7139,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -7212,14 +7219,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -7239,7 +7246,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -7488,6 +7495,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -7542,8 +7550,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
@@ -7702,7 +7709,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -7720,6 +7727,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -7799,14 +7807,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -7828,7 +7836,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -7934,7 +7942,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -7952,6 +7960,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -8031,14 +8040,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -8058,7 +8067,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -8307,6 +8316,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -8361,8 +8371,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
@@ -8521,7 +8530,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -8539,6 +8548,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -8618,14 +8628,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -8647,7 +8657,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -8757,7 +8767,7 @@
},
"file_write": {
"required": true,
- "script_count": 58,
+ "script_count": 59,
"scripts": [
"scripts/adjudicate_output_review.py",
"scripts/build_confusion_matrix.py",
@@ -8775,6 +8785,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -8854,14 +8865,14 @@
},
"help_smoke": {
"enabled": true,
- "checked_count": 71,
+ "checked_count": 72,
"failed_count": 0,
"failed_scripts": []
},
"trust_summary": {
"secret_findings": 0,
"network_script_count": 3,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"subprocess_script_count": 8,
"interactive_script_count": 0,
"help_smoke_failed_count": 0
@@ -8881,7 +8892,7 @@
],
"capability_counts": {
"network": 3,
- "file_write": 58,
+ "file_write": 59,
"subprocess": 8,
"interactive": 0
},
@@ -9553,8 +9564,8 @@
"ok": true,
"skill_dir": ".",
"summary": {
- "scanned_files": 165,
- "script_count": 81,
+ "scanned_files": 166,
+ "script_count": 82,
"internal_module_count": 10,
"secret_findings": 0,
"dependency_files": [
@@ -9563,18 +9574,18 @@
"network_script_count": 3,
"network_policy_covered_count": 3,
"network_policy_missing_count": 0,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"permission_required_count": 3,
"permission_approved_count": 3,
"permission_missing_count": 0,
"permission_invalid_count": 0,
"permission_expired_count": 0,
- "help_smoke_checked_count": 71,
+ "help_smoke_checked_count": 72,
"help_smoke_failed_count": 0,
"interactive_script_count": 0,
"package_hash_scope": "source-contract-without-generated-reports",
- "package_hash_file_count": 165,
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "package_hash_file_count": 166,
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
},
"failures": [],
"warnings": [],
@@ -9929,6 +9940,20 @@
"api.openai.com"
]
},
+ {
+ "path": "scripts/python_compat_check.py",
+ "interface": "cli",
+ "interface_declared": true,
+ "interface_reason": "Checks repository Python source for syntax that can pass locally but fail on the supported CI interpreter.",
+ "has_argparse": true,
+ "has_main_guard": true,
+ "uses_input": false,
+ "uses_network": false,
+ "uses_file_write": true,
+ "uses_subprocess": false,
+ "network_urls": [],
+ "network_hosts": []
+ },
{
"path": "scripts/registry_audit.py",
"interface": "cli",
@@ -10762,9 +10787,9 @@
"help_smoke": {
"enabled": true,
"timeout_seconds": 5.0,
- "candidate_count": 71,
- "checked_count": 71,
- "passed_count": 71,
+ "candidate_count": 72,
+ "checked_count": 72,
+ "passed_count": 72,
"failed_count": 0,
"skipped_count": 10,
"failed_scripts": [],
@@ -11009,6 +11034,16 @@
"stdout_excerpt": "usage: provider_output_eval_runner.py [-h] [--provider PROVIDER]\n [--base-url BASE_URL] [--model MODEL]\n [--api-key-env API_KEY_ENV]\n ",
"stderr_excerpt": ""
},
+ {
+ "path": "scripts/python_compat_check.py",
+ "command": "python3 scripts/python_compat_check.py --help",
+ "returncode": 0,
+ "timed_out": false,
+ "passed": true,
+ "has_help_text": true,
+ "stdout_excerpt": "usage: python_compat_check.py [-h] [--path PATH]\n [--target-python TARGET_PYTHON]\n [--output-json OUTPUT_JSON]\n [--output-md OUTPUT_MD]\n ",
+ "stderr_excerpt": ""
+ },
{
"path": "scripts/registry_audit.py",
"command": "python3 scripts/registry_audit.py --help",
@@ -11476,7 +11511,7 @@
"timed_out": false,
"passed": true,
"has_help_text": true,
- "stdout_excerpt": "usage: yao.py [-h] [--record-cli-telemetry] [--no-cli-telemetry]\n [--telemetry-events-jsonl TELEMETRY_EVENTS_JSONL]\n {init,quickstart,validate,optimize-description,promote-check,review,release-snapshot,workspace-fl",
+ "stdout_excerpt": "usage: yao.py [-h] [--record-cli-telemetry] [--no-cli-telemetry]\n [--telemetry-events-jsonl TELEMETRY_EVENTS_JSONL]\n {init,quickstart,validate,optimize-description,promote-check,python-compat,review,release-snapsho",
"stderr_excerpt": ""
}
],
@@ -11591,6 +11626,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -11692,6 +11728,877 @@
"markdown": "reports/security_trust_report.md"
}
},
+ "python_compatibility": {
+ "schema_version": "1.0",
+ "ok": true,
+ "generated_at": "2026-06-14",
+ "root": ".",
+ "summary": {
+ "target_python": "3.11",
+ "file_count": 140,
+ "issue_count": 0,
+ "syntax_error_count": 0,
+ "fstring_311_violation_count": 0,
+ "decision": "pass"
+ },
+ "rules": [
+ {
+ "key": "current-python-syntax",
+ "reason": "Every scanned Python source file must compile under the running interpreter."
+ },
+ {
+ "key": "fstring-expression-backslash",
+ "reason": "Python 3.11 rejects backslashes inside f-string expressions; keep escaping outside the expression."
+ }
+ ],
+ "files": [
+ {
+ "path": "examples/complex-release-orchestrator/generated-skill/scripts/build_release_packet.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "examples/governed-incident-command/generated-skill/scripts/build_incident_packet.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "geo-ranking-article-generator/scripts/build_html_index.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/adjudicate_output_review.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/build_confusion_matrix.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/build_skill_atlas.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/check_update.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/ci_test.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/collect_feedback.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/compile_skill.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/context_sizer.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/create_iteration_snapshot.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/cross_packager.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/diff_eval.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/emit_telemetry_event.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/export_skill_ir.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/github_benchmark_scan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/governance_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/import_telemetry_events.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/init_skill.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/judge_blind_eval.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/lint_skill.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/local_output_eval_runner.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/optimize_description.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/probe_runtime_permissions.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/promotion_checker.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/provider_output_eval_runner.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/python_compat_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/registry_audit.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_adoption_drift_report.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_artifact_design_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_baseline_compare.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_benchmark_reproducibility.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_context_reports.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_description_drift_history.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_eval_dashboard.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_intent_confidence.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_intent_dialogue.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_iteration_directions.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_iteration_ledger.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_output_risk_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_portability_report.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_prompt_quality_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_reference_scan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_reference_synthesis.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_regression_history.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_review_annotations.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_review_studio.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_review_viewer.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_review_waivers.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_skill_os2_audit.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_skill_os2_coverage.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_skill_overview.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_social_preview.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_system_model.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_telemetry_hook_recipes.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_world_class_claim_guard.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_world_class_evidence_intake.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_world_class_evidence_ledger.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/render_world_class_evidence_plan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/resource_boundary_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/review_studio_formatting.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/review_studio_gates.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/review_studio_layout.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/run_conformance_suite.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/run_description_optimization_suite.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/run_eval_suite.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/run_output_eval.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/run_output_execution.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/simulate_install.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/skill_report_charts.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/skill_report_layout.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/skill_report_metrics.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/skill_report_model.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/sync_local_install.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/telemetry_native_host.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/trigger_eval.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/trust_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/upgrade_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/validate_skill.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/verify_package.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/yao.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/yao_cli_config.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/yao_cli_parser.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "scripts/yao_cli_telemetry.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_adapter_snapshots.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_adoption_drift.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_artifact_design_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_baseline_compare.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_benchmark_reproducibility.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_compile_skill.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_conformance_suite.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_description_optimization.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_failure_regressions.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_feedback.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_github_benchmark_scan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_install_simulation.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_intent_confidence.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_iteration_directions.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_local_install_sync.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_output_eval_lab.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_output_execution_runs.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_output_review_adjudication.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_output_risk_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_package_verification.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_packager_failures.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_portability_report.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_promotion_checker.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_prompt_quality_profile.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_python_compat_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_quality_checks.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_reference_scan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_reference_synthesis.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_registry_audit.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_review_annotations.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_review_studio.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_review_viewer.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_review_waivers.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_route_confusion.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_runtime_permission_probes.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_security_boundaries.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_atlas.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_ir.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_os2_audit.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_os2_coverage.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_overview.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_report_charts.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_skill_report_metrics.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_system_model.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_telemetry_emit.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_telemetry_hooks.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_telemetry_import.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_telemetry_native_host.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_trust_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_upgrade_check.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_world_class_claim_guard.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_world_class_evidence_intake.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_world_class_evidence_ledger.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_world_class_evidence_plan.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
+ {
+ "path": "tests/verify_yao_cli.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ }
+ ],
+ "issues": [],
+ "artifacts": {
+ "json": "reports/python_compatibility.json",
+ "markdown": "reports/python_compatibility.md"
+ }
+ },
"context_budget": {
"ok": true,
"failures": [],
@@ -11700,10 +12607,10 @@
"context_budget_tier": "production",
"context_budget_limit": 1000,
"skill_body_tokens": 751,
- "other_text_tokens": 1051189,
+ "other_text_tokens": 1067478,
"estimated_initial_load_tokens": 944,
- "estimated_total_text_tokens": 1051940,
- "relevant_file_count": 455,
+ "estimated_total_text_tokens": 1068229,
+ "relevant_file_count": 461,
"unused_resource_dirs": [],
"quality_signal_points": 130,
"quality_density": 137.7
@@ -12591,6 +13498,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -13978,7 +14886,7 @@
"summary": {
"ledger_ready_to_claim_world_class": false,
"ledger_pending_count": 4,
- "claim_surface_count": 66,
+ "claim_surface_count": 67,
"violation_count": 0,
"overclaim_guard_active": true,
"decision": "claim-guard-pass-evidence-pending"
@@ -14179,6 +15087,10 @@
"path": "reports/prompt-quality-profile.md",
"violation_count": 0
},
+ {
+ "path": "reports/python_compatibility.md",
+ "violation_count": 0
+ },
{
"path": "reports/reference-scan.md",
"violation_count": 0
@@ -14309,8 +15221,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d",
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8"
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d",
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05"
},
"compatibility": {
"openai": "pass",
@@ -14341,7 +15253,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8",
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05",
"package_verification": "reports/package_verification.json",
"install_simulated": true,
"install_simulation": "reports/install_simulation.json"
@@ -14366,7 +15278,7 @@
"vscode"
],
"package_metadata": "registry/packages/yao-meta-skill.json",
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
}
]
},
@@ -14389,8 +15301,8 @@
"target_count": 4,
"adapter_count": 4,
"archive_present": true,
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8",
- "archive_entry_count": 543,
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05",
+ "archive_entry_count": 547,
"failure_count": 0,
"warning_count": 0
},
@@ -15055,7 +15967,7 @@
"installed_skill_dir": "[temporary-install-root]/yao-meta-skill",
"summary": {
"archive_present": true,
- "archive_entry_count": 543,
+ "archive_entry_count": 547,
"archive_extracted": true,
"entrypoint_loaded": true,
"manifest_loaded": true,
@@ -15397,12 +16309,12 @@
{
"field": "archive_sha256",
"from": "",
- "to": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8"
+ "to": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05"
},
{
"field": "package_sha256",
"from": "0000000000000000000000000000000000000000000000000000000000000000",
- "to": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "to": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
}
]
},
diff --git a/reports/security_trust_report.json b/reports/security_trust_report.json
index c5197475..aa462063 100644
--- a/reports/security_trust_report.json
+++ b/reports/security_trust_report.json
@@ -2,8 +2,8 @@
"ok": true,
"skill_dir": ".",
"summary": {
- "scanned_files": 165,
- "script_count": 81,
+ "scanned_files": 166,
+ "script_count": 82,
"internal_module_count": 10,
"secret_findings": 0,
"dependency_files": [
@@ -12,18 +12,18 @@
"network_script_count": 3,
"network_policy_covered_count": 3,
"network_policy_missing_count": 0,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"permission_required_count": 3,
"permission_approved_count": 3,
"permission_missing_count": 0,
"permission_invalid_count": 0,
"permission_expired_count": 0,
- "help_smoke_checked_count": 71,
+ "help_smoke_checked_count": 72,
"help_smoke_failed_count": 0,
"interactive_script_count": 0,
"package_hash_scope": "source-contract-without-generated-reports",
- "package_hash_file_count": 165,
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "package_hash_file_count": 166,
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
},
"failures": [],
"warnings": [],
@@ -378,6 +378,20 @@
"api.openai.com"
]
},
+ {
+ "path": "scripts/python_compat_check.py",
+ "interface": "cli",
+ "interface_declared": true,
+ "interface_reason": "Checks repository Python source for syntax that can pass locally but fail on the supported CI interpreter.",
+ "has_argparse": true,
+ "has_main_guard": true,
+ "uses_input": false,
+ "uses_network": false,
+ "uses_file_write": true,
+ "uses_subprocess": false,
+ "network_urls": [],
+ "network_hosts": []
+ },
{
"path": "scripts/registry_audit.py",
"interface": "cli",
@@ -1211,9 +1225,9 @@
"help_smoke": {
"enabled": true,
"timeout_seconds": 5.0,
- "candidate_count": 71,
- "checked_count": 71,
- "passed_count": 71,
+ "candidate_count": 72,
+ "checked_count": 72,
+ "passed_count": 72,
"failed_count": 0,
"skipped_count": 10,
"failed_scripts": [],
@@ -1458,6 +1472,16 @@
"stdout_excerpt": "usage: provider_output_eval_runner.py [-h] [--provider PROVIDER]\n [--base-url BASE_URL] [--model MODEL]\n [--api-key-env API_KEY_ENV]\n ",
"stderr_excerpt": ""
},
+ {
+ "path": "scripts/python_compat_check.py",
+ "command": "python3 scripts/python_compat_check.py --help",
+ "returncode": 0,
+ "timed_out": false,
+ "passed": true,
+ "has_help_text": true,
+ "stdout_excerpt": "usage: python_compat_check.py [-h] [--path PATH]\n [--target-python TARGET_PYTHON]\n [--output-json OUTPUT_JSON]\n [--output-md OUTPUT_MD]\n ",
+ "stderr_excerpt": ""
+ },
{
"path": "scripts/registry_audit.py",
"command": "python3 scripts/registry_audit.py --help",
@@ -1925,7 +1949,7 @@
"timed_out": false,
"passed": true,
"has_help_text": true,
- "stdout_excerpt": "usage: yao.py [-h] [--record-cli-telemetry] [--no-cli-telemetry]\n [--telemetry-events-jsonl TELEMETRY_EVENTS_JSONL]\n {init,quickstart,validate,optimize-description,promote-check,review,release-snapshot,workspace-fl",
+ "stdout_excerpt": "usage: yao.py [-h] [--record-cli-telemetry] [--no-cli-telemetry]\n [--telemetry-events-jsonl TELEMETRY_EVENTS_JSONL]\n {init,quickstart,validate,optimize-description,promote-check,python-compat,review,release-snapsho",
"stderr_excerpt": ""
}
],
@@ -2040,6 +2064,7 @@
"scripts/init_skill.py",
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
diff --git a/reports/security_trust_report.md b/reports/security_trust_report.md
index cb30dc47..acd13fee 100644
--- a/reports/security_trust_report.md
+++ b/reports/security_trust_report.md
@@ -1,22 +1,22 @@
# Security Trust Report
- OK: `True`
-- Scanned files: `165`
-- Scripts: `81`
+- Scanned files: `166`
+- Scripts: `82`
- Internal script modules: `10`
- Secret findings: `0`
- Network-capable scripts: `3`
- Network policy covered scripts: `3`
- Network policy missing scripts: `0`
-- File-write scripts: `58`
+- File-write scripts: `59`
- Permission approvals: `3 / 3`
- Permission approval gaps: `0`
-- CLI help smoke checked: `71`
+- CLI help smoke checked: `72`
- CLI help smoke failures: `0`
- Interactive scripts: `0`
- Package hash scope: `source-contract-without-generated-reports`
-- Package hash files: `165`
-- Package SHA256: `25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d`
+- Package hash files: `166`
+- Package SHA256: `5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d`
## Failures
@@ -54,8 +54,8 @@
- Enabled: `True`
- Timeout seconds: `5.0`
-- Checked scripts: `71`
-- Passed scripts: `71`
+- Checked scripts: `72`
+- Passed scripts: `72`
- Failed scripts: `none`
## Script Surface
@@ -86,6 +86,7 @@
| scripts/probe_runtime_permissions.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
| scripts/promotion_checker.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
| scripts/provider_output_eval_runner.py | cli | False | True | True | False | True | False | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
+| scripts/python_compat_check.py | cli | True | True | True | False | False | True | False | Checks repository Python source for syntax that can pass locally but fail on the supported CI interpreter. |
| scripts/registry_audit.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
| scripts/render_adoption_drift_report.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
| scripts/render_artifact_design_profile.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
diff --git a/reports/skill-overview.html b/reports/skill-overview.html
index e23e6639..1f632173 100644
--- a/reports/skill-overview.html
+++ b/reports/skill-overview.html
@@ -771,7 +771,7 @@
让 reviewer 快速确认关键文件、目录和资产分布。Lets reviewers confirm key files, directories, and asset distribution quickly.
-
资产分布图展示当前包体的文件和目录重心。
+
资产分布图展示当前包体的文件和目录重心。
| 路径Path | 作用Role | 类型Type |
| SKILL.md | Skill 入口文件Skill entrypoint | 文件file |
| README.md | 人类可读使用说明Human-readable usage guide | 文件file |
| agents/interface.yaml | 跨平台接口元数据Neutral interface metadata | 文件file |
| manifest.json | 生命周期与打包元数据Lifecycle and portability metadata | 文件file |
| references | 扩展指导与复用资料Extended guidance and reusable notes | 目录folder |
| scripts | 确定性脚本或本地工具Deterministic helpers or local tooling | 目录folder |
| evals | 触发与质量检查Trigger and quality checks | 目录folder |
| reports | 生成的证据与总结报告Generated evidence and overview artifacts | 目录folder |
diff --git a/reports/skill-overview.json b/reports/skill-overview.json
index 338dc7db..c4701bb8 100644
--- a/reports/skill-overview.json
+++ b/reports/skill-overview.json
@@ -436,7 +436,7 @@
"path": "scripts",
"label": "Deterministic helpers or local tooling",
"kind": "folder",
- "file_count": 81
+ "file_count": 82
},
{
"path": "evals",
@@ -448,10 +448,10 @@
"path": "reports",
"label": "Generated evidence and overview artifacts",
"kind": "folder",
- "file_count": 191
+ "file_count": 193
}
],
- "file_count": 336,
+ "file_count": 339,
"folder_count": 4,
"distribution": [
{
@@ -476,7 +476,7 @@
},
{
"label": "scripts",
- "value": 81
+ "value": 82
},
{
"label": "evals",
@@ -484,7 +484,7 @@
},
{
"label": "reports",
- "value": 191
+ "value": 193
}
]
},
@@ -605,7 +605,7 @@
"path": "scripts",
"label": "Deterministic helpers or local tooling",
"kind": "folder",
- "file_count": 81
+ "file_count": 82
},
{
"path": "evals",
@@ -617,7 +617,7 @@
"path": "reports",
"label": "Generated evidence and overview artifacts",
"kind": "folder",
- "file_count": 191
+ "file_count": 193
}
],
"strengths": [
@@ -889,11 +889,11 @@
"summary": {
"reproducibility_ready": true,
"methodology_complete": true,
- "required_artifact_count": 19,
+ "required_artifact_count": 20,
"missing_artifact_count": 0,
"output_case_count": 5,
"failure_disclosure_count": 3,
- "command_count": 18,
+ "command_count": 19,
"command_executed_count": 10,
"timing_observed_count": 10,
"model_executed_count": 0,
@@ -905,9 +905,9 @@
"world_class_task_count": 4,
"world_class_ledger_pending_count": 4,
"working_tree_dirty": true,
- "changed_file_count": 19
+ "changed_file_count": 44
},
- "commit": "2afb802a87468a8cf1bbd11769774ad373425a33",
+ "commit": "ee4879f296d6e6b5dde76afc37b81504806afc82",
"missing_artifacts": [],
"limitations": [
"Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.",
@@ -982,8 +982,8 @@
"failures": []
},
"trust_security": {
- "scanned_files": 165,
- "script_count": 81,
+ "scanned_files": 166,
+ "script_count": 82,
"internal_module_count": 10,
"secret_findings": 0,
"dependency_files": [
@@ -992,18 +992,18 @@
"network_script_count": 3,
"network_policy_covered_count": 3,
"network_policy_missing_count": 0,
- "file_write_script_count": 58,
+ "file_write_script_count": 59,
"permission_required_count": 3,
"permission_approved_count": 3,
"permission_missing_count": 0,
"permission_invalid_count": 0,
"permission_expired_count": 0,
- "help_smoke_checked_count": 71,
+ "help_smoke_checked_count": 72,
"help_smoke_failed_count": 0,
"interactive_script_count": 0,
"package_hash_scope": "source-contract-without-generated-reports",
- "package_hash_file_count": 165,
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "package_hash_file_count": 166,
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
},
"skill_atlas": {
"skill_count": 12,
@@ -1041,8 +1041,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d",
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8"
+ "package_sha256": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d",
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05"
},
"compatibility": {
"openai": "pass",
@@ -1073,7 +1073,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8",
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05",
"package_verification": "reports/package_verification.json",
"install_simulated": true,
"install_simulation": "reports/install_simulation.json"
@@ -1089,8 +1089,8 @@
"target_count": 4,
"adapter_count": 4,
"archive_present": true,
- "archive_sha256": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8",
- "archive_entry_count": 543,
+ "archive_sha256": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05",
+ "archive_entry_count": 547,
"failure_count": 0,
"warning_count": 0
},
@@ -1101,7 +1101,7 @@
"ok": true,
"summary": {
"archive_present": true,
- "archive_entry_count": 543,
+ "archive_entry_count": 547,
"archive_extracted": true,
"entrypoint_loaded": true,
"manifest_loaded": true,
@@ -1168,12 +1168,12 @@
{
"field": "archive_sha256",
"from": "",
- "to": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8"
+ "to": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05"
},
{
"field": "package_sha256",
"from": "0000000000000000000000000000000000000000000000000000000000000000",
- "to": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "to": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
}
]
},
diff --git a/reports/skill_atlas.json b/reports/skill_atlas.json
index beb28a4d..c3167353 100644
--- a/reports/skill_atlas.json
+++ b/reports/skill_atlas.json
@@ -88,6 +88,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
diff --git a/reports/skill_os2_audit.json b/reports/skill_os2_audit.json
index 03fb4793..da3dccae 100644
--- a/reports/skill_os2_audit.json
+++ b/reports/skill_os2_audit.json
@@ -145,7 +145,7 @@
"key": "benchmark-reproducibility",
"label": "Benchmark Reproducibility",
"status": "pass",
- "current": "artifacts 19; missing 0; failures 3",
+ "current": "artifacts 20; missing 0; failures 3",
"target": "Public methodology, reproducible commands, required artifacts, and failure disclosure are machine-checkable",
"evidence": [
{
@@ -197,7 +197,7 @@
"key": "trust-security",
"label": "Trust Security",
"status": "pass",
- "current": "secrets 0; scripts 81; help failures 0",
+ "current": "secrets 0; scripts 82; help failures 0",
"target": "Secrets, scripts, dependencies, permissions, and package hash are reviewable",
"evidence": [
{
@@ -281,7 +281,7 @@
"key": "registry-distribution",
"label": "Registry Distribution",
"status": "pass",
- "current": "zip entries 543; install failures 0; permission failures 0",
+ "current": "zip entries 547; install failures 0; permission failures 0",
"target": "Package metadata, archive checksum, package verification, and install simulation pass",
"evidence": [
{
diff --git a/reports/skill_os2_audit.md b/reports/skill_os2_audit.md
index f5416a75..b07ddbae 100644
--- a/reports/skill_os2_audit.md
+++ b/reports/skill_os2_audit.md
@@ -21,13 +21,13 @@ Generated at: `2026-06-14`
| Output Eval Lab | pass | 5 cases; delta 100.0; exec 10; blind 5 | with-skill/baseline, assertions, execution evidence, blind A/B, failure taxonomy | Add more real-file and adversarial holdout cases as usage grows. |
| Provider Holdout | external-required | model-executed 0; token-observed 0 | At least one real provider-backed holdout run with observed model/timing/token metadata | Run provider-backed holdout cases with real credentials and commit only aggregate evidence. |
| Human Adjudication | human-required | 0/5 decisions; pending 5 | Real reviewer decisions recorded before claiming output review completion | Record real A/B choices in the decision template, then regenerate adjudication. |
-| Benchmark Reproducibility | pass | artifacts 19; missing 0; failures 3 | Public methodology, reproducible commands, required artifacts, and failure disclosure are machine-checkable | Keep the manifest current with every benchmark, package, and release evidence change. |
+| Benchmark Reproducibility | pass | artifacts 20; missing 0; failures 3 | Public methodology, reproducible commands, required artifacts, and failure disclosure are machine-checkable | Keep the manifest current with every benchmark, package, and release evidence change. |
| Runtime Conformance | pass | 5/5 targets pass | Target package structure, metadata, relative paths, and degradation notes pass | Keep target conformance fixtures updated as platform contracts change. |
-| Trust Security | pass | secrets 0; scripts 81; help failures 0 | Secrets, scripts, dependencies, permissions, and package hash are reviewable | Keep high-permission approvals scoped, expiring, and target-mapped. |
+| Trust Security | pass | secrets 0; scripts 82; help failures 0 | Secrets, scripts, dependencies, permissions, and package hash are reviewable | Keep high-permission approvals scoped, expiring, and target-mapped. |
| Permission Metadata | pass | 4/4 target probes pass; metadata fallback 4 | Packaged adapters expose explicit permission metadata and residual risks | Preserve residual-risk notes until real native enforcement exists. |
| Native Permission Enforcement | external-required | native-enforced targets 0 | At least one target/client enforces approved permissions at runtime | Integrate a real client or installer runtime guard before claiming native permission enforcement. |
| Skill Atlas | pass | 12 skills; actionable collisions 0 | Workspace catalog, route overlap, stale/owner gaps, drift, and no-route opportunities | Feed real drift data into Atlas once client telemetry is installed. |
-| Registry Distribution | pass | zip entries 543; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. |
+| Registry Distribution | pass | zip entries 547; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. |
| Review Studio | pass | decision review; warnings 3; score 90 | One page shows gates, evidence paths, blockers, warnings, actions, waivers, and annotations | Resolve human/external warning gates before claiming full release readiness. |
| Telemetry Drift | pass | events 1; risk low; recipes 5 | Local-first metadata-only event contract, aggregate drift report, hook recipes, and import path | Keep raw JSONL out of distributed packages and use aggregate reports for Atlas. |
| Native Client Telemetry | external-required | external source events 0; adoption samples 0 | A real Browser/Chrome/provider client sends production metadata events | Install a real client against the native host and import production metadata-only events. |
diff --git a/reports/skill_os2_coverage.json b/reports/skill_os2_coverage.json
index 442d260e..d13eb9d9 100644
--- a/reports/skill_os2_coverage.json
+++ b/reports/skill_os2_coverage.json
@@ -122,7 +122,7 @@
"label": "Trust Security",
"status": "pass",
"objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.",
- "current": "81 scripts; secrets 0; help failures 0",
+ "current": "82 scripts; secrets 0; help failures 0",
"command": "python3 scripts/yao.py trust .",
"test": "python3 tests/verify_trust_check.py",
"evidence": [
@@ -196,7 +196,7 @@
"label": "Registry Distribution",
"status": "pass",
"objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.",
- "current": "archive entries 543; install failures 0",
+ "current": "archive entries 547; install failures 0",
"command": "python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .",
"test": "python3 tests/verify_registry_audit.py",
"evidence": [
@@ -305,7 +305,7 @@
"label": "Benchmark Methodology",
"status": "pass",
"objective": "Recommended Skill OS 2.0 implementation PR from the upgrade plan.",
- "current": "19 required artifacts checked",
+ "current": "20 required artifacts checked",
"command": "make ci-test",
"test": "tests/verify_benchmark_reproducibility.py",
"evidence": [
diff --git a/reports/skill_os2_coverage.md b/reports/skill_os2_coverage.md
index 472f1e30..092c9dfe 100644
--- a/reports/skill_os2_coverage.md
+++ b/reports/skill_os2_coverage.md
@@ -21,9 +21,9 @@ This report maps the Skill OS 2.0 upgrade blueprint to concrete local artifacts,
| Skill IR | `pass` | schema 2.0.0; targets 5 | `python3 scripts/yao.py skill-ir .` | `python3 tests/verify_skill_ir.py` |
| Output Eval Lab | `pass` | 5 cases; delta 100.0; execution 10 | `python3 scripts/yao.py output-exec . && python3 scripts/yao.py output-review .` | `python3 tests/verify_output_eval_lab.py` |
| Runtime Conformance | `pass` | 5/5 targets pass | `python3 scripts/yao.py conformance .` | `python3 tests/verify_conformance_suite.py` |
-| Trust Security | `pass` | 81 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` |
+| Trust Security | `pass` | 82 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` |
| Skill Atlas | `pass` | 12 scanned skills; actionable collisions 0 | `python3 scripts/yao.py skill-atlas --workspace-root .` | `python3 tests/verify_skill_atlas.py` |
-| Registry Distribution | `pass` | archive entries 543; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` |
+| Registry Distribution | `pass` | archive entries 547; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` |
| Review Studio | `pass` | 14 gates; decision review; warnings 3 | `python3 scripts/yao.py review-studio .` | `python3 tests/verify_review_studio.py` |
| Telemetry Drift | `pass` | events 1; recipes 5; risk low | `python3 scripts/yao.py telemetry-hooks . && python3 scripts/yao.py adoption-drift .` | `python3 tests/verify_telemetry_hooks.py` |
@@ -31,7 +31,7 @@ This report maps the Skill OS 2.0 upgrade blueprint to concrete local artifacts,
| Item | Status | Current | Command | Test |
| --- | --- | --- | --- | --- |
-| Benchmark Methodology | `pass` | 19 required artifacts checked | `make ci-test` | `tests/verify_benchmark_reproducibility.py` |
+| Benchmark Methodology | `pass` | 20 required artifacts checked | `make ci-test` | `tests/verify_benchmark_reproducibility.py` |
| Output Eval Schema | `pass` | 5 output cases | `make ci-test` | `tests/verify_output_eval_lab.py` |
| Output Eval Runner | `pass` | delta 100.0 | `make ci-test` | `tests/verify_output_eval_lab.py` |
| Output Quality Scorecard | `pass` | gate pass True | `make ci-test` | `tests/verify_output_eval_lab.py` |
diff --git a/reports/upgrade_check.json b/reports/upgrade_check.json
index c5d285b4..a21f3fda 100644
--- a/reports/upgrade_check.json
+++ b/reports/upgrade_check.json
@@ -70,12 +70,12 @@
{
"field": "archive_sha256",
"from": "",
- "to": "737f7608b2bf43c91cbbaf3adf55e2f8daecf246906de1dbc3b0a8b94c8490d8"
+ "to": "13b8b221acd80b5267c0ba63341560fa24ab99c0ee51cd55b2c763ffa458bc05"
},
{
"field": "package_sha256",
"from": "0000000000000000000000000000000000000000000000000000000000000000",
- "to": "25367c1534cac1e3bae0a1b03a9741eeede85e8cc7b7ad6adf0a3ad6597c9a6d"
+ "to": "5466073395d5a54812f5b45061e745bc4e1ad67c446eeb5a41f6e206b916405d"
}
]
},
diff --git a/reports/world_class_claim_guard.json b/reports/world_class_claim_guard.json
index ca193a28..b8314b82 100644
--- a/reports/world_class_claim_guard.json
+++ b/reports/world_class_claim_guard.json
@@ -6,7 +6,7 @@
"summary": {
"ledger_ready_to_claim_world_class": false,
"ledger_pending_count": 4,
- "claim_surface_count": 66,
+ "claim_surface_count": 67,
"violation_count": 0,
"overclaim_guard_active": true,
"decision": "claim-guard-pass-evidence-pending"
@@ -207,6 +207,10 @@
"path": "reports/prompt-quality-profile.md",
"violation_count": 0
},
+ {
+ "path": "reports/python_compatibility.md",
+ "violation_count": 0
+ },
{
"path": "reports/reference-scan.md",
"violation_count": 0
diff --git a/reports/world_class_claim_guard.md b/reports/world_class_claim_guard.md
index ff124169..d86a1795 100644
--- a/reports/world_class_claim_guard.md
+++ b/reports/world_class_claim_guard.md
@@ -7,7 +7,7 @@ Generated at: `2026-06-14`
- decision: `claim-guard-pass-evidence-pending`
- ledger ready to claim world-class: `false`
- ledger pending evidence: `4`
-- claim surfaces scanned: `66`
+- claim surfaces scanned: `67`
- violations: `0`
- overclaim guard active: `true`
diff --git a/scripts/ci_test.py b/scripts/ci_test.py
index b9cd6064..f5024024 100644
--- a/scripts/ci_test.py
+++ b/scripts/ci_test.py
@@ -29,6 +29,7 @@ DEFAULT_TARGETS = [
"description-optimization",
"description-optimization-check",
"promotion-check",
+ "python-compat-check",
"yao-cli-check",
"skill-overview-check",
"skill-report-metrics-check",
diff --git a/scripts/python_compat_check.py b/scripts/python_compat_check.py
new file mode 100644
index 00000000..b6afaa76
--- /dev/null
+++ b/scripts/python_compat_check.py
@@ -0,0 +1,351 @@
+#!/usr/bin/env python3
+import argparse
+import io
+import json
+import token
+import tokenize
+from datetime import date
+from pathlib import Path
+from typing import Any
+
+
+ROOT = Path(__file__).resolve().parent.parent
+SCRIPT_INTERFACE = "cli"
+SCRIPT_INTERFACE_REASON = "Checks repository Python source for syntax that can pass locally but fail on the supported CI interpreter."
+
+EXCLUDED_DIRS = {
+ ".git",
+ ".mypy_cache",
+ ".previews",
+ ".pytest_cache",
+ ".ruff_cache",
+ ".venv",
+ "__pycache__",
+ "dist",
+ "node_modules",
+ "venv",
+}
+MAX_FILE_BYTES = 1_000_000
+
+
+def rel_path(path: Path, root: Path) -> str:
+ try:
+ return str(path.resolve().relative_to(root.resolve()))
+ except ValueError:
+ return str(path.resolve())
+
+
+def resolve_path(raw_path: str, root: Path) -> Path:
+ path = Path(raw_path)
+ if not path.is_absolute():
+ path = root / path
+ return path.resolve()
+
+
+def is_ignored(path: Path, root: Path) -> bool:
+ try:
+ parts = path.resolve().relative_to(root.resolve()).parts
+ except ValueError:
+ return True
+ if any(part in EXCLUDED_DIRS for part in parts):
+ return True
+ if len(parts) >= 2 and parts[0] == "tests" and parts[1].startswith("tmp"):
+ return True
+ return False
+
+
+def expand_scan_paths(root: Path, raw_paths: list[str]) -> list[Path]:
+ candidates: list[Path] = []
+ explicit_paths = bool(raw_paths)
+ if raw_paths:
+ for raw_path in raw_paths:
+ path = resolve_path(raw_path, root)
+ if path.is_dir():
+ candidates.extend(path.rglob("*.py"))
+ elif path.exists():
+ candidates.append(path)
+ else:
+ candidates.extend(root.rglob("*.py"))
+ files = []
+ for path in candidates:
+ if not path.is_file() or path.is_symlink() or path.suffix != ".py":
+ continue
+ if not explicit_paths and is_ignored(path, root):
+ continue
+ try:
+ if path.stat().st_size > MAX_FILE_BYTES:
+ continue
+ except OSError:
+ continue
+ files.append(path)
+ return sorted(set(files), key=lambda item: rel_path(item, root))
+
+
+def issue(path: Path, root: Path, line: int, column: int, rule: str, message: str, excerpt: str = "") -> dict[str, Any]:
+ return {
+ "path": rel_path(path, root),
+ "line": line,
+ "column": column,
+ "rule": rule,
+ "message": message,
+ "excerpt": excerpt.strip()[:220],
+ }
+
+
+def compile_issues(path: Path, root: Path, source: str) -> list[dict[str, Any]]:
+ try:
+ compile(source, str(path), "exec")
+ except SyntaxError as exc:
+ return [
+ issue(
+ path,
+ root,
+ exc.lineno or 0,
+ exc.offset or 0,
+ "current-python-syntax",
+ str(exc.msg),
+ exc.text or "",
+ )
+ ]
+ return []
+
+
+def token_name(token_type: int) -> str:
+ return token.tok_name.get(token_type, "")
+
+
+def scan_modern_fstring_tokens(path: Path, root: Path, source: str) -> tuple[bool, list[dict[str, Any]]]:
+ findings: list[dict[str, Any]] = []
+ try:
+ tokens = list(tokenize.generate_tokens(io.StringIO(source).readline))
+ except tokenize.TokenError:
+ return False, findings
+ has_modern_fstring_tokens = any(token_name(item.type) == "FSTRING_START" for item in tokens)
+ if not has_modern_fstring_tokens:
+ return False, findings
+ fstring_depth = 0
+ expression_depth = 0
+ for item in tokens:
+ name = token_name(item.type)
+ if name == "FSTRING_START":
+ fstring_depth += 1
+ expression_depth = 0
+ continue
+ if name == "FSTRING_END":
+ fstring_depth = max(0, fstring_depth - 1)
+ expression_depth = 0
+ continue
+ if not fstring_depth:
+ continue
+ if item.type == token.OP and item.string == "{":
+ expression_depth += 1
+ continue
+ if item.type == token.OP and item.string == "}":
+ expression_depth = max(0, expression_depth - 1)
+ continue
+ if expression_depth > 0 and "\\" in item.string:
+ findings.append(
+ issue(
+ path,
+ root,
+ item.start[0],
+ item.start[1] + 1,
+ "fstring-expression-backslash",
+ "Python 3.11 rejects backslashes inside f-string expressions.",
+ item.line,
+ )
+ )
+ return True, findings
+
+
+def split_string_token(token_text: str) -> tuple[str, str] | None:
+ index = 0
+ while index < len(token_text) and token_text[index].isalpha():
+ index += 1
+ prefix = token_text[:index].lower()
+ if "f" not in prefix:
+ return None
+ quote = ""
+ for candidate in ('"""', "'''", '"', "'"):
+ if token_text[index:].startswith(candidate):
+ quote = candidate
+ break
+ if not quote or not token_text.endswith(quote):
+ return None
+ return prefix, token_text[index + len(quote) : -len(quote)]
+
+
+def scan_legacy_fstring_body(path: Path, root: Path, token_text: str, start_line: int, start_column: int) -> list[dict[str, Any]]:
+ parsed = split_string_token(token_text)
+ if not parsed:
+ return []
+ _, body = parsed
+ findings: list[dict[str, Any]] = []
+ expression_depth = 0
+ line = start_line
+ column = start_column
+ index = 0
+ while index < len(body):
+ char = body[index]
+ next_char = body[index + 1] if index + 1 < len(body) else ""
+ if expression_depth == 0:
+ if char == "{" and next_char == "{":
+ index += 2
+ column += 2
+ continue
+ if char == "{" and next_char != "{":
+ expression_depth = 1
+ else:
+ if char == "\\":
+ findings.append(
+ issue(
+ path,
+ root,
+ line,
+ column + 1,
+ "fstring-expression-backslash",
+ "Python 3.11 rejects backslashes inside f-string expressions.",
+ token_text,
+ )
+ )
+ elif char == "{":
+ expression_depth += 1
+ elif char == "}":
+ expression_depth = max(0, expression_depth - 1)
+ if char == "\n":
+ line += 1
+ column = 0
+ else:
+ column += 1
+ index += 1
+ return findings
+
+
+def fstring_compat_issues(path: Path, root: Path, source: str) -> list[dict[str, Any]]:
+ handled, findings = scan_modern_fstring_tokens(path, root, source)
+ if handled:
+ return findings
+ try:
+ tokens = tokenize.generate_tokens(io.StringIO(source).readline)
+ for item in tokens:
+ if item.type == token.STRING:
+ findings.extend(scan_legacy_fstring_body(path, root, item.string, item.start[0], item.start[1]))
+ except tokenize.TokenError:
+ return findings
+ return findings
+
+
+def check_file(path: Path, root: Path) -> dict[str, Any]:
+ try:
+ source = path.read_text(encoding="utf-8", errors="replace")
+ except OSError as exc:
+ issues = [issue(path, root, 0, 0, "read-error", str(exc))]
+ else:
+ issues = compile_issues(path, root, source)
+ issues.extend(fstring_compat_issues(path, root, source))
+ return {
+ "path": rel_path(path, root),
+ "ok": not issues,
+ "issue_count": len(issues),
+ "issues": issues,
+ }
+
+
+def build_report(root: Path, raw_paths: list[str], target_python: str, generated_at: str) -> dict[str, Any]:
+ files = expand_scan_paths(root, raw_paths)
+ checked = [check_file(path, root) for path in files]
+ issues = [item for file_report in checked for item in file_report["issues"]]
+ syntax_error_count = sum(1 for item in issues if item["rule"] == "current-python-syntax")
+ fstring_count = sum(1 for item in issues if item["rule"] == "fstring-expression-backslash")
+ return {
+ "schema_version": "1.0",
+ "ok": not issues,
+ "generated_at": generated_at,
+ "root": rel_path(root, ROOT),
+ "summary": {
+ "target_python": target_python,
+ "file_count": len(checked),
+ "issue_count": len(issues),
+ "syntax_error_count": syntax_error_count,
+ "fstring_311_violation_count": fstring_count,
+ "decision": "pass" if not issues else "block-python-compat",
+ },
+ "rules": [
+ {
+ "key": "current-python-syntax",
+ "reason": "Every scanned Python source file must compile under the running interpreter.",
+ },
+ {
+ "key": "fstring-expression-backslash",
+ "reason": "Python 3.11 rejects backslashes inside f-string expressions; keep escaping outside the expression.",
+ },
+ ],
+ "files": checked,
+ "issues": issues,
+ "artifacts": {
+ "json": "reports/python_compatibility.json",
+ "markdown": "reports/python_compatibility.md",
+ },
+ }
+
+
+def render_markdown(report: dict[str, Any]) -> str:
+ summary = report["summary"]
+ lines = [
+ "# Python Compatibility",
+ "",
+ f"Generated at: `{report['generated_at']}`",
+ "",
+ "## Summary",
+ "",
+ f"- decision: `{summary['decision']}`",
+ f"- target python: `{summary['target_python']}`",
+ f"- files scanned: `{summary['file_count']}`",
+ f"- issues: `{summary['issue_count']}`",
+ f"- syntax errors: `{summary['syntax_error_count']}`",
+ f"- f-string 3.11 violations: `{summary['fstring_311_violation_count']}`",
+ "",
+ "This report catches Python syntax and compatibility hazards that can pass on a newer local interpreter but fail in the supported CI/runtime interpreter.",
+ "",
+ "## Issues",
+ "",
+ "| Path | Line | Rule | Message |",
+ "| --- | ---: | --- | --- |",
+ ]
+ if report["issues"]:
+ for item in report["issues"]:
+ message = str(item["message"]).replace("|", "\\|")
+ lines.append(f"| `{item['path']}` | {item['line']} | `{item['rule']}` | {message} |")
+ else:
+ lines.append("| `none` | 0 | `none` | none |")
+ return "\n".join(lines).rstrip() + "\n"
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(description="Check Python source compatibility for supported CI/runtime versions.")
+ parser.add_argument("skill_dir", nargs="?", default=".")
+ parser.add_argument("--path", action="append", default=[], help="Optional file or directory to scan relative to skill_dir.")
+ parser.add_argument("--target-python", default="3.11")
+ parser.add_argument("--output-json", default="reports/python_compatibility.json")
+ parser.add_argument("--output-md", default="reports/python_compatibility.md")
+ parser.add_argument("--generated-at", default=date.today().isoformat())
+ args = parser.parse_args()
+
+ root = Path(args.skill_dir).resolve()
+ report = build_report(root, args.path, args.target_python, args.generated_at)
+ output_json = Path(args.output_json)
+ output_md = Path(args.output_md)
+ if not output_json.is_absolute():
+ output_json = root / output_json
+ if not output_md.is_absolute():
+ output_md = root / output_md
+ output_json.parent.mkdir(parents=True, exist_ok=True)
+ output_md.parent.mkdir(parents=True, exist_ok=True)
+ output_json.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
+ output_md.write_text(render_markdown(report), encoding="utf-8")
+ print(json.dumps(report, ensure_ascii=False, indent=2))
+ raise SystemExit(0 if report["ok"] else 2)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/render_benchmark_reproducibility.py b/scripts/render_benchmark_reproducibility.py
index c7b8ccc3..4ee704d0 100644
--- a/scripts/render_benchmark_reproducibility.py
+++ b/scripts/render_benchmark_reproducibility.py
@@ -33,6 +33,7 @@ REQUIRED_ARTIFACTS = [
("trigger_scorecard", "reports/route_scorecard.json"),
("runtime_conformance", "reports/conformance_matrix.json"),
("trust_report", "reports/security_trust_report.json"),
+ ("python_compatibility", "reports/python_compatibility.json"),
("registry_audit", "reports/registry_audit.json"),
("package_verification", "reports/package_verification.json"),
("install_simulation", "reports/install_simulation.json"),
@@ -84,6 +85,11 @@ REPRODUCTION_COMMANDS = [
"command": "python3 scripts/yao.py trust .",
"evidence": "reports/security_trust_report.json",
},
+ {
+ "label": "python compatibility",
+ "command": "python3 scripts/yao.py python-compat .",
+ "evidence": "reports/python_compatibility.json",
+ },
{
"label": "package",
"command": "python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --expectations evals/packaging_expectations.json --output-dir dist --zip",
diff --git a/scripts/render_review_studio.py b/scripts/render_review_studio.py
index a9a0d859..a6123b83 100644
--- a/scripts/render_review_studio.py
+++ b/scripts/render_review_studio.py
@@ -128,6 +128,7 @@ def evidence_paths(skill_dir: Path) -> dict[str, str]:
"skill_os2_coverage": "reports/skill_os2_coverage.md",
"runtime_conformance": "reports/conformance_matrix.md",
"trust_report": "reports/security_trust_report.md",
+ "python_compatibility": "reports/python_compatibility.md",
"permission_policy": "security/permission_policy.md",
"runtime_permissions": "reports/runtime_permission_probes.md",
"skill_atlas": "reports/skill_atlas.html",
@@ -165,6 +166,7 @@ def load_review_data(skill_dir: Path) -> dict[str, dict[str, Any]]:
"conformance": load_json(reports / "conformance_matrix.json"),
"runtime_permissions": load_json(reports / "runtime_permission_probes.json"),
"trust": load_json(reports / "security_trust_report.json"),
+ "python_compatibility": load_json(reports / "python_compatibility.json"),
"context_budget": load_json(reports / "context_budget.json"),
"promotion": load_json(reports / "promotion_decisions.json"),
"atlas": load_json(reports / "skill_atlas.json"),
@@ -195,6 +197,7 @@ def insight_cards(data: dict[str, dict[str, Any]]) -> list[dict[str, str]]:
conformance = data["conformance"].get("summary", {})
runtime_permissions = data["runtime_permissions"].get("summary", {})
trust = data["trust"].get("summary", {})
+ python_compat = data["python_compatibility"].get("summary", {})
atlas = data["atlas"].get("summary", {})
adoption = data["adoption_drift"].get("summary", {})
waivers = data["review_waivers"].get("summary", {})
@@ -260,6 +263,11 @@ def insight_cards(data: dict[str, dict[str, Any]]) -> list[dict[str, str]]:
"value": str(trust.get("secret_findings", 0)),
"detail": f"{trust.get('script_count', 0)} scripts scanned; secrets found",
},
+ {
+ "label": "Py Compat",
+ "value": str(python_compat.get("issue_count", 0)),
+ "detail": f"{python_compat.get('file_count', 0)} files scanned for Python {python_compat.get('target_python', '3.11')}",
+ },
{
"label": "Atlas",
"value": str(atlas.get("route_collision_count", 0)),
@@ -712,6 +720,7 @@ def render_html(report: dict[str, Any]) -> str:
conformance_summary = report["data"]["conformance"].get("summary", {})
compiled_summary = report["data"]["compiled_targets"].get("summary", {})
trust_summary = report["data"]["trust"].get("summary", {})
+ python_compat_summary = report["data"]["python_compatibility"].get("summary", {})
runtime_permissions_summary = report["data"]["runtime_permissions"].get("summary", {})
atlas_summary = report["data"]["atlas"].get("summary", {})
adoption_summary = report["data"]["adoption_drift"].get("summary", {})
@@ -811,6 +820,11 @@ def render_html(report: dict[str, Any]) -> str:
["secret_findings", "script_count", "network_script_count", "help_smoke_failed_count", "package_sha256"],
"security trust report missing",
)
+ python_compat_panel = render_kv_grid(
+ python_compat_summary,
+ ["target_python", "file_count", "issue_count", "syntax_error_count", "fstring_311_violation_count"],
+ "python compatibility report missing",
+ )
runtime_boundary_panel = render_kv_grid(
runtime_permissions_summary,
["target_count", "pass_count", "native_enforcement_count", "metadata_fallback_count", "residual_risk_count", "failure_count"],
@@ -1007,6 +1021,11 @@ def render_html(report: dict[str, Any]) -> str:
安全边界
高风险 secret、远程 inline execution、缺失依赖策略或无法解释的脚本接口应阻断 governed release。
+
+ Python 兼容
{python_compat_panel}
+ 解释器边界
CI 和发布审查以 Python 3.11 兼容为底线;本地更高版本允许的新语法不能绕过兼容门禁。
+
+
权限批准
{html.escape(gate_details.get('permission-gates', 'permission governance missing'))}
批准策略
高权限能力需要 reviewer、scope、reason、expires_at 和 openai/claude/generic 目标端 enforcement 说明。
diff --git a/scripts/review_studio_formatting.py b/scripts/review_studio_formatting.py
index ae000b0b..972ba3b5 100644
--- a/scripts/review_studio_formatting.py
+++ b/scripts/review_studio_formatting.py
@@ -31,6 +31,8 @@ LABELS = {
"delta": "增益",
"event_count": "事件数",
"failure_count": "失败数",
+ "file_count": "文件数",
+ "fstring_311_violation_count": "F-string 3.11",
"gate_pass": "Gate",
"help_smoke_failed_count": "Help 失败",
"install_simulated": "安装模拟",
@@ -38,6 +40,7 @@ LABELS = {
"installer_permission_failure_count": "安装权限失败",
"invalid_submission_count": "无效提交",
"item_count": "项目数",
+ "issue_count": "问题数",
"ledger_pending_count": "台账待补",
"ledger_ready_to_claim_world_class": "台账可声明",
"license": "License",
@@ -74,7 +77,9 @@ LABELS = {
"secret_findings": "Secret",
"skill_count": "Skill 数",
"submission_count": "提交数",
+ "syntax_error_count": "语法错误",
"target_count": "目标数",
+ "target_python": "目标 Python",
"targets": "目标平台",
"template_count": "模板数",
"template_pass_count": "模板通过",
diff --git a/scripts/yao.py b/scripts/yao.py
index 6f0b24f3..d42ae2fe 100644
--- a/scripts/yao.py
+++ b/scripts/yao.py
@@ -437,6 +437,24 @@ def command_promote_check(args: argparse.Namespace) -> int:
return 0 if result["ok"] else 2
+def command_python_compat(args: argparse.Namespace) -> int:
+ skill_dir = str(Path(args.skill_dir).resolve())
+ cmd = [skill_dir]
+ for path in args.path:
+ cmd.extend(["--path", path])
+ if args.target_python:
+ cmd.extend(["--target-python", args.target_python])
+ if args.output_json:
+ cmd.extend(["--output-json", args.output_json])
+ if args.output_md:
+ cmd.extend(["--output-md", args.output_md])
+ if args.generated_at:
+ cmd.extend(["--generated-at", args.generated_at])
+ result = run_script("python_compat_check.py", cmd)
+ print(json.dumps(result["payload"] if result["payload"] is not None else result, ensure_ascii=False, indent=2))
+ return 0 if result["ok"] else 2
+
+
def command_report(args: argparse.Namespace) -> int:
steps = []
if args.refresh_optimization:
@@ -453,6 +471,7 @@ def command_report(args: argparse.Namespace) -> int:
run_script("render_regression_history.py", []),
run_script("render_context_reports.py", []),
run_script("render_portability_report.py", []),
+ run_script("python_compat_check.py", [str(ROOT)]),
run_script("render_reference_synthesis.py", [str(ROOT)]),
run_script("render_artifact_design_profile.py", [str(ROOT)]),
run_script("render_prompt_quality_profile.py", [str(ROOT)]),
@@ -486,6 +505,7 @@ def command_report(args: argparse.Namespace) -> int:
"regression_history": "reports/regression_history.md",
"context_budget": "reports/context_budget.json",
"portability_score": "reports/portability_score.json",
+ "python_compatibility": "reports/python_compatibility.json",
"reference_synthesis": "reports/reference-synthesis.json",
"artifact_design_profile": "reports/artifact-design-profile.json",
"prompt_quality_profile": "reports/prompt-quality-profile.json",
@@ -1262,6 +1282,7 @@ def command_workspace_flow(args: argparse.Namespace) -> int:
{"phase": "report-refresh", "result": run_script("render_regression_history.py", [])},
{"phase": "report-refresh", "result": run_script("render_context_reports.py", [])},
{"phase": "report-refresh", "result": run_script("render_portability_report.py", [])},
+ {"phase": "report-refresh", "result": run_script("python_compat_check.py", [str(ROOT)])},
{"phase": "report-refresh", "result": run_script("compile_skill.py", [str(ROOT)])},
{"phase": "report-refresh", "result": run_script("render_adoption_drift_report.py", [str(ROOT)])},
{"phase": "report-refresh", "result": run_script("render_telemetry_hook_recipes.py", [str(ROOT)])},
diff --git a/scripts/yao_cli_parser.py b/scripts/yao_cli_parser.py
index c316d3b8..23bbc48c 100644
--- a/scripts/yao_cli_parser.py
+++ b/scripts/yao_cli_parser.py
@@ -81,6 +81,18 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int]
promote_cmd = subparsers.add_parser("promote-check", help="Apply promotion policy and build iteration bundles.")
promote_cmd.set_defaults(func=_handler(command_handlers, "command_promote_check"))
+ python_compat_cmd = subparsers.add_parser(
+ "python-compat",
+ help="Check Python source compatibility for the supported CI/runtime interpreter.",
+ )
+ python_compat_cmd.add_argument("skill_dir", nargs="?", default=".")
+ python_compat_cmd.add_argument("--path", action="append", default=[])
+ python_compat_cmd.add_argument("--target-python", default="3.11")
+ python_compat_cmd.add_argument("--output-json")
+ python_compat_cmd.add_argument("--output-md")
+ python_compat_cmd.add_argument("--generated-at")
+ python_compat_cmd.set_defaults(func=_handler(command_handlers, "command_python_compat"))
+
review_cmd = subparsers.add_parser("review", help="Locate the current bundle and human review stub for a target.")
review_cmd.add_argument(
"--target",
diff --git a/skill-ir/examples/yao-meta-skill.json b/skill-ir/examples/yao-meta-skill.json
index dd4881eb..6281aa9f 100644
--- a/skill-ir/examples/yao-meta-skill.json
+++ b/skill-ir/examples/yao-meta-skill.json
@@ -132,6 +132,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
@@ -186,8 +187,7 @@
"scripts/validate_skill.py",
"scripts/verify_package.py",
"scripts/yao.py",
- "scripts/yao_cli_config.py",
- "scripts/yao_cli_parser.py"
+ "scripts/yao_cli_config.py"
],
"assets": [
"templates/basic_skill.md.j2",
diff --git a/skill_atlas/catalog.json b/skill_atlas/catalog.json
index 2931048c..b4ff3c95 100644
--- a/skill_atlas/catalog.json
+++ b/skill_atlas/catalog.json
@@ -44,6 +44,7 @@
"scripts/probe_runtime_permissions.py",
"scripts/promotion_checker.py",
"scripts/provider_output_eval_runner.py",
+ "scripts/python_compat_check.py",
"scripts/registry_audit.py",
"scripts/render_adoption_drift_report.py",
"scripts/render_artifact_design_profile.py",
diff --git a/tests/verify_benchmark_reproducibility.py b/tests/verify_benchmark_reproducibility.py
index bc975941..315069b3 100644
--- a/tests/verify_benchmark_reproducibility.py
+++ b/tests/verify_benchmark_reproducibility.py
@@ -53,6 +53,19 @@ def main() -> None:
text=True,
check=True,
)
+ subprocess.run(
+ [
+ sys.executable,
+ str(ROOT / "scripts" / "python_compat_check.py"),
+ str(ROOT),
+ "--generated-at",
+ "2026-06-13",
+ ],
+ cwd=ROOT,
+ capture_output=True,
+ text=True,
+ check=True,
+ )
output_json = TMP / "benchmark_reproducibility.json"
output_md = TMP / "benchmark_reproducibility.md"
proc = subprocess.run(
@@ -96,10 +109,12 @@ def main() -> None:
assert artifacts["reports/world_class_evidence_ledger.json"]["exists"], artifacts
assert artifacts["reports/world_class_evidence_intake.json"]["exists"], artifacts
assert artifacts["reports/world_class_claim_guard.json"]["exists"], artifacts
+ assert artifacts["reports/python_compatibility.json"]["exists"], artifacts
assert any(command["command"] == "make ci-test" for command in payload["reproduction_commands"]), payload
assert any(command["command"] == "python3 scripts/yao.py world-class-ledger ." for command in payload["reproduction_commands"]), payload
assert any(command["command"] == "python3 scripts/yao.py world-class-intake ." for command in payload["reproduction_commands"]), payload
assert any(command["command"] == "python3 scripts/yao.py world-class-claim-guard ." for command in payload["reproduction_commands"]), payload
+ assert any(command["command"] == "python3 scripts/yao.py python-compat ." for command in payload["reproduction_commands"]), payload
assert any("provider-backed" in item for item in payload["limitations"]), payload["limitations"]
markdown = output_md.read_text(encoding="utf-8")
assert "Benchmark Reproducibility" in markdown, markdown
diff --git a/tests/verify_python_compat_check.py b/tests/verify_python_compat_check.py
new file mode 100644
index 00000000..496b3630
--- /dev/null
+++ b/tests/verify_python_compat_check.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+import json
+import shutil
+import subprocess
+import sys
+from pathlib import Path
+
+
+ROOT = Path(__file__).resolve().parent.parent
+SCRIPT = ROOT / "scripts" / "python_compat_check.py"
+TMP = ROOT / "tests" / "tmp_python_compat"
+
+
+def run_check(*extra: str, check: bool = True, cwd: Path = ROOT) -> subprocess.CompletedProcess[str]:
+ return subprocess.run(
+ [
+ sys.executable,
+ str(SCRIPT),
+ str(ROOT),
+ "--generated-at",
+ "2026-06-14",
+ *extra,
+ ],
+ cwd=cwd,
+ capture_output=True,
+ text=True,
+ check=check,
+ )
+
+
+def main() -> None:
+ shutil.rmtree(TMP, ignore_errors=True)
+ TMP.mkdir(parents=True, exist_ok=True)
+ output_json = TMP / "python_compatibility.json"
+ output_md = TMP / "python_compatibility.md"
+ proc = run_check("--output-json", str(output_json), "--output-md", str(output_md))
+ payload = json.loads(proc.stdout)
+ assert payload["schema_version"] == "1.0", payload
+ assert payload["ok"] is True, payload
+ assert payload["summary"]["target_python"] == "3.11", payload
+ assert payload["summary"]["file_count"] >= 50, payload["summary"]
+ assert payload["summary"]["issue_count"] == 0, payload["summary"]
+ assert payload["summary"]["fstring_311_violation_count"] == 0, payload["summary"]
+ markdown = output_md.read_text(encoding="utf-8")
+ assert "Python Compatibility" in markdown, markdown
+ assert "f-string 3.11 violations" in markdown, markdown
+
+ safe = TMP / "safe.py"
+ safe.write_text(
+ "value = 'x|y'\n"
+ "escaped = value.replace('|', '\\\\|')\n"
+ "result = f'{escaped}'\n",
+ encoding="utf-8",
+ )
+ safe_proc = run_check("--path", safe.relative_to(ROOT).as_posix(), check=True, cwd=TMP)
+ safe_payload = json.loads(safe_proc.stdout)
+ assert safe_payload["summary"]["file_count"] == 1, safe_payload
+ assert safe_payload["summary"]["issue_count"] == 0, safe_payload
+
+ unsafe = TMP / "unsafe.py"
+ unsafe.write_text(
+ "value = 'x|y'\n"
+ "result = f\"{value.replace('|', '\\\\|')}\"\n",
+ encoding="utf-8",
+ )
+ unsafe_proc = run_check("--path", unsafe.relative_to(ROOT).as_posix(), check=False, cwd=TMP)
+ assert unsafe_proc.returncode == 2, unsafe_proc.stdout
+ unsafe_payload = json.loads(unsafe_proc.stdout)
+ assert unsafe_payload["ok"] is False, unsafe_payload
+ assert unsafe_payload["summary"]["decision"] == "block-python-compat", unsafe_payload
+ assert unsafe_payload["summary"]["file_count"] == 1, unsafe_payload
+ assert unsafe_payload["summary"]["fstring_311_violation_count"] >= 1, unsafe_payload
+ assert any(item["rule"] == "fstring-expression-backslash" for item in unsafe_payload["issues"]), unsafe_payload["issues"]
+ print(json.dumps({"ok": True}, ensure_ascii=False, indent=2))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tests/verify_review_studio.py b/tests/verify_review_studio.py
index d34d2f0f..3aaa85eb 100644
--- a/tests/verify_review_studio.py
+++ b/tests/verify_review_studio.py
@@ -218,6 +218,13 @@ def main() -> None:
capture_output=True,
text=True,
)
+ subprocess.run(
+ [sys.executable, str(ROOT / "scripts" / "python_compat_check.py"), str(ROOT), "--generated-at", "2026-06-13"],
+ cwd=ROOT,
+ check=True,
+ capture_output=True,
+ text=True,
+ )
for script_name in [
"render_skill_os2_audit.py",
"render_world_class_evidence_plan.py",
@@ -325,6 +332,7 @@ def main() -> None:
assert full_payload["evidence_paths"]["output_blind_review"] == "reports/output_blind_review_pack.md", full_payload["evidence_paths"]
assert full_payload["evidence_paths"]["output_review_decisions"] == "reports/output_review_decisions.json", full_payload["evidence_paths"]
assert full_payload["evidence_paths"]["output_review_adjudication"] == "reports/output_review_adjudication.md", full_payload["evidence_paths"]
+ assert full_payload["evidence_paths"]["python_compatibility"] == "reports/python_compatibility.md", full_payload["evidence_paths"]
if (ROOT / "reports" / "benchmark_reproducibility.md").exists():
assert full_payload["evidence_paths"]["benchmark_reproducibility"] == "reports/benchmark_reproducibility.md", full_payload["evidence_paths"]
if (ROOT / "reports" / "skill_os2_coverage.md").exists():
@@ -351,6 +359,8 @@ def main() -> None:
assert full_payload["data"]["compiled_targets"]["summary"]["block_count"] == 0, full_payload["data"]["compiled_targets"]
assert full_payload["data"]["runtime_permissions"]["summary"]["metadata_fallback_count"] == 4, full_payload["data"]["runtime_permissions"]
assert full_payload["evidence_paths"]["runtime_permissions"] == "reports/runtime_permission_probes.md", full_payload["evidence_paths"]
+ assert full_payload["data"]["python_compatibility"]["summary"]["target_python"] == "3.11", full_payload["data"]["python_compatibility"]
+ assert full_payload["data"]["python_compatibility"]["summary"]["issue_count"] == 0, full_payload["data"]["python_compatibility"]
action_keys = {item["gate_key"] for item in full_payload["review_actions"]}
assert action_keys == {"output-lab", "review-waivers", "world-class-evidence"}, full_payload["review_actions"]
world_class_action = next(item for item in full_payload["review_actions"] if item["gate_key"] == "world-class-evidence")
@@ -470,6 +480,9 @@ def main() -> None:
assert "人工批准" in html, html[:8200]
assert "权限批准" in html, html[:9000]
assert "权限探针" in html, html[:9500]
+ assert "Python 兼容" in html, html[:10000]
+ assert "解释器边界" in html, html[:10000]
+ assert "reports/python_compatibility.md" in html, html
assert "kv-grid" in html, html
assert "案例数" in html, html
assert "命令执行" in html, html
diff --git a/tests/verify_yao_cli.py b/tests/verify_yao_cli.py
index a60d5448..834747a4 100644
--- a/tests/verify_yao_cli.py
+++ b/tests/verify_yao_cli.py
@@ -73,6 +73,7 @@ def main() -> None:
parser_help = yao_cli_module.build_parser().format_help()
assert "quickstart" in parser_help, parser_help
assert "review-studio" in parser_help, parser_help
+ assert "python-compat" in parser_help, parser_help
assert "skill-os2-audit" in parser_help, parser_help
assert "skill-os2-coverage" in parser_help, parser_help
assert "world-class-evidence" in parser_help, parser_help
@@ -184,6 +185,21 @@ def main() -> None:
assert skill_os2_coverage_result["payload"]["summary"]["local_blueprint_ready"] is True, skill_os2_coverage_result
assert skill_os2_coverage_result["payload"]["summary"]["public_world_class_ready"] is False, skill_os2_coverage_result
+ python_compat_result = run(
+ "python-compat",
+ str(ROOT),
+ "--output-json",
+ str(tmp_root / "python_compatibility.json"),
+ "--output-md",
+ str(tmp_root / "python_compatibility.md"),
+ "--generated-at",
+ "2026-06-14",
+ )
+ assert python_compat_result["ok"], python_compat_result
+ assert python_compat_result["payload"]["summary"]["target_python"] == "3.11", python_compat_result
+ assert python_compat_result["payload"]["summary"]["issue_count"] == 0, python_compat_result
+ assert python_compat_result["payload"]["summary"]["file_count"] >= 50, python_compat_result
+
world_class_evidence_result = run(
"world-class-evidence",
str(ROOT),
@@ -656,6 +672,7 @@ def main() -> None:
assert report_result["ok"], report_result
assert "iteration_ledger" in report_result["payload"]["artifacts"], report_result
assert "portability_score" in report_result["payload"]["artifacts"], report_result
+ assert "python_compatibility" in report_result["payload"]["artifacts"], report_result
assert "artifact_design_profile" in report_result["payload"]["artifacts"], report_result
assert "prompt_quality_profile" in report_result["payload"]["artifacts"], report_result
assert "compiled_targets" in report_result["payload"]["artifacts"], report_result