Skip to content

Improve PR merge commit message generation - #4676

Merged
mattleibow merged 3 commits into
mainfrom
mattleibow-improve-pr-commit-message-skill
Aug 5, 2026
Merged

Improve PR merge commit message generation#4676
mattleibow merged 3 commits into
mainfrom
mattleibow-improve-pr-commit-message-skill

Conversation

@mattleibow

@mattleibow mattleibow commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Description

Strengthen the pr-commit-message skill so different models consistently produce durable, evidence-backed merge histories instead of terse diff summaries. Consolidate the former separate style reference into the authoritative skill, define material-topic boundaries, require source-backed claims and attribution, and standardize the final response as one copyable text code fence without surrounding assistant prose.

Add a /merge-message GitHub Agentic Workflow for pull request comments. The workflow uses GPT-5.6 Terra with read-only repository tools, follows the skill, and publishes its fenced response through gh-aw's built-in add-comment safe output. Older results from the same workflow are minimized so rerunning the command leaves the latest message visible without custom GitHub API code.

Related issues

None.

Required skia PR

None.

Areas affected

  • Managed API (binding/)
  • Native / C API (externals/skia/src/c, include/c)
  • Generated P/Invoke bindings
  • Native dependency or Skia update (libpng, HarfBuzz, FreeType, zlib, milestone bump, …)
  • Views & integrations (MAUI, Uno, WPF, WinUI, Blazor, …)
  • Rendering output / visual behavior
  • Performance
  • Tests
  • Build, packaging, or CI
  • Documentation or samples

Changes

None — skill and workflow automation only; no public API or application behavior changes.

Testing

  • python .agents/skills/skill-creator/scripts/quick_validate.py .agents/skills/pr-commit-message — passed.
  • Blind evaluations on three representative PRs using GPT-5.6 Terra produced accurate, detailed merge messages without embedding those PRs in the skill.
  • gh aw compile merge-message --validate --approve --no-check-update — compiled with zero errors and warnings.
  • The generated workflow passed actionlint 1.7.12.
  • git diff --check — passed.

No product tests were added because this changes repository guidance and workflow automation rather than runtime code.

Checklist

  • Tests added or updated (if omitted, explain why above)
  • Changes above lists all public API and behavioral changes (or "None.")
  • New/changed public API? Filed a docs issue in mono/SkiaSharp-API-docs so reference docs can be written later — not applicable
  • Native change? Companion mono/skia PR linked above and bindings regenerated — not applicable

Consolidate evidence gathering, topic boundaries, claim proof, repository voice, and attribution guidance into one skill. Add a /merge-message agentic workflow that uses Terra to inspect pull request evidence and publishes through the built-in safe comment output while minimizing older results.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 11104869-1f5e-4e03-a997-d2452435bc96
@github-actions

github-actions Bot commented Aug 5, 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 -- 4676

PowerShell / Windows:

iex "& { $(irm https://raw.githubusercontent.com/mono/SkiaSharp/main/scripts/get-skiasharp-pr.ps1) } 4676"

Step 2 — Add the local NuGet source

dotnet nuget add source ~/.skiasharp/hives/pr-4676/packages --name skiasharp-pr-4676
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-4676

Define the skill output as exactly one text code fence with no surrounding assistant prose. Keep missing-context notes outside the fence and make the /merge-message workflow post the skill response without unwrapping it.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 11104869-1f5e-4e03-a997-d2452435bc96
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

📊 SkiaSharp benchmarks — PR #4676

this PR (full source build) vs 🌙 nightly · Linux · Windows · macOS

Informational only — this never blocks the PR. 🟢 faster / less allocation · 🔴 slower / more allocation; moves under 5% are hidden as noise.

⏱️ Times are raw BenchmarkDotNet means, and the ⭐ PR and baseline legs run on separate CI runners, so microbenchmarks can swing run-to-run — treat small time deltas as noise. Allocations are deterministic and the reliable signal. The interactive perf-dashboard (linked below) applies smoothing for the trend view.

Highlights

⏱️ Time — 🔴 65 slower · 🟢 20 faster

  • 🔴 MatrixMapPointsBenchmark.MapPoints(Points: 4096) · macOS · 1.54 µs → 2.31 µs (+50%)
  • 🔴 RasterImageLifecycleBenchmark.CreateDataWithReleaseProc(Count: 256) · Windows · 95.81 µs → 132.62 µs (+38%)
  • 🔴 PathBoundsBenchmark.TightBounds(Points: 1024) · Windows · 15.55 µs → 20.89 µs (+34%)
  • 🔴 MatrixMapPointsBenchmark.MapPoint(Points: 4096) · macOS · 18.31 µs → 24.33 µs (+33%)
  • 🟢 MatrixMapPointsBenchmark.MapRect(Points: 256) · Linux · 15.59 µs → 10.96 µs (-30%)
  • …and 80 more (see details below)
