Back to Skiasharp

Release Notes Audit Report Schema

.agents/skills/release-notes-audit/references/report-schema.md

3.119.46.4 KB
Original Source

Release Notes Audit Report Schema

JSON schema for the release notes audit report. The AI generates this JSON as structured output, then render-release-notes-audit.py injects it into viewer.html to produce a standalone HTML report.

Top-Level Structure

json
{
  "meta": { ... },
  "summary": { ... },
  "items": [ ... ],
  "deprecations": [ ... ],
  "nextSteps": [ ... ]
}

meta — Audit Metadata

json
{
  "date": "2026-04-15",
  "schemaVersion": "1.0",
  "previousMilestone": 119,
  "currentMilestone": 133,
  "latestUpstreamMilestone": 148,
  "skiaSubmoduleCommit": "0c28aa73beebf4747af531a893b4e8d94690f5cf",
  "releaseNotesSource": "https://raw.githubusercontent.com/google/skia/main/RELEASE_NOTES.md"
}
FieldTypeRequiredDescription
datestringYesISO date of the audit
schemaVersionstringYesAlways "1.0"
previousMilestoneintegerYesThe milestone SkiaSharp was on before this bump
currentMilestoneintegerYesThe milestone SkiaSharp is now on
latestUpstreamMilestoneintegerYesLatest milestone in upstream release notes
skiaSubmoduleCommitstringNomono/skia fork commit if available
releaseNotesSourcestringYesURL where release notes were fetched

summary — Overview Counts

json
{
  "totalItems": 52,
  "full": 3,
  "partial": 1,
  "missing": 14,
  "actionNeeded": 5,
  "correctlyAbsent": 12,
  "notApplicable": 17,
  "critical": 2,
  "high": 6,
  "medium": 8,
  "low": 10
}
FieldTypeDescription
totalItemsintegerTotal items cataloged
fullintegerCount with full binding
partialintegerCount with partial binding
missingintegerCount with no binding
actionNeededintegerCount needing [Obsolete] or other fix
correctlyAbsentintegerRemoved by Skia, never wrapped (correct)
notApplicableintegerInternal/header-only changes
criticalintegerCritical priority items
highintegerHigh priority items
mediumintegerMedium priority items
lowintegerLow priority items

items — Individual API Change Items

Array of objects, one per release notes entry:

json
{
  "id": 1,
  "milestone": 133,
  "category": "new_feature",
  "skiaApi": "SkColorSpace::MakeCICP",
  "description": "Create SkColorSpace from CICP code points (Rec. ITU-T H.273)",
  "cApiStatus": "present",
  "cApiFunction": "sk_colorspace_new_cicp",
  "cApiFile": "sk_colorspace.h",
  "csharpStatus": "present",
  "csharpMethod": "SKColorSpace.CreateCicp()",
  "csharpFile": "SKColorSpace.cs",
  "bindingStatus": "full",
  "priority": "low",
  "notes": "Already fully bound"
}
FieldTypeRequiredDescription
idintegerYesSequential identifier
milestoneintegerYesSkia milestone where this appeared
categorystringYesOne of: new_feature, deprecation, removal, behavior_change, header_reorg, internal
skiaApistringYesUpstream Skia API name or description
descriptionstringYesWhat changed and why it matters
cApiStatusstringYes"present", "missing", "not_applicable"
cApiFunctionstringNoC API function name if present
cApiFilestringNoC API header file if present
csharpStatusstringYes"present", "missing", "not_applicable"
csharpMethodstringNoC# method/property name if present
csharpFilestringNoC# file if present
bindingStatusstringYes"full", "partial", "missing", "not_applicable", "correctly_absent", "action_needed"
prioritystringYes"critical", "high", "medium", "low", "none"
notesstringNoAdditional context

category Values

ValueDescription
new_featureNew public API added to Skia
deprecationAPI marked deprecated in Skia
removalAPI removed from Skia public surface
behavior_changeExisting API changed behavior silently
header_reorgHeaders moved/renamed
internalBuild system, backend-specific, or irrelevant to SkiaSharp

bindingStatus Values

ValueBadgeDescription
full✅ FullC API + C# wrapper both exist
partial🟡 PartialC API exists but C# incomplete, or vice versa
missing❌ MissingNo C API or C# wrapper
not_applicable🚫 N/AChange doesn't need a binding
correctly_absent🚫 N/ASkia removed this; SkiaSharp never wrapped it
action_needed⚠️ ActionSkiaSharp wraps deprecated/removed Skia API

deprecations — APIs Needing [Obsolete] Markers

Array of objects for APIs that Skia deprecated but SkiaSharp still exposes without [Obsolete]:

json
{
  "id": 1,
  "skiaApi": "SkTypeface::MakeFromName",
  "deprecatedSince": 120,
  "skiasharpApi": "SKTypeface.FromFamilyName()",
  "skiasharpFile": "SKTypeface.cs",
  "replacement": "SKFontManager.CreateTypeface()",
  "obsoleteMessage": "Use SKFontManager.CreateTypeface() instead."
}
FieldTypeRequiredDescription
idintegerYesSequential identifier
skiaApistringYesUpstream Skia API that was deprecated
deprecatedSinceintegerYesMilestone when deprecated
skiasharpApistringYesSkiaSharp method/property name
skiasharpFilestringYesC# file containing the API
replacementstringNoWhat users should migrate to
obsoleteMessagestringYesSuggested [Obsolete("...")] text

nextSteps — Prioritized Action Items

json
{
  "priority": 1,
  "severity": "critical",
  "action": "Create SKPathBuilder bindings",
  "milestone": 143,
  "reason": "SkPath is going immutable. All edit methods will be removed.",
  "skillToUse": "add-api"
}
FieldTypeRequiredDescription
priorityintegerYes1 = highest
severitystringYes"critical", "high", "medium", "low"
actionstringYesWhat to do
milestoneintegerNoWhich Skia milestone drives this
reasonstringYesWhy (cite impact)
skillToUsestringNoRecommended SkiaSharp skill for follow-up