Build optimization, dependency resolution, and multi-module KMP troubleshooting for AmethystMultiplatform. Use when working with: (1) Gradle build files (build.gradle.kts, settings.gradle), (2) Version catalog (libs.versions.toml), (3) Build errors and dependency conflicts, (4) Module dependencies and source sets, (5)…
Use when writing or reviewing Kotlin code that stores CoroutineScope, launches from init/non-suspending APIs, calls runBlocking, or catches broad exceptions around suspend calls. Technique-layer skill — complements the codebase-specific kotlin-coroutines.
Advanced Kotlin patterns for AmethystMultiplatform. Flow state management (StateFlow/SharedFlow), sealed hierarchies (classes vs interfaces), immutability (@Immutable, data classes), DSL builders (type-safe fluent APIs), inline functions (reified generics, performance). Use when working with: (1) State management…
Platform abstraction decision-making for Amethyst KMP project. Guides when to abstract vs keep platform-specific, source set placement (commonMain, jvmAndroid, platform-specific), expect/actual patterns. Covers primary targets (Android, JVM/Desktop, iOS — all mature) with web/wasm as possible future targets.…
Use when writing or reviewing Kotlin type declarations to choose @JvmInline value class over data class where appropriate, including Compose stability implications. Technique-layer skill — complements the codebase-specific kotlin-expert.
How to create, review, revise, and merge pull requests in this repo, which can be published TWO ways — GitHub (the gh CLI) and git-over-nostr (the ngit CLI, where PRs are nostr proposals reviewed on gitworkshop.dev). Use whenever a task involves opening/updating/merging a PR by either mechanism, the pr/feat/ branches…
The NIP-85 trusted-assertions model in Quartz (nip85TrustedAssertions/) — kind 10040 trust-provider lists, kind 30382 contact cards / user assertions, 30383 event assertions, 30384 addressable assertions, 30385 external-id assertions. Use when building or parsing these events, working with the typed tags (RankTag…
Integration guide for using the Quartz Nostr KMP library in external projects. Use when: (1) adding Quartz as a Gradle dependency, (2) setting up NostrClient with WebSocket, (3) creating/signing/sending events, (4) building relay subscriptions with Filter, (5) handling keys with KeyPair/NostrSignerInternal, (6) using…
Subscription and filter-assembly patterns for the Amethyst relay client layer in commons/.../relayClient/. Use when working with compose-scoped subscriptions (ComposeSubscriptionManager, Subscribable), filter assemblers (MetadataFilterAssembler, ReactionsFilterAssembler, FeedMetadataCoordinator), preloaders…
The NIP-50 indexing surface of Quartz — the SearchableEvent interface, which event kinds are searchable, exactly what text each kind's indexableContent() contributes, how the SQLite/filesystem stores consume it, and the NIP-50 SearchQuery extension grammar plus SearchRelayListEvent (kind 10007). Use when making a kind…