diff --git a/kez-chat/web/src/routes/Identity.svelte b/kez-chat/web/src/routes/Identity.svelte index 03269ae..0444bbf 100644 --- a/kez-chat/web/src/routes/Identity.svelte +++ b/kez-chat/web/src/routes/Identity.svelte @@ -21,12 +21,25 @@ const failed = $derived(claims.filter((c) => c.last_verify?.status === "fail")); const pending = $derived(claims.filter((c) => !c.last_verify)); + // Verified badge requires at least this many independently-verified + // proofs. Kept in sync with VERIFY_MIN_PROOFS in Messages.svelte so the + // badge means the same thing on the profile and in chat. + const VERIFY_MIN_PROOFS = 2; + const isVerified = $derived(verified.length >= VERIFY_MIN_PROOFS); + onMount(async () => { if (!session.unlocked) { push("/unlock"); return; } claims = await listClaims(); + // Publish our verified proof subjects to the server profile so peers + // can discover + independently verify them (drives our badge in their + // chat). Previously this only happened on a manual "reverify all", so + // verified users were invisible to peers until they clicked it. + if (claims.some((c) => c.last_verify?.status === "ok")) { + void publishVerifiedSubjects(); + } try { registryRecord = await lookup(session.unlocked.handle); } catch (e) { @@ -109,7 +122,7 @@
{session.unlocked.handle}@{session.unlocked.server} - {#if verified.length > 0}{/if} + {#if isVerified}{/if}