perf: batch manifest fetch + recover dev-branch work from sparse snapshots
- get_last_commit_for_file: replace N+1 loop with get_snapshot_manifests_batch - _fetch_file_history: O(n) queries → O(1) with batch SELECT - blob_page: run phases 2/3/4 concurrently with asyncio.gather - add musehub_repository.py service module - recover alembic migration, docs, and test files from dev branch that were lost when dev was rebuilt from main
sha256:29414592f1fb31f0db86360710a45891bb4ef848e3247fb83ad6e0ff5bc0d6cb
sha
+300
~4
symbols
sha256:c926ee4a11115f6f2f543c89aed79be0ec29804943c5cc15298be4161058df99
snapshot
+300
symbols added
~4
symbols modified
0
dead code introduced
Semantic Changes
304 symbols
+
Attempt 1 — Fresh push after delete+recreate (failed: CF 524)
section Attempt 1 — Fresh push after delete+recreate (failed: CF 524) L66–72
+
Attempt 2 — Repair script for ghost objects (worked, but wrong problem)
section Attempt 2 — Repair script for ghost objects (worked, but wrong problem) L72–78
+
Attempt 3 — Stream _WireResponse response frames (froze)
section Attempt 3 — Stream _WireResponse response frames (froze) L78–102
+
The Goldilocks Zone (What "Fixed" Looks Like)
section The Goldilocks Zone (What "Fixed" Looks Like) L130–141
+
What We Do NOT Know (Unknowns to Resolve)
section What We Do NOT Know (Unknowns to Resolve) L102–112
+
Client-side batching (no CF Worker configured for staging)
section Client-side batching (no CF Worker configured for staging) L23–38
+
What We Now Know About the Push Path (corrected)
section What We Now Know About the Push Path (corrected) L224–246
+
Generating a Cloudflare Origin Certificate
section Generating a Cloudflare Origin Certificate L116–145
+
Muse Wire Protocol — Four Verbs: Status, Bugs, and Fix Plan
section Muse Wire Protocol — Four Verbs: Status, Bugs, and Fix Plan L1–288
+
Push — POST /{owner}/{slug}/push/stream
section 1. Push — POST /{owner}/{slug}/push/stream L33–104
+
Atomic tests for push (must all pass before scaling up)
section Atomic tests for push (must all pass before scaling up) L88–104
+
Push P3 — current freeze: what we need to find out
section Push P3 — current freeze: what we need to find out L73–88
+
Fetch — POST /{owner}/{slug}/fetch/stream
section 2. Fetch — POST /{owner}/{slug}/fetch/stream L104–165
+
Pre-H-frame timing profile (830 commits, 500 objects, localhost)
section Pre-H-frame timing profile (830 commits, 500 objects, localhost) L138–149
+
py — fetch side)
section What the server does (musehub/services/musehub_wire.py — fetch side) L118–129
+
Step 2 — Add server-side timing logs to push
section Step 2 — Add server-side timing logs to push L245–259
+
Step 3 — Audit fetch/stream server response
section Step 3 — Audit fetch/stream server response L259–265
+
Step 5 — Fix fetch/stream streaming if needed
section Step 5 — Fix fetch/stream streaming if needed L270–277
+
test_file_history_calls_batch_fetch_once
function
async_function test_file_history_calls_batch_fetch_once L173–207
+
test_file_history_does_not_call_per_commit_manifest_fetch
function
async_function test_file_history_does_not_call_per_commit_manifest_fetch L142–169
+
test_file_history_respects_limit
function
async_function test_file_history_respects_limit L281–300
+
test_file_history_returns_empty_when_file_not_in_head
function
async_function test_file_history_returns_empty_when_file_not_in_head L253–264
+
test_file_history_returns_empty_when_no_commits
function
async_function test_file_history_returns_empty_when_no_commits L268–277
+
test_file_history_returns_only_commits_where_file_changed
function
async_function test_file_history_returns_only_commits_where_file_changed L216–249
+
test_file_history_unchanged_file_returns_one_entry
function
async_function test_file_history_unchanged_file_returns_one_entry L304–321
+
test_blob_page_phases_run_concurrently
function
async_function test_blob_page_phases_run_concurrently L294–357
+
test_last_commit_does_not_call_per_commit_manifest_fetch
function
async_function test_last_commit_does_not_call_per_commit_manifest_fetch L128–153
+
test_last_commit_returns_commit_that_introduced_current_version
function
async_function test_last_commit_returns_commit_that_introduced_current_version L197–222
+
test_last_commit_returns_none_when_commit_not_found
function
async_function test_last_commit_returns_none_when_commit_not_found L275–285
+
test_last_commit_returns_none_when_file_missing_from_head
function
async_function test_last_commit_returns_none_when_file_missing_from_head L259–271
+
test_last_commit_returns_oldest_unbroken_run
function
async_function test_last_commit_returns_oldest_unbroken_run L226–255
+
test_last_commit_uses_batch_fetch
function
async_function test_last_commit_uses_batch_fetch L157–188
+
test_i1_local_backend_put_is_durable
function
function test_i1_local_backend_put_is_durable L132–147
+
test_i2_external_ref_in_db_but_missing_from_storage_is_rejected
function
async_function test_i2_external_ref_in_db_but_missing_from_storage_is_rejected L155–225
+
test_i3_successful_push_all_objects_retrievable
function
async_function test_i3_successful_push_all_objects_retrievable L234–283
+
test_i4_integrity_check_uses_backend_exists
function
function test_i4_integrity_check_uses_backend_exists L290–307
+
test_t1_wire_response_sends_headers_before_consuming_full_stream
function
function test_t1_wire_response_sends_headers_before_consuming_full_stream L136–173
+
test_t2_push_response_is_frame_stream
function
async_function test_t2_push_response_is_frame_stream L181–231
+
test_t3_wire_push_stream_emits_progress_during_commit_loop
function
function test_t3_wire_push_stream_emits_progress_during_commit_loop L238–274
+
test_404_manifest_miss_and_storage_miss_have_distinct_messages
method
async_method test_404_manifest_miss_and_storage_miss_have_distinct_messages L227–259
+
test_binary_file_served_as_attachment
method
async_method test_binary_file_served_as_attachment L295–313
+
test_returns_200_for_file_in_manifest_and_storage
method
async_method test_returns_200_for_file_in_manifest_and_storage L171–189
+
test_returns_404_when_file_not_in_manifest
method
async_method test_returns_404_when_file_not_in_manifest L191–205
+
test_returns_404_when_object_missing_from_storage
method
async_method test_returns_404_when_object_missing_from_storage L207–225
+
test_text_file_served_as_text_plain
method
async_method test_text_file_served_as_text_plain L276–293
+
test_local_backend_exists_returns_true_after_put
method
async_method test_local_backend_exists_returns_true_after_put L134–138
+
test_local_backend_exists_single_arg
method
async_method test_local_backend_exists_single_arg L127–132
+
test_local_backend_exists_two_args_raises
method
async_method test_local_backend_exists_two_args_raises L140–144
+
test_s3_backend_exists_two_args_raises
method
async_method test_s3_backend_exists_two_args_raises L158–162
0 comments
To add a comment, use the Muse CLI:
muse hub commit comment sha256:29414592f1fb31f0db86360710a45891bb4ef848e3247fb83ad6e0ff5bc0d6cb --body "your comment"
No comments yet. Be the first to start the discussion.