The ops module's state substrate under feature `ops`, no op handlers yet (they land with ops-json-ops/ops-fetch/ops-put): - `OpsContext` — the context type the handler pairs capture: the `Arc<Store>`, the module config, the token registry, the per- namespace converter bindings, the fanout registry (re-exported from lib.rs) - The pin-token layer (ADR-010 §4 / ADR-012 §2): CSPRNG `PinToken` (32 bytes, `getrandom 0.4` — the decided minting form; counter and derivable forms rejected as guessable capabilities), the token↔(key, owner) mapping with process lifetime (retirement at conversion-confirmed or process end; no expiry machinery), the validity domain = the minting node (peers refuse unknown tokens with present: false, never an error) - The guard-custody split: `mint_fleet` (mapping only; the put handler's guard drops at response completion — its own act; the fleet-declaration and owner-instance checks ride the mint) vs `mint_custodial` (the registry holds the guard; nothing expires; refused under a fleet declaration) - The namespace→liveness-source binding: per-namespace `PinConverter` registration; the conversion trigger decided as the embedder-called confirm verb (probe-triggered conversion rejected: a read-gated op never mutates protection), riding `RegistryCore::convert`'s ordered step under the arbitration lock - The crate-internal store-core renewal access: `Store::ops_pin_renew`/`Store::ops_pin_check` (pub(crate), cfg all (ops, postgres)) routed through the fleet host — the W6-3 named consumer; the probe composition decided as verify-the-mapping-then-renew; no public-API widening, no backend side-door - The fanout registry (POC #3 finding A3): per-digest broadcasts, bounded subscriber channels, the late-joiner degrade signal (subscribe → None, channel end → verified get), and the Stall/Drop slow-subscriber policies - Dependency posture: serde/serde_json/getrandom enter as ops-gated optional deps; the default build's dependency tree verified unchanged; gc.rs's allow-scope notes updated to the landed state Verification: cargo test (default 73/19/3, module compiled out), cargo test --features ops (84/19/3, 11 new ops unit tests), cargo test --all-features (237/125/4); clippy --all-targets -D warnings across the default/ops/all-features/pg-pure variants; cargo fmt; cargo doc --no-deps zero warnings on the default and gated-ops builds (the all-features count at the pre-existing baseline).
46 lines
1.5 KiB
TOML
46 lines
1.5 KiB
TOML
[package]
|
|
name = "alkblobs"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
rust-version = "1.88"
|
|
license = "MIT OR Apache-2.0"
|
|
description = "Content-addressed blob storage: multi-hash put/get/verify store with pluggable backends, transport- and protocol-agnostic"
|
|
repository = "https://git.alk.dev/alkdev/alkblobs"
|
|
keywords = ["blobs", "content-addressed", "storage", "git", "gix"]
|
|
categories = ["asynchronous", "filesystem", "database"]
|
|
exclude = [".opencode/", "AGENTS.md", "docs/reviews/", "docs/research/", "docs/plans/", "tasks/", "docs/sdd_process.md"]
|
|
|
|
[workspace]
|
|
members = ["."]
|
|
exclude = []
|
|
|
|
[lib]
|
|
name = "alkblobs"
|
|
|
|
[features]
|
|
default = ["sqlite"]
|
|
sqlite = ["dep:rusqlite"]
|
|
postgres = ["dep:tokio-postgres", "dep:deadpool-postgres"]
|
|
mem = []
|
|
pg-lo = ["dep:tokio-postgres", "dep:deadpool-postgres"]
|
|
ops = ["dep:alkcall", "dep:serde", "dep:serde_json", "dep:getrandom"]
|
|
|
|
[dependencies]
|
|
tokio = { version = "1", default-features = false, features = ["rt", "sync", "io-util", "macros", "time"] }
|
|
thiserror = "2"
|
|
parking_lot = "0.12"
|
|
|
|
alkcall = { version = "0.8.1", optional = true }
|
|
deadpool-postgres = { version = "0.14", optional = true }
|
|
getrandom = { version = "0.4", optional = true }
|
|
hex = "0.4"
|
|
rusqlite = { version = "0.40", features = ["bundled"], optional = true }
|
|
serde = { version = "1", features = ["derive"], optional = true }
|
|
serde_json = { version = "1", optional = true }
|
|
sha1 = "0.10"
|
|
sha2 = "0.10"
|
|
tokio-postgres = { version = "0.7", optional = true }
|
|
|
|
[dev-dependencies]
|
|
tokio = { version = "1", default-features = false, features = ["rt-multi-thread"] }
|