mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-30 07:37:38 +00:00
Quartz now lives in github.com/vitorpamplona/quartz, split into quartz-core, quartz-social, quartz-relay-client and the other quartz-* libraries, with history kept. Amethyst depends on the `quartz` umbrella artifact at a released version (1.20.0) instead of the :quartz project. - Remove the quartz/ module, jitpack.yml and the Quartz CI, release and pre-push steps; tools/unicode-nfkc moved with it. - Point every module at libs.quartz. - Move the device-test fixtures the benchmark and relayBench still read to testdata/. - NostrConnectLoginUseCase parses bunker messages with BunkerJson, which now owns NIP-46 JSON. - Repoint docs and skills at the Quartz repository; the nostr-expert scripts read a Quartz checkout (QUARTZ_REPO, default ../quartz). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014ZR5ZBfhFzRiXubJc5Evyv
69 lines
3.3 KiB
Markdown
69 lines
3.3 KiB
Markdown
# Contributing to Amethyst with AI Assistance
|
|
|
|
This adds to [`CONTRIBUTING.md`](CONTRIBUTING.md), which covers every
|
|
contribution. It applies to any PR where an AI coding assistant (Claude
|
|
Code, Copilot, Cursor, Codex, etc.) wrote a large part of the diff.
|
|
|
|
## The rule: a human reviews and tests before any PR is opened
|
|
|
|
**No PR, GitHub or nostr proposal, may be opened until a human has:**
|
|
|
|
1. **Read and understood the whole diff.** You are the author of record.
|
|
You must be able to explain and defend every line in review.
|
|
2. **Tested the app by hand on a real device or emulator.** Install a
|
|
build that includes the change, run the new flow, and check that the
|
|
things it touches still work. Passing tests and green CI do not count
|
|
as manual testing.
|
|
|
|
**AI agents:** you must not open, publish or submit a PR yourself. When
|
|
the code is ready, stop. Give the human the branch, a summary of what
|
|
changed, and a test plan they can follow on a device. They open the PR
|
|
after they have done both steps above. Drafting the PR description for
|
|
them is fine. Do not write "tested on device" unless the human has told
|
|
you they did it.
|
|
|
|
PRs that skip these steps will be closed.
|
|
|
|
## Before writing code
|
|
|
|
- **Check the issue is still wanted.** Make sure it is still open, not
|
|
already fixed by a merged PR, and not out of scope. Old bounty issues
|
|
often fail this check. Search open and closed PRs for an earlier attempt.
|
|
- **Ask first for sensitive areas.** Open an issue and get a maintainer
|
|
to agree before changing any of these:
|
|
- signers and key storage (`NostrSigner*`, KeyStore);
|
|
- the release pipeline (`.github/workflows/`, signing, Gradle plugins,
|
|
packaging);
|
|
- how Amethyst reads a NIP, or a new kind or tag.
|
|
- **Make sure it fits a decentralised client.** No central server, no
|
|
state controlled by the maintainers, no required third-party account.
|
|
|
|
## What the PR must include
|
|
|
|
Put these in the **Test plan** section of the
|
|
[PR template](.github/PULL_REQUEST_TEMPLATE.md):
|
|
|
|
- **What the human tested on a device:** device model, Android version,
|
|
the steps taken and what happened. Add screenshots or a recording for
|
|
UI changes.
|
|
- **Regression checks:** which existing screens or flows the change could
|
|
break, and how each one was checked. If one could not be checked, say
|
|
so and explain why.
|
|
- **Both flavours** if the change could differ between them (UI,
|
|
services, dependencies, manifest, ProGuard): `./gradlew installPlayDebug`
|
|
and `./gradlew installFdroidDebug`. F-Droid has no Google-only libraries.
|
|
- **The minified build** (`./gradlew :amethyst:installPlayBenchmark`) if
|
|
the change touches reflection: ViewModel factories, serialization,
|
|
`expect`/`actual`.
|
|
- **Automated tests** for new logic in Quartz or `commons/`, and a
|
|
regression test for every bug fix. Run any interop suite the change
|
|
touches (see [`CONTRIBUTING.md` § Interoperability tests](CONTRIBUTING.md#interoperability-tests)).
|
|
CI does not run them.
|
|
- **For protocol changes** (a new kind, tag or reading of a NIP): quote
|
|
the NIP line that allows it, paste the published event as fetched back
|
|
from a relay (`nak req -i <id> wss://<relay>`), and say which other
|
|
clients and older Amethyst versions understand it.
|
|
|
|
If testing on the device finds bugs, fix them in separate commits whose
|
|
messages name the root cause. Don't squash them into the feature commit.
|