feat: add architecture maintainability review gate
This commit is contained in:
@@ -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 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
|
||||
.PHONY: eval eval-suite route-scorecard route-confusion-check description-optimization judge-blind-eval description-optimization-check promotion-check python-compat-check architecture-maintainability-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
|
||||
@@ -31,6 +31,9 @@ promotion-check:
|
||||
python-compat-check:
|
||||
$(PYTHON) tests/verify_python_compat_check.py
|
||||
|
||||
architecture-maintainability-check:
|
||||
$(PYTHON) tests/verify_architecture_maintainability.py
|
||||
|
||||
yao-cli-check:
|
||||
$(PYTHON) tests/verify_yao_cli.py
|
||||
|
||||
@@ -223,11 +226,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 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
|
||||
test: eval eval-suite route-scorecard route-confusion-check description-optimization description-optimization-check promotion-check python-compat-check architecture-maintainability-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_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
|
||||
rm -rf dist tests/tmp tests/tmp_snapshot tests/tmp_cli tests/tmp_python_compat tests/tmp_architecture_maintainability 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 {} +
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
"vscode"
|
||||
],
|
||||
"package_metadata": "registry/packages/yao-meta-skill.json",
|
||||
"package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723"
|
||||
"package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723",
|
||||
"archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2"
|
||||
"package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa",
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7"
|
||||
},
|
||||
"compatibility": {
|
||||
"openai": "pass",
|
||||
@@ -48,7 +48,7 @@
|
||||
},
|
||||
"distribution": {
|
||||
"archive_verified": true,
|
||||
"archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2",
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7",
|
||||
"package_verification": "reports/package_verification.json",
|
||||
"install_simulated": true,
|
||||
"install_simulation": "reports/install_simulation.json"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"schema_version": "2.0",
|
||||
"generated_at": "2026-06-13T17:32:44Z",
|
||||
"generated_at": "2026-06-13T17:49:00Z",
|
||||
"skill_dir": ".",
|
||||
"privacy_contract": {
|
||||
"storage": "local-first",
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"schema_version": "1.0",
|
||||
"ok": true,
|
||||
"generated_at": "2026-06-14",
|
||||
"skill_dir": ".",
|
||||
"summary": {
|
||||
"python_file_count": 139,
|
||||
"script_file_count": 83,
|
||||
"test_file_count": 56,
|
||||
"internal_module_count": 12,
|
||||
"cli_script_count": 72,
|
||||
"command_handler_count": 55,
|
||||
"warn_line_threshold": 900,
|
||||
"block_line_threshold": 1500,
|
||||
"largest_file_lines": 1438,
|
||||
"hotspot_count": 3,
|
||||
"blocker_count": 0,
|
||||
"decision": "watch-maintainability-hotspots"
|
||||
},
|
||||
"largest_files": [
|
||||
{
|
||||
"path": "scripts/yao.py",
|
||||
"lines": 1438,
|
||||
"kind": "cli-script",
|
||||
"severity": "warn",
|
||||
"recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_review_studio.py",
|
||||
"lines": 1196,
|
||||
"kind": "cli-script",
|
||||
"severity": "warn",
|
||||
"recommendation": "Move data loading and large section renderers into focused review_studio_* modules."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_review_viewer.py",
|
||||
"lines": 983,
|
||||
"kind": "cli-script",
|
||||
"severity": "warn",
|
||||
"recommendation": "Split viewer data assembly from HTML section rendering."
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_yao_cli.py",
|
||||
"lines": 833,
|
||||
"kind": "test",
|
||||
"severity": "pass",
|
||||
"recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_model.py",
|
||||
"lines": 782,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/compile_skill.py",
|
||||
"lines": 734,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/optimize_description.py",
|
||||
"lines": 723,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/trust_check.py",
|
||||
"lines": 714,
|
||||
"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": 691,
|
||||
"kind": "internal-module",
|
||||
"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": 674,
|
||||
"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_layout.py",
|
||||
"lines": 653,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_reference_synthesis.py",
|
||||
"lines": 644,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
}
|
||||
],
|
||||
"hotspots": [
|
||||
{
|
||||
"path": "scripts/yao.py",
|
||||
"lines": 1438,
|
||||
"kind": "cli-script",
|
||||
"severity": "warn",
|
||||
"recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_review_studio.py",
|
||||
"lines": 1196,
|
||||
"kind": "cli-script",
|
||||
"severity": "warn",
|
||||
"recommendation": "Move data loading and large section renderers into focused review_studio_* modules."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_review_viewer.py",
|
||||
"lines": 983,
|
||||
"kind": "cli-script",
|
||||
"severity": "warn",
|
||||
"recommendation": "Split viewer data assembly from HTML section rendering."
|
||||
}
|
||||
],
|
||||
"actions": [
|
||||
{
|
||||
"path": "scripts/yao.py",
|
||||
"severity": "warn",
|
||||
"action": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_review_studio.py",
|
||||
"severity": "warn",
|
||||
"action": "Move data loading and large section renderers into focused review_studio_* modules."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_review_viewer.py",
|
||||
"severity": "warn",
|
||||
"action": "Split viewer data assembly from HTML section rendering."
|
||||
}
|
||||
],
|
||||
"artifacts": {
|
||||
"json": "reports/architecture_maintainability.json",
|
||||
"markdown": "reports/architecture_maintainability.md"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
# Architecture Maintainability
|
||||
|
||||
Generated at: `2026-06-14`
|
||||
|
||||
## Summary
|
||||
|
||||
- decision: `watch-maintainability-hotspots`
|
||||
- python files: `139`
|
||||
- scripts: `83`
|
||||
- tests: `56`
|
||||
- internal modules: `12`
|
||||
- CLI scripts: `72`
|
||||
- Yao CLI command handlers: `55`
|
||||
- largest file lines: `1438`
|
||||
- hotspots: `3`
|
||||
- blockers: `0`
|
||||
|
||||
This report keeps maintainability risk visible before the Meta Skill grows more gates, renderers, and CLI commands.
|
||||
|
||||
## Hotspots
|
||||
|
||||
| File | Lines | Kind | Severity | Recommended action |
|
||||
| --- | ---: | --- | --- | --- |
|
||||
| `scripts/yao.py` | `1438` | `cli-script` | `warn` | Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator. |
|
||||
| `scripts/render_review_studio.py` | `1196` | `cli-script` | `warn` | Move data loading and large section renderers into focused review_studio_* modules. |
|
||||
| `scripts/render_review_viewer.py` | `983` | `cli-script` | `warn` | Split viewer data assembly from HTML section rendering. |
|
||||
|
||||
## Largest Files
|
||||
|
||||
| File | Lines | Kind | Severity |
|
||||
| --- | ---: | --- | --- |
|
||||
| `scripts/yao.py` | `1438` | `cli-script` | `warn` |
|
||||
| `scripts/render_review_studio.py` | `1196` | `cli-script` | `warn` |
|
||||
| `scripts/render_review_viewer.py` | `983` | `cli-script` | `warn` |
|
||||
| `tests/verify_yao_cli.py` | `833` | `test` | `pass` |
|
||||
| `scripts/skill_report_model.py` | `782` | `internal-module` | `pass` |
|
||||
| `scripts/compile_skill.py` | `734` | `cli-script` | `pass` |
|
||||
| `scripts/optimize_description.py` | `723` | `cli-script` | `pass` |
|
||||
| `scripts/trust_check.py` | `714` | `internal-module` | `pass` |
|
||||
| `scripts/yao_cli_parser.py` | `691` | `internal-module` | `pass` |
|
||||
| `scripts/build_skill_atlas.py` | `674` | `cli-script` | `pass` |
|
||||
| `scripts/skill_report_layout.py` | `653` | `internal-module` | `pass` |
|
||||
| `scripts/render_reference_synthesis.py` | `644` | `cli-script` | `pass` |
|
||||
|
||||
## Release Rule
|
||||
|
||||
- `block` hotspots should be split before governed release.
|
||||
- `warn` hotspots can ship only when Review Studio keeps them visible and a reviewer accepts the modularization plan.
|
||||
- Do not split a file only for line count; split when a stable responsibility boundary is clear.
|
||||
@@ -3,12 +3,13 @@
|
||||
"ok": true,
|
||||
"generated_at": "2026-06-14",
|
||||
"skill_dir": ".",
|
||||
"commit": "4737358f3c7acb6650d5463793e5f0e8f913aada",
|
||||
"commit": "ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d",
|
||||
"git_status": {
|
||||
"available": true,
|
||||
"dirty": true,
|
||||
"changed_file_count": 30,
|
||||
"changed_file_count": 44,
|
||||
"sample": [
|
||||
" M Makefile",
|
||||
" M registry/index.json",
|
||||
" M registry/packages/yao-meta-skill.json",
|
||||
" M reports/adoption_drift_report.json",
|
||||
@@ -16,11 +17,10 @@
|
||||
" 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/package_verification.json"
|
||||
]
|
||||
},
|
||||
"summary": {
|
||||
@@ -42,7 +42,7 @@
|
||||
"world_class_task_count": 4,
|
||||
"world_class_ledger_pending_count": 4,
|
||||
"working_tree_dirty": true,
|
||||
"changed_file_count": 30
|
||||
"changed_file_count": 44
|
||||
},
|
||||
"methodology": {
|
||||
"path": "reports/benchmark_methodology.md",
|
||||
@@ -116,7 +116,7 @@
|
||||
"path": "reports/output_execution_runs.json",
|
||||
"exists": true,
|
||||
"bytes": 7967,
|
||||
"sha256": "cd6de0ee193725d03c3e16b3b116eda21ee2db71d830505de50da4c3624c8f3e"
|
||||
"sha256": "1c204ff667b83e4635c792e2ea387865af24dd3191147f24f22f69ceaff968b5"
|
||||
},
|
||||
{
|
||||
"label": "blind_review",
|
||||
@@ -150,43 +150,43 @@
|
||||
"label": "trust_report",
|
||||
"path": "reports/security_trust_report.json",
|
||||
"exists": true,
|
||||
"bytes": 87272,
|
||||
"sha256": "3cbe50361df9b509477ee70f27da9fc4e95462d588b1e7b71ba31da8e9f75d7b"
|
||||
"bytes": 88376,
|
||||
"sha256": "c846881bdb45e47b6f7c576e9c0e58cc157d7fd2f358ba710fbf92e9564d89fd"
|
||||
},
|
||||
{
|
||||
"label": "python_compatibility",
|
||||
"path": "reports/python_compatibility.json",
|
||||
"exists": true,
|
||||
"bytes": 18283,
|
||||
"sha256": "435dabcd3ce01fc90fc01f1b359e5063e1ff468eec8ae38daeb05116edc5d08f"
|
||||
"bytes": 18557,
|
||||
"sha256": "29fd6618afda3e74452262ed5c0ebd03d585495bb08aeac08d6341c4aa3be54c"
|
||||
},
|
||||
{
|
||||
"label": "registry_audit",
|
||||
"path": "reports/registry_audit.json",
|
||||
"exists": true,
|
||||
"bytes": 3183,
|
||||
"sha256": "d293ac8472d4c16f32f77cecb735d7c32f5a0bf9a409f43006c74b7d826de34b"
|
||||
"sha256": "729094faff9d20fec82ea1a481332389b3104a6e37bfe87b20cd4dfc833c7d80"
|
||||
},
|
||||
{
|
||||
"label": "package_verification",
|
||||
"path": "reports/package_verification.json",
|
||||
"exists": true,
|
||||
"bytes": 19325,
|
||||
"sha256": "bef665206e2f6ca0e998caa941fc6ffe75cf782036945595d743f83f156fc04f"
|
||||
"sha256": "5f45e45cc28c43693f702228587a82a9246a35df09f95046e3d111dd5f48897c"
|
||||
},
|
||||
{
|
||||
"label": "install_simulation",
|
||||
"path": "reports/install_simulation.json",
|
||||
"exists": true,
|
||||
"bytes": 8557,
|
||||
"sha256": "2bb990fc21986c840309a8ca118612ba27baa7538fd426538ab7955ea9bebb57"
|
||||
"sha256": "c0ffaaded1898df656415208722157213bb364200d8834d9d21812d574e7b269"
|
||||
},
|
||||
{
|
||||
"label": "skill_os2_audit",
|
||||
"path": "reports/skill_os2_audit.json",
|
||||
"exists": true,
|
||||
"bytes": 13946,
|
||||
"sha256": "ef085ddc8a1e23ddda43d41adde62b50e6b1988842b232019c28a2e29b1d807a"
|
||||
"sha256": "80ef52f1775e85d6b96643cbebe99f21a0f04d86af6e38a4f1901e3b5511a235"
|
||||
},
|
||||
{
|
||||
"label": "world_class_evidence_plan",
|
||||
@@ -213,8 +213,8 @@
|
||||
"label": "world_class_claim_guard",
|
||||
"path": "reports/world_class_claim_guard.json",
|
||||
"exists": true,
|
||||
"bytes": 7898,
|
||||
"sha256": "63628e78d1d2967928b86f73faa133ddc7d712499ffb5dd1d7947b2c070f3899"
|
||||
"bytes": 7995,
|
||||
"sha256": "608c954d1af917a0e062d90d976a157a44a578e1137e3759209be90c100fecc2"
|
||||
}
|
||||
],
|
||||
"missing_artifacts": [],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Benchmark Reproducibility
|
||||
|
||||
Generated at: `2026-06-14`
|
||||
Commit: `4737358f3c7acb6650d5463793e5f0e8f913aada`
|
||||
Commit: `ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d`
|
||||
Working tree dirty at generation: `true`
|
||||
|
||||
## Summary
|
||||
@@ -16,7 +16,7 @@ Working tree dirty at generation: `true`
|
||||
- provider evidence complete: `false`
|
||||
- human review complete: `false`
|
||||
- world-class ready: `false`
|
||||
- changed files at generation: `30`
|
||||
- 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,21 +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 | `cd6de0ee1937` |
|
||||
| output_execution | `reports/output_execution_runs.json` | present | `1c204ff667b8` |
|
||||
| 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 | `3cbe50361df9` |
|
||||
| python_compatibility | `reports/python_compatibility.json` | present | `435dabcd3ce0` |
|
||||
| registry_audit | `reports/registry_audit.json` | present | `d293ac8472d4` |
|
||||
| package_verification | `reports/package_verification.json` | present | `bef665206e2f` |
|
||||
| install_simulation | `reports/install_simulation.json` | present | `2bb990fc2198` |
|
||||
| skill_os2_audit | `reports/skill_os2_audit.json` | present | `ef085ddc8a1e` |
|
||||
| trust_report | `reports/security_trust_report.json` | present | `c846881bdb45` |
|
||||
| python_compatibility | `reports/python_compatibility.json` | present | `29fd6618afda` |
|
||||
| registry_audit | `reports/registry_audit.json` | present | `729094faff9d` |
|
||||
| package_verification | `reports/package_verification.json` | present | `5f45e45cc28c` |
|
||||
| install_simulation | `reports/install_simulation.json` | present | `c0ffaaded189` |
|
||||
| skill_os2_audit | `reports/skill_os2_audit.json` | present | `80ef52f1775e` |
|
||||
| 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 | `63628e78d1d2` |
|
||||
| world_class_claim_guard | `reports/world_class_claim_guard.json` | present | `608c954d1af9` |
|
||||
|
||||
## Reproduction Commands
|
||||
|
||||
|
||||
@@ -172,6 +172,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -223,8 +224,7 @@
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_config.py"
|
||||
"scripts/yao.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -383,7 +383,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 59,
|
||||
"script_count": 60,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -404,6 +404,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -481,14 +482,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 72,
|
||||
"checked_count": 73,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"subprocess_script_count": 8,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -510,7 +511,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 59,
|
||||
"file_write": 60,
|
||||
"subprocess": 8,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -623,7 +624,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 59,
|
||||
"script_count": 60,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -644,6 +645,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -721,14 +723,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 72,
|
||||
"checked_count": 73,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"subprocess_script_count": 8,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -748,7 +750,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 59,
|
||||
"file_write": 60,
|
||||
"subprocess": 8,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -1009,6 +1011,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -1060,8 +1063,7 @@
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_config.py"
|
||||
"scripts/yao.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -1220,7 +1222,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 59,
|
||||
"script_count": 60,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -1241,6 +1243,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -1318,14 +1321,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 72,
|
||||
"checked_count": 73,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"subprocess_script_count": 8,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -1347,7 +1350,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 59,
|
||||
"file_write": 60,
|
||||
"subprocess": 8,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -1460,7 +1463,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 59,
|
||||
"script_count": 60,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -1481,6 +1484,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -1558,14 +1562,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 72,
|
||||
"checked_count": 73,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"subprocess_script_count": 8,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -1585,7 +1589,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 59,
|
||||
"file_write": 60,
|
||||
"subprocess": 8,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -1846,6 +1850,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -1897,8 +1902,7 @@
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_config.py"
|
||||
"scripts/yao.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -2057,7 +2061,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 59,
|
||||
"script_count": 60,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -2078,6 +2082,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -2155,14 +2160,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 72,
|
||||
"checked_count": 73,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"subprocess_script_count": 8,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -2184,7 +2189,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 59,
|
||||
"file_write": 60,
|
||||
"subprocess": 8,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -2290,7 +2295,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 59,
|
||||
"script_count": 60,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -2311,6 +2316,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -2388,14 +2394,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 72,
|
||||
"checked_count": 73,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"subprocess_script_count": 8,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -2415,7 +2421,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 59,
|
||||
"file_write": 60,
|
||||
"subprocess": 8,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -2667,6 +2673,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -2718,8 +2725,7 @@
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_config.py"
|
||||
"scripts/yao.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -2878,7 +2884,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 59,
|
||||
"script_count": 60,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -2899,6 +2905,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -2976,14 +2983,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 72,
|
||||
"checked_count": 73,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"subprocess_script_count": 8,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -3005,7 +3012,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 59,
|
||||
"file_write": 60,
|
||||
"subprocess": 8,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -3111,7 +3118,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 59,
|
||||
"script_count": 60,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -3132,6 +3139,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -3209,14 +3217,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 72,
|
||||
"checked_count": 73,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"subprocess_script_count": 8,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -3236,7 +3244,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 59,
|
||||
"file_write": 60,
|
||||
"subprocess": 8,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -3488,6 +3496,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -3539,8 +3548,7 @@
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_config.py"
|
||||
"scripts/yao.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -3699,7 +3707,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 59,
|
||||
"script_count": 60,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -3720,6 +3728,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -3797,14 +3806,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 72,
|
||||
"checked_count": 73,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"subprocess_script_count": 8,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -3826,7 +3835,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 59,
|
||||
"file_write": 60,
|
||||
"subprocess": 8,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -3936,7 +3945,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 59,
|
||||
"script_count": 60,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -3957,6 +3966,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -4034,14 +4044,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 72,
|
||||
"checked_count": 73,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"subprocess_script_count": 8,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -4061,7 +4071,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 59,
|
||||
"file_write": 60,
|
||||
"subprocess": 8,
|
||||
"interactive": 0
|
||||
},
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
"context_budget_tier": "production",
|
||||
"context_budget_limit": 1000,
|
||||
"skill_body_tokens": 751,
|
||||
"other_text_tokens": 1073524,
|
||||
"other_text_tokens": 1081013,
|
||||
"estimated_initial_load_tokens": 944,
|
||||
"estimated_total_text_tokens": 1074275,
|
||||
"relevant_file_count": 461,
|
||||
"estimated_total_text_tokens": 1081764,
|
||||
"relevant_file_count": 465,
|
||||
"unused_resource_dirs": [],
|
||||
"quality_signal_points": 130,
|
||||
"quality_density": 137.7
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"installed_skill_dir": "[temporary-install-root]/yao-meta-skill",
|
||||
"summary": {
|
||||
"archive_present": true,
|
||||
"archive_entry_count": 547,
|
||||
"archive_entry_count": 551,
|
||||
"archive_extracted": true,
|
||||
"entrypoint_loaded": true,
|
||||
"manifest_loaded": true,
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.31,
|
||||
"duration_ms": 25.63,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -85,7 +85,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.31,
|
||||
"duration_ms": 25.52,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -113,7 +113,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.65,
|
||||
"duration_ms": 27.26,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -136,7 +136,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.46,
|
||||
"duration_ms": 29.55,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -164,7 +164,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.46,
|
||||
"duration_ms": 29.51,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -187,7 +187,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.63,
|
||||
"duration_ms": 29.52,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -214,7 +214,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.51,
|
||||
"duration_ms": 29.37,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -237,7 +237,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.72,
|
||||
"duration_ms": 29.31,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -266,7 +266,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.64,
|
||||
"duration_ms": 29.01,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
|
||||
@@ -24,15 +24,15 @@ 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 | 25.92 | 33 | 0.0 | pass |
|
||||
| skill-package-contract | with_skill | command | local-output-eval-runner | 25.31 | 73 | 100.0 | pass |
|
||||
| output-eval-expectation | baseline | command | local-output-eval-runner | 25.31 | 36 | 0.0 | pass |
|
||||
| output-eval-expectation | with_skill | command | local-output-eval-runner | 25.65 | 80 | 100.0 | pass |
|
||||
| ir-before-packaging | baseline | command | local-output-eval-runner | 25.46 | 33 | 0.0 | pass |
|
||||
| ir-before-packaging | with_skill | command | local-output-eval-runner | 25.46 | 80 | 100.0 | pass |
|
||||
| near-neighbor-boundary | baseline | command | local-output-eval-runner | 25.63 | 36 | 0.0 | pass |
|
||||
| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 25.51 | 65 | 100.0 | pass |
|
||||
| file-backed-governed-package | baseline | command | local-output-eval-runner | 25.72 | 37 | 0.0 | pass |
|
||||
| file-backed-governed-package | with_skill | command | local-output-eval-runner | 25.64 | 98 | 100.0 | pass |
|
||||
| skill-package-contract | with_skill | command | local-output-eval-runner | 25.63 | 73 | 100.0 | pass |
|
||||
| output-eval-expectation | baseline | command | local-output-eval-runner | 25.52 | 36 | 0.0 | pass |
|
||||
| output-eval-expectation | with_skill | command | local-output-eval-runner | 27.26 | 80 | 100.0 | pass |
|
||||
| ir-before-packaging | baseline | command | local-output-eval-runner | 29.55 | 33 | 0.0 | pass |
|
||||
| ir-before-packaging | with_skill | command | local-output-eval-runner | 29.51 | 80 | 100.0 | pass |
|
||||
| near-neighbor-boundary | baseline | command | local-output-eval-runner | 29.52 | 36 | 0.0 | pass |
|
||||
| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 29.37 | 65 | 100.0 | pass |
|
||||
| file-backed-governed-package | baseline | command | local-output-eval-runner | 29.31 | 37 | 0.0 | pass |
|
||||
| file-backed-governed-package | with_skill | command | local-output-eval-runner | 29.01 | 98 | 100.0 | pass |
|
||||
|
||||
## Next Fixes
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
"target_count": 4,
|
||||
"adapter_count": 4,
|
||||
"archive_present": true,
|
||||
"archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2",
|
||||
"archive_entry_count": 547,
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7",
|
||||
"archive_entry_count": 551,
|
||||
"failure_count": 0,
|
||||
"warning_count": 0
|
||||
},
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
- Package directory: `dist`
|
||||
- Targets: `4 / 4` adapters present
|
||||
- Archive present: `True`
|
||||
- Archive SHA256: `d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2`
|
||||
- Archive SHA256: `b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7`
|
||||
- Failures: `0`
|
||||
- Warnings: `0`
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"root": ".",
|
||||
"summary": {
|
||||
"target_python": "3.11",
|
||||
"file_count": 140,
|
||||
"file_count": 142,
|
||||
"issue_count": 0,
|
||||
"syntax_error_count": 0,
|
||||
"fstring_311_violation_count": 0,
|
||||
@@ -202,6 +202,12 @@
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_architecture_maintainability.py",
|
||||
"ok": true,
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_artifact_design_profile.py",
|
||||
"ok": true,
|
||||
@@ -544,6 +550,12 @@
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_architecture_maintainability.py",
|
||||
"ok": true,
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_artifact_design_profile.py",
|
||||
"ok": true,
|
||||
|
||||
@@ -6,7 +6,7 @@ Generated at: `2026-06-14`
|
||||
|
||||
- decision: `pass`
|
||||
- target python: `3.11`
|
||||
- files scanned: `140`
|
||||
- files scanned: `142`
|
||||
- issues: `0`
|
||||
- syntax errors: `0`
|
||||
- f-string 3.11 violations: `0`
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723",
|
||||
"archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2"
|
||||
"package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa",
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7"
|
||||
},
|
||||
"compatibility": {
|
||||
"openai": "pass",
|
||||
@@ -53,7 +53,7 @@
|
||||
},
|
||||
"distribution": {
|
||||
"archive_verified": true,
|
||||
"archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2",
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7",
|
||||
"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": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723"
|
||||
"package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
- Maturity: `governed`
|
||||
- Owner: `Yao Team`
|
||||
- License: `MIT`
|
||||
- Package SHA256: `e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723`
|
||||
- Archive SHA256: `d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2`
|
||||
- Package SHA256: `1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa`
|
||||
- Archive SHA256: `b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7`
|
||||
- Install simulated: `True`
|
||||
|
||||
## Compatibility
|
||||
|
||||
+12
-12
File diff suppressed because one or more lines are too long
+365
-100
File diff suppressed because it is too large
Load Diff
+23
-23
@@ -437,7 +437,7 @@
|
||||
"path": "scripts",
|
||||
"label": "Deterministic helpers or local tooling",
|
||||
"kind": "folder",
|
||||
"file_count": 82
|
||||
"file_count": 83
|
||||
},
|
||||
{
|
||||
"path": "evals",
|
||||
@@ -449,10 +449,10 @@
|
||||
"path": "reports",
|
||||
"label": "Generated evidence and overview artifacts",
|
||||
"kind": "folder",
|
||||
"file_count": 193
|
||||
"file_count": 195
|
||||
}
|
||||
],
|
||||
"file_count": 339,
|
||||
"file_count": 342,
|
||||
"folder_count": 4,
|
||||
"distribution": [
|
||||
{
|
||||
@@ -477,7 +477,7 @@
|
||||
},
|
||||
{
|
||||
"label": "scripts",
|
||||
"value": 82
|
||||
"value": 83
|
||||
},
|
||||
{
|
||||
"label": "evals",
|
||||
@@ -485,7 +485,7 @@
|
||||
},
|
||||
{
|
||||
"label": "reports",
|
||||
"value": 193
|
||||
"value": 195
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -606,7 +606,7 @@
|
||||
"path": "scripts",
|
||||
"label": "Deterministic helpers or local tooling",
|
||||
"kind": "folder",
|
||||
"file_count": 82
|
||||
"file_count": 83
|
||||
},
|
||||
{
|
||||
"path": "evals",
|
||||
@@ -618,7 +618,7 @@
|
||||
"path": "reports",
|
||||
"label": "Generated evidence and overview artifacts",
|
||||
"kind": "folder",
|
||||
"file_count": 193
|
||||
"file_count": 195
|
||||
}
|
||||
],
|
||||
"strengths": [
|
||||
@@ -906,9 +906,9 @@
|
||||
"world_class_task_count": 4,
|
||||
"world_class_ledger_pending_count": 4,
|
||||
"working_tree_dirty": true,
|
||||
"changed_file_count": 35
|
||||
"changed_file_count": 44
|
||||
},
|
||||
"commit": "4737358f3c7acb6650d5463793e5f0e8f913aada",
|
||||
"commit": "ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d",
|
||||
"missing_artifacts": [],
|
||||
"limitations": [
|
||||
"Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.",
|
||||
@@ -983,8 +983,8 @@
|
||||
"failures": []
|
||||
},
|
||||
"trust_security": {
|
||||
"scanned_files": 166,
|
||||
"script_count": 82,
|
||||
"scanned_files": 167,
|
||||
"script_count": 83,
|
||||
"internal_module_count": 10,
|
||||
"secret_findings": 0,
|
||||
"dependency_files": [
|
||||
@@ -993,18 +993,18 @@
|
||||
"network_script_count": 3,
|
||||
"network_policy_covered_count": 3,
|
||||
"network_policy_missing_count": 0,
|
||||
"file_write_script_count": 59,
|
||||
"file_write_script_count": 60,
|
||||
"permission_required_count": 3,
|
||||
"permission_approved_count": 3,
|
||||
"permission_missing_count": 0,
|
||||
"permission_invalid_count": 0,
|
||||
"permission_expired_count": 0,
|
||||
"help_smoke_checked_count": 72,
|
||||
"help_smoke_checked_count": 73,
|
||||
"help_smoke_failed_count": 0,
|
||||
"interactive_script_count": 0,
|
||||
"package_hash_scope": "source-contract-without-generated-reports",
|
||||
"package_hash_file_count": 166,
|
||||
"package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723"
|
||||
"package_hash_file_count": 167,
|
||||
"package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa"
|
||||
},
|
||||
"skill_atlas": {
|
||||
"skill_count": 12,
|
||||
@@ -1042,8 +1042,8 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723",
|
||||
"archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2"
|
||||
"package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa",
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7"
|
||||
},
|
||||
"compatibility": {
|
||||
"openai": "pass",
|
||||
@@ -1074,7 +1074,7 @@
|
||||
},
|
||||
"distribution": {
|
||||
"archive_verified": true,
|
||||
"archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2",
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7",
|
||||
"package_verification": "reports/package_verification.json",
|
||||
"install_simulated": true,
|
||||
"install_simulation": "reports/install_simulation.json"
|
||||
@@ -1090,8 +1090,8 @@
|
||||
"target_count": 4,
|
||||
"adapter_count": 4,
|
||||
"archive_present": true,
|
||||
"archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2",
|
||||
"archive_entry_count": 547,
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7",
|
||||
"archive_entry_count": 551,
|
||||
"failure_count": 0,
|
||||
"warning_count": 0
|
||||
},
|
||||
@@ -1102,7 +1102,7 @@
|
||||
"ok": true,
|
||||
"summary": {
|
||||
"archive_present": true,
|
||||
"archive_entry_count": 547,
|
||||
"archive_entry_count": 551,
|
||||
"archive_extracted": true,
|
||||
"entrypoint_loaded": true,
|
||||
"manifest_loaded": true,
|
||||
@@ -1169,12 +1169,12 @@
|
||||
{
|
||||
"field": "archive_sha256",
|
||||
"from": "",
|
||||
"to": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2"
|
||||
"to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7"
|
||||
},
|
||||
{
|
||||
"field": "package_sha256",
|
||||
"from": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"to": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723"
|
||||
"to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"ok": true,
|
||||
"skill_dir": ".",
|
||||
"summary": {
|
||||
"scanned_files": 166,
|
||||
"script_count": 82,
|
||||
"scanned_files": 167,
|
||||
"script_count": 83,
|
||||
"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": 59,
|
||||
"file_write_script_count": 60,
|
||||
"permission_required_count": 3,
|
||||
"permission_approved_count": 3,
|
||||
"permission_missing_count": 0,
|
||||
"permission_invalid_count": 0,
|
||||
"permission_expired_count": 0,
|
||||
"help_smoke_checked_count": 72,
|
||||
"help_smoke_checked_count": 73,
|
||||
"help_smoke_failed_count": 0,
|
||||
"interactive_script_count": 0,
|
||||
"package_hash_scope": "source-contract-without-generated-reports",
|
||||
"package_hash_file_count": 166,
|
||||
"package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723"
|
||||
"package_hash_file_count": 167,
|
||||
"package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa"
|
||||
},
|
||||
"failures": [],
|
||||
"warnings": [],
|
||||
@@ -420,6 +420,20 @@
|
||||
"network_urls": [],
|
||||
"network_hosts": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_architecture_maintainability.py",
|
||||
"interface": "cli",
|
||||
"interface_declared": false,
|
||||
"interface_reason": "Default CLI classification; add SCRIPT_INTERFACE for internal modules.",
|
||||
"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/render_artifact_design_profile.py",
|
||||
"interface": "cli",
|
||||
@@ -1225,9 +1239,9 @@
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"timeout_seconds": 5.0,
|
||||
"candidate_count": 72,
|
||||
"checked_count": 72,
|
||||
"passed_count": 72,
|
||||
"candidate_count": 73,
|
||||
"checked_count": 73,
|
||||
"passed_count": 73,
|
||||
"failed_count": 0,
|
||||
"skipped_count": 10,
|
||||
"failed_scripts": [],
|
||||
@@ -1502,6 +1516,16 @@
|
||||
"stdout_excerpt": "usage: render_adoption_drift_report.py [-h] [--events-jsonl EVENTS_JSONL]\n [--output-json OUTPUT_JSON]\n [--output-md OUTPUT_MD]\n ",
|
||||
"stderr_excerpt": ""
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_architecture_maintainability.py",
|
||||
"command": "python3 scripts/render_architecture_maintainability.py --help",
|
||||
"returncode": 0,
|
||||
"timed_out": false,
|
||||
"passed": true,
|
||||
"has_help_text": true,
|
||||
"stdout_excerpt": "usage: render_architecture_maintainability.py [-h] [--output-json OUTPUT_JSON]\n [--output-md OUTPUT_MD]\n [--warn-lines WARN_LINES]\n ",
|
||||
"stderr_excerpt": ""
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_artifact_design_profile.py",
|
||||
"command": "python3 scripts/render_artifact_design_profile.py --help",
|
||||
@@ -1949,7 +1973,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,python-compat,review,release-snapsho",
|
||||
"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,architecture-audit,rev",
|
||||
"stderr_excerpt": ""
|
||||
}
|
||||
],
|
||||
@@ -2067,6 +2091,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
# Security Trust Report
|
||||
|
||||
- OK: `True`
|
||||
- Scanned files: `166`
|
||||
- Scripts: `82`
|
||||
- Scanned files: `167`
|
||||
- Scripts: `83`
|
||||
- Internal script modules: `10`
|
||||
- Secret findings: `0`
|
||||
- Network-capable scripts: `3`
|
||||
- Network policy covered scripts: `3`
|
||||
- Network policy missing scripts: `0`
|
||||
- File-write scripts: `59`
|
||||
- File-write scripts: `60`
|
||||
- Permission approvals: `3 / 3`
|
||||
- Permission approval gaps: `0`
|
||||
- CLI help smoke checked: `72`
|
||||
- CLI help smoke checked: `73`
|
||||
- CLI help smoke failures: `0`
|
||||
- Interactive scripts: `0`
|
||||
- Package hash scope: `source-contract-without-generated-reports`
|
||||
- Package hash files: `166`
|
||||
- Package SHA256: `e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723`
|
||||
- Package hash files: `167`
|
||||
- Package SHA256: `1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa`
|
||||
|
||||
## Failures
|
||||
|
||||
@@ -54,8 +54,8 @@
|
||||
|
||||
- Enabled: `True`
|
||||
- Timeout seconds: `5.0`
|
||||
- Checked scripts: `72`
|
||||
- Passed scripts: `72`
|
||||
- Checked scripts: `73`
|
||||
- Passed scripts: `73`
|
||||
- Failed scripts: `none`
|
||||
|
||||
## Script Surface
|
||||
@@ -89,6 +89,7 @@
|
||||
| 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_architecture_maintainability.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. |
|
||||
| scripts/render_baseline_compare.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
|
||||
| scripts/render_benchmark_reproducibility.py | cli | True | True | True | False | False | True | True | Renders a release-facing benchmark reproducibility manifest and Markdown report. |
|
||||
|
||||
@@ -771,7 +771,7 @@
|
||||
<p><span data-lang="zh-CN">让 reviewer 快速确认关键文件、目录和资产分布。</span><span data-lang="en">Lets reviewers confirm key files, directories, and asset distribution quickly.</span></p>
|
||||
</div>
|
||||
<div class="two-col">
|
||||
<figure class="chart-figure" data-chart="asset_donut"><svg viewBox="0 0 430 270" role="img" aria-label="资产分布"><text x="20" y="30" class="chart-title">资产分布</text><circle cx="130" cy="130" r="70" fill="none" stroke="#1B365D" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="0.0" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#2D5A8A" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-0.8" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#D0DCE9" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-1.7" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#E4ECF5" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-2.5" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#e8e6dc" stroke-width="24" stroke-dasharray="27.1 72.9" stroke-dashoffset="-3.4" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#504e49" stroke-width="24" stroke-dasharray="69.5 30.5" stroke-dashoffset="-30.5" pathLength="100" transform="rotate(-90 130 130)"/><text x="130" y="136" text-anchor="middle">339项</text><text x="235" y="78">SKILL.md</text><text x="235" y="100">README.md</text><text x="235" y="122">agents/interface.yaml</text><text x="235" y="144">manifest.json</text><text x="235" y="166">references</text><text x="235" y="188">scripts</text></svg><figcaption>资产分布图展示当前包体的文件和目录重心。</figcaption></figure>
|
||||
<figure class="chart-figure" data-chart="asset_donut"><svg viewBox="0 0 430 270" role="img" aria-label="资产分布"><text x="20" y="30" class="chart-title">资产分布</text><circle cx="130" cy="130" r="70" fill="none" stroke="#1B365D" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="0.0" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#2D5A8A" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-0.8" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#D0DCE9" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-1.7" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#E4ECF5" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-2.5" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#e8e6dc" stroke-width="24" stroke-dasharray="26.9 73.1" stroke-dashoffset="-3.4" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#504e49" stroke-width="24" stroke-dasharray="69.7 30.3" stroke-dashoffset="-30.3" pathLength="100" transform="rotate(-90 130 130)"/><text x="130" y="136" text-anchor="middle">342项</text><text x="235" y="78">SKILL.md</text><text x="235" y="100">README.md</text><text x="235" y="122">agents/interface.yaml</text><text x="235" y="144">manifest.json</text><text x="235" y="166">references</text><text x="235" y="188">scripts</text></svg><figcaption>资产分布图展示当前包体的文件和目录重心。</figcaption></figure>
|
||||
<table>
|
||||
<thead><tr><th><span data-lang="zh-CN">路径</span><span data-lang="en">Path</span></th><th><span data-lang="zh-CN">作用</span><span data-lang="en">Role</span></th><th><span data-lang="zh-CN">类型</span><span data-lang="en">Type</span></th></tr></thead>
|
||||
<tbody><tr><td>SKILL.md</td><td><span data-lang="zh-CN">Skill 入口文件</span><span data-lang="en">Skill entrypoint</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>README.md</td><td><span data-lang="zh-CN">人类可读使用说明</span><span data-lang="en">Human-readable usage guide</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>agents/interface.yaml</td><td><span data-lang="zh-CN">跨平台接口元数据</span><span data-lang="en">Neutral interface metadata</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>manifest.json</td><td><span data-lang="zh-CN">生命周期与打包元数据</span><span data-lang="en">Lifecycle and portability metadata</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>references</td><td><span data-lang="zh-CN">扩展指导与复用资料</span><span data-lang="en">Extended guidance and reusable notes</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr><tr><td>scripts</td><td><span data-lang="zh-CN">确定性脚本或本地工具</span><span data-lang="en">Deterministic helpers or local tooling</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr><tr><td>evals</td><td><span data-lang="zh-CN">触发与质量检查</span><span data-lang="en">Trigger and quality checks</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr><tr><td>reports</td><td><span data-lang="zh-CN">生成的证据与总结报告</span><span data-lang="en">Generated evidence and overview artifacts</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr></tbody>
|
||||
|
||||
+23
-23
@@ -436,7 +436,7 @@
|
||||
"path": "scripts",
|
||||
"label": "Deterministic helpers or local tooling",
|
||||
"kind": "folder",
|
||||
"file_count": 82
|
||||
"file_count": 83
|
||||
},
|
||||
{
|
||||
"path": "evals",
|
||||
@@ -448,10 +448,10 @@
|
||||
"path": "reports",
|
||||
"label": "Generated evidence and overview artifacts",
|
||||
"kind": "folder",
|
||||
"file_count": 193
|
||||
"file_count": 195
|
||||
}
|
||||
],
|
||||
"file_count": 339,
|
||||
"file_count": 342,
|
||||
"folder_count": 4,
|
||||
"distribution": [
|
||||
{
|
||||
@@ -476,7 +476,7 @@
|
||||
},
|
||||
{
|
||||
"label": "scripts",
|
||||
"value": 82
|
||||
"value": 83
|
||||
},
|
||||
{
|
||||
"label": "evals",
|
||||
@@ -484,7 +484,7 @@
|
||||
},
|
||||
{
|
||||
"label": "reports",
|
||||
"value": 193
|
||||
"value": 195
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -605,7 +605,7 @@
|
||||
"path": "scripts",
|
||||
"label": "Deterministic helpers or local tooling",
|
||||
"kind": "folder",
|
||||
"file_count": 82
|
||||
"file_count": 83
|
||||
},
|
||||
{
|
||||
"path": "evals",
|
||||
@@ -617,7 +617,7 @@
|
||||
"path": "reports",
|
||||
"label": "Generated evidence and overview artifacts",
|
||||
"kind": "folder",
|
||||
"file_count": 193
|
||||
"file_count": 195
|
||||
}
|
||||
],
|
||||
"strengths": [
|
||||
@@ -905,9 +905,9 @@
|
||||
"world_class_task_count": 4,
|
||||
"world_class_ledger_pending_count": 4,
|
||||
"working_tree_dirty": true,
|
||||
"changed_file_count": 35
|
||||
"changed_file_count": 44
|
||||
},
|
||||
"commit": "4737358f3c7acb6650d5463793e5f0e8f913aada",
|
||||
"commit": "ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d",
|
||||
"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": 166,
|
||||
"script_count": 82,
|
||||
"scanned_files": 167,
|
||||
"script_count": 83,
|
||||
"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": 59,
|
||||
"file_write_script_count": 60,
|
||||
"permission_required_count": 3,
|
||||
"permission_approved_count": 3,
|
||||
"permission_missing_count": 0,
|
||||
"permission_invalid_count": 0,
|
||||
"permission_expired_count": 0,
|
||||
"help_smoke_checked_count": 72,
|
||||
"help_smoke_checked_count": 73,
|
||||
"help_smoke_failed_count": 0,
|
||||
"interactive_script_count": 0,
|
||||
"package_hash_scope": "source-contract-without-generated-reports",
|
||||
"package_hash_file_count": 166,
|
||||
"package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723"
|
||||
"package_hash_file_count": 167,
|
||||
"package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa"
|
||||
},
|
||||
"skill_atlas": {
|
||||
"skill_count": 12,
|
||||
@@ -1041,8 +1041,8 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723",
|
||||
"archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2"
|
||||
"package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa",
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7"
|
||||
},
|
||||
"compatibility": {
|
||||
"openai": "pass",
|
||||
@@ -1073,7 +1073,7 @@
|
||||
},
|
||||
"distribution": {
|
||||
"archive_verified": true,
|
||||
"archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2",
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7",
|
||||
"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": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2",
|
||||
"archive_entry_count": 547,
|
||||
"archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7",
|
||||
"archive_entry_count": 551,
|
||||
"failure_count": 0,
|
||||
"warning_count": 0
|
||||
},
|
||||
@@ -1101,7 +1101,7 @@
|
||||
"ok": true,
|
||||
"summary": {
|
||||
"archive_present": true,
|
||||
"archive_entry_count": 547,
|
||||
"archive_entry_count": 551,
|
||||
"archive_extracted": true,
|
||||
"entrypoint_loaded": true,
|
||||
"manifest_loaded": true,
|
||||
@@ -1168,12 +1168,12 @@
|
||||
{
|
||||
"field": "archive_sha256",
|
||||
"from": "",
|
||||
"to": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2"
|
||||
"to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7"
|
||||
},
|
||||
{
|
||||
"field": "package_sha256",
|
||||
"from": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"to": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723"
|
||||
"to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
},
|
||||
"catalog": {
|
||||
"workspace_root": ".",
|
||||
"generated_at": "2026-06-13",
|
||||
"generated_at": "2026-06-14",
|
||||
"skills": [
|
||||
{
|
||||
"name": "yao-meta-skill",
|
||||
@@ -91,6 +91,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -209,8 +210,8 @@
|
||||
"report": "reports/adoption_drift_report.json",
|
||||
"risk_band": "low",
|
||||
"event_count": 1,
|
||||
"adoption_sample_count": 1,
|
||||
"adoption_rate": 100.0,
|
||||
"adoption_sample_count": 0,
|
||||
"adoption_rate": 0,
|
||||
"candidate_count": 0
|
||||
}
|
||||
},
|
||||
@@ -873,7 +874,7 @@
|
||||
"name": "incident-command-governor",
|
||||
"path": "examples/governed-incident-command/generated-skill",
|
||||
"reason": "review overdue by cadence monthly",
|
||||
"age_days": 74,
|
||||
"age_days": 75,
|
||||
"allowed_days": 31,
|
||||
"actionable": false,
|
||||
"scope": "example"
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
"key": "trust-security",
|
||||
"label": "Trust Security",
|
||||
"status": "pass",
|
||||
"current": "secrets 0; scripts 82; help failures 0",
|
||||
"current": "secrets 0; scripts 83; 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 547; install failures 0; permission failures 0",
|
||||
"current": "zip entries 551; install failures 0; permission failures 0",
|
||||
"target": "Package metadata, archive checksum, package verification, and install simulation pass",
|
||||
"evidence": [
|
||||
{
|
||||
@@ -303,7 +303,7 @@
|
||||
"key": "review-studio",
|
||||
"label": "Review Studio",
|
||||
"status": "pass",
|
||||
"current": "decision review; warnings 3; score 90",
|
||||
"current": "decision review; warnings 4; score 89",
|
||||
"target": "One page shows gates, evidence paths, blockers, warnings, actions, waivers, and annotations",
|
||||
"evidence": [
|
||||
{
|
||||
|
||||
@@ -23,12 +23,12 @@ Generated at: `2026-06-14`
|
||||
| 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 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 82; 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 83; 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 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. |
|
||||
| Registry Distribution | pass | zip entries 551; 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 4; score 89 | 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. |
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
"label": "Trust Security",
|
||||
"status": "pass",
|
||||
"objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.",
|
||||
"current": "82 scripts; secrets 0; help failures 0",
|
||||
"current": "83 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 547; install failures 0",
|
||||
"current": "archive entries 551; 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": [
|
||||
@@ -237,7 +237,7 @@
|
||||
"label": "Review Studio",
|
||||
"status": "pass",
|
||||
"objective": "One HTML page supports first-pass production review across trigger, output, runtime, trust, release, and evidence actions.",
|
||||
"current": "15 gates; decision review; warnings 3",
|
||||
"current": "16 gates; decision review; warnings 4",
|
||||
"command": "python3 scripts/yao.py review-studio .",
|
||||
"test": "python3 tests/verify_review_studio.py",
|
||||
"evidence": [
|
||||
@@ -555,7 +555,7 @@
|
||||
"label": "Review Studio 2.0",
|
||||
"status": "pass",
|
||||
"objective": "Recommended Skill OS 2.0 implementation PR from the upgrade plan.",
|
||||
"current": "15 review gates",
|
||||
"current": "16 review gates",
|
||||
"command": "make ci-test",
|
||||
"test": "tests/verify_review_studio.py",
|
||||
"evidence": [
|
||||
|
||||
@@ -21,10 +21,10 @@ 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` | 82 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` |
|
||||
| Trust Security | `pass` | 83 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 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` | 15 gates; decision review; warnings 3 | `python3 scripts/yao.py review-studio .` | `python3 tests/verify_review_studio.py` |
|
||||
| Registry Distribution | `pass` | archive entries 551; 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 4 | `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` |
|
||||
|
||||
## Recommended PR Coverage
|
||||
@@ -41,7 +41,7 @@ This report maps the Skill OS 2.0 upgrade blueprint to concrete local artifacts,
|
||||
| Trust Check | `pass` | secret findings 0 | `make ci-test` | `tests/verify_trust_check.py` |
|
||||
| Skill Atlas Generator | `pass` | 12 scanned skills | `make ci-test` | `tests/verify_skill_atlas.py` |
|
||||
| Registry Package Format | `pass` | registry ok True | `make ci-test` | `tests/verify_registry_audit.py` |
|
||||
| Review Studio 2.0 | `pass` | 15 review gates | `make ci-test` | `tests/verify_review_studio.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` |
|
||||
|
||||
## Next Highest-Leverage Moves
|
||||
|
||||
@@ -70,12 +70,12 @@
|
||||
{
|
||||
"field": "archive_sha256",
|
||||
"from": "",
|
||||
"to": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2"
|
||||
"to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7"
|
||||
},
|
||||
{
|
||||
"field": "package_sha256",
|
||||
"from": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"to": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723"
|
||||
"to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"summary": {
|
||||
"ledger_ready_to_claim_world_class": false,
|
||||
"ledger_pending_count": 4,
|
||||
"claim_surface_count": 67,
|
||||
"claim_surface_count": 68,
|
||||
"violation_count": 0,
|
||||
"overclaim_guard_active": true,
|
||||
"decision": "claim-guard-pass-evidence-pending"
|
||||
@@ -71,6 +71,10 @@
|
||||
"path": "reports/adoption_drift_report.md",
|
||||
"violation_count": 0
|
||||
},
|
||||
{
|
||||
"path": "reports/architecture_maintainability.md",
|
||||
"violation_count": 0
|
||||
},
|
||||
{
|
||||
"path": "reports/artifact-design-profile.md",
|
||||
"violation_count": 0
|
||||
|
||||
@@ -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: `67`
|
||||
- claim surfaces scanned: `68`
|
||||
- violations: `0`
|
||||
- overclaim guard active: `true`
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ DEFAULT_TARGETS = [
|
||||
"description-optimization-check",
|
||||
"promotion-check",
|
||||
"python-compat-check",
|
||||
"architecture-maintainability-check",
|
||||
"yao-cli-check",
|
||||
"skill-overview-check",
|
||||
"skill-report-metrics-check",
|
||||
|
||||
@@ -0,0 +1,231 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Render a maintainability audit for the skill code surface."""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from datetime import date
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
|
||||
|
||||
EXCLUDED_PARTS = {
|
||||
".git",
|
||||
".mypy_cache",
|
||||
".pytest_cache",
|
||||
"__pycache__",
|
||||
"dist",
|
||||
".previews",
|
||||
}
|
||||
|
||||
|
||||
def iter_python_files(skill_dir: Path) -> list[Path]:
|
||||
roots = [skill_dir / "scripts", skill_dir / "tests"]
|
||||
files: list[Path] = []
|
||||
for root in roots:
|
||||
if not root.exists():
|
||||
continue
|
||||
for path in root.rglob("*.py"):
|
||||
rel_parts = path.relative_to(skill_dir).parts
|
||||
if any(part in EXCLUDED_PARTS for part in rel_parts):
|
||||
continue
|
||||
if len(rel_parts) >= 2 and rel_parts[0] == "tests" and rel_parts[1].startswith("tmp"):
|
||||
continue
|
||||
files.append(path)
|
||||
return sorted(files)
|
||||
|
||||
|
||||
def rel(skill_dir: Path, path: Path) -> str:
|
||||
try:
|
||||
return str(path.resolve().relative_to(skill_dir.resolve()))
|
||||
except ValueError:
|
||||
return str(path)
|
||||
|
||||
|
||||
def classify_python_file(path: Path, text: str) -> str:
|
||||
if 'SCRIPT_INTERFACE = "internal-module"' in text or "SCRIPT_INTERFACE = 'internal-module'" in text:
|
||||
return "internal-module"
|
||||
if "argparse.ArgumentParser" in text or ".add_argument(" in text or "argparse" in text:
|
||||
return "cli-script"
|
||||
if path.parts[-2:-1] == ("tests",) or "/tests/" in path.as_posix():
|
||||
return "test"
|
||||
return "module"
|
||||
|
||||
|
||||
def recommendation_for(path: str) -> str:
|
||||
if path == "scripts/yao.py":
|
||||
return "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
|
||||
if path == "scripts/render_review_studio.py":
|
||||
return "Move data loading and large section renderers into focused review_studio_* modules."
|
||||
if path == "scripts/render_review_viewer.py":
|
||||
return "Split viewer data assembly from HTML section rendering."
|
||||
if path.startswith("tests/"):
|
||||
return "Break broad integration assertions into focused verifier helpers when the next behavior change lands."
|
||||
return "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
|
||||
|
||||
def count_command_handlers(skill_dir: Path) -> int:
|
||||
path = skill_dir / "scripts" / "yao.py"
|
||||
if not path.exists():
|
||||
return 0
|
||||
count = 0
|
||||
for line in path.read_text(encoding="utf-8", errors="replace").splitlines():
|
||||
if line.startswith("def command_"):
|
||||
count += 1
|
||||
return count
|
||||
|
||||
|
||||
def build_report(skill_dir: Path, warn_lines: int, block_lines: int, generated_at: str) -> dict[str, Any]:
|
||||
files = iter_python_files(skill_dir)
|
||||
records: list[dict[str, Any]] = []
|
||||
internal_count = 0
|
||||
cli_count = 0
|
||||
test_count = 0
|
||||
script_count = 0
|
||||
for path in files:
|
||||
text = path.read_text(encoding="utf-8", errors="replace")
|
||||
line_count = len(text.splitlines())
|
||||
kind = classify_python_file(path, text)
|
||||
rel_path = rel(skill_dir, path)
|
||||
if kind == "internal-module":
|
||||
internal_count += 1
|
||||
if kind == "cli-script":
|
||||
cli_count += 1
|
||||
if rel_path.startswith("tests/"):
|
||||
test_count += 1
|
||||
if rel_path.startswith("scripts/"):
|
||||
script_count += 1
|
||||
severity = "pass"
|
||||
if line_count >= block_lines:
|
||||
severity = "block"
|
||||
elif line_count >= warn_lines:
|
||||
severity = "warn"
|
||||
records.append(
|
||||
{
|
||||
"path": rel_path,
|
||||
"lines": line_count,
|
||||
"kind": kind,
|
||||
"severity": severity,
|
||||
"recommendation": recommendation_for(rel_path),
|
||||
}
|
||||
)
|
||||
records.sort(key=lambda item: (-int(item["lines"]), str(item["path"])))
|
||||
hotspots = [item for item in records if item["severity"] in {"warn", "block"}]
|
||||
blockers = [item for item in records if item["severity"] == "block"]
|
||||
summary = {
|
||||
"python_file_count": len(records),
|
||||
"script_file_count": script_count,
|
||||
"test_file_count": test_count,
|
||||
"internal_module_count": internal_count,
|
||||
"cli_script_count": cli_count,
|
||||
"command_handler_count": count_command_handlers(skill_dir),
|
||||
"warn_line_threshold": warn_lines,
|
||||
"block_line_threshold": block_lines,
|
||||
"largest_file_lines": records[0]["lines"] if records else 0,
|
||||
"hotspot_count": len(hotspots),
|
||||
"blocker_count": len(blockers),
|
||||
"decision": "block-maintainability" if blockers else ("watch-maintainability-hotspots" if hotspots else "pass"),
|
||||
}
|
||||
return {
|
||||
"schema_version": "1.0",
|
||||
"ok": not blockers,
|
||||
"generated_at": generated_at,
|
||||
"skill_dir": ".",
|
||||
"summary": summary,
|
||||
"largest_files": records[:12],
|
||||
"hotspots": hotspots,
|
||||
"actions": [
|
||||
{
|
||||
"path": item["path"],
|
||||
"severity": item["severity"],
|
||||
"action": item["recommendation"],
|
||||
}
|
||||
for item in hotspots[:8]
|
||||
],
|
||||
"artifacts": {
|
||||
"json": "reports/architecture_maintainability.json",
|
||||
"markdown": "reports/architecture_maintainability.md",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def render_markdown(report: dict[str, Any]) -> str:
|
||||
summary = report["summary"]
|
||||
lines = [
|
||||
"# Architecture Maintainability",
|
||||
"",
|
||||
f"Generated at: `{report['generated_at']}`",
|
||||
"",
|
||||
"## Summary",
|
||||
"",
|
||||
f"- decision: `{summary['decision']}`",
|
||||
f"- python files: `{summary['python_file_count']}`",
|
||||
f"- scripts: `{summary['script_file_count']}`",
|
||||
f"- tests: `{summary['test_file_count']}`",
|
||||
f"- internal modules: `{summary['internal_module_count']}`",
|
||||
f"- CLI scripts: `{summary['cli_script_count']}`",
|
||||
f"- Yao CLI command handlers: `{summary['command_handler_count']}`",
|
||||
f"- largest file lines: `{summary['largest_file_lines']}`",
|
||||
f"- hotspots: `{summary['hotspot_count']}`",
|
||||
f"- blockers: `{summary['blocker_count']}`",
|
||||
"",
|
||||
"This report keeps maintainability risk visible before the Meta Skill grows more gates, renderers, and CLI commands.",
|
||||
"",
|
||||
"## Hotspots",
|
||||
"",
|
||||
]
|
||||
hotspots = report.get("hotspots", [])
|
||||
if hotspots:
|
||||
lines.extend(["| File | Lines | Kind | Severity | Recommended action |", "| --- | ---: | --- | --- | --- |"])
|
||||
for item in hotspots:
|
||||
lines.append(
|
||||
f"| `{item['path']}` | `{item['lines']}` | `{item['kind']}` | `{item['severity']}` | {item['recommendation']} |"
|
||||
)
|
||||
else:
|
||||
lines.append("No file-size hotspots found.")
|
||||
lines.extend(["", "## Largest Files", ""])
|
||||
if report.get("largest_files"):
|
||||
lines.extend(["| File | Lines | Kind | Severity |", "| --- | ---: | --- | --- |"])
|
||||
for item in report["largest_files"]:
|
||||
lines.append(f"| `{item['path']}` | `{item['lines']}` | `{item['kind']}` | `{item['severity']}` |")
|
||||
else:
|
||||
lines.append("No Python files found under scripts/ or tests/.")
|
||||
lines.extend(
|
||||
[
|
||||
"",
|
||||
"## Release Rule",
|
||||
"",
|
||||
"- `block` hotspots should be split before governed release.",
|
||||
"- `warn` hotspots can ship only when Review Studio keeps them visible and a reviewer accepts the modularization plan.",
|
||||
"- Do not split a file only for line count; split when a stable responsibility boundary is clear.",
|
||||
]
|
||||
)
|
||||
return "\n".join(lines) + "\n"
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description="Render architecture maintainability evidence for a skill package.")
|
||||
parser.add_argument("skill_dir", nargs="?", default=".")
|
||||
parser.add_argument("--output-json")
|
||||
parser.add_argument("--output-md")
|
||||
parser.add_argument("--warn-lines", type=int, default=900)
|
||||
parser.add_argument("--block-lines", type=int, default=1500)
|
||||
parser.add_argument("--generated-at", default=date.today().isoformat())
|
||||
args = parser.parse_args()
|
||||
|
||||
skill_dir = Path(args.skill_dir).resolve()
|
||||
report = build_report(skill_dir, args.warn_lines, args.block_lines, args.generated_at)
|
||||
output_json = Path(args.output_json) if args.output_json else skill_dir / "reports" / "architecture_maintainability.json"
|
||||
output_md = Path(args.output_md) if args.output_md else skill_dir / "reports" / "architecture_maintainability.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()
|
||||
@@ -18,11 +18,14 @@ VALID_GATES = {
|
||||
"context-budget",
|
||||
"runtime-matrix",
|
||||
"trust-report",
|
||||
"python-compat",
|
||||
"architecture-maintainability",
|
||||
"permission-gates",
|
||||
"permission-runtime",
|
||||
"skill-atlas",
|
||||
"operations-loop",
|
||||
"review-waivers",
|
||||
"world-class-evidence",
|
||||
"registry-audit",
|
||||
"release-notes",
|
||||
}
|
||||
|
||||
@@ -129,6 +129,7 @@ def evidence_paths(skill_dir: Path) -> dict[str, str]:
|
||||
"runtime_conformance": "reports/conformance_matrix.md",
|
||||
"trust_report": "reports/security_trust_report.md",
|
||||
"python_compatibility": "reports/python_compatibility.md",
|
||||
"architecture_maintainability": "reports/architecture_maintainability.md",
|
||||
"permission_policy": "security/permission_policy.md",
|
||||
"runtime_permissions": "reports/runtime_permission_probes.md",
|
||||
"skill_atlas": "reports/skill_atlas.html",
|
||||
@@ -167,6 +168,7 @@ def load_review_data(skill_dir: Path) -> dict[str, dict[str, Any]]:
|
||||
"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"),
|
||||
"architecture_maintainability": load_json(reports / "architecture_maintainability.json"),
|
||||
"context_budget": load_json(reports / "context_budget.json"),
|
||||
"promotion": load_json(reports / "promotion_decisions.json"),
|
||||
"atlas": load_json(reports / "skill_atlas.json"),
|
||||
@@ -198,6 +200,7 @@ def insight_cards(data: dict[str, dict[str, Any]]) -> list[dict[str, str]]:
|
||||
runtime_permissions = data["runtime_permissions"].get("summary", {})
|
||||
trust = data["trust"].get("summary", {})
|
||||
python_compat = data["python_compatibility"].get("summary", {})
|
||||
architecture = data["architecture_maintainability"].get("summary", {})
|
||||
atlas = data["atlas"].get("summary", {})
|
||||
adoption = data["adoption_drift"].get("summary", {})
|
||||
waivers = data["review_waivers"].get("summary", {})
|
||||
@@ -268,6 +271,14 @@ def insight_cards(data: dict[str, dict[str, Any]]) -> list[dict[str, str]]:
|
||||
"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": "Arch Debt",
|
||||
"value": str(architecture.get("hotspot_count", 0)),
|
||||
"detail": (
|
||||
f"{architecture.get('largest_file_lines', 0)} largest lines; "
|
||||
f"{architecture.get('command_handler_count', 0)} CLI handlers"
|
||||
),
|
||||
},
|
||||
{
|
||||
"label": "Atlas",
|
||||
"value": str(atlas.get("route_collision_count", 0)),
|
||||
@@ -451,6 +462,18 @@ ACTION_GUIDANCE: dict[str, dict[str, str]] = {
|
||||
],
|
||||
"verification": "python3 scripts/yao.py python-compat .",
|
||||
},
|
||||
"architecture-maintainability": {
|
||||
"summary": "处理大文件和 CLI command surface 的维护性热点,优先拆分稳定职责边界。",
|
||||
"why": "Meta Skill 的门禁、报告和 CLI 会持续增长;如果不把架构债纳入审查,后续能力会越来越难验证和迁移。",
|
||||
"source_fix": "reports/architecture_maintainability.md + scripts/yao.py + scripts/render_review_studio.py",
|
||||
"source_paths": [
|
||||
{"path": "reports/architecture_maintainability.md", "label": "architecture maintainability", "kind": "report", "patterns": ["# Architecture"]},
|
||||
{"path": "scripts/yao.py", "label": "Yao CLI orchestrator", "kind": "source", "patterns": ["def command_"]},
|
||||
{"path": "scripts/render_review_studio.py", "label": "Review Studio renderer", "kind": "source", "patterns": ["ACTION_GUIDANCE"]},
|
||||
{"path": "scripts/render_review_viewer.py", "label": "review viewer renderer", "kind": "source", "patterns": ["def "]},
|
||||
],
|
||||
"verification": "python3 scripts/yao.py architecture-audit .",
|
||||
},
|
||||
"permission-gates": {
|
||||
"summary": "补齐高权限能力的 reviewer、scope、reason、expires_at 和目标端 enforcement 说明。",
|
||||
"why": "权限契约只有在批准人、有效期和目标端处置方式明确时,才能支撑 governed release。",
|
||||
|
||||
@@ -291,6 +291,37 @@ def build_gates(skill_dir: Path, output_html: Path, data: dict[str, dict[str, An
|
||||
)
|
||||
)
|
||||
|
||||
architecture = data["architecture_maintainability"]
|
||||
architecture_summary = architecture.get("summary", {})
|
||||
if not architecture:
|
||||
if maturity in {"library", "governed"}:
|
||||
architecture_status = "warn"
|
||||
architecture_detail = "architecture maintainability report is missing for a reusable package"
|
||||
else:
|
||||
architecture_status = "pass"
|
||||
architecture_detail = "architecture maintainability report is optional until code surface grows"
|
||||
else:
|
||||
hotspot_count = int(architecture_summary.get("hotspot_count", 0) or 0)
|
||||
blocker_count = int(architecture_summary.get("blocker_count", 0) or 0)
|
||||
architecture_status = "block" if not architecture.get("ok", True) or blocker_count else ("warn" if hotspot_count else "pass")
|
||||
architecture_detail = (
|
||||
f"{architecture_summary.get('python_file_count', 0)} Python files; "
|
||||
f"{hotspot_count} hotspots; "
|
||||
f"{blocker_count} blockers; "
|
||||
f"largest {architecture_summary.get('largest_file_lines', 0)} lines; "
|
||||
f"{architecture_summary.get('command_handler_count', 0)} CLI handlers"
|
||||
)
|
||||
gates.append(
|
||||
gate(
|
||||
"architecture-maintainability",
|
||||
"架构维护",
|
||||
architecture_status,
|
||||
architecture_detail,
|
||||
"reports/architecture_maintainability.json",
|
||||
_report_link(output_html, skill_dir, "reports/architecture_maintainability.md"),
|
||||
)
|
||||
)
|
||||
|
||||
permission_governance = trust.get("permission_governance", {}) if isinstance(trust.get("permission_governance", {}), dict) else {}
|
||||
if trust and not permission_governance:
|
||||
permission_governance = fallback_permission_governance(skill_dir)
|
||||
@@ -566,6 +597,7 @@ def weighted_score(gates: list[dict[str, str]]) -> int:
|
||||
"runtime-matrix": 10,
|
||||
"trust-report": 10,
|
||||
"python-compat": 10,
|
||||
"architecture-maintainability": 10,
|
||||
"permission-gates": 10,
|
||||
"permission-runtime": 10,
|
||||
"skill-atlas": 10,
|
||||
|
||||
@@ -455,6 +455,24 @@ def command_python_compat(args: argparse.Namespace) -> int:
|
||||
return 0 if result["ok"] else 2
|
||||
|
||||
|
||||
def command_architecture_audit(args: argparse.Namespace) -> int:
|
||||
skill_dir = str(Path(args.skill_dir).resolve())
|
||||
cmd = [skill_dir]
|
||||
if args.output_json:
|
||||
cmd.extend(["--output-json", args.output_json])
|
||||
if args.output_md:
|
||||
cmd.extend(["--output-md", args.output_md])
|
||||
if args.warn_lines is not None:
|
||||
cmd.extend(["--warn-lines", str(args.warn_lines)])
|
||||
if args.block_lines is not None:
|
||||
cmd.extend(["--block-lines", str(args.block_lines)])
|
||||
if args.generated_at:
|
||||
cmd.extend(["--generated-at", args.generated_at])
|
||||
result = run_script("render_architecture_maintainability.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:
|
||||
@@ -472,6 +490,7 @@ def command_report(args: argparse.Namespace) -> int:
|
||||
run_script("render_context_reports.py", []),
|
||||
run_script("render_portability_report.py", []),
|
||||
run_script("python_compat_check.py", [str(ROOT)]),
|
||||
run_script("render_architecture_maintainability.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)]),
|
||||
@@ -506,6 +525,7 @@ def command_report(args: argparse.Namespace) -> int:
|
||||
"context_budget": "reports/context_budget.json",
|
||||
"portability_score": "reports/portability_score.json",
|
||||
"python_compatibility": "reports/python_compatibility.json",
|
||||
"architecture_maintainability": "reports/architecture_maintainability.json",
|
||||
"reference_synthesis": "reports/reference-synthesis.json",
|
||||
"artifact_design_profile": "reports/artifact-design-profile.json",
|
||||
"prompt_quality_profile": "reports/prompt-quality-profile.json",
|
||||
@@ -1283,6 +1303,7 @@ def command_workspace_flow(args: argparse.Namespace) -> int:
|
||||
{"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("render_architecture_maintainability.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)])},
|
||||
|
||||
@@ -93,6 +93,18 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int]
|
||||
python_compat_cmd.add_argument("--generated-at")
|
||||
python_compat_cmd.set_defaults(func=_handler(command_handlers, "command_python_compat"))
|
||||
|
||||
architecture_audit_cmd = subparsers.add_parser(
|
||||
"architecture-audit",
|
||||
help="Render maintainability evidence for large Python files and CLI command surface.",
|
||||
)
|
||||
architecture_audit_cmd.add_argument("skill_dir", nargs="?", default=".")
|
||||
architecture_audit_cmd.add_argument("--output-json")
|
||||
architecture_audit_cmd.add_argument("--output-md")
|
||||
architecture_audit_cmd.add_argument("--warn-lines", type=int, default=900)
|
||||
architecture_audit_cmd.add_argument("--block-lines", type=int, default=1500)
|
||||
architecture_audit_cmd.add_argument("--generated-at")
|
||||
architecture_audit_cmd.set_defaults(func=_handler(command_handlers, "command_architecture_audit"))
|
||||
|
||||
review_cmd = subparsers.add_parser("review", help="Locate the current bundle and human review stub for a target.")
|
||||
review_cmd.add_argument(
|
||||
"--target",
|
||||
@@ -448,10 +460,12 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int]
|
||||
review_waivers_cmd.add_argument(
|
||||
"--gate-key",
|
||||
choices=[
|
||||
"architecture-maintainability",
|
||||
"context-budget",
|
||||
"intent-canvas",
|
||||
"operations-loop",
|
||||
"output-lab",
|
||||
"python-compat",
|
||||
"registry-audit",
|
||||
"release-notes",
|
||||
"runtime-matrix",
|
||||
@@ -489,10 +503,12 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int]
|
||||
review_annotations_cmd.add_argument(
|
||||
"--gate-key",
|
||||
choices=[
|
||||
"architecture-maintainability",
|
||||
"context-budget",
|
||||
"intent-canvas",
|
||||
"operations-loop",
|
||||
"output-lab",
|
||||
"python-compat",
|
||||
"registry-audit",
|
||||
"release-notes",
|
||||
"review-waivers",
|
||||
@@ -500,6 +516,7 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int]
|
||||
"skill-atlas",
|
||||
"trigger-lab",
|
||||
"trust-report",
|
||||
"world-class-evidence",
|
||||
"permission-gates",
|
||||
"permission-runtime",
|
||||
],
|
||||
|
||||
@@ -135,6 +135,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -186,8 +187,7 @@
|
||||
"scripts/upgrade_check.py",
|
||||
"scripts/validate_skill.py",
|
||||
"scripts/verify_package.py",
|
||||
"scripts/yao.py",
|
||||
"scripts/yao_cli_config.py"
|
||||
"scripts/yao.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"workspace_root": ".",
|
||||
"generated_at": "2026-06-13",
|
||||
"generated_at": "2026-06-14",
|
||||
"skills": [
|
||||
{
|
||||
"name": "yao-meta-skill",
|
||||
@@ -47,6 +47,7 @@
|
||||
"scripts/python_compat_check.py",
|
||||
"scripts/registry_audit.py",
|
||||
"scripts/render_adoption_drift_report.py",
|
||||
"scripts/render_architecture_maintainability.py",
|
||||
"scripts/render_artifact_design_profile.py",
|
||||
"scripts/render_baseline_compare.py",
|
||||
"scripts/render_benchmark_reproducibility.py",
|
||||
@@ -165,8 +166,8 @@
|
||||
"report": "reports/adoption_drift_report.json",
|
||||
"risk_band": "low",
|
||||
"event_count": 1,
|
||||
"adoption_sample_count": 1,
|
||||
"adoption_rate": 100.0,
|
||||
"adoption_sample_count": 0,
|
||||
"adoption_rate": 0,
|
||||
"candidate_count": 0
|
||||
}
|
||||
},
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"name": "incident-command-governor",
|
||||
"path": "examples/governed-incident-command/generated-skill",
|
||||
"reason": "review overdue by cadence monthly",
|
||||
"age_days": 74,
|
||||
"age_days": 75,
|
||||
"allowed_days": 31,
|
||||
"actionable": false,
|
||||
"scope": "example"
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
#!/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" / "render_architecture_maintainability.py"
|
||||
|
||||
|
||||
def main() -> None:
|
||||
tmp = ROOT / "tests" / "tmp_architecture_maintainability"
|
||||
if tmp.exists():
|
||||
shutil.rmtree(tmp)
|
||||
tmp.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
output_json = tmp / "architecture_maintainability.json"
|
||||
output_md = tmp / "architecture_maintainability.md"
|
||||
proc = subprocess.run(
|
||||
[
|
||||
sys.executable,
|
||||
str(SCRIPT),
|
||||
str(ROOT),
|
||||
"--output-json",
|
||||
str(output_json),
|
||||
"--output-md",
|
||||
str(output_md),
|
||||
"--generated-at",
|
||||
"2026-06-14",
|
||||
],
|
||||
cwd=ROOT,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True,
|
||||
)
|
||||
payload = json.loads(proc.stdout)
|
||||
assert payload["ok"], payload
|
||||
assert payload["summary"]["decision"] == "watch-maintainability-hotspots", payload["summary"]
|
||||
assert payload["summary"]["hotspot_count"] >= 3, payload["summary"]
|
||||
assert payload["summary"]["blocker_count"] == 0, payload["summary"]
|
||||
assert payload["summary"]["command_handler_count"] >= 50, payload["summary"]
|
||||
assert payload["summary"]["largest_file_lines"] >= 900, payload["summary"]
|
||||
assert payload["largest_files"][0]["path"] == "scripts/yao.py", payload["largest_files"][0]
|
||||
assert payload["largest_files"][0]["severity"] == "warn", payload["largest_files"][0]
|
||||
hotspot_paths = {item["path"] for item in payload["hotspots"]}
|
||||
assert {"scripts/yao.py", "scripts/render_review_studio.py"} <= hotspot_paths, hotspot_paths
|
||||
assert output_json.exists(), output_json
|
||||
markdown = output_md.read_text(encoding="utf-8")
|
||||
assert "# Architecture Maintainability" in markdown, markdown
|
||||
assert "Split command handlers by domain" in markdown, markdown
|
||||
assert "Do not split a file only for line count" in markdown, markdown
|
||||
|
||||
blocker_proc = subprocess.run(
|
||||
[
|
||||
sys.executable,
|
||||
str(SCRIPT),
|
||||
str(ROOT),
|
||||
"--output-json",
|
||||
str(tmp / "architecture_blocker.json"),
|
||||
"--output-md",
|
||||
str(tmp / "architecture_blocker.md"),
|
||||
"--warn-lines",
|
||||
"10",
|
||||
"--block-lines",
|
||||
"100",
|
||||
"--generated-at",
|
||||
"2026-06-14",
|
||||
],
|
||||
cwd=ROOT,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
assert blocker_proc.returncode == 2, blocker_proc.stdout
|
||||
blocker_payload = json.loads(blocker_proc.stdout)
|
||||
assert blocker_payload["ok"] is False, blocker_payload
|
||||
assert blocker_payload["summary"]["blocker_count"] > 0, blocker_payload["summary"]
|
||||
print(json.dumps({"ok": True}, ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -225,6 +225,19 @@ def main() -> None:
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
subprocess.run(
|
||||
[
|
||||
sys.executable,
|
||||
str(ROOT / "scripts" / "render_architecture_maintainability.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",
|
||||
@@ -262,17 +275,22 @@ def main() -> None:
|
||||
assert payload["ok"], payload
|
||||
assert payload["schema_version"] == "2.0", payload
|
||||
assert payload["summary"]["decision"] == "review", payload
|
||||
assert payload["summary"]["gate_count"] == 15, payload
|
||||
assert payload["summary"]["world_class_score"] == 90, payload
|
||||
assert payload["summary"]["warning_count"] == 3, payload
|
||||
assert payload["summary"]["gate_count"] == 16, payload
|
||||
assert payload["summary"]["world_class_score"] == 89, payload
|
||||
assert payload["summary"]["warning_count"] == 4, payload
|
||||
assert payload["summary"]["blocker_count"] == 0, payload
|
||||
assert payload["summary"]["action_count"] == 3, payload
|
||||
assert payload["summary"]["action_count"] == 4, payload
|
||||
assert payload["summary"]["annotation_count"] == 0, payload
|
||||
assert payload["summary"]["open_annotation_blocker_count"] == 0, payload
|
||||
assert payload["summary"]["action_count"] == payload["summary"]["warning_count"] + payload["summary"]["blocker_count"], payload
|
||||
assert {item["gate_key"] for item in payload["review_actions"]} == {"output-lab", "review-waivers", "world-class-evidence"}, payload
|
||||
assert {item["gate_key"] for item in payload["review_actions"]} == {
|
||||
"output-lab",
|
||||
"architecture-maintainability",
|
||||
"review-waivers",
|
||||
"world-class-evidence",
|
||||
}, payload
|
||||
gate_keys = {item["key"] for item in payload["gates"]}
|
||||
assert {"intent-canvas", "trigger-lab", "output-lab", "runtime-matrix", "trust-report", "python-compat", "permission-gates", "permission-runtime", "skill-atlas", "operations-loop", "review-waivers", "world-class-evidence", "registry-audit", "release-notes"} <= gate_keys, payload
|
||||
assert {"intent-canvas", "trigger-lab", "output-lab", "runtime-matrix", "trust-report", "python-compat", "architecture-maintainability", "permission-gates", "permission-runtime", "skill-atlas", "operations-loop", "review-waivers", "world-class-evidence", "registry-audit", "release-notes"} <= gate_keys, payload
|
||||
output_gate = next(item for item in payload["gates"] if item["key"] == "output-lab")
|
||||
assert output_gate["status"] == "warn", output_gate
|
||||
assert "5/5 cases" in output_gate["detail"], output_gate
|
||||
@@ -299,6 +317,12 @@ def main() -> None:
|
||||
assert "0 compatibility issues" in python_compat_gate["detail"], python_compat_gate
|
||||
assert "0 f-string 3.11 hazards" in python_compat_gate["detail"], python_compat_gate
|
||||
assert python_compat_gate["evidence"] == "reports/python_compatibility.json", python_compat_gate
|
||||
architecture_gate = next(item for item in payload["gates"] if item["key"] == "architecture-maintainability")
|
||||
assert architecture_gate["status"] == "warn", architecture_gate
|
||||
assert "3 hotspots" in architecture_gate["detail"], architecture_gate
|
||||
assert "0 blockers" in architecture_gate["detail"], architecture_gate
|
||||
assert "CLI handlers" in architecture_gate["detail"], architecture_gate
|
||||
assert architecture_gate["evidence"] == "reports/architecture_maintainability.json", architecture_gate
|
||||
permission_gate = next(item for item in payload["gates"] if item["key"] == "permission-gates")
|
||||
assert permission_gate["status"] == "pass", permission_gate
|
||||
assert "permissions approved" in permission_gate["detail"], permission_gate
|
||||
@@ -321,7 +345,7 @@ def main() -> None:
|
||||
assert "reports/adoption_drift_report.json" in operations_gate["evidence"], operations_gate
|
||||
waivers_gate = next(item for item in payload["gates"] if item["key"] == "review-waivers")
|
||||
assert waivers_gate["status"] == "warn", waivers_gate
|
||||
assert "warning gates still need reviewer decision" in waivers_gate["detail"], waivers_gate
|
||||
assert "2 warning gates still need reviewer decision" in waivers_gate["detail"], waivers_gate
|
||||
assert "reports/review_waivers.json" in waivers_gate["evidence"], waivers_gate
|
||||
world_class_gate = next(item for item in payload["gates"] if item["key"] == "world-class-evidence")
|
||||
assert world_class_gate["status"] == "warn", world_class_gate
|
||||
@@ -339,6 +363,7 @@ def main() -> None:
|
||||
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"]
|
||||
assert full_payload["evidence_paths"]["architecture_maintainability"] == "reports/architecture_maintainability.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():
|
||||
@@ -367,8 +392,18 @@ def main() -> None:
|
||||
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"]
|
||||
assert full_payload["data"]["architecture_maintainability"]["summary"]["hotspot_count"] >= 3, full_payload["data"]["architecture_maintainability"]
|
||||
assert full_payload["data"]["architecture_maintainability"]["summary"]["blocker_count"] == 0, full_payload["data"]["architecture_maintainability"]
|
||||
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"]
|
||||
assert action_keys == {"output-lab", "architecture-maintainability", "review-waivers", "world-class-evidence"}, full_payload["review_actions"]
|
||||
architecture_action = next(item for item in full_payload["review_actions"] if item["gate_key"] == "architecture-maintainability")
|
||||
assert {item["path"] for item in architecture_action["source_refs"]} >= {
|
||||
"reports/architecture_maintainability.md",
|
||||
"scripts/yao.py",
|
||||
"scripts/render_review_studio.py",
|
||||
"scripts/render_review_viewer.py",
|
||||
}, architecture_action
|
||||
assert all(item["exists"] for item in architecture_action["source_refs"]), architecture_action
|
||||
world_class_action = next(item for item in full_payload["review_actions"] if item["gate_key"] == "world-class-evidence")
|
||||
assert {item["path"] for item in world_class_action["source_refs"]} >= {
|
||||
"reports/world_class_evidence_ledger.md",
|
||||
@@ -489,6 +524,10 @@ def main() -> None:
|
||||
assert "Python 兼容" in html, html[:10000]
|
||||
assert "解释器边界" in html, html[:10000]
|
||||
assert "reports/python_compatibility.md" in html, html
|
||||
assert "架构维护" in html, html
|
||||
assert "Arch Debt" in html, html
|
||||
assert "reports/architecture_maintainability.md" in html, html
|
||||
assert "处理大文件和 CLI command surface 的维护性热点" in html, html
|
||||
assert "kv-grid" in html, html
|
||||
assert "案例数" in html, html
|
||||
assert "命令执行" in html, html
|
||||
|
||||
+23
-1
@@ -74,6 +74,7 @@ def main() -> None:
|
||||
assert "quickstart" in parser_help, parser_help
|
||||
assert "review-studio" in parser_help, parser_help
|
||||
assert "python-compat" in parser_help, parser_help
|
||||
assert "architecture-audit" 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
|
||||
@@ -200,6 +201,21 @@ def main() -> None:
|
||||
assert python_compat_result["payload"]["summary"]["issue_count"] == 0, python_compat_result
|
||||
assert python_compat_result["payload"]["summary"]["file_count"] >= 50, python_compat_result
|
||||
|
||||
architecture_result = run(
|
||||
"architecture-audit",
|
||||
str(ROOT),
|
||||
"--output-json",
|
||||
str(tmp_root / "architecture_maintainability.json"),
|
||||
"--output-md",
|
||||
str(tmp_root / "architecture_maintainability.md"),
|
||||
"--generated-at",
|
||||
"2026-06-14",
|
||||
)
|
||||
assert architecture_result["ok"], architecture_result
|
||||
assert architecture_result["payload"]["summary"]["hotspot_count"] >= 3, architecture_result
|
||||
assert architecture_result["payload"]["summary"]["blocker_count"] == 0, architecture_result
|
||||
assert architecture_result["payload"]["summary"]["command_handler_count"] >= 50, architecture_result
|
||||
|
||||
world_class_evidence_result = run(
|
||||
"world-class-evidence",
|
||||
str(ROOT),
|
||||
@@ -382,10 +398,15 @@ def main() -> None:
|
||||
review_studio_result = run("review-studio", str(created))
|
||||
assert review_studio_result["ok"], review_studio_result
|
||||
assert review_studio_result["payload"]["artifacts"]["html"].endswith("reports/review-studio.html"), review_studio_result
|
||||
assert review_studio_result["payload"]["summary"]["gate_count"] == 15, review_studio_result
|
||||
assert review_studio_result["payload"]["summary"]["gate_count"] == 16, review_studio_result
|
||||
created_world_class_gate = next(item for item in review_studio_result["payload"]["gates"] if item["key"] == "world-class-evidence")
|
||||
assert created_world_class_gate["status"] == "pass", created_world_class_gate
|
||||
assert "optional" in created_world_class_gate["detail"], created_world_class_gate
|
||||
created_architecture_gate = next(
|
||||
item for item in review_studio_result["payload"]["gates"] if item["key"] == "architecture-maintainability"
|
||||
)
|
||||
assert created_architecture_gate["status"] == "pass", created_architecture_gate
|
||||
assert "optional" in created_architecture_gate["detail"], created_architecture_gate
|
||||
|
||||
review_waivers_result = run(
|
||||
"review-waivers",
|
||||
@@ -673,6 +694,7 @@ def main() -> None:
|
||||
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 "architecture_maintainability" 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
|
||||
|
||||
Reference in New Issue
Block a user