The mistake wasn’t in the circuit.
I kept looking there anyway. Midnight, Compact, private logic, the whole beautiful stack. I had that smug builder feeling for maybe twenty minutes, the dangerous kind, where the hard part seems done because the code compiles and the proof path looks clean.
Then I hit the part where the app had to show something.
Not prove.
Show.
A status. A receipt. A reason a user was accepted, rejected, delayed, flagged, whatever word I wrote there first. “Transparent” was the word, actually. I deleted it. Too proud. Too easy.
That’s the thing Compact does to your brain a little. Midnight really does lower the barrier to building privacy-preserving contract logic. Compact is designed to abstract a lot of the zero-knowledge machinery away, and Compact took the circuit pain off my screen. It did not take the disclosure decision with it.
Which sounds like relief until the disclosure choice is yours.
Because Midnight only gives you the states. Public things the ledger can keep, proofs, contract code, whatever you intentionally make visible. Private things that stay encrypted and local. Selective disclosure sits in between those two like a polite little bridge that suddenly becomes your problem at 1:47am.
And now the pressure isn’t cryptography. Not really.
It’s appetite.
How much does this app need to reveal to feel usable?
How little can it reveal before support tickets start sounding like accusations?
Compact makes privacy buildable on Midnight. I believe that. Still do. But “buildable” is not the same word as “settled.”
It just means the hardest question moved.
Not can this contract keep data protected?
Something worse.
When disclosure becomes easy to postpone, how long before the product starts making that decision for you?