swift-code-reviewer-skill 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/CHANGELOG.md +43 -169
  2. package/README.md +43 -2
  3. package/SKILL.md +194 -711
  4. package/bin/install.js +1 -1
  5. package/package.json +2 -1
  6. package/references/agent-loop-feedback.md +148 -0
  7. package/references/companion-skills.md +70 -0
  8. package/references/spec-adherence.md +157 -0
  9. package/skills/README.md +43 -0
  10. package/skills/swift-concurrency/NOTICE.md +18 -0
  11. package/skills/swift-concurrency/SKILL.md +235 -0
  12. package/skills/swift-concurrency/references/actors.md +640 -0
  13. package/skills/swift-concurrency/references/async-await-basics.md +249 -0
  14. package/skills/swift-concurrency/references/async-sequences.md +635 -0
  15. package/skills/swift-concurrency/references/core-data.md +533 -0
  16. package/skills/swift-concurrency/references/glossary.md +96 -0
  17. package/skills/swift-concurrency/references/linting.md +38 -0
  18. package/skills/swift-concurrency/references/memory-management.md +542 -0
  19. package/skills/swift-concurrency/references/migration.md +721 -0
  20. package/skills/swift-concurrency/references/performance.md +574 -0
  21. package/skills/swift-concurrency/references/sendable.md +578 -0
  22. package/skills/swift-concurrency/references/tasks.md +604 -0
  23. package/skills/swift-concurrency/references/testing.md +565 -0
  24. package/skills/swift-concurrency/references/threading.md +452 -0
  25. package/skills/swift-expert/NOTICE.md +18 -0
  26. package/skills/swift-expert/SKILL.md +226 -0
  27. package/skills/swift-expert/references/async-concurrency.md +363 -0
  28. package/skills/swift-expert/references/memory-performance.md +380 -0
  29. package/skills/swift-expert/references/protocol-oriented.md +357 -0
  30. package/skills/swift-expert/references/swiftui-patterns.md +294 -0
  31. package/skills/swift-expert/references/testing-patterns.md +402 -0
  32. package/skills/swift-testing/NOTICE.md +18 -0
  33. package/skills/swift-testing/SKILL.md +295 -0
  34. package/skills/swift-testing/references/async-testing.md +245 -0
  35. package/skills/swift-testing/references/dump-snapshot-testing.md +265 -0
  36. package/skills/swift-testing/references/fixtures.md +193 -0
  37. package/skills/swift-testing/references/integration-testing.md +189 -0
  38. package/skills/swift-testing/references/migration-xctest.md +301 -0
  39. package/skills/swift-testing/references/parameterized-tests.md +171 -0
  40. package/skills/swift-testing/references/snapshot-testing.md +201 -0
  41. package/skills/swift-testing/references/test-doubles.md +243 -0
  42. package/skills/swift-testing/references/test-organization.md +231 -0
  43. package/skills/swiftui-expert-skill/NOTICE.md +18 -0
  44. package/skills/swiftui-expert-skill/SKILL.md +281 -0
  45. package/skills/swiftui-expert-skill/references/accessibility-patterns.md +151 -0
  46. package/skills/swiftui-expert-skill/references/animation-advanced.md +403 -0
  47. package/skills/swiftui-expert-skill/references/animation-basics.md +284 -0
  48. package/skills/swiftui-expert-skill/references/animation-transitions.md +326 -0
  49. package/skills/swiftui-expert-skill/references/charts-accessibility.md +135 -0
  50. package/skills/swiftui-expert-skill/references/charts.md +602 -0
  51. package/skills/swiftui-expert-skill/references/image-optimization.md +203 -0
  52. package/skills/swiftui-expert-skill/references/latest-apis.md +464 -0
  53. package/skills/swiftui-expert-skill/references/layout-best-practices.md +266 -0
  54. package/skills/swiftui-expert-skill/references/liquid-glass.md +414 -0
  55. package/skills/swiftui-expert-skill/references/list-patterns.md +394 -0
  56. package/skills/swiftui-expert-skill/references/macos-scenes.md +318 -0
  57. package/skills/swiftui-expert-skill/references/macos-views.md +357 -0
  58. package/skills/swiftui-expert-skill/references/macos-window-styling.md +303 -0
  59. package/skills/swiftui-expert-skill/references/performance-patterns.md +403 -0
  60. package/skills/swiftui-expert-skill/references/scroll-patterns.md +293 -0
  61. package/skills/swiftui-expert-skill/references/sheet-navigation-patterns.md +363 -0
  62. package/skills/swiftui-expert-skill/references/state-management.md +417 -0
  63. package/skills/swiftui-expert-skill/references/view-structure.md +389 -0
  64. package/skills/swiftui-ui-patterns/NOTICE.md +18 -0
  65. package/skills/swiftui-ui-patterns/SKILL.md +95 -0
  66. package/skills/swiftui-ui-patterns/references/app-wiring.md +201 -0
  67. package/skills/swiftui-ui-patterns/references/async-state.md +96 -0
  68. package/skills/swiftui-ui-patterns/references/components-index.md +50 -0
  69. package/skills/swiftui-ui-patterns/references/controls.md +57 -0
  70. package/skills/swiftui-ui-patterns/references/deeplinks.md +66 -0
  71. package/skills/swiftui-ui-patterns/references/focus.md +90 -0
  72. package/skills/swiftui-ui-patterns/references/form.md +97 -0
  73. package/skills/swiftui-ui-patterns/references/grids.md +71 -0
  74. package/skills/swiftui-ui-patterns/references/haptics.md +71 -0
  75. package/skills/swiftui-ui-patterns/references/input-toolbar.md +51 -0
  76. package/skills/swiftui-ui-patterns/references/lightweight-clients.md +93 -0
  77. package/skills/swiftui-ui-patterns/references/list.md +86 -0
  78. package/skills/swiftui-ui-patterns/references/loading-placeholders.md +38 -0
  79. package/skills/swiftui-ui-patterns/references/macos-settings.md +71 -0
  80. package/skills/swiftui-ui-patterns/references/matched-transitions.md +59 -0
  81. package/skills/swiftui-ui-patterns/references/media.md +73 -0
  82. package/skills/swiftui-ui-patterns/references/menu-bar.md +101 -0
  83. package/skills/swiftui-ui-patterns/references/navigationstack.md +159 -0
  84. package/skills/swiftui-ui-patterns/references/overlay.md +45 -0
  85. package/skills/swiftui-ui-patterns/references/performance.md +62 -0
  86. package/skills/swiftui-ui-patterns/references/previews.md +48 -0
  87. package/skills/swiftui-ui-patterns/references/scroll-reveal.md +133 -0
  88. package/skills/swiftui-ui-patterns/references/scrollview.md +87 -0
  89. package/skills/swiftui-ui-patterns/references/searchable.md +71 -0
  90. package/skills/swiftui-ui-patterns/references/sheets.md +155 -0
  91. package/skills/swiftui-ui-patterns/references/split-views.md +72 -0
  92. package/skills/swiftui-ui-patterns/references/tabview.md +114 -0
  93. package/skills/swiftui-ui-patterns/references/theming.md +71 -0
  94. package/skills/swiftui-ui-patterns/references/title-menus.md +93 -0
  95. package/skills/swiftui-ui-patterns/references/top-bar.md +49 -0
