These are the real corpus exemplars and the real compiler — the same parse → derive → emit
pipeline the CLI runs, bundled into this page. Edit any file and every output re-derives:
the IR, the test cases, the generated Vitest suite. Byte-for-byte what
feat generate writes.
Corpus
Break it
SPEC-USR-001CRUD-only — one acid service, absent + literal matchers
feat 1.0# Corpus exemplar #2 — CRUD-only, no event sourcing: one acid service, no# convergence timeouts. Proves the language carries zero infrastructure vocabulary.spec SPEC-USR-001 "CreateUser"context Usersaggregate Usertype commandstatus agreedconstruct: handler at handlers/create-user.ts touches handlers/** imports UserRepository from repositories/user-repository Uses Prisma ORM for database access.enforce: validate input against CreateUserInput check email uniqueness via UserRepository.findByEmail rejects DUPLICATE_EMAIL when a user with this email already exists insert new user record return created usercontract: input CreateUserInput response UserResponse record UserRow error ErrorResponsescenario "successful user creation": given: No user with this email exists. when: CreateUser { email: "alice@example.com", name: "Alice" } predict success: response 201 UserResponse { id: any uuid, email: @when.email, name: @when.name } database has [ INSERT with UserRow { email: @when.email name: @when.name id: any uuid status: "active" deletedAt: absent } ]scenario "rejects duplicate email": given: execute CreateUser { email: "alice@example.com", name: "Alice" } when: CreateUser { email: "alice@example.com", name: "Bob" } predict rejection DUPLICATE_EMAIL: response 409 ErrorResponse { code: "DUPLICATE_EMAIL" } database has []
Closed reference spaces come from the files on the left — rename a service in
feat.config.json and the spec's predictions become parse errors.
Derived cases are rendered, not executed: point feat run at your
implementation for that.