Full per-OS benchmark deltas

Linux

⏱️ Time (vs 🌙 nightly 4.152.0-nightly.4)

Benchmark baseline this PR Δ
MatrixMapPointsBenchmark.MapRect(Points: 256) 15.59 µs 10.96 µs 🟢 -30%
MatrixOpsBenchmark.Invert(Count: 4096) 148.69 µs 127.52 µs 🟢 -14%
MatrixMapPointsBenchmark.MapRect(Points: 4096) 203.86 µs 175.44 µs 🟢 -14%
MatrixMapPointsBenchmark.MapRadius(Points: 256) 15.32 µs 13.60 µs 🟢 -11%
PathBoundsBenchmark.TightBounds(Points: 1024) 11.14 µs 9.92 µs 🟢 -11%
RasterImageLifecycleBenchmark.CreateDataWithReleaseProc(Count: 256) 97.43 µs 107.26 µs 🔴 +10%
MatrixMapPointsBenchmark.MapPoint(Points: 4096) 81.76 µs 73.88 µs 🟢 -10%
MatrixOpsBenchmark.Concat(Count: 4096) 240.00 µs 217.56 µs 🟢 -9%
ColorMathBenchmark.PreMultiply(Colors: 4096) 14.50 µs 13.18 µs 🟢 -9%
MatrixMapPointsBenchmark.MapRadius(Points: 4096) 241.38 µs 220.08 µs 🟢 -9%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 64) 384.10 µs 353.73 µs 🟢 -8%
MatrixMapPointsBenchmark.MapVector(Points: 4096) 190.69 µs 175.97 µs 🟢 -8%
MatrixMapPointsBenchmark.MapPoint(Points: 256) 4.99 µs 4.63 µs 🟢 -7%
MatrixMapPointsBenchmark.MapVector(Points: 256) 11.72 µs 10.89 µs 🟢 -7%
ColorMathBenchmark.UnPreMultiply(Colors: 4096) 12.95 µs 12.11 µs 🟢 -6%
ColorMathBenchmark.ToColorF(Colors: 4096) 14.01 µs 13.11 µs 🟢 -6%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 256) 1.40 ms 1.32 ms 🟢 -6%
RuntimeEffectShaderBenchmark.DrawFrame 3.03 ms 2.85 ms 🟢 -6%
RasterImageLifecycleBenchmark.CreateRasterImage(Count: 256) 252.77 µs 266.79 µs 🔴 +6%
SceneRenderBenchmark.RenderFrame(Complexity: 4) 19.07 ms 18.04 ms 🟢 -5%
CanvasDrawBenchmark.Draw(Shapes: 64) 4.39 ms 4.16 ms 🟢 -5%

Windows

⏱️ Time (vs 🌙 nightly 4.152.0-nightly.4)

