import Foundation /// Bug-report draft, ported from `diagnostics/BugReportService.kt`. struct BugReportDraft { let whatHappened: String let expected: String let steps: String let contact: String let includeLogs: Bool } /// Bug-report submission. The full diagnostics transport (URLSession + build /// config) lands in the diagnostics phase; this protocol is the stable seam. @MainActor protocol BugReportService { func submit(_ draft: BugReportDraft, deviceInfo: DeviceInfo?) async -> Result func previewLogBytes() async -> Int } /// Offline-safe no-op used until the diagnostics transport is configured. struct NoopBugReportService: BugReportService { func submit(_ draft: BugReportDraft, deviceInfo: DeviceInfo?) async -> Result { .failure(InvitationError.message("Bug reporting is not configured")) } func previewLogBytes() async -> Int { 0 } } /// Whether the diagnostics stack is compiled in (mirrors DiagnosticsBuildConfig). enum DiagnosticsBuildConfig { static let included = false }