From 0cc5804b6e1a3e174e6df3f28fe7adc6aeac266c Mon Sep 17 00:00:00 2001 From: Nguyen Ngo Date: Fri, 15 May 2026 16:50:25 -0400 Subject: [PATCH] Update claude.md, app icon --- .../AppIcon.appiconset/AppIcon-1024.png | Bin 0 -> 63896 bytes .../AppIcon.appiconset/Contents.json | 1 + JanitorialQC/CLAUDE.md | 50 +++++++++++++++--- 3 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 JanitorialQC/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png diff --git a/JanitorialQC/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png b/JanitorialQC/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ec2d2a82f242312d88beb9656d32de7abc09fb GIT binary patch literal 63896 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 aKW?%~_kdOZ90X(mX+P3efA_%d`Tqlue+DW5 literal 0 HcmV?d00001 diff --git a/JanitorialQC/Assets.xcassets/AppIcon.appiconset/Contents.json b/JanitorialQC/Assets.xcassets/AppIcon.appiconset/Contents.json index 2305880..a0146d3 100644 --- a/JanitorialQC/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/JanitorialQC/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,6 +1,7 @@ { "images" : [ { + "filename" : "AppIcon-1024.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" diff --git a/JanitorialQC/CLAUDE.md b/JanitorialQC/CLAUDE.md index 5dd70bd..c06d21d 100644 --- a/JanitorialQC/CLAUDE.md +++ b/JanitorialQC/CLAUDE.md @@ -2,7 +2,7 @@ > **Audience:** AI assistants and developers working on the JanitorialQC iPad app. > **Purpose:** Authoritative reference for architecture, conventions, constraints, and decisions. -> **Last reviewed:** May 2026 (Hardening session — Xcode 26 build fixes, startup race condition resolved) +> **Last reviewed:** May 2026 (Phase C complete — notification polling, assigned-issue sync, issue photo display, FlagIssueView confirmation banner, re-inspection pre-fill fix) > **Companion:** See the web backend's `CLAUDE.md` for API contract, server-side rules, and migration chain. --- @@ -42,12 +42,14 @@ Core capabilities: - **Login/logout** via JWT against the JQC web backend API - **Reference data sync** — facilities, areas, and inspection templates pulled from server - **Inspection execution** — dynamic form rendering driven by server-side template schemas -- **Issue flagging** — severity-tagged issues with optional photos, attached to inspections -- **Re-inspection** — linked follow-up inspections with parent-form pre-fill +- **Issue flagging** — severity-tagged issues with optional photos, attached to inspections; confirmation banner shown on submit +- **Re-inspection** — linked follow-up inspections with parent-form pre-fill (template, contract, facility all pre-filled) - **Outbox queue** — completed inspections and issues submitted to server automatically when online - **Inspection history** — server-side read-only history for completed inspections -- **Issues list** — local read-only list of all issues flagged on this device +- **Issues list** — assigned issues pulled from server + device-created issues; stale unassigned records removed on sync +- **Issue detail** — shows local photos and server-hosted photos via `AsyncImage` - **Facilities browser** — read-only view of synced facilities and their areas +- **Push notifications** — local notifications for issue assignments and follow-up requests via 60-second polling --- @@ -243,6 +245,8 @@ Inspector action → SwiftData write (always succeeds immediately) 2. Submit completed inspections (processInspectionQueue) 3. Submit pending issues (processIssueQueue) 4. Pull fresh reference data (pullReferenceData) + 5. Pull + reconcile assigned issues (pullAssignedIssues) + 6. Poll server notifications (pollNotifications) ``` The UI never blocks on network. Every screen is driven by local SwiftData queries. @@ -279,6 +283,16 @@ The `isAuthenticated` guard is critical. `NWPathMonitor` fires immediately on co 2. `processInspectionQueue` — submits completed inspections only when all `pendingPhotos` are settled. Clears `followUpRequired` on parent after sync. 3. `processIssueQueue` — guards against submitting when parent inspection `syncStatus == "failed"` (prevents orphaned server records). Uses fetch-all + filter in Swift. 4. `pullReferenceData` — fetches facilities, areas, and templates. Sequential `await` calls — not `async let`. +5. `pullAssignedIssues` — fetches `GET /api/v1/issues` (scoped to current user on server). Upserts into SwiftData keyed by `serverId`. **Deletion pass** removes local records with `syncStatus == "synced"` + `inspectionLocalId == ""` whose `serverId` is absent from the response — handles reassignment away from this inspector. Empty response is not short-circuited so full unassignment is handled. +6. `pollNotifications` — fetches `GET /api/v1/notifications?since=`. Delivers each item as a local `UNUserNotificationCenter` banner. Updates cursor timestamp. Marks fetched IDs read on server. + +### Notification polling + +- `startPollTask()` creates a `Task` with a `Task.sleep(nanoseconds: 60_000_000_000)` loop. Called from `startMonitoring()` whenever connectivity is `.satisfied`. +- `stopPollTask()` cancels the task. Called when connectivity drops. +- `resetNotificationPoller()` cancels task + clears `lastNotificationFetch`. Call on logout. +- **`Timer.scheduledTimer` is banned for periodic work in SyncManager.** Timer requires `RunLoop.main` to be ticking; inside a Swift Concurrency `Task { @MainActor }` block `RunLoop.current` ≠ `RunLoop.main` — the timer fires silently never. Always use `Task.sleep`. +- **`UNUserNotificationCenterDelegate` is required for foreground delivery.** Without it, iOS silently drops local notifications when the app is active. `NotificationDelegate.shared` is set as `UNUserNotificationCenter.current().delegate` in `JanitorialQCApp.init()`. Its `willPresent` returns `[.banner, .sound]`. ### Fetch pattern — CRITICAL for Xcode 26 @@ -338,6 +352,11 @@ request(endpoint, method, body, retrying) async throws -> T | `submitInspection` | `POST /api/v1/inspections` | Sanitises `local://` photo paths before send | | `submitIssue` | `POST /api/v1/issues` | Sends `inspection_id` only if `inspection.serverId` is non-nil | | `fetchInspectionHistory` | `GET /api/v1/inspections` | Paginated, returns `InspectionHistoryResponseData` | +| `fetchAssignedIssues` | `GET /api/v1/issues` | Returns issues assigned to current user | +| `fetchIssueDetail` | `GET /api/v1/issues/` | Fetches current status for detail view | +| `updateIssueStatus` | `PATCH /api/v1/issues//status` | Inspector updates status on assigned issues | +| `fetchNotifications` | `GET /api/v1/notifications` | Accepts optional `since: Date`; returns `[APINotification]` | +| `markNotificationsRead` | `PATCH /api/v1/notifications/mark-read` | Marks list of IDs read on server | ### Token refresh @@ -478,6 +497,7 @@ else { continue } - Appends the issue to `inspection.localIssues`. - If a photo was taken: creates a `PendingPhoto` with `entityType = "issue"`. - Saves to SwiftData. + - Shows a green **"Issue Logged"** confirmation banner (2 seconds) then dismisses. - Triggers `SyncManager.triggerSync()` if online. 5. Area picker is absent — facility is derived directly from the inspection context. @@ -497,6 +517,10 @@ On `CompletedInspectionView`, if `inspection.followUpRequired == true`, an orang `StartInspectionView.startInspection()` copies non-scoring fields from the parent's `formData` into the new inspection. Excluded field types: `rating`, `pass_fail`, `image`, `signature` — these must always be re-evaluated fresh. +### Picker pre-fill (template, contract, facility) + +`applyPreFill()` sets `selectedTemplateId`, `selectedProjectId`, and `selectedFacilityId` on `.onAppear`. **The `.onChange(of: selectedProjectId)` handler guards against resetting `selectedFacilityId`** when the facility already belongs to the newly selected contract — this prevents the onChange from wiping the pre-filled facility before it renders. Without this guard, `selectedProjectId` is set first, `.onChange` fires, and `selectedFacilityId` is reset to `nil` before it can be applied. + ### followUpRequired clearing Cleared at **three** points to ensure the badge disappears regardless of timing: @@ -545,9 +569,13 @@ Uploaded (uploadStatus="uploaded", serverPath set) While a photo is pending upload, the form field value is set to `"local://"`. Before `submitInspection` sends `formData` to the server, these values are replaced with `""`. A `local://` value that reaches the server would be stored as a malformed path. -### Inspection submission gating +### Server-hosted photos in IssueDetailView -An inspection is **not submitted** until all its `pendingPhotos` have `uploadStatus == "uploaded"` or `"failed"`. It simply `continue`s to the next sync cycle. +`IssueDetailView` shows two photo sections: +1. **Local photos** — `photoLocalPaths` rendered via `UIImage(contentsOfFile:)`. Present for device-created issues where photos were captured on-device. +2. **Server photos** — `photoServerPaths` rendered via `AsyncImage(url: Constants.baseURL + "/" + relativePath)`. Present for issues pulled from the server (`pullAssignedIssues` stores `photo_path` + `result_photos` from the API response into `photoServerPaths`). + +Both sections are shown independently; an issue can have entries in either or both. --- @@ -630,6 +658,14 @@ The app registers a `BGProcessingTask` with identifier `com.jqc.sync`. | 24 | **No physical `Info.plist` file when `GENERATE_INFOPLIST_FILE = YES`** | Having both causes "Multiple commands produce Info" build error | | 25 | **Always parenthesise `try?` before `??`** | `try? context.fetch(...) ?? []` parses as `try? (fetch() ?? [])` — `fetch()` is non-optional so `??` is invalid inside `try?`; compiler infers `T = Any` and cascades into build errors. Write `(try? context.fetch(...)) ?? []` | | 26 | **Delete Xcode's default `Item.swift` immediately after project creation** | Xcode generates `Item.swift` with `@Model class Item` when creating a new SwiftData project; it compiles silently via folder sync and conflicts with real models | +| 27 | **`Timer.scheduledTimer` must NOT be used for periodic work in SyncManager** | Inside `Task { @MainActor }`, `RunLoop.current` ≠ `RunLoop.main`; the timer is added to a runloop that never ticks and fires silently never. Use `Task.sleep` instead | +| 28 | **`UNUserNotificationCenterDelegate` must be set for foreground notifications** | Without a delegate returning `[.banner, .sound]` from `willPresent`, iOS silently drops local notifications while the app is active. `NotificationDelegate.shared` is set in `JanitorialQCApp.init()` | +| 29 | **All `Decodable & Sendable` response structs need `nonisolated init(from:)`** | Under `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor`, synthesised Decodable inits inherit `@MainActor` isolation, conflicting with the `Sendable` constraint on `_Envelope`; every API model struct must declare `nonisolated init(from decoder: any Decoder)` explicitly | +| 30 | **`pullAssignedIssues` deletion pass must NOT be short-circuited on empty response** | If the server returns zero issues (all unassigned), the deletion pass must still run to remove stale local records; do not `guard !apiIssues.isEmpty else { return }` before the deletion loop | +| 31 | **Server-pulled issues identified by `syncStatus == "synced"` + `inspectionLocalId == ""`** | These are the only records safe to delete during reconciliation. Device-created issues have `inspectionLocalId != ""` and must never be deleted by `pullAssignedIssues` | +| 32 | **`StartInspectionView.onChange(of: selectedProjectId)` guards against resetting pre-filled facility** | Check `facilityBelongsToContract` before clearing `selectedFacilityId`; the onChange fires during `applyPreFill()` before `selectedFacilityId` is applied, wiping it if unchecked | +| 33 | **Issue photos are stored in `photoServerPaths` after `pullAssignedIssues`** | `photo_path` and `result_photos` from `_issue_payload` are merged into a single `[String]` and stored in `local.photoServerPaths` on insert/update | +| 34 | **`IssueDetailView` shows both `photoLocalPaths` and `photoServerPaths`** | Local paths use `UIImage(contentsOfFile:)`; server paths use `AsyncImage` with `Constants.baseURL` prefix. Both sections are independent | --- @@ -652,6 +688,8 @@ Xcode 26 sets this build setting when creating new projects with "approachable c 2. All `try? context.fetch(...)` expressions are parenthesised before `??`. 3. Chained optional patterns `(try? fetch(...))?.filter { }` are split into two `let` statements. 4. `triggerSync()` guards on `isAuthenticated` to prevent 401 cascades during startup. +5. Notification polling uses `Task.sleep` not `Timer.scheduledTimer` (RunLoop dependency). +6. All API model structs declare `nonisolated init(from decoder: any Decoder)` explicitly. **Do NOT remove `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor` from build settings** unless you fully audit every file for the resulting isolation changes. The patterns above are the correct workarounds.