Benchmark baseline this PR Δ
RasterImageLifecycleBenchmark.CreateDataWithReleaseProc(Count: 256) 95.81 µs 132.62 µs 🔴 +38%
PathBoundsBenchmark.TightBounds(Points: 1024) 15.55 µs 20.89 µs 🔴 +34%
RasterImageLifecycleBenchmark.CreateRasterImage(Count: 256) 249.54 µs 319.78 µs 🔴 +28%
PathBoundsBenchmark.TightBounds(Points: 64) 1.52 µs 1.94 µs 🔴 +28%
MatrixMapPointsBenchmark.MapRadius(Points: 256) 8.69 µs 10.91 µs 🔴 +26%
MatrixMapPointsBenchmark.MapRadius(Points: 4096) 139.48 µs 174.83 µs 🔴 +25%
MatrixMapPointsBenchmark.MapVector(Points: 256) 7.53 µs 9.22 µs 🔴 +23%
MatrixMapPointsBenchmark.MapRect(Points: 256) 7.44 µs 8.89 µs 🔴 +19%
MatrixMapPointsBenchmark.MapRect(Points: 4096) 116.59 µs 139.17 µs 🔴 +19%
MatrixOpsBenchmark.Concat(Count: 4096) 235.48 µs 280.77 µs 🔴 +19%
MatrixOpsBenchmark.Invert(Count: 4096) 129.25 µs 153.95 µs 🔴 +19%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 256) 1.23 ms 1.43 ms 🔴 +16%
MatrixMapPointsBenchmark.MapPoint(Points: 4096) 77.40 µs 89.25 µs 🔴 +15%
MatrixMapPointsBenchmark.MapPoint(Points: 256) 4.83 µs 5.55 µs 🔴 +15%
ColorParseBenchmark.Parse(Iterations: 1000) 76.62 µs 87.44 µs 🔴 +14%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 256) 923.67 µs 1.05 ms 🔴 +13%
MatrixMapPointsBenchmark.MapVector(Points: 4096) 130.29 µs 147.46 µs 🔴 +13%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 64) 330.97 µs 373.92 µs 🔴 +13%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 2048) 2.86 ms 3.22 ms 🔴 +12%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 1024) 2.54 ms 2.83 ms 🔴 +12%
RuntimeEffectShaderBenchmark.DrawFrame 1.14 ms 1.27 ms 🔴 +11%
ColorMathBenchmark.PreMultiply(Colors: 4096) 13.40 µs 14.85 µs 🔴 +11%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 1024) 737.17 µs 813.92 µs 🔴 +10%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 64) 243.44 µs 268.73 µs 🔴 +10%
ColorMathBenchmark.UnPreMultiply(Colors: 4096) 12.24 µs 13.44 µs 🔴 +10%
…and 7 more

macOS

⏱️ Time (vs 🌙 nightly 4.152.0-nightly.4)

Benchmark baseline this PR Δ
MatrixMapPointsBenchmark.MapPoints(Points: 4096) 1.54 µs 2.31 µs 🔴 +50%
MatrixMapPointsBenchmark.MapPoint(Points: 4096) 18.31 µs 24.33 µs 🔴 +33%
MatrixMapPointsBenchmark.MapRect(Points: 4096) 49.92 µs 61.16 µs 🔴 +23%
MatrixMapPointsBenchmark.MapRadius(Points: 256) 6.19 µs 7.55 µs 🔴 +22%
MatrixMapPointsBenchmark.MapPoints(Points: 256) 134.7 ns 161.7 ns 🔴 +20%
MatrixMapPointsBenchmark.MapRadius(Points: 4096) 98.30 µs 116.02 µs 🔴 +18%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 64) 155.36 µs 182.86 µs 🔴 +18%
MatrixMapPointsBenchmark.MapVector(Points: 4096) 39.71 µs 46.48 µs 🔴 +17%
RasterImageLifecycleBenchmark.CreateDataWithReleaseProc(Count: 256) 68.05 µs 76.31 µs 🔴 +12%
ColorParseBenchmark.Parse(Iterations: 1000) 63.89 µs 71.31 µs 🔴 +12%
SceneRenderBenchmark.RenderFrame(Complexity: 1) 1.19 ms 1.31 ms 🔴 +10%
MatrixOpsBenchmark.Concat(Count: 4096) 112.25 µs 122.52 µs 🔴 +9%
CanvasDrawBenchmark.Draw(Shapes: 512) 11.21 ms 12.24 ms 🔴 +9%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 1024) 1.45 ms 1.57 ms 🔴 +9%
SceneRenderBenchmark.RenderFrame(Complexity: 4) 5.44 ms 5.89 ms 🔴 +8%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 256) 681.85 µs 736.29 µs 🔴 +8%
ColorMathBenchmark.ToColor(Colors: 4096) 19.17 µs 20.68 µs 🔴 +8%
CanvasDrawBenchmark.Draw(Shapes: 64) 1.40 ms 1.51 ms 🔴 +8%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 2048) 2.65 ms 2.85 ms 🔴 +8%
RuntimeEffectShaderBenchmark.DrawFrame 511.33 µs 548.28 µs 🔴 +7%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 1024) 667.89 µs 715.17 µs 🔴 +7%
PathBoundsBenchmark.TightBounds(Points: 1024) 8.40 µs 8.98 µs 🔴 +7%
ColorMathBenchmark.UnPreMultiply(Colors: 4096) 7.53 µs 8.05 µs 🔴 +7%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 64) 186.07 µs 198.70 µs 🔴 +7%
MatrixOpsBenchmark.Invert(Count: 4096) 65.72 µs 70.12 µs 🔴 +7%
…and 7 more

📈 Full interactive perf-dashboard & run details →

