{"ok":true,"registry":"cathedral-spec-v1","gradingAuthority":"relay","specs":[{"specId":"wasm.add.i32.v1","version":1,"contract":{"summary":"Export `add` taking two i32 and returning their sum.","requiredExports":["add"],"signature":"add(i32, i32) -> i32","constraints":{"maxBytes":150,"hostImports":"forbidden"}},"specHash":"4637cae3b50cd7d1204512f3bc5e69c73e6fc82b595ea50184a20f8e6f1ceb84"},{"specId":"wasm.identity.i32.v1","version":1,"contract":{"summary":"Export `id` taking one i32 and returning it unchanged.","requiredExports":["id"],"signature":"id(i32) -> i32","constraints":{"maxBytes":120,"hostImports":"forbidden"}},"specHash":"2b55188e741abbf639dc5f2adb7afd1f19347d356a151d7e39993da9372fc19c"},{"specId":"wasm.clamp.i32.v1","version":1,"contract":{"summary":"Export `clamp(x, lo, hi)` returning x constrained to [lo, hi] (assume lo <= hi).","requiredExports":["clamp"],"signature":"clamp(i32, i32, i32) -> i32","constraints":{"maxBytes":220,"hostImports":"forbidden"}},"specHash":"fee670d91b7e5e5e62d641c97661d88beb86aed54cf9ded7247fa2a174717770"},{"specId":"wasm.pong.v1","version":1,"contract":{"summary":"Studio pong kernel: export step(state,input)->state and draw(x,y,state)->0xRRGGBB. Packed state (paddle@0-5, ballx@6-11, bally@12-17, vx@18, vy@19, score@20-27), field 64×64, no host imports.","requiredExports":["step","draw"],"signature":"step(i32,i32)->i32; draw(i32,i32,i32)->i32","constraints":{"maxBytes":1024,"hostImports":"forbidden"}},"specHash":"76fe65e2e4fffb04ec5719e327bd96e22e57d5b4abab51af4ab111352fda18fa"},{"specId":"wasm.xor.texture.v1","version":1,"contract":{"summary":"Xor texture kernel: export pixel(x,y)->i32 colour. Greyscale RGB ((x^y)&255)*0x010101 in low 24 bits. No host imports.","requiredExports":["pixel"],"signature":"pixel(i32, i32) -> i32","constraints":{"maxBytes":256,"hostImports":"forbidden"}},"specHash":"f7f797a679e1dc0dfdd9dc4f0fc40561f218617d01950e40c1d3e52b361188cf"},{"specId":"wasm.rings.animated.v1","version":1,"contract":{"summary":"Animated interference rings: export pixel(x,y,t)->i32 colour. Studio: v=((((x-320)^2+(y-320)^2)>>6)-t*3)&127; RGB=((v*2)<<16)|((255-v*2)<<8)|(120+v). No host imports.","requiredExports":["pixel"],"signature":"pixel(i32, i32, i32) -> i32","constraints":{"maxBytes":512,"hostImports":"forbidden"}},"specHash":"664bd70b770241f2b96e14d04eea3b74ece593b521ae9dbee3fd5948e6eee75c"}]}