diff --git a/AGENTS.md b/AGENTS.md index 7a0c1f6..0731ea5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -102,6 +102,7 @@ Clean test-only scratch directories after verification with `find tests -maxdept - `scripts/yao.py`: unified CLI orchestration. Keep command behavior stable; move pure config and side-effect-free helpers into small internal modules. - `scripts/render_skill_overview.py`: v2 bilingual skill overview report. Preserve `reports/skill-overview.html` / `.json`, `body data-report-lang="zh-CN"`, default Simplified Chinese, English switch, and inline-chart/no-external-dependency behavior. +- `scripts/skill_report_layout.py` plus `assets/skill-overview.css` / `assets/skill-overview.js`: overview report layout contract and inline assets. Keep the generated report single-file at render time, but keep long CSS/JS source in `assets/` instead of embedding it inside Python. - `scripts/render_review_studio.py`: Review Studio gate orchestration. Keep gate scoring, evidence links, and action generation separate from layout helpers. - `scripts/review_studio_layout.py`: Review Studio static layout and CSS contract. - `scripts/review_studio_formatting.py`: Review Studio dictionary-to-panel formatting and Chinese metric labels. diff --git a/assets/skill-overview.css b/assets/skill-overview.css new file mode 100644 index 0000000..916d007 --- /dev/null +++ b/assets/skill-overview.css @@ -0,0 +1,729 @@ +:root { + --paper: #ffffff; + --wash: #f8fafc; + --wash-strong: #f2f5f8; + --line: #e6e0d4; + --line-soft: #eee9df; + --brand: #1B365D; + --brand-soft: #EEF3F8; + --brand-mid: #315982; + --ink: #151515; + --text: #2f2d29; + --muted: #68625a; + --faint: #8b857b; + --success: #2f6f5e; + --warn: #8a5a19; + --serif: "TsangerJinKai02", "Source Han Serif SC", "Noto Serif CJK SC", "Songti SC", "STSong", Charter, Georgia, serif; + --mono: "JetBrains Mono", "SF Mono", ui-monospace, Menlo, Consolas, monospace; + --shadow-soft: 0 1px 2px rgba(27, 54, 93, 0.06), 0 16px 44px rgba(27, 54, 93, 0.08); + } + * { box-sizing: border-box; } + html { scroll-behavior: smooth; } + body { + margin: 0; + background: #ffffff; + color: var(--ink); + font-family: var(--serif); + line-height: 1.62; + letter-spacing: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + } + body[data-report-lang="zh-CN"] [data-lang="en"], + body[data-report-lang="en"] [data-lang="zh-CN"] { display: none !important; } + .skip-link { + position: fixed; + left: 18px; + top: 10px; + z-index: 40; + transform: translateY(-140%); + padding: 8px 12px; + border-radius: 8px; + background: var(--brand); + color: #fff; + text-decoration: none; + transition: transform 160ms cubic-bezier(0.16, 1, 0.3, 1); + } + .skip-link:focus-visible { transform: translateY(0); outline: 2px solid var(--brand-mid); outline-offset: 2px; } + .topbar { + position: sticky; + top: 0; + z-index: 20; + background: rgba(255, 255, 255, 0.96); + border-bottom: 1px solid var(--line); + } + .progress-track { + height: 2px; + background: transparent; + } + .progress-bar { + display: block; + width: 100%; + height: 100%; + background: var(--brand); + transition: transform 160ms cubic-bezier(0.16, 1, 0.3, 1); + transform-origin: left center; + transform: scaleX(0); + } + .topbar-inner { + max-width: 1240px; + margin: 0 auto; + padding: 9px 28px; + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 18px; + align-items: center; + } + .nav-shell { + display: grid; + grid-template-columns: auto minmax(0, 1fr); + gap: 18px; + align-items: center; + min-width: 0; + } + .report-mark { + color: var(--brand); + font-family: var(--mono); + font-size: 11px; + line-height: 1; + text-transform: uppercase; + white-space: nowrap; + } + .report-nav { + display: flex; + gap: 4px; + overflow-x: auto; + scrollbar-width: none; + min-width: 0; + } + .report-nav::-webkit-scrollbar { display: none; } + .report-nav a { + flex: 0 0 auto; + min-width: 76px; + min-height: 40px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 10px; + color: var(--brand); + text-decoration: none; + text-align: center; + font-size: 13px; + border-radius: 8px; + white-space: nowrap; + transition-property: background-color, color, transform; + transition-duration: 160ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); + } + @media (hover: hover) { + .report-nav a:hover { background: var(--brand-soft); } + } + .report-nav a:focus-visible { + outline: 2px solid var(--brand-mid); + outline-offset: 2px; + background: var(--brand-soft); + } + .report-nav a[aria-current="true"] { + background: var(--brand); + color: #ffffff; + } + .report-nav a[aria-current="true"] span { color: #ffffff; } + .language-switch { + display: inline-flex; + gap: 3px; + padding: 3px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--paper); + box-shadow: 0 1px 2px rgba(27, 54, 93, 0.05); + } + .language-switch button { + appearance: none; + min-width: 42px; + min-height: 34px; + border: 0; + border-radius: 6px; + padding: 0 10px; + background: transparent; + color: var(--muted); + font: inherit; + font-size: 13px; + cursor: pointer; + transition-property: background-color, color, transform; + transition-duration: 160ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); + } + .language-switch button:active { transform: scale(0.96); } + .language-switch button:focus-visible { outline: 2px solid var(--brand-mid); outline-offset: 2px; } + .language-switch button[aria-pressed="true"] { + background: var(--brand-soft); + color: var(--brand); + } + .wrap { + max-width: 1240px; + margin: 0 auto; + padding: 58px 28px 92px; + } + .hero { + padding: 16px 0 34px; + } + .hero-grid { + display: grid; + grid-template-columns: minmax(0, 1fr) 360px; + gap: 44px; + align-items: end; + } + .eyebrow, .report-mark { + letter-spacing: 0; + } + .eyebrow { + margin: 0 0 12px; + color: var(--brand); + font-family: var(--mono); + font-size: 12px; + text-transform: uppercase; + } + .slug { + margin: 0 0 18px; + color: var(--faint); + font-family: var(--mono); + font-size: 13px; + overflow-wrap: anywhere; + } + h1, h2, h3 { + margin: 0; + font-weight: 500; + letter-spacing: 0; + text-wrap: balance; + } + h1 { + max-width: 8em; + color: var(--ink); + font-size: 4rem; + line-height: 1.02; + } + .lead { + max-width: 760px; + margin: 20px 0 0; + color: var(--text); + font-size: 1.08rem; + text-wrap: pretty; + } + .hero-meta, .badges { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-top: 20px; + } + .hero-meta span, .badges span, .tag { + display: inline-flex; + align-items: center; + min-height: 30px; + padding: 5px 10px; + border-radius: 6px; + background: var(--brand-soft); + color: var(--brand); + font-size: 13px; + font-variant-numeric: tabular-nums; + } + .hero-card { + position: relative; + padding: 22px 22px 24px; + border-radius: 8px; + background: linear-gradient(180deg, #ffffff 0%, #fbfaf7 100%); + box-shadow: var(--shadow-soft); + border: 1px solid var(--line-soft); + } + .hero-card::before { + content: ""; + position: absolute; + top: 18px; + right: 18px; + width: 38px; + height: 2px; + background: var(--brand); + } + .score-strip { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 10px; + margin-top: 32px; + padding-top: 20px; + border-top: 1px solid var(--line); + } + .score-chip { + padding: 14px 14px 12px; + border-radius: 8px; + background: var(--wash); + border: 1px solid var(--line-soft); + } + .score-chip span { + display: block; + color: var(--muted); + font-size: 12px; + } + .score-chip strong { + display: block; + margin: 5px 0 8px; + color: var(--brand); + font-family: var(--mono); + font-size: 1.65rem; + font-weight: 500; + line-height: 1; + font-variant-numeric: tabular-nums; + } + .score-chip i { + display: block; + height: 3px; + border-radius: 999px; + background: linear-gradient(90deg, var(--brand) var(--score), #dfe6ee var(--score)); + } + .score-chip small { + display: block; + margin-top: 8px; + color: var(--muted); + font-size: 12px; + line-height: 1.45; + } + section { + scroll-margin-top: 78px; + padding-top: 44px; + margin-top: 44px; + border-top: 1px solid var(--line); + } + section.hero { + scroll-margin-top: 0; + padding-top: 16px; + margin-top: 0; + border-top: 0; + } + .section-head { + display: grid; + grid-template-columns: minmax(0, 246px) minmax(0, 1fr); + gap: 36px; + align-items: start; + } + h2 { + color: var(--ink); + font-size: 1.5rem; + line-height: 1.18; + } + h2::before { + content: ""; + display: block; + width: 32px; + height: 2px; + margin-bottom: 12px; + background: var(--brand); + } + h3 { + color: var(--ink); + font-size: 1.02rem; + line-height: 1.3; + margin-bottom: 10px; + } + .section-head p { + margin: 12px 0 0; + color: var(--muted); + max-width: 43ch; + text-wrap: pretty; + } + .section-body { + margin-top: 24px; + } + .two-col, .metric-grid, .chart-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; + align-items: stretch; + } + .quality-panels { + margin-top: 16px; + } + .metrics-report { + display: grid; + gap: 22px; + } + .metrics-flow { + display: grid; + gap: 22px; + } + .metrics-primary { + display: grid; + grid-template-columns: minmax(0, 1.2fr) minmax(320px, 0.8fr); + gap: 22px; + align-items: start; + } + .metrics-primary .chart-figure { + min-height: 0; + display: grid; + align-content: center; + } + .metrics-primary .chart-figure svg { + max-height: 520px; + } + .metrics-note { + display: grid; + align-content: start; + gap: 16px; + } + .metrics-note p { + margin: 0; + max-width: none; + color: var(--text); + } + .metric-summary-list { + margin: 0; + padding: 0; + list-style: none; + display: grid; + gap: 10px; + } + .metric-summary-list li { + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + gap: 8px 10px; + align-items: baseline; + padding: 10px 0; + border-bottom: 1px solid var(--line-soft); + } + .metric-summary-list li:last-child { border-bottom: 0; } + .metric-summary-list b { + color: var(--ink); + font-weight: 500; + } + .metric-summary-list em { + color: var(--brand); + font-family: var(--mono); + font-style: normal; + font-variant-numeric: tabular-nums; + } + .metric-summary-list small { + grid-column: 2 / 4; + color: var(--muted); + line-height: 1.5; + overflow-wrap: break-word; + } + .metric-status { + display: inline-flex; + align-items: center; + min-height: 24px; + padding: 2px 7px; + border-radius: 6px; + background: var(--brand-soft); + color: var(--brand); + font-size: 12px; + } + .metric-grid { + margin-top: 2px; + } + .metric-detail-grid { + grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr)); + align-items: stretch; + } + .list, .compact-list, .step-list { + margin: 0; + padding-left: 1.15em; + display: grid; + gap: 8px; + } + .list li::marker, .compact-list li::marker, .step-list li::marker { color: var(--brand); } + .compact-list { + gap: 6px; + font-size: 13.5px; + color: var(--muted); + line-height: 1.55; + } + .compact-list li, .list li, .step-list li { + min-width: 0; + overflow-wrap: break-word; + } + .panel, .metric-card, .roadmap-item { + background: #ffffff; + border: 1px solid var(--line-soft); + border-radius: 8px; + padding: 22px; + box-shadow: 0 1px 2px rgba(27, 54, 93, 0.04); + min-width: 0; + } + .metric-card { + display: grid; + grid-template-columns: 1fr; + gap: 14px; + align-content: start; + min-height: 0; + } + .metric-card-head { + display: flex; + gap: 14px; + align-items: flex-start; + justify-content: space-between; + } + .metric-card strong { + display: block; + margin: 0; + color: var(--brand); + font-family: var(--mono); + font-size: 2rem; + font-weight: 500; + line-height: 1; + font-variant-numeric: tabular-nums; + } + .metric-label { + color: var(--muted); + font-size: 13px; + line-height: 1.45; + } + .metric-card-body { + min-width: 0; + } + .metric-card-body .compact-list { + gap: 7px; + max-width: 62ch; + } + .metric-card-body .compact-list li { + overflow-wrap: break-word; + word-break: normal; + } + .chart-figure { + margin: 0; + padding: 18px; + border: 1px solid var(--line-soft); + border-radius: 8px; + background: #ffffff; + box-shadow: 0 1px 2px rgba(27, 54, 93, 0.04); + } + .chart-figure svg { + width: 100%; + height: auto; + display: block; + overflow: visible; + } + .chart-figure text { + fill: var(--ink); + font-family: var(--serif); + font-size: 13px; + } + .chart-title { + fill: var(--brand); + font-size: 16px; + font-weight: 500; + } + .chart-line { + fill: none; + stroke: var(--brand); + stroke-width: 2; + } + figcaption { + margin-top: 12px; + padding-top: 10px; + border-top: 1px solid var(--line-soft); + color: var(--muted); + font-size: 13px; + line-height: 1.5; + text-wrap: pretty; + } + table { + width: 100%; + border-collapse: collapse; + font-size: 14px; + } + th, td { + padding: 12px 10px; + text-align: left; + border-bottom: 1px solid var(--line-soft); + vertical-align: top; + } + th { + color: var(--brand); + font-weight: 500; + font-size: 12px; + } + td:first-child, th:first-child { width: 96px; } + .world-readiness { + margin-top: 16px; + display: grid; + gap: 16px; + } + .section-head > .world-readiness { + grid-column: 2; + } + .world-readiness-head { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 16px; + align-items: start; + } + .world-readiness-head p { + margin-top: 8px; + max-width: 72ch; + } + .world-status { + display: inline-flex; + align-items: center; + min-height: 30px; + padding: 4px 10px; + border-radius: 6px; + background: var(--brand-soft); + color: var(--brand); + font-size: 13px; + white-space: nowrap; + } + .evidence-kpis { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 10px; + } + .evidence-kpi { + padding: 14px; + border: 1px solid var(--line-soft); + border-radius: 8px; + background: var(--wash); + min-width: 0; + } + .evidence-kpi span { + display: block; + color: var(--muted); + font-size: 12px; + } + .evidence-kpi strong { + display: block; + margin-top: 4px; + color: var(--brand); + font-family: var(--mono); + font-size: 1.5rem; + font-weight: 500; + line-height: 1; + font-variant-numeric: tabular-nums; + } + .evidence-kpi small { + display: block; + margin-top: 8px; + color: var(--muted); + line-height: 1.45; + overflow-wrap: break-word; + } + .evidence-list { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; + } + .evidence-item { + padding: 14px; + border: 1px solid var(--line-soft); + border-radius: 8px; + background: #ffffff; + min-width: 0; + } + .evidence-item span { + color: var(--brand); + font-family: var(--mono); + font-size: 11px; + text-transform: uppercase; + } + .evidence-item h4 { + margin: 4px 0 8px; + color: var(--ink); + font-size: 1rem; + font-weight: 500; + line-height: 1.3; + } + .evidence-item h5 { + margin: 12px 0 6px; + color: var(--brand); + font-size: 12px; + font-weight: 500; + } + .evidence-item p { + margin: 0; + max-width: none; + color: var(--muted); + overflow-wrap: break-word; + } + .blocked-checks { + margin: 0; + padding-left: 1.05em; + color: var(--muted); + font-size: 13px; + line-height: 1.45; + } + .blocked-checks li { + overflow-wrap: break-word; + } + .blocked-checks li::marker { + color: var(--brand); + } + .blocked-checks-empty { + font-size: 13px; + } + .roadmap { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 16px; + } + .step { + display: inline-flex; + margin-bottom: 12px; + min-height: 28px; + align-items: center; + padding: 3px 8px; + border-radius: 6px; + background: var(--brand-soft); + color: var(--brand); + font-size: 12px; + } + .unlock { + margin-top: 14px; + color: var(--muted); + font-size: 13px; + } + @media (max-width: 980px) { + .topbar-inner { + grid-template-columns: minmax(0, 1fr) auto; + padding: 8px 16px; + } + .nav-shell { grid-template-columns: 1fr; gap: 6px; } + .report-mark { display: none; } + .report-nav a { min-width: 72px; } + .hero-grid, .section-head { grid-template-columns: 1fr; } + .section-head > .world-readiness { grid-column: auto; } + .hero-grid { gap: 24px; } + .score-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .metrics-primary, .two-col, .metric-grid, .chart-grid, .roadmap { grid-template-columns: 1fr; } + .evidence-list { grid-template-columns: 1fr; } + .metric-card { grid-template-columns: 86px minmax(0, 1fr); } + h1 { font-size: 2.75rem; } + } + @media (max-width: 540px) { + .wrap { padding: 34px 16px 72px; } + .topbar-inner { gap: 10px; } + .report-nav { + display: flex; + gap: 2px; + } + .report-nav a { + min-width: 66px; + min-height: 38px; + padding: 0 8px; + font-size: 12px; + } + .language-switch button { min-width: 38px; min-height: 32px; padding: 0 8px; } + .hero { padding-top: 8px; } + h1 { max-width: 8em; font-size: 2.35rem; } + .lead { font-size: 1rem; } + .hero-meta span, .badges span { font-size: 12px; } + .score-strip { grid-template-columns: 1fr; } + section { margin-top: 34px; padding-top: 34px; } + .panel, .metric-card, .roadmap-item, .chart-figure, .hero-card { padding: 18px; } + .world-readiness-head, .evidence-kpis { grid-template-columns: 1fr; } + .metric-card { grid-template-columns: 1fr; gap: 10px; } + .metric-card strong { margin-bottom: 2px; } + .metric-summary-list li { grid-template-columns: auto minmax(0, 1fr) auto; } + table { font-size: 13px; } + th, td { padding: 10px 7px; } + } + @media (prefers-reduced-motion: reduce) { + html { scroll-behavior: auto; } + *, *::before, *::after { transition-duration: 0.01ms !important; } + } diff --git a/assets/skill-overview.js b/assets/skill-overview.js new file mode 100644 index 0000000..eaf9ef4 --- /dev/null +++ b/assets/skill-overview.js @@ -0,0 +1,37 @@ +(function () { + var buttons = Array.prototype.slice.call(document.querySelectorAll("[data-set-lang]")); + var navLinks = Array.prototype.slice.call(document.querySelectorAll(".report-nav a")); + var sections = navLinks + .map(function (link) { return document.querySelector(link.getAttribute("href")); }) + .filter(Boolean); + var progressBar = document.querySelector(".progress-bar"); + function setLanguage(lang) { + document.body.setAttribute("data-report-lang", lang); + document.documentElement.setAttribute("lang", lang); + buttons.forEach(function (button) { + button.setAttribute("aria-pressed", button.getAttribute("data-set-lang") === lang ? "true" : "false"); + }); + } + function updateProgress() { + var scrollTop = window.scrollY || document.documentElement.scrollTop; + var height = Math.max(1, document.documentElement.scrollHeight - window.innerHeight); + var pct = Math.min(100, Math.max(0, (scrollTop / height) * 100)); + if (progressBar) progressBar.style.transform = "scaleX(" + pct / 100 + ")"; + var active = sections[0]; + sections.forEach(function (section) { + if (section.getBoundingClientRect().top <= 110) active = section; + }); + navLinks.forEach(function (link) { + link.setAttribute("aria-current", link.getAttribute("href") === "#" + active.id ? "true" : "false"); + }); + } + buttons.forEach(function (button) { + button.addEventListener("click", function () { + setLanguage(button.getAttribute("data-set-lang")); + }); + }); + window.addEventListener("scroll", updateProgress, { passive: true }); + window.addEventListener("resize", updateProgress); + setLanguage("zh-CN"); + updateProgress(); + })(); diff --git a/registry/index.json b/registry/index.json index ff40998..42f56c9 100644 --- a/registry/index.json +++ b/registry/index.json @@ -16,7 +16,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "00efa72ae52906f680980aa05c3e4205d9556654e7a14c5fcc1bdc8eb2a81313" + "package_sha256": "8db4f8cfb8963484c2afb548453c44adca024b726e3f8cbd2ce1dcd4411cadfa" } ] } diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json index 9052768..8b9d272 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": "00efa72ae52906f680980aa05c3e4205d9556654e7a14c5fcc1bdc8eb2a81313", - "archive_sha256": "d26f3390edd0335f75fe05f77fd65d40541728fdb1d0779419cd9dce077a4034" + "package_sha256": "8db4f8cfb8963484c2afb548453c44adca024b726e3f8cbd2ce1dcd4411cadfa", + "archive_sha256": "167bcde6bde563dfbffa949455c36bb55a70c4e7573bf166d9a4beb36cb95407" }, "compatibility": { "openai": "pass", @@ -48,7 +48,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "d26f3390edd0335f75fe05f77fd65d40541728fdb1d0779419cd9dce077a4034", + "archive_sha256": "167bcde6bde563dfbffa949455c36bb55a70c4e7573bf166d9a4beb36cb95407", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" diff --git a/reports/architecture_maintainability.json b/reports/architecture_maintainability.json index 9319413..a82def8 100644 --- a/reports/architecture_maintainability.json +++ b/reports/architecture_maintainability.json @@ -16,7 +16,7 @@ "watch_line_threshold": 720, "block_line_threshold": 1500, "largest_file_lines": 899, - "watchlist_count": 10, + "watchlist_count": 9, "hotspot_count": 0, "blocker_count": 0, "decision": "pass" @@ -50,13 +50,6 @@ "severity": "pass", "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." }, - { - "path": "scripts/skill_report_layout.py", - "lines": 808, - "kind": "internal-module", - "severity": "pass", - "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." - }, { "path": "scripts/skill_report_model.py", "lines": 800, @@ -105,6 +98,13 @@ "kind": "cli-script", "severity": "pass", "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/review_studio_layout.py", + "lines": 694, + "kind": "internal-module", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." } ], "watchlist": [ @@ -136,13 +136,6 @@ "severity": "pass", "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." }, - { - "path": "scripts/skill_report_layout.py", - "lines": 808, - "kind": "internal-module", - "severity": "pass", - "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." - }, { "path": "scripts/skill_report_model.py", "lines": 800, diff --git a/reports/architecture_maintainability.md b/reports/architecture_maintainability.md index f619cf8..2471c36 100644 --- a/reports/architecture_maintainability.md +++ b/reports/architecture_maintainability.md @@ -15,7 +15,7 @@ Generated at: `2026-06-16` - command modules: `6` - largest file lines: `899` - watch threshold lines: `720` -- watchlist: `10` +- watchlist: `9` - hotspots: `0` - blockers: `0` @@ -33,7 +33,6 @@ No file-size hotspots found. | `scripts/yao_cli_parser.py` | `870` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. | | `scripts/render_evidence_consistency.py` | `859` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. | | `tests/verify_world_class_evidence_intake.py` | `842` | `test` | Break broad integration assertions into focused verifier helpers when the next behavior change lands. | -| `scripts/skill_report_layout.py` | `808` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. | | `scripts/skill_report_model.py` | `800` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. | | `tests/verify_review_studio.py` | `784` | `test` | Break broad integration assertions into focused verifier helpers when the next behavior change lands. | | `scripts/build_skill_atlas.py` | `730` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. | @@ -48,7 +47,6 @@ No file-size hotspots found. | `scripts/yao_cli_parser.py` | `870` | `internal-module` | `pass` | | `scripts/render_evidence_consistency.py` | `859` | `cli-script` | `pass` | | `tests/verify_world_class_evidence_intake.py` | `842` | `test` | `pass` | -| `scripts/skill_report_layout.py` | `808` | `internal-module` | `pass` | | `scripts/skill_report_model.py` | `800` | `internal-module` | `pass` | | `tests/verify_review_studio.py` | `784` | `test` | `pass` | | `scripts/build_skill_atlas.py` | `730` | `cli-script` | `pass` | @@ -56,6 +54,7 @@ No file-size hotspots found. | `scripts/optimize_description.py` | `723` | `cli-script` | `pass` | | `scripts/trust_check.py` | `714` | `internal-module` | `pass` | | `scripts/apply_adaptation.py` | `706` | `cli-script` | `pass` | +| `scripts/review_studio_layout.py` | `694` | `internal-module` | `pass` | ## Release Rule diff --git a/reports/compiled_targets.json b/reports/compiled_targets.json index 01a1f79..0fbe6c9 100644 --- a/reports/compiled_targets.json +++ b/reports/compiled_targets.json @@ -142,6 +142,7 @@ "references/skill-atlas-method.md", "references/skill-engineering-method.md", "references/skill-ir-method.md", + "references/skillops-decision-policy.md", "references/systems-thinking-doctrine.md", "references/telemetry-drift-method.md", "references/trust-security-method.md", @@ -167,6 +168,7 @@ "scripts/github_benchmark_scan.py", "scripts/governance_check.py", "scripts/html_rendering.py", + "scripts/import_output_review_decisions.py", "scripts/import_telemetry_events.py", "scripts/init_skill.py", "scripts/judge_blind_eval.py", @@ -187,6 +189,7 @@ "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", "scripts/render_context_reports.py", + "scripts/render_daily_skillops_report.py", "scripts/render_description_drift_history.py", "scripts/render_eval_dashboard.py", "scripts/render_evidence_consistency.py", @@ -211,6 +214,7 @@ "scripts/render_social_preview.py", "scripts/render_system_model.py", "scripts/render_telemetry_hook_recipes.py", + "scripts/render_weekly_curator_report.py", "scripts/render_world_class_claim_guard.py", "scripts/render_world_class_evidence_intake.py", "scripts/render_world_class_evidence_ledger.py", @@ -226,6 +230,7 @@ "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", "scripts/review_studio_output_review.py", + "scripts/review_studio_skillops.py", "scripts/review_studio_waivers.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", @@ -242,6 +247,7 @@ "scripts/skill_report_metrics.py", "scripts/skill_report_model.py", "scripts/skill_report_world_class.py", + "scripts/skillops_opportunity.py", "scripts/summarize_user_signals.py", "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", @@ -252,6 +258,8 @@ "scripts/verify_package.py", "scripts/world_class_evidence_contract.py", "scripts/world_class_source_checks.py", + "scripts/world_class_submission_kit_rendering.py", + "scripts/world_class_submission_matrix.py", "scripts/yao.py", "scripts/yao_cli_adaptation_commands.py", "scripts/yao_cli_config.py", @@ -264,6 +272,8 @@ "scripts/yao_cli_telemetry.py" ], "assets": [ + "assets/skill-overview.css", + "assets/skill-overview.js", "templates/basic_skill.md.j2", "templates/complex_skill.md.j2" ], @@ -313,9 +323,9 @@ "reports/governance_score.json" ], "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 } }, @@ -584,9 +594,9 @@ "resources": { "strategy": "Ship the neutral source tree and expose OpenAI-facing interface metadata as a generated companion file.", "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 }, "generated_files": [ @@ -596,7 +606,7 @@ }, "scripts": { "strategy": "Keep scripts as local package resources; expose help-smoke and permission metadata for reviewer approval before execution.", - "script_count": 114, + "script_count": 121, "help_smoke_failed_count": 0 }, "permissions": { @@ -838,9 +848,9 @@ "resources": { "strategy": "Ship the neutral source tree and expose OpenAI-facing interface metadata as a generated companion file.", "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 }, "generated_files": [ @@ -850,7 +860,7 @@ }, "scripts": { "strategy": "Keep scripts as local package resources; expose help-smoke and permission metadata for reviewer approval before execution.", - "script_count": 114, + "script_count": 121, "help_smoke_failed_count": 0 }, "permissions": { @@ -1049,6 +1059,7 @@ "references/skill-atlas-method.md", "references/skill-engineering-method.md", "references/skill-ir-method.md", + "references/skillops-decision-policy.md", "references/systems-thinking-doctrine.md", "references/telemetry-drift-method.md", "references/trust-security-method.md", @@ -1074,6 +1085,7 @@ "scripts/github_benchmark_scan.py", "scripts/governance_check.py", "scripts/html_rendering.py", + "scripts/import_output_review_decisions.py", "scripts/import_telemetry_events.py", "scripts/init_skill.py", "scripts/judge_blind_eval.py", @@ -1094,6 +1106,7 @@ "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", "scripts/render_context_reports.py", + "scripts/render_daily_skillops_report.py", "scripts/render_description_drift_history.py", "scripts/render_eval_dashboard.py", "scripts/render_evidence_consistency.py", @@ -1118,6 +1131,7 @@ "scripts/render_social_preview.py", "scripts/render_system_model.py", "scripts/render_telemetry_hook_recipes.py", + "scripts/render_weekly_curator_report.py", "scripts/render_world_class_claim_guard.py", "scripts/render_world_class_evidence_intake.py", "scripts/render_world_class_evidence_ledger.py", @@ -1133,6 +1147,7 @@ "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", "scripts/review_studio_output_review.py", + "scripts/review_studio_skillops.py", "scripts/review_studio_waivers.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", @@ -1149,6 +1164,7 @@ "scripts/skill_report_metrics.py", "scripts/skill_report_model.py", "scripts/skill_report_world_class.py", + "scripts/skillops_opportunity.py", "scripts/summarize_user_signals.py", "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", @@ -1159,6 +1175,8 @@ "scripts/verify_package.py", "scripts/world_class_evidence_contract.py", "scripts/world_class_source_checks.py", + "scripts/world_class_submission_kit_rendering.py", + "scripts/world_class_submission_matrix.py", "scripts/yao.py", "scripts/yao_cli_adaptation_commands.py", "scripts/yao_cli_config.py", @@ -1171,6 +1189,8 @@ "scripts/yao_cli_telemetry.py" ], "assets": [ + "assets/skill-overview.css", + "assets/skill-overview.js", "templates/basic_skill.md.j2", "templates/complex_skill.md.j2" ], @@ -1220,9 +1240,9 @@ "reports/governance_score.json" ], "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 } }, @@ -1491,9 +1511,9 @@ "resources": { "strategy": "Preserve the source tree directly; write target notes in targets/claude/README.md.", "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 }, "generated_files": [ @@ -1503,7 +1523,7 @@ }, "scripts": { "strategy": "Scripts remain local package resources and must be reviewed through trust and permission reports before use.", - "script_count": 114, + "script_count": 121, "help_smoke_failed_count": 0 }, "permissions": { @@ -1745,9 +1765,9 @@ "resources": { "strategy": "Preserve the source tree directly; write target notes in targets/claude/README.md.", "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 }, "generated_files": [ @@ -1757,7 +1777,7 @@ }, "scripts": { "strategy": "Scripts remain local package resources and must be reviewed through trust and permission reports before use.", - "script_count": 114, + "script_count": 121, "help_smoke_failed_count": 0 }, "permissions": { @@ -1956,6 +1976,7 @@ "references/skill-atlas-method.md", "references/skill-engineering-method.md", "references/skill-ir-method.md", + "references/skillops-decision-policy.md", "references/systems-thinking-doctrine.md", "references/telemetry-drift-method.md", "references/trust-security-method.md", @@ -1981,6 +2002,7 @@ "scripts/github_benchmark_scan.py", "scripts/governance_check.py", "scripts/html_rendering.py", + "scripts/import_output_review_decisions.py", "scripts/import_telemetry_events.py", "scripts/init_skill.py", "scripts/judge_blind_eval.py", @@ -2001,6 +2023,7 @@ "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", "scripts/render_context_reports.py", + "scripts/render_daily_skillops_report.py", "scripts/render_description_drift_history.py", "scripts/render_eval_dashboard.py", "scripts/render_evidence_consistency.py", @@ -2025,6 +2048,7 @@ "scripts/render_social_preview.py", "scripts/render_system_model.py", "scripts/render_telemetry_hook_recipes.py", + "scripts/render_weekly_curator_report.py", "scripts/render_world_class_claim_guard.py", "scripts/render_world_class_evidence_intake.py", "scripts/render_world_class_evidence_ledger.py", @@ -2040,6 +2064,7 @@ "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", "scripts/review_studio_output_review.py", + "scripts/review_studio_skillops.py", "scripts/review_studio_waivers.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", @@ -2056,6 +2081,7 @@ "scripts/skill_report_metrics.py", "scripts/skill_report_model.py", "scripts/skill_report_world_class.py", + "scripts/skillops_opportunity.py", "scripts/summarize_user_signals.py", "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", @@ -2066,6 +2092,8 @@ "scripts/verify_package.py", "scripts/world_class_evidence_contract.py", "scripts/world_class_source_checks.py", + "scripts/world_class_submission_kit_rendering.py", + "scripts/world_class_submission_matrix.py", "scripts/yao.py", "scripts/yao_cli_adaptation_commands.py", "scripts/yao_cli_config.py", @@ -2078,6 +2106,8 @@ "scripts/yao_cli_telemetry.py" ], "assets": [ + "assets/skill-overview.css", + "assets/skill-overview.js", "templates/basic_skill.md.j2", "templates/complex_skill.md.j2" ], @@ -2127,9 +2157,9 @@ "reports/governance_score.json" ], "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 } }, @@ -2398,9 +2428,9 @@ "resources": { "strategy": "Preserve references, scripts, assets, evals, reports, and adapter metadata as relative package resources.", "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 }, "generated_files": [ @@ -2409,7 +2439,7 @@ }, "scripts": { "strategy": "Expose script and permission metadata for downstream clients or installers to enforce.", - "script_count": 114, + "script_count": 121, "help_smoke_failed_count": 0 }, "permissions": { @@ -2645,9 +2675,9 @@ "resources": { "strategy": "Preserve references, scripts, assets, evals, reports, and adapter metadata as relative package resources.", "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 }, "generated_files": [ @@ -2656,7 +2686,7 @@ }, "scripts": { "strategy": "Expose script and permission metadata for downstream clients or installers to enforce.", - "script_count": 114, + "script_count": 121, "help_smoke_failed_count": 0 }, "permissions": { @@ -2847,6 +2877,7 @@ "references/skill-atlas-method.md", "references/skill-engineering-method.md", "references/skill-ir-method.md", + "references/skillops-decision-policy.md", "references/systems-thinking-doctrine.md", "references/telemetry-drift-method.md", "references/trust-security-method.md", @@ -2872,6 +2903,7 @@ "scripts/github_benchmark_scan.py", "scripts/governance_check.py", "scripts/html_rendering.py", + "scripts/import_output_review_decisions.py", "scripts/import_telemetry_events.py", "scripts/init_skill.py", "scripts/judge_blind_eval.py", @@ -2892,6 +2924,7 @@ "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", "scripts/render_context_reports.py", + "scripts/render_daily_skillops_report.py", "scripts/render_description_drift_history.py", "scripts/render_eval_dashboard.py", "scripts/render_evidence_consistency.py", @@ -2916,6 +2949,7 @@ "scripts/render_social_preview.py", "scripts/render_system_model.py", "scripts/render_telemetry_hook_recipes.py", + "scripts/render_weekly_curator_report.py", "scripts/render_world_class_claim_guard.py", "scripts/render_world_class_evidence_intake.py", "scripts/render_world_class_evidence_ledger.py", @@ -2931,6 +2965,7 @@ "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", "scripts/review_studio_output_review.py", + "scripts/review_studio_skillops.py", "scripts/review_studio_waivers.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", @@ -2947,6 +2982,7 @@ "scripts/skill_report_metrics.py", "scripts/skill_report_model.py", "scripts/skill_report_world_class.py", + "scripts/skillops_opportunity.py", "scripts/summarize_user_signals.py", "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", @@ -2957,6 +2993,8 @@ "scripts/verify_package.py", "scripts/world_class_evidence_contract.py", "scripts/world_class_source_checks.py", + "scripts/world_class_submission_kit_rendering.py", + "scripts/world_class_submission_matrix.py", "scripts/yao.py", "scripts/yao_cli_adaptation_commands.py", "scripts/yao_cli_config.py", @@ -2969,6 +3007,8 @@ "scripts/yao_cli_telemetry.py" ], "assets": [ + "assets/skill-overview.css", + "assets/skill-overview.js", "templates/basic_skill.md.j2", "templates/complex_skill.md.j2" ], @@ -3018,9 +3058,9 @@ "reports/governance_score.json" ], "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 } }, @@ -3289,9 +3329,9 @@ "resources": { "strategy": "Keep optional directories as relative resources next to SKILL.md.", "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 }, "generated_files": [ @@ -3301,7 +3341,7 @@ }, "scripts": { "strategy": "Scripts remain local optional resources and should advertise --help when executable.", - "script_count": 114, + "script_count": 121, "help_smoke_failed_count": 0 }, "permissions": { @@ -3536,9 +3576,9 @@ "resources": { "strategy": "Keep optional directories as relative resources next to SKILL.md.", "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 }, "generated_files": [ @@ -3548,7 +3588,7 @@ }, "scripts": { "strategy": "Scripts remain local optional resources and should advertise --help when executable.", - "script_count": 114, + "script_count": 121, "help_smoke_failed_count": 0 }, "permissions": { @@ -3738,6 +3778,7 @@ "references/skill-atlas-method.md", "references/skill-engineering-method.md", "references/skill-ir-method.md", + "references/skillops-decision-policy.md", "references/systems-thinking-doctrine.md", "references/telemetry-drift-method.md", "references/trust-security-method.md", @@ -3763,6 +3804,7 @@ "scripts/github_benchmark_scan.py", "scripts/governance_check.py", "scripts/html_rendering.py", + "scripts/import_output_review_decisions.py", "scripts/import_telemetry_events.py", "scripts/init_skill.py", "scripts/judge_blind_eval.py", @@ -3783,6 +3825,7 @@ "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", "scripts/render_context_reports.py", + "scripts/render_daily_skillops_report.py", "scripts/render_description_drift_history.py", "scripts/render_eval_dashboard.py", "scripts/render_evidence_consistency.py", @@ -3807,6 +3850,7 @@ "scripts/render_social_preview.py", "scripts/render_system_model.py", "scripts/render_telemetry_hook_recipes.py", + "scripts/render_weekly_curator_report.py", "scripts/render_world_class_claim_guard.py", "scripts/render_world_class_evidence_intake.py", "scripts/render_world_class_evidence_ledger.py", @@ -3822,6 +3866,7 @@ "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", "scripts/review_studio_output_review.py", + "scripts/review_studio_skillops.py", "scripts/review_studio_waivers.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", @@ -3838,6 +3883,7 @@ "scripts/skill_report_metrics.py", "scripts/skill_report_model.py", "scripts/skill_report_world_class.py", + "scripts/skillops_opportunity.py", "scripts/summarize_user_signals.py", "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", @@ -3848,6 +3894,8 @@ "scripts/verify_package.py", "scripts/world_class_evidence_contract.py", "scripts/world_class_source_checks.py", + "scripts/world_class_submission_kit_rendering.py", + "scripts/world_class_submission_matrix.py", "scripts/yao.py", "scripts/yao_cli_adaptation_commands.py", "scripts/yao_cli_config.py", @@ -3860,6 +3908,8 @@ "scripts/yao_cli_telemetry.py" ], "assets": [ + "assets/skill-overview.css", + "assets/skill-overview.js", "templates/basic_skill.md.j2", "templates/complex_skill.md.j2" ], @@ -3909,9 +3959,9 @@ "reports/governance_score.json" ], "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 } }, @@ -4180,9 +4230,9 @@ "resources": { "strategy": "Install as project or user scoped skill source, preserving relative references and scripts.", "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 }, "generated_files": [ @@ -4192,7 +4242,7 @@ }, "scripts": { "strategy": "Scripts require workspace trust and operator/client approval outside this compiler.", - "script_count": 114, + "script_count": 121, "help_smoke_failed_count": 0 }, "permissions": { @@ -4431,9 +4481,9 @@ "resources": { "strategy": "Install as project or user scoped skill source, preserving relative references and scripts.", "counts": { - "references": 34, - "scripts": 114, - "assets": 2, + "references": 35, + "scripts": 121, + "assets": 4, "reports": 43 }, "generated_files": [ @@ -4443,7 +4493,7 @@ }, "scripts": { "strategy": "Scripts require workspace trust and operator/client approval outside this compiler.", - "script_count": 114, + "script_count": 121, "help_smoke_failed_count": 0 }, "permissions": { diff --git a/reports/context_budget.json b/reports/context_budget.json index fde3eb0..8aa72f6 100644 --- a/reports/context_budget.json +++ b/reports/context_budget.json @@ -6,15 +6,15 @@ "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 797, - "other_text_tokens": 1034282, + "other_text_tokens": 1035149, "estimated_initial_load_tokens": 990, - "estimated_total_text_tokens": 1035079, - "deferred_resource_tokens": 477560, + "estimated_total_text_tokens": 1035946, + "deferred_resource_tokens": 477629, "deferred_resource_warn_threshold": 120000, "deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 427780, + "estimated_tokens": 422712, "file_count": 121 }, { @@ -26,12 +26,17 @@ "path": "evals", "estimated_tokens": 21835, "file_count": 27 + }, + { + "path": "assets", + "estimated_tokens": 5137, + "file_count": 2 } ], "large_deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 427780, + "estimated_tokens": 422712, "file_count": 121 } ], @@ -54,14 +59,14 @@ ], "missing": [], "path": "scripts", - "estimated_tokens": 427780, + "estimated_tokens": 422712, "file_count": 121, "rationale": "Script resources are deterministic deferred tools, not initial-load prompt context." } ], "summary": "Large deferred resources are indexed and backed by evidence." }, - "relevant_file_count": 625, + "relevant_file_count": 627, "unused_resource_dirs": [], "quality_signal_points": 130, "quality_density": 131.3 diff --git a/reports/context_budget.md b/reports/context_budget.md index 49e38f8..28c0150 100644 --- a/reports/context_budget.md +++ b/reports/context_budget.md @@ -2,7 +2,7 @@ | Target | Path | Tier | Limit | Initial | SKILL | Deferred | Resource Governance | Large Deferred Dirs | Quality Density | Unused Dirs | Status | | --- | --- | --- | ---: | ---: | ---: | ---: | --- | --- | ---: | --- | --- | -| root | `.` | `production` | 1000 | 990 | 797 | 477560 | `governed` | scripts:427780 | 131.3 | - | ok | +| root | `.` | `production` | 1000 | 990 | 797 | 477629 | `governed` | scripts:422712 | 131.3 | - | ok | | complex-release-orchestrator | `examples/complex-release-orchestrator/generated-skill` | `production` | 1000 | 790 | 718 | 1657 | `not-required` | - | 164.6 | - | ok | | governed-incident-command | `examples/governed-incident-command/generated-skill` | `production` | 1000 | 760 | 658 | 1030 | `not-required` | - | 171.1 | - | ok | diff --git a/reports/context_budget_summary.json b/reports/context_budget_summary.json index 1e88f7e..a4fcebe 100644 --- a/reports/context_budget_summary.json +++ b/reports/context_budget_summary.json @@ -8,11 +8,11 @@ "budget_limit": 1000, "initial_tokens": 990, "skill_body_tokens": 797, - "deferred_resource_tokens": 477560, + "deferred_resource_tokens": 477629, "large_deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 427780, + "estimated_tokens": 422712, "file_count": 121 } ], @@ -35,7 +35,7 @@ ], "missing": [], "path": "scripts", - "estimated_tokens": 427780, + "estimated_tokens": 422712, "file_count": 121, "rationale": "Script resources are deterministic deferred tools, not initial-load prompt context." } diff --git a/reports/install_simulation.json b/reports/install_simulation.json index 80b27db..10e332b 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": 643, + "archive_entry_count": 645, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, diff --git a/reports/output_execution_runs.json b/reports/output_execution_runs.json index 5b44f5e..2f4d964 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": 27.12, + "duration_ms": 27.0, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -62,7 +62,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 26.13, + "duration_ms": 28.06, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -85,7 +85,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.74, + "duration_ms": 29.41, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -113,7 +113,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.06, + "duration_ms": 29.29, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -136,7 +136,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.38, + "duration_ms": 30.36, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -164,7 +164,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.82, + "duration_ms": 29.42, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -187,7 +187,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 26.07, + "duration_ms": 29.76, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -214,7 +214,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 26.04, + "duration_ms": 30.86, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -237,7 +237,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 26.08, + "duration_ms": 30.13, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -266,7 +266,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 26.17, + "duration_ms": 29.58, "provider": "local-output-eval-runner", "model": "", "usage": { diff --git a/reports/output_execution_runs.md b/reports/output_execution_runs.md index 2ffa794..a89f88e 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 | 27.12 | 33 | 0.0 | pass | -| skill-package-contract | with_skill | command | local-output-eval-runner | 26.13 | 73 | 100.0 | pass | -| output-eval-expectation | baseline | command | local-output-eval-runner | 25.74 | 36 | 0.0 | pass | -| output-eval-expectation | with_skill | command | local-output-eval-runner | 29.06 | 80 | 100.0 | pass | -| ir-before-packaging | baseline | command | local-output-eval-runner | 29.38 | 33 | 0.0 | pass | -| ir-before-packaging | with_skill | command | local-output-eval-runner | 29.82 | 80 | 100.0 | pass | -| near-neighbor-boundary | baseline | command | local-output-eval-runner | 26.07 | 36 | 0.0 | pass | -| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 26.04 | 65 | 100.0 | pass | -| file-backed-governed-package | baseline | command | local-output-eval-runner | 26.08 | 37 | 0.0 | pass | -| file-backed-governed-package | with_skill | command | local-output-eval-runner | 26.17 | 98 | 100.0 | pass | +| skill-package-contract | baseline | command | local-output-eval-runner | 27.0 | 33 | 0.0 | pass | +| skill-package-contract | with_skill | command | local-output-eval-runner | 28.06 | 73 | 100.0 | pass | +| output-eval-expectation | baseline | command | local-output-eval-runner | 29.41 | 36 | 0.0 | pass | +| output-eval-expectation | with_skill | command | local-output-eval-runner | 29.29 | 80 | 100.0 | pass | +| ir-before-packaging | baseline | command | local-output-eval-runner | 30.36 | 33 | 0.0 | pass | +| ir-before-packaging | with_skill | command | local-output-eval-runner | 29.42 | 80 | 100.0 | pass | +| near-neighbor-boundary | baseline | command | local-output-eval-runner | 29.76 | 36 | 0.0 | pass | +| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 30.86 | 65 | 100.0 | pass | +| file-backed-governed-package | baseline | command | local-output-eval-runner | 30.13 | 37 | 0.0 | pass | +| file-backed-governed-package | with_skill | command | local-output-eval-runner | 29.58 | 98 | 100.0 | pass | ## Next Fixes diff --git a/reports/package_verification.json b/reports/package_verification.json index cd0cce7..a68c0e9 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": "d26f3390edd0335f75fe05f77fd65d40541728fdb1d0779419cd9dce077a4034", - "archive_entry_count": 643, + "archive_sha256": "167bcde6bde563dfbffa949455c36bb55a70c4e7573bf166d9a4beb36cb95407", + "archive_entry_count": 645, "failure_count": 0, "warning_count": 0 }, diff --git a/reports/package_verification.md b/reports/package_verification.md index 4c1a6ee..864f1f3 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: `d26f3390edd0335f75fe05f77fd65d40541728fdb1d0779419cd9dce077a4034` +- Archive SHA256: `167bcde6bde563dfbffa949455c36bb55a70c4e7573bf166d9a4beb36cb95407` - Failures: `0` - Warnings: `0` diff --git a/reports/registry_audit.json b/reports/registry_audit.json index 6918e9f..40f5033 100644 --- a/reports/registry_audit.json +++ b/reports/registry_audit.json @@ -21,8 +21,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "00efa72ae52906f680980aa05c3e4205d9556654e7a14c5fcc1bdc8eb2a81313", - "archive_sha256": "d26f3390edd0335f75fe05f77fd65d40541728fdb1d0779419cd9dce077a4034" + "package_sha256": "8db4f8cfb8963484c2afb548453c44adca024b726e3f8cbd2ce1dcd4411cadfa", + "archive_sha256": "167bcde6bde563dfbffa949455c36bb55a70c4e7573bf166d9a4beb36cb95407" }, "compatibility": { "openai": "pass", @@ -53,7 +53,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "d26f3390edd0335f75fe05f77fd65d40541728fdb1d0779419cd9dce077a4034", + "archive_sha256": "167bcde6bde563dfbffa949455c36bb55a70c4e7573bf166d9a4beb36cb95407", "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": "00efa72ae52906f680980aa05c3e4205d9556654e7a14c5fcc1bdc8eb2a81313" + "package_sha256": "8db4f8cfb8963484c2afb548453c44adca024b726e3f8cbd2ce1dcd4411cadfa" } ] }, diff --git a/reports/registry_audit.md b/reports/registry_audit.md index 20cea6f..f5823fc 100644 --- a/reports/registry_audit.md +++ b/reports/registry_audit.md @@ -6,8 +6,8 @@ - Maturity: `governed` - Owner: `Yao Team` - License: `MIT` -- Package SHA256: `00efa72ae52906f680980aa05c3e4205d9556654e7a14c5fcc1bdc8eb2a81313` -- Archive SHA256: `d26f3390edd0335f75fe05f77fd65d40541728fdb1d0779419cd9dce077a4034` +- Package SHA256: `8db4f8cfb8963484c2afb548453c44adca024b726e3f8cbd2ce1dcd4411cadfa` +- Archive SHA256: `167bcde6bde563dfbffa949455c36bb55a70c4e7573bf166d9a4beb36cb95407` - Install simulated: `True` ## Compatibility diff --git a/reports/security_trust_report.json b/reports/security_trust_report.json index c6b1de3..b6abcce 100644 --- a/reports/security_trust_report.json +++ b/reports/security_trust_report.json @@ -2,7 +2,7 @@ "ok": true, "skill_dir": ".", "summary": { - "scanned_files": 209, + "scanned_files": 211, "script_count": 121, "internal_module_count": 35, "secret_findings": 0, @@ -22,8 +22,8 @@ "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 209, - "package_sha256": "00efa72ae52906f680980aa05c3e4205d9556654e7a14c5fcc1bdc8eb2a81313" + "package_hash_file_count": 211, + "package_sha256": "8db4f8cfb8963484c2afb548453c44adca024b726e3f8cbd2ce1dcd4411cadfa" }, "failures": [], "warnings": [], diff --git a/reports/security_trust_report.md b/reports/security_trust_report.md index 41453ab..791b916 100644 --- a/reports/security_trust_report.md +++ b/reports/security_trust_report.md @@ -1,7 +1,7 @@ # Security Trust Report - OK: `True` -- Scanned files: `209` +- Scanned files: `211` - Scripts: `121` - Internal script modules: `35` - Secret findings: `0` @@ -15,8 +15,8 @@ - CLI help smoke failures: `0` - Interactive scripts: `0` - Package hash scope: `source-contract-without-generated-reports` -- Package hash files: `209` -- Package SHA256: `00efa72ae52906f680980aa05c3e4205d9556654e7a14c5fcc1bdc8eb2a81313` +- Package hash files: `211` +- Package SHA256: `8db4f8cfb8963484c2afb548453c44adca024b726e3f8cbd2ce1dcd4411cadfa` ## Failures diff --git a/reports/skill-os-2-review.md b/reports/skill-os-2-review.md index 6090482..91f3126 100644 --- a/reports/skill-os-2-review.md +++ b/reports/skill-os-2-review.md @@ -13,6 +13,7 @@ Yao Meta Skill is no longer only a Meta Skill factory. The current working tree - Trust/Security v0 for secret, dependency, script, bounded network host policy, execution-level CLI help smoke checks, trust metadata, and stable source-contract integrity checks. - Skill Atlas v0 for portfolio catalog, route overlap, stale ownership, dependency signals, aggregate drift signals, and no-route opportunities. - Bilingual Skill Overview v2 that includes these evidence surfaces. +- Skill Overview Asset Split v0 so long report CSS and JavaScript live in `assets/skill-overview.css` and `assets/skill-overview.js`, while the Python layout module keeps the generated report single-file by inlining those assets at render time. - Skill OS 2.0 Audit v0 for requirement-by-requirement evidence mapping, with explicit separation between local evidence, human-required review, and external-required provider/client integrations. - World-Class Evidence Plan v0 that turns the remaining provider holdout, human adjudication, native permission enforcement, and native client telemetry gaps into executable runbooks with success checks and privacy contracts. - World-Class Evidence Ledger v0 that records current acceptance state, provenance requirements, privacy contracts, and anti-overclaim guards for those remaining gaps. @@ -127,8 +128,8 @@ Next move: add real client or installer permission enforcement integration. | Runtime Permission Probes | `4 / 4` target adapters probed, `0` native-enforcement adapters, `4` explicit metadata fallbacks, `4` residual risks retained for reviewer visibility | | Skill Atlas | `12` scanned skills, `1` actionable root skill, `1` telemetry report, `0` actionable route collisions, `0` actionable owner gaps, `0` actionable stale skills, `0` actionable drift signals, `24` scoped non-actionable issue signals retained for visibility | | Registry Audit | package metadata generated with version, owner, license, source checksum, archive checksum, Skill IR provenance, and compatibility matrix | -| Package Verification | `4 / 4` target adapters present, archive verified, `643` zip entries, `0` failures, `0` warnings | -| Install Simulation | archive with `643` entries extracted into a local verification root, entrypoint/manifest/interface loaded, reports present, `4` adapters readable, `12` installer permission checks enforced, `0` permission failures, `0` failures, `0` warnings | +| Package Verification | `4 / 4` target adapters present, archive verified, `645` zip entries, `0` failures, `0` warnings | +| Install Simulation | archive with `645` entries extracted into a local verification root, entrypoint/manifest/interface loaded, reports present, `4` adapters readable, `12` installer permission checks enforced, `0` permission failures, `0` failures, `0` warnings | | Local Install Sync Preflight | `make sync-local-install` and `make sync-active-install` rebuild the package first, then sync only after install simulation passes with `12` enforced installer permission checks and `0` permission failures | | Upgrade Check | current package declares `minor` over the 1.0.0 baseline, recommended bump is `minor`, and release notes include added targets plus checksum changes | | Adoption Drift | `1` metadata-only review event, `1` adoption sample, adoption `100`, risk band `low`; optional `yao.py` CLI capture, external client `telemetry-emit`, `5` `telemetry-hooks` recipes, Browser/Chrome native messaging host, and validated external JSONL import are available but off by default for reproducible release evidence; raw `reports/telemetry_events.jsonl` is gitignored and blocked from zip packages | diff --git a/reports/skill_atlas.json b/reports/skill_atlas.json index 2ef54b7..d44aa90 100644 --- a/reports/skill_atlas.json +++ b/reports/skill_atlas.json @@ -220,6 +220,8 @@ "references/telemetry-drift-method.md", "references/trust-security-method.md", "references/user-memory-policy.md", + "assets/skill-overview.css", + "assets/skill-overview.js", "templates/basic_skill.md.j2", "templates/complex_skill.md.j2" ], diff --git a/reports/skill_os2_audit.json b/reports/skill_os2_audit.json index da9a749..f711c63 100644 --- a/reports/skill_os2_audit.json +++ b/reports/skill_os2_audit.json @@ -285,7 +285,7 @@ "key": "registry-distribution", "label": "Registry Distribution", "status": "pass", - "current": "zip entries 643; install failures 0; permission failures 0", + "current": "zip entries 645; install failures 0; permission failures 0", "target": "Package metadata, archive checksum, package verification, and install simulation pass", "evidence": [ { diff --git a/reports/skill_os2_audit.md b/reports/skill_os2_audit.md index 94d3470..42d17f4 100644 --- a/reports/skill_os2_audit.md +++ b/reports/skill_os2_audit.md @@ -27,7 +27,7 @@ Generated at: `2026-06-16` | Permission Metadata | pass | 4/4 target probes pass; metadata fallback 4; installer enforcement 4 | Packaged adapters expose explicit permission metadata, residual risks, and installer enforcement evidence when available | Preserve residual-risk notes until real native enforcement exists. | | Native Permission Enforcement | external-required | native-enforced targets 0; installer-enforced targets 4 | At least one target/client enforces approved permissions at runtime | Integrate a real target-client or external installer runtime guard before claiming native permission enforcement. | | Skill Atlas | pass | 12 skills; actionable collisions 0 | Workspace catalog, route overlap, stale/owner gaps, drift, and no-route opportunities | Feed real drift data into Atlas once client telemetry is installed. | -| Registry Distribution | pass | zip entries 643; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. | +| Registry Distribution | pass | zip entries 645; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. | | Review Studio | pass | decision review; warnings 3; score 91 | One page shows gates, evidence paths, blockers, warnings, actions, waivers, and annotations | Resolve human/external warning gates before claiming full release readiness. | | Telemetry Drift | pass | events 1; risk low; recipes 5 | Local-first metadata-only event contract, aggregate drift report, hook recipes, and import path | Keep raw JSONL out of distributed packages and use aggregate reports for Atlas. | | Native Client Telemetry | external-required | external source events 0; adoption samples 0 | A real Browser/Chrome/provider client sends production metadata events | Install a real client against the native host and import production metadata-only events. | diff --git a/reports/skill_os2_coverage.json b/reports/skill_os2_coverage.json index bc65d68..165dcec 100644 --- a/reports/skill_os2_coverage.json +++ b/reports/skill_os2_coverage.json @@ -204,7 +204,7 @@ "label": "Registry Distribution", "status": "pass", "objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.", - "current": "archive entries 643; install failures 0", + "current": "archive entries 645; 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": [ diff --git a/reports/skill_os2_coverage.md b/reports/skill_os2_coverage.md index bebb4e3..007c959 100644 --- a/reports/skill_os2_coverage.md +++ b/reports/skill_os2_coverage.md @@ -28,7 +28,7 @@ This report maps the Skill OS 2.0 upgrade blueprint to concrete local artifacts, | Runtime Conformance | `pass` | 5/5 targets pass | `python3 scripts/yao.py conformance .` | `python3 tests/verify_conformance_suite.py` | | Trust Security | `pass` | 121 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 643; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` | +| Registry Distribution | `pass` | archive entries 645; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` | | Review Studio | `pass` | 16 gates; decision review; warnings 3 | `python3 scripts/yao.py review-studio .` | `python3 tests/verify_review_studio.py` | | Telemetry Drift | `pass` | events 1; recipes 5; risk low | `python3 scripts/yao.py telemetry-hooks . && python3 scripts/yao.py adoption-drift .` | `python3 tests/verify_telemetry_hooks.py` | diff --git a/reports/upgrade_check.json b/reports/upgrade_check.json index 148196b..0548a8d 100644 --- a/reports/upgrade_check.json +++ b/reports/upgrade_check.json @@ -70,12 +70,12 @@ { "field": "archive_sha256", "from": "", - "to": "d26f3390edd0335f75fe05f77fd65d40541728fdb1d0779419cd9dce077a4034" + "to": "167bcde6bde563dfbffa949455c36bb55a70c4e7573bf166d9a4beb36cb95407" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "00efa72ae52906f680980aa05c3e4205d9556654e7a14c5fcc1bdc8eb2a81313" + "to": "8db4f8cfb8963484c2afb548453c44adca024b726e3f8cbd2ce1dcd4411cadfa" } ] }, diff --git a/scripts/context_sizer.py b/scripts/context_sizer.py index 129e2af..5abc563 100644 --- a/scripts/context_sizer.py +++ b/scripts/context_sizer.py @@ -4,7 +4,7 @@ import json from pathlib import Path -TEXT_EXTS = {".md", ".txt", ".yaml", ".yml", ".json", ".py", ".sh", ".js", ".ts"} +TEXT_EXTS = {".css", ".md", ".txt", ".yaml", ".yml", ".json", ".py", ".sh", ".js", ".ts"} IGNORED_RELATIVE_DIRS = { Path("reports") / "release_snapshots", Path("tests") / "tmp", diff --git a/scripts/skill_report_layout.py b/scripts/skill_report_layout.py index ed975ae..cfcf03c 100644 --- a/scripts/skill_report_layout.py +++ b/scripts/skill_report_layout.py @@ -2,6 +2,7 @@ """Static layout contract for skill overview report HTML.""" import html +from pathlib import Path from typing import Any @@ -9,6 +10,14 @@ SCRIPT_INTERFACE = "internal-module" SCRIPT_INTERFACE_REASON = "Imported by render_skill_overview.py to keep overview report layout and CSS out of data rendering." +ROOT = Path(__file__).resolve().parent.parent +ASSET_DIR = ROOT / "assets" + + +def read_layout_asset(filename: str) -> str: + return (ASSET_DIR / filename).read_text(encoding="utf-8").strip() + + def bi_span(zh: str, en: str) -> str: return ( f'{html.escape(str(zh))}' @@ -33,776 +42,8 @@ def render_language_switch() -> str: def skill_overview_css() -> str: - return """ - :root { - --paper: #ffffff; - --wash: #f8fafc; - --wash-strong: #f2f5f8; - --line: #e6e0d4; - --line-soft: #eee9df; - --brand: #1B365D; - --brand-soft: #EEF3F8; - --brand-mid: #315982; - --ink: #151515; - --text: #2f2d29; - --muted: #68625a; - --faint: #8b857b; - --success: #2f6f5e; - --warn: #8a5a19; - --serif: "TsangerJinKai02", "Source Han Serif SC", "Noto Serif CJK SC", "Songti SC", "STSong", Charter, Georgia, serif; - --mono: "JetBrains Mono", "SF Mono", ui-monospace, Menlo, Consolas, monospace; - --shadow-soft: 0 1px 2px rgba(27, 54, 93, 0.06), 0 16px 44px rgba(27, 54, 93, 0.08); - } - * { box-sizing: border-box; } - html { scroll-behavior: smooth; } - body { - margin: 0; - background: #ffffff; - color: var(--ink); - font-family: var(--serif); - line-height: 1.62; - letter-spacing: 0; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - text-rendering: optimizeLegibility; - } - body[data-report-lang="zh-CN"] [data-lang="en"], - body[data-report-lang="en"] [data-lang="zh-CN"] { display: none !important; } - .skip-link { - position: fixed; - left: 18px; - top: 10px; - z-index: 40; - transform: translateY(-140%); - padding: 8px 12px; - border-radius: 8px; - background: var(--brand); - color: #fff; - text-decoration: none; - transition: transform 160ms cubic-bezier(0.16, 1, 0.3, 1); - } - .skip-link:focus-visible { transform: translateY(0); outline: 2px solid var(--brand-mid); outline-offset: 2px; } - .topbar { - position: sticky; - top: 0; - z-index: 20; - background: rgba(255, 255, 255, 0.96); - border-bottom: 1px solid var(--line); - } - .progress-track { - height: 2px; - background: transparent; - } - .progress-bar { - display: block; - width: 100%; - height: 100%; - background: var(--brand); - transition: transform 160ms cubic-bezier(0.16, 1, 0.3, 1); - transform-origin: left center; - transform: scaleX(0); - } - .topbar-inner { - max-width: 1240px; - margin: 0 auto; - padding: 9px 28px; - display: grid; - grid-template-columns: minmax(0, 1fr) auto; - gap: 18px; - align-items: center; - } - .nav-shell { - display: grid; - grid-template-columns: auto minmax(0, 1fr); - gap: 18px; - align-items: center; - min-width: 0; - } - .report-mark { - color: var(--brand); - font-family: var(--mono); - font-size: 11px; - line-height: 1; - text-transform: uppercase; - white-space: nowrap; - } - .report-nav { - display: flex; - gap: 4px; - overflow-x: auto; - scrollbar-width: none; - min-width: 0; - } - .report-nav::-webkit-scrollbar { display: none; } - .report-nav a { - flex: 0 0 auto; - min-width: 76px; - min-height: 40px; - display: inline-flex; - align-items: center; - justify-content: center; - padding: 0 10px; - color: var(--brand); - text-decoration: none; - text-align: center; - font-size: 13px; - border-radius: 8px; - white-space: nowrap; - transition-property: background-color, color, transform; - transition-duration: 160ms; - transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); - } - @media (hover: hover) { - .report-nav a:hover { background: var(--brand-soft); } - } - .report-nav a:focus-visible { - outline: 2px solid var(--brand-mid); - outline-offset: 2px; - background: var(--brand-soft); - } - .report-nav a[aria-current="true"] { - background: var(--brand); - color: #ffffff; - } - .report-nav a[aria-current="true"] span { color: #ffffff; } - .language-switch { - display: inline-flex; - gap: 3px; - padding: 3px; - border: 1px solid var(--line); - border-radius: 8px; - background: var(--paper); - box-shadow: 0 1px 2px rgba(27, 54, 93, 0.05); - } - .language-switch button { - appearance: none; - min-width: 42px; - min-height: 34px; - border: 0; - border-radius: 6px; - padding: 0 10px; - background: transparent; - color: var(--muted); - font: inherit; - font-size: 13px; - cursor: pointer; - transition-property: background-color, color, transform; - transition-duration: 160ms; - transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); - } - .language-switch button:active { transform: scale(0.96); } - .language-switch button:focus-visible { outline: 2px solid var(--brand-mid); outline-offset: 2px; } - .language-switch button[aria-pressed="true"] { - background: var(--brand-soft); - color: var(--brand); - } - .wrap { - max-width: 1240px; - margin: 0 auto; - padding: 58px 28px 92px; - } - .hero { - padding: 16px 0 34px; - } - .hero-grid { - display: grid; - grid-template-columns: minmax(0, 1fr) 360px; - gap: 44px; - align-items: end; - } - .eyebrow, .report-mark { - letter-spacing: 0; - } - .eyebrow { - margin: 0 0 12px; - color: var(--brand); - font-family: var(--mono); - font-size: 12px; - text-transform: uppercase; - } - .slug { - margin: 0 0 18px; - color: var(--faint); - font-family: var(--mono); - font-size: 13px; - overflow-wrap: anywhere; - } - h1, h2, h3 { - margin: 0; - font-weight: 500; - letter-spacing: 0; - text-wrap: balance; - } - h1 { - max-width: 8em; - color: var(--ink); - font-size: 4rem; - line-height: 1.02; - } - .lead { - max-width: 760px; - margin: 20px 0 0; - color: var(--text); - font-size: 1.08rem; - text-wrap: pretty; - } - .hero-meta, .badges { - display: flex; - flex-wrap: wrap; - gap: 8px; - margin-top: 20px; - } - .hero-meta span, .badges span, .tag { - display: inline-flex; - align-items: center; - min-height: 30px; - padding: 5px 10px; - border-radius: 6px; - background: var(--brand-soft); - color: var(--brand); - font-size: 13px; - font-variant-numeric: tabular-nums; - } - .hero-card { - position: relative; - padding: 22px 22px 24px; - border-radius: 8px; - background: linear-gradient(180deg, #ffffff 0%, #fbfaf7 100%); - box-shadow: var(--shadow-soft); - border: 1px solid var(--line-soft); - } - .hero-card::before { - content: ""; - position: absolute; - top: 18px; - right: 18px; - width: 38px; - height: 2px; - background: var(--brand); - } - .score-strip { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 10px; - margin-top: 32px; - padding-top: 20px; - border-top: 1px solid var(--line); - } - .score-chip { - padding: 14px 14px 12px; - border-radius: 8px; - background: var(--wash); - border: 1px solid var(--line-soft); - } - .score-chip span { - display: block; - color: var(--muted); - font-size: 12px; - } - .score-chip strong { - display: block; - margin: 5px 0 8px; - color: var(--brand); - font-family: var(--mono); - font-size: 1.65rem; - font-weight: 500; - line-height: 1; - font-variant-numeric: tabular-nums; - } - .score-chip i { - display: block; - height: 3px; - border-radius: 999px; - background: linear-gradient(90deg, var(--brand) var(--score), #dfe6ee var(--score)); - } - .score-chip small { - display: block; - margin-top: 8px; - color: var(--muted); - font-size: 12px; - line-height: 1.45; - } - section { - scroll-margin-top: 78px; - padding-top: 44px; - margin-top: 44px; - border-top: 1px solid var(--line); - } - section.hero { - scroll-margin-top: 0; - padding-top: 16px; - margin-top: 0; - border-top: 0; - } - .section-head { - display: grid; - grid-template-columns: minmax(0, 246px) minmax(0, 1fr); - gap: 36px; - align-items: start; - } - h2 { - color: var(--ink); - font-size: 1.5rem; - line-height: 1.18; - } - h2::before { - content: ""; - display: block; - width: 32px; - height: 2px; - margin-bottom: 12px; - background: var(--brand); - } - h3 { - color: var(--ink); - font-size: 1.02rem; - line-height: 1.3; - margin-bottom: 10px; - } - .section-head p { - margin: 12px 0 0; - color: var(--muted); - max-width: 43ch; - text-wrap: pretty; - } - .section-body { - margin-top: 24px; - } - .two-col, .metric-grid, .chart-grid { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 16px; - align-items: stretch; - } - .quality-panels { - margin-top: 16px; - } - .metrics-report { - display: grid; - gap: 22px; - } - .metrics-flow { - display: grid; - gap: 22px; - } - .metrics-primary { - display: grid; - grid-template-columns: minmax(0, 1.2fr) minmax(320px, 0.8fr); - gap: 22px; - align-items: start; - } - .metrics-primary .chart-figure { - min-height: 0; - display: grid; - align-content: center; - } - .metrics-primary .chart-figure svg { - max-height: 520px; - } - .metrics-note { - display: grid; - align-content: start; - gap: 16px; - } - .metrics-note p { - margin: 0; - max-width: none; - color: var(--text); - } - .metric-summary-list { - margin: 0; - padding: 0; - list-style: none; - display: grid; - gap: 10px; - } - .metric-summary-list li { - display: grid; - grid-template-columns: auto minmax(0, 1fr) auto; - gap: 8px 10px; - align-items: baseline; - padding: 10px 0; - border-bottom: 1px solid var(--line-soft); - } - .metric-summary-list li:last-child { border-bottom: 0; } - .metric-summary-list b { - color: var(--ink); - font-weight: 500; - } - .metric-summary-list em { - color: var(--brand); - font-family: var(--mono); - font-style: normal; - font-variant-numeric: tabular-nums; - } - .metric-summary-list small { - grid-column: 2 / 4; - color: var(--muted); - line-height: 1.5; - overflow-wrap: break-word; - } - .metric-status { - display: inline-flex; - align-items: center; - min-height: 24px; - padding: 2px 7px; - border-radius: 6px; - background: var(--brand-soft); - color: var(--brand); - font-size: 12px; - } - .metric-grid { - margin-top: 2px; - } - .metric-detail-grid { - grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr)); - align-items: stretch; - } - .list, .compact-list, .step-list { - margin: 0; - padding-left: 1.15em; - display: grid; - gap: 8px; - } - .list li::marker, .compact-list li::marker, .step-list li::marker { color: var(--brand); } - .compact-list { - gap: 6px; - font-size: 13.5px; - color: var(--muted); - line-height: 1.55; - } - .compact-list li, .list li, .step-list li { - min-width: 0; - overflow-wrap: break-word; - } - .panel, .metric-card, .roadmap-item { - background: #ffffff; - border: 1px solid var(--line-soft); - border-radius: 8px; - padding: 22px; - box-shadow: 0 1px 2px rgba(27, 54, 93, 0.04); - min-width: 0; - } - .metric-card { - display: grid; - grid-template-columns: 1fr; - gap: 14px; - align-content: start; - min-height: 0; - } - .metric-card-head { - display: flex; - gap: 14px; - align-items: flex-start; - justify-content: space-between; - } - .metric-card strong { - display: block; - margin: 0; - color: var(--brand); - font-family: var(--mono); - font-size: 2rem; - font-weight: 500; - line-height: 1; - font-variant-numeric: tabular-nums; - } - .metric-label { - color: var(--muted); - font-size: 13px; - line-height: 1.45; - } - .metric-card-body { - min-width: 0; - } - .metric-card-body .compact-list { - gap: 7px; - max-width: 62ch; - } - .metric-card-body .compact-list li { - overflow-wrap: break-word; - word-break: normal; - } - .chart-figure { - margin: 0; - padding: 18px; - border: 1px solid var(--line-soft); - border-radius: 8px; - background: #ffffff; - box-shadow: 0 1px 2px rgba(27, 54, 93, 0.04); - } - .chart-figure svg { - width: 100%; - height: auto; - display: block; - overflow: visible; - } - .chart-figure text { - fill: var(--ink); - font-family: var(--serif); - font-size: 13px; - } - .chart-title { - fill: var(--brand); - font-size: 16px; - font-weight: 500; - } - .chart-line { - fill: none; - stroke: var(--brand); - stroke-width: 2; - } - figcaption { - margin-top: 12px; - padding-top: 10px; - border-top: 1px solid var(--line-soft); - color: var(--muted); - font-size: 13px; - line-height: 1.5; - text-wrap: pretty; - } - table { - width: 100%; - border-collapse: collapse; - font-size: 14px; - } - th, td { - padding: 12px 10px; - text-align: left; - border-bottom: 1px solid var(--line-soft); - vertical-align: top; - } - th { - color: var(--brand); - font-weight: 500; - font-size: 12px; - } - td:first-child, th:first-child { width: 96px; } - .world-readiness { - margin-top: 16px; - display: grid; - gap: 16px; - } - .section-head > .world-readiness { - grid-column: 2; - } - .world-readiness-head { - display: grid; - grid-template-columns: minmax(0, 1fr) auto; - gap: 16px; - align-items: start; - } - .world-readiness-head p { - margin-top: 8px; - max-width: 72ch; - } - .world-status { - display: inline-flex; - align-items: center; - min-height: 30px; - padding: 4px 10px; - border-radius: 6px; - background: var(--brand-soft); - color: var(--brand); - font-size: 13px; - white-space: nowrap; - } - .evidence-kpis { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 10px; - } - .evidence-kpi { - padding: 14px; - border: 1px solid var(--line-soft); - border-radius: 8px; - background: var(--wash); - min-width: 0; - } - .evidence-kpi span { - display: block; - color: var(--muted); - font-size: 12px; - } - .evidence-kpi strong { - display: block; - margin-top: 4px; - color: var(--brand); - font-family: var(--mono); - font-size: 1.5rem; - font-weight: 500; - line-height: 1; - font-variant-numeric: tabular-nums; - } - .evidence-kpi small { - display: block; - margin-top: 8px; - color: var(--muted); - line-height: 1.45; - overflow-wrap: break-word; - } - .evidence-list { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 10px; - } - .evidence-item { - padding: 14px; - border: 1px solid var(--line-soft); - border-radius: 8px; - background: #ffffff; - min-width: 0; - } - .evidence-item span { - color: var(--brand); - font-family: var(--mono); - font-size: 11px; - text-transform: uppercase; - } - .evidence-item h4 { - margin: 4px 0 8px; - color: var(--ink); - font-size: 1rem; - font-weight: 500; - line-height: 1.3; - } - .evidence-item h5 { - margin: 12px 0 6px; - color: var(--brand); - font-size: 12px; - font-weight: 500; - } - .evidence-item p { - margin: 0; - max-width: none; - color: var(--muted); - overflow-wrap: break-word; - } - .blocked-checks { - margin: 0; - padding-left: 1.05em; - color: var(--muted); - font-size: 13px; - line-height: 1.45; - } - .blocked-checks li { - overflow-wrap: break-word; - } - .blocked-checks li::marker { - color: var(--brand); - } - .blocked-checks-empty { - font-size: 13px; - } - .roadmap { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 16px; - } - .step { - display: inline-flex; - margin-bottom: 12px; - min-height: 28px; - align-items: center; - padding: 3px 8px; - border-radius: 6px; - background: var(--brand-soft); - color: var(--brand); - font-size: 12px; - } - .unlock { - margin-top: 14px; - color: var(--muted); - font-size: 13px; - } - @media (max-width: 980px) { - .topbar-inner { - grid-template-columns: minmax(0, 1fr) auto; - padding: 8px 16px; - } - .nav-shell { grid-template-columns: 1fr; gap: 6px; } - .report-mark { display: none; } - .report-nav a { min-width: 72px; } - .hero-grid, .section-head { grid-template-columns: 1fr; } - .section-head > .world-readiness { grid-column: auto; } - .hero-grid { gap: 24px; } - .score-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .metrics-primary, .two-col, .metric-grid, .chart-grid, .roadmap { grid-template-columns: 1fr; } - .evidence-list { grid-template-columns: 1fr; } - .metric-card { grid-template-columns: 86px minmax(0, 1fr); } - h1 { font-size: 2.75rem; } - } - @media (max-width: 540px) { - .wrap { padding: 34px 16px 72px; } - .topbar-inner { gap: 10px; } - .report-nav { - display: flex; - gap: 2px; - } - .report-nav a { - min-width: 66px; - min-height: 38px; - padding: 0 8px; - font-size: 12px; - } - .language-switch button { min-width: 38px; min-height: 32px; padding: 0 8px; } - .hero { padding-top: 8px; } - h1 { max-width: 8em; font-size: 2.35rem; } - .lead { font-size: 1rem; } - .hero-meta span, .badges span { font-size: 12px; } - .score-strip { grid-template-columns: 1fr; } - section { margin-top: 34px; padding-top: 34px; } - .panel, .metric-card, .roadmap-item, .chart-figure, .hero-card { padding: 18px; } - .world-readiness-head, .evidence-kpis { grid-template-columns: 1fr; } - .metric-card { grid-template-columns: 1fr; gap: 10px; } - .metric-card strong { margin-bottom: 2px; } - .metric-summary-list li { grid-template-columns: auto minmax(0, 1fr) auto; } - table { font-size: 13px; } - th, td { padding: 10px 7px; } - } - @media (prefers-reduced-motion: reduce) { - html { scroll-behavior: auto; } - *, *::before, *::after { transition-duration: 0.01ms !important; } - } - """.strip() + return read_layout_asset("skill-overview.css") def skill_overview_script() -> str: - return """ - (function () { - var buttons = Array.prototype.slice.call(document.querySelectorAll("[data-set-lang]")); - var navLinks = Array.prototype.slice.call(document.querySelectorAll(".report-nav a")); - var sections = navLinks - .map(function (link) { return document.querySelector(link.getAttribute("href")); }) - .filter(Boolean); - var progressBar = document.querySelector(".progress-bar"); - function setLanguage(lang) { - document.body.setAttribute("data-report-lang", lang); - document.documentElement.setAttribute("lang", lang); - buttons.forEach(function (button) { - button.setAttribute("aria-pressed", button.getAttribute("data-set-lang") === lang ? "true" : "false"); - }); - } - function updateProgress() { - var scrollTop = window.scrollY || document.documentElement.scrollTop; - var height = Math.max(1, document.documentElement.scrollHeight - window.innerHeight); - var pct = Math.min(100, Math.max(0, (scrollTop / height) * 100)); - if (progressBar) progressBar.style.transform = "scaleX(" + pct / 100 + ")"; - var active = sections[0]; - sections.forEach(function (section) { - if (section.getBoundingClientRect().top <= 110) active = section; - }); - navLinks.forEach(function (link) { - link.setAttribute("aria-current", link.getAttribute("href") === "#" + active.id ? "true" : "false"); - }); - } - buttons.forEach(function (button) { - button.addEventListener("click", function () { - setLanguage(button.getAttribute("data-set-lang")); - }); - }); - window.addEventListener("scroll", updateProgress, { passive: true }); - window.addEventListener("resize", updateProgress); - setLanguage("zh-CN"); - updateProgress(); - })(); - """.strip() + return read_layout_asset("skill-overview.js") diff --git a/scripts/trust_check.py b/scripts/trust_check.py index 4d3254f..2d505d8 100644 --- a/scripts/trust_check.py +++ b/scripts/trust_check.py @@ -18,9 +18,9 @@ except ImportError: # pragma: no cover ROOT = Path(__file__).resolve().parent.parent -SCAN_DIRS = ["agents", "docs", "evals", "references", "runtime", "scripts", "security", "skill-ir", "templates"] +SCAN_DIRS = ["agents", "assets", "docs", "evals", "references", "runtime", "scripts", "security", "skill-ir", "templates"] ROOT_FILES = ["SKILL.md", "README.md", "manifest.json", "requirements-ci.txt", "Makefile"] -TEXT_SUFFIXES = {".md", ".json", ".jsonl", ".yaml", ".yml", ".py", ".sh", ".txt", ".toml"} +TEXT_SUFFIXES = {".css", ".js", ".md", ".json", ".jsonl", ".yaml", ".yml", ".py", ".sh", ".txt", ".toml"} PACKAGE_HASH_SCOPE = "source-contract-without-generated-reports" INTERNAL_SCRIPT_INTERFACE = "internal-module" NETWORK_POLICY_REL_PATH = "security/network_policy.json" diff --git a/skill-ir/examples/yao-meta-skill.json b/skill-ir/examples/yao-meta-skill.json index 077e35b..abaf5e2 100644 --- a/skill-ir/examples/yao-meta-skill.json +++ b/skill-ir/examples/yao-meta-skill.json @@ -105,6 +105,7 @@ "references/skill-atlas-method.md", "references/skill-engineering-method.md", "references/skill-ir-method.md", + "references/skillops-decision-policy.md", "references/systems-thinking-doctrine.md", "references/telemetry-drift-method.md", "references/trust-security-method.md", @@ -130,6 +131,7 @@ "scripts/github_benchmark_scan.py", "scripts/governance_check.py", "scripts/html_rendering.py", + "scripts/import_output_review_decisions.py", "scripts/import_telemetry_events.py", "scripts/init_skill.py", "scripts/judge_blind_eval.py", @@ -150,6 +152,7 @@ "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", "scripts/render_context_reports.py", + "scripts/render_daily_skillops_report.py", "scripts/render_description_drift_history.py", "scripts/render_eval_dashboard.py", "scripts/render_evidence_consistency.py", @@ -174,6 +177,7 @@ "scripts/render_social_preview.py", "scripts/render_system_model.py", "scripts/render_telemetry_hook_recipes.py", + "scripts/render_weekly_curator_report.py", "scripts/render_world_class_claim_guard.py", "scripts/render_world_class_evidence_intake.py", "scripts/render_world_class_evidence_ledger.py", @@ -189,6 +193,7 @@ "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", "scripts/review_studio_output_review.py", + "scripts/review_studio_skillops.py", "scripts/review_studio_waivers.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", @@ -205,6 +210,7 @@ "scripts/skill_report_metrics.py", "scripts/skill_report_model.py", "scripts/skill_report_world_class.py", + "scripts/skillops_opportunity.py", "scripts/summarize_user_signals.py", "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", @@ -215,6 +221,8 @@ "scripts/verify_package.py", "scripts/world_class_evidence_contract.py", "scripts/world_class_source_checks.py", + "scripts/world_class_submission_kit_rendering.py", + "scripts/world_class_submission_matrix.py", "scripts/yao.py", "scripts/yao_cli_adaptation_commands.py", "scripts/yao_cli_config.py", @@ -227,6 +235,8 @@ "scripts/yao_cli_telemetry.py" ], "assets": [ + "assets/skill-overview.css", + "assets/skill-overview.js", "templates/basic_skill.md.j2", "templates/complex_skill.md.j2" ], diff --git a/skill_atlas/catalog.json b/skill_atlas/catalog.json index ca72de3..66b06d9 100644 --- a/skill_atlas/catalog.json +++ b/skill_atlas/catalog.json @@ -176,6 +176,8 @@ "references/telemetry-drift-method.md", "references/trust-security-method.md", "references/user-memory-policy.md", + "assets/skill-overview.css", + "assets/skill-overview.js", "templates/basic_skill.md.j2", "templates/complex_skill.md.j2" ], diff --git a/tests/verify_skill_ir.py b/tests/verify_skill_ir.py index 3e513b1..107159a 100644 --- a/tests/verify_skill_ir.py +++ b/tests/verify_skill_ir.py @@ -51,6 +51,8 @@ def main() -> None: } actual_scripts = set(payload["resources"]["scripts"]) assert expected_scripts <= actual_scripts, sorted(expected_scripts - actual_scripts) + assert "assets/skill-overview.css" in payload["resources"]["assets"], payload["resources"]["assets"] + assert "assets/skill-overview.js" in payload["resources"]["assets"], payload["resources"]["assets"] assert payload["resources"]["reports"], payload assert "evals/trigger_cases.json" in payload["eval_plan"]["trigger"], payload["eval_plan"] assert payload["risk"]["trust_boundary"] == "external", payload diff --git a/tests/verify_skill_overview.py b/tests/verify_skill_overview.py index c151a70..2ab865c 100644 --- a/tests/verify_skill_overview.py +++ b/tests/verify_skill_overview.py @@ -44,6 +44,7 @@ def main() -> None: assert 'aria-pressed="true"' in language_switch_contract, language_switch_contract css_contract = skill_overview_css() + assert css_contract == (ROOT / "assets" / "skill-overview.css").read_text(encoding="utf-8").strip() assert "position: sticky" in css_contract, css_contract[:1200] assert ".report-nav {" in css_contract, css_contract[:3200] assert "background: #ffffff" in css_contract, css_contract[:1600] @@ -57,6 +58,7 @@ def main() -> None: assert "@media (max-width: 980px)" in css_contract, css_contract[-2200:] script_contract = skill_overview_script() + assert script_contract == (ROOT / "assets" / "skill-overview.js").read_text(encoding="utf-8").strip() assert 'setLanguage("zh-CN")' in script_contract, script_contract[-1000:] assert "scaleX(" in script_contract, script_contract assert "aria-current" in script_contract, script_contract diff --git a/tests/verify_trust_check.py b/tests/verify_trust_check.py index 477475e..59ff3cc 100644 --- a/tests/verify_trust_check.py +++ b/tests/verify_trust_check.py @@ -8,6 +8,9 @@ from pathlib import Path ROOT = Path(__file__).resolve().parent.parent SCRIPT = ROOT / "scripts" / "trust_check.py" +sys.path.insert(0, str(ROOT / "scripts")) + +from trust_check import iter_scan_files, relpath INTERFACE = """interface: @@ -60,6 +63,9 @@ def main() -> None: assert payload["summary"]["package_hash_scope"] == "source-contract-without-generated-reports", payload assert payload["summary"]["package_hash_file_count"] == payload["summary"]["scanned_files"], payload assert payload["summary"]["package_sha256"], payload + scanned_paths = {relpath(ROOT, path) for path in iter_scan_files(ROOT)} + assert "assets/skill-overview.css" in scanned_paths, scanned_paths + assert "assets/skill-overview.js" in scanned_paths, scanned_paths assert payload["summary"]["internal_module_count"] >= 3, payload assert payload["summary"]["network_script_count"] == 3, payload assert payload["summary"]["network_policy_covered_count"] == payload["summary"]["network_script_count"], payload