Skip to content

Tech debt: NSE log visibility, LightRelay concurrency, ECDH parity check #86

Description

@DocNR

Verified still open against current source (build 102, 2026-08-10).

  • "Copy Recent Logs" doesn't capture NSE activity. OSLogStore(scope: .currentProcessIdentifier) only sees the main-app process, but the NSE is where most real signing happens (app closed = most of the time). Have the NSE append structured log entries to a shared app-group file that the main app merges in when exporting. Clave/Views/Settings/LogExporter.swift:27.
  • LogExporter loose ends from PR feat: hide nostrconnect UI behind dev menu + add log export #4 review: "apns" category declared in allCategories but unused (LogExporter.swift:21); LogExporter/Entry types aren't Sendable (2 Swift 6 warnings at SettingsView.swift:202-203); no round-trip persistence test for DeveloperSettings despite the init already supporting a defaults: override for testing.
  • LightRelay is a final class @unchecked Sendable, not an actor. Was changed from actor to class for NSE compatibility; worth a thread-safety review to confirm the @unchecked is actually justified. Shared/LightRelay.swift:21.
  • P256K ECDH result drops the compressed-point prefix byte with no correctness check. No test vector confirms this doesn't affect parity on edge cases. Shared/LightCrypto.swift:180-191.
  • SharedStorage has no file-level locking for NSE/app concurrency, only an in-process lock that's explicitly commented as intra-process-only. Worth revisiting if cross-process races ever show up in practice. Shared/SharedStorage.swift:596.

Source: internal backlog triage, 2026-08-10.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions