Files
glm-5.3-flash 82653c31b6 docs(architecture): ADR-017 — consumer half, GitSession as typed client (review 001 A-5)
- new ADR-017: GitSession is a real typed client in v1 (ls_refs/fetch/
  push), grounded in the two deployment use cases — the p2p replicator
  is the named downstream and needs the client protocol layer; the
  thin-wrapper reading is superseded
- fetch client reuses gix-protocol (async-client) over a custom
  alkcall gix_transport::client::Transport impl (handshake writes the
  ADR-016 request line on the direct path; the channels open-op params
  carry it otherwise); push hand-rolled to ADR-013's shapes (gitoxide
  has no send-pack client)
- storage-agnostic: packs stream both ways to caller-owned consumers;
  no in-session credentials (alkcall transport authenticates); client
  sessions carry ADR-009 Limits (client is also internet-facing)
- manifest: gix-protocol/gix-transport gain async-client features
  (verified against published tree, MSRV 1.88)
- amend ADR-010 (consumer-half bullet) and ADR-012 §4 (the deferred
  gix-protocol call — resolved; rider superseded); backend/transport/
  overview/doors wording; review 001 A-5 marked resolved

verification: cargo check (default, --all-features, --no-default-features,
--features sha256), cargo +1.88 check, cargo test, clippy
-D warnings, fmt --check — clean across the matrix
2026-09-29 09:24:47 +00:00

72 lines
3.0 KiB
TOML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[package]
name = "alkgit"
version = "0.0.1"
edition = "2021"
rust-version = "1.88"
license = "MIT OR Apache-2.0"
repository = "https://git.alk.dev/alkdev/alkgit"
description = "Git smart protocol for the alk family: pkt-line substrates, protocol V2 serving (upload-pack/receive-pack), producer/consumer halves on alkcall channels, and backend traits with a feature-gated gitoxide implementation"
keywords = ["git", "protocol", "alkcall", "vcs", "network"]
categories = ["network-programming", "asynchronous"]
[lib]
name = "alkgit"
path = "src/lib.rs"
[features]
default = ["gix", "registry-file"]
# gitoxide-backed engine implementations (refs, pack gen/ingest). The
# `gix` facade crate is NOT a dependency (ADR-012 §4) — the impls drive
# the component crates directly (POC-2's shape). Disable for a
# wire/protocol-only embed or with your own object-storage backend.
gix = [
"dep:gix-odb",
"dep:gix-pack",
"dep:gix-ref",
"dep:gix-object",
"dep:gix-fsck",
]
# File-backed GitRegistry/GitRegistryStore default (per-repo record
# files + in-memory index) + the `git/repo/*` op set (ADR-012 §2–3).
# No gitoxide. Disable to bring your own registry backend.
registry-file = []
# sha256 passthrough (untested end-to-end; sha1 is pinned by default — OQ-05).
# gix-hash stays always-on with sha1: the wire layer needs it, and gix-hash
# fails to compile with neither hash feature selected (compile-time-rejected
# invariant, see docs/research/gitoxide.md).
sha256 = ["gix-hash/sha256"]
[dependencies]
alkcall = "0.8"
# Trait-family dyn-compatibility (ADR-012 §1: all backend traits are
# #[async_trait] — bare `async fn` in a trait is not dyn-compatible,
# review 001 A-2; the family-wide pattern: alktty TtyBackend, alkcall
# ProtocolHandler).
async-trait = "0.1"
gix-odb = { version = "0.84", optional = true, default-features = false, features = ["sha1"] }
gix-pack = { version = "0.74", optional = true, features = ["sha1"] }
gix-ref = { version = "0.67", optional = true }
gix-object = { version = "0.64", optional = true, features = ["sha1"] }
gix-fsck = { version = "0.25", optional = true, features = ["sha1"] }
gix-hash = { version = "0.26", features = ["sha1"] }
gix-packetline = "0.22"
# Consumer half (ADR-017): gix-protocol with its async client (handshake +
# ls-refs + fetch machinery) driven by a custom alkcall Transport impl
# (gix-transport's client::Transport is the transport-agnostic seam);
# the push client is hand-rolled to ADR-013's shapes (gitoxide has no
# send-pack client).
gix-protocol = { version = "0.65", features = ["async-client"] }
gix-transport = { version = "0.59", features = ["async-client"] }
tokio = { version = "1", default-features = false, features = ["rt", "sync", "io-util", "macros", "time"] }
tokio-util = { version = "0.7", features = ["compat"] }
futures = "0.3"
bytes = "1"
thiserror = "2"
tracing = "0.1"
parking_lot = "0.12"
[dev-dependencies]
tokio = { version = "1", features = ["full", "test-util", "macros"] }
[profile.release]
lto = "thin"