You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit b8fba15
Browse filesBrowse the repository at this point in the historyBrowse files
docs(plan): record what Tasks 8 and 8b actually cost
Python and C# needed no scaffolding at all; SQL needed a throwaway
database and a fourth snippet kind; the JVM needed a pom but not the
re-decision the plan reserved for it. Task 10 inherits `--bun-only`, which
partly supersedes its step 1.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NynrRND6ZUwGvq3ZUTCfxG
Copy file name to clipboardExpand all lines: docs/superpowers/plans/2026-08-29-website-self-updating-codegen.md
+37Lines changed: 37 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1107,6 +1107,26 @@ git commit -m "feat(showcase): committed TS excerpts, gated as real output"
1107
1107
1108
1108
### Task 8: Generate the CLI ports (TypeScript, Python, C#)
1109
1109
1110
+
> **DONE** (`feat(showcase): generate and gate the CLI ports`). What differed from the plan:
1111
+
> -**Python and C# needed NO project scaffolding.** Both are flag-only
1112
+
> (`gen <metadataDir> --out <dir>`), so neither got any. Step 1's "create the minimum
1113
+
> scaffolding each CLI requires" turned out to be zero.
1114
+
> -**SQL has no offline path.**`meta migrate` refuses without a schema snapshot, so the
1115
+
> documented greenfield flow runs against a THROWAWAY sqlite file. Its emitted directory
1116
+
> is `<timestamp>-init/`, which no rebuild reproduces, so only the SQL bodies are
1117
+
> committed, under a fixed `init/`.
1118
+
> -**A fourth snippet kind, `whole`.**`up.sql` is eight lines and every one carries
1119
+
> something the model declared, so there is no line to cut; the excerpt test's
1120
+
> "genuinely SHORTER" assertion cannot be satisfied honestly. `whole` publishes the file
1121
+
> entire (a stricter guarantee than any subsequence gate), bounded at 25 lines.
1122
+
> -**The model declares `column: created_at`.** Port defaults genuinely differ — TS and
1123
+
> migrate snake_case a field with no `@column`, the C# EF generator takes the name
1124
+
> verbatim — so without it the generated C# entity binds `[Column("createdAt")]` against
1125
+
> a database `meta migrate` created with `created_at`.
1126
+
> - Two port defects fell out of running this and were fixed in place: the C# CLI anchoring
1127
+
> its hash manifest on cwd, and the Maven plugin loading nothing from a `<sourceDir>`
1128
+
> that names no `<sources>`.
1129
+
1110
1130
Three of the five ports expose a real CLI. Java and Kotlin do not, and they are Task 8b.
1111
1131
1112
1132
**Files:**
@@ -1234,6 +1254,23 @@ git commit -m "feat(showcase): generate and gate the CLI ports"
1234
1254
1235
1255
### Task 8b: Generate the JVM ports (Java, Kotlin)
1236
1256
1257
+
> **DONE** (`feat(showcase): generate and gate the JVM ports`). The stop-and-re-decide bar
1258
+
> was NOT met: a ~60-line `examples/showcase/jvm/pom.xml` is enough, and it is the honest
1259
+
> adopter path rather than test code calling generator classes directly. Two consequences
1260
+
> the later tasks inherit:
1261
+
> -**The JVM port needs the artifacts resolvable** — from Maven Central at a released
1262
+
> version, or from `cd server/java && mvn install` while the reactor is on a -SNAPSHOT.
1263
+
> It is skipped by name, never assumed present.
1264
+
> -**`--bun-only` exists and Task 10 must use it.** Maven alone costs ~20s, more than
1265
+
> every other port together, and the gates lane is `step_if bun` — guarded on bun alone
1266
+
> and included in `--quick`, the documented pre-PR command. So `bun test scripts/site`
1267
+
> checks ts + sql and NAMES the three it left out; `--all-ports` (the release preflight)
1268
+
> refuses to leave any out. Task 10's step 1 says the gate "deliberately does NOT run
1269
+
> regen-showcase --check" — it now runs the bun-only half, for the same reason.
1270
+
> - The pom pins the plugin through a `<metaobjects.version>` PROPERTY and sits outside the
1271
+
> reactor, so `scripts/check-pom-versions.sh` gates it and `docs/RELEASING-java.md` names
1272
+
> it in both bump passes.
1273
+
1237
1274
**Java and Kotlin have no CLI that generates against a project directory.** The Maven plugin needs a full `pom.xml` carrying `<loader>`, `<generators>` and `<globals><output>` blocks (see `server/java/maven-plugin/src/test/resources/mojo/pom.xml`) *and*`com.metaobjects:metaobjects-maven-plugin` installed to the local repo at the current version — which means building the whole Java tree first.
1238
1275
1239
1276
The repo's own conformance artifacts do not go through the plugin at all: they are produced by **test code calling the generator classes directly** (`SpringM2mCodegenTest`, `GeneratedAuthorControllerHarness`). That is the cheaper and more honest path here too.
0 commit comments