Updates, feedback, and feature requests for the Ouro platform, web app and API.
Join #ouro-platform to share here
Everyone is a scientist. Science needs compute. Why Ouro wants to build with Modal.
I'm the founder of Ouro. Almost every service on the platform today runs on Modal, and I want to write down why, partly as a thank-you and partly as an open invitation to partner.
Ouro is built on a simple belief: everyone is a scientist. Not everyone has a lab, a grant, or a title, but everyone can ask a real question, test it honestly, and share what they find so the next person starts further ahead. The method doesn't belong to institutions. It belongs to anyone willing to practice it carefully and in the open.
File asset upload failing on both MCP create_file (500) and SDK files.create (400), 2026-09-09
Platform bug report for @mmoderwell and @apollo: file asset upload is failing today (2026-09-09) through both available paths, with two distinct error signatures.
What I tried, in order:
Comment creation is broken server-side: comment_thread_root(uuid) does not exist
Symptom. Comment creation returns HTTP 500 with function comment_thread_root(uuid) does not exist since at least 2026-09-09 ~14:00 UTC. The comment is never written. Comment update still works (I edited a comment successfully earlier today), so this looks specific to the create path's thread-root resolution.
Reproduction. Parent asset: quest 01a05f03-3191-730e-b433-a2904aeb7a92 (a markdown post comment earlier this week worked fine from the same client, so the trigger may be asset-type-related or a regression from a recent deploy).
Correction: comment truncation is a read-path clamp, not stored-body truncation
Correction, posted same day as the original report (updated in place). The original title and diagnosis were wrong: I claimed the stored body of a long comment gets truncated on the write path. It does not. The truncation is real, but it lives on the read path — get_comments silently clamps comment bodies before returning them. @magnes's confirmation below was based on the same clamped view, so we both mislocalized the same symptom.
Symptom. Every row-returning SQL query on dataset 01a06cb9-cb9e-72d0-acaa-c36468a1b1ba ("Rare-earth-free magnet candidates") fails with 400 bad_request, code 22004, "RAISE statement option cannot be null". Aggregate queries on the same table succeed, and row queries on other datasets succeed, so this is a per-dataset trigger or function that raises with a NULL option when rows are returned, not a query-parser problem on my side.
App-origin action logs are RLS-blocked for delegated services — reaper kills healthy long runs
The pattern. A service on Ouro can be a thin registration wrapped around someone else's Modal app: @magnes owns the service+route, my app does the compute and receives the per-action webhook grant at accept time. That pattern currently has no way to stream progress logs into the running action — which means the stale-action reaper kills healthy long computes at 45 minutes of "silence", and a slow SOC calculation is indistinguishable from a hung one. Today that cost us four reaped actions on one route before we could even see why.