---
name: api-add-review
description: >
  Add new C# APIs to SkiaSharp by wrapping Skia C++ functionality, or review
  existing API PRs for correctness and style. Two workflows:
  (1) Add: C++ analysis → C API → bindings → C# wrapper → tests → review
  (2) Review: check naming, Span overloads, properties, tests, interop safety.

  Triggers:
  - "add DrawFoo method", "expose SkSurface::draw", "wrap sk_foo_bar"
  - "add API", "expose function", "wrap method", "create binding for"
  - "review this API", "check the API surface", "review PR #NNN for API design"
  - Issue classified as "New API" (after fetching and classification)
---

# Add / Review API Skill

This skill has two modes:

1. **Add mode** — implement a new API from scratch, then review it
2. **Review mode** — review an existing PR/diff for API design correctness

Both modes share the same design rules and quality bar.

## Detecting Mode

| User says | Mode |
|-----------|------|
| "add", "expose", "wrap", "create binding" | Add |
| "review", "check API", "look at PR" | Review |
| Issue classified as "New API" | Add |
| Self-review after adding | Review (automatic) |

## ⚠️ Branch Protection (COMPLIANCE REQUIRED)

> **🛑 NEVER commit directly to protected branches. This is a policy violation.**

| Repository | Protected Branches | Required Action |
|------------|-------------------|-----------------|
| SkiaSharp (parent) | `main` | Create feature branch first |
| externals/skia (submodule) | `main`, `skiasharp` | Create feature branch first |

## ❌ NEVER Do These

| Shortcut | Consequence |
|----------|-------------|
| Commit directly to `main` or `skiasharp` | Policy violation |
| Edit generated declarations or interop code manually | Overwritten on regenerate; edit only source-controlled `///` trivia and verify preservation |
| Skip native build after C API change | `EntryPointNotFoundException` |
| Skip tests | Unacceptable |
| Skip tests because they fail | Unacceptable — fix the issue |
| Use default parameters in public APIs | ABI breaking change |
| Invent type names not in upstream Skia | Confusing, wrong naming |
| Omit accurate `///` comments on public APIs | Consumers receive incomplete compiler XML |
| Fabricate test fonts | Use real fonts from known sources |

## References

All three references work together:

| File | Purpose | When to read |
|------|---------|-------------|
| [references/api-design-rules.md](references/api-design-rules.md) | Naming, documentation, properties vs methods, Span patterns, type wrapping, test and sample requirements | Always — before writing or reviewing any API |
| [references/add-workflow.md](references/add-workflow.md) | Step-by-step add workflow with C API patterns, struct conversion, JSON config, gallery samples | Add mode |
| [references/review-workflow.md](references/review-workflow.md) | Structured review checklist, test coverage analysis, sample review, auto-fix mode | Review mode, and as final phase of add mode |
| [references/troubleshooting.md](references/troubleshooting.md) | Common errors and fixes | When something goes wrong |

## Add Mode

1. Read [api-design-rules.md](references/api-design-rules.md)
2. Follow [add-workflow.md](references/add-workflow.md) phases 1-10
3. Run [review-workflow.md](references/review-workflow.md) on your own changes
4. Fix any issues identified by the review
5. Re-run tests to confirm

## Review Mode

1. Read [api-design-rules.md](references/api-design-rules.md)
2. Follow [review-workflow.md](references/review-workflow.md)
3. In fix-first mode: auto-fix high-confidence issues, re-run tests
4. In review-only mode: produce structured feedback report
