diff --git a/zebra-report/zebra-spaces.html b/zebra-report/zebra-spaces.html
index bbfa87b..9f9bbb1 100644
--- a/zebra-report/zebra-spaces.html
+++ b/zebra-report/zebra-spaces.html
@@ -722,6 +722,31 @@ function logLine(kind, msg){
logEl.appendChild(d); logEl.scrollTop=logEl.scrollHeight;
}
+/* pubHex straight from a server message — prefers the explicit hex field,
+ * falls back to decoding the b64 form. Used so role/spot/boot/etc. log lines
+ * carry the actor's authoritative key (the server already verified the
+ * signature), independent of the local uuid→handle map. A spoof attempt
+ * is then visible in the log retroactively: same handle, different pubkey. */
+function pubHexFromMsg(m, b64key, hexkey){
+ if (m && hexkey && m[hexkey]) return m[hexkey];
+ if (m && b64key && m[b64key]){
+ try {
+ const bin = atob(m[b64key].replace(/-/g,'+').replace(/_/g,'/'));
+ let h=''; for (let i=0;i
page integrity · built 2026-06-02
- md5 f908c19e47433151020f76df10fe81d0
- sha256 f751785bdcb457d172dee013fbe0a445ee01b0aacdb20c2c1fe11352ef98111c
+ md5 c9a9641f134b920871292cd17598a637
+ sha256 fb1aa6ee1857cf33e50985473b98ad9648850abf82289b771c3ab2295db707b6
hashes are of this page with these two fields zeroed — to verify, blank them and re-hash
one self-contained file — save a copy and verify against these hashes; point at your own servers with ?signal= and ?turncred=, or host your own community