restored frozen rows after head deletions were undone
I fixed frozen branch views so restoring a deletion can make an inherited opening row visible again. The view keeps its original opening snapshot, while newer head content still takes precedence.
I fixed frozen branch views so restoring a deletion can make an inherited opening row visible again. The view keeps its original opening snapshot, while newer head content still takes precedence.
I made reset handling compare the full version information, not just the stored row bytes. If two reset versions disagree, the operation now fails before it changes storage or other reset state, regardless of which one arrives first.
I made relation building reject two reference columns that would produce the same relation name. Instead of silently picking whichever one appears first, schema and query construction now report the ambiguity so the column can be renamed.
I changed scoped Expo SecureStore keys to use safe encoded pieces instead of punctuation that the store rejects. Different scope types stay separate, and because the key format changed, affected users may need to sign in again.
I fixed a small dotenv-file trap: when the file did not end with a newline, a generated app ID could be glued onto the previous setting. The writer now adds the missing line break and only treats an exact app-ID assignment as the setting, leaving comments and similarly named variables alone.
I made CollectBy a true end-of-pipeline operation. Ordinary filters and projections can no longer consume it directly, while prepared routes still filter their own input before collecting it.
I stopped a native connection from being attached after it had already disconnected. The admission step now checks that the connection is still current before accepting it, and closes late arrivals through the normal cleanup path.
I tightened announcement permissions so creating, changing, or deleting announcements requires an authenticated administrator. Ordinary chat messages keep their existing rules, and an ordinary message can no longer be moved into the announcements room to bypass them.
I enforced the documented read-only rule for anonymous sessions at the final write-admission point. Anonymous clients can still read public data, but they can no longer insert, update, or delete data through ordinary or exclusive-write paths.
I made storage shutdown flush acknowledged writes that were still waiting in RocksDB. A failed flush is reported and remains retryable, so closing the database cannot falsely claim that pending data has been safely synchronised.
I fixed write-policy checks so updates keep the original creator and creation time separate from the person making the change. I also made inline policy requirements request the hidden version information they need, and reject the operation when that history cannot be reconstructed.
I made persistence regression tests wait for storage shutdown and replay to finish instead of relying on fixed delays. This prevents slow CI runs from racing a live browser database or checking for restored data too early.
I made failed broker-worker setup retryable instead of leaving a permanent failed result behind. Partially opened databases and related resources are now closed exactly once, so a later connection can try again without leaking the earlier attempt.
I stopped the client registry from forgetting a failed shutdown and immediately creating a replacement for the same key. Later users now see the shutdown error until the broken state is dealt with, while failures during initial creation can still be retried.
I stopped the starter test helper from deleting a directory supplied by its caller. It now removes temporary directories that it created itself, while leaving caller-owned directories and their contents alone.
I changed server startup to report a damaged or unreadable durable catalogue instead of silently starting with an empty in-memory index. The error now points to the failed operation, while unknown catalogue entries remain forward-compatible.
I added idle and maximum-age limits for messages that arrive in fragments. Stale partial messages now release their stored bytes and IDs during normal transport activity, while fragments that continue making progress can still complete.
I fixed encoding for arrays containing enum values with their own payload fields. Each value now uses the description of its selected case, so valid data round-trips correctly and invalid data returns a normal error instead of crashing.
I fixed shared query updates so every subscription listening to the same result receives the update. The change only copies the data when another subscriber still needs it, and keeps it available if a paused subscriber has to retry.
I removed an unnecessary full-buffer copy when decoding uncompressed incoming messages. The decoder now borrows those bytes, while compressed messages still own their decompressed data and the public interface stays unchanged.