Skip to content

Commit a7fd818

Browse files
committed
docs: stop the bleeding — README honesty pass + ROADMAP.md
Resets reader expectations to match reality. The repo's source IS what runs production at jecp.dev, but `cargo run` from a fresh clone needs 6 external services (Postgres, Stripe, Anthropic, AWS KMS, Sentry/Better Stack, Cloudflare DNS). The previous README said "production" + listed a `cp .env.example .env && cargo run` quickstart that does not actually boot. That's the misleading state that gets cited in HN comments — fixed now, before broader indexing picks it up. Changes: - Status badge: production → alpha. - Spec badge: v1.0-draft → v1.1.1 (current spec lock). - New section "⚠️ Alpha readiness notice (2026-05-16)" enumerating the 6 required external services and explicitly stating cargo-run is not supported from a fresh clone yet. - Quick start section replaced (was the misleading cp .env.example / cargo run / localhost:8080 procedure). - Architecture section renamed "Architecture (for readers, not runners)" — same content, honest framing. - Performance section: dropped the per-metric table (not reproducible by cloners); kept one production reference number with the explicit "not reproducible from a fresh clone" caveat + link to ROADMAP v0.2. - "Running your own Hub" rewritten to acknowledge today's reality (use the hosted Hub at jecp.dev; full self-host ships in v0.2). New file ROADMAP.md: - v0.1 (this release): spec-conforming reference, cargo-run NOT supported yet. - v0.2 (Q3): docker-compose dev profile, demo-mode feature flag, benchmark methodology doc. - v0.3 (Q4): examples/minimal-hub/ (8-endpoint MVH profile for indie devs), federation registry alpha. - After B-4 audit clean: x402 mainnet, threshold-signing keeper, Python + Go SDKs. No source code changes. Strategic decision on MVH vs full-Hub-with- docker-compose deferred to after B-4 audit per admiral; reflected in the ROADMAP v0.3 framing rather than forced today.
1 parent 04f5b18 commit a7fd818

2 files changed

Lines changed: 76 additions & 51 deletions

File tree

README.md

