on master help sign in
history ofebc16eb..master
compare
5912226Rewrite CLAUDE.md to reflect actual Rust/Crux + Swift + Knot codebaseiko 91b7b58Add iOS client: Rust/Crux core + SwiftUI shell with crypto, messaging, auth, profiles, QR scanning2026.06.25.0917iko 3934b22Remove client/ directoryiko ec51d84Fix auth session relay attack by binding challenge signature to target server hostname2026.06.23.0618iko 65c98c8Update PROTOCOL.md to reflect actual implementation: fix @p format, clarify message IDs, correct error codes, expand SSRF deny-listiko dbba2b3Fix 2 bugs: octal/leading-zero IPv4 SSRF, unvalidated gossip pubkeyiko e1c294aFix 4 bugs: seqCounter empty-database panic, /messages input validation, forward batch determinism, resend skip delivered peersiko 0621b04Fix 3 bugs: send-path dedup, cursor clamp re-delivery, SSRF range gapsiko c731185Fix 5 bugs: GossipEvent record JSON/forward-compat, HTTP body cap, SSRF dword-IP bypass, session IP bindingiko e3237ebUpdate deliveredTo references after wrapping scalar in record typeiko 1a32dc0Fix bug #18: enforce maxForwardsPerServer on the send pathiko 916b7a3Fix bug #17: enforce isBadServerName at federation egressiko fbf23aaFix bug #16: block localhost-with-port in isBadServerNameiko ae2c0acFix bug #15: block RFC1918 172.16.0.0/12 in isBadServerNameiko 3539159Fix bug #14: order recordFailure/clearFailure by attempt start timeiko b16dd69Fix bug #13: key /poll and /messages rate limits on client IP, not beareriko 23efe28Fix bug #12: key IP rate-limit buckets on X-Forwarded-For behind a proxyiko dbd7f47Fix bug #19: text length checks used count (chars s), which dedupesiko a426743Fix bug #11: refuse inbound federation requests when federationEnabled is offiko 8ab1465Fix bug #10: dedupe inbound federated forwards in handleForwardMessageiko 02894c9Fix build with current knot compiler: annotate dimensionless operand in shouldRetryServeriko de66ca8Fix bug #9: tighten Timestamp annotations on handleChallenge, handleVerifyAuth, doPoll2026.05.29.1911iko 1f0ce2eFix bug #8: order forward backlog by receivedAt before clipping to budget2026.05.29.1908iko 9649de9Fix bug #7: serialize forward retries in their own background loop2026.05.29.1906iko 22d6eafFix bug #6: block bare IPv6 server names (SSRF gap)2026.05.29.1901iko 51a8e35Fix bug #5: keep messages after federated forward; track per-peer delivery2026.05.29.1855iko 3265616Fix bug #4: scope forkForwardsTo cleanup to (toKey, encryptedBlob), not blob alone2026.05.29.1842iko e6e5aa8Fix bug #3: enforce per-peer forward cap on total outstanding forwardsiko 78d5d84Fix bug #2: reject /messages batches exceeding maxBatchSize with 413 instead of silent truncationiko 3e555b1Add per-endpoint rate limiting to all HTTP routesiko 89ec9e5Simplify server.knot: single-pass gossip fold, remove forward guard, precompute live local pubkeysiko 59acc0eDownload knot compiler from releases instead of building from source2026.05.11.1608iko 02c8151Add .DS_Store and .claude/ to .gitignore, clean up local macOS junk files2026.05.11.1601iko d18ddb1Simplify server.knot: remove redundant backoff max, shrink pruneExpired return, split event foldiko 4651be0Simplify recordFailure and forkForwardsTo: extract prevCount, apply De Morgan's lawiko 1ef8c13Update docs: PROTOCOL.md rewrite for wire format accuracy, CLAUDE.md persistence notes, README client runbookiko 7a97d10Fix race effect-row unification in doPoll by padding arms with shared effectsiko 5cc044cUse row-level STM retry with per-request timeout race for long-polliko 16c749eRemove unused rate-limiting definitions and simplifyiko 45fc9a8Remove dead field ForwardFailure.firstFailedAtiko 52ab141Simplify server.knot: collapse GossipOnline literal, remove redundant pollResult destructureiko 010f8d1Simplify server.knot: collapse authedPubkey case+yield, bind expiresAt once in handleChallengeiko 3595cd9Simplify server.knot: inline verifySignature and broadcastOfflineGossip, extract forwardMatches, self-guard sendBatchedGossipiko cb5c001Simplify server.knot: rename hasSuffix, inline retryBackoff, collapse refreshLocalPresence bindingsiko 2fe6126Simplify server.knot: flatten authedPubkey CPS, hoist loop reads, inline clampiko 15ace4dSimplify server.knot: inline storeFederated, collectPollEvents, and genTokenNiko 09f28dcSimplify server.knot: consolidate folds, inline single-use helpers, flatten expressionsiko 63f9756Simplify server.knot: extract forwardFailureMaxAge constant, inline three single-use helpersiko 25a32d9Simplify server.knot: extract verifySignature, flatten refreshPeers, drop redundant ::iko d9f295aSimplify server.knot: refactor GossipEventType parsing, compute touched pubkeys once, inline recordFailure predicateiko