Layer A + B of convergence wave. Extract common SQLite-CRUD + graph logic into kei-entity-store engine; introduce JSON Schema fragments; pilot-migrate kei-task to verify parity. New crate _primitives/_rust/kei-entity-store/ (1151 LOC): - src/schema.rs — EntitySchema + FieldDef + enabled_verbs + fts_columns + edge_table + custom_migrations - src/engine.rs — Store::open with WAL pragma + migration runner - src/verbs/ — 8 data-driven verb modules (create/get/list/search/ update/delete/link/rank) uniform JSON-in/JSON-out signature - src/error.rs — typed VerbError enum - tests/verb_smoke.rs — 10/10 green New _schemas/fragments/ (83 LOC JSON): - entity-base.json, titled.json, titled-content.json, edge.json kei-task pilot migration: - TASK_SCHEMA: EntitySchema static (67 LOC, was 58) - store.rs becomes thin shim over engine::Store - atoms/create.rs + atoms/search.rs delegate to engine verbs - atoms/schemas/*.json use $ref to _schemas/fragments/ (DRY) - Task-specific secondary tables (milestones, task_deps) stay via schema.custom_migrations; cycle-detection in deps.rs stays hand-rolled (domain logic, not generic CRUD) - 9/9 tests green — full behavioural parity Convergence delta: - kei-task touched files: 342 → 389 LOC (+47 for JSON marshalling boundary; net wash on pilot) - BUT each remaining 5 sibling crate can shrink ~400-500 LOC on migration - Expected total reduction when all 6 migrated: ~2500 LOC across the cluster Follow-ups declared: - Migrate kei-chat-store, kei-content-store, kei-social-store to engine - Migrate kei-sage (needs string-id edge variant; currently generic link/rank assume int ids) - Migrate kei-crossdomain - Expose list/delete atoms in kei-task (engine supports, atoms not yet) - Fold kei-curator as engine::hygiene module (per P4 audit) - Fold kei-search-core entities, keep workflow as thin kei-search-pipeline Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
65 lines
1.7 KiB
TOML
65 lines
1.7 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"kei-ledger",
|
|
"kei-migrate",
|
|
"kei-changelog",
|
|
"ssh-check",
|
|
"firewall-diff",
|
|
"mock-render",
|
|
"visual-diff",
|
|
"tokens-sync",
|
|
"kei-memory",
|
|
"kei-conflict-scan",
|
|
"kei-refactor-engine",
|
|
"kei-graph-check",
|
|
"kei-store",
|
|
# v0.14 LBM port — 10 new MCP-core primitives
|
|
"kei-router",
|
|
"kei-sage",
|
|
"kei-task",
|
|
"kei-chat-store",
|
|
"kei-crossdomain",
|
|
"kei-search-core",
|
|
"kei-content-store",
|
|
"kei-social-store",
|
|
"kei-curator",
|
|
"kei-auth",
|
|
# v0.15 artifact handoff pipeline
|
|
"kei-artifact",
|
|
# v0.18 exobrain CLI
|
|
"keisei",
|
|
# v1 substrate — local web wizard for scaffolding atoms (Stream A)
|
|
"kei-forge",
|
|
# v1 substrate — atom invocation runtime + schema linter (Stream D)
|
|
"kei-runtime",
|
|
# v1 substrate — shared atom discovery + frontmatter + safe path (Stream E)
|
|
"kei-atom-discovery",
|
|
# agent substrate v1 — phase 3 runtime (Capability trait + registry + compose/spawn/verify)
|
|
"kei-agent-runtime",
|
|
# agent substrate v1 — phase 3 hook-protocol CLI adapter
|
|
"kei-capability",
|
|
# v0.24 unification — unified VPS provisioner (supersedes provision-{hetzner,vultr}.sh)
|
|
"kei-provision",
|
|
# Convergence Layer A — schema-driven verb-template engine for SQLite-CRUD stores
|
|
"kei-entity-store",
|
|
]
|
|
|
|
[workspace.package]
|
|
edition = "2021"
|
|
rust-version = "1.75"
|
|
|
|
[workspace.dependencies]
|
|
clap = { version = "4", features = ["derive"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
serde_yaml = "0.9"
|
|
sha2 = "0.10"
|
|
image = { version = "0.25", default-features = false, features = ["png"] }
|
|
regex = "1.10"
|
|
|
|
[profile.release]
|
|
opt-level = "z"
|
|
lto = true
|
|
strip = true
|
|
codegen-units = 1
|