Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/components/Footer.astro
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<ul class="footer-links">
<li><a href="/platforms.html">Platforms</a></li>
<li><a href="/system.html">The System</a></li>
<li><a href="/registry.html">Registry</a></li>
<li><a href="/compare.html">Compare</a></li>
<li><a href="/changelog.html">Changelog</a></li>
<li><a href="/roadmap.html">Roadmap</a></li>
Expand Down
10 changes: 2 additions & 8 deletions src/components/Nav.astro
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ const { currentPath = '' } = Astro.props;

<li class="nav-item"><a href="/platforms.html" class="nav-link">Platforms</a></li>
<li class="nav-item"><a href="/agents.html" class="nav-link">Agents</a></li>
<li class="nav-item"><a href="/registry.html" class="nav-link">Registry</a></li>

<!-- Developers dropdown -->
<li class="nav-item has-dropdown">
Expand Down Expand Up @@ -119,13 +120,6 @@ const { currentPath = '' } = Astro.props;
<span class="dropdown-item-desc">6 real, runnable domains</span>
</span>
</a>
<a href="https://registry.traverse-framework.com" target="_blank" rel="noopener" class="dropdown-item" role="menuitem">
<span class="dropdown-icon">⬡</span>
<span>
<span class="dropdown-item-title">Registry Catalog</span>
<span class="dropdown-item-desc">Browse every published capability</span>
</span>
</a>
<a href="/compare.html" class="dropdown-item" role="menuitem">
<span class="dropdown-icon">⬡</span>
<span>
Expand Down Expand Up @@ -169,11 +163,11 @@ const { currentPath = '' } = Astro.props;
<a href="/system.html">The System</a>
<a href="/platforms.html">Platforms</a>
<a href="/agents.html">Agents</a>
<a href="/registry.html">Registry</a>
<a href="/docs/quickstart.html">Quickstart</a>
<a href="/docs.html">Docs</a>
<a href="/questions.html">All Questions</a>
<a href="/examples.html">Examples</a>
<a href="https://registry.traverse-framework.com" target="_blank" rel="noopener">Registry Catalog →</a>
<a href="/compare.html">Compare</a>
<a href="/security-audit.html">Security Audit</a>
<a href="/blog.html">Blog</a>
Expand Down
2 changes: 1 addition & 1 deletion src/pages/agents.astro
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ const _body = `<section class="page-hero">
<div class="section-label">Building with a coding agent</div>
<h2>A Claude Skill that checks the registry before it writes anything.</h2>
<p><a href="https://github.com/traverse-framework/claude-skills" target="_blank" rel="noopener">traverse-framework/claude-skills</a> hosts Claude Skills for building apps with Traverse — starting with <code>traverse-app-builder</code>, which checks the registry for a capability that already fits, authors a new one as a real JSON-Schema contract only when nothing does, compiles it to genuinely executable, ABI-compliant WASM, composes several into a multi-node workflow, and validates and runs all of it against the real <code>traverse-cli</code>. It also states this platform's current limitations plainly, since a skill that overclaims what Traverse can run today is worse than no skill at all.</p>
<p>Before authoring anything new, check the <a href="https://registry.traverse-framework.com" target="_blank" rel="noopener">Registry Catalog</a> — every published capability, browsable with real coverage and use-case data, not just a raw JSON index.</p>
<p>Before authoring anything new, check the <a href="/registry.html">Registry</a> — every published capability, browsable with real coverage and use-case data, not just a raw JSON index.</p>
<a href="https://github.com/traverse-framework/claude-skills" target="_blank" rel="noopener" class="btn btn-ghost btn-sm">See the skill →</a>
</div>
</div>
Expand Down
119 changes: 119 additions & 0 deletions src/pages/registry.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
---
import SubpageLayout from '@layouts/SubpageLayout.astro';

const _body = `<section class="page-hero">
<div class="container">
<div class="page-hero-inner">
<span class="section-label">Registry</span>
<h1 class="t-h1">One queryable source of truth for every capability.</h1>
<p class="page-hero-sub"><code>traverse-framework/registry</code> is a git-based, CI-validated, PR-published registry of capability contracts. It's where <code>traverse-registry</code> — the runtime crate — actually resolves capabilities from. Nothing gets in without a review.</p>
<div class="page-hero-badges">
<span class="badge badge-success badge-dot">Shipped</span>
<span class="badge">11 capabilities</span>
<span class="badge">38 published versions</span>
</div>
</div>
</div>
</section>

