mcpField
S
swiftdata-code-review

swiftdata-code-review

github.com/existential-birdsTesting & quality85131 installsUpdated 11w ago
Repository

About swiftdata-code-review

A SwiftData code-review skill for developers evaluating models, queries, concurrency, and migrations. It sets ordered review gates requiring relevant references and source-line evidence before reporting findings.

Key features

  1. 01Model and relationship checklist
  2. 02Query and predicate review
  3. 03Concurrency and actor guidance
  4. 04Schema migration checks
  5. 05Ordered evidence gates

Use cases

  1. 01Reviewing SwiftData model designs
  2. 02Checking query performance and predicates
  3. 03Assessing background data operations
  4. 04Planning schema migration reviews

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/existential-birds/beagle --skill swiftdata-code-review

After installing, type/swiftdata-code-reviewin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
concurrency.md
migrations.md
model-design.md
queries.md

Details

From the project README

SwiftData Code Review

Quick Reference

Issue TypeReference
@Model, @Attribute, @Relationship, delete rulesreferences/model-design.md
@Query, #Predicate, FetchDescriptor, #Indexreferences/queries.md
@ModelActor, ModelContext, background operationsreferences/concurrency.md
VersionedSchema, MigrationStage, lightweight/customreferences/migrations.md

Hard gates (before reporting findings)

Run in order; do not assert an issue until the gate for that issue passes.

  1. Scope — pass when: You have the target .swift path(s) and confirmed SwiftData surface in scope (e.g. import SwiftData, @Model, @Query, @ModelActor, VersionedSchema, or migration types). If none apply, stop or narrow scope with one sentence.
  2. Reference — pass when: For each checklist area you evaluate (models, queries, concurrency, migrations), you opened the matching references/*.md from the Quick Reference table or wrote N/A: no <area> in this review with a one-line reason.
  3. Evidence — pass when: Every finding uses the [FILE:LINE] ISSUE_TITLE header (line range allowed) from the file you read; no finding without a cite.
  4. Report — pass when: Findings list cites first (or inline) using [FILE:LINE] ISSUE_TITLE, then severity or checklist grouping—no uncited assertions.

Review Checklist

  • Models marked final (subclassing crashes)
  • @Relationship decorator on ONE side only (not both)
  • Delete rules explicitly set (not relying on default .nullify)
  • Relationships initialized to empty arrays, not default objects
  • Batch operations used for bulk inserts (append(contentsOf:))
  • @Query not loading thousands of items on main thread
  • External values in predicates captured in local variables
  • Scalar comparisons in predicates (not object references)
  • @ModelActor used for background operations
  • PersistentIdentifier/DTOs used to pass data between actors
  • VersionedSchema defined for each shipped version
  • MigrationPlan passed to ModelContainer

When to Load References

  • Reviewing @Model or relationships -> model-design.md
  • Reviewing @Query or #Predicate -> queries.md
  • Reviewing @ModelActor or background work -> concurrency.md
  • Reviewing schema changes or migrations -> migrations.md

Review Questions

  1. Could this relationship assignment cause NULL foreign keys?
  2. Is @Relationship on both sides creating circular references?
  3. Could this @Query block the main thread with large datasets?
  4. Are model objects being passed between actors unsafely?
  5. Would schema changes require a migration plan?

Comments

Markdown supported