From 9375151fa0bb14944d280e9022990eec00d9d917 Mon Sep 17 00:00:00 2001 From: James Foster Date: Wed, 7 Oct 2026 05:57:09 -0700 Subject: [PATCH 1/2] Prepare release 1.6.0 Promote [Unreleased] to 1.6.0, add entries for three merged changes that never wrote one (#97 Refresh Notebook View and the Refresh Status rename, #92 the out-of-sessions message, #88 Ctrl+C stopping a gemdb run), and add the link definitions missing since 1.5.1. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 30 ++++++++++++++++++++++++++---- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2838630..39e02cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -Start with a fresh database: delete `~/GemDB/db` before starting this release. Your sessions now -log in as a new `gemdb` account, and what an earlier release stored belongs to DataCurator, where -this one does not look. +## [1.6.0] - 2026-10-07 + +The engine is unchanged at GemStone 4.0.0.a4, but start with a fresh database: delete +`~/GemDB/db` before starting this release. Your sessions now log in as a new `gemdb` account, and +what an earlier release stored belongs to DataCurator, where this one does not look. ### Added @@ -58,9 +60,21 @@ this one does not look. the clipboard, so you can ask for that data to be found or deleted. `USAGE_DATA.md` used to send you to Help: About for it, which does not show it. It works with telemetry turned off. +- **GemDB: Refresh Notebook View** lets the active notebook see what other sessions have committed, + from the ↻ button in a GemDB notebook's toolbar or the Command Palette. It runs + `gemdb.refresh()` in that notebook's own session, so nothing has to be typed into a cell, and + with uncommitted changes it refuses and says what to do, as `gemdb.refresh()` does. ### Changed +- **GemDB: Refresh is now called GemDB: Refresh Status**, which is what it does: it re-reads the + GemDB panel. It never refreshed a notebook's view; **Refresh Notebook View** does that. Its + command id is unchanged, so a key bound to it still works. +- **When the database has no free sessions, the message says who else is holding them.** With + GemDB's MCP server running, it says the server holds a session and each connected AI agent holds + another, and suggests disconnecting an agent as well as closing a notebook. For GemDB's own + database it also says where the limit of 10 comes from: the Community Edition key GemDB installs. + - **Your work runs as a `gemdb` database account, not DataCurator.** Notebooks, the GemDB Shell, Python files and AI agents log in as `gemdb`, which can define classes and run Python but has no administrative privileges; GemDB creates it on the database's first start. GemDB's own @@ -92,6 +106,10 @@ this one does not look. database running, as it already did when it found the database stopped. For the same reason, a running database whose Python support is older than the one GemDB Code ships now gets the update when GemDB Code opens, unless `gemdb.reinstallPythonOnUpdate` is off. +- **Ctrl+C stops a `gemdb` run.** Interrupting `gemdb app.py`, or a file run with **Run Python File + in GemDB**, used to leave it at a `topaz 1>` prompt, still holding a database session. It now runs + the script's `finally` blocks, prints `KeyboardInterrupt` and exits with status 130, as Python + does. ## [1.5.4] - 2026-10-01 @@ -853,7 +871,11 @@ gets out of the way. - **`sys.exit(n)` exits 1 rather than `n`**, and **`input()` is not yet supported**. Both are upstream in Grail. -[Unreleased]: https://github.com/GemTalk/GemDB_Code/compare/v1.5.1...HEAD +[Unreleased]: https://github.com/GemTalk/GemDB_Code/compare/v1.6.0...HEAD +[1.6.0]: https://github.com/GemTalk/GemDB_Code/compare/v1.5.4...v1.6.0 +[1.5.4]: https://github.com/GemTalk/GemDB_Code/compare/v1.5.3...v1.5.4 +[1.5.3]: https://github.com/GemTalk/GemDB_Code/compare/v1.5.2...v1.5.3 +[1.5.2]: https://github.com/GemTalk/GemDB_Code/compare/v1.5.1...v1.5.2 [1.5.1]: https://github.com/GemTalk/GemDB_Code/compare/v1.5.0...v1.5.1 [1.5.0]: https://github.com/GemTalk/GemDB_Code/compare/v1.4.0...v1.5.0 [1.4.0]: https://github.com/GemTalk/GemDB_Code/compare/v1.3.0...v1.4.0 diff --git a/package-lock.json b/package-lock.json index 379dbe5..b576c2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "gemdb", - "version": "1.5.4", + "version": "1.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gemdb", - "version": "1.5.4", + "version": "1.6.0", "license": "MIT", "dependencies": { "koffi": "^2.15.1" diff --git a/package.json b/package.json index 4b5b19a..77dbfff 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "gemdb", "displayName": "GemDB Code", "description": "Python with built-in transactional persistence (using true ACID semantics). When you have critical, complex data that must be consistent, use GemDB.", - "version": "1.5.4", + "version": "1.6.0", "publisher": "gemtalksystems", "license": "MIT", "icon": "resources/icon.png", From 2aeee30277125d3f9b1b2b6f8635a725d0b7e506 Mon Sep 17 00:00:00 2001 From: James Foster Date: Wed, 7 Oct 2026 06:12:52 -0700 Subject: [PATCH 2/2] Describe the newer Python runtime the Grail pin bump brings Written for #108, which moves Grail 9f8b116 -> beef473; this release is built after it merges. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39e02cf..7db427c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 The engine is unchanged at GemStone 4.0.0.a4, but start with a fresh database: delete `~/GemDB/db` before starting this release. Your sessions now log in as a new `gemdb` account, and -what an earlier release stored belongs to DataCurator, where this one does not look. +what an earlier release stored belongs to DataCurator, where this one does not look. The bundled +Python runtime moves forward. ### Added @@ -67,6 +68,17 @@ what an earlier release stored belongs to DataCurator, where this one does not l ### Changed +- **A newer Python runtime.** 213 commits across 78 pull requests since 1.5.4, and Python now + matches CPython 3.14.8. Syntax errors read as CPython's do and point at the same place, runaway + recursion raises a `RecursionError` you can catch, and `random`, `statistics`, `string` and + `str.format` are CPython's own, so a seeded `random` now gives CPython's sequence. A commit the + database refuses raises `gemdb.SessionStateError`, naming the object it could not store, where it + used to stop with a GemStone error. `gemdb.use_namespace()` gives an application its own + modules, and `__transient__` marks attributes that are never committed. Two things behave + differently: importing a file under a module name another file already deployed raises + `ImportError`, which names `gemdb.modules.relocate()` and `gemdb.modules.forget()`; and setting + a global of a built-in module, such as `gc.disable()`, lasts only for that session instead of + being committed for every later one. - **GemDB: Refresh is now called GemDB: Refresh Status**, which is what it does: it re-reads the GemDB panel. It never refreshed a notebook's view; **Refresh Notebook View** does that. Its command id is unchanged, so a key bound to it still works.