<section class="section-sm">
<div class="container">
<div class="section-header">
<div class="section-label">What's actually in it</div>
<h2>Small and real, not a placeholder catalog.</h2>
<p>Counted directly from <code>contract.json</code> files in the repo — 38 published version files across 11 distinct capabilities, 15 of them already deprecated in favor of a newer version. That churn is a feature: it means the immutability and versioning rules are actually being exercised, not just declared.</p>
</div>
<div class="registry-stats-grid">
<div class="registry-stat-card">
<div class="registry-stat-name">validation</div>
<div class="registry-stat-count">4 capabilities · 10 versions</div>
</div>
<div class="registry-stat-card">
<div class="registry-stat-name">traverse-starter</div>
<div class="registry-stat-count">3 capabilities · 12 versions</div>
</div>
<div class="registry-stat-card">
<div class="registry-stat-name">doc-approval</div>
<div class="registry-stat-count">2 capabilities · 9 versions</div>
</div>
<div class="registry-stat-card">
<div class="registry-stat-name">formatting</div>
<div class="registry-stat-count">1 capability · 2 versions</div>
</div>
<div class="registry-stat-card">
<div class="registry-stat-name">meeting-notes</div>
<div class="registry-stat-count">1 capability · 5 versions</div>
</div>
</div>
</div>
</section>

<section class="section-sm" style="background:var(--bg-elevated);border-top:1px solid var(--border);border-bottom:1px solid var(--border)">
<div class="container">
<div class="section-header">
<div class="section-label">The catalog</div>
<h2>Browse it like a package registry, not a JSON dump.</h2>
<p>The live site at <a href="https://registry.traverse-framework.com" target="_blank" rel="noopener">registry.traverse-framework.com</a> is a static site — plain HTML, CSS, and vanilla JS on GitHub Pages, no framework. A Rust/WASM build step (<code>catalog-builder</code>) generates the data behind it from the actual repo contents, not hand-maintained copy.</p>
</div>
<div class="steps">
<div class="step">
<div class="step-num active">01</div>
<div class="t-h3" style="margin-bottom:0.4rem">List</div>
<p class="t-body-sm t-muted">One card per capability — version count, real test-coverage badge, use-case count. A checkbox hides deprecated versions.</p>
</div>
<div class="step">
<div class="step-num active">02</div>
<div class="t-h3" style="margin-bottom:0.4rem">Search</div>
<p class="t-body-sm t-muted">Free-text search across the catalog — no need to know the exact namespace up front.</p>
</div>
<div class="step">
<div class="step-num active">03</div>
<div class="t-h3" style="margin-bottom:0.4rem">Inspect</div>
<p class="t-body-sm t-muted">A hash-routed detail view per version: description, use cases, real <code>cargo llvm-cov</code> coverage percentages, input/output JSON Schemas, and version history.</p>
</div>
<div class="step">
<div class="step-num active">04</div>
<div class="t-h3" style="margin-bottom:0.4rem">Verify</div>
<p class="t-body-sm t-muted">A collapsible raw <code>contract.json</code> on every detail page — the actual file, not a rendered summary of it.</p>
</div>
</div>
<a href="https://registry.traverse-framework.com" target="_blank" rel="noopener" class="btn btn-primary btn-sm" style="margin-top:1.5rem">Browse the catalog →</a>
</div>
</section>

<section class="section-sm">
<div class="container">
<div class="section-header">
<div class="section-label">How a capability gets published</div>
<h2>A PR, not an upload button.</h2>
<p>An author runs <code>traverse-cli capability publish</code>, which validates the contract locally and opens a PR automatically. CI then runs deterministic checks — schema validation, semver correctness, digest integrity, namespace-collision detection. A human still has to approve it: automated checks alone can never merge a publish. Once merged, a published version is immutable — fixes go through yanking or deprecating a version, never an in-place edit.</p>
<a href="https://github.com/traverse-framework/registry/blob/main/CONTRIBUTING.md" target="_blank" rel="noopener" class="btn btn-ghost btn-sm">Read CONTRIBUTING.md →</a>
</div>
</div>
</section>

<section class="cta-band">
<div class="container" style="text-align:center">
<h2 class="t-h2" style="margin-bottom:0.75rem">Building something new?</h2>
<p class="t-body t-muted" style="margin-bottom:2rem;max-width:500px;margin-left:auto;margin-right:auto">Check the registry before authoring a new capability — something close enough to reuse or extend might already exist.</p>
<div style="display:flex;gap:1rem;justify-content:center;flex-wrap:wrap">
<a href="https://registry.traverse-framework.com" target="_blank" rel="noopener" class="btn btn-primary">Browse the catalog →</a>
<a href="/agents.html" class="btn btn-ghost">Building with an AI agent</a>
</div>
</div>
</section>`;
---
<SubpageLayout
title={"Registry — Traverse Framework"}
description={"The public capability registry for Traverse: 11 capabilities, 38 published versions, git-based and PR-reviewed. Browse the live catalog or read how publishing actually works."}
canonical={"https://traverse-framework.com/registry.html"}
crumbs={[{ label: "Home", href: "/" }]}
>
<style is:global slot="head">
.registry-stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 0.85rem; margin-top: 1.5rem; }
.registry-stat-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 1.1rem 1.25rem; }
.registry-stat-name { font-family: var(--font-mono); font-size: 0.82rem; color: var(--accent); margin-bottom: 0.3rem; }
.registry-stat-count { font-size: 0.82rem; color: var(--fg-muted); }
</style>
<Fragment set:html={_body} />
</SubpageLayout>
Loading