5 targets in platform-neutral contract
diff --git a/README.md b/README.md
index bdda82f..3e5588c 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,7 @@ It turns rough workflows, transcripts, prompts, notes, and runbooks into reusabl
- three high-value next iteration directions after the first package is created
- a lightweight feedback log that does not require a full promotion cycle
- a local-first metadata-only adoption and drift report that turns real usage signals into next iteration candidates
+- a Skill Atlas drift layer that reads aggregate adoption reports and surfaces portfolio-level drift signals without packaging raw telemetry logs
- a baseline compare report for with-skill vs baseline review
- a conversation-style, archetype-aware quickstart that steers new packages toward scaffold, production, library, or governed fits
- Skill IR as the platform-neutral semantic contract, plus compiler reports and client-specific adapters
@@ -406,7 +407,7 @@ Utility scripts that make the meta-skill operational:
- `render_review_annotations.py`: records reviewer annotations tied to Review Studio gates, source/report paths, and optional line numbers, with open blocker annotations reflected in Review Studio decisions
- `run_conformance_suite.py`: verifies runtime conformance for OpenAI, Claude, Agent Skills, VS Code/Copilot-style, and generic targets
- `trust_check.py`: generates the trust/security report for scripts, dependencies, secret risk, bounded network host policy, execution-level `--help` smoke checks, permission inputs, trust metadata, and stable source-contract integrity
-- `build_skill_atlas.py`: builds the Skill Atlas catalog, route-overlap matrix, dependency graph, stale report, owner gaps, and HTML overview for a multi-skill workspace
+- `build_skill_atlas.py`: builds the Skill Atlas catalog, route-overlap matrix, dependency graph, stale report, owner gaps, aggregate drift signals, and HTML overview for a multi-skill workspace
- `registry_audit.py`: builds registry package metadata and audits version, owner, license, checksum, Skill IR source, and compatibility matrix
- `verify_package.py`: verifies generated package manifests, target adapters, zip archive safety, archive checksum, and registry parity
- `simulate_install.py`: extracts a generated zip into a temporary skill root and verifies entrypoint, manifest, interface, reports, and adapters can be loaded
diff --git a/docs/migration-v2.md b/docs/migration-v2.md
index 0b4a349..7189997 100644
--- a/docs/migration-v2.md
+++ b/docs/migration-v2.md
@@ -41,6 +41,8 @@ This document tracks the first migration path from Yao Meta Skill 1.x to the Ski
python3 scripts/build_skill_atlas.py --workspace-root . --output-dir skill_atlas --report-html reports/skill_atlas.html --report-json reports/skill_atlas.json
```
+ This also writes `skill_atlas/drift_signals.json` from aggregate `reports/adoption_drift_report.json` files. Do not migrate or publish raw `reports/telemetry_events.jsonl` logs.
+
5. Keep legacy trigger eval gates intact while output eval coverage grows.
6. Move adapter-specific logic toward future compiler commands after IR fields are stable.
diff --git a/references/skill-atlas-method.md b/references/skill-atlas-method.md
index a0f0455..9c58043 100644
--- a/references/skill-atlas-method.md
+++ b/references/skill-atlas-method.md
@@ -16,6 +16,7 @@ Single-skill quality is not enough for a team library. A skill portfolio also ne
- Flag missing owner or review metadata.
- Flag stale skills based on `updated_at` and `review_cadence`.
- Extract no-route opportunities from failure notes.
+- Read aggregate adoption drift reports and flag telemetry drift without reading raw telemetry logs.
## Scope Policy
@@ -23,6 +24,12 @@ Atlas keeps a full catalog, but release gates should distinguish actionable libr
Use `skill_atlas/policy.json` to mark path prefixes as non-actionable when they are intentionally retained as examples, evolution snapshots, embedded generated skills, or validator fixtures. Non-actionable items still appear in the full report, route matrix, stale list, and owner gap list, but Review Studio should use the actionable counts for release readiness.
+## Telemetry Link
+
+Atlas may read each skill's aggregate `reports/adoption_drift_report.json` to surface portfolio drift signals such as no telemetry for production/library/governed skills, missed triggers, bad outputs, missing resources, script errors, and review-overdue counts. It must not read or package `reports/telemetry_events.jsonl`; raw telemetry remains local-only evidence owned by the skill.
+
+Write drift output to `skill_atlas/drift_signals.json`. Non-actionable scopes stay visible in that file and in the HTML report, but only actionable drift signals should affect release readiness.
+
## Reviewer Gate
-Use Atlas before promoting a single skill into a shared library. If an actionable route collision, missing owner, or stale governed skill appears, fix the portfolio boundary before adding more local complexity to one skill. Non-actionable issues should stay visible as evidence, not as release blockers.
+Use Atlas before promoting a single skill into a shared library. If an actionable route collision, missing owner, stale governed skill, or telemetry drift signal appears, fix the portfolio boundary before adding more local complexity to one skill. Non-actionable issues should stay visible as evidence, not as release blockers.
diff --git a/references/telemetry-drift-method.md b/references/telemetry-drift-method.md
index 8633108..071bbb2 100644
--- a/references/telemetry-drift-method.md
+++ b/references/telemetry-drift-method.md
@@ -54,7 +54,12 @@ Package builders should exclude `reports/telemetry_events.jsonl`. The root repos
4. Convert bad outputs into Output Eval assertions and failure taxonomy entries.
5. Convert script errors into non-interactive smoke tests.
6. Feed review-overdue signals back into Skill Atlas and owner review.
+7. Let Skill Atlas read only `reports/adoption_drift_report.json` and publish portfolio-level `skill_atlas/drift_signals.json`.
## Review Studio Role
Review Studio should show the aggregate telemetry gate as an operating loop, not as raw logs. A blocker means the telemetry contract was violated. A warning means the evidence is absent or the drift signal needs a follow-up case.
+
+## Skill Atlas Role
+
+Skill Atlas uses aggregate adoption drift reports to rank portfolio work. It should surface no-data warnings for actionable production/library/governed skills, and drift warnings for missed triggers, wrong triggers, bad outputs, missing resources, script errors, and review-overdue counts. It must not inspect raw JSONL telemetry or use non-actionable example/fixture signals as release blockers.
diff --git a/registry/index.json b/registry/index.json
index 95d8dac..052a2d4 100644
--- a/registry/index.json
+++ b/registry/index.json
@@ -16,7 +16,7 @@
"vscode"
],
"package_metadata": "registry/packages/yao-meta-skill.json",
- "package_sha256": "7a8dab0d542d2994adec2045b54559612db36f14db8b7b66e4138fb0435ae3d3"
+ "package_sha256": "ad55cf77f6b8faf7381b78372a93189c26e0e1833257bf7b508afd7ffdf0fbbb"
}
]
}
diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json
index 17cd7b3..b097001 100644
--- a/registry/packages/yao-meta-skill.json
+++ b/registry/packages/yao-meta-skill.json
@@ -16,8 +16,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "7a8dab0d542d2994adec2045b54559612db36f14db8b7b66e4138fb0435ae3d3",
- "archive_sha256": "176d93befb446985aaff7cd8325b05c4858da13177cb13db82d210aa2d264060"
+ "package_sha256": "ad55cf77f6b8faf7381b78372a93189c26e0e1833257bf7b508afd7ffdf0fbbb",
+ "archive_sha256": "23112632363494d9fcb52b0253bb23ffc9111e2dec2df0e9b06e3a49f304ff20"
},
"compatibility": {
"openai": "pass",
@@ -48,7 +48,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "176d93befb446985aaff7cd8325b05c4858da13177cb13db82d210aa2d264060",
+ "archive_sha256": "23112632363494d9fcb52b0253bb23ffc9111e2dec2df0e9b06e3a49f304ff20",
"package_verification": "reports/package_verification.json",
"install_simulated": true,
"install_simulation": "reports/install_simulation.json"
diff --git a/reports/adoption_drift_report.json b/reports/adoption_drift_report.json
index 4f92a9f..d2a13ef 100644
--- a/reports/adoption_drift_report.json
+++ b/reports/adoption_drift_report.json
@@ -1,7 +1,7 @@
{
"ok": true,
"schema_version": "2.0",
- "generated_at": "2026-06-13T12:15:07Z",
+ "generated_at": "2026-06-13T12:26:25Z",
"skill_dir": ".",
"privacy_contract": {
"storage": "local-first",
diff --git a/reports/context_budget.json b/reports/context_budget.json
index 0f17dd4..f9c3c9a 100644
--- a/reports/context_budget.json
+++ b/reports/context_budget.json
@@ -6,10 +6,10 @@
"context_budget_tier": "production",
"context_budget_limit": 1000,
"skill_body_tokens": 751,
- "other_text_tokens": 905782,
+ "other_text_tokens": 910665,
"estimated_initial_load_tokens": 944,
- "estimated_total_text_tokens": 906533,
- "relevant_file_count": 386,
+ "estimated_total_text_tokens": 911416,
+ "relevant_file_count": 388,
"unused_resource_dirs": [],
"quality_signal_points": 130,
"quality_density": 137.7
diff --git a/reports/install_simulation.json b/reports/install_simulation.json
index d24dfa8..5707372 100644
--- a/reports/install_simulation.json
+++ b/reports/install_simulation.json
@@ -8,7 +8,7 @@
"installed_skill_dir": "dist/install-simulation/simulate-yao-meta-skill/yao-meta-skill",
"summary": {
"archive_present": true,
- "archive_entry_count": 493,
+ "archive_entry_count": 494,
"archive_extracted": true,
"entrypoint_loaded": true,
"manifest_loaded": true,
diff --git a/reports/output_execution_runs.json b/reports/output_execution_runs.json
index b2a6fec..33a74b8 100644
--- a/reports/output_execution_runs.json
+++ b/reports/output_execution_runs.json
@@ -34,7 +34,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 28.86,
+ "duration_ms": 31.8,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -62,7 +62,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 28.72,
+ "duration_ms": 31.63,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -85,7 +85,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 29.59,
+ "duration_ms": 30.68,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -113,7 +113,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 30.19,
+ "duration_ms": 32.69,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -136,7 +136,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 31.03,
+ "duration_ms": 32.73,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -164,7 +164,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 29.71,
+ "duration_ms": 34.03,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -187,7 +187,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 32.23,
+ "duration_ms": 34.95,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -214,7 +214,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 31.55,
+ "duration_ms": 34.6,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -237,7 +237,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 32.21,
+ "duration_ms": 33.14,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -266,7 +266,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 31.89,
+ "duration_ms": 36.79,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
diff --git a/reports/output_execution_runs.md b/reports/output_execution_runs.md
index 4261e1e..ad89098 100644
--- a/reports/output_execution_runs.md
+++ b/reports/output_execution_runs.md
@@ -23,16 +23,16 @@ Command runner evidence is present. This proves the eval harness executed an ext
| Case | Variant | Mode | Model | Duration ms | Tokens | Score | Status |
| --- | --- | --- | --- | ---: | ---: | ---: | --- |
-| skill-package-contract | baseline | command | local-output-eval-runner | 28.86 | 33 | 0.0 | pass |
-| skill-package-contract | with_skill | command | local-output-eval-runner | 28.72 | 73 | 100.0 | pass |
-| output-eval-expectation | baseline | command | local-output-eval-runner | 29.59 | 36 | 0.0 | pass |
-| output-eval-expectation | with_skill | command | local-output-eval-runner | 30.19 | 80 | 100.0 | pass |
-| ir-before-packaging | baseline | command | local-output-eval-runner | 31.03 | 33 | 0.0 | pass |
-| ir-before-packaging | with_skill | command | local-output-eval-runner | 29.71 | 80 | 100.0 | pass |
-| near-neighbor-boundary | baseline | command | local-output-eval-runner | 32.23 | 36 | 0.0 | pass |
-| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 31.55 | 65 | 100.0 | pass |
-| file-backed-governed-package | baseline | command | local-output-eval-runner | 32.21 | 37 | 0.0 | pass |
-| file-backed-governed-package | with_skill | command | local-output-eval-runner | 31.89 | 98 | 100.0 | pass |
+| skill-package-contract | baseline | command | local-output-eval-runner | 31.8 | 33 | 0.0 | pass |
+| skill-package-contract | with_skill | command | local-output-eval-runner | 31.63 | 73 | 100.0 | pass |
+| output-eval-expectation | baseline | command | local-output-eval-runner | 30.68 | 36 | 0.0 | pass |
+| output-eval-expectation | with_skill | command | local-output-eval-runner | 32.69 | 80 | 100.0 | pass |
+| ir-before-packaging | baseline | command | local-output-eval-runner | 32.73 | 33 | 0.0 | pass |
+| ir-before-packaging | with_skill | command | local-output-eval-runner | 34.03 | 80 | 100.0 | pass |
+| near-neighbor-boundary | baseline | command | local-output-eval-runner | 34.95 | 36 | 0.0 | pass |
+| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 34.6 | 65 | 100.0 | pass |
+| file-backed-governed-package | baseline | command | local-output-eval-runner | 33.14 | 37 | 0.0 | pass |
+| file-backed-governed-package | with_skill | command | local-output-eval-runner | 36.79 | 98 | 100.0 | pass |
## Next Fixes
diff --git a/reports/package_verification.json b/reports/package_verification.json
index 5140cd1..4c9e15d 100644
--- a/reports/package_verification.json
+++ b/reports/package_verification.json
@@ -8,8 +8,8 @@
"target_count": 4,
"adapter_count": 4,
"archive_present": true,
- "archive_sha256": "176d93befb446985aaff7cd8325b05c4858da13177cb13db82d210aa2d264060",
- "archive_entry_count": 493,
+ "archive_sha256": "23112632363494d9fcb52b0253bb23ffc9111e2dec2df0e9b06e3a49f304ff20",
+ "archive_entry_count": 494,
"failure_count": 0,
"warning_count": 0
},
diff --git a/reports/package_verification.md b/reports/package_verification.md
index fec4655..e4ab673 100644
--- a/reports/package_verification.md
+++ b/reports/package_verification.md
@@ -4,7 +4,7 @@
- Package directory: `dist`
- Targets: `4 / 4` adapters present
- Archive present: `True`
-- Archive SHA256: `176d93befb446985aaff7cd8325b05c4858da13177cb13db82d210aa2d264060`
+- Archive SHA256: `23112632363494d9fcb52b0253bb23ffc9111e2dec2df0e9b06e3a49f304ff20`
- Failures: `0`
- Warnings: `0`
diff --git a/reports/registry_audit.json b/reports/registry_audit.json
index 0d976ec..e731b25 100644
--- a/reports/registry_audit.json
+++ b/reports/registry_audit.json
@@ -21,8 +21,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "7a8dab0d542d2994adec2045b54559612db36f14db8b7b66e4138fb0435ae3d3",
- "archive_sha256": "176d93befb446985aaff7cd8325b05c4858da13177cb13db82d210aa2d264060"
+ "package_sha256": "ad55cf77f6b8faf7381b78372a93189c26e0e1833257bf7b508afd7ffdf0fbbb",
+ "archive_sha256": "23112632363494d9fcb52b0253bb23ffc9111e2dec2df0e9b06e3a49f304ff20"
},
"compatibility": {
"openai": "pass",
@@ -53,7 +53,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "176d93befb446985aaff7cd8325b05c4858da13177cb13db82d210aa2d264060",
+ "archive_sha256": "23112632363494d9fcb52b0253bb23ffc9111e2dec2df0e9b06e3a49f304ff20",
"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": "7a8dab0d542d2994adec2045b54559612db36f14db8b7b66e4138fb0435ae3d3"
+ "package_sha256": "ad55cf77f6b8faf7381b78372a93189c26e0e1833257bf7b508afd7ffdf0fbbb"
}
]
},
diff --git a/reports/registry_audit.md b/reports/registry_audit.md
index ab68f06..89523c5 100644
--- a/reports/registry_audit.md
+++ b/reports/registry_audit.md
@@ -6,8 +6,8 @@
- Maturity: `governed`
- Owner: `Yao Team`
- License: `MIT`
-- Package SHA256: `7a8dab0d542d2994adec2045b54559612db36f14db8b7b66e4138fb0435ae3d3`
-- Archive SHA256: `176d93befb446985aaff7cd8325b05c4858da13177cb13db82d210aa2d264060`
+- Package SHA256: `ad55cf77f6b8faf7381b78372a93189c26e0e1833257bf7b508afd7ffdf0fbbb`
+- Archive SHA256: `23112632363494d9fcb52b0253bb23ffc9111e2dec2df0e9b06e3a49f304ff20`
- Install simulated: `True`
## Compatibility
diff --git a/reports/review-studio.html b/reports/review-studio.html
index a8493c0..c7d40e8 100644
--- a/reports/review-studio.html
+++ b/reports/review-studio.html
@@ -242,12 +242,12 @@
5 targets in platform-neutral contract target contracts compiled from Skill IR 5 cases; 1 file-backed command 10; model 0; recorded 0 review pairs hide baseline vs with-skill labels adjudication decisions; pending 5 target conformance pass rate 0 native enforcement targets 69 scripts scanned; secrets found 12 scanned skills; route collisions 1 metadata events; 0 missed triggers 0 gates covered; human risk decisions 0 open blocker annotations 5 targets; MIT license 493 zip entries; package verification 4 adapters readable; local install simulation declared minor; 0 breaking changes 5 targets in platform-neutral contract target contracts compiled from Skill IR 5 cases; 1 file-backed command 10; model 0; recorded 0 review pairs hide baseline vs with-skill labels adjudication decisions; pending 5 target conformance pass rate 0 native enforcement targets 69 scripts scanned; secrets found 12 scanned skills; route collisions 1 metadata events; 0 missed triggers 0 gates covered; human risk decisions 0 open blocker annotations 5 targets; MIT license 494 zip entries; package verification 4 adapters readable; local install simulation declared minor; 0 breaking changes intent confidence 100/100; Intent is clear enough to package the first routeable version. 13 trigger cases; 0 misroutes; 0 ambiguous 5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5 initial load 944/1000; quality density 137.7 5 / 5 targets pass 0 secrets; 69 scripts; 3 network-capable scripts; 0 help smoke failures 3/3 permissions approved; gaps 0; required file_write, network, subprocess 4/4 targets probed; native 0; metadata fallback 4; residual risks 4 12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 24 scoped non-actionable issues 1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low 0 active waivers; 1 warning gates still need reviewer decision yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters 0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended intent confidence 100/100; Intent is clear enough to package the first routeable version. 13 trigger cases; 0 misroutes; 0 ambiguous 5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5 initial load 944/1000; quality density 137.7 5 / 5 targets pass 0 secrets; 69 scripts; 3 network-capable scripts; 0 help smoke failures 3/3 permissions approved; gaps 0; required file_write, network, subprocess 4/4 targets probed; native 0; metadata fallback 4; residual risks 4 12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues 1 metadata events; adoption 0; missed 0; bad-output 0; risk low 0 active waivers; 1 warning gates still need reviewer decision yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters 0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended核心指标
- 审查闸门
- 意图画布
触发实验
输出实验
上下文
运行矩阵
信任报告
权限批准
权限探针
组合治理
运营回路
人工批准
注册审计
发布路线
意图画布
触发实验
输出实验
上下文
运行矩阵
信任报告
权限批准
权限探针
组合治理
运营回路
人工批准
注册审计
发布路线
13 trigger cases; 0 misroutes; 0 ambiguous
2109ae8e212111b1619d8d728e54c73425fecc174113b45629c656ecceb3faddad55cf77f6b8faf7381b78372a93189c26e0e1833257bf7b508afd7ffdf0fbbb高风险 secret、远程 inline execution、缺失依赖策略或无法解释的脚本接口应阻断 governed release。
12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 24 scoped non-actionable issues
12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues
优先处理真实 portfolio 中的 duplicate names、stale skills、owner gaps,再用运营回路判断真实影响。
1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low
1 metadata events; adoption 0; missed 0; bad-output 0; risk low
yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters
176d93befb446985aaff7cd8325b05c4858da13177cb13db82d210aa2d26406023112632363494d9fcb52b0253bb23ffc9111e2dec2df0e9b06e3a49f304ff200 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended
176d93befb446985aaff7cd8325b05c4858da13177cb13db82d210aa2d26406023112632363494d9fcb52b0253bb23ffc9111e2dec2df0e9b06e3a49f304ff20