Move the final quality gate into explicit step 6 and verify the copyable text fence alongside content coverage, claim proof, and attribution before returning the message.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 11104869-1f5e-4e03-a997-d2452435bc96
@mattleibow
mattleibow merged commit 99a4024 into main Aug 5, 2026
82 of 84 checks passed
@mattleibow
mattleibow deleted the mattleibow-improve-pr-commit-message-skill branch August 5, 2026 18:10
@github-actions

github-actions Bot commented Aug 5, 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 added a commit that referenced this pull request Aug 5, 2026
[infra] Upgrade agentic workflows to gh-aw v0.84.3 (#4679)

Context: #4676
Context: https://github.com/mono/SkiaSharp/actions/runs/31033558899
Context: github/gh-aw-firewall#6695

Upgrade the repository-wide agentic workflow toolchain and generated
infrastructure. This remains workflow-only and does not change SkiaSharp's
public API or product behavior.

~~ Restore Terra execution ~~

PR #4676 introduced Merge Message with `gpt-5.6-terra`, but its gh-aw v0.83.4
lock selected AWF v0.27.42. Although that release's model mapping documented
Terra, runtime startup rejected it as unsupported before Copilot inference.

Retain the requested model while moving all six agentic workflows to gh-aw
v0.84.3 and AWF v0.27.43. The newer firewall includes the runtime-model work
that adds the gpt-5.6 Sol, Terra, and Luna family to its static model and
pricing catalogs.

Apply the current workflow codemods, move nested engine models to top-level
frontmatter, refresh GitHub Actions and container digest pins, and regenerate
all lock files. Add an SC1090 annotation around Auto Skia Sync's dynamic
environment import so the stricter ShellCheck phase can verify it without
changing execution behavior.

Strict schema validation and ShellCheck compiled all six workflows. gh-aw's
Windows actionlint handoff emitted backslash container paths and exited with a
tooling error, so the same pinned actionlint 1.7.12 container was invoked with
forward-slash paths; all six generated lock workflows passed. A repeat compile
changed no generated hashes, and `git diff --check` passed.

~~ Canonical Copilot authoring entry points ~~

The existing Agentic Workflows dispatcher lived under `.agents/agents` and
linked to gh-aw v0.71.1 guidance. Replace it with gh-aw v0.84.3's canonical
`.github/agents` custom agent and add the matching `.github/skills` router.

These entry points classify workflow creation, update, debugging, and upgrade
requests, then load the corresponding current upstream guidance. Keeping the
tool-owned locations avoids stale duplicate dispatchers being recreated by
future upgrades.

~~ Generated maintenance control plane ~~

Add gh-aw's generated Agentic Maintenance workflow because the repository uses
expiring safe outputs. Its daily jobs close expired discussions, issues, and
pull requests and clean stale cache-memory entries.

The same workflow provides guarded maintainer operations for enable/disable,
update/upgrade, safe-output replay, label creation, activity and forecast
reports, pull-request branch updates, and workflow validation. Global
permissions remain empty; each job declares only its required permissions,
checks maintainer authorization, and refuses to operate on forks.

Co-authored-by: Matthew Leibowitz <mattleibow@live.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

📦 Artifact size report

Packages from this PR (build 1541377) vs the latest nightly baseline 4.152.0-nightly.4 (observed 2026-08-05).

Total .nupkg size: 569.8 MB → 569.3 MB (−579.6 KB, -0.1%)

Packages

⚠️ marks growth over 500.0 KB or 2%. Changes under 50.0 KB are treated as noise.

Package baseline this PR Δ Δ%
SkiaSharp.NativeAssets.WinUI 109.1 MB 108.5 MB 🟢 −642.1 KB -0.6%
SkiaSharp.NativeAssets.WebAssembly 69.7 MB 69.7 MB 🔴 +59.6 KB +0.1%

+38 package(s) unchanged (< 50.0 KB).

Per-file changes

SkiaSharp.NativeAssets.WinUI

File Size
runtimes/win-arm64/native/libGLESv2.pdb 64.5 MB → 64.4 MB (🟢 −128.0 KB)
runtimes/win-x86/native/libGLESv2.pdb 67.3 MB → 67.2 MB (🟢 −128.0 KB)
runtimes/win-x64/native/libGLESv2.pdb 66.6 MB → 66.5 MB (🟢 −96.0 KB)

Informational only — this never blocks the PR. Native binaries are labelled by os/arch.

@github-actions github-actions Bot added this to the 4.152.0-rc.1 milestone Sep 3, 2026
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