Repository navigation
Make capture attestation and journal observation deterministic - #829
Conversation
Phase B v2 — revision only, not implementation or review authorityOperator authority: original Windows2022 51/49/2 remains preserved/uncounted; Windows2025 51/51/0. No rerun. Budget 1/5 solely for first plan rejection. Frozen v1/review and interrupted NotRun v2 draft are preserved; restart adds no authority. Scope: unchanged B1 — outcome and final-evidence contractNormal finalization publishes immutable Terminal +
Preserve all existing failure-status assertions. Timeout reads bound immutable FAILED manifest instead of B2 — publication, grammar, floor, errors and deadlines
One envelope binds exact payload bytes/length/SHA, sequence/predecessor and typed identity. Hash/parse the same held stream, not hash-path/reopen. Verify bytes after Move: detect mismatches, not prevent arbitrary same-user substitutions. No native-file-ID guarantee. B3 — matched actual RED/GREEN, not sleep-race evidenceBoth protocols: real publish1 → exclusive scanner/indexer-substitute lock1 → actual reader Open error → real writer attempts publish2 under lock1 → bounded observations → release/join/owned cleanup. Record actual old writer outcome/HRESULT; never assume Replace fails. RED requires unchanged96950 reader's real sharing/lock error and malformed classification, not writer/API/compile failure. If wrapping loses native detail, label a separate real unchanged Open call under lock1; never misattribute it. GREEN requires actual seq1/HRESULT, retry and valid2 before unlock; starting directly at2 fails. External observers read seq/attempt/HRESULT receipts and open setup barriers, no production pause/return hooks. Missing telemetry/observer timeout is harness failure. No sleep-race or forced WinAPI-internal-race claim. N1–N7 — exact binding, retention and integration
Cases/gate: map old mutable-replacement case to |
Confirmed A–G pins for the accepted v2 planLinked accepted v2 plan; frozen plan13A3D4EB/corrections4AF3EF38 and original static ACCEPT D6502D7A remain preserved. Coordinator explicitly confirmed these choices; no third review or runtime authority is inferred. Counter 1/5 unchanged; inherited CI is uncounted.
Current grant is scratch RED-harness source preparation ONLY, against unchanged96950: exact baseline reader/writer functions, real file lock/barriers, actual Open error, writerpublish2 attempt under lock, two expected RED/cleanup endpoints and bounded owned cleanup. No four-file repository edit, execution/import/parser validation/probe/compile/child, run/TEMP root creation, native/UI/provider work or CI push. A separate exact one-RED-run grant is required. |
Transfer the frozen Phase A candidate and correct only the two authorized harness defects. Preserve strict live-incomplete refusal and distinguish decision-seam discrimination from real-process endpoint evidence. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 91082413-872d-4f52-ac8c-a2ecd66fb126 Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Replace the mutable process journal with numbered non-overwriting snapshots, bounded fail-closed observation and exact quiescent terminal bindings. Preserve strict process identity, kernel/EOF cleanup and controlled failure outcomes. Local focused10 and full59 evidence was recorded at the original96950 head with these exact source bytes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 91082413-872d-4f52-ac8c-a2ecd66fb126 Signed-off-by: Colin Neilens <coneilen@microsoft.com>
96950ce to
944ee56
Compare
Summary
Make Windows capture-core process attestation and journal observation fail closed without treating a short-lived owned process or transient journal Open failure as malformed ownership evidence. This draft contains the transferred CIM/kernel-EOF candidate and immutable numbered-journal repair; it is not complete G2, a live-capture lease, native-window qualification or parity acceptance.
Changes
FAILED_ZERO_SURVIVORSversus invalid-cleanupCLEANUP_UNPROVEN.$homespelling before runtime, preserve primary job-assertion errors after valid cleanup proof, and remove only the newly introduced mandatory historicalsourceLeaseIdcomparison. The independent producer-provenance gap is recorded as an out-of-scope follow-up note, with existing current-lease/run/source and numbered-proof identity/hash guards intact.Test plan
RED: pwsh -NoProfile -File C:\gcs\j5\Test-NumberedJournal.ps1 -Mode Red -SourceRoot D:\depot\copilot-worktrees\GraphCode\coneilen-miniature-pancake -BaselineCommit 96950ce -OutputRoot C:\gcs\j5\journal-red1 -> real unchanged Refresh said "Worker process journal is malformed" for an actual Open sharing failure; separate actual unchanged Open recorded 80070020 and actual writer Replace recorded 80070020 under the held lock; exit 1, intentional behavioral 2 executed/1 passed/1 failed, QUALIFIED by six incorrect observer-role labels, not clean-all-provenance or a compile/missing-API failure.
GREEN: pwsh -NoProfile -File C:\gcs\j5\Test-NumberedJournal.ps1 -Mode Green -SourceRoot D:\depot\copilot-worktrees\GraphCode\coneilen-miniature-pancake -OutputRoot C:\gcs\j5\journal-green1 -> exit 0, frozen driver PASS, exactly 10 unique executed/10 passed/0 failed, unchanged five source hashes, actual seq1 Open 80070020 then retry and verified seq2 before unlock with unchanged bounds; 128 retained publications, API-export-only16, terminal20 and successful harmless worker integration.
REGRESSION: pwsh -NoProfile -File D:\depot\copilot-worktrees\GraphCode\coneilen-miniature-pancake\Tools\windows\Tests\UiCaptureDriver.Tests.ps1 -ScratchRoot C:\gcs\j5\journal-regression1 -> exit 0, exactly 59 unique executed/59 passed/0 failed: original 49-case floor plus two CIM cases plus eight journal groups with one explicit existing journal-name mapping; real nonzero/timeout FAILED tuples preserve FAILED_ZERO_SURVIVORS, expected logging/receipt negatives remain distinct, five source hashes unchanged, GUI/images/backend turns/native compatibility not executed.
Source and command provenance
The RED command is the historical command as actually run with source SHA
80E3E4619D75B3174911F88BB03CFA595EFF388B2ECDCF57862600299B1223D8. Its byte-identical source is preserved atC:\gcs\j5\journal-red1-frozen-source\Test-NumberedJournal.ps1; it was not rerun or repaired. The active scratch path later became the GREEN-only driver SHAB966DEA966FF3D6B929ED4CB89DF441017A1A5F1B7AA045A27F699E7EF5E728B.Focused 10 and full 59 ran on actual HEAD
96950ce7184eb46854aac1c54b1fb502f6688a89with the reviewed four-file candidate dirty. That one Phase A commit was mechanically rebased to7ce730709e4ab770a1201caf63d215c107baa814on exact base661f283798986dd7f919ada60cc6dbfc34130845; the byte-identical four-file candidate was then signed off in new commit944ee565ed2e36885b8cf1087fc5fbe2d05d38b6. All four baseline Git blobs were identical between old base29160994and the admitted new base. Raw working-tree, staged-index and committed Git blobs match without line-ending/filter transformation; this is source equivalence, not a claim of local runtime reruns at the new head.The exact path-limited preservation stash is retained, not dropped:
10f746378379aef93601f50b7a83fdb422ae1004. All earlier heads, source snapshots, bodies, reviews and raw reports remain historical evidence. Scratch B966 is unchanged and deliberately retains its96950HEAD guard; it is not runnable at the rebased head and was not rewritten or invoked again.7898D213468EB51CD5217ACE3BED7EDC2B5AC2F3FBBF1192A61270396EAE7DEC4772C1F359A0769C891EC5CD391C2B07C4E8F07EC3AABDE8CD73288FDC71E393DB114CD3C6E4776BF7C2B54908EBC12E33E15AB70A34A6128C5DB975F82D54111CF8061F380899E8DB5A7F79864DBF215EDC77A492F3F50B66B38764CF46D60BRetained runtime evidence and qualifications
43F461E62FA9AB4EBC60BE9E1FE02056033C2F9947E7B00EB790316521183B0C, qualified packet SHA0E83452D669700CBF815356225E5DE7D121453CE249AC15E50DC92CD63D48CB5. Actual observer PID 30332, reader 20484 and writer 36440 are independently bound by actual managed-launch/held-generation/EOF/function/UTC+monotonic receipts. Six observer records incorrectly say role Reader and remain wrong/immutable; no observer kernel-creation value was recorded or invented. Raw unexpectedFailures0 is not claimed as clean whole-harness provenance. The operator admitted only the real I/O and process-cleanup facts with this qualification. The baseline failed-Replace.tmpremains preserved, not claimed absent.0158E05953DB4D3DEC6B448047D46DFA80995D954344D780EA2AFAB550D18114, driver-after SHA0AD9DF412ECB47E5F4D3B3C331AF6575CFB611665000E1BC569123FFCF57BFE3. Production diagnostics show actual first seq1 Open80070020, global retry1, verified/accepted2 before lock release, with ordinary diagnostic receipts rather than hooks. The concurrent actor read live6 during the 128-publication burst; caller latest128/held-snapshot assertions passed. This is not a claim that that actor read all128 or verified their full hash chain. Final chain proof is quiescent and separate.84B8E7D9A4263D5287E1D85063B1D5A41F19F637B8CE4A2AB1C5B41CA2EEC7E5, actual59 inventory SHA4D89D2CBA8BCBDF6A650BA299002D11FCA9B73EC7FB64461C2C8A2050A1801B2, retained release/namespace evidence SHAB2146847B61264786B942C7FC1B5D54B0277E05149C881BE182D57AF44EFD972. Real nonzero/timeout workers emitted immutable FAILED manifests, exact Terminal3 and canonical stdout/release bindings, with kernel/bothEOF and zero survivors/pending. Timeout still requiresTERMINATED_GUARDED_HANDLE; it is not relabelled target exit0.Review and historical accounting
Requested different-vendor review selection was
claude-sonnet-5.5/high. Original broad source static ACCEPT receipt SHABBD8818DE1B52CBDDE616DE02DC548BF2E2E33408BEBCB03F3454EE8962D4347and corrective narrow static ACCEPT SHA85FF0DD78FDB39703C2B08542B263979B41479768D1ACD059900F34A824259EAare preserved with their actual request/result metadata and disclosed unread/coverage limits. No agent ID, independent runtime model/effort or unknown review time is fabricated. The HOME function-local-safety theory was not adopted: the new locals were mechanically renamed before GREEN. The job/cleanup split and out-of-scope source-lease-field removal were reviewed before runtime.Original required CI run
38699220915, Windows2022 job116303129929, remains attempt1 with inherited journal Open sharing violation plus dependent report refusal, 51/49/2; Windows2025 passed51. The operator classified that inherited blocker uncounted and specifically admitted Phase B work without rerunning it; required fresh green CI remains mandatory before merge. J5's counter is 2/5, solely the first plan REJECT and observer-label provenance defect; pre-runtime source corrections did not fabricate a failed GREEN or reset the count. Earlier actual J3 CIM49/48/1, older CI journal49/47/2 and J4 final5/3/2 remain distinct, preserved histories, not invented failed entire59 runs.Not verified
No local candidate tests, imports, parser checks, builds or probes were rerun after the controlled base update. Fresh automatic exact-head PR CI is pending at publication; no predicted green or required-count result is asserted here, and no manual workflow dispatch/job rerun is authorized.
No
make test/make check, local full ValidationRunner/windows-shell, actual GraphCode/daemon/zmx/provider build or launch, native-window/UIA/input/PrintWindow/WGC/WinApp qualification, screenshots, paid/backend turns or visual parity ran under these grants. Mocked scene output is not images. Non-rehearsal seed producer/preflight and live GUI/zmx-descendant ownership qualification are not established. The separate producer-provenance follow-up and parked adapters still need their own authority; this draft is not a blanket lifecycle, G2 or capture approval.Checklist
git commit -s) per the DCOmake test)make check)The final checkbox describes the actual Phase B real-file RED observed before its journal implementation, with the provenance qualification retained above. The CIM portion was transferred frozen, not claimed as a new test-first baseline cycle. The macOS
makecheckboxes remain unchecked; only the exact admitted Windows-console commands and their stated limits are claimed.