From 94c5e0e833d55d2d93e622ca9d2b801fac0f549a Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 22 Apr 2026 03:40:14 +0000 Subject: [PATCH] chore(cli): surface ingest Failure message in harness log MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The interop harness prints `[cli] ingest / via -> Failure` for any commit/proposal/app message that quartz can't process. Without the error string it's impossible to tell `confirmation_tag mismatch` from `parent_hash invalid` from `commit references unknown proposal` without reading the Kotlin stack. Append `result.message` for Failure outcomes so the harness log is self-contained when diagnosing quartz→quartz errors (the openmls side already has `{e:?}` via the mdk-core patch). https://claude.ai/code/session_016kAxdp6ubB5CnF9URhCEzP --- .../main/kotlin/com/vitorpamplona/amethyst/cli/Context.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cli/src/main/kotlin/com/vitorpamplona/amethyst/cli/Context.kt b/cli/src/main/kotlin/com/vitorpamplona/amethyst/cli/Context.kt index f625c8a93..e2540ebbc 100644 --- a/cli/src/main/kotlin/com/vitorpamplona/amethyst/cli/Context.kt +++ b/cli/src/main/kotlin/com/vitorpamplona/amethyst/cli/Context.kt @@ -277,7 +277,12 @@ class Context( // All the MLS/NIP-59 decryption + persistence lives in MarmotIngest — // we only care about bookkeeping (since-cursors, logging) here. val result = marmot.ingest(event) - System.err.println("[cli] ingest ${event.kind}/${event.id.take(8)} via $relay → ${result::class.simpleName}") + val detail = + when (result) { + is com.vitorpamplona.amethyst.commons.marmot.MarmotIngestResult.Failure -> " ${result.message}" + else -> "" + } + System.err.println("[cli] ingest ${event.kind}/${event.id.take(8)} via $relay → ${result::class.simpleName}$detail") when (event.kind) { GiftWrapEvent.KIND -> {