Files
alkgit/docs/research
glm-5.3-flash b9c5aaee65 feat(fetch): accept include-tag, honor-by-omission — OQ-19 rider 3 (real-client fetch grammar tokens)
The rider-3 sessions ran real git 2.43.0 against the landed machine
over both substrate doors for the first time:

- tests/real_client.rs — the real-client sessions: the
  git-daemon-framed duplex door (POC-1's tcp bridge shape, the frame
  git-upload-pack <repo>\0host=…\0\0version=2\0) and the POC-3-shape
  smart-http stateless door; a real clone, a configured
  include-tag-sending fetch, and a transfer.advertiseSid=true client,
  per door, with packet-trace assertions. Rows skip quietly when the
  git binary is absent.
- Decision (flagged for the wave-5 gate): include-tag accepted and
  honored by omission — the token is un-gated in the real V2 client's
  send path (transport.c v2.43.0: args.include_tag = followtags;
  builtin/fetch.c sets it for every configured fetch) and V2's fetch=
  feature list has no slot to advertise or retract it, so the
  pre-decision decline demonstrably broke a real configured fetch
  (fatal: remote error: fetch: unexpected argument "include-tag");
  the pack is the want closure as generated, identical with and
  without the token.
- Decision (flagged for the wave-5 gate): session-id= stays declined —
  the honest retraction. git's V2 client sends the pre-line only when
  the server advertises the session-id capability (fetch-pack.c:
  advertise_sid && server_supports_v2("session-id"); captured live) —
  the decline is unreachable by a conforming client and accepting it
  would be advertising what we don't serve.
- src/fetch.rs — the accepted set grew by one (include_tag, the
  FetchArgs field + parse row); the session-id pre-line row pins the
  fail-closed decline; the advertisement is unchanged and honest.
- tests/fetch_machines.rs — the accepted-set row + the identical-pack
  honor-by-omission row.
- docs/research/git-protocol.md — the fetch-argument inventory
  corrected in place: grammar vs traffic (include-tag rides configured
  fetches only; the capability pre-lines are exactly agent +
  object-format).
- tasks/architecture/oq-19-wire-validations.md — the rider-3 section
  records both outcomes with bases.

Verification: cargo test (13 suites), -p alkgit,
-p alkgit-substrate --all-features, --all-features, both clippies
(-D warnings), fmt --check, cargo doc --no-deps, taskgraph validate
— all green; the real-client rows 3× repeat-stable.
2026-10-23 08:02:16 +00:00
..

alkgit Research Index

Phase 0 (exploration) research. Feeds phase 1 (architecture).

Doc Topic Status
vision.md Vision, guiding principles, non-goals, phase-0 checklist draft v2 (amended 2026-09-21)
gitoxide.md gitoxide (gix) capability + version alignment initial pass complete
alk-stack.md alk stack fit, integration surface, gitea-lesson constraints initial pass complete
git-protocol.md Server-side git smart protocol inventory (what we own) initial pass complete
reference-policy.md Licenses, reference projects, reuse policy complete
pocs.md POC plan (what to validate before architecture commits) planned
poc-1-findings.md POC-1: pkt-line over alkcall BiStream (duplex producer) complete — proceed
poc2-findings.md POC-2: server-side pack generation (streaming pipeline) complete — proceed
poc3-findings.md POC-3: smart-http shape through alkhttp (stateless substrate) complete — proceed
push-captures.md Normative receive-pack (push) wire record (real git captures) complete — ADR-013 basis
negotiation-captures.md Normative V2 negotiation record (real git captures + source) complete — ADR-014 basis
substrate-recomposition.md Re-baseline on alkstore + alkblobs: registry/object/ref placement, LFS, recomposition POCs (DQ ledger + the ADR-round outcome note) complete — ADR-019..023 basis
pocl-findings.md POC-L: LFS end-to-end on alkblobs' ops complete — proceed
poco-findings.md POC-O: alkblobs as the git object store (fetch/ingest/refs) complete — proceed
pocr-findings.md POC-R: composed registry + reactivity complete — proceed
pocx-findings.md POC-X: two-node replication on substrate-backed stores (GitSession prototype) complete — proceed

Key findings so far

  • gitoxide covers storage + pkt-line; the server half of the smart protocol is ours to write (gix-protocol/transport are client-side).
  • Published gix 0.87.1 == local clone base; pin crates.io versions.
  • alkcall BiStream is the natural substrate under pkt-line for both ssh and http paths.
  • The incompatible-license prior art confirms feasibility but contributes nothing; policy in reference-policy.md.
  • gix with default-features = false requires an explicit hash feature; workspace pins sha1 with a sha256 passthrough feature everywhere.

Convergence criteria (phase 0 → phase 1)

Phase 0 is done when POC-1..3 have results and a recommended-approach summary is written here (append below). Then the Architect produces docs/architecture/ per sdd_process.

Convergence (2026-09-21): phase 0 gates all pass (POC-1/2/3 proceed). Phase 1 opened with docs/architecture/; the structural decision is ADR-010 — pure protocol crate following the alktty/alktunnels template (the v1 "monorepo + alkgitd binary" framing in these research docs was an init-agent artifact, amended in vision.md v2). POC-1 maps to the producer half, POC-2 to the gix backend implementation, POC-3 to the stateless substrate consumed by alkhttp's future git feature.