Reported issues for orangerail
Pod holds 16 of 32 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to orangerail.
Most discussed
ONT-112: Bring the npm page to the new front door, and cut 0.1.5
Problem
#180 moved this project's front door from the approval gate to the generated tool surface, and published the register of claims that failed when they were measured. None of it has reached npm.
npm renders a package page from the published tarball, so npmjs.com/package/orangerail still opens
with the framing ten measured runs say is the weaker half:
$ npm view orangerail version
0.1.5-not-yet # today: 0.1.4, whose tarball still says "Decide once what your agent ma
[Read the thread](https://github.com/KimHyeongRae0/orangerail/issues/181) · 2026-08-04 · closed · 0 comments
### ONT-110: List orangerail on the official MCP registry
## Problem
`0.1.4` put `mcpName` on npm, which was the one thing that had to ship before a registry entry was
possible:
```console
$ npm view orangerail mcpName
io.github.KimHyeongRae0/orangerail
npm versions are immutable, so that field could not be added to 0.1.3 after the fact and the
listing was blocked on the release existing. It no longer is, and nothing else is stopping it.
The registry at registry.modelcontextprotocol.io is where an agent host resolves a server by name
rather
Read the thread · 2026-08-04 · closed · 0 comments
ONT-108: The README is 649 lines and the npm page is a different document with no images
Problem
README.md is 649 lines and ## Quickstart alone is 226 of them.
$ awk '/^## /{if(h)print NR-1-s" lines\t"h; h=$0; s=NR} END{if(h)print NR-s" lines\t"h}' README.md
226 lines ## Quickstart
62 lines ## The run this is built for
47 lines ## Wire it into your agent host
43 lines ## Declaring a rule the generator cannot derive
26 lines ## v0 commands
The Quickstart's problem is not the eleven commands. It is the ~150 lines of prose between them explaining why each one i
Read the thread · 2026-08-04 · closed · 0 comments
ONT-101: The MCP server tells every client it is 0.1.0
Problem
The MCP server reports a version it has not been since three releases ago.
$ node -p "require('orangerail/package.json').version"
0.1.3
$ printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}' \
| ./node_modules/.bin/orangerail mcp
{"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"orangerail","version":"0.1.0"}},"js
[Read the thread](https://github.com/KimHyeongRae0/orangerail/issues/163) · 2026-08-04 · closed · 0 comments
### ONT-102: The README nav line shows raw HTML entities off GitHub
## Problem
The README's nav line separates its five links with ` · `. GitHub resolves the entity;
a renderer that escapes ampersands first does not — and one is now showing it to strangers.
```console
$ curl -sL https://glama.ai/mcp/servers/KimHyeongRae0/orangerail | grep -oE '.{40}nbsp.{30}'
<strong>Quickstart</strong> &nbsp;·&nbsp; <a …>What it does not govern</a>
$ curl -sL https://glama.ai/mcp/servers/KimHyeongRae0/orangerail | grep -c nbsp
10
The reader sees this a
Read the thread · 2026-08-04 · closed · 0 comments
ONT-093: The Quickstart cannot reach the write it promises
Problem
#140 put the Quickstart on the first screen. #142 made every examples/ README run as written.
Nothing does that for the README's own Quickstart, and following it verbatim from a cold start does
not work.
The promised payoff never happens. The Quickstart closes (L191-196) with a human approving a
staged delete and the agent's next check_approval executing it. Reproduced against 0.1.2
through a real MCP client:
--- call deleteCustomer {"id":1} ---
Action staged for huma
[Read the thread](https://github.com/KimHyeongRae0/orangerail/issues/152) · 2026-08-03 · closed · 0 comments
### ONT-088: The README's first paragraph promises an OpenAPI path that does not exist in v0
## Problem
`README.md:12`, the third sentence a visitor reads:
> `orangerail init` turns a `prisma/schema.prisma` **or an OpenAPI spec** into an MCP server: a
> `get` and a `list` per object, one action per write with a zod input schema, and nothing else.
Both halves are false for the OpenAPI input. Against the shipped CLI, on a spec with
`components.schemas`, a collection GET, an item GET, a POST and a DELETE:
```console
$ orangerail init --yes --preset approval-for-writes --no-studio
opena
[Read the thread](https://github.com/KimHyeongRae0/orangerail/issues/143) · 2026-08-03 · closed · 0 comments
### ONT-081: Move the rules-file argument out of the README so the install comes first
## Problem
`README.md` is 656 lines and the first command a reader can run is on line 281.
```console
$ grep -n 'npx orangerail init --yes' README.md
281:$ npx orangerail init --yes --preset approval-for-writes --no-studio
Everything above it is argument. 158 of those lines — ### What a rules file already gets you,
### What the tie does not survive, ### The one that survived on its own terms — are one
sustained answer to a single question: *why not just write the rules in a `CLAUDE.
Read the thread · 2026-08-02 · closed · 0 comments
Most recent
ONT-079: The Quickstart's prerequisites omit the adapter Prisma 7 requires
Problem
A first-time reader on Prisma 7 who follows the README Quickstart exactly as written meets exit 1 at the first command it asks them to run. Reproduced cold on 2f5d1e3, from pnpm packed 0.1.1 tarballs, in a throwaway project holding a Prisma 7 SQLite schema and nothing else:
$ npx orangerail init --yes --preset approval-for-writes --no-studio
orangerail init: this repo is on Prisma 7+ (@prisma/client 7.9.1 (installed)) and no driver adapter for `sqlite` is installe
[Read the thread](https://github.com/KimHyeongRae0/orangerail/issues/125) · 2026-08-02 · closed · 0 comments
### ONT-074: A row that drifts from its declared schema opens the gate
## Version
`0.1.1` (`062e527`)
## What happened
`packages/core/src/policy/where.ts:23-25` documents the `where` gate as fail-closed:
> a `null`/`undefined` object (target not found) fails closed — we cannot confirm the condition
> holds, so the action is refused (§4.5 secure-by-default).
It fails **closed** on *no row* and **open** on a *wrong row*. Measured on `062e527` against the
repo's own flagship fixture policy (`packages/core/test/fixtures.ts:64`,
`where: { field: 'status', op: 'neq'
[Read the thread](https://github.com/KimHyeongRae0/orangerail/issues/115) · 2026-08-02 · closed · 0 comments
### ONT-071: Two surfaces still render a stored value unguarded, and one tells the agent the wrong thing
## Version
`0.1.1`, on the merge of #104 (ONT-068) and #105 (ONT-069)
## What happened
Two surfaces still render a stored value unguarded. Each was found by a sibling ticket that
stopped at a file it did not own, and named the gap rather than reaching across.
**1. `audit_unrecorded` reaches the agent as `"Unexpected execute result."`**
#105 added an `ExecuteResult` variant at `packages/core/src/lifecycle/engine.ts:105-113` for the
honest outcome *"the side effect landed and nothing about it
[Read the thread](https://github.com/KimHyeongRae0/orangerail/issues/107) · 2026-08-01 · closed · 0 comments
### ONT-067: The Prisma 7 default generator produces a green `init` and an ontology where every tool fails
## Version
`0.1.1` (`752ff7b`)
## What happened
`npx prisma init` on prisma 7.9.1 writes this generator block:
```prisma
generator client {
provider = "prisma-client"
output = "../generated/prisma"
}
prisma generate emits the client into ./generated/prisma and puts nothing into
node_modules/@prisma/client. orangerail init then prints its full success banner and
exits 0:
✓ scanned your sources — 2 object(s), 6 action(s)
✓ --gate delete: 2 of 6 write action(s) gated
✓ r
[Read the thread](https://github.com/KimHyeongRae0/orangerail/issues/99) · 2026-08-01 · closed · 0 comments
### ONT-061: mcp: publish the action input contract, and name what it refuses
## Version
`main` @ `8af6078` (the unreleased successor to `0.1.0`), on a project generated
by `orangerail init` against a local Postgres.
## What happened
Two things, and they compound into one failure.
**1. The published `inputSchema` erases the type of every OPTIONAL field.**
Verbatim from `tools/list` on a generated project:
```jsonc
createorder_item → {"id":{"type":"string"},"order_id":{"type":"string"},"product_id":{"type":"string"},"qty":{"type":"number"},"unit_cents":{"type":"number
[Read the thread](https://github.com/KimHyeongRae0/orangerail/issues/89) · 2026-07-30 · closed · 0 comments
### ONT-060: Report the MCP servers mounted next to this project
## Problem
Nothing in this product reads any host agent configuration.
```console
$ grep -rn "\.mcp\.json\|claude_desktop_config\|cursor/mcp" packages/*/src/
$ # (nothing)
orangerail init scans data sources — schema.prisma, an OpenAPI spec — and nothing
else. So a user can run
$ orangerail init --models customer,order,order_item,product
get exactly the narrow governed surface they asked for, and have their agent's exposure change by exactly zero, because a wide SQ
Read the thread · 2026-07-30 · closed · 0 comments
ONT-056: orangerail init picks a gating posture instead of gating everything
Problem
orangerail init emits policy: { approval: 'required' } on every write action it
generates. That reads as the safe default. It is the wrong one, and the reason is not
theoretical — it is what an operator does next.
On a six-action schema, nothing an agent calls ever completes. Every create, every
update, every delete returns approval_pending and waits for a human. So the first
thing anyone does after init is open the generated files and delete the gate from most of
them
Read the thread · 2026-07-30 · closed · 0 comments
ONT-057: core: record what a governed write changed from
Problem
An orangerail audit record for a successful write carries the input and the resulting row, and never the prior one. Verbatim from a live run against a real Postgres:
{"phase":"succeeded","action":"updateproduct","input":{"id":"p3","stock":25},
"result":{"id":"p3","sku":"SKU-CABLE","title":"USB-C cable","price_cents":1500,"stock":25}}
p3.stock was 0 before that call, and nothing on the chain says so.
Two consequences, and the second is worse than the f
Read the thread · 2026-07-30 · closed · 0 comments
The remaining reports are on the project's issue tracker.