Skip to content

docs(design): specify request-minimal object protocol - #201

Open
forhappy wants to merge 10 commits into
mainfrom
codex/request-minimal-protocol-design
Open

forhappy wants to merge 10 commits into
mainfrom
codex/request-minimal-protocol-design

Conversation

@forhappy

@forhappy forhappy commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • define a hard-cutover v2 protocol built around one immutable publication capsule and one mutable CAS root
  • set exact clean-push budgets: three requests with provider-validated checksums, four with independent readback, and P + 4 / P + 5 for multipart uploads
  • distinguish the capsule storage container from the Git packfile format required by clone and fetch
  • require every checkpoint to include a self-contained non-thin Git pack plus locator, index, visibility, and reconstruction evidence
  • specify end-to-end full clone, incremental fetch/pull, shallow fetch, partial clone, lazy object recovery, checkout, and hydration behavior
  • define honest read minima: one root GET for advertisement, two reads for an exact authorized checkpoint clone, 2 + D ahead of checkpoint, and 1 + R for incremental fetch
  • enforce a hard delta-depth bound with background checkpointing and foreground checkpoint/backpressure when maintenance falls behind
  • specify integrity, authorization, observability, qualification, GC, and hard-cutover requirements
  • link the proposal from the current push design

Context

PR #200 reduced the modeled v1 clean tiny-push budget from roughly 60 logical object-store operations to roughly 37 without changing the storage format. This proposal describes the hard-cutover protocol required to reach a three-request production clean path while keeping durability, atomic ref publication, Git wire compatibility, reconstruction, authorization, race handling, and GC safety non-negotiable.

Key decisions

The normal push path is:

  1. GET and pin v2/root during advertisement.
  2. Upload one checksummed immutable capsule.
  3. CAS v2/root to atomically publish all ref edits.

Standalone .pack, .idx, and .rev object-store keys disappear, but Git pack bytes remain authenticated sections inside capsules. Crab continues to emit exactly one standard upload-pack packfile response; it does not rely on packfile-uris or expose raw capsule bodies to Git.

A checkpoint includes a complete self-contained Git pack. Exact fully-authorized clones can stream it directly. Other clones and fetches select authorized objects from the checkpoint and bounded capsule frontier, resolve all required delta bases, and generate one self-contained or negotiation-safe thin response pack.

The design intentionally trades possible redundant bytes for fewer high-latency remote requests. Existing remote content may be omitted only when it is authoritatively reachable from the pinned base root.

Validation

  • git diff --check
  • npm run build
  • npm run check:links — 398 HTML pages and 4307 fragments

Documentation-only change; no runtime behavior changes.

forhappy and others added 10 commits September 13, 2026 00:39
* feat(http-server): harden multi-cloud deployments

* fix(http-server): lock Terraform providers cross-platform

* feat(http-server): expose production metrics

* fix(http-server): preserve rollout drain budget

* fix(http-server): fail closed on cluster ingress

* fix(http-server): require the TLS ingress path

* feat(http-server): publish attested release images

* feat(http-server): publish the deployment chart

* test(http-server): qualify abrupt receive recovery

* feat(http-server): qualify deployment recovery

* docs(http-server): clarify pod readiness

* feat(http-server): add baseline deployment alerts

* feat(http-server): bound storage recovery history

* fix(http-server): reject mutable image inputs

* feat(http-server): own Prometheus pod discovery

* docs(http-server): define workload identity egress

* feat(http-server): generate team deployment config

* feat(http-server): resume LFS downloads

* feat(http-server): add durable LFS locking

* feat(http-server): enforce LFS locks during receive

* feat(http-server): add live Kubernetes qualification

* feat(http-server): enforce resilient Kubernetes placement

* feat(http-server): coordinate transfer admission across replicas

* feat(http-server): verify admission storage on startup

* feat(http-server): add storage coordination preflight

* ci(http-server): require storage coordination probe

* test(http-server): qualify storage preflight in Compose

* fix(http-server): probe storage before binding

* feat(http-server): secure team repository bootstrap

* feat(http-server): manage repository membership

* test(http-server): qualify live catalog discovery

* feat(http-server): verify complete storage access

* test(http-server): assert storage probe cleanup

* ci(http-server): automate live Kubernetes evidence

* ci(http-server): bind live evidence to releases

* docs(http-server): bound live qualification access

* ci(http-server): enable non-admin AKS evidence

* fix(http-server): narrow EKS storage permissions

* fix(http-server): narrow GKE storage role

* ci(http-server): drop persisted checkout credentials

* feat(http-server): enforce TLS for S3 storage

* build(http-server): exclude local secrets from image context

* feat(http-server): harden nginx streaming ingress

* fix(http-server): prevent ingress request replay

* ci(http-server): attest live qualification receipts

* fix(http-server): allow unhealthy pod eviction

* feat(http-server): enforce restricted pod security

* fix(http-server): enforce workload identity in Helm

* test(http-server): prove management network isolation

* test(http-server): enforce provider storage boundaries

* ci(http-server): publish signed deployment records

* docs(http-server): reuse signed release coordinates

* test(http-server): validate release handoff before tags

* ci(http-server): derive live qualification artifacts

* test(http-server): prove cloud workload identity wiring

* test(http-server): attest provider workload identity

* ci(http-server): bind released chart package

* docs(http-server): isolate provider qualification environments

---------

Co-authored-by: Test <test@example.com>
Co-authored-by: Test <test@example.com>
Co-authored-by: Test <test@example.com>
* perf(s3-gateway): sustain large repository throughput

* fix(s3-gateway): prevent cyclic delta locators

* fix(git): satisfy forward clippy lint
* feat(repository): add interactive data workbench

* fix(repository): refresh DuckDB worker policy

* feat(repository): mature data workbench

* feat(repository): add intelligent SQL editing

* feat(repository): add Shiki code themes

* feat(repository): show latest commit per directory entry

* fix(repository): restore npm 10 lock compatibility

* fix(repository): accept visible SQL completions immediately

* test(repository): budget multi-format browser qualification

CI can exhaust Playwright's default 30-second test budget after the PDF preview, leaving the final ONNX assertion less than a second. Give only this eight-format qualification 60 seconds while retaining the global and assertion timeouts.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant