diff --git a/AGENTS.md b/AGENTS.md index 5713661..b2e300c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -927,8 +927,11 @@ session with **no other memory of this project**. So: plus `tradedCount` (mutual trades) + `tradedTraders` (distinct people), and keeps `tradedSatsClaimed` (the raw claim) so the card shows both. New query fields ⇒ `PERSIST_BUSTER` → **v5**. **There are no trade attestations on the - relay yet**, so the honest values are 0 today. (Broader anti-sybil plan — - claimed-vs-verified tiers, ring detection, PoW — is a follow-up.) + relay yet**, so the honest values are 0 today. Related: `useTradeReputation` + now exposes **`withPaymentProof`** — mutually-confirmed trades that carry a + `proof` tag — surfaced on `TradeReputationCard` as *"with payment proof + (self-reported — not verified)"*, **never** as verification. (Remaining + anti-sybil: ring detection + PoW.) - **Reverse geocoding hits Nominatim — disclosed (2026-10-01).** `src/lib/geocodeRegions.ts` (`reverseGeocodeRegions` / `geocodeBigDataCloud` / `pushRegionTags`) is the **single source of truth**, used by **spot create, spot diff --git a/src/components/TradeReputationCard.tsx b/src/components/TradeReputationCard.tsx index e981272..9b74124 100644 --- a/src/components/TradeReputationCard.tsx +++ b/src/components/TradeReputationCard.tsx @@ -61,6 +61,12 @@ export function TradeReputationCard({ pubkey, className }: { pubkey: string; cla ? `${data.verified} mutually-confirmed ${data.verified === 1 ? 'trade' : 'trades'} with ${people} ${people === 1 ? 'person' : 'people'}` : 'Awaiting mutual confirmation'}
+ {data.withPaymentProof > 0 && ( ++ {data.withPaymentProof} with a payment + proof attached (self-reported — not verified) +
+ )} {singlePartnerWarning && (
⚠ Every confirmation is with the same account. Mutual confirmation is
diff --git a/src/hooks/useTradeAttestations.ts b/src/hooks/useTradeAttestations.ts
index 88ae749..917e954 100644
--- a/src/hooks/useTradeAttestations.ts
+++ b/src/hooks/useTradeAttestations.ts
@@ -150,6 +150,13 @@ export interface TradeReputation {
purchases: number;
/** Deals where both sides attested the same listing. */
verified: number;
+ /**
+ * Mutually-confirmed trades that ALSO carry a `proof` tag (a payment claim).
+ * ⚠️ The `proof` is self-reported and the app does NOT verify it — it is a
+ * stronger *claim*, never evidence of payment. Show it as "with payment proof",
+ * not "verified".
+ */
+ withPaymentProof: number;
/**
* Distinct counterparties with at least one mutually-confirmed trade.
*
@@ -182,7 +189,7 @@ export function useTradeReputation(pubkey: string | undefined) {
enabled: !!pubkey,
staleTime: 5 * 60 * 1000,
queryFn: async (c): Promise