{
  "summary": "B2 localizes this specimen’s expiry upstream of send submission, with 9.130515s inside store initialization; it does not identify the mechanism inside that interval. Next: one isolated fresh-store instrumentation/trace-readiness measurement, not another loaded suite. IR96/97 remain cause-unclassified. Read-only investigation; no execution, validation, changes, or peer-session inspection.",
  "files": [
    {
      "path": ".spt/preserved/deployah-294-armB-20260910/todlando-paired-stages.json:1-10,540-550",
      "description": "Diagnostic/candidate provenance, carried-in 0/6/12 amendment, and B2 first-pull timings."
    },
    {
      "path": ".spt/preserved/deployah-294-armB-20260910/B2/events.jsonl:60-87",
      "description": "Subject-only PID 42784 chronology and decoded pull-2 correlation; store-init, expiry, send-submission, registration, continuation."
    },
    {
      "path": ".spt/preserved/deployah-294-armB-20260910/ARM-B-REPORT.md:7-13,71-80,128-154",
      "description": "Lifecycle recorder failed before positive control; causal limits, residue amendment, and cleanup uncertainty."
    },
    {
      "path": "crates/spt-store/src/contextstore.rs:63-65,118-127",
      "description": "Explicit-root measurement seam delegates .seed.git initialization to BranchStore."
    },
    {
      "path": "crates/spt-store/src/branchstore.rs:62-134,673-705",
      "description": "HEAD check, directory creation, init/config subprocesses, retries and explicit backoff."
    },
    {
      "path": "crates/spt-store/src/gitrun.rs:79-190",
      "description": "Shared git child creation, pipe-drain threads, try_wait polling, 10ms sleeps, joins and error promotion."
    },
    {
      "path": "crates/spt-daemon/tests/sync.rs:184-215",
      "description": "Requester worker initializes store before request_sync; responder acceptance proceeds separately."
    }
  ],
  "architecture": "Current source path: requester thread → ContextStore::open_or_init_in(root) → BranchStore::open_or_init(root/.seed.git) → conditional filesystem/init/config work → gitrun::run_git → Command::spawn, drain threads, try_wait/sleep, joins. Retained timings describe diagnostic ed8ecd94a8a610815d5c2d6b54d3ed0f9d789d56, not candidate a9e786b24fe4e541dcd394ef428f225d72f3024a. Source citations identify the inspected working-tree seam; historical byte equality was not checked.",
  "report": "## Measured facts, not causes\n- B2 subject key is invocation B2 + two_tier_sync_lands_and_gate_refuses_server_side + PID 42784 + exchange 2 / first pull. Its clock is process_instant_since_diag_enable, not a cross-process wall clock (B2/events.jsonl:60-87).\n- poll.enter 38,092,898µs; requester.thread.enter 38,093,029µs; store_init.enter 38,093,068µs; store_init.exit 47,223,583µs. The measured store bracket is 9,130,515µs. The 131µs poll-entry→thread-entry gap is not a measured thread-creation duration: there is no spawn boundary in these retained events.\n- poll.expiry at 48,257,958µs: 400/400, reported poll duration 10,165,050µs. Four tip brackets total 2,211,485µs and straddle expiry; do not divide their entire duration by the expired window.\n- send-submission entry at 49,449,798µs is 1,191,840µs after expiry. Correlated inbound registration follows by 764µs; decoded sync_id is pull-2. This excludes a post-submission visibility delay as the reason for THIS acceptance expiry, without measuring a wire-write boundary or classifying other reds.\n- B1/B2/B3 store brackets are 1.869609/9.130515/5.739629s. First-sample carried-in cohorts are 0/6/12—not total concurrent populations or an exhaustive leak census. Acceptance-window overlap and resource contention remain unverified. B3 passing with more carried residue excludes nothing (paired JSON:1-10; ARM-B-REPORT.md:128-154).\n- Unknown inside B2’s store bracket: actual init branch/attempt count, each child’s creation/runtime, retry sleeps, parent/child scheduling, filesystem service and blocking, output-drain/join latency. No filesystem/AV/contention attribution follows. IR96/97 stay cause-unclassified; no causal filing or release change.\n\n## Source seam and why another aggregate timer is insufficient\nWorking-tree ContextStore::open_or_init_in delegates through seed_git_dir to BranchStore. BranchStore checks HEAD; absent HEAD triggers create_dir_all, git init --bare (up to 20 attempts with 10×(attempt+1)ms backoffs), required core.autocrlf config (read-before-write; up to 15 attempts with 15×(attempt+1)ms backoffs), and best-effort relative-path config. Existing HEAD skips that initialization. None of these branches/attempts is exposed by the retained store bracket (branchstore.rs:62-134,673-705).\nrun_git builds Command(\"git\"), calls spawn, creates stdout/stderr readers, then starts its timeout clock and loops try_wait with 10ms sleeps before joining readers (gitrun.rs:85-171). Thus run_git wall time is not Git execution time; spawn-return→status-observed includes child execution and parent scheduling/polling, while reader joins may extend after observed exit. The 30s timeout starts AFTER spawn/reader setup and does not encompass subsequent joins. Spawn counters count successful creation, not elapsed time or overlap.\n\n## One isolated preparatory measurement — proposed only\nMain owns fixture/execution. Use one disposable, uniquely owned root and one requester-style worker calling the REAL ContextStore::open_or_init_in once on an absent .seed.git. No broker, endpoint, suite, synthetic load or release artifact changes. Record exact diagnostic build identity, resolved Git image/version, root and environment; this is an instrumentation-readiness specimen, not a B2 reproduction or performance baseline. Do not clear global caches or change retry/timeout/pipe semantics.\n\nTemporary opt-in instrumentation, scoped by run/root/store-call ID:\n1. Worker spawn-call entry/return, worker first instruction, store entry/exit, with parent/worker TIDs. These distinguish caller creation API latency from first observed worker execution; they overlap and must not be summed blindly.\n2. Bracket every HEAD.exists and create_dir_all call, recording result; label filesystem API wall duration, not disk service time. Record each init/config command purpose, attempt number, exit/error/retry decision, and every backoff sleep request/wake (requested versus observed duration).\n3. In run_git, record entry, spawn-call entry, spawn return/error with child PID, reader creation and reader entry/EOF, each try_wait entry/return/status, each poll-sleep request/wake, status-observed, each reader join entry/return, and final return/error. Preserve outcomes even on failures. Fixed-size buffered records flushed outside the measured span avoid synchronous console/file logging on the critical path.\n4. In the SAME specimen, capture an OS trace providing process/thread start/exit, image identity, context switches/ReadyThread and correlated filesystem/I/O activity for this owned parent/child tree. This requires a recorder capability/privilege positive control; the previous WMI lifecycle subscription failed before its control (ARM-B-REPORT.md:7-13). Do not assume it is now usable or replace missing lifecycle data with presence samples. Add child-side Git Trace2 start/exit and available command/region records, with explicit clock correlation to parent/OS timestamps; Git start/exit still includes blocking/descheduling, not pure CPU work.\n\nExact interpretation: spawn-call bracket = parent creation-API wall time. OS child start→Git first marker = child startup bracket. Git markers delimit instrumented Git work; OS scheduled-running intervals distinguish CPU execution from ready-but-not-running intervals and blocked intervals. Correlated filesystem events expose operations inside parent/Git brackets; API wall time alone does not prove storage latency. OS child exit→first parent status observation isolates exit-observation lag, and EOF/join boundaries expose drainage/reader scheduling tails. Child execution can start before spawn returns; filesystem and scheduling classifications are nested/overlapping dimensions, not additive independent totals. Uninstrumented gaps retain an explicit unclassified label.\n\n## Acceptance gate and cleanup conditions\n- Pass preparation only if one store call reconciles to its complete command/attempt tree, each child joins by PID + creation identity/image, all relevant begin/end/error records survive, and process/CPU/filesystem/Git timelines correlate within a declared measured clock uncertainty. Record trace loss/overflow and unresolved intervals; do not silently allocate residual wall time to Git or scheduling.\n- Demonstrate actual fresh initialization took the intended branch. Capture init, config read/write as actually taken, and optional config result; do not assume a fixed successful-child count. No induced retry is required for this single preparation.\n- Missing scheduler/filesystem/child markers or denied tracing means preparation is INCOMPLETE for mechanism separation: keep the narrower evidence, name the missing layer, and do not proceed to a loaded run as though that layer were measured. Success proves observability only, not B2’s cause, an overhead-free recorder, or equivalence with uninstrumented runs.\n- Before any subsequent loaded run, predeclare lifecycle/overlap coverage, sampling/trace overhead treatment, owned-process accounting and a between-run residue gate. Require zero unresolved owned carry-in (or an explicitly different predeclared condition); unrelated live endpoints are excluded from ownership and untouched.\n- At preparation end retain the raw trace, manifest, clock mapping and loss report; stop its recorder, account for/reap only identity-verified owned workers/Git descendants, and remove only its disposable root and temporary instrumentation after evidence preservation. Zero post-cleanup presence does not establish how an unobserved process exited—the retained arm itself recorded 18 censused, 15 confirmed killed, other three fates unknown (ARM-B-REPORT.md:151-154).\n\nNo experiment or validation was performed; this deliverable is the source-grounded measurement design."
}
