From e8c537fd29bc0d8a6d0d252c41bd411692dab298 Mon Sep 17 00:00:00 2001 From: Seenu K Date: Wed, 12 Aug 2026 23:42:05 +0530 Subject: [PATCH] Scaffold eigen_flutter ^0.6.0 alongside the 0.4.x engine The engine's 0.4.x line takes `cursor` as an opaque string and returns `nextCursor` on every paged response. `eigen_flutter` 0.6.0 is the first shell pinning `eigen_api: ^0.4.0` that can read it; everything below pins ^0.3.0 or older. A scaffold left on ^0.4.1 therefore installed the current worker beside a shell that cannot read a single paged list from it, which resolves, compiles, and then shows an empty lobby and an empty history. This closes a window the engine's own 0.4.0 release opened: `updateInternalDependencies` republishes this package whenever the engine version moves, so a scaffolder pairing a 0.4.x worker with a 0.4.1 shell has already been published. Co-Authored-By: Claude Opus 5 --- .changeset/scaffold-flutter-0-6.md | 19 ++++++++++++++++++ packages/create-eigen-game/src/index.ts | 20 ++++++++++++++++++- .../create-eigen-game/test/scaffold.spec.ts | 2 +- 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 .changeset/scaffold-flutter-0-6.md diff --git a/.changeset/scaffold-flutter-0-6.md b/.changeset/scaffold-flutter-0-6.md new file mode 100644 index 0000000..fb53d1c --- /dev/null +++ b/.changeset/scaffold-flutter-0-6.md @@ -0,0 +1,19 @@ +--- +"create-eigen-game": minor +--- + +Install `eigen_flutter@^0.6.0` into the app half, matching the engine's 0.4.x line. + +This is a required pairing rather than an improvement. The 0.4.x engine takes +`cursor` as an opaque string and returns `nextCursor` on every paged response, +and `eigen_flutter` 0.6.0 is the first shell that pins `eigen_api: ^0.4.0` and +can read it. Everything below pins `eigen_api: ^0.3.0` or older, so a scaffold +left on `^0.4.1` installed the engine's current line beside a shell that could +not read a single paged list from it: it resolved, it compiled, and then the +lobby and the history screen were empty. 0.5.0 is skipped for the same reason, +being a web-design release that still speaks the 0.3.x wire. + +Closes the window opened by the engine's own 0.4.0 release: because +`updateInternalDependencies` republishes this package whenever the engine +version moves, the scaffolder had already gone out pairing a 0.4.x worker with a +0.4.1 shell. diff --git a/packages/create-eigen-game/src/index.ts b/packages/create-eigen-game/src/index.ts index fccf9e7..16394b9 100644 --- a/packages/create-eigen-game/src/index.ts +++ b/packages/create-eigen-game/src/index.ts @@ -213,8 +213,26 @@ const engineVersion = engineRange((JSON.parse(readFileSync(resolve(packageRoot, * still resolve it, but `^0.4.0` also still resolves 0.4.0, where the parameter * does not exist and the scaffold would not compile. The floor is what makes * the generated code and the installed shell agree. + * + * Raised to 0.6.0 with the engine's opaque pagination cursors, and this is the + * same *required* kind of bump the 0.4.0 note describes rather than an + * improvement. The 0.4.x engine line takes `cursor` as an opaque string and + * returns `nextCursor` on every paged response; `eigen_flutter` 0.6.0 is the + * first shell that pins `eigen_api: ^0.4.0` and can read it. Everything below + * that pins `eigen_api: ^0.3.0` or older, so a scaffold left on `^0.4.1` would + * install the engine's current line beside a shell that cannot read a single + * paged list from it: it resolves, it compiles, and then the lobby and history + * are empty. 0.5.0 is skipped for the same reason, being a web-design release + * that still speaks the 0.3.x wire. + * + * Note that this floor and the engine range are raised in one commit on + * purpose. The scaffolder writes both halves, and `updateInternalDependencies` + * republishes this package whenever the engine version moves, so between an + * engine line crossing and this line moving there is a published scaffolder + * that pairs a new worker with an old shell. That window is real and this is + * what closes it. */ -const flutterClientVersion = "^0.4.1"; +const flutterClientVersion = "^0.6.0"; const gameSlug = (value: string): string => { if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value)) { diff --git a/packages/create-eigen-game/test/scaffold.spec.ts b/packages/create-eigen-game/test/scaffold.spec.ts index 42a9857..8b6da68 100644 --- a/packages/create-eigen-game/test/scaffold.spec.ts +++ b/packages/create-eigen-game/test/scaffold.spec.ts @@ -195,7 +195,7 @@ describe("scaffoldGame", () => { // release on that line, which is the part a scaffold-time pub.dev lookup // was duplicating. Crossing to the next line is the move that needs the // `scaffold` CI job to confirm the templates still compile. - expect(run).toHaveBeenCalledWith("flutter", ["pub", "add", "eigen_flutter@^0.4.1", "firebase_core@^4.9.0", "firebase_messaging@^16.2.2"], expect.stringMatching(/\/app$/)); + expect(run).toHaveBeenCalledWith("flutter", ["pub", "add", "eigen_flutter@^0.6.0", "firebase_core@^4.9.0", "firebase_messaging@^16.2.2"], expect.stringMatching(/\/app$/)); // A separate `pub add` (rather than folded into the call above) so a // failure here is legible on its own, and because these are dev // dependencies (`dev:` prefix) while the engine/Firebase packages above