lema · docs

Public record

Every decision in lema’s public corpus has a stable, no-signup URL — a decision permalink and a repo record page you can open, read, and share. The same record is available as three no-auth read endpoints. Counts and cited claims only — never a score, never a readiness percentage.

Repo records

Swap the host

Take any repo lema indexes and swap github.com for lema.sh/gh. The repo record page shows that project’s live counts — decisions, ruled-out alternatives, and cited claims — and its most recent decisions, each linking straight to its permalink.

The list beside this is what lema indexes today. Not every indexed repo is a fuse rulings corpus: rulings answer check_approach; ask-why serves cited rationale without fuse ruled-out; discussion-onlyrepos are indexed for the record page and read API but are not interactive fuse targets yet. The set grows on request rather than automatically — the authoritative current list is always GET /public/repos.

Ask for a repo that isn’t indexed and the page says exactly that — it lists what isavailable and promises nothing it can’t run. A repo that’s private, unknown, or simply not indexed yet all read the same: not indexed, never a leak of anything private.

the habit
github.com/kubernetes/enhancements
lema.sh/gh/kubernetes/enhancements

Indexed today

Read API

The public read API

The same record is three no-auth GETs under https://api.lema.sh. No key, no account — the corpus is gated to public data at the source, so a private or unknown id is an indistinguishable 404 that returns nothing.

  • GET /public/repos

    The live index of indexed repos.

  • GET /public/repos/{owner}/{repo}

    A repo’s record: live counts and its recent decisions, each with a ready-made permalink.

  • GET /public/decisions/{id}

    One decision in full — chosen, ruled out, the recorded why, and dated citations.

Every payload that names a decision or a repo carries its permalinkalready built — you never assemble a URL by hand. Follow a repo record’s recent_decisions[] into /public/decisions/{id} for the full decision.

The reads carry a generous per-IP ceiling — roughly 120 requests a minute. It’s abuse protection that absorbs crawlers and unfurl herds, not a quota to ration — and it’s a separate bucket from the ask and fuse limits, so browsing the record never eats into asking it.

$ curl https://api.lema.sh/public/repos/kubernetes/enhancements
response
{
  "repo": "kubernetes/enhancements",
  "slug": "kubernetes-enhancements",
  "permalink": "https://lema.sh/gh/kubernetes/enhancements",
  "decisions": …, "ruled_out": …, "claims": …,
  "recent_decisions": [
    {
      "id": "ed7a84df-8388-4376-8c20-2154c3030f13",
      "title": "Anago to Krel Migration",
      "status": "accepted",
      "permalink": "https://lema.sh/d/ed7a84df-8388-4376-8c20-2154c3030f13"
    }
  ]
}

Trimmed. decisions / ruled_out / claims are live counts; every entry in recent_decisions carries a ready-made permalink.

Citations

Where the permalinks show up

The permalinks aren’t only for humans. On the public corpus, every citation lema returns from ask, check_approach, and fuse carries a decision_url — so an agent or a tool quoting lema can link the exact ruling it’s citing, and a reviewer can open it with no signup. See the tools reference for the field and where it appears.