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
This commit is contained in:
glm-5.3-flash committed 2026-09-29 09:24:47 +00:00
1 parent 41b0894740
commit 82653c31b6
10 files changed
+223 -20

No files matched your search

+5 -2
View File
@@ -96,8 +96,10 @@ zero door code — POC-1 is that shape verbatim. On the direct-ALPN path
(`git-upload-pack <repo>\0host=…\0\0version=2\0` /
`git-receive-pack <repo>\0host=…\0`) as the in-band preamble (ADR-016).
Any alkcall-speaking client (including alkgit's own consumer half,
`GitSession`) can use either path. This is the baseline path; the
http/ssh doors are conveniences layered on top for stock git clients.
`GitSession` — ADR-017's typed fetch/push client) can use either path.
This is the baseline path; the http/ssh doors are conveniences layered
on top for stock git clients, and the replicator path of the p2p
deployment (direct push/pull between replicators) rides it directly.
## Assembly (downstream responsibility)
@@ -124,6 +126,7 @@ deployment's docs, not here.
| [014](decisions/014-v2-negotiation-ack-loop.md) | Negotiation | one round per POST; ack section is per-round, stateless |
| [015](decisions/015-manage-grant-and-op-gate.md) | Manage grant + op gate | `manage` tier, admin-OR-manage op gate |
| [016](decisions/016-native-session-preamble.md) | Native session preamble | `{repo, service}` open-op params, request-line preamble, service in the tuple |
| [017](decisions/017-consumer-half-git-session.md) | Consumer half | `GitSession` typed client — the direct-connection push/pull primitive |
## Open Questions