feat(marmot-interop): add zero-prompt headless harness driving amy

Matches the 13 scenarios in marmot-interop.sh but runs A via the new
`amy` CLI instead of prompting the human. Identities B and C still go
through `wn`/`wnd` from whitenoise-rs.

Layout:
- marmot-interop-headless.sh    — top-level entrypoint
- headless/setup.sh             — preflight, daemon lifecycle, identities
- headless/helpers.sh           — amy wrappers + assertion helpers
- headless/tests-create.sh      — tests 01..05
- headless/tests-manage.sh      — tests 06, 07, 08, 11
- headless/tests-extras.sh      — tests 09, 10, 12, 13

Reuses lib.sh for colours, record_result, wait_for_invite/message,
jq_group_id, and dump_daemon_diagnostics.

Keeps the interactive marmot-interop.sh intact for final UI sign-off.

https://claude.ai/code/session_01M6dCKAF5Y1VyHGZPjzwDXq
This commit is contained in:
Claude
2026-04-21 21:18:48 +00:00
parent 89198ab24e
commit 39e11d29c1
8 changed files with 811 additions and 7 deletions
+14 -7
View File
@@ -1,13 +1,20 @@
# Marmot Interop Test Harness
Interactive harness that validates Amethyst's Marmot/MLS implementation against
**whitenoise-rs** (https://github.com/marmot-protocol/whitenoise-rs), the
reference Rust implementation that powers the White Noise Flutter app.
Two flavours, same scenarios:
The harness drives two `wn` daemons (Identities **B** and **C**) from the
command line and prompts the human operator to perform the Amethyst-side steps
in the mobile UI as **Identity A**. Every test records a pass/fail/skip result
into a tab-separated log, and the summary is printed at the end of the run.
- **`marmot-interop.sh`** — interactive. Drives B/C via `wn` and **prompts the
human** to perform each Amethyst-side step in the mobile UI (Identity A).
Use this for final UI verification.
- **`marmot-interop-headless.sh`** — zero prompts. Drives A via the `amy` CLI
(`./gradlew :cli:installDist`) and B/C via `wn`. Runs every scenario
end-to-end and exits with a pass/fail summary. Use this for CI and for
iterating on the Nostr/Marmot plumbing without needing to touch a phone.
Both harnesses validate Amethyst against **whitenoise-rs**
(https://github.com/marmot-protocol/whitenoise-rs), the reference Rust
implementation that powers the White Noise Flutter app. Every test records a
pass/fail/skip result into a tab-separated log, and the summary is printed at
the end of the run.
## What gets tested