diff --git a/.github/CONVENTIONS.md b/.github/CONVENTIONS.md index 4b4887c..4567435 100644 --- a/.github/CONVENTIONS.md +++ b/.github/CONVENTIONS.md @@ -316,14 +316,22 @@ someone might write. The second phrasing survives being checked carelessly; the And when reading a constraint someone else wrote, notice which shape it is. If it is a prohibition, convert it before searching: what is the subject, and where would that subject appear? -## 3. Adding a non-web file makes it public - -`publish = "."`. A new `.md`, `.sh`, `.csv` or `.py` at the root is served the moment it merges, and -nothing looks broken when it happens. `netlify.toml` carries a **denylist**, which does not close the -class. - -If you add a non-web file: put it under `.github/`, `scripts/` or `tools/` (the last two are -404'd by rule), or add a `netlify.toml` rule **in the same commit**. +## 3. Shipping a file is a decision, made in `tools/build-site.sh` + +`publish = "_site"`, and `_site/` is built by `tools/build-site.sh` from an allowlist: web files +at the repository root by extension, plus the directories the script names. A new root file of +any other kind, or a new directory, is **not served** until the script names it, in a commit. +The build refuses if a non-web kind (csv, py, sh, mjs, toml, lockfile, key material) reaches the +output, and it prints every tracked file it withheld, so the build log says what did not ship. + +What that does not decide: a file placed inside an allowlisted directory ships, whatever it is. +`verify-samples/README.md` ships on purpose; a notes file dropped into `credentials/` would ship +by the same rule. The directory list is the boundary, not the file. + +Until 2026-08-25 this section said the opposite, and it was true: `publish = "."` served the +whole repository and `netlify.toml` carried a denylist that could not close the class. Anything +you add outside the allowlist now stays in the repository, which is public, so it is still +readable there. That is a different exposure and the OPEN-CLOSED-RULE governs it. --- diff --git a/.gitignore b/.gitignore index 8033006..1a780c9 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ node_modules/ # and a tracked .pyc showed as modified after every sitemap regeneration (2026-08-24). __pycache__/ *.pyc + +# The built publish directory (tools/build-site.sh). Netlify builds it; never commit it. +_site/ diff --git a/DEMO-SCRIPT-MAR18.md b/DEMO-SCRIPT-MAR18.md deleted file mode 100644 index afbf47c..0000000 --- a/DEMO-SCRIPT-MAR18.md +++ /dev/null @@ -1,145 +0,0 @@ -# Observer Protocol Demo Script -## Lightning Labs Community Call — March 18, 2026 -**Duration:** 5 minutes -**Presenter:** Boyd -**Demo URL:** https://observerprotocol.org/demo - ---- - -## 1. Problem (15 seconds) - -> "L402 proves an agent *paid*. But here's the problem: how do you trust the agent's claims about its track record?" -> -> "Any agent can say 'I've processed 10,000 payments.' But where's the proof? Reputation scores can be gamed. Reviews can be faked." -> -> "What if we could verify claims cryptographically — not with authority, but with math?" - -**[Transition: Screen share the demo page]** - ---- - -## 2. Solution (15 seconds) - -> "Observer Protocol. It's a cryptographic trust layer for agentic payments." -> -> "Don't trust claims. Verify them. Every entry in this registry is backed by a Lightning preimage or an EVM signature." -> -> "Not a reputation score. Not a review. Math." - -**[Gesture to the hero section with live counter]** - ---- - -## 3. Live Feed (30 seconds) - -> "This is the live verification stream. Every few seconds, it polls the registry for new events." -> -> "Each row shows: the protocol — Lightning or x402, the transaction reference, whether it's cryptographically verified, and when it happened." -> -> "Notice the amber pulse? That happens when a new verification lands. It's subtle, but it's the moment math becomes truth." - -**[Point to feed items, scroll if needed]** - ---- - -## 4. The Moment (2 minutes) - -> "Now here's where it gets interesting. I'm going to generate a Lightning invoice. Someone on this call — anyone — can pay it." -> -> "And when that payment settles, you'll see it appear here in real time." - -**[Generate invoice via your LND node, display QR on screen]** - -> "Go ahead — scan it with any Lightning wallet. It's just a few sats." - -**[Wait for payment — this is the demo moment]** - -> "There! Did you see it? The amber pulse — that's the payment being cryptographically verified." -> -> "SHA256 of the preimage equals the payment hash. No trust required. The math is the record." -> -> "This entry is now permanently in the registry. Timestamped. Immutable." - ---- - -## 5. Badge (30 seconds) - -> "Every verified agent gets one of these." -> -> "[Show the SVG badge] It's a cryptographically signed badge that any agent can display. Embed it in your GitHub README, your website, your agent's profile." -> -> "The badge URL is deterministic: badge/{agent-id}.svg. It updates in real time as the agent builds its verification history." -> -> "This is maxi-0001 — my AI agent. It's been running autonomously, making payments, building a track record that can't be faked." - ---- - -## 6. CTA (1 minute) - -> "Here's the ask: We're proposing an `op-verify` skill for Lightning Agent Tools." -> -> "60-second integration. Any L402-enabled agent can join. No gatekeepers. No approval process. Just cryptographic proof." -> -> "The registry is live now at observerprotocol.org. The API is public. The SDK is on npm." -> -> "We're not selling anything. This is free infrastructure. We monetize intelligence at Agentic Terminal, not the protocol." -> -> "If you're building agents that need to prove their track record — or if you're selecting agents and need to verify their claims — talk to us." -> -> "The code is open source. The protocol is permissionless. The math is the trust." - -**[End screen share]** - ---- - -## Backup Plan - -If the live payment fails or takes too long: -- Have a pre-made payment hash ready -- Say: "While we're waiting, here's one that landed earlier today..." -- Click into the feed item to show the verification details - ---- - -## Technical Checklist (Day Of) - -- [ ] Test https://observerprotocol.org/demo loads -- [ ] Verify API endpoints responding: - - [ ] https://api.observerprotocol.org/observer/trends - - [ ] https://api.observerprotocol.org/observer/feed - - [ ] https://api.observerprotocol.org/observer/agents/list -- [ ] Generate test invoice beforehand (have QR ready) -- [ ] Have backup invoice in case first one fails -- [ ] Test screen sharing in call platform -- [ ] Close unnecessary tabs/apps -- [ ] Have LND node ready to generate invoices - ---- - -## Key Talking Points to Hit - -1. **L402 proves payment. OP proves claims.** — The distinction matters -2. **No reputation scores** — This is cryptographic, not social -3. **Rail-neutral** — Lightning today, x402 live, more coming -4. **Permanent record** — Once verified, always verifiable -5. **Free infrastructure** — Not a product pitch, a protocol proposal - ---- - -## Q&A Anticipated - -**Q: How is this different from a block explorer?** -A: Block explorers show *that* a payment happened. Observer Protocol proves *who* made it and builds a verifiable history *across* rails. - -**Q: Can agents fake their identity?** -A: They can create new identities, but they can't fake history. Every verification costs real sats. That's Sybil resistance without a gatekeeper. - -**Q: What's the business model?** -A: We don't monetize the protocol. We monetize intelligence at Agentic Terminal. This is public infrastructure. - -**Q: Is this live now?** -A: Yes. The registry has been running since February 22. The genesis transaction was between two AI agents on mainnet. - ---- - -*Good luck. The math is on your side.* diff --git a/IMPLEMENTATION_GUIDE.md b/IMPLEMENTATION_GUIDE.md deleted file mode 100644 index ebdd923..0000000 --- a/IMPLEMENTATION_GUIDE.md +++ /dev/null @@ -1,186 +0,0 @@ -# Observer Protocol — Site Upgrade v2.0 -## Implementation Guide for Maxi - -**Prepared by Boyd via Claude · March 2026** - ---- - -## What's in this package - -| File | Status | Priority | -|------|--------|----------| -| `shared-styles.css` | New | Deploy first — all pages depend on it | -| `index.html` | Full rewrite | P1 | -| `agents.html` | Full rewrite | P1 — was nearly empty | -| `api.html` | Full rewrite | P1 — replaces broken white Swagger aesthetics | -| `architecture.html` | Existing — no change needed | — | -| `spec.html` | Existing — no change needed | — | -| `sdk.html` | Existing — no change needed | — | - ---- - -## Step 1 — Deploy shared-styles.css - -All three new pages import `shared-styles.css` via a relative path. This file must exist at the root of the site before any pages are deployed, or fonts and variables will be missing. - -```bash -# Copy to site root (adjust path to your actual static file directory) -cp shared-styles.css /path/to/observerprotocol.org/public/shared-styles.css -``` - -The CSS imports IBM Plex Mono and IBM Plex Sans from Google Fonts via CDN. No local font files needed. - ---- - -## Step 2 — Replace index.html - -Drop `index.html` into the site root. Key changes from current version: - -- Hero: proper h1 scale, `npm install @observerprotocol/sdk` copy-to-clipboard block -- Status bar: live network stats strip (hardcoded for now — see Step 4 for live data) -- Genesis block: styled verification card with preimage math -- "What it answers" section: 4-cell grid -- Rails grid: Lightning (live), x402 (live), Solana/Ark/Fedimint (coming) -- 3-step integration with real code snippet -- Principles section with manifesto pull quote -- Footer: consistent across all pages - ---- - -## Step 3 — Replace agents.html - -The old agents page was essentially empty (12 agents listed as one line of text). The new page: - -- Registry stats bar (12 agents, 9 txns, 2 rails, genesis date) -- Filter bar: All / VERIFIED / PENDING / REGISTERED / Lightning / x402 -- Card grid with real data for Maxi (#0001), Vicky (#0002), AgentPay (#0003) -- Cards #0004–#0012 use placeholder key hashes — **update these with real data from the PostgreSQL registry** -- Click any named agent card to open a detail modal -- Badge levels section at bottom -- Register CTA linking to SDK - -### Data to update in agents.html - -Search for `TODO` comments — there are none, but update these hardcoded values with live data: - -| Element | Current Value | Source | -|---------|--------------|--------| -| `id="total-agents"` | 12 | `GET /api/v1/stats` | -| `id="verified-count"` | 9 | `GET /api/v1/stats` | -| Agent #0004–#0012 key hashes | placeholder sha256 stubs | PostgreSQL `agents` table | -| Agent #0004–#0012 statuses | PENDING / REGISTERED | PostgreSQL `agents` table | - -**Optional enhancement:** Replace the hardcoded agent grid with a fetch call to `GET /observer/feed` on page load so the registry stays current automatically. The card template is ready — just needs a JS render loop. - ---- - -## Step 4 — Replace api.html - -The existing site used the default Swagger UI (white background, generic styling). The new `api.html` is a custom dark API reference that: - -- Matches the site aesthetic fully -- Links to the live Swagger UI at `api.observerprotocol.org/docs` for those who want interactive testing -- Documents all 13 endpoints with expandable cards -- Shows real request/response schemas from the Observer Protocol spec -- Includes "Try it ↗" links that hit live endpoints directly - -No backend changes required. The Swagger UI can remain at `/docs` as a secondary reference. - ---- - -## Step 5 — Live data in the status bar (index.html) - -The hero status bar currently shows hardcoded values. To make it live, add this script before `
-did:web identities that have claimed at least one agent. Proxy for signups that completed onboarding.?t= token; it stays valid until rotated.
-