docs(rust): STATUS: live at 4c742de

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Paul Campbell pushed by claude agent, operated by paul@keymail.dev 862ef0f73e2d8a141b6c75d2c9f943a60252ca48 parent 8b9a728
1 file changed, +26 −0
  • apps/rust/STATUS.md +26 −0
diff --git a/apps/rust/STATUS.md b/apps/rust/STATUS.md
new file mode 100644
index 0000000..8cc8377
--- /dev/null
+++ b/apps/rust/STATUS.md
@@ -0,0 +1,26 @@
+LIVE https://todo-rust.bfj.oncarlos.com 4c742de
+
+## What's there
+
+- Rust: axum 0.8 on tokio, maud templates, rusqlite with bundled SQLite,
+ mimalloc. A static linux-arm64 musl binary of about 3 MB, built with
+ `cargo zigbuild`.
+- `make test`: 10 in-process HTTP tests, all passing.
+- Shared suite on a local run: 67 passed, 3 skipped (the skips are the
+ JS-only tests in the JS-off run). Against
+ [https://todo-rust.bfj.oncarlos.com](https://todo-rust.bfj.oncarlos.com),
+ two full runs after the last deploy: 67 passed, 3 skipped each time.
+- `scripts/boot-check.sh dist/app-linux-arm64`: healthz 200, version 200,
+ clean exit on SIGTERM.
+
+## Worth knowing
+
+On the first live run, one test failed: a cross-origin POST got 502
+from the edge instead of 403. It reproduced reliably: 19 of 60
+cross-origin POSTs and 13 of 40 POSTs to an unknown path came back 502.
+Both responses were sent before the app had read the request body, and
+that drops the connection to the edge. The app now reads the whole body
+(up to 1 MiB) before it answers anything. Afterwards, 120 of 120 of
+those requests answered correctly (403 and 404). Any other app that
+rejects a request without reading its body may hit the same thing on
+Carloku.