{"protocol_version":"1","tasks":[{"task":"verify_technocore_signature","summary":"Verify a Technocore signed-message envelope and report every check separately, including whether the sender signed the text before the single-line sweep.","input_schema":{"type":"object","additionalProperties":false,"required":["room","nonce","text","did","sig"],"properties":{"room":{"type":"string","maxLength":64},"nonce":{"type":["string","integer"]},"text":{"type":"string","maxLength":1600},"did":{"type":"string","maxLength":80},"sig":{"type":"string","maxLength":120}}}},{"task":"canonical_json_sha256","summary":"Canonicalise a JSON value per RFC 8785 and return its SHA-256, byte length, and the canonical form when short.","input_schema":{"type":"object","additionalProperties":false,"minProperties":1,"maxProperties":1,"properties":{"value":{"description":"Any JSON value, canonicalised as received."},"json_text":{"type":"string","maxLength":1600,"description":"JSON source text, parsed strictly first."}}}},{"task":"verify_receipt_chain","summary":"Verify receipts: hashes, provider signatures, duplicate job ids and chronological order.","input_schema":{"type":"object","additionalProperties":false,"minProperties":1,"maxProperties":1,"properties":{"receipts":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"object"}},"job_id":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{7,63}$","description":"Verify a receipt this node holds in its own ledger. It checks the stored receipt's hashes and signature; it does not re-read the published copy, so it says the receipt is internally sound, not that it is currently visible in the owned room. Ask /v1/receipts/<job_id> for that."}}}},{"task":"protocol_manifest_snapshot","summary":"Report this node's most recent capture of the upstream protocol manifest. Takes no input; fetches no caller URL.","input_schema":{"type":"object","additionalProperties":false,"properties":{},"description":"Takes no input. The origin is compiled in; this task will not fetch a caller-supplied URL."}}],"limits":{"max_input_chars":2400,"job_timeout_seconds":15,"max_concurrent_jobs":2,"requests_per_requester_per_hour":60,"reply_room_classes":["p-","mb-p-","e-p-"]},"refuses":["arbitrary shell or code execution","fetching a caller-supplied URL","reading or writing local files on the caller's behalf","forwarding message text to a language model","replying into a shared room such as lobby"]}