Files
Luma/AGENTS.md
T
wt b0eb44d7a7
iOS CI / Build and Test SwiftUI App (push) Canceled after 0s
Build Unsigned iOS and macOS Apps / Build Unsigned iOS IPA (push) Canceled after 0s
Build Unsigned iOS and macOS Apps / Build macOS ZIP (push) Canceled after 0s
#7 add SCRAM-SHA-512 and document TLS 1.3 support
- Implement SCRAM-SHA-512 (RFC 5802 with SHA-512) as a Luma-side
  SaslMechanism and register it ahead of Martin's SHA-256/SHA-1/PLAIN,
  so modern servers preferring SHA-512 authenticate with it.
- Verify the math against Python-computed reference vectors (salted
  password, client proof, server signature) in SCRAMSHA512Tests and
  guard the mechanism registration in Scripts/verify.sh.
- Confirm the TLS stack negotiates TLS 1.3 (negotiatedSSL + ALPN via
  SecureTransport, handshake verified against a TLS 1.3-only server)
  and document the TLS/SCRAM posture in SECURITY.md.
2026-08-29 05:30:30 +07:00

3.0 KiB

Repository Guidelines

Luma is an XMPP client for iOS, iPadOS, macOS, and watchOS, built with SwiftUI and the Martin / MartinOMEMO libraries. The Xcode project is generated from project.yml by XcodeGen — never edit Luma.xcodeproj directly.

Project Structure

  • Sources/App/ — iOS/macOS app entry point (LumaApp.swift).
  • Sources/Shared/ — shared code:
    • Models/ — value types and pure policy enums (ArchiveSyncPagination, ChatTypingPolicy, …) plus the SwiftData @Model classes (ChatMessage, Conversation).
    • UI/ — SwiftUI views; chat list, timeline and forward picker read SwiftData through @Query (MainChatView, ChatView, ForwardMessageView).
    • XMPP/ — XMPPService (MAM/OMEMO/MUC), LumaCallEngine, OMEMO store, SASLprep (RFC 4013), SCRAM-SHA-512 mechanism, SASL failure observer/messages.
    • Persistence/ — ArchiveStore (per-account SwiftData container), ArchiveMetadataRecord (durable MAM checkpoint metadata), LegacyArchiveImporter (one-time legacy JSON snapshot migration), preferences.
    • Services/, Security/ — media, notifications, credentials.
  • Sources/Watch/ — single-target watchOS app.
  • Tests/ — XCTest unit tests.
  • Resources/, Config/, Brand/, Docs/ — assets, plists/entitlements, icons, architecture/security docs.

Build, Test & Development

  • make project — regenerate Luma.xcodeproj from project.yml (requires brew install xcodegen).
  • make open — regenerate and open Xcode.
  • make verify — run Scripts/verify.sh: grep-based structural invariants plus an optional simulator build.
  • make clean — remove the generated project and DerivedData.
  • xcodebuild test -project Luma.xcodeproj -scheme Luma \ -destination 'platform=iOS Simulator,name=iPhone 17 Pro Max' — build and run the test suite.

Coding Style

  • Swift 5.9; 4-space indentation (set in project.yml).
  • UI-facing state is @MainActor (AppModel, XMPPService); keep heavy work (OMEMO decryption, media, persistence) off the main actor.
  • Prefer small, pure value types and unit-testable policy enums over inline branching.
  • UI strings are Russian; identifiers and code comments are English.
  • No formatter/linter; Scripts/verify.sh is the guard — keep its greps in sync when you change constants or symbols.

Testing

  • XCTest with @testable import Luma; one file per model/policy (e.g., ArchiveSyncPaginationTests.swift), methods named test....
  • Unit-test pure logic (policies, pagination, checkpoints); network/UI flows are verified manually.
  • When a policy constant changes, update the matching Tests/* assertions and the Scripts/verify.sh guard in the same commit.

Commit & Pull Request

  • Short, imperative, English subject lines (see git log: "mam fixes", "fix errors and warnings").
  • CI (.github/workflows/ios.yml) runs xcodebuild test on push to main/develop and on PRs to main; PRs must keep it green.
  • Update README.md / Docs/* whenever behaviour or architecture changes.