Grove Compatibility Tree
The top-level grove/ directory contains the converted library ecosystem plus
historical applications and examples. All 218 library directories now have a
final G01–G22 disposition; applications outside grove/libs still require
individual compatibility verification.
Current status
The operational compiler and its automatically staged libraries live under:
seed/compiler/llvm/
├── build/seed
└── libs/
The current library set is documented in Library Reference.
Those packages use clean lower-snake syntax, produce current .sdi interfaces,
and participate in the compiler's gate suites.
Every grove/libs package has a current manifest and a gate case. Retained
library sources contain no legacy hash comments, capitalized nominal
declarations, or direct FFI. A package may still be deliberately archived:
its current interface validates configuration/ownership boundaries while the
old execution capability remains unavailable.
Therefore:
- distinguish operational/ported packages from deliberately archived ones;
- do not copy Grove examples into current language guides without compiling
them with
./seed/seed check; - do not infer a compiler built-in from an unqualified function used by legacy Grove code;
- do use
seed/tools/grove_gate.py gNNand the matching baseline as the compatibility evidence; - do promote a package to the current catalog only after it parses, checks, builds, and has an explicit current ownership/effects/interface contract.
Repository layout
The compatibility tree is organized as:
grove/
├── libs/ # G01–G22 classified library corpus
├── apps/ # mixed-generation applications and tools
└── examples/ # examples that require individual compatibility verification
For libraries, disposition plus gate evidence proves the declared support boundary. Directory presence alone remains insufficient for apps and examples.
The recovered Ridge command family lives in grove/apps/ridge/. Its seven
programs compile against the ridge package. The reconstructed embedded stack
includes ridge_sql, whose bounded relational core has executable typed
projection, range, join, aggregate, subquery, index, constraint, transaction,
and SQLite/PostgreSQL differential coverage. The loopback pgwire daemon
supports simple queries and a bounded prepared-query subset.
grove/apps/ridge/ROADMAP.md separates historical evidence from current
capability: v0.2 is frozen with incomplete waived P13 evidence, while the v0.3
V3-G0-G17 local MVCC/relational, transaction, SQL, and index/planner/spill path
is complete and expansion is active at V3-G18. v0.4 cluster work is blocked
through V3-G25 and has not started. Its SQLite/PostgreSQL comparison harness
lives beside the apps under grove/apps/ridge/benchmarks/.
The consolidated user and operator guide is Ridge Database.
Porting a Grove package
Use this sequence when moving a package to the clean language:
- Run
./seed/seed check path/to/src/lib.sdand retain the diagnostics as the initial compatibility inventory. - Replace legacy syntax: lower-snake nominal names,
ret,//, current ADTs, and ordinary library channels instead of historical built-ins. - Replace implicit runtime helpers with current safe compiler operations or an
ordinary package under
seed/compiler/llvm/libs. - Make allocation, panic, blocking, FFI, ownership, clone, and provenance effects explicit.
- Put raw pointers, syscalls, FFI, unions, atomics, volatile operations, and
raw memory behind narrow
unsafewrappers. - Add a
seed.toml; packages withexterndeclarations must list platforms and provide a rootINSTALL.md. - Verify direct source compilation and source-elided
.sdiconsumption. - Add positive and negative compiler regressions before documenting the package as operational.
Porting should preserve behavior where useful, but archived syntax and runtime contracts are not compatibility requirements for the clean compiler.
Imports
Current compiler-staged packages use bare package imports:
use "io"
use "parse"
use "vec"
Prefer package imports backed by manifests and .sdi interfaces. A repository
source-path import bypasses that package boundary and should not be introduced
into converted Grove code.