v0.4.0 — blueprint-only declarations + ecommerce flagship (BREAKING)
The blueprint becomes GoFastr's single declaration format: the legacy
entities/*.json path is removed (BREAKING), and a declaration-driven
flagship (examples/ecommerce) proves one gofastr.yml → SQL + REST + OpenAPI
- MCP + UI end to end.
Added
- Declaration-driven flagship example —
examples/ecommerce. A complete
storefront (five related entities, screens, nav, custom endpoints, seed data,
and a theme) declared once ingofastr.ymland emitted as runnable Go by
gofastr generate --from=gofastr.yml(the generatedgen/is gitignored).
flagship_test.goregenerates, builds, and runs it to prove every surface —
SQL schema, REST CRUD, OpenAPI, the 25-tool MCP surface, and the
server-rendered UI — is live with zero hand-written application code. See
examples/ecommerce/BUILD_JOURNAL.md.
Fixed
gofastr generatenow gofmt's its generated Go. Blueprint output is run
throughgo/formatbefore being written, so the emitted package is clean and
stable across regenerations (no more spurious diffs on re-generate).gofastr generate --fromre-run no longer refuses to cleanmain.go. The
output-dir cleaner now ownsmain.go(the blueprint emitsgen/main.go), so
regenerating over an existinggen/succeeds instead of erroring with
"refusing to clean — contains unknown entry".
Removed
-
BREAKING: the legacy
entities/*.jsondeclaration format is gone. The
gofastr.ymlblueprint is now the single declaration format — it decodes into
the sameEntityDeclarationshape and additionally emitsmain.go, screens,
and stubs, so the JSON-file path was a strict subset. Removed:- Framework API:
App.EntityFromFile,App.EntitiesFromDir,
App.GroupEntitiesFromDir,framework.LoadEntityDeclaration,
framework.LoadEntityDeclarations. (TheEntityDeclaration/
FieldDeclarationtypes and.Config()remain — they are the in-memory
shape the blueprint loader decodes entities into.) - CLI:
gofastr generate entity <name>andgofastr new entity <name>(both
now print a removal notice and exit non-zero); the--entities=<dir>flag
ongofastr generate,gofastr migrate generate, andgofastr migrate diff. gofastr generateno longer defaults to "scanentities/and generate." It
requires--from=<blueprint.yml>(or agofastr.codegen.ymlextension
config). Auto-discovery ofgofastr.ymlis intentionally not done — that
filename is also thegofastr initisolation config.
Migration: declare entities in a
gofastr.ymlblueprint and run
gofastr generate --from=gofastr.yml, or declare them in Go via
app.Entity(name, framework.EntityConfig{…})(unchanged).gofastr migrate generate <name> --from=<blueprint.yml>andgofastr migrate diff --from=<blueprint.yml>replace the old--entities=<dir>form. The
gofastr.codegen.ymlextension protocol andcodegenpackage are unchanged.Follow-up (kiln is experimental):
kiln freezestill writes
entities/*.jsonas its own snapshot artifact; emitting agofastr.yml
blueprint directly is tracked for a later pass. - Framework API: