Skip to content

Commit e38b080

Browse files
dmealingclaude
andcommitted
docs(changelog): eject hands over the helper runtime; write your own generator is the primary path
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M1mRRB1K2WdYy82kntMQdx
1 parent 135b8ea commit e38b080

1 file changed

Lines changed: 35 additions & 0 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)