Skip to content

Bump the Grail pin to main as of 2026-10-15, and build unicodedata at install - #138

Merged
jgfoster merged 1 commit into
mainfrom
james/bump-grail-pin-2026-10-15
Oct 16, 2026
Merged

jgfoster merged 1 commit into
mainfrom
james/bump-grail-pin-2026-10-15

Conversation

@jgfoster

Copy link
Copy Markdown
Member

Moves PINNED_GRAIL_REF from beef473 to 9fb5d23, Grail main as of today: 388 commits, 175 PRs. Grail's own CI is green on 9fb5d23. mcp_server (d836520) and GemDB Stats (v1.1.1) are already at their latest, so their pins stay.

The one installer change: build unicodedata at install

Grail's install.sh gains a step (Grail #1556). After deployGemdb.gs, it runs scripts/deployUnicodedata.gs, which builds and commits unicodedata's tables. Without that step, a session's first normalize or category call:

  • takes about a second, and
  • leaves the session with something to commit, which is what makes gemdb.transaction() refuse to start.

Since Grail #1512, compiling an identifier that NFKC changes (µ) also reaches it.

resources/install-grail.sh now mirrors it as step 4. A failure only warns, as upstream's does: Python still works, only slower on first use.

A new test in grail.test.ts pins this. Measured both ways: without the step it fails (needs_commit() is True after the first normalize, 1.2 s), and with it the test passes. Changing install-grail.sh also changes the install record, so an update reinstalls Grail, which a new pin needs anyway.

Installer compatibility otherwise

  • Scripts: every other script install-grail.sh drives is byte-identical, and the REQUIRED list is all present.
  • install.gs: additions only. Three runtime inputs (GrailCommitCoordinator, JSONDecoder, PythonTokenizerIdentifiers) plus test classes, all under src/.
  • C shim: the source changed, so every platform rebuilds it. The Makefile and the GCI calls are unchanged, and the only new includes are libc's.
  • What GemDB calls: the gemdb Python package is byte-identical, and every Smalltalk selector GemDB sends is still defined on the same class.
  • Moves and deletions: stdlib click and requests move to _grail_click and _grail_requests (#1634), and importlib/metadata.py gives way to CPython's package (#1664). GemDB references none of them.

Behaviour changes a user can meet

  • import click or import requests with neither pip-installed is now ModuleNotFoundError. Flask still works.
  • vars(obj) is a live view, so writing through it changes, and commits, the object.
  • Calls CPython refuses now raise TypeError: extra lambda arguments, or an argument given twice.
  • An exception in a decorator propagates instead of leaving the function undecorated.
  • date == datetime is False, and ordering a date against a datetime raises.
  • µ and μ are the same name.

Not verified: a database carried over from 1.6.0

Neither of these was exercised here:

  • Committed datetimes. PyDateTime changes superclass, so a datetime committed under the old pin remains an instance of the old class object.
  • Deployed Flask. A database that deployed Flask (Brain Freeze) committed click from a path that no longer exists. Grail's runtime-generation bump should discard that registry.

Both are worth checking on a real 1.6.0 database with Brain Freeze before release.

Verified locally

On arm64.Darwin against 4.0.0.a4:

  • bundle:grail: 1327 referenced files, all present
  • bundle:mcp, bundle:stats, test:extent
  • npm test: 948 passed
  • test:integration: 12 files, 141 passed, plus the existing expected-fail and todo in debugConsole.test.ts
  • package.sh: passed check-vsix.sh
  • After adding the install step: grail.test.ts, 14 passed

The full write-up is in the vendor-pins.sh comment. The changelog entry goes in the release PR, as for previous bumps.

🤖 Generated with Claude Code

… install

Grail beef473 -> 9fb5d23 (388 commits, 175 PRs). Grail's install.sh gains
one step (#1556): scripts/deployUnicodedata.gs, after deployGemdb.gs,
builds and commits unicodedata's tables. Without it a session's first
normalize or category call takes about a second and leaves the session
with something to commit, which is what makes gemdb.transaction() refuse
to start; since Grail #1512, compiling an identifier NFKC changes reaches
it too. install-grail.sh mirrors it as step 4, warn-only as upstream's
is, and an integration test pins it: measured failing without the step
(needs_commit True after the first normalize) and passing with it.

Everything else install-grail.sh drives is byte-identical, the REQUIRED
list is all present, and install.gs only adds inputs. The shim's source
changed, so every platform rebuilds it; Makefile and GCI calls unchanged.
The gemdb Python package is byte-identical. stdlib click and requests
move to _grail_click and _grail_requests (#1634); GemDB references
neither.

mcp_server and GemDB Stats are already at their latest, so their pins
stay.

Verified on arm64.Darwin against 4.0.0.a4, before the install step was
added: bundle:grail (1327 referenced files, all present), bundle:mcp,
bundle:stats, test:extent; npm test 948 passed; test:integration 12
files, 141 passed plus the existing expected-fail and todo; package.sh
passed check-vsix.sh. After it: grail.test.ts 14 passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jgfoster jgfoster mentioned this pull request Oct 16, 2026
@jgfoster
jgfoster added this pull request to the merge queue Oct 16, 2026
Merged via the queue into main with commit 56761d7 Oct 16, 2026
5 checks passed
@jgfoster
jgfoster deleted the james/bump-grail-pin-2026-10-15 branch October 16, 2026 02:38
jgfoster pushed a commit that referenced this pull request Oct 16, 2026
- Move #109's entry (usage data records the editor) out of the 1.6.0
  section, where a merge from before the promotion put it: it shipped
  after 1.6.0, and neither the v1.6.0 tag nor its release notes carry it.
- One Fixed heading in [Unreleased], where three PRs had each added one.
- Add entries for #121 (Survives logout takes effect at once on Linux)
  and for the Grail pin bump in #138.
- Rewrap [Unreleased] at 100 columns; no wording changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant