Shielded kernel operations (receiveShielded, mintShieldedToken) fail with proof server 400

Problem

All shielded kernel operations (receiveShielded, mintShieldedToken, sendShielded) fail with HTTP 400 from the proof server. Unshielded operations work fine on the same setup.

Minimal Reproduce

Contract with only 1 circuit — exact pattern from Compact standard library docs:

pragma language_version >= 0.20;
import CompactStandardLibrary;

witness localSecret(): Bytes<32>;
constructor() { const secret = localSecret(); }

export circuit receiveShieldedTokens(coin: ShieldedCoinInfo): [] {
  receiveShielded(disclose(coin));
}

Compiles successfully. Deploy succeeds. Calling receiveShieldedTokens → proof server returns 400:

POST http://localhost:6300/prove → 400 Bad Request

Environment

┌───────────────────┬──────────────────────────────────┐
│ Component │ Version │
├───────────────────┼──────────────────────────────────┤
│ Compact Toolchain │ 0.5.1 (compactc 0.30.0) │
├───────────────────┼──────────────────────────────────┤
│ Proof Server │ midnightntwrk/proof-server:8.0.3 │
├───────────────────┼──────────────────────────────────┤
│ Ledger │ 8.0.3 │
├───────────────────┼──────────────────────────────────┤
│ Midnight.js SDK │ 4.0.2 │
├───────────────────┼──────────────────────────────────┤
│ Compact Runtime │ 0.15.0 │
├───────────────────┼──────────────────────────────────┤
│ Network │ preprod │
├───────────────────┼──────────────────────────────────┤
│ OS │ macOS Apple Silicon (Docker VMM) │
└───────────────────┴──────────────────────────────────┘

What I tested

  • Minimal contract (1 circuit, zero ledger state) → 400
  • Full contract (9 circuits) → 400
  • Added witness to force larger proving key → 400
  • Compact Toolchain 0.5.0 and 0.5.1 → both 400
  • 3 different proof server images (official 8.0.3, meshsdk 1.0.0, pre-baked full params) → all 400

Unshielded equivalents (receiveUnshielded, mintUnshieldedToken, sendUnshielded) all work fine.

Full reproduce repo

Branch with minimal test contract + test web page + detailed bug report:

Steps: see BUG_REPORT_SHIELDED.md in the repo.

Question
Is this a known limitation of proof server 8.0.3? Are shielded kernel operations expected to work on preprod currently?