-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathreleases.html
More file actions
442 lines (397 loc) · 21.5 KB
/
releases.html
File metadata and controls
442 lines (397 loc) · 21.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RAPP Release Notes</title>
<meta name="description" content="Release history for the RAPP Agent Registry — what shipped, when, and why.">
<meta property="og:title" content="RAPP Release Notes">
<meta property="og:description" content="Release history for the RAPP Agent Registry. Every release is tested, scanned, and integrity-verified.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://kody-w.github.io/RAR/releases.html">
<style>
:root {
--bg: #0d1117;
--surface: #161b22;
--surface2: #21262d;
--border: #30363d;
--text: #e6edf3;
--text-dim: #8b949e;
--accent: #58a6ff;
--green: #3fb950;
--orange: #d29922;
--purple: #bc8cff;
--red: #f85149;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.6;
min-height: 100vh;
}
.container { max-width: 820px; margin: 0 auto; padding: 40px 24px; }
/* Header */
header { margin-bottom: 48px; }
header h1 { font-size: 28px; font-weight: 600; margin-bottom: 8px; }
header h1 span { color: var(--accent); }
header p { color: var(--text-dim); font-size: 15px; }
.nav-links { margin-top: 12px; display: flex; gap: 16px; }
.nav-links a {
color: var(--accent); text-decoration: none; font-size: 14px;
padding: 4px 12px; border: 1px solid var(--border); border-radius: 6px;
}
.nav-links a:hover { border-color: var(--accent); background: rgba(88,166,255,.08); }
/* Release card */
.release {
border: 1px solid var(--border);
border-radius: 12px;
background: var(--surface);
margin-bottom: 32px;
overflow: hidden;
}
.release-header {
padding: 20px 24px;
border-bottom: 1px solid var(--border);
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-wrap: wrap;
gap: 12px;
}
.release-title { font-size: 20px; font-weight: 600; }
.release-tag {
display: inline-block;
padding: 2px 10px;
border-radius: 20px;
font-size: 13px;
font-weight: 500;
}
.tag-seasonal { background: rgba(63,185,80,.15); color: var(--green); border: 1px solid rgba(63,185,80,.3); }
.tag-infrastructure { background: rgba(188,140,255,.12); color: var(--purple); border: 1px solid rgba(188,140,255,.3); }
.tag-hotfix { background: rgba(210,153,34,.12); color: var(--orange); border: 1px solid rgba(210,153,34,.3); }
.release-date { color: var(--text-dim); font-size: 13px; }
.release-body { padding: 24px; }
.release-body h3 { font-size: 15px; font-weight: 600; margin: 16px 0 8px; color: var(--text); }
.release-body h3:first-child { margin-top: 0; }
.release-body ul { padding-left: 20px; }
.release-body li { margin-bottom: 6px; font-size: 14px; color: var(--text-dim); }
.release-body li strong { color: var(--text); font-weight: 500; }
.release-body code {
background: var(--surface2); padding: 2px 6px; border-radius: 4px;
font-size: 13px; color: var(--accent);
}
.release-body p { font-size: 14px; color: var(--text-dim); margin-bottom: 8px; }
/* Stats bar */
.stats {
display: flex; gap: 24px; flex-wrap: wrap;
padding: 16px 24px;
border-top: 1px solid var(--border);
background: var(--surface2);
}
.stat { font-size: 13px; color: var(--text-dim); }
.stat strong { color: var(--text); }
/* Separator */
.timeline-dot {
width: 12px; height: 12px;
background: var(--border);
border-radius: 50%;
margin: 0 auto 32px;
}
/* Future releases */
.upcoming {
border: 1px dashed var(--border);
border-radius: 12px;
padding: 24px;
text-align: center;
color: var(--text-dim);
font-size: 14px;
margin-bottom: 32px;
}
.upcoming strong { color: var(--text); }
/* Footer */
footer {
margin-top: 48px;
padding-top: 24px;
border-top: 1px solid var(--border);
color: var(--text-dim);
font-size: 13px;
text-align: center;
}
footer a { color: var(--accent); text-decoration: none; }
/* Dynamic release loading */
#dynamic-releases { margin-bottom: 32px; }
@media (max-width: 600px) {
.container { padding: 24px 16px; }
.release-header { flex-direction: column; }
.stats { flex-direction: column; gap: 8px; }
}
</style>
</head>
<body>
<div class="container">
<header>
<h1><span>RAPP</span> Release Notes</h1>
<p>What shipped, when, and why. Every release is tested, scanned, and integrity-verified.</p>
<div class="nav-links">
<a href="index.html">Agent Store</a>
<a href="rappterpedia/index.html">Rappterpedia</a>
<a href="https://github.com/kody-w/RAR">GitHub</a>
</div>
</header>
<!-- Dynamic releases loaded from registry.json -->
<div id="dynamic-releases"></div>
<!-- ═══════════════════════════════════════════════════════ -->
<!-- SEED PROTOCOL RELEASE -->
<!-- ═══════════════════════════════════════════════════════ -->
<div class="release">
<div class="release-header">
<div>
<div class="release-title">Seed Protocol</div>
<div class="release-date">April 6, 2026</div>
</div>
<span class="release-tag tag-infrastructure">Protocol</span>
</div>
<div class="release-body">
<p>The protocol is defined. The seed IS the card. Share a number, reconstruct the exact card. No registry, no network, no lookup. Lossless. Permanent.</p>
<h3>Seed Protocol</h3>
<ul>
<li><strong>64-bit forged seed</strong> — encodes name identity (32 bits), category (5), secondary type (3), tier (2), tag count (5), dep count (4), tag hash (13). The card's DNA.</li>
<li><strong>Lossless three-path resolution</strong> — mint from file, resolve from name, resolve from seed all produce identical cards. One canonical path: manifest → <code>forge_seed()</code> → <code>resolve_card_from_seed()</code>.</li>
<li><strong>Public seeds, private ownership</strong> — seeds are public (anyone sees the card). Ownership is private (one binder holds it). Use is free. Owning is collectible.</li>
</ul>
<h3>Card Type System</h3>
<ul>
<li><strong>7 agent types</strong> — Logic, Data, Social, Shield, Craft, Heal, Wealth. Derived from category + tags. Dual-type supported.</li>
<li><strong>5 stats</strong> — HP, ATK, DEF, SPD, INT (each 10-100). Deterministic from seed.</li>
<li><strong>1-3 abilities</strong> — name, cost, damage. Derived from type + tier.</li>
<li><strong>Matchup chart</strong> — weakness/resistance cycle across all 7 types.</li>
<li><strong>Evolution stages</strong> — Seed → Base → Evolved → Legendary (maps to quality tiers).</li>
</ul>
<h3>Binder Ledger</h3>
<ul>
<li><strong>Register before you submit</strong> — binder registration required via GitHub Issue before agent submission accepted.</li>
<li><strong>Public or private binders</strong> — the ledger stores identity (GitHub username), not contents.</li>
</ul>
<h3>Binder App</h3>
<ul>
<li><strong><a href="binder.html" style="color:var(--accent)">binder.html</a></strong> — zero-dependency card binder. IndexedDB persistence, import/export, seed resolver, type system display.</li>
<li><strong>Mobile-first</strong> — bottom nav, 48px+ touch targets, swipe between cards, full-screen modal, PWA meta tags.</li>
<li><strong>Offline cache</strong> — tap Cache to store entire registry in localStorage. Browse 133 cards in the woods with no signal.</li>
</ul>
<h3>API & Discovery</h3>
<ul>
<li><strong><a href="https://raw.githubusercontent.com/kody-w/RAR/main/api.json" style="color:var(--accent)">api.json</a></strong> — machine-readable API manifest. Agents discover endpoints, self-submit, vote, review.</li>
<li><strong>Schema.org JSON-LD</strong> — NLweb-ready structured data on all HTML pages. AI agents discover RAPP via web search.</li>
<li><strong>OpenGraph meta tags</strong> — links look good when shared in Slack, Twitter, Teams.</li>
<li><strong>robots.txt + sitemap.xml</strong> — search engine indexing.</li>
</ul>
<h3>SDK Onboarding</h3>
<ul>
<li><strong><code>rapp_sdk.py init</code></strong> — create a binder in one command.</li>
<li><strong><code>rapp_sdk.py submit</code></strong> — submit an agent to RAPP from CLI.</li>
<li><strong><code>rapp_sdk.py card resolve 12345</code></strong> — resolve card from seed (offline).</li>
<li><strong>snake_case enforced in scaffold</strong> — <code>new</code> command rejects dashes.</li>
</ul>
<h3>Rapp Egg (Sneakernet Transfer)</h3>
<ul>
<li><strong><code>rapp_sdk.py egg forge</code></strong> — forge an egg from agent names. 5 agents = 54 characters.</li>
<li><strong><code>egg compact</code></strong> — compress to base64 string. Fits in a QR code, SMS, NFC tap.</li>
<li><strong><code>egg hatch</code></strong> — reconstruct entire Brainstem from compact string. Resolves seeds, downloads agents.</li>
<li><strong>Seed-from-data principle</strong> — seeds derived FROM the data, not assigned TO it. Define a schema, the seed follows. Extends to cartridges, decks, environments, worlds.</li>
</ul>
<h3>Documentation</h3>
<ul>
<li><strong><a href="whitepaper.html" style="color:var(--accent)">Whitepaper</a></strong> — full protocol specification. The seed encoding, type system, submission protocol, federation, security model, ownership invariant.</li>
<li><strong><a href="ode.html" style="color:var(--accent)">The Ode</a></strong> — why single-file agents are the only pattern that scales to all of humanity.</li>
<li><strong><a href="faq.html" style="color:var(--accent)">FAQ</a></strong> — 30 questions covering every design decision in the ecosystem.</li>
<li><strong><a href="releases.html" style="color:var(--accent)">Release Notes</a></strong> — this page. Updated with every meaningful change.</li>
</ul>
<h3>Snake_case Migration</h3>
<ul>
<li><strong>110 manifest names</strong> and <strong>130 dependency references</strong> migrated from kebab-case to snake_case.</li>
<li>No dashes anywhere — filenames, manifest names, dependencies, SDK, tests, CI, submission pipeline.</li>
</ul>
</div>
<div class="stats">
<span class="stat"><strong>133</strong> agents</span>
<span class="stat"><strong>1,117</strong> tests</span>
<span class="stat"><strong>64-bit</strong> seed protocol</span>
<span class="stat"><strong>7</strong> agent types</span>
<span class="stat"><strong>6</strong> HTML pages</span>
</div>
</div>
<div class="timeline-dot"></div>
<!-- ═══════════════════════════════════════════════════════ -->
<!-- STANDARDS & INFRASTRUCTURE RELEASE -->
<!-- ═══════════════════════════════════════════════════════ -->
<div class="release">
<div class="release-header">
<div>
<div class="release-title">Genesis</div>
<div class="release-date">April 5, 2026</div>
</div>
<span class="release-tag tag-seasonal">Seasonal</span>
</div>
<div class="release-body">
<p>The founding release. 131 agents from 7 publishers across 19 categories. The first cards ever minted in the RAPP ecosystem.</p>
<h3>What's in it</h3>
<ul>
<li><strong>131 founding agents</strong> — the genesis set. These are the first dotcoms. Never removed, never renamed.</li>
<li><strong>7 publishers</strong> — @rapp, @kody, @borg, @discreetRappers, @aibast-agents-library, @kody-w, @wildhaven</li>
<li><strong>19 categories</strong> — core, pipeline, integrations, productivity, devtools, plus 14 industry verticals</li>
<li><strong>Single-file principle</strong> — every agent is one <code>.py</code> file with embedded manifest, class, and perform()</li>
<li><strong>Agent Store</strong> — zero-dependency single HTML file, works offline from <code>file://</code></li>
<li><strong>Rappterpedia</strong> — community wiki with 360+ articles, 200+ forum threads</li>
<li><strong>RAPP SDK</strong> — <code>rapp_sdk.py</code> for scaffold, validate, test, search, install, card ops</li>
<li><strong>Holo Cards</strong> — deterministic card generation from just the agent name seed</li>
</ul>
<h3>Publishers</h3>
<ul>
<li><strong>@rapp</strong> — BasicAgent base class (the root of everything)</li>
<li><strong>@kody</strong> — Core infrastructure: registry client, memory, workbench, engine, Rappterpedia</li>
<li><strong>@borg</strong> — Borg assimilator + CardSmith (Howard Hoy)</li>
<li><strong>@discreetRappers</strong> — Pipeline, integrations, sales, productivity agents</li>
<li><strong>@aibast-agents-library</strong> — 104 industry vertical templates across 14 verticals</li>
<li><strong>@wildhaven</strong> — CEO agent</li>
</ul>
</div>
<div class="stats">
<span class="stat"><strong>131</strong> agents</span>
<span class="stat"><strong>7</strong> publishers</span>
<span class="stat"><strong>19</strong> categories</span>
<span class="stat"><strong>1</strong> base class</span>
</div>
</div>
<div class="timeline-dot"></div>
<!-- ═══════════════════════════════════════════════════════ -->
<!-- INFRASTRUCTURE RELEASE -->
<!-- ═══════════════════════════════════════════════════════ -->
<div class="release">
<div class="release-header">
<div>
<div class="release-title">Standards & Infrastructure</div>
<div class="release-date">April 6, 2026</div>
</div>
<span class="release-tag tag-infrastructure">Infrastructure</span>
</div>
<div class="release-body">
<p>Production hardening. RAPP is now ready for public submissions. Every layer has gates, every agent has a hash, every submission goes through review.</p>
<h3>Submission Pipeline</h3>
<ul>
<li><strong>Staging gate</strong> — submissions land in <code>staging/</code>, not <code>agents/</code>. Nothing enters the registry without admin review.</li>
<li><strong>Approval workflow</strong> — admin adds <code>approved</code> label, agent moves to <code>agents/</code>, CardSmith forges the card, registry rebuilds.</li>
<li><strong>Submitters don't control card details</strong> — the forge reads the agent code and decides everything.</li>
</ul>
<h3>Security</h3>
<ul>
<li><strong>Static security scanner</strong> — rejects <code>eval()</code>, <code>exec()</code>, <code>subprocess</code>, <code>os.system()</code>, <code>__import__()</code>, hardcoded secrets</li>
<li><strong>First-party allowlist</strong> — core agents that legitimately need elevated capabilities are explicitly listed</li>
<li><strong>SHA256 integrity hashes</strong> — every agent in <code>registry.json</code> has a <code>_sha256</code> field. Verified nightly.</li>
<li><strong>Version immutability</strong> — can't change agent content without bumping the version number</li>
<li><strong>CODEOWNERS</strong> — namespace protection. PRs to <code>agents/@publisher/</code> require owner approval.</li>
</ul>
<h3>Filename Standards</h3>
<ul>
<li><strong>Snake_case enforced everywhere</strong> — no dashes in agent filenames. Rejected by CI, build, tests, SDK scaffold, and submission pipeline.</li>
<li>Renamed all existing kebab-case files: <code>basic_agent.py</code>, <code>deal_desk.py</code>, <code>recon_deck.py</code></li>
<li>Removed duplicate <code>prompt-to-video.py</code></li>
</ul>
<h3>Testing</h3>
<ul>
<li><strong>1,110 tests</strong> passing across 6 test suites</li>
<li><strong>CI on every PR</strong> — smoke, pipeline, contract, and full test jobs</li>
<li><strong>Nightly health check</strong> — full suite + SHA256 audit + security scan. Opens a GitHub Issue on failure.</li>
<li><strong>Release gate</strong> — all tests must pass, staging must be clean, security scan must pass before any release ships.</li>
</ul>
<h3>Federation & Binder</h3>
<ul>
<li><strong>Binder setup</strong> — <code>setup_instance.py</code> creates <code>binder/</code>, <code>staging/</code>, namespace dir, GitHub Pages config</li>
<li><strong>Federation CLI</strong> — <code>federate.py binder/diff/submit/sync</code> for managing upstream relationship</li>
<li><strong>GitHub Pages</strong> — auto-enabled on template instances. Your binder gets a live URL.</li>
<li><strong>Submit upstream</strong> — agents go to staging on the main repo for review before entering the registry</li>
</ul>
<h3>SDK Onboarding</h3>
<ul>
<li><strong><code>rapp_sdk.py init</code></strong> — initialize a RAPP binder in one command</li>
<li><strong><code>rapp_sdk.py submit</code></strong> — submit an agent to RAPP from CLI</li>
<li><strong>Snake_case enforced in scaffold</strong> — <code>rapp_sdk.py new</code> rejects kebab-case slugs</li>
<li><strong>Full quickstart in <code>skill.md</code></strong> — AI agents can onboard autonomously</li>
</ul>
<h3>Release Pipeline</h3>
<ul>
<li><strong>Seasonal releases</strong> — manual dispatch, full test gate, integrity seal, GitHub Release + tag</li>
<li><strong>Hotfix releases</strong> — patch version for urgent fixes</li>
<li><strong>Canary releases</strong> — pre-release flag for testing</li>
<li><strong>Dry run mode</strong> — validate without shipping</li>
</ul>
<h3>Dream Catcher</h3>
<ul>
<li><strong>PK fixed</strong> — composite key is now <code>frame:utc</code> (virtual time + real time with microsecond precision). No more author+title in the key.</li>
</ul>
</div>
<div class="stats">
<span class="stat"><strong>133</strong> agents</span>
<span class="stat"><strong>1,110</strong> tests</span>
<span class="stat"><strong>6</strong> CI workflows</span>
<span class="stat"><strong>8</strong> security patterns blocked</span>
</div>
</div>
<div class="timeline-dot"></div>
<!-- Upcoming -->
<div class="upcoming">
<strong>Next release</strong> will be stamped when ready.<br>
Submissions open — <a href="https://github.com/kody-w/RAR/issues/new" style="color: var(--accent);">submit an agent</a> to be part of the next drop.
</div>
<footer>
<p>RAPP Agent Registry — <a href="https://github.com/kody-w/RAR">kody-w/RAR</a></p>
<p style="margin-top: 4px;">Releases are integrity-sealed. Every agent is SHA256-verified.</p>
</footer>
</div>
<!-- ═══════════════════════════════════════════════════════ -->
<!-- Dynamic release loader — reads from registry.json -->
<!-- ═══════════════════════════════════════════════════════ -->
<script>
(async function() {
try {
const resp = await fetch('registry.json');
if (!resp.ok) return;
const reg = await resp.json();
const releases = reg.releases || [];
if (!releases.length) return;
const container = document.getElementById('dynamic-releases');
const typeClass = { seasonal: 'tag-seasonal', hotfix: 'tag-hotfix', canary: 'tag-infrastructure' };
// Show releases newest first (these come from the release workflow)
for (const rel of releases.slice().reverse()) {
const date = new Date(rel.timestamp).toLocaleDateString('en-US', {
year: 'numeric', month: 'long', day: 'numeric'
});
const tag = typeClass[rel.release_type] || 'tag-seasonal';
const label = rel.release_type.charAt(0).toUpperCase() + rel.release_type.slice(1);
container.innerHTML += `
<div class="release">
<div class="release-header">
<div>
<div class="release-title">${rel.release_name}</div>
<div class="release-date">${date}</div>
</div>
<span class="release-tag ${tag}">${label}</span>
</div>
<div class="release-body">
<p>Integrity-sealed release.</p>
</div>
<div class="stats">
<span class="stat"><strong>${rel.agent_count}</strong> agents</span>
<span class="stat"><strong>${rel.publishers}</strong> publishers</span>
<span class="stat">Seal: <code>${rel.integrity_seal}</code></span>
</div>
</div>
<div class="timeline-dot"></div>
`;
}
} catch(e) { /* registry not available — static content still works */ }
})();
</script>
</body>
</html>