Skip to content

Commit 10fe533

Browse files
dmealingclaude
andcommitted
docs(changelog): record the fixes from the cold external review under [Unreleased]
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M1mRRB1K2WdYy82kntMQdx
1 parent 8321a23 commit 10fe533

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,68 @@ here.**
1010

1111
## [Unreleased]
1212

13+
Found by a cold external review of 1.0.8: a reviewer ran the getting-started page, the drift
14+
demo and the fit assessment from public sources only, then built a small app of their own.
15+
16+
**Upgrading: run `meta gen`.** Generated TypeScript changes: value-object interfaces,
17+
date/time validators and form input types (see Fixed).
18+
19+
### Added
20+
21+
- **`FilesystemProvider` for TypeScript prompt rendering**, on the Node-only
22+
`@metaobjectsdev/render/providers` subpath. `lobby/welcome` resolves to
23+
`<root>/lobby/welcome.mustache`, as in C#, Java and Python. The package's root entry stays
24+
browser-safe. The docs already imported it from that path; it did not exist.
25+
- **`meta eject` covers the prompt generators**: `prompt-render`, `output-parser`,
26+
`extractor`, `output-prompt` and `render-helper`. Each reference copy is held byte-identical
27+
to the built-in by a test.
28+
- **`meta verify` advises on foreign keys with no covering index**, naming each one and the
29+
`index.lookup` to declare. Advisory only: it never fails the build, and no index is generated
30+
automatically.
31+
- **The fit assessment (`assess.md`) recommends an adoption scope** instead of fit / not fit:
32+
not worth it, contract spine (declare only the shapes crossing between apps and services,
33+
generate the types, DTOs and validators each consumer compiles against, keep the ORM),
34+
partial, or full, and it names the seams where adoption would pay off. A quick pass answers
35+
in the conversation and writes nothing; the full assessment writes outside the target
36+
repository. Its capability claims are re-checked against 1.0.8 and cite published sources,
37+
so no clone of this repository is needed.
38+
39+
### Fixed
40+
41+
- **`meta migrate` no longer steers a column rename toward data loss.** A rename the diff
42+
cannot pair (`title` → `summary`) arrives as a blocked drop plus an add, and the hint said
43+
`--allow drop-column`, which deletes the column's data. Every hint on that shape now
44+
recommends `--rename-column <table>.<old>=<new>` first, with the real names, and shows
45+
`--allow drop-column` only as the option that deletes the data.
46+
- **Generated TypeScript compiles under `exactOptionalPropertyTypes`**, which recent
47+
`tsc --init` turns on. Value-object interfaces declared `x?: T` where Zod infers
48+
`x?: T | undefined`, so a response parser or a jsonb query over an optional field failed
49+
with TS2375. The codegen-compile gate now compiles with the option both off and on.
50+
- **Generated Zod for `field.date`, `field.time` and string-mode `field.timestamp` rejects
51+
free text.** `"next tuesday"` was a valid date. Every format the runtime writes still passes.
52+
- **A list request with a bare field parameter answers 400.** `GET /issues?priority=low`
53+
ignored `priority` and returned every row. The runtime-ts list routes now answer
54+
`400 {"error": "filter.bare_field", "field": "priority", "expected": "filter[priority][eq]=low"}`
55+
when the bare name is a filterable field; other unknown parameters are still ignored.
56+
TypeScript helpers only.
57+
- **Form descriptors give `field.timestamp` a `datetime-local` input** (and `field.time` a
58+
`time` input); a timestamp got a date picker.
59+
- **`<Entity>Filter` types an enum's filter value as the member union**, so a misspelt member
60+
fails to compile.
61+
- **`meta verify` says which gates a partial run did not run**, with the flag that selects
62+
each, so `meta verify --codegen --db` is not mistaken for a full run.
63+
- **A template drift names its file and line**: `ERR_VAR_NOT_ON_PAYLOAD: question
64+
(prompts/…/brik-user.mustache:3)`. The cross-port diagnostic itself is unchanged.
65+
- **`meta init` and `meta --help` no longer list commands that do not exist.**
66+
- **`meta gen --list` marks the generators with no reference copy as `package-only`**, and
67+
`meta eject` names them as package-only instead of "unknown". ADR-0034 Amendment 3 carries a
68+
dated correction: those eight generators are not ejectable.
69+
70+
### Changed
71+
72+
- **Docs: enums sort by their stored value, not by declared order** (a stated known limit in
73+
`docs/features/api-contract.md`).
74+
1375
## [1.0.8] — 2026-09-25
1476

1577
_npm `1.0.8` (all 14 `@metaobjectsdev/*` packages in lockstep), PyPI `1.0.8` and NuGet `1.0.8`.

0 commit comments

Comments
 (0)