Lines changed: 34 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
> Reference Hub implementation of the **Joint Execution & Commerce Protocol** (JECP).
44
55
[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
6-
[![Status](https://img.shields.io/badge/status-production-green.svg)](https://jecp.dev)
6+
[![Status](https://img.shields.io/badge/status-alpha-orange.svg)](https://jecp.dev)
77
[![Built with](https://img.shields.io/badge/built%20with-Rust-orange.svg)](https://www.rust-lang.org/)
8-
[![Spec](https://img.shields.io/badge/spec-v1.0--draft-blue.svg)](https://github.com/jecpdev/jecp-spec)
8+
[![Spec](https://img.shields.io/badge/spec-v1.1.1-blue.svg)](https://github.com/jecpdev/jecp-spec)
99

10-
A Rust + Axum Hub implementation. Powers https://jecp.dev in production.
10+
A Rust + Axum Hub. Reference implementation of the JECP spec; the production Hub at https://jecp.dev runs on this exact source.
11+
12+
**Indie operators**: see the **alpha readiness notice** below before attempting `cargo run`.
1113

1214
---
1315

@@ -20,42 +22,26 @@ A Rust + Axum Hub implementation. Powers https://jecp.dev in production.
2022
- **Discovery**`/v1/capabilities` (live catalog, includes both built-in and third-party)
2123
- **Forwarding** — HMAC-SHA256 signed requests to Provider endpoints with replay window
2224

23-
## Quick start (developers)
24-
25-
### Prerequisites
26-
27-
- Rust 1.75+
28-
- PostgreSQL 15+ (Supabase or self-hosted)
29-
- Stripe account (test mode is fine for dev)
25+
## ⚠️ Alpha readiness notice (2026-05-16)
3026

31-
### Local development
27+
The production Hub at jecp.dev runs on this exact source, but `cargo run` from a fresh clone is **not yet supported**. The binary boots only with all of:
3228

33-
```bash
34-
git clone https://github.com/jecpdev/jecp-server.git
35-
cd jecp-server
36-
cp .env.example .env
37-
# Edit .env with your DB URL and Stripe test keys
38-
cargo run
39-
```
29+
- a Supabase-schema Postgres (51 migrations applied)
30+
- Stripe Connect platform account + test mode
31+
- Anthropic API key
32+
- AWS KMS asymmetric key (ECDSA secp256k1) for the keeper
33+
- Sentry + Better Stack credentials
34+
- Cloudflare DNS zone for Provider DNS verification
4035

41-
Server starts on `localhost:8080`.
36+
We have **not yet** packaged this into a one-shot `docker-compose`; that's the v0.2 priority. See [ROADMAP.md](./ROADMAP.md).
4237

43-
### Health check
38+
**Until then, this repo is best used as a specification-conforming reference**:
4439

45-
```bash
46-
curl http://localhost:8080/health
47-
curl http://localhost:8080/v1/capabilities | jq
48-
```
40+
- Read the Rust to see how the spec is implemented (`src/routes/`, `src/auth/`, `src/protocol/`).
41+
- Point a JECP SDK / CLI at the live Hub at `https://jecp.dev` instead of running your own.
42+
- Use [@jecpdev/sdk](https://www.npmjs.com/package/@jecpdev/sdk) or [@jecpdev/cli](https://www.npmjs.com/package/@jecpdev/cli) for the agent / Provider integration path.
4943

50-
### Production deployment
51-
52-
```bash
53-
flyctl deploy
54-
```
55-
56-
The production Hub at jecp.dev runs on Fly.io (Tokyo region, NRT).
57-
58-
## Architecture
44+
## Architecture (for readers, not runners)
5945

6046
```
6147
src/
@@ -71,42 +57,39 @@ src/
7157
├── billing/ # invoke_charge() (atomic deduct + 85/10/5 split)
7258
├── middleware/ # CORS, rate limit (60 RPM/agent), tracing
7359
├── protocol/ # Wire format, error catalog with next_action
74-
└── services/ # Postgres pool, Stripe API, signing
60+
└── services/ # Postgres pool, Stripe API, signing, KMS-backed keeper
7561
```
7662

7763
## Specification
7864

79-
This server implements [JECP Spec v1.0-draft](https://github.com/jecpdev/jecp-spec).
65+
This server implements [JECP Spec v1.1.1](https://github.com/jecpdev/jecp-spec).
8066
RFC 2119 compliant, JSON Schema 2020-12.
8167

82-
## Performance (production, May 2026)
68+
## Performance
8369

84-
| Metric | Target | Current |
85-
|--------|-------:|--------:|
86-
| `/v1/invoke` p50 | < 200ms | ~127ms |
87-
| `/v1/invoke` p95 | < 500ms | ~340ms |
88-
| Wallet debit consistency | 100% | 100% (atomic SQL function) |
89-
| Idempotency window | 24h | 24h on `(agent_id, request_id)` |
90-
| Concurrent RPS | 100+ | tested 200 |
70+
Production numbers (p50 ~127ms on `/v1/invoke` cached path) hold on the Tufe-operated Hub at jecp.dev under live load.
71+
72+
**These are not reproducible from a fresh clone** — they depend on the Postgres schema, Stripe Connect accounts, and KMS keeper key that the Hub is provisioned against. A reproducible benchmark methodology + a self-hosted-friendly profile ship in v0.2 — see [ROADMAP.md](./ROADMAP.md).
9173

9274
## Client SDKs
9375

9476
- **TypeScript:** [@jecpdev/sdk](https://www.npmjs.com/package/@jecpdev/sdk)`npm install @jecpdev/sdk`
9577
- **Python:** planned (v0.2)
9678
- **Go:** planned (v0.3)
9779

98-
The protocol is plain HTTP+JSON, so any language can implement directly. See [spec §3](https://github.com/jecpdev/jecp-spec/blob/main/spec/03-api.md).
80+
The protocol is plain HTTP+JSON, so any language can implement directly. See [the JECP spec](https://github.com/jecpdev/jecp-spec).
81+
82+
## Running your own Hub (today's reality)
9983

100-
## Running your own Hub
84+
For now, the realistic path is to **use the hosted Hub at jecp.dev** (it's the only fully-provisioned deployment of this reference).
10185

102-
You don't need to use jecp.dev. Run your own Hub:
86+
If you already have all 6 dependencies in the Alpha readiness notice above and want to self-host today, your starting points are:
10387

104-
1. Fork this repo
105-
2. Configure your DB + Stripe accounts
106-
3. Deploy (Fly.io / Railway / your-cloud-of-choice)
107-
4. Optionally federate with jecp.dev (federation registry is on Q4 roadmap)
88+
1. `fly.toml` — current production Fly.io config (retarget the app name + secrets)
89+
2. `Dockerfile` — current production container build
90+
3. `spec/openapi.yaml` — OpenAPI 3.1 schema if you want to start fresh in another language
10891

109-
The protocol is multi-vendor and federation-ready.
92+
The protocol is multi-vendor and federation-ready by design; the federation registry itself ships in Q4 ([ROADMAP.md](./ROADMAP.md)).
11093

11194
## License
11295

ROADMAP.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# ROADMAP
2+
3+
Public roadmap for the `jecp-server` reference Hub. Tracks what's runnable from a fresh clone — not the production Hub's roadmap at jecp.dev (which is operated separately).
4+
5+
---
6+
7+
## v0.1 (2026-05-16, current) — specification-conforming reference
8+
9+
- ✅ Full Rust + Axum source matching the production Hub at jecp.dev
10+
- ✅ Spec conformance: v1.1.1, wire-frozen
11+
- ✅ OpenAPI 3.1 schema + Spectral lint config
12+
- ✅ Apache 2.0 + standard OSS scaffolding (CoC, Contributing, Security, PR / Issue templates, CI)
13+
- ⚠️ `cargo run` from a fresh clone is **not yet supported** — see [README "Alpha readiness notice"](./README.md#-alpha-readiness-notice-2026-05-16)
14+
15+
## v0.2 (2026 Q3) — self-hostable alpha
16+
17+
- [ ] `docker-compose.dev.yaml` profile: Postgres + Mailpit + LocalStack KMS + Stripe CLI test mode
18+
- [ ] **Demo mode** feature flag — mocks Anthropic + Stripe so end-to-end test runs without external keys
19+
- [ ] Benchmark methodology doc — so cloners can reproduce p50 / p95 claims on their own hardware
20+
- [ ] Self-hosted Fly.io quickstart guide (managed-Postgres variant)
21+
22+
## v0.3 (2026 Q4)
23+
24+
- [ ] `examples/minimal-hub/` — 8-endpoint Minimum Viable Hub profile (indie-dev path, no Trust Gate, no x402)
25+
- [ ] Federation registry alpha (Hub-to-Hub trust discovery)
26+
27+
## After B-4 audit clean (TBD)
28+
29+
- [ ] x402 mainnet settlement path (gated on the 3-scope `B4-audit-rfp-MASTER.md` engagement clean)
30+
- [ ] Threshold-signing keeper (FROST or Lit, replacing single-key KMS)
31+
- [ ] Python SDK
32+
- [ ] Go SDK
33+
34+
## Deliberately out of scope for v1.x
35+
36+
- Multi-chain support (Base only for v1.x; other chains in v2.x)
37+
- Composable revenue split beyond fixed 85 / 10 / 5
38+
- Single-block atomicity guarantee — v1.x is **invariant-level atomic** (split-or-revert), not **block-level**. See `RELEASE_NOTES_v1.0.0.md`.
39+
40+
---
41+
42+
This roadmap is informative, not binding. The protocol spec (wire-format) is binding; see [jecp-spec](https://github.com/jecpdev/jecp-spec).

0 commit comments

Comments
 (0)