A desktop window onto sapedb databases, built with Wails v2 — Go underneath, a webview on top. Go because the protocol client is Go and nothing has to be reimplemented in another language to reach the server; a webview because a tree and a data grid are two things a native toolkit makes hard and a browser engine makes ordinary.
The shape of the room is a professional database tool's: navigator on the left, tabs in the middle, results below, status bar along the bottom. What hangs in the navigator is not tables and there is nowhere to type SQL, because this database has neither. What a caller may do is an operation somebody declared; what an operator may do besides that is a typed access with exactly the shapes a declaration may have.
What works:
It is the first thing that spends the release's protocol work on somebody who is not writing code, and it is the only place the new frames were exercised by a long-lived process holding connections open — which is exactly the case that made "many connections alive" and "add an operation" mutually exclusive before SAPE-19.
It also turned the protocol's silences into visible product decisions. An empty tree and a refused catalogue look identical and mean opposite things; a window has to pick one, and picking it forced the server's challenge-for-the-secret rule to be stated rather than assumed.
go test ./... builds sapedbd and sapedb from the sibling
package, starts a server on a port of its own with a data directory of its own, declares a schema,
and runs every method of the workbench against it —
internal/workbench/live_test.go, plus declare_live_test.go,
compose_live_test.go and shell_live_test.go. Nothing is stubbed: both of
the bugs these tests exist for were the server telling the truth and a client misreading it, and no
mock catches that.frontend/ npm test, with
frontend/src/shape.test.ts covering the one place the window converts the server's
shapes.89db51a is the workbench following SAPE-22: a count
declares its walk here too, and one test's premise inverted when it did — measured, not
assumed.scripts/demo-server.sh prints two connection strings, the second for a database with
nothing declared in it, because that is the case every new user meets first.sapedb apply run by hand, and the window says so rather than offering a button that
would only fail. Blocked on SAPE-14.planned, in the place they
will live — space left rather than the idea left out.wails build
produces a bundle in build/bin and that is where it stops. The bundle identifier is
set (e8b86fd), which is the part that cannot be changed later for free.GOROOT pointed at it. That is a note in a README, not a packaging story.Present and the window has no screen for one —
ISS-11's lifecycle question is unanswered here too.