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.0

5 targets in platform-neutral contract

Compiler5/5

target contracts compiled from Skill IR

Output Delta100.0

5 cases; 1 file-backed

Exec Runs10

command 10; model 0; recorded 0

Blind A/B5

review pairs hide baseline vs with-skill labels

Review A/B0/5

adjudication decisions; pending 5

Blueprint20/20

2.0 coverage; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native enforcement targets

Trust0

81 scripts scanned; secrets found

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

66 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

543 zip entries; package verification

Installpass

4 adapters; 12 permissions enforced; 0 permission failures

Upgrademinor

declared minor; 0 breaking changes

+
Skill IR2.0.0

5 targets in platform-neutral contract

Compiler5/5

target contracts compiled from Skill IR

Output Delta100.0

5 cases; 1 file-backed

Exec Runs10

command 10; model 0; recorded 0

Blind A/B5

review pairs hide baseline vs with-skill labels

Review A/B0/5

adjudication decisions; pending 5

Blueprint20/20

2.0 coverage; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native enforcement targets

Trust0

82 scripts scanned; secrets found

Py Compat0

140 files scanned for Python 3.11

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

67 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

547 zip entries; package verification

Installpass

4 adapters; 12 permissions enforced; 0 permission failures

Upgrademinor

declared minor; 0 breaking changes

审查闸门

-
通过

意图画布

intent confidence 100/100; Intent is clear enough to package the first routeable version.

reports/intent-confidence.json 证据
通过

触发实验

13 trigger cases; 0 misroutes; 0 ambiguous

reports/route_scorecard.json 证据
关注

输出实验

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

reports/output_quality_scorecard.json 证据
通过

上下文

initial load 944/1000; quality density 137.7

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

0 secrets; 81 scripts; 3 network-capable scripts; 0 help smoke failures

reports/security_trust_report.json 证据
通过

权限批准

3/3 permissions approved; gaps 0; required file_write, network, subprocess

reports/security_trust_report.json + security/permission_policy.json 证据
通过

权限探针

4/4 targets probed; native 0; metadata fallback 4; residual risks 4

reports/runtime_permission_probes.json 证据
通过

组合治理

12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues

reports/skill_atlas.json 证据
通过

运营回路

1 metadata events; adoption 0; missed 0; bad-output 0; risk low

reports/adoption_drift_report.json 证据
关注

人工批准

0 active waivers; 1 warning gates still need reviewer decision

reports/review_waivers.json 证据
关注

世界证据

4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true

reports/world_class_evidence_ledger.json 证据
通过

注册审计

yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures

reports/registry_audit.json + reports/install_simulation.json 证据
通过

发布路线

0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended

reports/promotion_decisions.json + reports/upgrade_check.json + docs/migration-v2.md 证据
+
通过

意图画布

intent confidence 100/100; Intent is clear enough to package the first routeable version.

reports/intent-confidence.json 证据
通过

触发实验

13 trigger cases; 0 misroutes; 0 ambiguous

reports/route_scorecard.json 证据
关注

输出实验

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

reports/output_quality_scorecard.json 证据
通过

上下文

initial load 944/1000; quality density 137.7

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

0 secrets; 82 scripts; 3 network-capable scripts; 0 help smoke failures

reports/security_trust_report.json 证据
通过

权限批准

3/3 permissions approved; gaps 0; required file_write, network, subprocess

reports/security_trust_report.json + security/permission_policy.json 证据
通过

权限探针

4/4 targets probed; native 0; metadata fallback 4; residual risks 4

reports/runtime_permission_probes.json 证据
通过

组合治理

12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues

reports/skill_atlas.json 证据
通过

运营回路

1 metadata events; adoption 0; missed 0; bad-output 0; risk low

reports/adoption_drift_report.json 证据
关注

人工批准

0 active waivers; 1 warning gates still need reviewer decision

reports/review_waivers.json 证据
关注

世界证据

4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true

reports/world_class_evidence_ledger.json 证据
通过

注册审计

yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures

reports/registry_audit.json + reports/install_simulation.json 证据
通过

发布路线

0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended

@@ -323,7 +323,7 @@

证据路径

- +
@@ -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.

-
资产分布336项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
+
资产分布339项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
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
路径Path作用Role类型Type
SKILL.mdSkill 入口文件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