@@ -26,6 +26,37 @@ bad reply.
2626
2727### Added
2828
29+ - **Write your own generator is the primary codegen path (ADR-0034 Amendment 4).** The core
30+ (model, loader, verify, migrate, render, extract) is the product; the shipped generators are
31+ examples. `meta generator new <name> [--scope entity|package|model]` scaffolds a working
32+ generator into `codegen/generators/` and wires it into `metaobjects.config.ts`. New
33+ model-walking helpers: TS `objectRefTarget`, `enumValues`, `servedPath` and the case helpers;
34+ Python `metaobjects.codegen.model_walk`; JVM `ModelWalk` and `FileEmittingGenerator`
35+ (codegen-base). A new guide, `docs/recipes/write-your-own-generator.md`, shows the 20-line
36+ shape in every port, with JSON Schema and OpenAPI 3.1 example generators that a test runs in
37+ each port. The skills, the agent context `meta init` installs and the docs now teach writing
38+ the generator you need first and ejecting a reference second, and no longer claim C# and
39+ Python cannot register a generator of your own.
40+ - **Eject hands over the helper runtime, in every port.** Ejecting a generator whose output
41+ calls helper runtime code now copies that code into your repository, and the ejected
42+ generator's output imports your copy, so you can fix a helper bug without waiting for a
43+ release. Projects that have not ejected are unchanged.
44+ - TypeScript: `meta eject routes`, `routes-hono` or `entity` copies the HTTP adapter source
45+ (mount helpers, filter parser, error envelopes, pagination, allowlist types) into
46+ `codegen/runtime/`; the routes references now carry the full route composition. Ejected
47+ output no longer needs `@metaobjectsdev/runtime-ts`; `runtimeImport` restores the package
48+ import.
49+ - C#: `dotnet meta eject routes` copies `FilterParser`, `FilterParseResult`, `FilterPredicate`,
50+ `EfCoreFilterDispatch`, `ValueObjectValidator`, `ConstraintErrors` and
51+ `Iso8601TimestampConverter` into `codegen/runtime/` (namespace `Codegen.Runtime`).
52+ - Java: `mvn metaobjects:eject` of `routes`, `dto` or `repository` copies the helper classes
53+ their output imports into `src/main/java/<groupId>.runtime/` (`-DruntimePackage`,
54+ `-DruntimeDir`). Kotlin output imports no helper runtime.
55+ - Python: `metaobjects eject routes` copies `filter_parser` and `constraint_errors` into
56+ `codegen/runtime/`; the generated package imports its own `_runtime/` copy.
57+ - In every port, `verify --codegen` treats the copies as owned code, `gen --list` marks each
58+ one identical or DIFFERS against the installed version, and the docs give a recipe for
59+ pulling an upstream fix into your copy.
2960- **`FilesystemProvider` for TypeScript prompt rendering**, on the Node-only
3061 `@metaobjectsdev/render/providers` subpath. `lobby/welcome` resolves to
3162 `<root>/lobby/welcome.mustache`, as in C#, Java and Python. The package's root entry stays
@@ -46,6 +77,10 @@ bad reply.
4677
4778### Fixed
4879
80+ - **JVM template data reads inherited `@required` and `@maxLength`**, so a field that inherits
81+ them through `extends` renders like one that declares them. Template output changes for those
82+ fields. Python no longer writes `__init__.py` into non-Python output folders, and C# names a
83+ generator that throws instead of reporting "metadata did not load cleanly".
4984- **`meta migrate` no longer steers a column rename toward data loss.** A rename the diff
5085 cannot pair (`title` → `summary`) arrives as a blocked drop plus an add, and the hint said
5186 `--allow drop-column`, which deletes the column's data. Every hint on that shape now
0 commit comments