CaseMark closes the back doors and unsticks the chat

A rollup of security hardening lands alongside a fix that finally tells users when a streaming chat reply has failed.

securitychat-ui

Most of this branch is the unglamorous work that separates a demo from something you'd actually let clients touch. Document access checks got stricter, the bare links that used to point at files were swapped for expiring download tokens, and the routes that call the AI model now have rate limits - three changes that together shut down both casual snooping and the kind of abuse that runs up a bill. Per-row access checks on tabular documents were also reworked for speed.

The more visible fix is on the chat side: when the streaming reply from the model errors out mid-flight, the UI now shows a readable failure instead of sitting there spinning. Anyone who has watched a half-finished AI answer freeze on screen knows why that matters. Workflow context is also now saved on each chat message, so reopening a conversation doesn't lose what the assistant was meant to be doing.

So what Buyers evaluating Mike forks for real client work should read this as CaseMark moving from prototype hygiene toward production posture.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

6 commits from CaseMark/mikeoss-casedotdev, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
3011eb79 Persist workflow metadata for chat messages kveton 2026-05-04 ↗ GitHub
d5539959 Harden document access and request limits kveton 2026-05-04 ↗ GitHub
4e770c9b Normalize document load errors kveton 2026-05-04 ↗ GitHub
a2842e05 Handle streamed chat errors kveton 2026-05-04 ↗ GitHub
e0f2d13d Optimize tabular document access checks kveton 2026-05-04 ↗ GitHub
3aadb6f8 Serialize jsonb values in Postgres compat writes kveton 2026-05-04 ↗ GitHub

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-281.md from inside the repo you want the changes in.

⬇ Download capture-thread-281.md