Skip to content

Windows test suite remains dispatch-only until full suite is green #1059

Closed as not planned

Description

@lidge-jun

Client or integration

Other (test suite / CI)

Area

Windows CI / cross-platform test suite

Current status

The Windows full test-suite leg is currently dispatch-only and does not gate normal development or release promotion.

This issue tracks the Windows failure burn-down and the eventual restoration of Windows as a required CI gate.

The original issue description cited approximately 207 failures from an older aborted promotion run. That number is no longer a reliable baseline.

A newer full Windows dispatch against dev produced the current useful baseline:

Shard Result
1/4 timed out at the 15-minute cap; no final failure count
2/4 8 failures
3/4 21 failures
4/4 47 failures

So the current known baseline is:

76 failures across the three completed shards
+ unknown failures in shard 1 because the shard timed out

The Windows leg should remain dispatch-only until a full run completes successfully on current dev.

Current reference run

Windows dispatch:

https://github.com/lidge-jun/opencodex/actions/runs/31095755263

All four Windows shards failed or timed out in that run.

The old ~207 count from the earlier promotion run should not be used as the burn-down target.

Main failure family

The recoverable failures are not evenly distributed.

The largest coherent cluster is around the Codex config/catalog write substrate, including:

  • injectCodexConfig integration;
  • Codex catalog sync hardening;
  • Codex catalog restore;
  • cross-process write-lock contention;
  • codex-journal.

The failure signatures point toward Windows-specific filesystem and process semantics around areas such as:

  • atomic publication;
  • replacement/rename behavior;
  • permission normalization;
  • file locking;
  • concurrent writers;
  • journal/CAS behavior.

These should be treated as a shared substrate problem where the evidence supports it rather than as dozens of unrelated test failures.

Remaining distinct failure classes

Other observed failures include areas such as:

These should be handled separately once the dominant write-substrate failures are removed.

Shard 1 timeout

Shard 1/4 is a separate observability problem.

It exceeded the current 15-minute job limit before producing a usable final test result.

That means one quarter of the Windows suite currently provides no complete failure inventory.

Before treating shard 1 as simply another group of failing tests, determine:

  1. which tests consume the time;
  2. whether retries/filesystem waits are responsible;
  3. whether there is an actual hang;
  4. whether shard balance itself needs adjustment.

The objective is not merely to increase the timeout indefinitely. The shard needs to complete reliably enough to provide actionable CI signal.

Recommended burn-down order

1. Fix the shared config/catalog write substrate

Prioritize:

injectCodexConfig
catalog sync
catalog restore
atomic publication / permission semantics

2. Re-run the write-lock contention coverage

Determine whether those failures disappear with the same substrate correction or represent an independent Windows locking defect.

3. Fix journal behavior

Address remaining Windows-specific codex-journal failures after the underlying publication/locking behavior is stable.

4. Split unrelated tails

Handle genuinely independent failures such as:

server 429 retry
#702 expired forward replay
other isolated Windows-only failures

as separate focused changes where appropriate.

5. Resolve shard 1 completion

The complete four-shard suite must finish reliably before Windows can become a useful required gate.

PR expectations

Windows burn-down PRs should be small enough to review independently.

Each PR should identify:

  • the failure family it addresses;
  • the affected Windows shard(s);
  • the before/after failure count for those tests;
  • focused Windows validation;
  • confirmation that Linux/macOS behavior is unchanged.

Do not combine unrelated Windows failures merely because they happen to appear in the same shard.

Gate restoration criteria

Windows can return to required CI only when all of the following are true:

  • all four Windows shards finish within the configured CI budget;
  • the full Windows suite is green on current dev;
  • the result is repeatable rather than a single lucky run;
  • Windows-specific fixes do not regress Linux or macOS;
  • the workflow is changed from dispatch-only back to the intended required/gating behavior.

Until then, the Windows leg remains dispatch-only.

Historical context

The Windows suite accumulated failures because it was not previously exercised as a normal dev gate.

The important target now is not reproducing or preserving an old failure count.

The target is:

current dev
4/4 Windows shards complete
0 failures

Checks

  • The original Windows regression is still actively tracked.
  • A current full Windows dispatch has been measured.
  • The obsolete ~207 failures estimate has been removed as the baseline.
  • The dominant failure family has been identified.
  • Shard 1 timeout is tracked as a distinct CI-signal problem.
  • Four Windows shards complete successfully on current dev.
  • Windows is restored as a required CI gate.