package/bin/install.js CHANGED
@@ -84,7 +84,7 @@ function install() {
84
84
  'CHANGELOG.md'
85
85
  ];
86
86
 
87
- const dirsToCopy = ['references'];
87
+ const dirsToCopy = ['references', 'skills', 'templates'];
88
88
 
89
89
  for (const file of filesToCopy) {
90
90
  const src = path.join(packageRoot, file);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swift-code-reviewer-skill",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Claude Code skill for comprehensive Swift/SwiftUI code reviews with multi-layer analysis",
5
5
  "keywords": [
6
6
  "claude",
@@ -41,6 +41,7 @@
41
41
  "files": [
42
42
  "bin/",
43
43
  "references/",
44
+ "skills/",
44
45
  "templates/",
45
46
  "SKILL.md",
46
47
  "README.md",
@@ -0,0 +1,148 @@
1
+ # Agent Loop Feedback Reference
2
+
3
+ When the code under review was generated by an AI agent, recurring mistakes
4
+ are not just *code* problems — they are *instruction* problems. This document
5
+ defines how the reviewer aggregates per-finding signals into rule suggestions
6
+ that can be added to `.claude/CLAUDE.md` or an agent system prompt to prevent
7
+ the same class of issue next time.
8
+
9
+ ---
10
+
11
+ ## 1. The ≥2 Threshold
12
+
13
+ A single instance of a mistake is a slip. Two is a pattern. Three or more
14
+ means the agent's instructions are silent on the topic and need an explicit
15
+ rule.
16
+
17
+ Rules of thumb:
18
+
19
+ | Occurrences in diff | Treatment |
20
+ | ------------------- | --------------------------------------------------------------------------------- |
21
+ | 1 | Per-file finding only. Do not surface in Agent Loop Feedback. |
22
+ | 2 | Recurring pattern. Suggest a rule. Mark priority **medium**. |
23
+ | 3+ | Strong signal. Suggest a rule. Mark priority **high**. |
24
+ | 2+ across PRs | If the same rule has been suggested before (see §3), escalate to **high**. |
25
+
26
+ Count occurrences by **rule**, not by raw findings. For example, four force-unwrap
27
+ findings in different files count as four occurrences of the rule
28
+ *"never force-unwrap"*, not four separate rules.
29
+
30
+ ---
31
+
32
+ ## 2. Phrasing Rules as Directives
33
+
34
+ Rules go in an instruction file the agent will *read*. Write them so the
35
+ reader knows what to do without further interpretation.
36
+
37
+ ### Strong forms
38
+
39
+ - **Never X.** — bans an action outright. Best for safety/security/crashes.
40
+ - **Always Y.** — mandates an action. Best for required patterns.
41
+ - **Prefer X over Y.** — gives a default with an implicit escape hatch. Best
42
+ for stylistic or modernization rules.
43
+ - **Use X. Y is deprecated / forbidden.** — adds the *why* in five words.
44
+
45
+ ### Weak forms (avoid)
46
+
47
+ - **"Try to..."** — agents will skip it under pressure.
48
+ - **"It's a good idea to..."** — descriptive, not directive.
49
+ - **"Consider..."** — fine in code review prose, useless as a rule.
50
+ - **"X is bad"** — diagnostic, not prescriptive. Doesn't tell the agent what
51
+ to do instead.
52
+
53
+ ### Examples
54
+
55
+ | Weak | Strong |
56
+ | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------- |
57
+ | Force unwraps are dangerous. | Never use `!`, `try!`, or `as!`. Use `guard let` with an early return, typed throws, or `as?`. |
58
+ | It's better to use `NavigationStack`. | Use `NavigationStack` exclusively. `NavigationView` is deprecated as of iOS 16. |
59
+ | Try to keep views simple. | Views must not contain business logic, network calls, or data transformations. Move all such work into the `@Observable` view model. |
60
+ | Make sure UI updates happen on the main thread. | Always annotate types that mutate `@Observable`/`@Published` state with `@MainActor`. |
61
+ | Don't put secrets in logs. | Never log values from `KeychainService`, `URLRequest.httpBody`, or types annotated `@Sensitive`. |
62
+
63
+ A good rule answers three questions in one sentence: *what is forbidden*,
64
+ *what is the alternative*, and (briefly) *why*.
65
+
66
+ ---
67
+
68
+ ## 3. Checking Past Reviews
69
+
70
+ Before suggesting a rule, check whether something similar was already
71
+ suggested. If yes, the existing wording is not landing — escalate priority
72
+ and consider strengthening the wording rather than restating it.
73
+
74
+ ```bash
75
+ # Has anyone touched the rules file recently, and how?
76
+ git log --oneline --follow .claude/CLAUDE.md
77
+ git log -p --follow .claude/CLAUDE.md | grep -i "<keyword from new rule>"
78
+
79
+ # Search for existing wording on the topic
80
+ grep -in "force.unwrap\|navigationview\|mainactor" .claude/CLAUDE.md
81
+ ```
82
+
83
+ If a rule on the same topic exists:
84
+
85
+ 1. Quote the current rule in the suggestion block.
86
+ 2. Explain why it is not preventing the pattern (too soft, too narrow,
87
+ buried, conditional).
88
+ 3. Propose a replacement, not an addition.
89
+
90
+ If no rule exists, propose adding one in the most relevant section
91
+ (`Concurrency`, `SwiftUI`, `Security`, `Architecture`, etc.).
92
+
93
+ ---
94
+
95
+ ## 4. Suggested-Rule Block — Template
96
+
97
+ One block per recurring pattern. Place all blocks under a single
98
+ `## Agent Loop Feedback` heading at the bottom of the report.
99
+
100
+ ```markdown
101
+ ### Pattern: <short name> (<N> occurrences)
102
+ **Files**: <file:line>, <file:line>, ...
103
+
104
+ **Suggested rule**:
105
+ > <One-sentence directive in strong form. What is forbidden, what to do
106
+ > instead, and one-clause why.>
107
+
108
+ **Existing rule** (if any): <quote, with line reference into `.claude/CLAUDE.md`>
109
+
110
+ **Why it's not landing** (only if existing rule): <too soft / too narrow / buried / etc.>
111
+
112
+ **Priority**: <medium | high>
113
+ ```
114
+
115
+ Worked example:
116
+
117
+ ```markdown
118
+ ### Pattern: Force-unwraps (4 occurrences)
119
+ **Files**: LoginView.swift:89, NetworkService.swift:34, UserRepo.swift:12, UserRepo.swift:78
120
+
121
+ **Suggested rule**:
122
+ > Never use `!`, `try!`, or `as!`. Use `guard let` with explicit early return,
123
+ > typed throws, or `as?` with handling. Force-unwraps are crashes waiting to happen.
124
+
125
+ **Existing rule**: _.claude/CLAUDE.md:42_ — "Avoid force unwrapping when possible."
126
+
127
+ **Why it's not landing**: "When possible" gives the agent a built-in opt-out.
128
+ The replacement above bans the syntax outright and names the alternatives.
129
+
130
+ **Priority**: high
131
+ ```
132
+
133
+ ---
134
+
135
+ ## 5. Human-Authored Code
136
+
137
+ If the PR was written by a human (no AI assistance disclosed, no agent
138
+ session metadata in commit messages), the same recurring patterns are still
139
+ useful — but frame them as **team coding standards**, not agent instructions:
140
+
141
+ - Replace "Suggested rule for the agent" with "Suggested team standard".
142
+ - Drop the "Why it's not landing" clause; humans benefit more from a short
143
+ rationale than from instruction-tuning analysis.
144
+ - Leave the directive phrasing intact — strong forms read better in human
145
+ style guides too.
146
+
147
+ When unsure whether the code is AI-generated, default to the team-standards
148
+ framing.
@@ -0,0 +1,70 @@
1
+ # Companion Skills Reference
2
+
3
+ Full attribution and update instructions: [`skills/README.md`](../skills/README.md)
4
+ Original authors: [@AvdLee](https://github.com/AvdLee), [@Dimillian](https://github.com/Dimillian), [@bocato](https://github.com/bocato)
5
+
6
+ ---
7
+
8
+ ## swiftui-expert-skill · `skills/swiftui-expert-skill/`
9
+
10
+ | Reference file | When to consult |
11
+ | -------------------------------------- | ------------------------------------------------------------------------- |
12
+ | `references/state-management.md` | Property wrapper selection — @State, @Binding, @Observable, @Environment |
13
+ | `references/latest-apis.md` | Deprecation detection — always check before flagging an API as deprecated |
14
+ | `references/view-structure.md` | View extraction rules and composition depth limits |
15
+ | `references/performance-patterns.md` | Equatable conformance, body evaluation cost, lazy loading |
16
+ | `references/accessibility-patterns.md` | VoiceOver grouping, traits, Dynamic Type support |
17
+ | `references/liquid-glass.md` | iOS 26+ Liquid Glass adoption and availability gating |
18
+ | `references/animation-basics.md` | Implicit/explicit animation, withAnimation, matchedGeometryEffect |
19
+ | `references/macos-scenes.md` | macOS-specific Scene types, window styling, settings |
20
+
21
+ ---
22
+
23
+ ## swift-concurrency · `skills/swift-concurrency/`
24
+
25
+ | Reference file | When to consult |
26
+ | ---------------------------------- | ----------------------------------------------------------- |
27
+ | `references/sendable.md` | Sendable conformance, `@unchecked Sendable` justification |
28
+ | `references/actors.md` | Actor isolation, custom actors vs @MainActor |
29
+ | `references/async-await-basics.md` | Structured vs unstructured tasks, `Task.detached` rationale |
30
+ | `references/migration.md` | Swift 6 migration patterns, minimum blast-radius approach |
31
+ | `references/testing.md` | Concurrency-safe test patterns |
32
+ | `references/threading.md` | Thread safety, GCD interop, isolation boundaries |
33
+
34
+ ---
35
+
36
+ ## swift-testing · `skills/swift-testing/`
37
+
38
+ | Reference file | When to consult |
39
+ | ----------------------------------- | ------------------------------------------------------------- |
40
+ | `references/test-organization.md` | @Suite hierarchy, naming, tagging |
41
+ | `references/test-doubles.md` | Dummy / Fake / Stub / Spy / Mock taxonomy |
42
+ | `references/async-testing.md` | `#expect(throws:)`, async confirmation patterns |
43
+ | `references/parameterized-tests.md` | `@Test(arguments:)` for data-driven tests |
44
+ | `references/migration-xctest.md` | XCTest → Swift Testing migration checklist |
45
+ | `references/fixtures.md` | Fixture placement with `#if DEBUG`, test target vs app target |
46
+
47
+ ---
48
+
49
+ ## swift-expert · `skills/swift-expert/`
50
+
51
+ | Reference file | When to consult |
52
+ | ---------------------------------- | --------------------------------------------------------------------- |
53
+ | `references/async-concurrency.md` | Cross-cutting concurrency patterns |
54
+ | `references/protocol-oriented.md` | Protocol hierarchies, associated types, existentials, `any` vs `some` |
55
+ | `references/memory-performance.md` | Value vs reference semantics, ARC, retain cycles |
56
+ | `references/swiftui-patterns.md` | Additional SwiftUI architectural guidance |
57
+
58
+ ---
59
+
60
+ ## swiftui-ui-patterns · `skills/swiftui-ui-patterns/`
61
+
62
+ | Reference file | When to consult |
63
+ | -------------------------------- | --------------------------------------------------------- |
64
+ | `references/components-index.md` | Full component catalogue — start here for any UI pattern |
65
+ | `references/navigationstack.md` | Route enums, RouterPath, `navigationDestination` |
66
+ | `references/sheets.md` | Item-driven sheets, SheetDestination enum |
67
+ | `references/theming.md` | Semantic color enforcement via `@Environment(Theme.self)` |
68
+ | `references/async-state.md` | `.task(id:)`, LoadState enum, CancellationError |
69
+ | `references/tabview.md` | Tab architecture, per-tab independent navigation history |
70
+ | `references/grids.md` | LazyVGrid / LazyHGrid patterns and identity |
@@ -0,0 +1,157 @@
1
+ # Spec Adherence Reference
2
+
3
+ This document describes how the reviewer extracts the *intent* of a change from
4
+ its PR description and linked issues, and how it then judges whether the code
5
+ delivers on that intent. Spec adherence runs before the language- and
6
+ framework-level checks: a clean diff that misses the point shouldn't pass.
7
+
8
+ ---
9
+
10
+ ## 1. Parsing `gh` / `glab` JSON Output
11
+
12
+ Always prefer the JSON output of the platform CLI over scraping the web UI —
13
+ it is stable, scriptable, and includes linked-issue metadata.
14
+
15
+ ### GitHub
16
+
17
+ ```bash
18
+ # PR body, title, labels, and the issues this PR closes
19
+ gh pr view <num> --json title,body,closingIssuesReferences,labels
20
+
21
+ # Linked issue (one per closing reference)
22
+ gh issue view <num> --json title,body,labels
23
+
24
+ # Reviewer-friendly summary in one shot
25
+ gh pr view <num> --json title,body,closingIssuesReferences \
26
+ --jq '{title, body, issues: [.closingIssuesReferences[].number]}'
27
+ ```
28
+
29
+ Fields to read:
30
+
31
+ | Field | Use |
32
+ | --------------------------- | ------------------------------------------------- |
33
+ | `title` | Short statement of intent — start here. |
34
+ | `body` | Acceptance criteria, scope, non-goals. |
35
+ | `closingIssuesReferences` | Numbers of issues that this PR will close. |
36
+ | `labels` | `bug`, `feature`, `tech-debt` shape expectations. |
37
+
38
+ ### GitLab
39
+
40
+ ```bash
41
+ glab mr view <num> # human-readable; pipe to less
42
+ glab mr view <num> --output json
43
+ glab issue view <num> --output json
44
+ ```
45
+
46
+ GitLab's MR description and linked issues serve the same role as GitHub's PR
47
+ body and `closingIssuesReferences`.
48
+
49
+ ---
50
+
51
+ ## 2. Finding Acceptance Criteria
52
+
53
+ Acceptance criteria are rarely labeled as such. Look for these patterns, in
54
+ roughly this order:
55
+
56
+ 1. **Markdown checkboxes** — `- [ ] ...` or `- [x] ...`. The most reliable
57
+ signal. Each box is a discrete requirement.
58
+ 2. **Gherkin / Given-When-Then** — phrases starting with `Given`, `When`,
59
+ `Then`, or `And`. Common in BDD-flavored teams.
60
+ 3. **Modal verbs** — `must`, `should`, `shall`, `will`, `needs to`. Each
61
+ sentence is a candidate requirement; `must`/`shall` outrank `should`.
62
+ 4. **Numbered or bulleted lists** under headings like `Acceptance Criteria`,
63
+ `Requirements`, `Scope`, `Goals`, `What this PR does`.
64
+ 5. **"Closes #N" / "Fixes #N"** — pull the linked issue and repeat 1–4 there.
65
+
66
+ If the PR has none of the above, treat the **title** as the single requirement
67
+ and note the lack of explicit criteria in the report.
68
+
69
+ ---
70
+
71
+ ## 3. Handling PRs With No Description
72
+
73
+ A blank or near-blank description is itself a finding. Do not invent intent.
74
+
75
+ 1. Note in the report: _"PR description is empty / minimal — spec adherence
76
+ inferred from diff and commit messages, may be incomplete."_
77
+ 2. Use, in order: linked issues, commit messages (`git log <base>..HEAD`),
78
+ branch name, file paths touched.
79
+ 3. List every inferred requirement explicitly so the author can correct any
80
+ misreading, prefixed with `(inferred)`.
81
+ 4. Do not penalize the diff for failing to satisfy a requirement that was
82
+ only inferred — flag the missing description instead.
83
+
84
+ ---
85
+
86
+ ## 4. Scope Creep vs. Legitimate Adjacent Fixes
87
+
88
+ Not every out-of-spec change is scope creep. Use this rubric:
89
+
90
+ | Change type | Verdict |
91
+ | ---------------------------------------------------------------------------- | ------------------------------------- |
92
+ | Touches a file required by the spec, fixes an obvious nearby bug, < ~10 LOC | **Allow** — note it; don't flag. |
93
+ | Renames or restructures a file the spec requires editing | **Allow if minimal**, otherwise flag. |
94
+ | Drive-by formatting / style changes across many files | **Flag** — recommend separate PR. |
95
+ | Refactor of a module unrelated to the spec | **Flag** — scope creep. |
96
+ | New feature not mentioned anywhere in spec | **Flag** — scope creep, must justify. |
97
+ | Dependency version bumps | **Flag** — separate PR by convention. |
98
+ | Test additions for the spec'd code | **Allow** — expected. |
99
+ | Test additions for unrelated existing code | **Allow but note** — usually welcome. |
100
+
101
+ When flagging scope creep, always recommend the concrete remediation
102
+ ("split out into a follow-up PR" or "move to a separate commit if the team
103
+ allows partial review").
104
+
105
+ ---
106
+
107
+ ## 5. Intent Drift
108
+
109
+ The trickier failure mode: the diff *runs* but solves a subtly different
110
+ problem than the spec. Symptoms:
111
+
112
+ - Naming uses different domain terms than the spec (e.g., spec says
113
+ "session", code says "token").
114
+ - Data flow contradicts the spec's mental model (e.g., spec says the server
115
+ is the source of truth, code caches and treats local as authoritative).
116
+ - Edge cases the spec called out are silently excluded by an early `return`.
117
+ - The PR title says "fix" but the diff is a rewrite, or vice versa.
118
+
119
+ When you suspect intent drift, quote both the spec sentence and the code
120
+ location side-by-side in the finding.
121
+
122
+ ---
123
+
124
+ ## 6. Requirement Coverage Table — Template
125
+
126
+ Drop this into the Spec Adherence section of the report, one row per
127
+ requirement extracted in step 2.
128
+
129
+ ```markdown
130
+ ## Spec Adherence
131
+
132
+ **Source**: PR #<num> / Issue #<num>
133
+
134
+ | Requirement | Status | Location |
135
+ |------------------------------------------|-------------------------------------|--------------------------------|
136
+ | <verbatim or paraphrased criterion> | ✅ Implemented | `<file>:<line>` |
137
+ | <criterion with edge case> | ⚠️ Partial — <what's missing> | `<file>:<line>` |
138
+ | <criterion> | ❌ Not implemented | — |
139
+ | <inferred criterion> | ✅ Implemented (inferred) | `<file>:<line>` |
140
+
141
+ **Scope creep**: <count> unrelated change(s) — <one-line summary, recommend split>.
142
+
143
+ **Spec gaps**: <count> criterion/criteria not addressed — see "Must fix" in
144
+ prioritized action items.
145
+ ```
146
+
147
+ Status legend (use these exact glyphs for greppability):
148
+
149
+ - ✅ Implemented — code satisfies the criterion and tests, if any, cover it.
150
+ - ⚠️ Partial — happy path works, but at least one edge case or branch is
151
+ missing. Always say *what* is missing.
152
+ - ❌ Not implemented — no code addresses the criterion.
153
+ - ➖ Not assessed — no spec context available; do not guess.
154
+
155
+ If `status` is anything other than ✅, the corresponding action item belongs
156
+ in **Must fix** or **Should fix** depending on whether the criterion was
157
+ flagged `must`/`shall` versus `should`.
@@ -0,0 +1,43 @@
1
+ # Bundled Companion Skills
2
+
3
+ This directory contains five companion skills vendored directly into `swift-code-reviewer-skill` so that reviewers have a complete, self-contained knowledge base after a single install or clone — no extra setup required.
4
+
5
+ ## Thanks to the original authors
6
+
7
+ These skills are based on the public Swift/SwiftUI work of three community contributors:
8
+
9
+ | Author | GitHub | Known for |
10
+ | ------------------- | ------------------------------------------ | ------------------------------------------------------------- |
11
+ | Antoine van der Lee | [@AvdLee](https://github.com/AvdLee) | SwiftLee — concurrency, testing, Swift 6 migration |
12
+ | Thomas Ricouard | [@Dimillian](https://github.com/Dimillian) | IceCubesApp — SwiftUI architecture, Liquid Glass, UI patterns |
13
+ | Eduardo Bocato | [@bocato](https://github.com/bocato) | Clean Architecture, protocol-oriented Swift, Swift expert |
14
+
15
+ Attribution is best-effort — upstream folders carried no `LICENSE` or `AUTHORS` files. If you are one of the original authors and want the attribution corrected or content removed, please [open an issue](https://github.com/Viniciuscarvalho/swift-code-reviewer-skill/issues).
16
+
17
+ ---
18
+
19
+ ## Skills index
20
+
21
+ | Skill | Primary author | Description | References |
22
+ | ----------------------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
23
+ | [swiftui-expert-skill](swiftui-expert-skill/SKILL.md) | @Dimillian | Write, review, or improve SwiftUI code: state management, view composition, Liquid Glass, macOS | [19 files](swiftui-expert-skill/references/) · [NOTICE](swiftui-expert-skill/NOTICE.md) |
24
+ | [swift-concurrency](swift-concurrency/SKILL.md) | @AvdLee | Expert guidance on actors, Sendable, async/await, Swift 6 migration, data races | [13 files](swift-concurrency/references/) · [NOTICE](swift-concurrency/NOTICE.md) |
25
+ | [swift-testing](swift-testing/SKILL.md) | @AvdLee | Modern Swift Testing framework: @Test, #expect, doubles, snapshots, XCTest migration | [9 files](swift-testing/references/) · [NOTICE](swift-testing/NOTICE.md) |
26
+ | [swift-expert](swift-expert/SKILL.md) | @bocato | Senior Swift 6+ specialist: protocol-oriented design, memory, concurrency, SwiftUI patterns | [5 files](swift-expert/references/) · [NOTICE](swift-expert/NOTICE.md) |
27
+ | [swiftui-ui-patterns](swiftui-ui-patterns/SKILL.md) | @Dimillian | Component-level SwiftUI patterns: navigation, lists, sheets, grids, theming, gestures | [32 files](swiftui-ui-patterns/references/) · [NOTICE](swiftui-ui-patterns/NOTICE.md) |
28
+
29
+ ---
30
+
31
+ ## Updating a skill
32
+
33
+ Each skill is a verbatim copy of its source. To refresh one:
34
+
35
+ ```bash
36
+ rsync -rL --exclude='.DS_Store' ~/.agents/skills/swiftui-expert-skill/ skills/swiftui-expert-skill/
37
+ rsync -rL --exclude='.DS_Store' ~/.claude/skills/swift-concurrency/ skills/swift-concurrency/
38
+ rsync -rL --exclude='.DS_Store' ~/.claude/skills/swift-testing/ skills/swift-testing/
39
+ rsync -rL --exclude='.DS_Store' ~/.maestro/skills/swift-expert/ skills/swift-expert/
40
+ rsync -rL --exclude='.DS_Store' ~/.maestro/skills/swiftui-ui-patterns/ skills/swiftui-ui-patterns/
41
+ ```
42
+
43
+ Do not edit files under `skills/` directly — changes will be overwritten on the next sync.
@@ -0,0 +1,18 @@
1
+ # swift-concurrency — Attribution Notice
2
+
3
+ Bundled into `swift-code-reviewer-skill` on 2026-04-21 from
4
+ `~/.claude/skills/swift-concurrency`.
5
+
6
+ Primary author (best-effort attribution): **Antoine van der Lee ([@AvdLee](https://github.com/AvdLee))**
7
+ Also credited: [@Dimillian](https://github.com/Dimillian), [@bocato](https://github.com/bocato)
8
+
9
+ These three authors' public Swift/SwiftUI content — including SwiftLee, IceCubesApp,
10
+ and their various open-source contributions — informed the skills bundled here.
11
+
12
+ License: the upstream folder did not contain a LICENSE file at the time of vendoring.
13
+ Content is reproduced here in good faith for reference alongside this MIT-licensed
14
+ project. If you are an upstream author and want the attribution corrected, the license
15
+ clarified, or the content removed, please open an issue at:
16
+ https://github.com/Viniciuscarvalho/swift-code-reviewer-skill/issues
17
+
18
+ Changes from upstream: none (verbatim copy; `.DS_Store` files excluded).