mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 16:33:27 +00:00
Verified Amethyst's NIP-34 events byte-for-byte against the ngit reference implementation (DanConwayDev/ngit-cli) and the spec, and fixed three real interop divergences in quartz — so ngit/gitworkshop and Amethyst read each other's git repos, issues, patches, and PRs without losing data. - Repository announcement `clone`/`web` were emitted as REPEATED single-value tags (`["clone", a]`, `["clone", b]`). The spec and ngit use ONE multi-value tag (`["clone", a, b]`), and ngit's parser keeps only the LAST of repeated known tags — so multi-URL repos silently lost every URL but one in both directions. Now emitted as a single multi-value tag; `clones()`/`webs()` read BOTH the spec form and the legacy repeated form, so old events still parse. (`relays`/`maintainers` were already correct multi-value tags.) - Issues (kind 1621) were missing the `["p", <repo-owner>]` tag that patches and PRs already include — a maintainer watching `#p` wouldn't see them. The builder now adds it (fixes both the CLI and the Android issue-creation path, which both passed an empty notify list). - Patch / PR / PR-update `r` tags carried the `"euc"` marker (`["r", commit, "euc"]`). Per the spec and ngit that marker belongs only on the kind-30617 announcement; other `r` tags are plain `["r", commit]`. A `#r` filter matches either shape, so this is a spec-compliance/byte-parity fix. `alt` (NIP-31) tags are intentionally still omitted — quartz treats the generic alt client-hint as deprecated, and ngit/gitworkshop parse the structured tags, so it isn't required for interop. Adds `GitNip34InteropTest` (5 cases: multi-value write, tolerant read of both forms, issue p-tag, plain patch r-tag) and 4 wire-format assertions to the CLI git harness (37 offline). No regressions in the nip34 or Search suites. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UKMaNoK5M2PQKCAxhxWzPr