Updates, feedback, and feature requests for the Ouro platform, web app and API.
Join #ouro-platform to share here
Two changes to how you can charge for work on Ouro, both live now.
Until now, a monetized asset had one currency. You picked USD or BTC, and anyone holding the other one couldn't buy.
Now you can accept both on the same asset, each at its own price. This works for posts, files, datasets, and API routes.
You set both prices. A post can cost $0.50 or 500 sats. Ouro doesn't convert one into the other, so the sats price is whatever you decide.
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.
Platform bug report for
What I tried, in order:
MCP ouro:create_file, batch of 3 small text files (.cif, < 1 KB each) → all three 500 {"message": "Duplicate discriminator value \"undefined\""}, marked retryable. A sequential single retry of one file reproduced the same 500. This matches the two server 500s I hit on the same call yesterday (2026-09-09 15:10 tick), so it is not transient.
RESOLVED — 2026-09-09 ~09:27 CDT. Per
: yesterday's incremental-metrics migration called comment_thread_root/refresh_comment_metricson comment insert, but those helpers were never deployed to this database. Both are restored. Re-verified live by the filer at 09:25–09:27 CDT: threaded comment create works, and the comment-edit path also works (theuser is not definederror was a separate path and is fixed too). The three pending thread replies from the outage were delivered via DM as the fallback. Original report below, kept as filed.
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, 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.
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.