From 6c8bf8944ff309c3ec8ef357f8ebef2a50586ada Mon Sep 17 00:00:00 2001 From: Sam & Claude Date: Sun, 28 Jun 2026 14:45:44 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20complete=20wiki=20updates=20=E2=80=94?= =?UTF-8?q?=20model-selection,=20guide,=20sl/=20translations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 2 +- Cargo.lock | 30 +++++++++---------- Cargo.toml | 2 +- README.md | 2 +- crates/colibri-client/Cargo.toml | 2 +- crates/colibri-daemon/Cargo.toml | 2 +- crates/colibri-ledger/src/lib.rs | 2 +- docs/guide/architecture/colibri.md | 2 +- .../plans/2026-06-28-eval-phase2-local-llm.md | 8 ++--- docs/wiki/a2a-complexity-audit.md | 4 +-- docs/wiki/cost-model.md | 2 +- docs/wiki/hive-routing.md | 4 +-- docs/wiki/model-selection-and-eval.md | 4 +-- docs/wiki/sl/cost-model.md | 2 +- docs/wiki/sl/skills-catalog.md | 2 +- docs/wiki/sl/store-schema.md | 20 ++++++------- docs/wiki/sl/task-board.md | 2 +- docs/wiki/store-schema.md | 20 ++++++------- docs/wiki/task-board.md | 2 +- 19 files changed, 57 insertions(+), 57 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index efc8da3..995bf25 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -82,7 +82,7 @@ static linking on FreeBSD (no `openssl-sys` dependency). | `colibri-daemon` | Always-on socket server, session/agent lifecycle, jail spawner | | `colibri-client` | Typed Unix-socket client + operator CLI tools | | `colibri-glasspane-tui` | ratatui dashboard — live pane supervision | -| `colibri-store` | Embedded SQLite coordination (task board, agents, skills) | +| `colibri-ledger` | Embedded SQLite coordination (task board, agents, skills) | | `colibri-skills` | Skills catalog (read-only consumer of reviewed skill artifacts) | | `colibri-mcp` | MCP bridge for editor integration + external MCP host (jailed) | | `clawdie` | Host installer/deployer: ZFS layout + `clawdie` service (FreeBSD/Linux) | diff --git a/Cargo.lock b/Cargo.lock index 6bc1838..683b059 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -303,7 +303,7 @@ version = "0.12.0" dependencies = [ "colibri-daemon", "colibri-glasspane", - "colibri-store", + "colibri-ledger", "serde", "serde_json", "thiserror 2.0.18", @@ -328,9 +328,9 @@ dependencies = [ "colibri-contracts", "colibri-deepseek", "colibri-glasspane", + "colibri-ledger", "colibri-runtime", "colibri-skills", - "colibri-store", "colibri-vault", "dashmap", "reqwest", @@ -387,6 +387,19 @@ dependencies = [ "tokio", ] +[[package]] +name = "colibri-ledger" +version = "0.12.0" +dependencies = [ + "chrono", + "colibri-skills", + "rusqlite", + "serde", + "serde_json", + "thiserror 2.0.18", + "uuid", +] + [[package]] name = "colibri-mcp" version = "0.12.0" @@ -434,19 +447,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "colibri-store" -version = "0.12.0" -dependencies = [ - "chrono", - "colibri-skills", - "rusqlite", - "serde", - "serde_json", - "thiserror 2.0.18", - "uuid", -] - [[package]] name = "colibri-vault" version = "0.12.0" diff --git a/Cargo.toml b/Cargo.toml index 0c6a372..3bba655 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["crates/colibri-contracts", "crates/colibri-deepseek", "crates/colibri-runtime", "crates/colibri-glasspane", "crates/colibri-daemon", "crates/colibri-client", "crates/colibri-glasspane-tui", "crates/colibri-store", "crates/colibri-skills", "crates/colibri-mcp", "crates/colibri-vault", "crates/colibri-zfs", "crates/colibri-pf", "crates/colibri-deploy", "crates/clawdie"] +members = ["crates/colibri-contracts", "crates/colibri-deepseek", "crates/colibri-runtime", "crates/colibri-glasspane", "crates/colibri-daemon", "crates/colibri-client", "crates/colibri-glasspane-tui", "crates/colibri-ledger", "crates/colibri-skills", "crates/colibri-mcp", "crates/colibri-vault", "crates/colibri-zfs", "crates/colibri-pf", "crates/colibri-deploy", "crates/clawdie"] [workspace.package] version = "0.12.0" diff --git a/README.md b/README.md index 69dde99..6e0fcc8 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ bhyve VMs, Bastille jails) or as a standalone daemon on Linux. | `colibri-daemon` | Always-on Unix socket server, task dispatch, session lifecycle | | `colibri-client` | Typed Unix-socket client + operator CLI | | `colibri-glasspane-tui` | ratatui live dashboard (FreeBSD-native) | -| `colibri-store` | Embedded SQLite coordination (task board, agents, cost tracking) | +| `colibri-ledger` | Embedded SQLite coordination (task board, agents, cost tracking) | | `colibri-skills` | Skills catalog crate | | `clawdie` | Host installer/deployer: ZFS layout + `clawdie` service (FreeBSD/Linux) | diff --git a/crates/colibri-client/Cargo.toml b/crates/colibri-client/Cargo.toml index 70f7fbe..0cf38ec 100644 --- a/crates/colibri-client/Cargo.toml +++ b/crates/colibri-client/Cargo.toml @@ -24,4 +24,4 @@ tokio = { version = "1", features = ["io-util", "macros", "net", "rt-multi-threa [dev-dependencies] tokio = { version = "1", features = ["fs", "io-util", "macros", "net", "rt-multi-thread", "time"] } uuid = { version = "1", features = ["v4"] } -colibri-store = { path = "../colibri-store" } +colibri-ledger = { path = "../colibri-ledger" } diff --git a/crates/colibri-daemon/Cargo.toml b/crates/colibri-daemon/Cargo.toml index e8b5b5b..11d3c0a 100644 --- a/crates/colibri-daemon/Cargo.toml +++ b/crates/colibri-daemon/Cargo.toml @@ -10,7 +10,7 @@ colibri-contracts = { path = "../colibri-contracts" } colibri-deepseek = { path = "../colibri-deepseek" } colibri-glasspane = { path = "../colibri-glasspane" } colibri-runtime = { path = "../colibri-runtime" } -colibri-store = { path = "../colibri-store" } +colibri-ledger = { path = "../colibri-ledger" } colibri-skills = { path = "../colibri-skills" } colibri-vault = { path = "../colibri-vault" } tokio = { version = "1", features = ["full"] } diff --git a/crates/colibri-ledger/src/lib.rs b/crates/colibri-ledger/src/lib.rs index 01b9e24..e421d03 100644 --- a/crates/colibri-ledger/src/lib.rs +++ b/crates/colibri-ledger/src/lib.rs @@ -1,4 +1,4 @@ -//! colibri-store — Embedded SQLite coordination database. +//! colibri-ledger — Embedded SQLite coordination database. //! //! Implements Decision #1 from `docs/COLIBRI-CUTOVER-PLAN.md`: //! authoritative task-board lifecycle, agent registry, and skills catalog diff --git a/docs/guide/architecture/colibri.md b/docs/guide/architecture/colibri.md index bfc08cb..976140e 100644 --- a/docs/guide/architecture/colibri.md +++ b/docs/guide/architecture/colibri.md @@ -29,7 +29,7 @@ colibri-daemon — Unix-socket server (the always-on supervisor) | Crate | Role | | ----------------------- | --------------------------------------------------------- | | `colibri-daemon` | Socket server, agent lifecycle, scheduler loop | -| `colibri-store` | Embedded SQLite — tasks, agents, tenants, skills | +| `colibri-ledger` | Embedded SQLite — tasks, agents, tenants, skills | | `colibri-glasspane` | Agent state machine (Idle → Working → Done/Error/Stalled) | | `colibri-glasspane-tui` | ratatui dashboard — live pane supervision | | `colibri-client` | CLI (`colibri status`, `colibri spawn`, `colibri tasks`) | diff --git a/docs/plans/2026-06-28-eval-phase2-local-llm.md b/docs/plans/2026-06-28-eval-phase2-local-llm.md index db98e16..152bea2 100644 --- a/docs/plans/2026-06-28-eval-phase2-local-llm.md +++ b/docs/plans/2026-06-28-eval-phase2-local-llm.md @@ -6,7 +6,7 @@ **Architecture:** New `eval.rs` module with `eval_task_locally()` → `tokio::spawn` in `record_task_completion()`. Upserts a second TaskEval row with `eval_mode: "local-llm"`, overwriting the agent self-report's `correctness_check` with PASS/FAIL from the local model. -**Tech Stack:** Rust, tokio::spawn, std::process::Command (ollama), colibri-store TaskEval +**Tech Stack:** Rust, tokio::spawn, std::process::Command (ollama), colibri-ledger TaskEval --- @@ -257,7 +257,7 @@ Replace lines 381-401 (the agent self-report eval block) with: ```rust // T2.x Phase 1: Write eval record (agent self-report mode) - let agent_eval = colibri_store::TaskEval { + let agent_eval = colibri_ledger::TaskEval { task_id: task_id.to_string(), agent_id: Some(agent_id.to_string()), eval_mode: "agent".to_string(), @@ -286,7 +286,7 @@ Replace lines 381-401 (the agent self-report eval block) with: use crate::eval::eval_task_locally; match eval_task_locally(&task_id_owned, &task_desc_owned) { Some(attempt) => { - let local_eval = colibri_store::TaskEval { + let local_eval = colibri_ledger::TaskEval { task_id: task_id_owned.clone(), agent_id: Some(agent_id.to_string()), eval_mode: "local-llm".to_string(), @@ -299,7 +299,7 @@ Replace lines 381-401 (the agent self-report eval block) with: evaluated_at: chrono::Utc::now().to_rfc3339(), }; // Re-open store — we're in a different thread - if let Ok(store) = colibri_store::Store::open(&store_path) { + if let Ok(store) = colibri_ledger::Store::open(&store_path) { if let Err(e) = store.write_task_eval(&local_eval) { warn!(task_id = %task_id_owned, error = %e, "failed to write local eval"); } diff --git a/docs/wiki/a2a-complexity-audit.md b/docs/wiki/a2a-complexity-audit.md index baa091e..53abb4a 100644 --- a/docs/wiki/a2a-complexity-audit.md +++ b/docs/wiki/a2a-complexity-audit.md @@ -14,7 +14,7 @@ Colibri speaks 5 protocols today: | **MCP JSON-RPC** | `crates/colibri-mcp/src/lib.rs` | 570 | Editor integration + external MCP host | | **MCP-over-SSH** | `packaging/mother/` (3 files) | 437 | Mother hive entrypoint (forced-command allowlist + node register) | | **JSONL** | `crates/colibri-glasspane/src/lib.rs` | 1,186 | Agent subprocess stdout events | -| **SQL** | `crates/colibri-store/src/lib.rs` + `crates/colibri-store/src/schema.rs` | 1,150 | Local coordination (tasks, agents, skills, tenants) | +| **SQL** | `crates/colibri-ledger/src/lib.rs` + `crates/colibri-ledger/src/schema.rs` | 1,150 | Local coordination (tasks, agents, skills, tenants) | **Total protocol surface: ~5,324 lines.** @@ -108,7 +108,7 @@ With A2A: cost data is a typed message part (`application/json+cost`). The forma | **Unix socket wire protocol** (`crates/colibri-daemon/src/socket.rs`) | A2A is cross-node HTTP. Local daemon control needs IPC — Unix socket is faster, auth-free (filesystem permissions), and doesn't need a network stack. | 0 | | **Spawner** (`crates/colibri-daemon/src/spawner.rs`) | A2A routes tasks to existing agents. Colibri _creates_ agents by spawning subprocesses. A2A has no process lifecycle concept. | 0 | | **Glasspane** (`crates/colibri-glasspane/src/lib.rs`) | A2A doesn't watch subprocess stdout. Glasspane is a PTY observer — it reads JSONL from child processes. A2A operates one layer above. | 0 | -| **Store** (`crates/colibri-store/src/lib.rs`) | A2A doesn't replace local SQLite coordination. Each node needs local persistence for task board, agents, skills — A2A is the _transport_, not the _database_. | 0 | +| **Store** (`crates/colibri-ledger/src/lib.rs`) | A2A doesn't replace local SQLite coordination. Each node needs local persistence for task board, agents, skills — A2A is the _transport_, not the _database_. | 0 | | **MCP editor bridge** | A2A is agent-to-agent. MCP is human-to-tool. Different protocols for different directions. They coexist. | 0 | | **Contracts schemas** (`crates/colibri-contracts/src/lib.rs`) | A2A uses JSON Schema for input validation. Colibri's contracts are already compatible — no change needed. | 0 | diff --git a/docs/wiki/cost-model.md b/docs/wiki/cost-model.md index 9457130..efe6649 100644 --- a/docs/wiki/cost-model.md +++ b/docs/wiki/cost-model.md @@ -95,7 +95,7 @@ finished_at) onto the task row. MCP exposes `colibri_get_task_cost` for agents to query historical cost data (e.g., "what model is cheapest for this workload?"). -→ [`crates/colibri-store/src/lib.rs`](../../crates/colibri-store/src/lib.rs) +→ [`crates/colibri-ledger/src/lib.rs`](../../crates/colibri-ledger/src/lib.rs) (`TaskCost`, `set_task_cost`), [`crates/colibri-glasspane/src/lib.rs`](../../crates/colibri-glasspane/src/lib.rs) (`PaneUsage`, `add_cost`), diff --git a/docs/wiki/hive-routing.md b/docs/wiki/hive-routing.md index 019a5d8..f68f3b7 100644 --- a/docs/wiki/hive-routing.md +++ b/docs/wiki/hive-routing.md @@ -17,7 +17,7 @@ | `clawdie-system-probe` | Collects GPU, RAM, CPU, disks, ZFS, WiFi, Vulkan, Colibri status | No ollama/llama.cpp probing | | `node-register-mcp` | UPSERTs hw_profile into `hive_nodes` on join | No UUID generation at join time | | `crates/colibri-daemon/src/scheduler.rs` | Cron/interval/one-shot jobs, capability matching stubs | No cost-aware routing, no hive awareness | -| `colibri-store` | Local SQLite `agents` table with UUID (v4 random) | UUID is session-local, not hive-stable | +| `colibri-ledger` | Local SQLite `agents` table with UUID (v4 random) | UUID is session-local, not hive-stable | | T1.5 cost tracking | Per-task cost captured in local SQLite | No hive-level cost aggregation | ## Design Goals @@ -380,7 +380,7 @@ The capability matrix, stable UUIDs, and local LLM probes are the foundation — | `colibri_query_hive_capabilities` MCP tool | colibri-mcp | | `colibri_dispatch_to_node` MCP tool | colibri-mcp | | `hive-routing` skill | `.agent/skills/` | -| `Task.routing` JSONB field in colibri-store | colibri-store | +| `Task.routing` JSONB field in colibri-ledger | colibri-ledger | | Mother-side routing score as PostgreSQL function (optional — only if agent-driven routing proves insufficient) | mother_schema.sql | --- diff --git a/docs/wiki/model-selection-and-eval.md b/docs/wiki/model-selection-and-eval.md index ed4a7ac..0e295d0 100644 --- a/docs/wiki/model-selection-and-eval.md +++ b/docs/wiki/model-selection-and-eval.md @@ -354,7 +354,7 @@ task arrives at scheduler | Local eval: spawn local LLM with eval prompt | colibri-daemon | ~60 | | Fallback logic: self-report → local → cloud → skipped | colibri-daemon | ~40 | | Eval job scheduler (async, fire-and-forget) | colibri-daemon | ~30 | -| Eval result merge into task_eval | colibri-store | ~20 | +| Eval result merge into task_eval | colibri-ledger | ~20 | **Total:** ~180 lines, 3 days. @@ -383,7 +383,7 @@ task arrives at scheduler | Deliverable | Where | Lines | | --------------------------------------------------- | -------------- | ----- | | Cloud eval: call Claude/DeepSeek with eval prompt | colibri-daemon | ~50 | -| Cost accounting: eval_cost_usd added to task_eval | colibri-store | ~10 | +| Cost accounting: eval_cost_usd added to task_eval | colibri-ledger | ~10 | | Feedback loop: eval results → routing weight update | colibri-daemon | ~30 | | Eval aggregation: 5-minute rollup of success rates | colibri-mcp | ~25 | diff --git a/docs/wiki/sl/cost-model.md b/docs/wiki/sl/cost-model.md index 016a9ab..bb1cade 100644 --- a/docs/wiki/sl/cost-model.md +++ b/docs/wiki/sl/cost-model.md @@ -101,7 +101,7 @@ uspeh, finished_at) v vrstico opravila. MCP izpostavlja `colibri_get_task_cost` za poizvedbe agentov o zgodovinskih stroških (npr. "kateri model je najcenejši za to delovno obremenitev?"). -→ [`crates/colibri-store/src/lib.rs`](../../crates/colibri-store/src/lib.rs) +→ [`crates/colibri-ledger/src/lib.rs`](../../crates/colibri-ledger/src/lib.rs) (`TaskCost`, `set_task_cost`), [`crates/colibri-glasspane/src/lib.rs`](../../crates/colibri-glasspane/src/lib.rs) (`PaneUsage`, `add_cost`) diff --git a/docs/wiki/sl/skills-catalog.md b/docs/wiki/sl/skills-catalog.md index f1f4918..7762003 100644 --- a/docs/wiki/sl/skills-catalog.md +++ b/docs/wiki/sl/skills-catalog.md @@ -31,7 +31,7 @@ Vse veščine si delijo eno tabelo `skills` s stolpci `name`, `description`, (`"soul"`, `"agent"`, `"channel"`). Brez gnezdenja, brez različic, brez odvisnosti med veščinami. To ustreza trenutnemu obsegu (~50 veščin). -→ `crates/colibri-store/src/schema.rs` +→ `crates/colibri-ledger/src/schema.rs` ### Uvoz ob zagonu, ne sproti diff --git a/docs/wiki/sl/store-schema.md b/docs/wiki/sl/store-schema.md index 2f77456..a238e60 100644 --- a/docs/wiki/sl/store-schema.md +++ b/docs/wiki/sl/store-schema.md @@ -8,11 +8,11 @@ description: "Koordinacijska shramba Colibri — ena sama podatkovna zbirka SQLi Colibrijeva koordinacijska shramba je ena sama podatkovna zbirka SQLite v lasti storitve `colibri`. Hrani tablo opravil, register agentov in veščin ter preslikavo najemnikov trezorja. Ni predpomnilnik — je trajno stanje. Večina -pisanj gre skozi API vtičnice procesa v ozadju, vendar shema pripada `colibri-store`. +pisanj gre skozi API vtičnice procesa v ozadju, vendar shema pripada `colibri-ledger`. -→ `crates/colibri-store/src/schema.rs` +→ `crates/colibri-ledger/src/schema.rs` -→ `crates/colibri-store/src/lib.rs` +→ `crates/colibri-ledger/src/lib.rs` ## Odločitve @@ -39,7 +39,7 @@ Te niso nastavljive med izvajanjem. Če bomo kdaj potrebovali drugačna jamstva glede trajnosti ali sočasnosti, naj bo to eksplicitno, namesto da bi povezava podedovala privzetke. -→ `crates/colibri-store/src/lib.rs` (`Store::open`) +→ `crates/colibri-ledger/src/lib.rs` (`Store::open`) ### Samo idempotentne migracije @@ -49,7 +49,7 @@ navzdol; razvoj sheme so aditivne tabele in stolpci. Če bo kdaj potrebna destruktivna migracija, mora biti to nameren ročni korak, dokumentiran v predaji. -→ `crates/colibri-store/src/schema.rs` +→ `crates/colibri-ledger/src/schema.rs` ### Štiri tabele za štiri skrbi @@ -64,7 +64,7 @@ Opravila nosijo tuji ključ `agent_id` v `agents`. Vsako drugo razmerje je ohlapno — veščine niso povezane z agenti, najemniki pa so referencirani po svojem `tenant_id` v ukazih vtičnice in kljukah za oskrbo. -→ `crates/colibri-store/src/schema.rs` +→ `crates/colibri-ledger/src/schema.rs` ### Omejitev CHECK stanja opravila je vir resnice @@ -72,7 +72,7 @@ svojem `tenant_id` v ukazih vtičnice in kljukah za oskrbo. Enum `TaskStatus` v Rustu ga zrcali, vendar je podatkovna zbirka zadnje preverjanje. Ukaz, ki poskusi vstaviti neznano stanje, pade ob času pisanja. -→ `crates/colibri-store/src/schema.rs` +→ `crates/colibri-ledger/src/schema.rs` ### Zmožnosti agenta shranjene kot JSON, ne normalizirane @@ -84,7 +84,7 @@ bi dodali zapletenost sheme brez izboljšanja moči poizvedb. Če metapodatki zmožnosti zrastejo (uteži, različice, zahtevane veščine), lahko to kasneje razcepimo; trenutna shema namenoma ostaja pragmatična. -→ `crates/colibri-store/src/lib.rs` (`register_agent`) +→ `crates/colibri-ledger/src/lib.rs` (`register_agent`) ### Najemniki kodirajo preslikavo 1:1:1 ječa/trezor/zbirka @@ -97,7 +97,7 @@ Stolpec `status` najemnika sledi življenjskemu ciklu: `provisioned → active → stopped → destroyed`. Neodvisen je od tega, ali proces ječe teče; upravljanje življenjskega cikla je ločena skrb. -→ `crates/colibri-store/src/schema.rs` (komentarji na `tenants`) +→ `crates/colibri-ledger/src/schema.rs` (komentarji na `tenants`) ### Privzeta pot podatkovne zbirke je specifična za platformo @@ -112,7 +112,7 @@ FreeBSD privzeto uporablja `/var/db`, ker je to običajni imenik za lokalno stanje storitev. Linuxov padec spoštuje XDG, tako da je razvoj na delovni postaji normalen. -→ `crates/colibri-store/src/lib.rs` (`default_db_path`) +→ `crates/colibri-ledger/src/lib.rs` (`default_db_path`) ### Izvoz JSON za varnostne kopije in paritetne teste diff --git a/docs/wiki/sl/task-board.md b/docs/wiki/sl/task-board.md index 7aedc49..177ff54 100644 --- a/docs/wiki/sl/task-board.md +++ b/docs/wiki/sl/task-board.md @@ -92,7 +92,7 @@ administracije in preživi ponovne zagone procesa v ozadju brez ločenega življ cikla. Matično vozlišče uporablja PostgreSQL za hive register, ker je večnajemniško; lokalni proces v ozadju je enouporabniški (single user/operator). -→ [`crates/colibri-store/src/lib.rs`](../../crates/colibri-store/src/lib.rs) +→ [`crates/colibri-ledger/src/lib.rs`](../../crates/colibri-ledger/src/lib.rs) ## Glej tudi diff --git a/docs/wiki/store-schema.md b/docs/wiki/store-schema.md index 2906026..c2a33ef 100644 --- a/docs/wiki/store-schema.md +++ b/docs/wiki/store-schema.md @@ -5,11 +5,11 @@ Colibri's coordination store is a single SQLite database owned by the `colibri` service. It holds the task board, the registry of agents and skills, and the vault tenant map. It is not a cache — it is durable state. Most writes happen -through the daemon's socket API, but the schema belongs to `colibri-store`. +through the daemon's socket API, but the schema belongs to `colibri-ledger`. -→ `crates/colibri-store/src/schema.rs` +→ `crates/colibri-ledger/src/schema.rs` -→ `crates/colibri-store/src/lib.rs` +→ `crates/colibri-ledger/src/lib.rs` ## Decisions @@ -35,7 +35,7 @@ These are not configurable at runtime. If we ever need different durability or concurrency guarantees, we should make it explicit rather than letting the connection inherit defaults. -→ `crates/colibri-store/src/lib.rs` (`Store::open`) +→ `crates/colibri-ledger/src/lib.rs` (`Store::open`) ### Idempotent migrations only @@ -44,7 +44,7 @@ indexes, so repeated runs are safe. We do not ship downward migrations; schema evolution is additive tables and columns. If a destructive migration is ever needed, it must be a deliberate manual step documented in a handoff. -→ `crates/colibri-store/src/schema.rs` +→ `crates/colibri-ledger/src/schema.rs` ### Four tables for four concerns @@ -59,7 +59,7 @@ Tasks carry an `agent_id` foreign key into `agents`. Every other relationship is loose — skills are not linked to agents, and tenants are referenced by their `tenant_id` in socket commands and provisioning hooks. -→ `crates/colibri-store/src/schema.rs` +→ `crates/colibri-ledger/src/schema.rs` ### Task-status CHECK constraint is the source of truth @@ -67,7 +67,7 @@ loose — skills are not linked to agents, and tenants are referenced by their The Rust `TaskStatus` enum mirrors it, but the database is the final gate. A command that tries to insert an unknown status fails at write time. -→ `crates/colibri-store/src/schema.rs` +→ `crates/colibri-ledger/src/schema.rs` ### Agent capabilities stored as JSON, not normalized @@ -79,7 +79,7 @@ complexity without improving query power. If capability metadata grows (weights, versions, required skills), we can split it later; the current schema intentionally stays pragmatic. -→ `crates/colibri-store/src/lib.rs` (`register_agent`) +→ `crates/colibri-ledger/src/lib.rs` (`register_agent`) ### Tenants encode the 1:1:1 jail/vault/collection map @@ -92,7 +92,7 @@ The tenant `status` column tracks the lifecycle: `provisioned → active → stopped → destroyed`. It is independent of whether the jail process is running; lifecycle management is a separate concern. -→ `crates/colibri-store/src/schema.rs` (comments on `tenants`) +→ `crates/colibri-ledger/src/schema.rs` (comments on `tenants`) ### Default database path is platform-specific @@ -107,7 +107,7 @@ FreeBSD defaults to `/var/db` because that is the conventional local-state directory for services. The Linux fallback respects XDG, so development on a workstation feels normal. -→ `crates/colibri-store/src/lib.rs` (`default_db_path`) +→ `crates/colibri-ledger/src/lib.rs` (`default_db_path`) ### JSON export for backups and parity tests diff --git a/docs/wiki/task-board.md b/docs/wiki/task-board.md index 56bd961..49e2c49 100644 --- a/docs/wiki/task-board.md +++ b/docs/wiki/task-board.md @@ -84,7 +84,7 @@ coordination state. SQLite is zero-config, zero-admin, and survives daemon restarts without a separate lifecycle. The mother node uses PostgreSQL for the hive registry because it's multi-tenant; the local daemon is single-tenant. -→ [`crates/colibri-store/src/lib.rs`](../../crates/colibri-store/src/lib.rs) +→ [`crates/colibri-ledger/src/lib.rs`](../../crates/colibri-ledger/src/lib.rs) ## See also