feat: presigned R2 push path for large repos
Add wire_push_presign() service function and POST /push/presign endpoint. For pushes above threshold (500 objects or 50 MB), client gets presigned R2 PUT URLs, uploads directly to R2 bypassing Cloudflare's ~100s timeout, then sends a zero-O-frame push/stream to finalize the commit. The server's existing referential integrity check (Phase C) accepts objects already in storage. LocalBackend returns stream_these for local dev fallback.
Tests: P1-P7 covering LocalBackend, mocked S3, empty list, zero-O-frame push/stream success and failure, full round-trip, and URL key format.
sha256:52b9750b58326265a6b16b945e58ce31ace2cde7a8ad6552085c1bcfd2f20274
sha
+45
~10
symbols
sha256:91840af951fd920ba74bbb25f4a58ca24f0b6fd79fa3af7793c9a98d488cdb10
snapshot
+45
symbols added
~10
symbols modified
0
dead code introduced
Semantic Changes
55 symbols
+
test_p1_local_backend_missing_goes_to_stream_these
function
async_function test_p1_local_backend_missing_goes_to_stream_these L201–230
+
test_p2_s3_backend_missing_gets_presigned_url
function
async_function test_p2_s3_backend_missing_gets_presigned_url L238–264
+
test_p4_zero_o_frames_all_prestored_commit_finalises
function
async_function test_p4_zero_o_frames_all_prestored_commit_finalises L289–340
+
test_p5_zero_o_frames_missing_objects_yields_422
function
async_function test_p5_zero_o_frames_missing_objects_yields_422 L348–391
+
test_p6_full_round_trip_presign_store_push
function
async_function test_p6_full_round_trip_presign_store_push L399–459
+
test_p7_s3_backend_presign_batch_url_format
function
async_function test_p7_s3_backend_presign_batch_url_format L467–494
0 comments
To add a comment, use the Muse CLI:
muse hub commit comment sha256:52b9750b58326265a6b16b945e58ce31ace2cde7a8ad6552085c1bcfd2f20274 --body "your comment"
No comments yet. Be the first to start the discussion.