Kgothatso Ngako c03112fbbc feat(dialects): propose the ticked dialects as a wave
The FAB, the view model method behind it, and the navigation onto the session it
opens. The picker can now do the thing it is for.

One session per MAX_BATCH_SIZE entries, the way
TranslationArtifactVersionDetailViewModel catches up a translation's missing
chapters. The catalogue is smaller than one batch today so the chunking never
fires; it is one line, it is the established idiom, and it is what stops the
sixty-fifth catalogue entry from being a bug rather than a second session. The
jvmTest exercises it anyway, with a synthetic selection of 65, because nothing
else will.

One timestamp for the lot, so a wave reads as the one act it is.

The callback is invoked from Dispatchers.Main, and that is not decoration: it
navigates, and navigating off Dispatchers.IO crashes. The handoff belongs in the
view model rather than at the call site.

A batch is all-or-nothing and a retry has to be a fresh proposal, since the
items' nonce seeds have already been published against an aggregate. Both are
answered by the rule the screen is built on -- it only ever proposes what is
missing -- so asking again after a failed wave lands exactly the entries the
failed one did not, which is what makes the signing screen right to say it is
safe to ask.

The new jvmTest runs the real proposal against a real database and a real key,
because the half with the sharp edge is the one the caller cannot see: every
event of a wave is re-authored under the group's key at the room's derivation
path inside proposeSigningBatch, so the ids the group signs are not the ids
dialectsOf produced. It also asserts the round trip the picker depends on -- a
proposed wave parses back into the entries that were ticked, through the same
fromDialectEvent arm applyInnerEvent will take -- and that missingFrom then
stops offering them.

Nothing was needed to make a wave readable: ProposedEvent already has its
dialect arm, and WhatIsBeingSigned already leads a batch with "N events signed
together" and refuses to let any of it be signed unless all of it parsed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-02 22:54:25 +02:00
2026-09-09 17:04:09 +02:00
2026-03-24 04:47:19 +02:00
2026-03-23 01:41:39 +02:00
2026-03-23 01:41:39 +02:00
2026-03-23 01:41:39 +02:00

This is a Kotlin Multiplatform project targeting Android, iOS, Desktop (JVM).

  • /composeApp is for code that will be shared across your Compose Multiplatform applications. It contains several subfolders:

    • commonMain is for code that’s common for all targets.
    • Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name. For example, if you want to use Apple’s CoreCrypto for the iOS part of your Kotlin app, the iosMain folder would be the right place for such calls. Similarly, if you want to edit the Desktop (JVM) specific part, the jvmMain folder is the appropriate location.
  • /iosApp contains iOS applications. Even if you’re sharing your UI with Compose Multiplatform, you need this entry point for your iOS app. This is also where you should add SwiftUI code for your project.

Build and Run Android Application

To build and run the development version of the Android app, use the run configuration from the run widget in your IDE’s toolbar or build it directly from the terminal:

  • on macOS/Linux
    ./gradlew :composeApp:assembleDebug
    
  • on Windows
    .\gradlew.bat :composeApp:assembleDebug
    

Build and Run Desktop (JVM) Application

To build and run the development version of the desktop app, use the run configuration from the run widget in your IDE’s toolbar or run it directly from the terminal:

  • on macOS/Linux
    ./gradlew :composeApp:run
    
  • on Windows
    .\gradlew.bat :composeApp:run
    

Build and Run iOS Application

To build and run the development version of the iOS app, use the run configuration from the run widget in your IDE’s toolbar or open the /iosApp directory in Xcode and run it from there.


Learn more about Kotlin Multiplatform…

Description
Mantra as a kotlin multiplatform project
https://mantra.press
Readme 13 MiB
Languages
Kotlin 100%