D3 attribution correction SETTLED. Successor pinned; 92e02907 untouched and still pinned; no receipt of 2a45d4d3 rewritten; the d6 timeline on 2a45d4d3 preserved verbatim. PIN d3/d3-emission-probe-v3.ps1 bf78d113e0d3f928bad42bb156385519fa72d8754b9a9cfcd485aadd66fa4435 DIFF d3/d3-launcher-92e02907-to-bf78d113.diff 0c6fa05e... (5 hunks, 90 added, 33 removed) RECEIPT d3/d3-guard-attribution-receipt.md MAP d3/d3-control-subject-map.md CONTROLS d3/d3-guard-fixtures.ps1 9960ddc4... -> d3-guard-fixtures.out bb7a7f43..., 27/27 1. ROOT ANCHOR. Yes: $script:wrapperCreatedUtc = $p.StartTime.ToUniversalTime() is captured at launch and passed into the walk. The :148 lookup is gone; the table row for the root pid must MATCH the captured time or the root is treated as gone. Four named root states: root_matches_captured_creation / root_absent_from_table / root_pid_REUSED (both times printed) / root_creation_time_UNREADABLE. STATED CEILING: the match carries a 1.0s tolerance because Process.StartTime and Win32_Process.CreationDate disagree at 6e-7s (measured ...2375076Z vs ...2375070Z); a recycle inside that window would still match. Bound, not proof, and the source says so at the constant. 2. UNRESOLVED CANDIDATES. They leave the result entirely. New line D3_DESCENDANTS_UNATTRIBUTED count=N - NOT verified descendants and NOT termination targets, each row with why=creation_time_unreadable or why=parent_unattributed. Nothing under an unanchored parent is expanded. The guard line now reads rejected_predating_parent=N unattributed=N root_verified=BOOL (creation order REJECTS a candidate; it never PROVES ancestry). PENDING disposition unchanged, no automatic kill on any path. 3. FIXTURES. Process-table fixtures only - no process started, none signalled, the live table never enumerated: the controls SHADOW Get-CimInstance with a function in harness scope, which also lets the SAME fixture run against 92e02907 unmodified. Results: root-exited v3 observed=0, both claimants UNATTRIBUTED | v2 NEGATIVE CONTROL: observed=2, called descendants root-reused v3 root_pid_REUSED, observed=0, stranger tree UNATTRIBUTED | v2 NEGATIVE CONTROL: attributes the stranger's own children to wrapper_pid=1000 unreadable kid v3 UNATTRIBUTED why=creation_time_unreadable, out of the DESC list | v2 NEGATIVE CONTROL: DESC pid=1003 unreadable root v3 root_creation_time_UNREADABLE, nothing attributed instrument empty table and a THROWING read both UNREADABLE with reason; root-with-no-children = observed=0, not unreadable Totals by subject: bf78d113 24/24, 92e02907 3/3 (all three red-on-purpose). 4. PER-CONTROL SUBJECT MAP. capture-controls.out 24/24 decomposes as 92e02907 21/21 + ffdd1a3b 2/2 (f5/f6, the predecessor on purpose) + harness-only 1 (g disposal, no launcher bytes). Two attribution GAPS I have to report rather than paper over: capture-controls-d.out records SUBJECT 70432BAC, and the d6 timeline in the launcher receipt is subject 2a45d4d3 - NEITHER has preserved bytes (no file in d3/ hashes to either) and 2a45d4d3's console output was never written to a file. Those results cannot be re-derived. Preserved as-is, labelled in the map as measured against bytes that no longer exist. From 92e02907 on, every subject is its own kept file. 5. DISPOSITION. This lane started zero processes and signalled zero. Nothing to dispose of. No product invocation, pipe enumeration, elevation, field run, or cleanup-command execution. Scheduling-driver work still held. No unrelated suite rerun. Idle on your next call.