The file /Users/neog/Apps/iOS/PROD-Planner2026/Planner2026-iOS/Models/PlannerTask.swift has been updated. Here's the result of running `cat -n` on a snippet of the edited file: 274→ priority: .urgent, 275→ dueDate: Date(), 276→ estimatedMinutes: 180 277→ ) 278→ ] 279→ } 280→} 281→#endif 282→ 283→// MARK: - CloudKit Integration 284→ 285→extension PlannerTask: CloudKitConvertible { 286→ static var recordType: String { "Task" } 287→ 288→ func toCKRecord() -> CKRecord { 289→ let record = createRecord() 290→ 291→ // Basic fields 292→ record.set(uuid: id, forKey: "id") 293→ record["title"] = title 294→ record["notes"] = notes 295→ record["priority"] = priority.rawValue 296→ record["status"] = status.rawValue 297→ 298→ // Dates 299→ record["dueDate"] = dueDate 300→ record["scheduledDate"] = scheduledDate 301→ record["scheduledTime"] = scheduledTime 302→ record["createdAt"] = createdAt 303→ record["completedAt"] = completedAt 304→ record["modifiedAt"] = Date() // Always update on save 305→ 306→ // Integers 307→ if let minutes = estimatedMinutes { record["estimatedMinutes"] = minutes } 308→ if let actual = actualMinutes { record["actualMinutes"] = actual } 309→ 310→ // UUIDs 311→ record.set(uuid: projectId, forKey: "projectId") 312→ record.set(uuid: locationId, forKey: "locationId") 313→ 314→ // Location features 315→ record.set(bool: hasGeofenceReminder, forKey: "hasGeofenceReminder") 316→ record["geofenceRadius"] = geofenceRadius 317→ record.set(bool: triggerOnEntry, forKey: "triggerOnEntry") 318→ 319→ // AI metadata 320→ record.set(bool: isAISuggested, forKey: "isAISuggested") 321→ if let confidence = aiConfidenceScore { record["aiConfidenceScore"] = confidence } 322→ record["patternNotes"] = patternNotes 323→ 324→ // Complex types (JSON encoded) 325→ record.encode(subtasks, forKey: "subtasks") 326→ record.encode(tags, forKey: "tags") 327→ 328→ return record 329→ } 330→ 331→ static func from(record: CKRecord) -> PlannerTask? { 332→ guard let id = record.uuid(forKey: "id"), 333→ let title = record.string(forKey: "title") else { 334→ return nil 335→ } 336→ 337→ var task = PlannerTask(title: title) 338→ task.id = id 339→ task.cloudKitRecordID = record.recordID 340→ task.notes = record.string(forKey: "notes") ?? "" 341→ 342→ // Enums 343→ if let priorityStr = record.string(forKey: "priority"), 344→ let priority = TaskPriority(rawValue: priorityStr) { 345→ task.priority = priority 346→ } 347→ if let statusStr = record.string(forKey: "status"), 348→ let status = TaskStatus(rawValue: statusStr) { 349→ task.status = status 350→ } 351→ 352→ // Dates 353→ task.dueDate = record.date(forKey: "dueDate") 354→ task.scheduledDate = record.date(forKey: "scheduledDate") 355→ task.scheduledTime = record.date(forKey: "scheduledTime") 356→ task.createdAt = record.date(forKey: "createdAt") ?? Date() 357→ task.completedAt = record.date(forKey: "completedAt") 358→ task.modifiedAt = record.date(forKey: "modifiedAt") ?? Date() 359→ 360→ // Integers 361→ task.estimatedMinutes = record.integer(forKey: "estimatedMinutes") 362→ task.actualMinutes = record.integer(forKey: "actualMinutes") 363→ 364→ // UUIDs 365→ task.projectId = record.uuid(forKey: "projectId") 366→ task.locationId = record.uuid(forKey: "locationId") 367→ 368→ // Location features 369→ task.hasGeofenceReminder = record.bool(forKey: "hasGeofenceReminder") 370→ task.geofenceRadius = record.double(forKey: "geofenceRadius") ?? 100 371→ task.triggerOnEntry = record.bool(forKey: "triggerOnEntry") 372→ 373→ // AI metadata 374→ task.isAISuggested = record.bool(forKey: "isAISuggested") 375→ task.aiConfidenceScore = record.double(forKey: "aiConfidenceScore") 376→ task.patternNotes = record.string(forKey: "patternNotes") 377→ 378→ // Complex types (JSON decoded) 379→ task.subtasks = record.decode([Subtask].self, forKey: "subtasks") ?? [] 380→ task.tags = record.decode([UUID].self, forKey: "tags") ?? [] 381→ 382→ return task 383→ } 384→} 385→