Pod Ecosystem — grove as catalog, pod as distribution unit
Status: implementation draft —
seed0.9.0,ridge0.2.0,grove~30libs Goal:groveas a curated catalog ofpods(lib/app/tool/game),podas the Rustcrateequivalent —srcorbinpertarget/profile;seedresolves first in the central cache~/.seed//usr/local/seedand only then on thesite.
1. Concepts
- Grove: an index (
seed/docs/book/libs-reference.md:42) ofpodswithname@x.y.z,kind(libapptool),capabilities,platforms,interface_hash. It does not compile; it only lists. - Pod:
name@ver+kind+emit(srclibbin) +target(linux-x86_64macos-aarch64*generic) +profile(debugrelease).src=seed.toml+src/lib.sd+sdi;bin=libPOD.so/a+POD.sdi+build.json. - Resolution:
use "pod"→seed.lock(pod@versha256emit) → central cache~/.seed//usr/local/seed→GET /archive/ab/cd/sha256(seed-site/src/registry.sd:504).
2. Central layout ~/.seed (user) and /usr/local/seed (system, sudo)
~/.seed/src/<pod>/<ver>/<sha256>/— immutablesrc(seed.toml+src/+sdi+interface_hashfromseed/compiler/llvm/src/driver/library_store.c).~/.seed/bin/<pod>/<ver>/<sha256>/<target>/<profile>/—libPOD.so/a+POD.sdi+build.json(target+profile+interface_hash+SEED_CODE_SPLITin the digest, as inseed/seed:25).~/.seed/manifest.json+ per-projectseed.lock(pod = "ridge" version = "^0.2" sha256 = "ab12...").~/.seed700,/usr/local/seed755root:staff(install_layoutinseed/tools/seed_tooling.py:2333already doessystem→/usr/local/binetc.; extend tosrc/bin).
seed install user vs system
seed install pod@^0.2[:target]→~/.seed/srcmiss →GET /archive/...→ compiles into~/.seed/bin/...(central, not./target).sudo seed install pod@^0.2(EUID==0) →/usr/local/seed/src|bin(install -o root:staff),SUDO_USERpreserved for~/.seed/credentials.toml(seed/compiler/llvm/src/driver/toolchain.c:1681).
3. Cache versioning (conflict-free)
~/.seed/bin/ridge/0.2.1/ab12/linux-x86_64/debug/and.../0.3.0/cd34/...coexist;seed.lockpinsver+sha256,LD_LIBRARY_PATH/rpathpoints to the exactver.sonamelibridge.so.0.2/0.3avoidsDT_NEEDEDcollisions.interface_hashchanges (rowcodecV30b114783) → newsha256→ miss and recompile of only the affectedpod.
4. Toolchain and library_store
seed builddoes not write./target;library_storerecords into~/.seed/bin/...keyed bypod@ver+target+profile+interface_hash+SEED_CODE_SPLIT.debugvsreleasesharesrcbut keep separatebinperprofile.
5. Registry seed-site
archive/ab/cd/<sha256>is already content-addressed (seed-site/src/registry.sd:504),index/<name>.json+catalog.jsonwithinterface_hashandyank/deprecated.GET /api/toolchain/latest(seed-site/src/main.sd:50) with{"schema":1,"version":"0.9.0","files":{"linux-x86-64":{...}}}+interface_hash.
6. Next steps (2 weeks)
- deterministic
seed.lock+seed update - final
site_dbpg(ridge_open→pg_site_dbwhenSEED_SITE_USE_PG=1) promote_prod.shwith automatichuman-reviewedaftertranslate_i18n.py