Add skia-analyst and sample-scout skills with daily/weekly workflows#3755
Merged
Conversation
Contributor
📦 Try the packages from this PRWarning Do not run these scripts without first reviewing the code in this PR. Step 1 — Download the packages bash / macOS / Linux: curl -fsSL https://raw.githubusercontent.com/mono/SkiaSharp/main/scripts/get-skiasharp-pr.sh | bash -s -- 3755PowerShell / Windows: iex "& { $(irm https://raw.githubusercontent.com/mono/SkiaSharp/main/scripts/get-skiasharp-pr.ps1) } 3755"Step 2 — Add the local NuGet source dotnet nuget add source ~/.skiasharp/hives/pr-3755/packages --name skiasharp-pr-3755More options
Or download manually from Azure Pipelines — look for the Remove the source when you're done: dotnet nuget remove source skiasharp-pr-3755 |
Contributor
|
📖 Documentation Preview The documentation for this PR has been deployed and is available at: 🔗 View Staging Site This preview will be updated automatically when you push new commits to this PR. This comment is automatically updated by the documentation staging workflow. |
mattleibow
pushed a commit
that referenced
this pull request
Apr 28, 2026
…Sharp versions New skill that diffs two git refs (tags, SHAs, or branches) to produce: - Marketing slides format: short, emoji-prefixed bullet points grouped by theme - Detailed changelog format: technical details grouped by change type - Structured JSON with schema validation - Interactive HTML viewer with filtering, grouping, and sorting Skill structure follows the established patterns (feature-scout, issue-triage): - SKILL.md with phased workflow (setup → gather → cross-reference → synthesize → output) - JSON Schema (Draft 2020-12) with validation script - Render script producing self-contained HTML via viewer template - Persist script for output/ai/ archival - Analysis instructions for parallel sub-agents - 3 eval test cases covering wide diffs, narrow security releases, and single PRs Registered in AGENTS.md slash command table. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When a Skia milestone bump is in the diff, the skill now extracts 'invisible benefits' — improvements users get automatically from the engine upgrade without any API changes: - Rendering quality (noise rotation fix, mipmap sharpening, gradients) - Performance (noise raster speedup, canvas preallocation) - Color accuracy (BT.1886 kRec709 correction, HDR transfer functions) - Codec improvements (Rust PNG official, HDR metadata, memory limits) - Reliability (device-lost callbacks, SkSL validation) New changeType 'upstream' added to schema, viewer, and instructions. Phase 3 rewritten with detailed extraction guidance and examples. Changelog ordering updated with dedicated 'Engine Improvements' section. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
New structured 'impact' enum answers 'how much do users care?' to complement the existing 'priority' (urgency) and 'effort' (cost): - transformative: unlocks new app categories (SkMesh, HDR pipeline) - significant: major visible improvement (CSS gradients, RuntimeShader) - moderate: useful gap fill (fMaxDecodeMemory, codec registration) - minor: small utility, completeness (SkData.Equals, kDefault_Flag) Viewer gains: - Impact filter pills with color-coded badges - Group-by impact option - Action Score sort (impact × priority × 1/effort) that surfaces high-value, urgent, achievable items at the top - Impact shown in finding detail grid Schema changes: - impact enum in $defs, referenced from finding properties - byImpact in summary counts - Backward compatible (impact is optional) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…m Skia GMs New skill that scans Google's upstream Skia GM (golden master) samples to find demos worth porting to the SkiaSharp Gallery. Uses parallel agents to analyze all 400+ .cpp files from google/skia/gm/, checking each for: - Interest level (high/medium/low) - API availability in SkiaSharp - Existing Gallery coverage (none/similar/existing) Produces a structured JSON report with interactive HTML viewer featuring search, filtering by interest/API/coverage, and summary metrics including an 'opportunity' count (high interest + APIs ready + no existing sample). Includes: - SKILL.md with 5-phase workflow (list, analyze, cross-ref, validate, present) - JSON Schema (Draft 2020-12) with validation script - Render script producing self-contained HTML viewer - Persist script for output/ai/ archival - Analysis instructions with classification criteria - 2 eval test cases All scripts validated end-to-end with 373-sample test data. Registered in AGENTS.md. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Matches the feature-scout viewer pattern: - Group by: None, Interest, Coverage, API Availability (with ▼/▲ direction) - Sort by: Interest, Name, File, Coverage, APIs (with ▼/▲ direction) - Group headers with count badges - Default: grouped by Coverage, sorted by Interest Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The render script was replacing a marker inside array brackets, producing const DATA = [[...]][]; — invalid JS. Fixed by using /*INJECT_DATA_HERE*/null as the marker so the replacement produces clean const DATA = [...]; Verified with Playwright: 373 rows rendered, filters working, grouping/sorting functional. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Each finding row now has a '📋 Copy Prompt' button in the detail section that generates a context-rich prompt for building that Gallery sample. The prompt includes: - Sample name, description, and upstream source link - Key Skia APIs used in the original C++ implementation - Warning about missing APIs (if blocked) with add-api guidance - Note about existing similar samples to avoid duplication - Standard requirements (match Gallery pattern, build check, etc.) Three prompt variants depending on the finding: - APIs available: straightforward build prompt - APIs blocked: includes missing API list and skip/add-api guidance - Similar exists: adds note to differentiate from existing sample Verified with Playwright: 373 buttons rendered, prompt generation tested for all three variants. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ompts Schema gains 4 new optional fields collected during the scout: - visualGoal: what the user sees (not what it tests) - suggestedControls: interactive controls with ranges - category: Gallery section (Shaders, Text, Paths, etc.) - skiaSharpApis: C# API names (not C++ names) Prompt generation now produces zero-placeholder prompts when these fields are present, matching the proposed template structure. Falls back gracefully to the original template when fields are absent (backward compatible with existing scout data). Viewer detail grid shows the new fields. Category pill appears on the row header when present. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
All findings must now include visualGoal, suggestedControls, category, and skiaSharpApis. No backward compat needed — this branch hasn't merged yet. Prompt generation uses the fields directly with no fallback paths. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…-analyst skill Merges two skills that analyzed the same data from opposite directions: - skia-feature-scout (forward: what's missing?) - release-notes-writer (backward: what shipped?) The new skia-analyst skill always produces both: - Changelog: slides, detailed changelog, PR links, migration guides - Gap analysis: impact/priority/effort scoring, hidden API scan, action items Key design decisions: - Always both outputs, no mode selection - Dual-model architecture (Opus + GPT) for everything - Flexible input: no refs (full scan), one ref, two refs, milestone numbers - Unified schema with all fields required - 4-tab HTML viewer: Findings, Slides, Changelog, Next Steps - Action Score sort (impact x priority x 1/effort) - No persistence (output to /tmp only) Also removes stale release-notes-audit entry from AGENTS.md. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
mattleibow
force-pushed
the
mattleibow/dev-release-notes-writer-skill
branch
from
April 29, 2026 07:16
e091713 to
55723f8
Compare
…urce paths - Remove viewer.html (output is now GitHub-flavored Markdown) - Render script produces .md with collapsible details, emoji key, impact groups - Update SKILL.md: agents use SkiaApi.generated.cs for C API (not submodule headers), fetch upstream C++ from google/skia via GitHub - Update analysis-instructions.md with correct source paths Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Based on Opus+GPT review feedback: - Remove slides, changelog, nextSteps from schema (findings has all the data) - Remove /tmp paths (use working directory) - Fix hardcoded m88-m148 (derive from meta.scanMode) - Fix title from 'Gap Analysis' to 'Skia Analyst Report' - Remove dead code (render_table, render_category) - Fix HTML eval expectation (removed) - Validate uses resolve() for reliable path traversal - Render handles diff/windowed/full subtitle correctly Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fixes from Opus+GPT second review: - Fix broken description frontmatter (ungrammatical sentence) - Fix bash commands with '(in the working directory)' inside them - Rewrite schema-cheatsheet.md (removed slides/changelog/nextSteps) - Remove stale eval expectations (nextSteps, slides, HTML) - Remove orphan 'Security, Engine Improvements...' line from Phase 3 - Remove unused BS_EMOJI dict and Counter import from render - Clarify slideBullet as JSON-only enrichment, not rendered - Add guidance for dependency/breaking enrichment fields - Fix Phase 5 to reflect findings-only output Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Runs the skia-analyst skill daily via gh-aw to update pinned tracking issue #3684 with the latest Skia API gap analysis. Workflow: 1. Determine current milestone from submodule 2. Run full skia-analyst scan (release notes + header scan + binding check) 3. Validate JSON report 4. Render to GitHub-flavored Markdown 5. Update issue #3684 body with rendered report 6. Upload artifacts and step summary Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Use create-issue with close-older-issues instead of update-issue - Add proper safe-outputs: mentions:false, allowed-github-references:[], max-bot-mentions:0 to avoid cross-references and notifications - Title prefix 'Skia API Gap Analysis:' for automatic cleanup - Expires after 30 days - Permissions: issues:read (write via safe-outputs) - Note: use ### headers in report body per gh-aw report guidelines Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add cp, mkdir, echo, sed to bash allow-list (Step 6 was failing) - Fetch SkMilestone.h via GitHub MCP instead of uninitialised submodule - Drop unnecessary issues:read permission (safe-outputs handles writes) - Add raw.githubusercontent.com to network allow-list - Add --header-offset flag to render script (# → ### for issue context) - Add mkdir -p before cp in Step 6 - Make title contract explicit for close-older-issues matching - Add truncation guidance for 65K char limit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Output is always embedded in GitHub issues, so headers always start at h3. Removes argparse dependency and simplifies the script. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove Steps 1/3/4 that duplicated skill internals (milestone detection, validation, rendering params) - Add pre-step for step-summary symlink (matches auto-triage pattern) - 3 steps: run skill → render & publish → upload artifacts - Skill owns the how; workflow owns the output format and publishing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The skill's Phase 4 handles validation and rendering. Workflow just publishes the .md output as an issue and uploads artifacts. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- New render-sample-scout-md.py produces ### headers for GitHub issues - Skill Phase 4 now renders Markdown (primary) + HTML (optional) - Weekly workflow: run skill → publish issue → upload artifacts - Same pattern as skia-analyst and auto-triage workflows Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Blocking fixes: - B1: skia-analyst skill now outputs skia-analyst-report.json (not date-stamped) - B2: sample-scout skill now outputs sample-scout-report.json (canonical name) - B3: Added repos toolset to both workflows for get_file_contents access Consistency fixes: - Both workflows: added issues:read permission - Both workflows: standardized bash allow-lists (added jq, find, wc, sed) - Both workflows: added mono/skia to sample-scout allowed-repos - Both workflows: added raw.githubusercontent.com to sample-scout network - Both workflows: explicit 'Skip Phase 5' for headless runs - Both workflows: deterministic trim order for 60K char limit - Both workflows: title uses parentheses not em-dashes - skia-analyst: title-prefix shortened to 'Skia Analyst:' (matches dual purpose) - Both skills: Phase 5 has headless mode note Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The agent doesn't need to be told to skip interactive prompts in a workflow, and it can figure out how to trim a large body on its own. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ensures it works in headless workflows where web_fetch may not be available. gh api is always available via the bash allow-list. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Deleted render-sample-scout.py, viewer.html, persist-sample-scout.py (390 lines) — output is Markdown only now - Moved Counter import to top of validate-sample-scout.py - Use Path.resolve() for consistent schema path resolution - Removed Phase 4c/4d from SKILL.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- render-sample-scout.py docstring: old filename in usage line - evals.json: 'HTML viewer' → 'Markdown report' - SKILL.md description: 'interactive HTML viewer' → 'Markdown report' Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
B1: sample-scout agent prompt now includes all 4 required fields
(visualGoal, suggestedControls, category, skiaSharpApis)
B2: schema-cheatsheet moves those 4 fields from Optional to Required
B3: Use gh api raw accept header instead of base64 decode
W2: Fix stale render-sample-scout-md.py in usage print
W6: Write release notes to working dir, not /tmp
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- sample-scout validator: wrap json.load in try/except, exit 2 on invalid JSON (was uncaught traceback exiting 1) - sample-scout SKILL.md: write gm-files.txt to working dir not /tmp Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Fix max-bot-mentions: 0 → 1 (minimum is 1) - Use 'github' ecosystem identifier instead of raw.githubusercontent.com - Generate .lock.yml for skia-analyst and sample-scout workflows Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
github-actions Bot
added a commit
that referenced
this pull request
Apr 29, 2026
Add docs landing page improvement (#3794), note CI and workflow automation improvements (#3755, #3787, #3802, #3805, #3808, #3811, #3812, #3813), and expand highlights paragraph. Community sample fixes by @ramezgerges (#3785, #3790) were already present. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replace the separate skia-feature-scout and release-notes-writer skills with a unified skia-analyst skill that analyzes Skia features from two angles in a single run: what shipped (upstream engine benefits, migration guides) and what's missing (gap analysis with impact/priority/effort scoring, hidden API scan). Also add the sample-scout skill for discovering upstream Skia GM samples worth porting to the SkiaSharp Gallery.
Both skills follow the same pattern: SKILL.md instructions, JSON Schema with validation script, and a Markdown renderer that produces
###headers suitable for embedding in GitHub issues. Each skill has a companion agentic workflow that runs on a schedule, delegates to the skill, and publishes the rendered report as a GitHub issue with automatic cleanup of older reports.skia-analyst
changeType,importance,bindingStatus,impact,priority, etc.)sample-scout
google/skiavia GitHub APIbinding/SkiaSharp/for each samplevisualGoal,suggestedControls,category,skiaSharpApisAgentic workflows
.github/workflows/skia-analyst.md— daily, creates issue with title prefix "Skia Analyst:" and close-older-issues cleanup.github/workflows/sample-scout.md— weekly, creates issue with title prefix "Sample Scout:" and close-older-issues cleanupmentions: false, step summary uploadDeleted
.agents/skills/skia-feature-scout/— merged into skia-analyst.agents/skills/release-notes-writer/— merged into skia-analyst (deleted in earlier commit)