summaryrefslogtreecommitdiffstats
path: root/CLAUDE.md
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-09-12 10:08:36 +0200
committerChristophe Besson <cbesson@gmail.com>2026-09-12 16:36:54 +0200
commit28548dcbde50f7cee471d6962e16115bb87b056f (patch)
tree0ba9e8c85ef77d327d8b5bcaee4b64d518e71ebe /CLAUDE.md
parent02f061ee2c1824734bf63c91d39b47848926f59c (diff)
downloadmeshbay-28548dcbde50f7cee471d6962e16115bb87b056f.tar.gz
docs: AV9–AV12, and the two shapes that keep producing them
The register grows by the four findings from users.py, and gains the pattern underneath several of them: a limit written on one of several equivalent paths (three endpoints send mail, one had no limit; every list in admin.py is bounded, the two outside it were not; the group claim was bounded at registration and not on reload), and a bound that counts the wrong thing (a per-IP rate limit bounds a caller, never the mailbox that receives what they cause). Also records that admin.py was read under the lens and needed nothing, so the next reader does not re-derive that. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T4YmK41VsEURWFdop4EEeT
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md11
1 files changed, 10 insertions, 1 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index b6fbd4c..4e29feb 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -122,7 +122,7 @@ that produced it.
| Looking for | Read |
|---|---|
| What a label means (`C1`, `H3`, `NS6`, `T3`, `C5b`, `W2`, `E9`, `F1`, `AV4`, …) | `docs/MESHBAY_DESIGN.md` §13 |
-| What one member can cost the others (`AV1`–`AV8`) | §13.5b — the newest category, and the one the first three reviews had no question for |
+| What one member can cost the others (`AV1`–`AV12`) | §13.5b — the newest category, and the one the first three reviews had no question for |
| Trust model, and what the project may and may not claim | §2 |
| Identity, devices, admission, recovery, the keypair bundle | §3 |
| Cryptography, key hierarchy, the group and chat envelopes | §4 |
@@ -148,6 +148,15 @@ These are about working on the tree rather than about the design:
interface, for the web and the app alike; `packages/meshbay-client/scripts/
sync-ui.js` copies it (`npm run sync-ui`) and CI fails if the copy drifts —
**never edit `packages/meshbay-client/ui/` by hand**
+- **A blocking call in an async handler is the whole instance's problem.**
+ `mail._send` is `smtplib` with a ten-second timeout, and it was called
+ straight from four handlers: while the MTA thought about it, nothing else was
+ served, no node socket read, no offer relayed. It has no symptom a test
+ catches — everything works, slowly, for everyone, whenever the mail server is
+ having a bad day. `mail.send_off_loop` is the door, and
+ `test_no_mail_is_sent_from_the_event_loop` reads the source for direct calls,
+ because there is nothing else to read
+
- **Before adding an endpoint or a message, ask who pays.** A participant
supplies input; if anyone other than the sender bears the cost, there is a
ceiling to write, and it goes on **every** path that writes the state — the