Activity

  1. github-actions commented on Aug 5, 2026

    @github-actions
    Contributor

    Automated translation bookkeeping — detected language: English.

  2. added
    bugSomething isn't working
    platformOS/service/tray/ACL (Windows-heavy, not Windows-only)
    on Aug 5, 2026
  3. lidge-jun commented on Aug 6, 2026

    @lidge-jun
    OwnerAuthor

    Status: the Windows leg stays dispatch-only. Plan of record: burn down the ~207 failures shard by shard (management/server fixtures first, then platform process semantics), restore the gate only after a full green Windows run on dev. Shard-scoped PRs welcome; each should name the shard and the failure class it eliminates.

  4. lidge-jun commented on Aug 6, 2026

    @lidge-jun
    OwnerAuthor

    Fresh measurement. I dispatched the Windows leg against dev today — first run since 2026-08-01 — so the burn-down now has current numbers instead of the aborted promotion run's estimate.

    Run 31095755263, all four shards failed:

    Shard Result
    1/4 timed out at the 15-minute cap — no counts recoverable
    2/4 8 fail
    3/4 21 fail
    4/4 47 fail

    So 76 failures across the three shards that finished, plus an unknown count in the shard that never completed. The "~207" figure in the description came from the aborted promotion run and should be treated as unverified rather than a target.

    The failures are not spread evenly — they cluster hard. Grouping the recoverable ones by suite:

    32  injectCodexConfig integration (Design B)
    30  Codex catalog sync hardening
    16  Codex catalog restore
    12  two real processes contend for one lock
    12  server same-target 429 retry (end-to-end)
    12  codex-journal
     6  Issue #702 expired forward replay state
    

    Roughly three quarters are one problem family: Codex catalog and config file writing — injectCodexConfig, catalog sync/restore, the write lock, and the journal. The failing assertions read like atomic-publication and path/permission semantics ("writes prepared bytes atomically with the right...", "a coordinator found group-readable is narrowed back to owner-only", "a native CAS with a matching generation but the wrong txId still conflicts"), which is exactly where POSIX assumptions leak: rename over an existing file, chmod bits, and file locking all differ on Windows.

    That changes the shard-by-shard plan for the better. Fixing the write-substrate family first should clear ~78 of the 76+ recoverable failures in one pass, rather than grinding through shards that are mostly symptoms of the same cause. Concretely, in order:

    1. injectCodexConfig + catalog sync/restore atomic publication (the rename/permission layer they share)
    2. the write-lock contention test — likely the same substrate, and worth confirming before treating it separately
    3. codex-journal, then the genuinely unrelated tails (429 retry, Codex App resume silently drops prior context after the 1-hour replay-state TTL expires #702 replay)

    Shard 1's timeout is its own defect and should be split out. A shard that cannot finish inside 15 minutes gives no signal at all, and the cap was already sized against a green suite — on Windows the retries and filesystem waits push it over. Either that shard needs a longer budget or the slow tests need identifying; until then we are blind on a quarter of the suite.

    Raw failure names are in the run logs; I did not paste all 152 lines here.

    Keeping this open. The plan of record stands, with the ordering above replacing "management/server fixtures first" — the measurement says the write substrate is the bigger and more coherent target.

  5. changed the title [-]Windows test suite: ~207 failures, leg is dispatch-only until green[/-] [+]Windows test suite remains dispatch-only until full suite is green[/+] on Aug 7, 2026
  6. added
    choreMaintenance, CI, tests, refactors, or build changes (not a user-facing bug or feature).
    and removed
    bugSomething isn't working
    on Aug 15, 2026
  7. lidge-jun commented on Aug 18, 2026

    @lidge-jun
    OwnerAuthor

    Closing this tracker. The hosted Windows runners have been too unreliable for a meaningful burn-down (shard timeouts at the 15-minute cap, loaded shared runners distorting failure counts), so gating on them is not productive. The maintainer will run the Windows suite locally on real Windows hardware and push fixes from those runs instead; the platform-windows leg stays dispatch-only as an on-demand check. Shard-scoped fix PRs from local Windows runs are still welcome — name the failure class the PR eliminates. If hosted-runner reliability improves enough to restore Windows as a required gate, reopen this with a fresh full-run baseline.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    choreMaintenance, CI, tests, refactors, or build changes (not a user-facing bug or feature).platformOS/service/tray/ACL (Windows-heavy, not Windows-only)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions