015-embedding-pipeline
Embeddings: a local default, a governed provider trait, an outbox worker that cannot lose a memory
Lifecycle approvedImplementation in-progressVerification unknownQualification unknown
The predecessor captured a memory in two non-atomic calls: insert the row, then update the embedding. A failure between them produced a memory that search could never reach and nothing ever retried. This spec makes the second half a durable job: capture stages outbox work in the same transaction as the row, a worker drains it idempotently with backoff and a dead letter state that preflight reports, and every stored vector names the model, dimension, and normalization it was produced under so a model change is a migration rather than a silent reinterpretation.
Read the full pinned specification ↗Relationships
depends on
depended on by
Claimed units
- establishes
{ "kind": "file", "path": "crates/aicortex-embed/Cargo.toml" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/src/lib.rs" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/src/provider.rs" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/src/local.rs" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/src/remote.rs" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/src/chunk.rs" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/src/worker.rs" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/src/registry.rs" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/src/migrations.rs" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/tests/worker.rs" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/tests/chunk.rs" } - establishes
{ "kind": "file", "path": "crates/aicortex-embed/testdata/vectors/" } - establishes
{ "kind": "file", "path": "crates/aicortex-store/src/embedding_memory.rs" } - extends
{ "nature": "additive", "spec": "012-store-schema-and-repositories", "unit": { "kind": "file", "path": "crates/aicortex-store/src/migrations.rs" } } - extends
{ "nature": "additive", "spec": "012-store-schema-and-repositories", "unit": { "kind": "file", "path": "crates/aicortex-store/src/lifecycle.rs" } } - extends
{ "nature": "additive", "spec": "012-store-schema-and-repositories", "unit": { "kind": "file", "path": "crates/aicortex-store/src/memory_repo.rs" } } - extends
{ "nature": "additive", "spec": "012-store-schema-and-repositories", "unit": { "kind": "file", "path": "crates/aicortex-store/src/lib.rs" } } - extends
{ "nature": "additive", "spec": "010-chassis-adoption-and-workspace", "unit": { "kind": "file", "path": "apps/aicortex/manifest.toml" } } - extends
{ "nature": "additive", "spec": "012-store-schema-and-repositories", "unit": { "kind": "file", "path": "crates/aicortex-store/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "014-memory-lifecycle-and-erasure", "unit": { "kind": "file", "path": "crates/aicortex-store/src/erasure.rs" } } - extends
{ "nature": "additive", "spec": "012-store-schema-and-repositories", "unit": { "kind": "file", "path": "crates/aicortex-store/tests/common/mod.rs" } } - extends
{ "nature": "additive", "spec": "014-memory-lifecycle-and-erasure", "unit": { "kind": "file", "path": "crates/aicortex-store/tests/lifecycle.rs" } } - extends
{ "nature": "additive", "spec": "012-store-schema-and-repositories", "unit": { "kind": "file", "path": "crates/aicortex-store/tests/repo.rs" } } - extends
{ "nature": "additive", "spec": "012-store-schema-and-repositories", "unit": { "kind": "file", "path": "crates/aicortex-store/tests/schema.rs" } } - extends
{ "nature": "additive", "spec": "014-memory-lifecycle-and-erasure", "unit": { "kind": "file", "path": "crates/aicortex-store/tests/erasure.rs" } } - extends
{ "nature": "additive", "spec": "013-write-gate-and-redaction", "unit": { "kind": "file", "path": "crates/aicortex-gate/tests/common/mod.rs" } } - extends
{ "nature": "additive", "spec": "013-write-gate-and-redaction", "unit": { "kind": "file", "path": "crates/aicortex-gate/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "010-chassis-adoption-and-workspace", "unit": { "kind": "file", "path": "apps/aicortex/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "010-chassis-adoption-and-workspace", "unit": { "kind": "file", "path": "apps/aicortex/src/main.rs" } } - extends
{ "nature": "additive", "spec": "010-chassis-adoption-and-workspace", "unit": { "kind": "file", "path": "apps/aicortex/src/cell.rs" } } - extends
{ "nature": "additive", "spec": "012-store-schema-and-repositories", "unit": { "kind": "file", "path": "apps/aicortex/tests/migrate.rs" } } - extends
{ "nature": "additive", "spec": "053-host-library-mode", "unit": { "id": "aicortex-external-host-fixture", "kind": "crate" } } - extends
{ "nature": "additive", "spec": "010-chassis-adoption-and-workspace", "unit": { "anchor": "workspace.dependencies", "file": "Cargo.toml", "kind": "section" } } - constrains
{ "flavor": "invariant-freeze", "note": "a memory is never left unembedded and unreported; constitution XI", "unit": { "kind": "file", "path": "crates/aicortex-embed/src/worker.rs" } }
Source headings
- 015: Embeddings
- 1. Purpose
- 2. Territory
- 3. Behavior
- 4. Functional requirements
- 5. Acceptance criteria
- 6. Out of scope
- 7. Resolved decisions
- Status (2026-09-29, in progress: runtime and chassis hooks required)
- Verification
Frozen anchors
No frozen anchors declared.