Windows CI completion

The native x64 and ARM64 jobs execute platform contracts and the complete unit suite with four workers. A completed test count does not prove that error reporting and process shutdown finish.

Portable test parameters

Large parametrized payloads use explicit short test IDs. Pytest writes the complete node ID into PYTEST_CURRENT_TEST; Windows environment values must remain below 32767 characters. Generating an ID from an 8 MiB image string prevents setup and teardown and repeats the payload throughout the error report. Payload bytes remain unchanged. POSIX mode assertions apply only on POSIX systems; the catalogue round-trip still runs on Windows.

Failure diagnostics

Windows Python output is unbuffered and unit results include test names. Complete output and a separate traceback file are uploaded after success or failure. The process-wide traceback deadline replaces the pytest faulthandler plugin so exception reporting cannot cancel that deadline; it covers reporting and shutdown as well as test execution. The test step and job also have finite execution limits. Failed tests retain their nonzero exit status; no tests are removed or accepted as passing.

Document reads and test resource ownership

Document publication binds file identity by device and inode at open and compares metadata stability independently within descriptor and pathname stat APIs. Windows may represent their timestamps differently; stable representation differences must not produce a conflict. Changes within either API still reject publication and preserve the original bytes, as do content revision mismatches.

History ownership test fixtures register SessionStore.close immediately after construction. Closing cancels and joins deferred index writers before the production-thread teardown guard runs, including when setup or assertions fail. The guard remains unchanged.

Tracked-dispatch test fixtures retain their JobRunner and register cleanup immediately after acquiring it. They request the existing non-waiting singleton shutdown, then join its dispatcher, reconciler, and budget threads before closing the SessionStore. A bounded production shutdown is not evidence that test-owned resources have finished.

Subprocess event-cleanup tests assert that the result returns while an ordinary callback remains blocked, then release and join the callback thread. Setup and host scheduling time are not treated as callback-cleanup latency. Synchronization deadlines are watchdogs, not performance assertions.

Acceptance

Both native architectures must complete the full unit suite and platform contracts. An intentionally blocked diagnostic process must emit its Python stack and exit unsuccessfully. Ordinary failed tests must emit their details and exit unsuccessfully.

Implementation status

Document route fixtures isolate HOME and USERPROFILE and resolve state with the original path function. Lazy imports therefore retain a function that follows the current environment, rather than a temporary fixture function bound to an earlier test directory.

Native x64 diagnostics confirm oversized parameter IDs and a POSIX-only permission assertion. Both are corrected; final native x64 and ARM64 regression checks are pending.

Document-read portability and fixture cleanup pass public file-write regression coverage, affected tests, and independent specification and quality review. Three consecutive complete local test runs with four workers also pass. Native Windows confirmation remains pending.