Centralize Skill IR artifact discovery
This commit is contained in:
@@ -54,6 +54,7 @@ html-rendering-check:
|
||||
|
||||
skill-ir-check:
|
||||
$(PYTHON) tests/verify_skill_ir.py
|
||||
$(PYTHON) tests/verify_skill_ir_paths.py
|
||||
|
||||
compiler-check:
|
||||
$(PYTHON) tests/verify_compile_skill.py
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
"vscode"
|
||||
],
|
||||
"package_metadata": "registry/packages/yao-meta-skill.json",
|
||||
"package_sha256": "7734802eb54b761e419b62d6d7e0d5861aa10401b8e8cf956934e51f9b87ba0d"
|
||||
"package_sha256": "836b5ebaf4a608a1a89fa84306ab9b4bb7e0555c74b6ca8e572ffb1833cc0f8c"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "7734802eb54b761e419b62d6d7e0d5861aa10401b8e8cf956934e51f9b87ba0d",
|
||||
"archive_sha256": "1727ee08ba08d88ca55122937ec07dabb2a8a515acc5c6e375052554335da296"
|
||||
"package_sha256": "836b5ebaf4a608a1a89fa84306ab9b4bb7e0555c74b6ca8e572ffb1833cc0f8c",
|
||||
"archive_sha256": "ed1bc47c56c8d247bf5dd351bf29201e60471b4785a86e16ae1ede5e71d1582f"
|
||||
},
|
||||
"compatibility": {
|
||||
"openai": "pass",
|
||||
@@ -48,7 +48,7 @@
|
||||
},
|
||||
"distribution": {
|
||||
"archive_verified": true,
|
||||
"archive_sha256": "1727ee08ba08d88ca55122937ec07dabb2a8a515acc5c6e375052554335da296",
|
||||
"archive_sha256": "ed1bc47c56c8d247bf5dd351bf29201e60471b4785a86e16ae1ede5e71d1582f",
|
||||
"package_verification": "reports/package_verification.json",
|
||||
"install_simulated": true,
|
||||
"install_simulation": "reports/install_simulation.json"
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
"generated_at": "2026-06-16",
|
||||
"skill_dir": ".",
|
||||
"summary": {
|
||||
"python_file_count": 177,
|
||||
"script_file_count": 113,
|
||||
"test_file_count": 64,
|
||||
"internal_module_count": 33,
|
||||
"python_file_count": 179,
|
||||
"script_file_count": 114,
|
||||
"test_file_count": 65,
|
||||
"internal_module_count": 34,
|
||||
"cli_script_count": 82,
|
||||
"command_handler_count": 65,
|
||||
"entrypoint_command_handler_count": 18,
|
||||
@@ -31,18 +31,11 @@
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_evidence_consistency.py",
|
||||
"lines": 871,
|
||||
"lines": 850,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_model.py",
|
||||
"lines": 828,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/yao_cli_parser.py",
|
||||
"lines": 822,
|
||||
@@ -57,6 +50,13 @@
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_model.py",
|
||||
"lines": 800,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_review_studio.py",
|
||||
"lines": 766,
|
||||
@@ -65,15 +65,15 @@
|
||||
"recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands."
|
||||
},
|
||||
{
|
||||
"path": "scripts/compile_skill.py",
|
||||
"lines": 734,
|
||||
"path": "scripts/build_skill_atlas.py",
|
||||
"lines": 730,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/build_skill_atlas.py",
|
||||
"lines": 730,
|
||||
"path": "scripts/compile_skill.py",
|
||||
"lines": 723,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
@@ -117,18 +117,11 @@
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_evidence_consistency.py",
|
||||
"lines": 871,
|
||||
"lines": 850,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_model.py",
|
||||
"lines": 828,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/yao_cli_parser.py",
|
||||
"lines": 822,
|
||||
@@ -143,6 +136,13 @@
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_model.py",
|
||||
"lines": 800,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_review_studio.py",
|
||||
"lines": 766,
|
||||
@@ -151,15 +151,15 @@
|
||||
"recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands."
|
||||
},
|
||||
{
|
||||
"path": "scripts/compile_skill.py",
|
||||
"lines": 734,
|
||||
"path": "scripts/build_skill_atlas.py",
|
||||
"lines": 730,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/build_skill_atlas.py",
|
||||
"lines": 730,
|
||||
"path": "scripts/compile_skill.py",
|
||||
"lines": 723,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
|
||||
@@ -5,10 +5,10 @@ Generated at: `2026-06-16`
|
||||
## Summary
|
||||
|
||||
- decision: `pass`
|
||||
- python files: `177`
|
||||
- scripts: `113`
|
||||
- tests: `64`
|
||||
- internal modules: `33`
|
||||
- python files: `179`
|
||||
- scripts: `114`
|
||||
- tests: `65`
|
||||
- internal modules: `34`
|
||||
- CLI scripts: `82`
|
||||
- Yao CLI command handlers: `65`
|
||||
- entrypoint command handlers: `18`
|
||||
@@ -30,13 +30,13 @@ No file-size hotspots found.
|
||||
| File | Lines | Kind | Recommended next split |
|
||||
| --- | ---: | --- | --- |
|
||||
| `tests/verify_yao_cli.py` | `899` | `test` | Break broad integration assertions into focused verifier helpers when the next behavior change lands. |
|
||||
| `scripts/render_evidence_consistency.py` | `871` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/skill_report_model.py` | `828` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/render_evidence_consistency.py` | `850` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/yao_cli_parser.py` | `822` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/skill_report_layout.py` | `808` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/skill_report_model.py` | `800` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `tests/verify_review_studio.py` | `766` | `test` | Break broad integration assertions into focused verifier helpers when the next behavior change lands. |
|
||||
| `scripts/compile_skill.py` | `734` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/build_skill_atlas.py` | `730` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/compile_skill.py` | `723` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/optimize_description.py` | `723` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
|
||||
## Largest Files
|
||||
@@ -44,13 +44,13 @@ No file-size hotspots found.
|
||||
| File | Lines | Kind | Severity |
|
||||
| --- | ---: | --- | --- |
|
||||
| `tests/verify_yao_cli.py` | `899` | `test` | `pass` |
|
||||
| `scripts/render_evidence_consistency.py` | `871` | `cli-script` | `pass` |
|
||||
| `scripts/skill_report_model.py` | `828` | `internal-module` | `pass` |
|
||||
| `scripts/render_evidence_consistency.py` | `850` | `cli-script` | `pass` |
|
||||
| `scripts/yao_cli_parser.py` | `822` | `internal-module` | `pass` |
|
||||
| `scripts/skill_report_layout.py` | `808` | `internal-module` | `pass` |
|
||||
| `scripts/skill_report_model.py` | `800` | `internal-module` | `pass` |
|
||||
| `tests/verify_review_studio.py` | `766` | `test` | `pass` |
|
||||
| `scripts/compile_skill.py` | `734` | `cli-script` | `pass` |
|
||||
| `scripts/build_skill_atlas.py` | `730` | `cli-script` | `pass` |
|
||||
| `scripts/compile_skill.py` | `723` | `cli-script` | `pass` |
|
||||
| `scripts/optimize_description.py` | `723` | `cli-script` | `pass` |
|
||||
| `scripts/trust_check.py` | `714` | `internal-module` | `pass` |
|
||||
| `scripts/apply_adaptation.py` | `706` | `cli-script` | `pass` |
|
||||
|
||||
+200
-30
@@ -149,6 +149,7 @@
|
||||
],
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/apply_adaptation.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
"scripts/build_skill_atlas.py",
|
||||
"scripts/check_update.py",
|
||||
@@ -160,6 +161,8 @@
|
||||
"scripts/cross_packager.py",
|
||||
"scripts/diff_eval.py",
|
||||
"scripts/emit_telemetry_event.py",
|
||||
"scripts/evidence_consistency_release.py",
|
||||
"scripts/evidence_consistency_world_class.py",
|
||||
"scripts/export_skill_ir.py",
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/governance_check.py",
|
||||
@@ -213,6 +216,7 @@
|
||||
"scripts/render_world_class_evidence_ledger.py",
|
||||
"scripts/render_world_class_evidence_plan.py",
|
||||
"scripts/render_world_class_operator_runbook.py",
|
||||
"scripts/render_world_class_preflight.py",
|
||||
"scripts/render_world_class_submission_review.py",
|
||||
"scripts/resource_boundary_check.py",
|
||||
"scripts/review_studio_action_evidence.py",
|
||||
@@ -227,7 +231,37 @@
|
||||
"scripts/review_viewer_data.py",
|
||||
"scripts/run_conformance_suite.py",
|
||||
"scripts/run_description_optimization_suite.py",
|
||||
"scripts/run_eval_suite.py"
|
||||
"scripts/run_eval_suite.py",
|
||||
"scripts/run_output_eval.py",
|
||||
"scripts/run_output_execution.py",
|
||||
"scripts/simulate_install.py",
|
||||
"scripts/skill_ir_paths.py",
|
||||
"scripts/skill_report_charts.py",
|
||||
"scripts/skill_report_i18n.py",
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/skill_report_world_class.py",
|
||||
"scripts/summarize_user_signals.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py",
|
||||
"scripts/trigger_eval.py",
|
||||
"scripts/trust_check.py",
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/world_class_evidence_contract.py",
|
||||
"scripts/world_class_source_checks.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_adaptation_commands.py",
|
||||
"scripts/yao_cli_config.py",
|
||||
"scripts/yao_cli_create_commands.py",
|
||||
"scripts/yao_cli_distribution_commands.py",
|
||||
"scripts/yao_cli_output_commands.py",
|
||||
"scripts/yao_cli_parser.py",
|
||||
"scripts/yao_cli_report_commands.py",
|
||||
"scripts/yao_cli_runtime.py",
|
||||
"scripts/yao_cli_telemetry.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -280,7 +314,7 @@
|
||||
],
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
}
|
||||
@@ -548,7 +582,7 @@
|
||||
"strategy": "Ship the neutral source tree and expose OpenAI-facing interface metadata as a generated companion file.",
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
},
|
||||
@@ -559,7 +593,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"strategy": "Keep scripts as local package resources; expose help-smoke and permission metadata for reviewer approval before execution.",
|
||||
"script_count": 80,
|
||||
"script_count": 114,
|
||||
"help_smoke_failed_count": 0
|
||||
},
|
||||
"permissions": {
|
||||
@@ -799,7 +833,7 @@
|
||||
"strategy": "Ship the neutral source tree and expose OpenAI-facing interface metadata as a generated companion file.",
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
},
|
||||
@@ -810,7 +844,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"strategy": "Keep scripts as local package resources; expose help-smoke and permission metadata for reviewer approval before execution.",
|
||||
"script_count": 80,
|
||||
"script_count": 114,
|
||||
"help_smoke_failed_count": 0
|
||||
},
|
||||
"permissions": {
|
||||
@@ -1016,6 +1050,7 @@
|
||||
],
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/apply_adaptation.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
"scripts/build_skill_atlas.py",
|
||||
"scripts/check_update.py",
|
||||
@@ -1027,6 +1062,8 @@
|
||||
"scripts/cross_packager.py",
|
||||
"scripts/diff_eval.py",
|
||||
"scripts/emit_telemetry_event.py",
|
||||
"scripts/evidence_consistency_release.py",
|
||||
"scripts/evidence_consistency_world_class.py",
|
||||
"scripts/export_skill_ir.py",
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/governance_check.py",
|
||||
@@ -1080,6 +1117,7 @@
|
||||
"scripts/render_world_class_evidence_ledger.py",
|
||||
"scripts/render_world_class_evidence_plan.py",
|
||||
"scripts/render_world_class_operator_runbook.py",
|
||||
"scripts/render_world_class_preflight.py",
|
||||
"scripts/render_world_class_submission_review.py",
|
||||
"scripts/resource_boundary_check.py",
|
||||
"scripts/review_studio_action_evidence.py",
|
||||
@@ -1094,7 +1132,37 @@
|
||||
"scripts/review_viewer_data.py",
|
||||
"scripts/run_conformance_suite.py",
|
||||
"scripts/run_description_optimization_suite.py",
|
||||
"scripts/run_eval_suite.py"
|
||||
"scripts/run_eval_suite.py",
|
||||
"scripts/run_output_eval.py",
|
||||
"scripts/run_output_execution.py",
|
||||
"scripts/simulate_install.py",
|
||||
"scripts/skill_ir_paths.py",
|
||||
"scripts/skill_report_charts.py",
|
||||
"scripts/skill_report_i18n.py",
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/skill_report_world_class.py",
|
||||
"scripts/summarize_user_signals.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py",
|
||||
"scripts/trigger_eval.py",
|
||||
"scripts/trust_check.py",
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/world_class_evidence_contract.py",
|
||||
"scripts/world_class_source_checks.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_adaptation_commands.py",
|
||||
"scripts/yao_cli_config.py",
|
||||
"scripts/yao_cli_create_commands.py",
|
||||
"scripts/yao_cli_distribution_commands.py",
|
||||
"scripts/yao_cli_output_commands.py",
|
||||
"scripts/yao_cli_parser.py",
|
||||
"scripts/yao_cli_report_commands.py",
|
||||
"scripts/yao_cli_runtime.py",
|
||||
"scripts/yao_cli_telemetry.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -1147,7 +1215,7 @@
|
||||
],
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
}
|
||||
@@ -1415,7 +1483,7 @@
|
||||
"strategy": "Preserve the source tree directly; write target notes in targets/claude/README.md.",
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
},
|
||||
@@ -1426,7 +1494,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"strategy": "Scripts remain local package resources and must be reviewed through trust and permission reports before use.",
|
||||
"script_count": 80,
|
||||
"script_count": 114,
|
||||
"help_smoke_failed_count": 0
|
||||
},
|
||||
"permissions": {
|
||||
@@ -1666,7 +1734,7 @@
|
||||
"strategy": "Preserve the source tree directly; write target notes in targets/claude/README.md.",
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
},
|
||||
@@ -1677,7 +1745,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"strategy": "Scripts remain local package resources and must be reviewed through trust and permission reports before use.",
|
||||
"script_count": 80,
|
||||
"script_count": 114,
|
||||
"help_smoke_failed_count": 0
|
||||
},
|
||||
"permissions": {
|
||||
@@ -1883,6 +1951,7 @@
|
||||
],
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/apply_adaptation.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
"scripts/build_skill_atlas.py",
|
||||
"scripts/check_update.py",
|
||||
@@ -1894,6 +1963,8 @@
|
||||
"scripts/cross_packager.py",
|
||||
"scripts/diff_eval.py",
|
||||
"scripts/emit_telemetry_event.py",
|
||||
"scripts/evidence_consistency_release.py",
|
||||
"scripts/evidence_consistency_world_class.py",
|
||||
"scripts/export_skill_ir.py",
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/governance_check.py",
|
||||
@@ -1947,6 +2018,7 @@
|
||||
"scripts/render_world_class_evidence_ledger.py",
|
||||
"scripts/render_world_class_evidence_plan.py",
|
||||
"scripts/render_world_class_operator_runbook.py",
|
||||
"scripts/render_world_class_preflight.py",
|
||||
"scripts/render_world_class_submission_review.py",
|
||||
"scripts/resource_boundary_check.py",
|
||||
"scripts/review_studio_action_evidence.py",
|
||||
@@ -1961,7 +2033,37 @@
|
||||
"scripts/review_viewer_data.py",
|
||||
"scripts/run_conformance_suite.py",
|
||||
"scripts/run_description_optimization_suite.py",
|
||||
"scripts/run_eval_suite.py"
|
||||
"scripts/run_eval_suite.py",
|
||||
"scripts/run_output_eval.py",
|
||||
"scripts/run_output_execution.py",
|
||||
"scripts/simulate_install.py",
|
||||
"scripts/skill_ir_paths.py",
|
||||
"scripts/skill_report_charts.py",
|
||||
"scripts/skill_report_i18n.py",
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/skill_report_world_class.py",
|
||||
"scripts/summarize_user_signals.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py",
|
||||
"scripts/trigger_eval.py",
|
||||
"scripts/trust_check.py",
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/world_class_evidence_contract.py",
|
||||
"scripts/world_class_source_checks.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_adaptation_commands.py",
|
||||
"scripts/yao_cli_config.py",
|
||||
"scripts/yao_cli_create_commands.py",
|
||||
"scripts/yao_cli_distribution_commands.py",
|
||||
"scripts/yao_cli_output_commands.py",
|
||||
"scripts/yao_cli_parser.py",
|
||||
"scripts/yao_cli_report_commands.py",
|
||||
"scripts/yao_cli_runtime.py",
|
||||
"scripts/yao_cli_telemetry.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -2014,7 +2116,7 @@
|
||||
],
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
}
|
||||
@@ -2282,7 +2384,7 @@
|
||||
"strategy": "Preserve references, scripts, assets, evals, reports, and adapter metadata as relative package resources.",
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
},
|
||||
@@ -2292,7 +2394,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"strategy": "Expose script and permission metadata for downstream clients or installers to enforce.",
|
||||
"script_count": 80,
|
||||
"script_count": 114,
|
||||
"help_smoke_failed_count": 0
|
||||
},
|
||||
"permissions": {
|
||||
@@ -2526,7 +2628,7 @@
|
||||
"strategy": "Preserve references, scripts, assets, evals, reports, and adapter metadata as relative package resources.",
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
},
|
||||
@@ -2536,7 +2638,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"strategy": "Expose script and permission metadata for downstream clients or installers to enforce.",
|
||||
"script_count": 80,
|
||||
"script_count": 114,
|
||||
"help_smoke_failed_count": 0
|
||||
},
|
||||
"permissions": {
|
||||
@@ -2734,6 +2836,7 @@
|
||||
],
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/apply_adaptation.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
"scripts/build_skill_atlas.py",
|
||||
"scripts/check_update.py",
|
||||
@@ -2745,6 +2848,8 @@
|
||||
"scripts/cross_packager.py",
|
||||
"scripts/diff_eval.py",
|
||||
"scripts/emit_telemetry_event.py",
|
||||
"scripts/evidence_consistency_release.py",
|
||||
"scripts/evidence_consistency_world_class.py",
|
||||
"scripts/export_skill_ir.py",
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/governance_check.py",
|
||||
@@ -2798,6 +2903,7 @@
|
||||
"scripts/render_world_class_evidence_ledger.py",
|
||||
"scripts/render_world_class_evidence_plan.py",
|
||||
"scripts/render_world_class_operator_runbook.py",
|
||||
"scripts/render_world_class_preflight.py",
|
||||
"scripts/render_world_class_submission_review.py",
|
||||
"scripts/resource_boundary_check.py",
|
||||
"scripts/review_studio_action_evidence.py",
|
||||
@@ -2812,7 +2918,37 @@
|
||||
"scripts/review_viewer_data.py",
|
||||
"scripts/run_conformance_suite.py",
|
||||
"scripts/run_description_optimization_suite.py",
|
||||
"scripts/run_eval_suite.py"
|
||||
"scripts/run_eval_suite.py",
|
||||
"scripts/run_output_eval.py",
|
||||
"scripts/run_output_execution.py",
|
||||
"scripts/simulate_install.py",
|
||||
"scripts/skill_ir_paths.py",
|
||||
"scripts/skill_report_charts.py",
|
||||
"scripts/skill_report_i18n.py",
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/skill_report_world_class.py",
|
||||
"scripts/summarize_user_signals.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py",
|
||||
"scripts/trigger_eval.py",
|
||||
"scripts/trust_check.py",
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/world_class_evidence_contract.py",
|
||||
"scripts/world_class_source_checks.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_adaptation_commands.py",
|
||||
"scripts/yao_cli_config.py",
|
||||
"scripts/yao_cli_create_commands.py",
|
||||
"scripts/yao_cli_distribution_commands.py",
|
||||
"scripts/yao_cli_output_commands.py",
|
||||
"scripts/yao_cli_parser.py",
|
||||
"scripts/yao_cli_report_commands.py",
|
||||
"scripts/yao_cli_runtime.py",
|
||||
"scripts/yao_cli_telemetry.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -2865,7 +3001,7 @@
|
||||
],
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
}
|
||||
@@ -3133,7 +3269,7 @@
|
||||
"strategy": "Keep optional directories as relative resources next to SKILL.md.",
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
},
|
||||
@@ -3144,7 +3280,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"strategy": "Scripts remain local optional resources and should advertise --help when executable.",
|
||||
"script_count": 80,
|
||||
"script_count": 114,
|
||||
"help_smoke_failed_count": 0
|
||||
},
|
||||
"permissions": {
|
||||
@@ -3377,7 +3513,7 @@
|
||||
"strategy": "Keep optional directories as relative resources next to SKILL.md.",
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
},
|
||||
@@ -3388,7 +3524,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"strategy": "Scripts remain local optional resources and should advertise --help when executable.",
|
||||
"script_count": 80,
|
||||
"script_count": 114,
|
||||
"help_smoke_failed_count": 0
|
||||
},
|
||||
"permissions": {
|
||||
@@ -3585,6 +3721,7 @@
|
||||
],
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/apply_adaptation.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
"scripts/build_skill_atlas.py",
|
||||
"scripts/check_update.py",
|
||||
@@ -3596,6 +3733,8 @@
|
||||
"scripts/cross_packager.py",
|
||||
"scripts/diff_eval.py",
|
||||
"scripts/emit_telemetry_event.py",
|
||||
"scripts/evidence_consistency_release.py",
|
||||
"scripts/evidence_consistency_world_class.py",
|
||||
"scripts/export_skill_ir.py",
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/governance_check.py",
|
||||
@@ -3649,6 +3788,7 @@
|
||||
"scripts/render_world_class_evidence_ledger.py",
|
||||
"scripts/render_world_class_evidence_plan.py",
|
||||
"scripts/render_world_class_operator_runbook.py",
|
||||
"scripts/render_world_class_preflight.py",
|
||||
"scripts/render_world_class_submission_review.py",
|
||||
"scripts/resource_boundary_check.py",
|
||||
"scripts/review_studio_action_evidence.py",
|
||||
@@ -3663,7 +3803,37 @@
|
||||
"scripts/review_viewer_data.py",
|
||||
"scripts/run_conformance_suite.py",
|
||||
"scripts/run_description_optimization_suite.py",
|
||||
"scripts/run_eval_suite.py"
|
||||
"scripts/run_eval_suite.py",
|
||||
"scripts/run_output_eval.py",
|
||||
"scripts/run_output_execution.py",
|
||||
"scripts/simulate_install.py",
|
||||
"scripts/skill_ir_paths.py",
|
||||
"scripts/skill_report_charts.py",
|
||||
"scripts/skill_report_i18n.py",
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/skill_report_world_class.py",
|
||||
"scripts/summarize_user_signals.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py",
|
||||
"scripts/trigger_eval.py",
|
||||
"scripts/trust_check.py",
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/world_class_evidence_contract.py",
|
||||
"scripts/world_class_source_checks.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_adaptation_commands.py",
|
||||
"scripts/yao_cli_config.py",
|
||||
"scripts/yao_cli_create_commands.py",
|
||||
"scripts/yao_cli_distribution_commands.py",
|
||||
"scripts/yao_cli_output_commands.py",
|
||||
"scripts/yao_cli_parser.py",
|
||||
"scripts/yao_cli_report_commands.py",
|
||||
"scripts/yao_cli_runtime.py",
|
||||
"scripts/yao_cli_telemetry.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -3716,7 +3886,7 @@
|
||||
],
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
}
|
||||
@@ -3984,7 +4154,7 @@
|
||||
"strategy": "Install as project or user scoped skill source, preserving relative references and scripts.",
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
},
|
||||
@@ -3995,7 +4165,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"strategy": "Scripts require workspace trust and operator/client approval outside this compiler.",
|
||||
"script_count": 80,
|
||||
"script_count": 114,
|
||||
"help_smoke_failed_count": 0
|
||||
},
|
||||
"permissions": {
|
||||
@@ -4232,7 +4402,7 @@
|
||||
"strategy": "Install as project or user scoped skill source, preserving relative references and scripts.",
|
||||
"counts": {
|
||||
"references": 34,
|
||||
"scripts": 80,
|
||||
"scripts": 114,
|
||||
"assets": 2,
|
||||
"reports": 43
|
||||
},
|
||||
@@ -4243,7 +4413,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"strategy": "Scripts require workspace trust and operator/client approval outside this compiler.",
|
||||
"script_count": 80,
|
||||
"script_count": 114,
|
||||
"help_smoke_failed_count": 0
|
||||
},
|
||||
"permissions": {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"installed_skill_dir": "dist/install-simulation/simulate-yao-meta-skill/yao-meta-skill",
|
||||
"summary": {
|
||||
"archive_present": true,
|
||||
"archive_entry_count": 624,
|
||||
"archive_entry_count": 626,
|
||||
"archive_extracted": true,
|
||||
"entrypoint_loaded": true,
|
||||
"manifest_loaded": true,
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 27.46,
|
||||
"duration_ms": 27.19,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -62,7 +62,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.99,
|
||||
"duration_ms": 26.21,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -85,7 +85,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 26.34,
|
||||
"duration_ms": 29.21,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -113,7 +113,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 29.02,
|
||||
"duration_ms": 31.35,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -136,7 +136,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 29.3,
|
||||
"duration_ms": 30.03,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -164,7 +164,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 27.13,
|
||||
"duration_ms": 28.51,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -187,7 +187,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 26.18,
|
||||
"duration_ms": 26.42,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -214,7 +214,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 26.0,
|
||||
"duration_ms": 26.03,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -237,7 +237,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.57,
|
||||
"duration_ms": 26.05,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -266,7 +266,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.78,
|
||||
"duration_ms": 26.28,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
|
||||
@@ -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 | 27.46 | 33 | 0.0 | pass |
|
||||
| skill-package-contract | with_skill | command | local-output-eval-runner | 25.99 | 73 | 100.0 | pass |
|
||||
| output-eval-expectation | baseline | command | local-output-eval-runner | 26.34 | 36 | 0.0 | pass |
|
||||
| output-eval-expectation | with_skill | command | local-output-eval-runner | 29.02 | 80 | 100.0 | pass |
|
||||
| ir-before-packaging | baseline | command | local-output-eval-runner | 29.3 | 33 | 0.0 | pass |
|
||||
| ir-before-packaging | with_skill | command | local-output-eval-runner | 27.13 | 80 | 100.0 | pass |
|
||||
| near-neighbor-boundary | baseline | command | local-output-eval-runner | 26.18 | 36 | 0.0 | pass |
|
||||
| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 26.0 | 65 | 100.0 | pass |
|
||||
| file-backed-governed-package | baseline | command | local-output-eval-runner | 25.57 | 37 | 0.0 | pass |
|
||||
| file-backed-governed-package | with_skill | command | local-output-eval-runner | 25.78 | 98 | 100.0 | pass |
|
||||
| skill-package-contract | baseline | command | local-output-eval-runner | 27.19 | 33 | 0.0 | pass |
|
||||
| skill-package-contract | with_skill | command | local-output-eval-runner | 26.21 | 73 | 100.0 | pass |
|
||||
| output-eval-expectation | baseline | command | local-output-eval-runner | 29.21 | 36 | 0.0 | pass |
|
||||
| output-eval-expectation | with_skill | command | local-output-eval-runner | 31.35 | 80 | 100.0 | pass |
|
||||
| ir-before-packaging | baseline | command | local-output-eval-runner | 30.03 | 33 | 0.0 | pass |
|
||||
| ir-before-packaging | with_skill | command | local-output-eval-runner | 28.51 | 80 | 100.0 | pass |
|
||||
| near-neighbor-boundary | baseline | command | local-output-eval-runner | 26.42 | 36 | 0.0 | pass |
|
||||
| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 26.03 | 65 | 100.0 | pass |
|
||||
| file-backed-governed-package | baseline | command | local-output-eval-runner | 26.05 | 37 | 0.0 | pass |
|
||||
| file-backed-governed-package | with_skill | command | local-output-eval-runner | 26.28 | 98 | 100.0 | pass |
|
||||
|
||||
## Next Fixes
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
"target_count": 4,
|
||||
"adapter_count": 4,
|
||||
"archive_present": true,
|
||||
"archive_sha256": "1727ee08ba08d88ca55122937ec07dabb2a8a515acc5c6e375052554335da296",
|
||||
"archive_entry_count": 624,
|
||||
"archive_sha256": "ed1bc47c56c8d247bf5dd351bf29201e60471b4785a86e16ae1ede5e71d1582f",
|
||||
"archive_entry_count": 626,
|
||||
"failure_count": 0,
|
||||
"warning_count": 0
|
||||
},
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
- Package directory: `dist`
|
||||
- Targets: `4 / 4` adapters present
|
||||
- Archive present: `True`
|
||||
- Archive SHA256: `1727ee08ba08d88ca55122937ec07dabb2a8a515acc5c6e375052554335da296`
|
||||
- Archive SHA256: `ed1bc47c56c8d247bf5dd351bf29201e60471b4785a86e16ae1ede5e71d1582f`
|
||||
- Failures: `0`
|
||||
- Warnings: `0`
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"root": ".",
|
||||
"summary": {
|
||||
"target_python": "3.11",
|
||||
"file_count": 180,
|
||||
"file_count": 182,
|
||||
"issue_count": 0,
|
||||
"syntax_error_count": 0,
|
||||
"fstring_311_violation_count": 0,
|
||||
@@ -562,6 +562,12 @@
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_ir_paths.py",
|
||||
"ok": true,
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_charts.py",
|
||||
"ok": true,
|
||||
@@ -982,6 +988,12 @@
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_skill_ir_paths.py",
|
||||
"ok": true,
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_skill_os2_audit.py",
|
||||
"ok": true,
|
||||
|
||||
@@ -6,7 +6,7 @@ Generated at: `2026-06-16`
|
||||
|
||||
- decision: `pass`
|
||||
- target python: `3.11`
|
||||
- files scanned: `180`
|
||||
- files scanned: `182`
|
||||
- issues: `0`
|
||||
- syntax errors: `0`
|
||||
- f-string 3.11 violations: `0`
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "7734802eb54b761e419b62d6d7e0d5861aa10401b8e8cf956934e51f9b87ba0d",
|
||||
"archive_sha256": "1727ee08ba08d88ca55122937ec07dabb2a8a515acc5c6e375052554335da296"
|
||||
"package_sha256": "836b5ebaf4a608a1a89fa84306ab9b4bb7e0555c74b6ca8e572ffb1833cc0f8c",
|
||||
"archive_sha256": "ed1bc47c56c8d247bf5dd351bf29201e60471b4785a86e16ae1ede5e71d1582f"
|
||||
},
|
||||
"compatibility": {
|
||||
"openai": "pass",
|
||||
@@ -53,7 +53,7 @@
|
||||
},
|
||||
"distribution": {
|
||||
"archive_verified": true,
|
||||
"archive_sha256": "1727ee08ba08d88ca55122937ec07dabb2a8a515acc5c6e375052554335da296",
|
||||
"archive_sha256": "ed1bc47c56c8d247bf5dd351bf29201e60471b4785a86e16ae1ede5e71d1582f",
|
||||
"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": "7734802eb54b761e419b62d6d7e0d5861aa10401b8e8cf956934e51f9b87ba0d"
|
||||
"package_sha256": "836b5ebaf4a608a1a89fa84306ab9b4bb7e0555c74b6ca8e572ffb1833cc0f8c"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
- Maturity: `governed`
|
||||
- Owner: `Yao Team`
|
||||
- License: `MIT`
|
||||
- Package SHA256: `7734802eb54b761e419b62d6d7e0d5861aa10401b8e8cf956934e51f9b87ba0d`
|
||||
- Archive SHA256: `1727ee08ba08d88ca55122937ec07dabb2a8a515acc5c6e375052554335da296`
|
||||
- Package SHA256: `836b5ebaf4a608a1a89fa84306ab9b4bb7e0555c74b6ca8e572ffb1833cc0f8c`
|
||||
- Archive SHA256: `ed1bc47c56c8d247bf5dd351bf29201e60471b4785a86e16ae1ede5e71d1582f`
|
||||
- Install simulated: `True`
|
||||
|
||||
## Compatibility
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
"ok": true,
|
||||
"skill_dir": ".",
|
||||
"summary": {
|
||||
"scanned_files": 200,
|
||||
"script_count": 113,
|
||||
"internal_module_count": 30,
|
||||
"scanned_files": 201,
|
||||
"script_count": 114,
|
||||
"internal_module_count": 31,
|
||||
"secret_findings": 0,
|
||||
"dependency_files": [
|
||||
"requirements-ci.txt"
|
||||
@@ -22,8 +22,8 @@
|
||||
"help_smoke_failed_count": 0,
|
||||
"interactive_script_count": 0,
|
||||
"package_hash_scope": "source-contract-without-generated-reports",
|
||||
"package_hash_file_count": 200,
|
||||
"package_sha256": "7734802eb54b761e419b62d6d7e0d5861aa10401b8e8cf956934e51f9b87ba0d"
|
||||
"package_hash_file_count": 201,
|
||||
"package_sha256": "836b5ebaf4a608a1a89fa84306ab9b4bb7e0555c74b6ca8e572ffb1833cc0f8c"
|
||||
},
|
||||
"failures": [],
|
||||
"warnings": [],
|
||||
@@ -1264,6 +1264,20 @@
|
||||
"network_urls": [],
|
||||
"network_hosts": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_ir_paths.py",
|
||||
"interface": "internal-module",
|
||||
"interface_declared": true,
|
||||
"interface_reason": "Imported by compiler, registry, conformance, and report scripts to locate canonical Skill IR artifacts.",
|
||||
"has_argparse": false,
|
||||
"has_main_guard": false,
|
||||
"uses_input": false,
|
||||
"uses_network": false,
|
||||
"uses_file_write": false,
|
||||
"uses_subprocess": false,
|
||||
"network_urls": [],
|
||||
"network_hosts": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_charts.py",
|
||||
"interface": "internal-module",
|
||||
@@ -1663,7 +1677,7 @@
|
||||
"checked_count": 83,
|
||||
"passed_count": 83,
|
||||
"failed_count": 0,
|
||||
"skipped_count": 30,
|
||||
"skipped_count": 31,
|
||||
"failed_scripts": [],
|
||||
"results": [
|
||||
{
|
||||
@@ -2550,6 +2564,10 @@
|
||||
"path": "scripts/review_viewer_data.py",
|
||||
"reason": "internal module"
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_ir_paths.py",
|
||||
"reason": "internal module"
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_charts.py",
|
||||
"reason": "internal module"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Security Trust Report
|
||||
|
||||
- OK: `True`
|
||||
- Scanned files: `200`
|
||||
- Scripts: `113`
|
||||
- Internal script modules: `30`
|
||||
- Scanned files: `201`
|
||||
- Scripts: `114`
|
||||
- Internal script modules: `31`
|
||||
- Secret findings: `0`
|
||||
- Network-capable scripts: `3`
|
||||
- Network policy covered scripts: `3`
|
||||
@@ -15,8 +15,8 @@
|
||||
- CLI help smoke failures: `0`
|
||||
- Interactive scripts: `0`
|
||||
- Package hash scope: `source-contract-without-generated-reports`
|
||||
- Package hash files: `200`
|
||||
- Package SHA256: `7734802eb54b761e419b62d6d7e0d5861aa10401b8e8cf956934e51f9b87ba0d`
|
||||
- Package hash files: `201`
|
||||
- Package SHA256: `836b5ebaf4a608a1a89fa84306ab9b4bb7e0555c74b6ca8e572ffb1833cc0f8c`
|
||||
|
||||
## Failures
|
||||
|
||||
@@ -149,6 +149,7 @@
|
||||
| scripts/run_output_eval.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
|
||||
| scripts/run_output_execution.py | cli | False | True | True | False | False | True | True | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
|
||||
| scripts/simulate_install.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
|
||||
| scripts/skill_ir_paths.py | internal-module | True | False | False | False | False | False | False | Imported by compiler, registry, conformance, and report scripts to locate canonical Skill IR artifacts. |
|
||||
| scripts/skill_report_charts.py | internal-module | True | False | False | False | False | False | False | Imported by render_skill_overview.py to render inline SVG report charts. |
|
||||
| scripts/skill_report_i18n.py | internal-module | True | False | False | False | False | False | False | Imported by render_skill_overview.py to keep bilingual report copy and fallback rules out of HTML rendering. |
|
||||
| scripts/skill_report_layout.py | internal-module | True | False | False | False | False | False | False | Imported by render_skill_overview.py to keep overview report layout and CSS out of data rendering. |
|
||||
|
||||
@@ -114,16 +114,16 @@ Next move: add real client or installer permission enforcement integration.
|
||||
| Output Eval | `5` cases, with-skill pass rate `100`, baseline pass rate `0`, with file-backed, near-neighbor, boundary coverage, `10` local command-runner execution runs, `0` recorded fixture runs, `0` provider model-executed runs in root release evidence, `10` estimated token counts, provider runner v0 available, `5` blind A/B review pairs, a generated `reports/output_review_decisions.json` template, `0 / 5` reviewer decisions pending, `0` answer keys revealed, and `5` pending answers hidden |
|
||||
| Runtime Conformance | `5 / 5` targets passing |
|
||||
| Target Compiler | `5 / 5` compiled target contracts generated for OpenAI, Claude, generic, Agent Skills compatible, and VS Code / Copilot outputs, including target permission contracts and target-native behavior contracts |
|
||||
| Trust | `0` secret findings, `1` pinned dependency file, `30` declared internal modules, `3 / 3` network-capable scripts covered by bounded host policy, `83 / 83` CLI help smoke checks passing across `113` scripts, source-contract hash scope explicit |
|
||||
| Trust | `0` secret findings, `1` pinned dependency file, `31` declared internal modules, `3 / 3` network-capable scripts covered by bounded host policy, `83 / 83` CLI help smoke checks passing across `114` scripts, source-contract hash scope explicit |
|
||||
| Permission Governance | `3 / 3` required high-permission capabilities approved, `0` missing, `0` invalid, `0` expired |
|
||||
| Runtime Permission Probes | `4 / 4` target adapters probed, `0` native-enforcement adapters, `4` explicit metadata fallbacks, `4` residual risks retained for reviewer visibility |
|
||||
| Skill Atlas | `12` scanned skills, `1` actionable root skill, `1` telemetry report, `0` actionable route collisions, `0` actionable owner gaps, `0` actionable stale skills, `0` actionable drift signals, `24` scoped non-actionable issue signals retained for visibility |
|
||||
| Registry Audit | package metadata generated with version, owner, license, source checksum, archive checksum, Skill IR provenance, and compatibility matrix |
|
||||
| Package Verification | `4 / 4` target adapters present, archive verified, `624` zip entries, `0` failures, `0` warnings |
|
||||
| Install Simulation | archive with `624` entries extracted into a local verification root, entrypoint/manifest/interface loaded, reports present, `4` adapters readable, `12` installer permission checks enforced, `0` permission failures, `0` failures, `0` warnings |
|
||||
| Package Verification | `4 / 4` target adapters present, archive verified, `626` zip entries, `0` failures, `0` warnings |
|
||||
| Install Simulation | archive with `626` entries extracted into a local verification root, entrypoint/manifest/interface loaded, reports present, `4` adapters readable, `12` installer permission checks enforced, `0` permission failures, `0` failures, `0` warnings |
|
||||
| Local Install Sync Preflight | `make sync-local-install` and `make sync-active-install` rebuild the package first, then sync only after install simulation passes with `12` enforced installer permission checks and `0` permission failures |
|
||||
| Upgrade Check | current package declares `minor` over the 1.0.0 baseline, recommended bump is `minor`, and release notes include added targets plus checksum changes |
|
||||
| Adoption Drift | `1` metadata-only review event, `0` adoption samples, adoption `0`, risk band `low`; optional `yao.py` CLI capture, external client `telemetry-emit`, `5` `telemetry-hooks` recipes, Browser/Chrome native messaging host, and validated external JSONL import are available but off by default for reproducible release evidence; raw `reports/telemetry_events.jsonl` is gitignored and blocked from zip packages |
|
||||
| Adoption Drift | `1` metadata-only review event, `1` adoption sample, adoption `100`, risk band `low`; optional `yao.py` CLI capture, external client `telemetry-emit`, `5` `telemetry-hooks` recipes, Browser/Chrome native messaging host, and validated external JSONL import are available but off by default for reproducible release evidence; raw `reports/telemetry_events.jsonl` is gitignored and blocked from zip packages |
|
||||
| Review Waivers | ledger generated; current release has `1` warning gate that still needs reviewer decision or a time-bounded waiver; blockers remain non-waivable in v0, and world-class evidence gaps must be closed with accepted evidence rather than waived as completed |
|
||||
| Review Annotations | ledger generated; current release has `0` reviewer annotations and `0` open annotation blockers |
|
||||
| Review Studio | decision `review`, world-class score `91`, `16` gates, `0` blockers, `3` warnings, `3` review actions, `0` open annotation blockers |
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
"scripts/run_output_eval.py",
|
||||
"scripts/run_output_execution.py",
|
||||
"scripts/simulate_install.py",
|
||||
"scripts/skill_ir_paths.py",
|
||||
"scripts/skill_report_charts.py",
|
||||
"scripts/skill_report_i18n.py",
|
||||
"scripts/skill_report_layout.py",
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
"key": "trust-security",
|
||||
"label": "Trust Security",
|
||||
"status": "pass",
|
||||
"current": "secrets 0; scripts 113; help failures 0",
|
||||
"current": "secrets 0; scripts 114; help failures 0",
|
||||
"target": "Secrets, scripts, dependencies, permissions, and package hash are reviewable",
|
||||
"evidence": [
|
||||
{
|
||||
@@ -285,7 +285,7 @@
|
||||
"key": "registry-distribution",
|
||||
"label": "Registry Distribution",
|
||||
"status": "pass",
|
||||
"current": "zip entries 624; install failures 0; permission failures 0",
|
||||
"current": "zip entries 626; install failures 0; permission failures 0",
|
||||
"target": "Package metadata, archive checksum, package verification, and install simulation pass",
|
||||
"evidence": [
|
||||
{
|
||||
|
||||
@@ -23,11 +23,11 @@ Generated at: `2026-06-16`
|
||||
| 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 25; 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 113; 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 114; 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; installer enforcement 4 | Packaged adapters expose explicit permission metadata, residual risks, and installer enforcement evidence when available | Preserve residual-risk notes until real native enforcement exists. |
|
||||
| Native Permission Enforcement | external-required | native-enforced targets 0; installer-enforced targets 4 | At least one target/client enforces approved permissions at runtime | Integrate a real target-client or external 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 624; 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 626; 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 91 | 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. |
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
"label": "Trust Security",
|
||||
"status": "pass",
|
||||
"objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.",
|
||||
"current": "113 scripts; secrets 0; help failures 0",
|
||||
"current": "114 scripts; secrets 0; help failures 0",
|
||||
"command": "python3 scripts/yao.py trust .",
|
||||
"test": "python3 tests/verify_trust_check.py",
|
||||
"evidence": [
|
||||
@@ -204,7 +204,7 @@
|
||||
"label": "Registry Distribution",
|
||||
"status": "pass",
|
||||
"objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.",
|
||||
"current": "archive entries 624; install failures 0",
|
||||
"current": "archive entries 626; 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": [
|
||||
@@ -613,7 +613,7 @@
|
||||
"label": "Evidence Consistency",
|
||||
"status": "pass",
|
||||
"objective": "Recommended Skill OS 2.0 implementation PR from the upgrade plan.",
|
||||
"current": "33 consistency checks",
|
||||
"current": "34 consistency checks",
|
||||
"command": "make ci-test",
|
||||
"test": "tests/verify_evidence_consistency.py",
|
||||
"evidence": [
|
||||
|
||||
@@ -26,9 +26,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` | 113 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` |
|
||||
| Trust Security | `pass` | 114 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 624; 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 626; 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` | 16 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` |
|
||||
|
||||
@@ -48,7 +48,7 @@ This report maps the Skill OS 2.0 upgrade blueprint to concrete local artifacts,
|
||||
| Registry Package Format | `pass` | registry ok True | `make ci-test` | `tests/verify_registry_audit.py` |
|
||||
| Review Studio 2.0 | `pass` | 16 review gates | `make ci-test` | `tests/verify_review_studio.py` |
|
||||
| Migration V2 Docs | `pass` | migration guide present | `make ci-test` | `docs review` |
|
||||
| Evidence Consistency | `pass` | 33 consistency checks | `make ci-test` | `tests/verify_evidence_consistency.py` |
|
||||
| Evidence Consistency | `pass` | 34 consistency checks | `make ci-test` | `tests/verify_evidence_consistency.py` |
|
||||
|
||||
## Reference Extension Tracks
|
||||
|
||||
|
||||
@@ -70,12 +70,12 @@
|
||||
{
|
||||
"field": "archive_sha256",
|
||||
"from": "",
|
||||
"to": "1727ee08ba08d88ca55122937ec07dabb2a8a515acc5c6e375052554335da296"
|
||||
"to": "ed1bc47c56c8d247bf5dd351bf29201e60471b4785a86e16ae1ede5e71d1582f"
|
||||
},
|
||||
{
|
||||
"field": "package_sha256",
|
||||
"from": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"to": "7734802eb54b761e419b62d6d7e0d5861aa10401b8e8cf956934e51f9b87ba0d"
|
||||
"to": "836b5ebaf4a608a1a89fa84306ab9b4bb7e0555c74b6ca8e572ffb1833cc0f8c"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -10,6 +10,8 @@ try:
|
||||
except ImportError: # pragma: no cover
|
||||
yaml = None
|
||||
|
||||
from skill_ir_paths import find_skill_ir as find_skill_ir_document
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
COMPILER_SCHEMA_VERSION = "1.0"
|
||||
@@ -148,20 +150,7 @@ def read_frontmatter(path: Path) -> dict[str, Any]:
|
||||
|
||||
|
||||
def find_skill_ir(skill_dir: Path, name: str) -> tuple[dict[str, Any], str]:
|
||||
candidates = [
|
||||
skill_dir / "reports" / "skill-ir.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{name}.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{skill_dir.name}.json",
|
||||
]
|
||||
seen: set[Path] = set()
|
||||
for path in candidates:
|
||||
if path in seen:
|
||||
continue
|
||||
seen.add(path)
|
||||
payload = load_json(path)
|
||||
if payload:
|
||||
return payload, display_path(path, skill_dir)
|
||||
return {}, "frontmatter-fallback"
|
||||
return find_skill_ir_document(skill_dir, name, fallback_source="frontmatter-fallback")
|
||||
|
||||
|
||||
def count_list(payload: dict[str, Any], key: str) -> int:
|
||||
|
||||
@@ -7,6 +7,7 @@ from pathlib import Path, PurePosixPath
|
||||
import yaml
|
||||
|
||||
from compile_skill import compile_target_contract
|
||||
from skill_ir_paths import find_skill_ir as find_skill_ir_document
|
||||
|
||||
|
||||
def display_path(path: Path, root: Path) -> str:
|
||||
@@ -48,20 +49,7 @@ def read_interface(skill_dir: Path) -> dict:
|
||||
|
||||
|
||||
def find_skill_ir(skill_dir: Path, name: str) -> tuple[dict, str]:
|
||||
candidates = [
|
||||
skill_dir / "reports" / "skill-ir.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{name}.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{skill_dir.name}.json",
|
||||
]
|
||||
seen = set()
|
||||
for path in candidates:
|
||||
if path in seen:
|
||||
continue
|
||||
seen.add(path)
|
||||
payload = read_json(path)
|
||||
if payload:
|
||||
return payload, display_path(path, skill_dir)
|
||||
return {}, "frontmatter-fallback"
|
||||
return find_skill_ir_document(skill_dir, name, fallback_source="frontmatter-fallback")
|
||||
|
||||
|
||||
def package_name_from_manifest(manifest: dict, skill_dir: Path) -> str:
|
||||
|
||||
@@ -159,7 +159,7 @@ def report_list(skill_dir: Path) -> list[str]:
|
||||
return [rel for rel in KEY_REPORTS if (skill_dir / rel).exists()]
|
||||
|
||||
|
||||
def file_list(skill_dir: Path, folder: str, suffixes: set[str] | None = None, limit: int = 80) -> list[str]:
|
||||
def file_list(skill_dir: Path, folder: str, suffixes: set[str] | None = None, limit: int | None = None) -> list[str]:
|
||||
target = skill_dir / folder
|
||||
if not target.exists():
|
||||
return []
|
||||
@@ -170,7 +170,7 @@ def file_list(skill_dir: Path, folder: str, suffixes: set[str] | None = None, li
|
||||
if suffixes is not None and path.suffix not in suffixes:
|
||||
continue
|
||||
paths.append(str(path.relative_to(skill_dir)))
|
||||
if len(paths) >= limit:
|
||||
if limit is not None and len(paths) >= limit:
|
||||
break
|
||||
return paths
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ try:
|
||||
except ImportError: # pragma: no cover
|
||||
yaml = None
|
||||
|
||||
from skill_ir_paths import find_skill_ir as find_skill_ir_document
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
DEFAULT_REGISTRY_DIR = ROOT / "registry"
|
||||
@@ -73,16 +75,7 @@ def read_frontmatter(path: Path) -> dict[str, Any]:
|
||||
|
||||
|
||||
def find_skill_ir(skill_dir: Path, name: str) -> tuple[dict[str, Any], str]:
|
||||
candidates = [
|
||||
skill_dir / "reports" / "skill-ir.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{name}.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{skill_dir.name}.json",
|
||||
]
|
||||
for path in candidates:
|
||||
payload = load_json(path)
|
||||
if payload:
|
||||
return payload, display_path(path, skill_dir)
|
||||
return {}, "missing"
|
||||
return find_skill_ir_document(skill_dir, name, fallback_source="missing")
|
||||
|
||||
|
||||
def license_id(skill_dir: Path) -> str:
|
||||
|
||||
@@ -8,6 +8,7 @@ from typing import Any
|
||||
|
||||
from evidence_consistency_release import build_release_evidence_flow_check
|
||||
from evidence_consistency_world_class import build_world_class_workflow_check
|
||||
from skill_ir_paths import find_skill_ir_path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
@@ -122,28 +123,6 @@ def rel_path(path: Path, root: Path) -> str:
|
||||
return str(path.resolve())
|
||||
|
||||
|
||||
def canonical_skill_ir_path(skill_dir: Path, skill_name: str) -> str:
|
||||
candidates = [
|
||||
skill_dir / "reports" / "skill-ir.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{skill_name}.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{skill_dir.name}.json",
|
||||
]
|
||||
examples_dir = skill_dir / "skill-ir" / "examples"
|
||||
if examples_dir.exists():
|
||||
for path in sorted(examples_dir.glob("*.json")):
|
||||
if path not in candidates:
|
||||
candidates.append(path)
|
||||
seen: set[Path] = set()
|
||||
for path in candidates:
|
||||
if path in seen:
|
||||
continue
|
||||
seen.add(path)
|
||||
payload, failure = load_json(path)
|
||||
if not failure and payload.get("schema_version"):
|
||||
return rel_path(path, skill_dir)
|
||||
return ""
|
||||
|
||||
|
||||
def nested(payload: dict[str, Any], path: list[str], default: Any = None) -> Any:
|
||||
current: Any = payload
|
||||
for key in path:
|
||||
@@ -368,7 +347,7 @@ def build_report(skill_dir: Path, generated_at: str) -> dict[str, Any]:
|
||||
detail="The benchmark release lock must reflect the generation-time git dirty flag.",
|
||||
)
|
||||
skill_name = str(overview.get("name") or nested(review_studio, ["data", "frontmatter", "name"]) or skill_dir.name)
|
||||
expected_skill_ir_path = canonical_skill_ir_path(skill_dir, skill_name)
|
||||
expected_skill_ir_path = find_skill_ir_path(skill_dir, skill_name, require_schema=True)
|
||||
expected_skill_ir = {
|
||||
"source_path": expected_skill_ir_path,
|
||||
"exists": bool(expected_skill_ir_path and (skill_dir / expected_skill_ir_path).exists()),
|
||||
|
||||
@@ -5,6 +5,8 @@ from pathlib import Path
|
||||
|
||||
import yaml
|
||||
|
||||
from skill_ir_paths import find_skill_ir
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
|
||||
@@ -18,19 +20,7 @@ def load_yaml(path: Path) -> dict:
|
||||
|
||||
|
||||
def find_ir(root: Path) -> tuple[dict, str]:
|
||||
candidates = [
|
||||
root / "reports" / "skill-ir.json",
|
||||
root / "skill-ir" / "examples" / f"{root.name}.json",
|
||||
]
|
||||
examples_dir = root / "skill-ir" / "examples"
|
||||
if examples_dir.exists():
|
||||
for path in sorted(examples_dir.glob("*.json")):
|
||||
if path not in candidates:
|
||||
candidates.append(path)
|
||||
for path in candidates:
|
||||
if path.exists():
|
||||
return load_json(path), str(path.relative_to(root))
|
||||
return {}, "missing"
|
||||
return find_skill_ir(root, root.name, fallback_source="missing")
|
||||
|
||||
|
||||
def band_for(score: int) -> str:
|
||||
|
||||
@@ -5,6 +5,8 @@ import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from skill_ir_paths import find_skill_ir_path as find_skill_ir_path_for_name
|
||||
|
||||
try:
|
||||
import yaml
|
||||
except ImportError: # pragma: no cover
|
||||
@@ -56,34 +58,10 @@ def parse_frontmatter(path: Path) -> dict[str, Any]:
|
||||
return data
|
||||
|
||||
|
||||
def display_path(path: Path, root: Path) -> str:
|
||||
try:
|
||||
return str(path.resolve().relative_to(root.resolve()))
|
||||
except ValueError:
|
||||
return str(path)
|
||||
|
||||
|
||||
def find_skill_ir_path(skill_dir: Path) -> str:
|
||||
frontmatter = parse_frontmatter(skill_dir / "SKILL.md")
|
||||
name = str(frontmatter.get("name") or skill_dir.name)
|
||||
candidates = [
|
||||
skill_dir / "reports" / "skill-ir.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{name}.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{skill_dir.name}.json",
|
||||
]
|
||||
examples_dir = skill_dir / "skill-ir" / "examples"
|
||||
if examples_dir.exists():
|
||||
for path in sorted(examples_dir.glob("*.json")):
|
||||
if path not in candidates:
|
||||
candidates.append(path)
|
||||
seen: set[Path] = set()
|
||||
for path in candidates:
|
||||
if path in seen:
|
||||
continue
|
||||
seen.add(path)
|
||||
if path.exists():
|
||||
return display_path(path, skill_dir)
|
||||
return ""
|
||||
return find_skill_ir_path_for_name(skill_dir, name)
|
||||
|
||||
|
||||
def evidence_paths(skill_dir: Path) -> dict[str, str]:
|
||||
|
||||
@@ -10,6 +10,8 @@ try:
|
||||
except ImportError: # pragma: no cover
|
||||
yaml = None
|
||||
|
||||
from skill_ir_paths import find_skill_ir as find_skill_ir_document
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
DEFAULT_TARGETS = ["openai", "claude", "agent-skills", "vscode", "generic"]
|
||||
@@ -64,10 +66,7 @@ def parse_frontmatter(path: Path) -> tuple[dict[str, Any], str]:
|
||||
|
||||
|
||||
def find_skill_ir(skill_dir: Path, name: str) -> dict[str, Any]:
|
||||
direct = load_json(skill_dir / "reports" / "skill-ir.json")
|
||||
if direct:
|
||||
return direct
|
||||
return load_json(skill_dir / "skill-ir" / "examples" / f"{name}.json")
|
||||
return find_skill_ir_document(skill_dir, name)[0]
|
||||
|
||||
|
||||
def add_check(checks: list[str], failures: list[str], condition: bool, passed: str, failed: str) -> None:
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Shared Skill IR artifact discovery helpers."""
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
SCRIPT_INTERFACE = "internal-module"
|
||||
SCRIPT_INTERFACE_REASON = "Imported by compiler, registry, conformance, and report scripts to locate canonical Skill IR artifacts."
|
||||
|
||||
|
||||
def display_path(path: Path, root: Path) -> str:
|
||||
try:
|
||||
return str(path.resolve().relative_to(root.resolve()))
|
||||
except ValueError:
|
||||
return str(path.resolve())
|
||||
|
||||
|
||||
def candidate_paths(skill_dir: Path, name: str) -> list[Path]:
|
||||
candidates = [
|
||||
skill_dir / "reports" / "skill-ir.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{name}.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{skill_dir.name}.json",
|
||||
]
|
||||
examples_dir = skill_dir / "skill-ir" / "examples"
|
||||
if examples_dir.exists():
|
||||
for path in sorted(examples_dir.glob("*.json")):
|
||||
if path not in candidates:
|
||||
candidates.append(path)
|
||||
seen: set[Path] = set()
|
||||
unique: list[Path] = []
|
||||
for path in candidates:
|
||||
if path in seen:
|
||||
continue
|
||||
seen.add(path)
|
||||
unique.append(path)
|
||||
return unique
|
||||
|
||||
|
||||
def load_json(path: Path) -> dict[str, Any]:
|
||||
if not path.exists():
|
||||
return {}
|
||||
try:
|
||||
payload = json.loads(path.read_text(encoding="utf-8"))
|
||||
except json.JSONDecodeError:
|
||||
return {}
|
||||
return payload if isinstance(payload, dict) else {}
|
||||
|
||||
|
||||
def find_skill_ir_path(skill_dir: Path, name: str, *, require_schema: bool = False, fallback_source: str = "") -> str:
|
||||
for path in candidate_paths(skill_dir, name):
|
||||
payload = load_json(path)
|
||||
if not payload:
|
||||
continue
|
||||
if require_schema and not payload.get("schema_version"):
|
||||
continue
|
||||
return display_path(path, skill_dir)
|
||||
return fallback_source
|
||||
|
||||
|
||||
def find_skill_ir(
|
||||
skill_dir: Path,
|
||||
name: str,
|
||||
*,
|
||||
require_schema: bool = False,
|
||||
fallback_source: str = "",
|
||||
) -> tuple[dict[str, Any], str]:
|
||||
for path in candidate_paths(skill_dir, name):
|
||||
payload = load_json(path)
|
||||
if not payload:
|
||||
continue
|
||||
if require_schema and not payload.get("schema_version"):
|
||||
continue
|
||||
return payload, display_path(path, skill_dir)
|
||||
return {}, fallback_source
|
||||
@@ -4,6 +4,7 @@ import re
|
||||
from datetime import date
|
||||
from pathlib import Path
|
||||
|
||||
from skill_ir_paths import find_skill_ir
|
||||
from skill_report_metrics import calculate_scorecard
|
||||
from skill_report_world_class import world_class_readiness, world_class_roadmap_item
|
||||
|
||||
@@ -84,35 +85,6 @@ def load_json(path: Path) -> dict:
|
||||
return payload if isinstance(payload, dict) else {}
|
||||
|
||||
|
||||
def display_path(path: Path, root: Path) -> str:
|
||||
try:
|
||||
return str(path.resolve().relative_to(root.resolve()))
|
||||
except ValueError:
|
||||
return str(path)
|
||||
|
||||
|
||||
def find_skill_ir(skill_dir: Path, name: str) -> tuple[dict, str]:
|
||||
candidates = [
|
||||
skill_dir / "reports" / "skill-ir.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{name}.json",
|
||||
skill_dir / "skill-ir" / "examples" / f"{skill_dir.name}.json",
|
||||
]
|
||||
examples_dir = skill_dir / "skill-ir" / "examples"
|
||||
if examples_dir.exists():
|
||||
for path in sorted(examples_dir.glob("*.json")):
|
||||
if path not in candidates:
|
||||
candidates.append(path)
|
||||
seen: set[Path] = set()
|
||||
for path in candidates:
|
||||
if path in seen:
|
||||
continue
|
||||
seen.add(path)
|
||||
payload = load_json(path)
|
||||
if payload:
|
||||
return payload, display_path(path, skill_dir)
|
||||
return {}, ""
|
||||
|
||||
|
||||
def extract_title(body: str, fallback: str) -> str:
|
||||
for line in body.splitlines():
|
||||
if line.startswith("# "):
|
||||
|
||||
@@ -112,6 +112,7 @@
|
||||
],
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/apply_adaptation.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
"scripts/build_skill_atlas.py",
|
||||
"scripts/check_update.py",
|
||||
@@ -123,6 +124,8 @@
|
||||
"scripts/cross_packager.py",
|
||||
"scripts/diff_eval.py",
|
||||
"scripts/emit_telemetry_event.py",
|
||||
"scripts/evidence_consistency_release.py",
|
||||
"scripts/evidence_consistency_world_class.py",
|
||||
"scripts/export_skill_ir.py",
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/governance_check.py",
|
||||
@@ -176,6 +179,7 @@
|
||||
"scripts/render_world_class_evidence_ledger.py",
|
||||
"scripts/render_world_class_evidence_plan.py",
|
||||
"scripts/render_world_class_operator_runbook.py",
|
||||
"scripts/render_world_class_preflight.py",
|
||||
"scripts/render_world_class_submission_review.py",
|
||||
"scripts/resource_boundary_check.py",
|
||||
"scripts/review_studio_action_evidence.py",
|
||||
@@ -190,7 +194,37 @@
|
||||
"scripts/review_viewer_data.py",
|
||||
"scripts/run_conformance_suite.py",
|
||||
"scripts/run_description_optimization_suite.py",
|
||||
"scripts/run_eval_suite.py"
|
||||
"scripts/run_eval_suite.py",
|
||||
"scripts/run_output_eval.py",
|
||||
"scripts/run_output_execution.py",
|
||||
"scripts/simulate_install.py",
|
||||
"scripts/skill_ir_paths.py",
|
||||
"scripts/skill_report_charts.py",
|
||||
"scripts/skill_report_i18n.py",
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/skill_report_world_class.py",
|
||||
"scripts/summarize_user_signals.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py",
|
||||
"scripts/trigger_eval.py",
|
||||
"scripts/trust_check.py",
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/world_class_evidence_contract.py",
|
||||
"scripts/world_class_source_checks.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_adaptation_commands.py",
|
||||
"scripts/yao_cli_config.py",
|
||||
"scripts/yao_cli_create_commands.py",
|
||||
"scripts/yao_cli_distribution_commands.py",
|
||||
"scripts/yao_cli_output_commands.py",
|
||||
"scripts/yao_cli_parser.py",
|
||||
"scripts/yao_cli_report_commands.py",
|
||||
"scripts/yao_cli_runtime.py",
|
||||
"scripts/yao_cli_telemetry.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
|
||||
@@ -107,6 +107,7 @@
|
||||
"scripts/run_output_eval.py",
|
||||
"scripts/run_output_execution.py",
|
||||
"scripts/simulate_install.py",
|
||||
"scripts/skill_ir_paths.py",
|
||||
"scripts/skill_report_charts.py",
|
||||
"scripts/skill_report_i18n.py",
|
||||
"scripts/skill_report_layout.py",
|
||||
|
||||
@@ -44,6 +44,13 @@ def main() -> None:
|
||||
assert any("`Governed`" in item for item in payload["workflow"]["decision_points"]), payload["workflow"]["decision_points"]
|
||||
assert payload["resources"]["references"], payload
|
||||
assert payload["resources"]["scripts"], payload
|
||||
expected_scripts = {
|
||||
str(path.relative_to(ROOT))
|
||||
for path in (ROOT / "scripts").rglob("*")
|
||||
if path.is_file() and path.suffix in {".py", ".sh", ".js", ".ts"}
|
||||
}
|
||||
actual_scripts = set(payload["resources"]["scripts"])
|
||||
assert expected_scripts <= actual_scripts, sorted(expected_scripts - actual_scripts)
|
||||
assert payload["resources"]["reports"], payload
|
||||
assert "evals/trigger_cases.json" in payload["eval_plan"]["trigger"], payload["eval_plan"]
|
||||
assert payload["risk"]["trust_boundary"] == "external", payload
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
import shutil
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
sys.path.insert(0, str(ROOT / "scripts"))
|
||||
|
||||
from skill_ir_paths import candidate_paths, find_skill_ir, find_skill_ir_path # noqa: E402
|
||||
|
||||
|
||||
TMP = ROOT / "tests" / "tmp_skill_ir_paths"
|
||||
|
||||
|
||||
def write_json(path: Path, payload: dict) -> None:
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
path.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
shutil.rmtree(TMP, ignore_errors=True)
|
||||
TMP.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
root_ir, root_path = find_skill_ir(ROOT, "yao-meta-skill", require_schema=True)
|
||||
assert root_path == "skill-ir/examples/yao-meta-skill.json", root_path
|
||||
assert root_ir["schema_version"] == "2.0.0", root_ir
|
||||
assert find_skill_ir_path(ROOT, "yao-meta-skill", require_schema=True) == root_path
|
||||
|
||||
preferred = TMP / "reports" / "skill-ir.json"
|
||||
example = TMP / "skill-ir" / "examples" / "demo-skill.json"
|
||||
write_json(preferred, {"schema_version": "2.0.0", "name": "reports-copy"})
|
||||
write_json(example, {"schema_version": "2.0.0", "name": "example-copy"})
|
||||
payload, source = find_skill_ir(TMP, "demo-skill", require_schema=True)
|
||||
assert source == "reports/skill-ir.json", source
|
||||
assert payload["name"] == "reports-copy", payload
|
||||
|
||||
preferred.unlink()
|
||||
payload, source = find_skill_ir(TMP, "demo-skill", require_schema=True)
|
||||
assert source == "skill-ir/examples/demo-skill.json", source
|
||||
assert payload["name"] == "example-copy", payload
|
||||
|
||||
example.unlink()
|
||||
write_json(TMP / "skill-ir" / "examples" / "zzz-extra.json", {"schema_version": "2.0.0", "name": "wildcard"})
|
||||
payload, source = find_skill_ir(TMP, "missing-name", require_schema=True)
|
||||
assert source == "skill-ir/examples/zzz-extra.json", source
|
||||
assert payload["name"] == "wildcard", payload
|
||||
|
||||
(TMP / "skill-ir" / "examples" / "zzz-extra.json").unlink()
|
||||
write_json(TMP / "reports" / "skill-ir.json", {"name": "no-schema"})
|
||||
assert find_skill_ir_path(TMP, "demo-skill", require_schema=True, fallback_source="missing") == "missing"
|
||||
assert find_skill_ir_path(TMP, "demo-skill", require_schema=False) == "reports/skill-ir.json"
|
||||
|
||||
paths = [str(path.relative_to(TMP)) for path in candidate_paths(TMP, "demo-skill")]
|
||||
assert paths[:3] == [
|
||||
"reports/skill-ir.json",
|
||||
"skill-ir/examples/demo-skill.json",
|
||||
"skill-ir/examples/tmp_skill_ir_paths.json",
|
||||
], paths
|
||||
|
||||
print(json.dumps({"ok": True}, ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -93,6 +93,7 @@ def main() -> None:
|
||||
"scripts/review_studio_layout.py",
|
||||
"scripts/evidence_consistency_release.py",
|
||||
"scripts/evidence_consistency_world_class.py",
|
||||
"scripts/skill_ir_paths.py",
|
||||
"scripts/skill_report_charts.py",
|
||||
"scripts/skill_report_i18n.py",
|
||||
"scripts/skill_report_layout.py",
|
||||
@@ -117,6 +118,7 @@ def main() -> None:
|
||||
assert "review_studio_layout.py" not in warning_text, payload["warnings"]
|
||||
assert "evidence_consistency_release.py" not in warning_text, payload["warnings"]
|
||||
assert "evidence_consistency_world_class.py" not in warning_text, payload["warnings"]
|
||||
assert "skill_ir_paths.py" not in warning_text, payload["warnings"]
|
||||
assert "skill_report_charts.py" not in warning_text, payload["warnings"]
|
||||
assert "skill_report_i18n.py" not in warning_text, payload["warnings"]
|
||||
assert "skill_report_layout.py" not in warning_text, payload["warnings"]
|
||||
|
||||
Reference in New Issue
Block a user