| Criterion | Result | Evidence |
|---|---|---|
| CHR-AU | 5/5 | Constant-time token comparison, bearer token enforcement on all admin endpoints |
| CHR-AI | 4/4 | Ed25519 signature verification via FederatedRegistry::verify_advertisement(), DID/key mismatch detection, 32KB body limit |
| CHR-FT | 8/8 | PeerRegistrationPolicy vouch requirement, bootstrap bypass only on empty registry, net_guard::assert_safe_peer_url() blocks RFC1918, loopback, CGNAT, localhost, and plaintext HTTP peers |
| CHR-ID | 3/3 | W3C did:key:z6Mk Ed25519 format, cert fingerprint, structured status endpoint |
| CHR-OB | 3/3 | Federation query, public browse, peer list — all return structured JSON without auth |
| CHR-SR | 6/6 | FTS5 injection escaped (200 not 500), oversized query rejected (400), pagination clamped (0→1, 999→200), 404 on nonexistent, 21ms actual latency |
| SC-AD-01 | 10/10 | CASS-PI-002, CASS-PI-004: injection in agent name stored as literal data, base64 in returns field treated as opaque |
| SC-AD-02 | 10/10 | CASS-AS-001-A/B, AS-003-AWS/GCP/DOCKER, AS-004: wrong key rejected, tampered DID rejected, AWS/GCP/Docker SSRF blocked, forged vouch rejected |
| SC-AD-04 | 10/10 | CASS-SE-001, SE-003: social admin override and reciprocity claims rejected (401 without token) |