atproto libraries implementation in ocaml
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>AT Protocol Compliance Report</title>
7 <style>
8 :root { --green: #22c55e; --red: #ef4444; --yellow: #eab308; --gray: #6b7280; }
9 body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
10 line-height: 1.6; max-width: 1200px; margin: 0 auto; padding: 2rem; background: #f9fafb; }
11 h1 { color: #111827; border-bottom: 2px solid #e5e7eb; padding-bottom: 0.5rem; }
12 h2 { color: #374151; margin-top: 2rem; }
13 .summary { background: white; border-radius: 8px; padding: 1.5rem; box-shadow: 0 1px 3px rgba(0,0,0,0.1); margin-bottom: 2rem; }
14 .summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem; }
15 .stat { text-align: center; padding: 1rem; background: #f3f4f6; border-radius: 6px; }
16 .stat-value { font-size: 2rem; font-weight: bold; color: #111827; }
17 .stat-label { color: #6b7280; font-size: 0.875rem; }
18 .pass-rate { font-size: 3rem; font-weight: bold; }
19 .pass-rate.perfect { color: var(--green); }
20 .pass-rate.good { color: var(--yellow); }
21 .pass-rate.bad { color: var(--red); }
22 table { width: 100%; border-collapse: collapse; background: white; border-radius: 8px; overflow: hidden; box-shadow: 0 1px 3px rgba(0,0,0,0.1); margin: 1rem 0; }
23 th, td { padding: 0.75rem 1rem; text-align: left; border-bottom: 1px solid #e5e7eb; }
24 th { background: #f9fafb; font-weight: 600; color: #374151; }
25 tr:hover { background: #f9fafb; }
26 .status-pass { color: var(--green); }
27 .status-fail { color: var(--red); }
28 .badge { display: inline-block; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem; font-weight: 600; }
29 .badge-pass { background: #dcfce7; color: #166534; }
30 .badge-fail { background: #fee2e2; color: #991b1b; }
31 .fixture-file { font-family: monospace; font-size: 0.875rem; color: #6b7280; }
32 .suite { background: white; border-radius: 8px; padding: 1.5rem; box-shadow: 0 1px 3px rgba(0,0,0,0.1); margin-bottom: 1.5rem; }
33 .suite-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; }
34 .suite-title { margin: 0; color: #111827; }
35 .progress-bar { height: 8px; background: #e5e7eb; border-radius: 4px; overflow: hidden; }
36 .progress-fill { height: 100%; background: var(--green); transition: width 0.3s; }
37 .meta { color: #6b7280; font-size: 0.875rem; margin-top: 1rem; }
38 a { color: #2563eb; text-decoration: none; }
39 a:hover { text-decoration: underline; }
40 code { background: #f3f4f6; padding: 0.125rem 0.375rem; border-radius: 4px; font-size: 0.875rem; }
41 details { margin-top: 1rem; }
42 summary { cursor: pointer; color: #2563eb; font-weight: 500; }
43 .failed-tests { margin-top: 1rem; }
44 </style>
45</head>
46<body>
47 <h1>AT Protocol Compliance Report</h1>
48 <div class="summary">
49 <div class="summary-grid">
50 <div class="stat"><div class="pass-rate perfect">100%</div><div class="stat-label">Pass Rate</div></div>
51 <div class="stat"><div class="stat-value">494</div><div class="stat-label">Total Tests</div></div>
52 <div class="stat"><div class="stat-value status-pass">494</div><div class="stat-label">Passed</div></div>
53 <div class="stat"><div class="stat-value status-fail">0</div><div class="stat-label">Failed</div></div>
54 </div>
55 </div>
56 <div class="suite">
57 <div class="suite-header">
58 <h2 class="suite-title">Syntax Validation</h2>
59 <span class="badge badge-pass">448/448</span>
60 </div>
61 <p><a href="https://atproto.com/specs/lexicon#string-formats" target="_blank">📖 View Specification</a></p>
62 <div class="progress-bar">
63 <div class="progress-fill" style="width: 100.0%"></div>
64 </div>
65 <table>
66 <thead><tr><th>Category</th><th>Fixture</th><th>Passed</th><th>Failed</th><th>Status</th></tr></thead>
67 <tbody>
68 <tr><td>Handle</td><td class="fixture-file">handle_syntax_valid.txt, handle_syntax_invalid.txt</td><td>119</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
69 <tr><td>DID</td><td class="fixture-file">did_syntax_valid.txt, did_syntax_invalid.txt</td><td>42</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
70 <tr><td>NSID</td><td class="fixture-file">nsid_syntax_valid.txt, nsid_syntax_invalid.txt</td><td>52</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
71 <tr><td>TID</td><td class="fixture-file">tid_syntax_valid.txt, tid_syntax_invalid.txt</td><td>13</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
72 <tr><td>Record Key</td><td class="fixture-file">recordkey_syntax_valid.txt, recordkey_syntax_invalid.txt</td><td>27</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
73 <tr><td>AT-URI</td><td class="fixture-file">aturi_syntax_valid.txt, aturi_syntax_invalid.txt</td><td>95</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
74 <tr><td>Datetime</td><td class="fixture-file">datetime_syntax_valid.txt, datetime_syntax_invalid.txt</td><td>79</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
75 <tr><td>Language</td><td class="fixture-file">language_syntax_valid.txt, language_syntax_invalid.txt</td><td>21</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
76 </tbody>
77 </table>
78 </div>
79 <div class="suite">
80 <div class="suite-header">
81 <h2 class="suite-title">Cryptography</h2>
82 <span class="badge badge-pass">12/12</span>
83 </div>
84 <p><a href="https://atproto.com/specs/cryptography" target="_blank">📖 View Specification</a></p>
85 <div class="progress-bar">
86 <div class="progress-fill" style="width: 100.0%"></div>
87 </div>
88 <table>
89 <thead><tr><th>Category</th><th>Fixture</th><th>Passed</th><th>Failed</th><th>Status</th></tr></thead>
90 <tbody>
91 <tr><td>Signature Verification</td><td class="fixture-file">signature-fixtures.json</td><td>6</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
92 <tr><td>P-256 did:key</td><td class="fixture-file">w3c_didkey_P256.json</td><td>1</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
93 <tr><td>K-256 did:key</td><td class="fixture-file">w3c_didkey_K256.json</td><td>5</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
94 </tbody>
95 </table>
96 </div>
97 <div class="suite">
98 <div class="suite-header">
99 <h2 class="suite-title">Data Model (IPLD)</h2>
100 <span class="badge badge-pass">21/21</span>
101 </div>
102 <p><a href="https://atproto.com/specs/data-model" target="_blank">📖 View Specification</a></p>
103 <div class="progress-bar">
104 <div class="progress-fill" style="width: 100.0%"></div>
105 </div>
106 <table>
107 <thead><tr><th>Category</th><th>Fixture</th><th>Passed</th><th>Failed</th><th>Status</th></tr></thead>
108 <tbody>
109 <tr><td>DAG-CBOR/CID</td><td class="fixture-file">data-model-fixtures.json</td><td>3</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
110 <tr><td>CID Syntax</td><td class="fixture-file">cid_syntax_valid.txt, cid_syntax_invalid.txt</td><td>18</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
111 </tbody>
112 </table>
113 </div>
114 <div class="suite">
115 <div class="suite-header">
116 <h2 class="suite-title">Merkle Search Tree (MST)</h2>
117 <span class="badge badge-pass">13/13</span>
118 </div>
119 <p><a href="https://atproto.com/specs/repository#mst-structure" target="_blank">📖 View Specification</a></p>
120 <div class="progress-bar">
121 <div class="progress-fill" style="width: 100.0%"></div>
122 </div>
123 <table>
124 <thead><tr><th>Category</th><th>Fixture</th><th>Passed</th><th>Failed</th><th>Status</th></tr></thead>
125 <tbody>
126 <tr><td>Key Heights</td><td class="fixture-file">key_heights.json</td><td>0</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
127 <tr><td>Common Prefix</td><td class="fixture-file">common_prefix.json</td><td>13</td><td>0</td><td class="status-pass">✅ Pass</td></tr>
128 </tbody>
129 </table>
130 </div>
131 <div class="meta">
132 <p>Generated: 2026-01-01T22:04:38Z</p>
133 <p>Repository: <a href="https://github.com/gdiazlo/atproto">https://github.com/gdiazlo/atproto</a></p>
134 <p>Test fixtures from <a href="https://github.com/bluesky-social/atproto-interop-tests">AT Protocol Interoperability Tests</a></p>
135 </div>
136</body>
137</html>