Repository navigation
fix(ci): retain hygiene and native export diagnostics - #2545
Merged
Merged
Conversation
schlessera
marked this pull request as ready for review
October 22, 2026 09:38
This was referenced Oct 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #1903
What changed
Hygiene commands retain each screenshot's exact returned bytes in a unique
tmp/hygiene-proof/capture-*directory, while preserving their existing local scratch paths and return values. The layout artifact collects those copies. The browser artifact collects only the six prepared native diagram exports and theirproducer.jsonunder each session/engine. Existing artifacts, gates, runtime/action pins, offline image, hidden files, failure collection and seven-day retention remain intact.Why this shape
#2435 already retained workspace attachments and handed off unit-worker SVG outputs. Hygiene screenshots still disappeared with container scratch, and the native producer already published the required origin exports/identity receipt outside the collected directory. Retaining the producer's original bounded files avoids a second export or manufactured provenance. Independent capture directories preserve earlier evidence when filenames repeat.
No changeset: only test evidence and CI collection change; no shipped package, dependency, public API, CLI/MCP or provider-history behavior changes.
Proof
Head
3c3a3af23acb386b1d838be716883e5401a9d9f5; branch starts atorigin/main7b8a755ea329bd48a11b790e916c417b6f608eee.bun run check:pr --base origin/main: PASS on final committed head3c3a3af2against base7b8a755e(including lint and import-graph feedback).bunx tsc --noEmit,bun run build, and 49 focused tests / 301 assertions pass. Preflight includes lint and the complete selected fast invariants.hygiene command retains each capture after container scratch cleanupfails on the original command at the intended assertion: expected two surviving files, received zero. Restored code passes all six assertions, including preserved scratch return paths and independent repeated-filename bytes.hygieneCapture; the same named test fails with expected two files / received zero. Restore the write: pass.actions/upload-artifact@v7resolves tocf430e030ddbb5b0abf93d22962f4752f3646cd9; unmodified bundle SHA-2567199f63dd3e149ca4b8071705021fb3a680d03dd71cd3a4e8d3049e3f117380b. Replace only its entrypoint with an export of the original collector and execute in a network namespace with no network. The old browser path list failsnative origin exports and producer receipt are collected: .../origin.svg; the old layout list independently failshygiene captures are collected: .../c6-stalled-320.png. Current lists pass, retaining existing evidence and excluding unrelated temporary files and Linux baselines. Parsed workflow comparison confirms only additive upload paths changed.hygiene-review.layout.tsx:307. Both full-loop widths pass; no timeout/assertion was changed or retry claimed. Filed separately as ui-react: hygiene retry can retain the configuration blocker after Start again #2544.The native runs used checkout
7b8a755eplus the retention-only working diff subsequently committed unchanged as3c3a3af2. Native producer receipts retain their actual7b8a755echeckout identity. These local receipts are not hosted candidate confirmation for this head.Downloaded hosted artifact audit of the shipped slice
Successful main run 39699155671, attempt 1 executed
b17e349b7c8ff0f69c4cade3a953c86008d3ede8, tree1dee2f6e9b5dcc5b5070597b5d235e0763e137e4, parentca8842828ed8634a84c4e8aa4a88e487238721b4. All 17 actual job checkout logs agree. All 13 proof ZIPs were downloaded; sizes and SHA-256 digests match the API; safe unique paths and every ZIP CRC, PNG signature/chunk CRC, nonempty raster payload, dimensions, size and SHA-256 were checked.The 17 keyboard files are 10,050–68,008 bytes; module-settings files are 13,853–91,886 bytes. Across all ZIPs there are 1,353 PNG instances. Exactly 234 instances match the same 18 tracked numeric reference paths and hashes; they are excluded from generated/failure-evidence claims. No generated automatic-failure PNG is present. The audited run has zero hygiene copies and zero native origin exports/producer receipts, reproducing the remaining retention boundary without relabeling historical evidence as this candidate's proof.
The local audit inventory, replay scripts, bundle and logs are preserved in this worktree's ignored
tmp/1903-artifact-audit/. The following independent downloaded-byte check is repeatable from the repository root (writes only to an owned temporary directory):Checklist
docs/reflect the change, or nothing documented moved.docs/decisions/provider-history.md): the provider-history guard passes, or nothing on a turn's path changed.Anything left open
artifact-*.pngcaptures removed in test teardown, opt-in externally directed captures and standalone navigation/software diagnostics retain their existing inventory boundary; this PR neither sweeps arbitrary temporary paths nor claims these outputs as newly retained. Required original criteria are not moved to another issue.