AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Write the domain: one TypeScript entity class becomes your validation, SQL tables, GraphQL/REST API and forms — no codegen. Moving it to its own process is one line of config.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Write the domain. Everything else is a projection of it — including the wire.
One class declares the business object. From it come the TypeScript type, the validator,
the SQL table, the form contract and the API surface — and because the declaration is
JSON on the wire, the domain can move to its own process, or to another language, while
the code calling it does not change.
readOnly is not a note about intent: it removes the field from what a client may ever
send, so publishing cannot be a field write — it has to be an operation.查看完整 README ↗Fougere is focused on your business only. Build it. Decide later which infrastructure topology you want, And which technology you want in front of it (GraphQL, REST…).
With one entity class, everything is derived (validation, table, API…). No DTOs to write. It's the same class derived for your needs! You split your app into fronds, one per business area, and each one can run inside it or on its own.
[!IMPORTANT] Fougere is in alpha, so use it with caution: APIs and conventions may still change. There are also many known issues.
A picture (or an animation!) is worth a thousand words!
So first, add a field to an entity and everything derives from it (form, validation, APIs, SQL):
Secondly, move a frond to its own process. One line of config, and the code stays the same.
Everything your handler receives is validated against your schema, and it is served over JSON-RPC by default. You can enable REST or GraphQL as well.
[!TIP] If you need full control over routes, for example, you can set them in config.
For now, only pnpm is fully supported:
pnpm create fougere
With no arguments, it walks you through creating a new app in an interactive terminal UI.
[!NOTE] It runs
fougere newfrom the CLI.
Fougere is heavily inspired by DDD and hexagonal architecture, but doesn't follow them strictly. Think of Fougere as a core around your business logic. Primary adapters, like REST or GraphQL, can be attached to your business logic, but Fougere doesn't know about them. In the same way, the core handles storage without knowing what it is. Implementations are provided for these adapters, but you can write your own to support any kind of input or output.
The one primitive to know is the Frond, the fractal leaf of a fern (fougère in French). It is like a bounded context: you can't call another frond's services directly, only the public code its handlers expose. In return, calling that code is made simple, with several ways to reach a frond's code.
Emit<PostPublished> to announce a fact, and accept a Fact<PostPublished> to subscribe to it. Across processes, it goes over HTTP by default, or through a broker you plug in (Kafka, NATS…).fougere freeze saves each version of your schema as extended JSON Schema. Migrations are deduced from that chain of versions: no SQL to write, and the whole history of changes is kept.