Repository navigation
Move to Rowan: start the database from the Rowan image, and install Grail and the MCP server through it - #166
Merged
Merged
Conversation
…rail and the MCP server through it Grail (#1721, #1722) and mcp_server (0.9.0, #57) became Rowan projects on 2026-10-19: Tonel packages with a Rowan project, loaded by a Rowan load instead of filed in. The MCP server's Python toolset loads only through Rowan. Rowan cannot be added to an image afterwards, so: - createDatabase copies the engine's bin/extent0.rowan3.dbf (INITIAL_EXTENT) and records it in conf/image; build-test-extent.sh uses the same image. - assertDatabaseHasRowan refuses a database without that record -- one GemDB 1.8 or earlier made from extent0.dbf -- in the same two places as assertDatabaseMatchesEngine, saying to delete db/ and start again. The engine version is the same, so the version guard cannot tell them apart. Not for an external database, whose image is its administrator's. - install-grail.sh probes for Rowan first (which catches an external database too), then runs Grail's scripts/install_rowan.gs with Grail's GEM_TEMPOBJ_CACHE_SIZE in place of src/smalltalk/install.gs. - bundle-grail.sh and bundle-mcp.sh ship rowan/, require the load specs, and check every package (and doit) the Rowan components name in place of scanning `input` lines, of which none remain. check-vsix.sh asserts the Rowan files ship. - GemDB still runs the MCP payload's own install.sh --grail --no-auth. Pins: Grail a78e8c0 -> c8cbc92 (31 commits, 8 PRs; also #1723, which fixes #1667, and #1725), mcp_server d836520 -> 7ab1067 (0.9.0, 20 commits, 9 PRs). Engine (4.0.0.a5) and GemDB Stats (1.1.1) were already current. Verified on arm64.Darwin against 4.0.0.a5: bundle:grail (12 Rowan packages present), bundle:mcp (6), bundle:stats, test:extent through Rowan; npm test 1066 passed (5 new, for the image record and the guard); test:integration 12 files, 148 passed plus the existing expected-fail and todo, mcp.test.ts installing the MCP server and its Python toolset through Rowan; package.sh passed check-vsix.sh. grail.test.ts, which creates a database from the Rowan image and installs Grail into it as `gemdb`, runs in 18 s. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 20, 2026
Closed
This was referenced Oct 20, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Grail (#1721, #1722) and mcp_server (0.9.0, #57) became Rowan projects on 2026-10-19: Tonel packages with a Rowan project, loaded by a Rowan load instead of filed in. The MCP server's Python toolset, which GemDB serves, loads only through Rowan. Rowan can't be added to an image afterwards, so GemDB now creates its database from the engine's Rowan image. This supersedes #163, and the changelog in #164.
What changes
The database starts from the Rowan image.
createDatabasecopiesbin/extent0.rowan3.dbf(INITIAL_EXTENT) and records it inconf/image.build-test-extent.shuses the same image.An earlier database is refused, with a sentence.
assertDatabaseHasRowanrefuses a database without that record: one GemDB 1.8 or earlier made fromextent0.dbf. Its message says to deletedb/and start again, and to copy out anything needed first.assertDatabaseMatchesEngine(setup, and before the stone starts). The engine version is the same (a5), so the version guard can't tell these databases apart.Grail installs through Rowan.
install-grail.sh:scripts/install_rowan.gswith Grail'sGEM_TEMPOBJ_CACHE_SIZE, in place ofsrc/smalltalk/install.gs(which is gone);gemdbandunicodedataafterwards.It needs no new privileges: it loads as
gemdb.The MCP server installs through Rowan. GemDB still runs the payload's own
install.sh --grail --no-auth. In 0.9.0 that is a Rowan load.Bundling and packaging:
bundle-grail.shandbundle-mcp.shshiprowan/and require the load specs.inputlines, of which none remain.check-vsix.shasserts the Rowan files ship.Docs:
docs/grail.md,docs/mcp-server.md,docs/automation-boundary.mdandCLAUDE.mdare updated. The changelog has a[Unreleased]entry saying to start fresh, plus the runtime and MCP changes.Pins
a78e8c0→c8cbc92(main, 31 commits, 8 PRs). This range also includes #1723, which fixes #1667: a bareimport flaskno longer dirties every fresh session. It also includes #1725, so a Flask request writes nothing.d836520→7ab1067(0.9.0, 20 commits, 9 PRs).Verified locally
On arm64.Darwin against 4.0.0.a5:
bundle:grail: 12 Rowan packages present.bundle:mcp: 6 present.bundle:stats, andtest:extentbuilt through Rowan.npm test: 1066 passed, including 5 new tests for the image record and the guard.test:integration: 12 files, 148 passed, plus the existing expected-fail and todo.mcp.test.tsinstalled the MCP server and its Python toolset through Rowan.package.sh: passedcheck-vsix.sh.lint:toolchain: clean.grail.test.ts, which creates a database from the Rowan image and installs Grail into it, runs in 18 s. The cost is size: the Rowan image is 117 MB against 48 MB.The Rowan load prints about 30
COMPILE WARNINGs (unused temporaries, shadowed names). They are Grail's own, reported byinstall_rowan.gsby design, and harmless.Not verified here: linux-x64 and linux-arm64. This PR's CI is the check for both.
🤖 Generated with Claude Code