Scaffolds the workspace per architecture/generic.md §1 and implements
phases 0-3 of doc/spec.md §12.
Crates:
entities manifest/ref/repo schemas, bucket key layout, config, the
X-Error-Code taxonomy. No I/O.
core resolver, freeze pinning, single-flight, the streaming tee,
policy, gc/verify/refresh. Defines the Store and Upstream
ports.
data object_store (S3 + local) and reqwest Hub adapters.
api the axum surface: resolve, model/dataset info, tree, refs,
whoami, metrics, bearer auth, range handling.
bin one binary: serve plus fetch/pin/refresh/list/show/rm/gc/
verify/doctor.
Deployment targets bob.hanzalova.internal:20482 (port derived per
architecture/port-allocations.md §3), storing to the MinIO on
caveman.kosherinata.internal, fronted by hanzalova at rf.internal.
Ships the sysusers drop-in, hardened unit, firewalld service, nginx
vhost, config template, infra-setup.sh and the Gitea Actions
ci/deploy/conformance workflows.
Testing: 112 unit and integration tests, including the sovereignty
suite (cold fetch, sealed replay, single-flight, client disconnect,
range resume, freeze stability, gc-after-rm, digest mismatch), plus a
conformance suite driving a pinned huggingface_hub against a real Hub.
Deviations from the spec, all deliberate:
- one binary with subcommands (spec §9) rather than generic.md's
separate -api and -cli binaries; the library split is unchanged.
- a dedicated sysusers account and hardened unit (generic.md §8)
rather than the spec's illustrative DynamicUser unit.
- manifests carry an optional repo_tree recorded verbatim, resolving
spec §13's "record whole, filter on read" question for the tree
endpoint as well as model-info.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XZG2i4AmfSqE97EJGBVb64
37 lines
994 B
TOML
37 lines
994 B
TOML
[package]
|
|
name = "rustingface-api"
|
|
description = "The axum HTTP surface: Hub-compatible resolve, metadata and header replay."
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
authors.workspace = true
|
|
repository.workspace = true
|
|
|
|
[dependencies]
|
|
rustingface-core.workspace = true
|
|
rustingface-entities.workspace = true
|
|
|
|
axum.workspace = true
|
|
bytes.workspace = true
|
|
futures.workspace = true
|
|
http.workspace = true
|
|
metrics.workspace = true
|
|
metrics-exporter-prometheus.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
subtle.workspace = true
|
|
time.workspace = true
|
|
tokio.workspace = true
|
|
tower.workspace = true
|
|
tower-http.workspace = true
|
|
tracing.workspace = true
|
|
|
|
[dev-dependencies]
|
|
hex.workspace = true
|
|
http-body-util.workspace = true
|
|
rustingface-data.workspace = true
|
|
sha2.workspace = true
|
|
tokio = { workspace = true, features = ["macros", "rt-multi-thread", "test-util"] }
|
|
tower = { workspace = true, features = ["util"] }
|