Skip to content

Add skia-analyst and sample-scout skills with daily/weekly workflows#3755

Merged
mattleibow merged 31 commits into
mainfrom
mattleibow/dev-release-notes-writer-skill
Apr 29, 2026
Merged

Add skia-analyst and sample-scout skills with daily/weekly workflows#3755
mattleibow merged 31 commits into
mainfrom
mattleibow/dev-release-notes-writer-skill

Conversation

@mattleibow

@mattleibow mattleibow commented Apr 26, 2026

Copy link
Copy Markdown
Contributor

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

  • Unified schema with 9 required fields per finding covering both changelog and gap-analysis lenses (changeType, importance, bindingStatus, impact, priority, etc.)
  • Dual-model architecture: launches Opus + GPT agents in parallel for broader coverage
  • Scans upstream Skia RELEASE_NOTES.md, diffs bindings, checks C++ headers
  • Supports full, windowed (milestone range), and diff (git ref) scan modes
  • Markdown report groups by impact with collapsible details, milestone padding, priority circles, and status squares

sample-scout

  • Analyzes 400+ GM files from google/skia via GitHub API
  • Checks API availability against binding/SkiaSharp/ for each sample
  • Cross-references with existing Gallery samples to find coverage gaps
  • All gallery-ready fields required: visualGoal, suggestedControls, category, skiaSharpApis

Agentic 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 cleanup
  • Both use the gh-aw report pattern: pre-step symlinks, safe-outputs with mentions: false, step summary upload

Deleted

  • .agents/skills/skia-feature-scout/ — merged into skia-analyst
  • .agents/skills/release-notes-writer/ — merged into skia-analyst (deleted in earlier commit)

@github-actions

github-actions Bot commented Apr 26, 2026

Copy link
Copy Markdown
Contributor

📦 Try the packages from this PR

Warning

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 -- 3755

PowerShell / 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-3755
More options
Option Description
--successful-only / -SuccessfulOnly Only use successful builds
--force / -Force Overwrite previously downloaded packages
--list / -List List available artifacts without downloading
--build-id ID / -BuildId ID Download from a specific build

Or download manually from Azure Pipelines — look for the nuget artifact on the build for this PR.

Remove the source when you're done:

dotnet nuget remove source skiasharp-pr-3755

@github-actions

github-actions Bot commented Apr 26, 2026

Copy link
Copy Markdown
Contributor

📖 Documentation Preview

The documentation for this PR has been deployed and is available at:

🔗 View Staging Site
🔗 View Staging Docs
🔗 View Staging Gallery (Blazor)
🔗 View Staging Gallery (Uno Platform)
🔗 View Staging SkiaFiddle

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 and others added 11 commits April 29, 2026 00:51
…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
mattleibow force-pushed the mattleibow/dev-release-notes-writer-skill branch from e091713 to 55723f8 Compare April 29, 2026 07:16
…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>
mattleibow and others added 5 commits April 29, 2026 19:11
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>
mattleibow and others added 4 commits April 29, 2026 19:52
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>
mattleibow and others added 9 commits April 29, 2026 20:43
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>
@mattleibow mattleibow changed the title Add release-notes-writer skill for generating changelogs between SkiaSharp versions Add skia-analyst and sample-scout skills with daily/weekly workflows Apr 29, 2026
- 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>
@mattleibow
mattleibow merged commit 445f7d1 into main Apr 29, 2026
3 of 4 checks passed
@mattleibow
mattleibow deleted the mattleibow/dev-release-notes-writer-skill branch April 29, 2026 19:51
github-actions Bot pushed a commit that referenced this pull request Apr 29, 2026
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant