.agents/skills/skia-analyst/references/analysis-instructions.md
Read this before starting any analysis. It covers both lenses — changelog (what shipped) and gap analysis (what's missing) — because every finding needs both.
The user may specify:
Infer the scan mode from context. If unclear, ask.
Fetch from: https://raw.githubusercontent.com/google/skia/main/RELEASE_NOTES.md
Extract features per milestone. For windowed/diff mode, focus on the relevant range but still scan a few milestones beyond.
For types SkiaSharp already binds, fetch upstream C++ headers from google/skia and compare
against what SkiaSharp exposes:
owner=google, repo=skia, path=include/core/SkImage.h)binding/SkiaSharp/SkiaApi.generated.cs for sk_* / gr_* P/Invoke externs.
This reflects the full C API surface even if externals/skia/include/c/ isn't checked out.binding/SkiaSharp/*.csHigh-value headers to scan:
| C# | C API prefix | C++ header |
|---|---|---|
SKCanvas | sk_canvas_* | include/core/SkCanvas.h |
SKImage | sk_image_* | include/core/SkImage.h |
SKPath | sk_path_* | include/core/SkPath.h |
SKPathBuilder | sk_pathbuilder_* | include/core/SkPathBuilder.h |
SKShader | sk_shader_* | include/core/SkShader.h |
SKImageFilter | sk_imagefilter_* | include/effects/SkImageFilters.h |
SKColorFilter | sk_colorfilter_* | include/core/SkColorFilter.h |
SKCodec | sk_codec_* | include/codec/SkCodec.h |
SKFont | sk_font_* | include/core/SkFont.h |
SKTypeface | sk_typeface_* | include/core/SkTypeface.h |
SKSurface | sk_surface_* | include/core/SkSurface.h |
SKColorSpace | sk_colorspace_* | include/core/SkColorSpace.h |
git diff REF1..REF2 -- externals/skia/include/c/ externals/skia/src/c/git diff REF1..REF2 -- binding/ ':!*.generated.cs'git log REF1..REF2 --onelinegit diff REF1..REF2 -- native/ externals/skia/DEPS cgmanifest.jsonEvery finding needs BOTH a changelog classification AND a gap classification.
changeType:
| Value | Criteria |
|---|---|
added | New API, class, method, capability |
changed | Modified behavior or signature |
fixed | Bug fix |
deprecated | New [Obsolete] marker |
removed | Removed API or feature |
dependency | Dependency version bump |
platform | New platform, build flag change |
upstream | Benefit from Skia engine upgrade (automatic, no API change) |
importance:
| Value | Criteria |
|---|---|
breaking | Existing code may fail to compile or behave differently |
major | New user-facing capability, significant feature |
minor | Enhancement, quality improvement |
patch | Bug fix, internal improvement |
bindingStatus:
| Value | Description |
|---|---|
full | C API + C# wrapper both exist |
partial | C API exists but C# wrapper missing (quick win) |
missing | Neither C API nor C# wrapper |
action_needed | SkiaSharp wraps deprecated/removed Skia API |
correctly_absent | Skia removed; SkiaSharp never wrapped |
not_applicable | Doesn't need a binding (internal, auto-available) |
impact:
| Value | Decision guide |
|---|---|
transformative | "Does this unlock a new category of app?" |
significant | "Would a user see the difference or gain a major capability?" |
moderate | "Is this useful but not exciting?" |
minor | Default for small helpers |
priority:
| Value | Criteria |
|---|---|
critical | Will break on next Skia bump |
high | Major new capability or highly requested |
medium | Useful addition, quality improvement |
low | Minor utility, internal concern |
Include:
Exclude:
When a Skia bump is in the diff, extract "invisible benefits" — things users get automatically:
For upstream findings: bindingStatus = not_applicable, impact and priority based on user value.
For findings with importance of major or higher, include a slideBullet — a one-line marketing
bullet for downstream tooling (e.g., blog post drafts). Not rendered in the Markdown report but
captured in the JSON for other tools to use.
For importance: "breaking" findings, include a migrationGuide with before/after code.
For changeType: "dependency" findings, include dependencyName, dependencyFrom, dependencyTo.