Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
140 commits
Select commit Hold shift + click to select a range
8f78c12
feat(macos): add SwiftUI multi-platform app (macOS 14 + iOS 17)
claude May 2, 2026
7356a98
feat(macos): 3-column nav, new features, bug fixes, and test suite
claude May 2, 2026
33b6be6
🐛 fix: WeatherView uses AppState ViewModel instead of @State local in…
claude May 2, 2026
0063519
✨ feat: SwiftData cache-first persistence for packs and trips
claude May 2, 2026
6db4472
📊 feat: pack weight breakdown with Apple Charts donut + category bar
claude May 2, 2026
c8e2dd1
⌨️ feat: Commands menu and keyboard shortcuts
claude May 2, 2026
daff034
🖱️ feat: drag and drop pack items between categories
claude May 2, 2026
0b6a56e
⚙️ feat: Settings scene (Cmd+,) with units, temperature, and API prefs
claude May 2, 2026
59fa99e
🪟 feat: open packs and trips in dedicated windows
claude May 2, 2026
f403924
💬 feat: Feed compose post, comments sheet, and share button
claude May 2, 2026
6de109e
📡 feat: offline banner via NWPathMonitor
claude May 2, 2026
b2c062c
♾️ feat: infinite scroll pagination for packs and trips
claude May 2, 2026
241873c
🔍 feat: global search (Cmd+F) across packs, trips, and trails
claude May 2, 2026
3691620
🔗 feat: trip-to-pack linkage in form and detail view
claude May 2, 2026
7b343b4
👤 feat: profile editing with avatar upload, success state, and member…
claude May 2, 2026
f8b6a23
🛒 feat: add catalog items directly to a pack
claude May 2, 2026
41fcbe4
🔗 feat: pack sharing via ShareLink for public packs
claude May 2, 2026
10fe562
🔧 fix: resolve compile errors for first-try build
claude May 2, 2026
c150a1d
🔗 feat: OpenAPI → Swift type pipeline via swift-openapi-generator
claude May 2, 2026
f381f22
🔧 fix: sort package.json scripts and trim coderabbit tone_instructions
claude May 2, 2026
4c7b582
🔧 fix: sort imports in generate-openapi.ts to pass Biome check
claude May 2, 2026
39bcc7d
🔧 fix: exclude api/scripts from root tsconfig and clean up generate-o…
claude May 2, 2026
69002a1
🏗️ refactor: convert apps/macos → apps/swift with XcodeGen multi-plat…
andrew-bierman May 2, 2026
6df6b20
chore: exclude .worktrees from Biome linting
andrew-bierman May 2, 2026
8c61d2a
fix: isolate PackRatAPIClient into own subdirectory to resolve Xcode …
andrew-bierman May 2, 2026
35fb480
fix: add xcodegen local-package patch script and explicit SPM products
andrew-bierman May 2, 2026
64fe763
fix: add placeholder Swift file and move fix script to apps/swift/scr…
andrew-bierman May 2, 2026
b18ce55
feat: pre-generate OpenAPI Swift client, drop build plugin
andrew-bierman May 2, 2026
25e0445
🔧 fix: fold API client into main target, drop sub-package, persist de…
andrew-bierman May 2, 2026
ee97eab
🔧 fix: resolve remaining compile errors for iOS + macOS targets
andrew-bierman May 2, 2026
e9c799c
🔧 fix: resolve first-batch compile errors across iOS + macOS targets
andrew-bierman May 2, 2026
a8e9781
🧹 chore: move fix-xcodeproj script to apps/swift/scripts, sort imports
andrew-bierman May 2, 2026
24de684
🔧 fix: add xcconfig env support and wire API base URL to runtime pref…
andrew-bierman May 2, 2026
3a41dc0
🔧 fix: allow HTTP to localhost via NSAllowsLocalNetworking (ATS)
andrew-bierman May 2, 2026
5485641
🐛 fix: xcconfig // comment bug strips URLs; switch to PACKRAT_ENV ide…
andrew-bierman May 2, 2026
c465726
🔧 fix: set correct production API URL
andrew-bierman May 2, 2026
46be5ec
🔧 fix: rename staging → dev, correct dev URL pattern
andrew-bierman May 2, 2026
6b8e84f
🪵 feat: add DEBUG request/response logging to APIClient
andrew-bierman May 2, 2026
53a1e73
🐛 fix: correct Swift model ID types to match Drizzle schema
andrew-bierman May 2, 2026
26cbf59
♻️ refactor: generate canonical types from OpenAPI spec, keep extensi…
andrew-bierman May 2, 2026
a613fd7
🔧 fix: align Feed feature with spec (FeedResponse, PostAuthor, Comment)
andrew-bierman May 2, 2026
eaa013e
🔧 fix: align Packs feature with spec (non-optional weight/quantity/wo…
andrew-bierman May 2, 2026
90c9bbd
🔧 fix: align Trips, Catalog, TrailConditions, Search with generated t…
andrew-bierman May 2, 2026
468dc00
🎨 Zed settings
andrew-bierman May 2, 2026
e1d719a
⚡ perf: shared ISO8601DateFormatter — stop allocating per-row per-render
andrew-bierman May 2, 2026
07eaed2
🐛 fix: FeedViewModel infinite pagination — add hasMore flag
andrew-bierman May 2, 2026
3fc0ed1
🔧 fix: replace focusedSceneValue closures with @FocusedBinding
andrew-bierman May 2, 2026
5e4ae71
📦 deps: add swift-algorithms, swift-collections, Defaults; use Ordere…
andrew-bierman May 2, 2026
864d251
🐛 fix: graceful enum decoding + strip embedding from pack responses
andrew-bierman May 2, 2026
bf1547e
🔧 fix: add pagination to packs+trips API, stop infinite loadMore loop
andrew-bierman May 2, 2026
d62f7d2
🔧 fix: let navigationDestination own detail rendering, not detailColumn
andrew-bierman May 2, 2026
daf50d8
🔧 fix: destination-based NavigationLink on compact, selection-driven …
andrew-bierman May 2, 2026
6fea2fe
🤖 fix: chat streaming — send UIMessage format, parse Vercel AI SDK pr…
andrew-bierman May 2, 2026
04f2abe
🔍 feat: catalog item detail sheet + 🗺️ Apple Maps integration on trip
andrew-bierman May 2, 2026
e71686e
📊 fix: chat streaming + pack weight chart rendering
andrew-bierman May 2, 2026
aba356d
✨ feat: weather saved locations + chat UI revamp
andrew-bierman May 2, 2026
c50d154
🔍 feat: AI gear gap analysis for packs
andrew-bierman May 2, 2026
36dea56
💄 fix: remove excess top padding from scroll content across screens
andrew-bierman May 2, 2026
6e40dcf
💄 fix: polish pack detail, templates, trips, chat UI
andrew-bierman May 2, 2026
9545a0b
🗂️ feat: category filter bar and Explore tab for packs list
andrew-bierman May 2, 2026
43f2c7e
🛠️ fix: consolidate pack toolbar into menu, improve gap analysis erro…
andrew-bierman May 2, 2026
62c6666
🏠 feat(swift): Home dashboard, Guides, GearInventory, Wildlife, Seaso…
andrew-bierman May 3, 2026
23cacd0
🔍 feat(swift): Pack item detail view with similar gear (U2)
andrew-bierman May 3, 2026
28c85d6
🤖 feat(swift): Generative UI in AI chat — tool invocation rendering (U3)
andrew-bierman May 3, 2026
c3940e2
🗂️ feat: pack template create/edit and item CRUD (U8)
andrew-bierman May 3, 2026
e2b96e5
🌩️ feat: weather alerts view and toolbar button (U10)
andrew-bierman May 3, 2026
0747137
🔧 fix: expose APIClient.resolvedBaseURL, eliminate URL duplication in…
andrew-bierman May 3, 2026
eaed154
🗺️ feat: MKLocalSearch location picker in trip form (U11)
andrew-bierman May 3, 2026
3cbd775
👤 feat: notifications toggle and delete account flow in ProfileView (…
andrew-bierman May 3, 2026
c1812ff
🔧 fix: test infrastructure — module name, info.plist, shared scheme
andrew-bierman May 4, 2026
df9e5a9
🧪 test: add Swift Testing cases for models, encoding, and view models
andrew-bierman May 4, 2026
1674a02
⚖️ feat: pack weight analysis view with category breakdown
andrew-bierman May 4, 2026
0efc4c1
🕐 feat: recent packs view sorted by creation date
andrew-bierman May 4, 2026
4cec498
🔔 feat: weather alert preferences + optimistic forecast loading
andrew-bierman May 4, 2026
a0c7ac2
🔗 feat: SeasonSuggestion types from OpenAPI spec
andrew-bierman May 4, 2026
c1746d7
♿ feat: add accessibility identifiers to login form for XCUITest
andrew-bierman May 4, 2026
27a2e43
🧪 feat: add PackRatUITests target to project.yml
andrew-bierman May 4, 2026
6b5b161
🧪 feat: XCUITest e2e suite — auth, packs, weather, navigation
andrew-bierman May 4, 2026
e30e1d8
♿ feat: add accessibility identifiers to chat, compose, and item weight
andrew-bierman May 5, 2026
e6ad4d2
🧪 feat: bun e2e:swift runner that loads creds from .env.local
andrew-bierman May 5, 2026
339f903
🧪 feat: full XCUITest coverage for all features
andrew-bierman May 5, 2026
f8b59a1
🧪 refactor: rewrite e2e runner in TypeScript
andrew-bierman May 5, 2026
e750718
🔧 chore: allowlist fix-xcodeproj.ts build script in no-raw-regex linter
andrew-bierman May 5, 2026
56cc296
🔧 chore: allowlist run-e2e.ts script in no-raw-process-env linter
andrew-bierman May 5, 2026
badef09
🔧 chore: sort package.json keys
andrew-bierman May 5, 2026
4e7cc28
Merge branch 'claude/swift-mac-app-effort-tTGd7' of https://github.co…
andrew-bierman May 5, 2026
8027449
🔧 fix: annotate stripItemEmbedding generic cast as safe
andrew-bierman May 5, 2026
fc50fc5
🧪 fix: AuthTests now force logged-out state via --reset-auth launch arg
andrew-bierman May 5, 2026
6beb46b
🧪 fix: e2e suite improvements — 63/74 passing (was 33/74)
andrew-bierman May 5, 2026
17a243a
🧪 fix: address remaining e2e failures
andrew-bierman May 5, 2026
40be94c
🧪 fix: address remaining 5 e2e failures
andrew-bierman May 5, 2026
04bf85d
🧪 fix: get all e2e tests passing
andrew-bierman May 5, 2026
e24e7b3
📋 chore(swift-audit): seed ship-readiness audit baseline (U1)
andrew-bierman May 20, 2026
b05ddfb
🧪 feat(swift): xcresult-aware e2e runner + simctl/xcresult wrappers (U2)
andrew-bierman May 20, 2026
e2ed09e
🧪 feat(swift): iOS test plans + --plan flag in e2e runner (U3)
andrew-bierman May 20, 2026
4cef437
📋 docs(swift-audit): U7 findings — generate-openapi mismatch + spec a…
andrew-bierman May 20, 2026
ce47be3
📋 docs(swift-audit): baseline XCUITest results — 4/74 passing (U2)
andrew-bierman May 20, 2026
32fead9
🧪 feat(swift): macOS test bundles + dual-platform UI tests (U4 + U5 +…
andrew-bierman May 20, 2026
b937e64
🔗 feat(swift): deep-link parity with Expo + DeepLink router (U10)
andrew-bierman May 20, 2026
338e899
📊 feat(swift): Sentry on both targets + deployed-API gap surfaced (U9)
andrew-bierman May 20, 2026
412ecd2
📋 docs(swift-audit): deepest baseline finding — swift branch API code…
andrew-bierman May 20, 2026
881bc20
merge origin/development into claude/swift-mac-app-effort-tTGd7
andrew-bierman May 20, 2026
dc067b7
chore: bun.lock after merge with development
andrew-bierman May 20, 2026
a2973c5
fix(tests): update unit tests broken by development merge API signatu…
claude May 20, 2026
998e32a
fix(types): resolve 10 TypeScript errors found by check-types
claude May 20, 2026
4347346
feat(swift): port ai-packs feature from Expo
andrew-bierman May 20, 2026
f358069
feat(swift): offline-ai foundation (Mock provider + MLX stub + UI seam)
andrew-bierman May 20, 2026
1ec06f5
test(swift): offline-ai protocol + view model tests
andrew-bierman May 20, 2026
67ee730
feat(swift): macOS-native UI test suite for sidebar navigation, packs…
andrew-bierman May 20, 2026
e97ba53
fix(lint): refactor Swift script functions to single-object params
claude May 20, 2026
1fdd3fc
refactor(swift): port auth flow to Better Auth endpoints
andrew-bierman May 20, 2026
ad0b048
refactor(swift): cascade user-FK columns from Int to String
andrew-bierman May 20, 2026
18240ac
docs(swift-audit): better-auth migration report + smoke-test findings
andrew-bierman May 20, 2026
1c72fb3
chore(swift): gitignore apps/swift/build/
andrew-bierman May 20, 2026
4567945
merge worktree-agent-acd933f1172b9c49d: offline-ai foundation
andrew-bierman May 20, 2026
5cd8895
merge remote fixes (lint + types + test fixups from parallel subagent…
andrew-bierman May 20, 2026
b27b770
🤖 feat(ci): swift-ci workflow — iOS + macOS smoke + script tests (U12)
andrew-bierman May 20, 2026
02aa486
📋 docs(swift-audit): U13 decision artifact + feature parity matrix
andrew-bierman May 20, 2026
1945cb6
📋 chore(swift-audit): flip plan status to completed (U13 closes audit)
andrew-bierman May 20, 2026
c6452d4
📋 docs(swift-audit): final test-run addendum — 135/136 macOS + 139/20…
andrew-bierman May 21, 2026
d8f7d2a
🔧 fix(api): lazy-import @cloudflare/containers in packTemplates
andrew-bierman May 21, 2026
ed3a702
🔧 feat(api): wire mapJsonSchema.zod for OpenAPI emission
andrew-bierman May 21, 2026
80884bb
📋 docs(CLAUDE.md): hard rule — use drizzle-kit generate, never hand-w…
andrew-bierman May 21, 2026
15d25e6
🧪 feat(swift): quicktype peer codegen scaffolding (WIP — blocked on q…
andrew-bierman May 21, 2026
f27c62e
🧪 feat(swift): quicktype — add bundle input mode (auto-detects compon…
andrew-bierman May 21, 2026
c53c30a
🔧 fix(lint): exclude .wrangler and .swiftpm from no-owned-max-params …
andrew-bierman May 21, 2026
609332b
🔧 fix(scripts): disable broken test:api-client:types script
andrew-bierman May 21, 2026
b652a2e
fix(tsconfig): exclude apps/swift/scripts from root type-check
claude May 21, 2026
f9215c7
✨ feat(api,swift): U7 auto-gen pipeline — Elysia .model({}) registrat…
andrew-bierman May 21, 2026
e1619b3
merge U7 auto-gen pipeline: .model({}) routes + swift-openapi-generat…
andrew-bierman May 21, 2026
72e13ff
🔧 fix(lint): use @packrat/guards.isObject/isNumber in generate-openap…
andrew-bierman May 21, 2026
387b1b2
merge remote tsconfig exclusion fix into U7 integration
andrew-bierman May 21, 2026
caec9bc
🔐 feat(swift): proper credential plumbing via xcodebuild → Info.plist…
andrew-bierman May 21, 2026
51e8db7
🧪 feat(swift): quicktype bundle mode emits 8332 lines from 51 compone…
andrew-bierman May 21, 2026
3d0e57f
🔧 fix(swift): quicktype output goes to apps/swift/Generated/ (gitigno…
andrew-bierman May 21, 2026
8bb1b1b
fix(swift,api): make Better Auth CSRF + cred plumbing work for native…
andrew-bierman May 21, 2026
ffc1e64
fix(api,swift): pack-create default category + serialise Keychain tests
andrew-bierman May 21, 2026
bf7a3a0
docs(audit): record real-sim e2e numbers in decision doc
andrew-bierman May 21, 2026
6c55c2f
fix(swift): WildlifeService also needs Origin header for Better Auth …
andrew-bierman May 21, 2026
37866ce
🔀 Sync macOS Swift branch with development
andrew-bierman Jun 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions .github/workflows/swift-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
name: Swift CI

on:
push:
branches: ["main", "development"]
paths:
- "apps/swift/**"
- "packages/api/**/openapi.yaml"
- ".github/workflows/swift-ci.yml"
pull_request:
branches: ["**"]
paths:
- "apps/swift/**"
- "packages/api/**/openapi.yaml"
- ".github/workflows/swift-ci.yml"
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
# ─── Unit + UI test bundles compile + run on macOS ────────────────────────────
build-and-smoke:
name: ${{ matrix.scheme }} (smoke)
runs-on: macos-15
strategy:
fail-fast: false
matrix:
include:
- scheme: PackRat-iOS
destination: "platform=iOS Simulator,name=iPhone 17,OS=latest"
plan: iOS-Smoke
- scheme: PackRat-macOS
destination: "platform=macOS,arch=arm64"
plan: macOS-Smoke

steps:
- uses: actions/checkout@v6

- name: Select Xcode (use newest available — required by SwiftUI/Observation APIs the app uses)
run: |
sudo xcode-select -switch /Applications/Xcode.app
xcodebuild -version
xcrun --show-sdk-version

- uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Install xcodegen
run: brew install xcodegen

- name: Install dependencies
env:
PACKRAT_NATIVEWIND_UI_GITHUB_TOKEN: ${{ secrets.PACKRAT_NATIVEWIND_UI_GITHUB_TOKEN }}
run: bun install --frozen-lockfile

- name: Generate Xcode project
run: bun swift

- name: Boot iOS simulator
if: matrix.scheme == 'PackRat-iOS'
run: |
# Pick the newest available iPhone runtime and boot a matching device.
DEVICE_ID=$(xcrun simctl create CI-Test "iPhone 17" \
"$(xcrun simctl list runtimes -j | jq -r '.runtimes[] | select(.identifier | contains("iOS-")) | .identifier' | sort -V | tail -1)")
xcrun simctl boot "$DEVICE_ID"
xcrun simctl bootstatus "$DEVICE_ID"

- name: Run ${{ matrix.plan }} test plan
env:
E2E_EMAIL: ${{ secrets.E2E_EMAIL }}
E2E_PASSWORD: ${{ secrets.E2E_PASSWORD }}
run: |
cd apps/swift
# Use signing-bypass on macOS so CI can build/test without a Mac Development cert
# provisioned for the runner. iOS Simulator never needs signing.
if [ "${{ matrix.scheme }}" = "PackRat-macOS" ]; then
CODE_SIGN_ARGS=(CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_ALLOWED=NO)
else
CODE_SIGN_ARGS=()
fi

xcodebuild test \
-scheme "${{ matrix.scheme }}" \
-destination "${{ matrix.destination }}" \
-testPlan "${{ matrix.plan }}" \
-resultBundlePath "/tmp/${{ matrix.scheme }}-smoke.xcresult" \
-quiet \
"${CODE_SIGN_ARGS[@]}" \
| tee "/tmp/${{ matrix.scheme }}-smoke.log"

- name: Parse xcresult summary
if: always()
run: |
if [ -d "/tmp/${{ matrix.scheme }}-smoke.xcresult" ]; then
xcrun xcresulttool get test-results summary \
--path "/tmp/${{ matrix.scheme }}-smoke.xcresult" --compact \
| jq '{ result, totalTestCount, passedTests, failedTests, skippedTests, expectedFailures }' || true
fi

- name: Upload xcresult on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.scheme }}-smoke-xcresult
path: |
/tmp/${{ matrix.scheme }}-smoke.xcresult
/tmp/${{ matrix.scheme }}-smoke.log
if-no-files-found: ignore
retention-days: 7

# ─── Wrapper-script unit tests (vitest) — fast, runs on every PR ──────────────
swift-scripts:
name: Swift scripts (vitest)
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6

- uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Install dependencies
env:
PACKRAT_NATIVEWIND_UI_GITHUB_TOKEN: ${{ secrets.PACKRAT_NATIVEWIND_UI_GITHUB_TOKEN }}
run: bun install --frozen-lockfile

- name: Run vitest
run: bun test:swift:scripts
19 changes: 18 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,23 @@ apps/guides/public/og/
.lighthouseci/

# Git worktrees
.worktrees/
.worktrees
.worktrees/

# Xcode (apps/swift)
apps/swift/xcconfig/*.local.xcconfig
apps/swift/PackRat.xcodeproj/
apps/swift/*.xcworkspace/xcuserdata/
apps/swift/DerivedData/
apps/swift/.build/
apps/swift/.swiftpm/
apps/swift/Package.resolved
apps/swift/PackRatAPIClient/.build/
apps/swift/PackRatAPIClient/.swiftpm/
apps/swift/TestResults/

apps/swift/build/

# Quicktype reference output — generated for inspection, not compiled into the app.
apps/swift/Generated/
.turbo/
32 changes: 32 additions & 0 deletions .zed/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"languages": {
"JavaScript": {
"formatter": { "language_server": { "name": "biome" } },
"code_actions_on_format": {
"source.fixAll.biome": true,
"source.organizeImports.biome": true
}
},
"TypeScript": {
"formatter": { "language_server": { "name": "biome" } },
"code_actions_on_format": {
"source.fixAll.biome": true,
"source.organizeImports.biome": true
}
},
"TSX": {
"formatter": { "language_server": { "name": "biome" } },
"code_actions_on_format": {
"source.fixAll.biome": true,
"source.organizeImports.biome": true
}
},
"JSON": {
"formatter": { "language_server": { "name": "biome" } },
"code_actions_on_format": {
"source.fixAll.biome": true,
"source.organizeImports.biome": true
}
}
}
}
27 changes: 12 additions & 15 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -270,27 +270,24 @@ Defined in root `tsconfig.json`:

## Database

- ORM: Drizzle (`packages/api/src/db/schema.ts`)
- Migrations: Drizzle Kit (`drizzle-kit`)
- ORM: Drizzle (`packages/db/src/schema/` after the schema extraction)
- Migrations: **always** Drizzle Kit (`drizzle-kit generate`) — never hand-written SQL
- Embeddings: pgvector with 1536 dimensions

### Migration discipline (read before touching `packages/api/drizzle/`)
### Migrations — HARD RULE

1. **Always generate via drizzle-kit.** Edit `packages/api/src/db/schema.ts` (or `packages/db/src/schema.ts` for the shared workspace), then run from the API package:
**Do not hand-write SQL migrations.** Always use Drizzle Kit:

```bash
cd packages/api && bun run db:generate
```
1. Change the schema in `packages/api/src/db/schema.ts` or `packages/db/src/schema.ts` / `packages/db/src/schema/*.ts`, depending on where the table is owned.
2. Run `bun run db:generate` from `packages/api/` or the matching package Drizzle command to emit the migration SQL.
3. Keep the random migration filename that Drizzle Kit generates. Do not rename it.
4. Review the generated SQL, snapshot, and journal entry for correctness.
5. Commit both the schema change and the generated migration in the same PR.
6. Run `bunx drizzle-kit check` from `packages/api/` before pushing when API migrations changed.

Drizzle-kit emits a random-name file like `0048_loud_squirrel_girl.sql`. That random name is fine — keep it. The naming convention here is "whatever drizzle-kit gives you."
Hand-written migrations get out of sync with the schema, drift across environments, and break the Better Auth / drizzle-zod / inferred-TS-types unified pipeline (PR #2414). If `drizzle-kit generate` produces a migration you disagree with, **fix the schema or the generator config** — do not edit the SQL by hand.

2. **Do not rename a generated migration file.** The `meta/_journal.json` `tag` field, the migration SQL filename, and the snapshot filename all encode the migration identity together. Renaming any one of them (even with corresponding journal edits) makes the migration look hand-authored and creates drift that future drizzle-kit operations can mis-handle.

3. **Do not hand-edit `meta/_journal.json`, `meta/*_snapshot.json`, or the generated SQL.** If the generated migration is wrong, fix the schema, delete the bad migration + snapshot + journal entry, and regenerate. Do not patch around it.

4. **Collapse additive changes into one migration when they ship together** — fewer snapshot files in the diff, easier to revert as a unit. Splitting only makes sense when migrations need to land in separate releases.

5. **Verify after generating.** Run `bunx drizzle-kit check` from `packages/api/` — it validates the snapshot chain is internally consistent. Run before pushing.
If you find a migration in the repo that was hand-written (no `drizzle-kit` provenance), flag it in your PR description and regenerate from schema as a follow-up commit.

## EAS Build Profiles

Expand Down
95 changes: 95 additions & 0 deletions apps/swift/PackRatAPIClient/Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 34 additions & 0 deletions apps/swift/PackRatAPIClient/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// swift-tools-version: 5.9
// This package is used only for `bun swift:codegen` — it is NOT referenced
// by the Xcode project. The generated Client.swift / Types.swift are
// committed directly into Sources/PackRat/API/.
import PackageDescription

let package = Package(
name: "PackRatAPIClient",
platforms: [
.macOS(.v14),
.iOS(.v17),
],
products: [
.library(name: "PackRatAPIClient", targets: ["PackRatAPIClient"]),
],
dependencies: [
.package(url: "https://github.com/apple/swift-openapi-generator", from: "1.3.0"),
.package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.5.0"),
.package(url: "https://github.com/apple/swift-openapi-urlsession", from: "1.0.0"),
],
targets: [
.target(
name: "PackRatAPIClient",
dependencies: [
.product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"),
.product(name: "OpenAPIURLSession", package: "swift-openapi-urlsession"),
],
path: "Sources/PackRatAPIClient",
plugins: [
.plugin(name: "OpenAPIGenerator", package: "swift-openapi-generator"),
]
),
]
)
Loading
Loading