Feat v0.8.3 vector column type (#70)
Some checks failed
CI/CD / detect-changes (pull_request) Successful in 4s
CI/CD / test-frontend (pull_request) Has been skipped
CI/CD / test-runners (pull_request) Has been skipped
CI/CD / e2e-smoke (pull_request) Has been skipped
CI/CD / build-and-deploy (pull_request) Has been cancelled
CI/CD / test-sqlite (pull_request) Has been cancelled
CI/CD / test-go-pg (pull_request) Has been cancelled

Add vector(N) column type to db_tables manifests with three-tier
progressive enhancement: native pgvector on Postgres, JSONB fallback
without pgvector, TEXT fallback on SQLite. New db.query_similar()
Starlark builtin with dual-path dispatch.

- parseVectorDim validates 1..4096 dimensions
- mapColType gains hasPgvector parameter for tier selection
- HNSW index auto-created on pgvector backends
- starlarkToGoValue extended with list→JSON serialization
- cosineDistance helper for Go-side fallback computation
- ExtensionHandler gains SetCapabilities for install-time DDL
- Roadmap updated: v0.8.4 docs refresh + surface sizing fix

13 new tests (5 schema + 8 db module), all passing with -race.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-03 09:40:38 +00:00
parent 00ef970163
commit 4fed810dd5
16 changed files with 909 additions and 52 deletions

View File

@@ -1,6 +1,6 @@
# Armature — Roadmap
## Current: v0.8.1Workspace Module
## Current: v0.8.4Documentation Refresh + Surface Sizing Fix
Self-hosted extensible platform kernel. Auth, identity, packages, Starlark
sandbox, storage, realtime, and ops are kernel primitives. Everything else
@@ -424,15 +424,43 @@ New: `handlers/capabilities.go`, `handlers/capabilities_test.go`,
`sandbox/settings_module_test.go`. Modified: install handler, bundled
handler, settings module, runner, main.go. 18 new tests.
**v0.8.3 — Vector Column Type**
**v0.8.3 — Vector Column Type**
`"vector(N)"` in `db_tables` manifest. Maps to native `vector(N)` on
PG+pgvector, `JSONB` on PG without, `TEXT` on SQLite. New `db.query_similar()`
with dual-path dispatch (native operator vs Go-side brute force).
with dual-path dispatch (native operator vs Go-side brute force). Auto-created
HNSW index on pgvector. `starlarkToGoValue` extended with list→JSON.
Modified: `ext_db_schema.go`, `db_module.go`.
New: `docs/DESIGN-vector-column.md`. Modified: `ext_db_schema.go`,
`db_module.go`, `runner.go`, `extensions.go`, `main.go`. 13 new tests.
**v0.8.4 — Extension Composability**
**v0.8.4 — Documentation Refresh + Surface Sizing Fix**
Two unrelated items bundled for a clean changeset before composability.
*Documentation refresh:* Starlark/extension docs have drifted since v0.7.5.
Modules added or significantly changed but not fully documented:
- `workspace` module (v0.8.1) — undocumented in STARLARK-REFERENCE.md
- `permissions` module (v0.7.7) — undocumented in STARLARK-REFERENCE.md
- `settings.has_capability()` (v0.8.2) — not in settings section
- `db.query_similar()` vector section (v0.8.3) — added but needs review pass
- EXTENSION-GUIDE.md — needs `capabilities` manifest block, `vector(N)` column
type, `user_permissions`, `gate_permission`
- TUTORIAL-FIRST-EXTENSION.md — review for v0.7+ accuracy
*Surface sizing bug:* Extension surfaces (`height: 100%` + `overflow: hidden`)
don't account for the 44px shell topbar. Content is cut off at the bottom
with no scroll. Affected: chat, notes, dashboard, schedules, and likely all
extension surfaces. Root cause: `.extension-mount` is `flex: 1` within the
viewport column, but extensions set `height: 100%` on their root element
which inherits the mount's full height — the topbar's 44px is already
subtracted by flex, but the extension's internal layout overflows because
child containers also use `height: 100%` + `overflow: hidden`, clipping
the last 44px of content. Fix: audit all extension root CSS and ensure
inner scroll containers use `flex: 1; min-height: 0; overflow: auto`
instead of `height: 100%; overflow: hidden`.
**v0.8.5 — Extension Composability**
Design doc: `docs/DESIGN-extension-composability.md`
@@ -616,6 +644,7 @@ These are candidates, not commitments. Each requires a design doc.
| `workspace` for real filesystem | Flat blob store can't serve git/compilers/ffmpeg. Managed disk paths are the explicit escape hatch. |
| Capability negotiation at install | Fail loud with actionable message, not silently at runtime. |
| Vector column with three-tier fallback | Works everywhere, works fast with pgvector. Documentation > hard gates. |
| Docs refresh before composability | 8 versions of module additions (v0.7.5v0.8.3) without a docs pass. Ship accurate docs before adding more API surface. |
| Sidecar deferred to v0.10.x | HTTP module covers external APIs. Local compute is a v0.10.x concern. Sidecars connect inward (like cluster nodes), not spawned outward (no k8s RBAC needed). |
| No second scripting runtime | Starlark for glue, HTTP for external compute, sidecars for local compute. Three tiers with clear boundaries. Lua/WASM middle tier rejected — Turing-complete enough to be dangerous, not isolated enough to be trustworthy. |
| Reference extensions prove the platform | First-party `.pkg` files, not kernel code. Uninstallable. Dogfooding. |