Kgothatso Ngako c77187e78d feat(subgroups): schema 23 -- what a room is for survives the ceremony
Two nullable DkgSession columns and one tag on the ritual proposal, so the thing
a subgroup is being made for reaches the certificate.

It has to travel this way rather than in the coordinator's head. The certificate
is proposed *after* the ceremony and by whoever is able to -- any parent admin
holding a share, who may never have seen the screen that started it -- which is
why every step of a subgroup reads stored rows rather than a session handed down
from a screen. The origin is one more row to read. And because it rides the
proposal, every participant's session carries it and not only the coordinator's:
an admin asked for the certificate reads what the room is for off their own
session instead of taking the proposer's word.

That is the same road `subject` and `participantPublicKeys` took in v19, for the
same reason, and the migration comment says so.

Neither column is a foreign key, following parentChatRoomId's precedent in v17
and with a sharper version of its reason: these entities live in the *parent's*
tables, and a subgroup's admins need never have been in the parent, so naming a
row this device does not hold is the normal state. A cascade would also mean
deleting a project deletes a room. There is a test for the dangling case, since
nothing in the schema would otherwise say it was intended.

It authenticates nothing. Anybody can put any kind and any id on a proposal, as
with the parent beside it, and `parseOrigin`'s comment says so where a reader
will be standing. The claim that decides anything is the certificate, which the
parent's quorum signs.

One deviation from the plan, which said `proposeBirthCertificate` would take an
`origin` parameter and the view model would pass it. It already takes the whole
`DkgSession`, so it reads `key.origin()` instead -- a parameter would have been
a second source for one fact, and the proposer's copy of it at that. Nothing in
the repository or the ritual view model had to change.

Schema 23 collides with an unmerged branch holding 23, 24 and 25; Phase 0.2 of
docs/subgroups-for-entities.md records why this takes 23 anyway.

Phase 5 of docs/subgroups-for-entities.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-03 01:39:11 +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%