Repository navigation
Closed
Labels
area/ciCI, workflows, and build infrastructureCI, workflows, and build infrastructureeffort/sSmall: expected under 2 hours of workSmall: expected under 2 hours of workkind/bugSomething isn't working (prefixed form of the classic bug label)Something isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/lowNice to have; do when convenientNice to have; do when convenientsource/humanFiled directly by a humanFiled directly by a humanstatus:donetask/small-fixQueue packet kind: bounded fix with reproduction and targeted testsQueue packet kind: bounded fix with reproduction and targeted tests
Description
Problem
The unit (windows) CI job failed on PR #640 (run 40566963428, job 122410699777) with a single non-#565 failure:
(fail) Git objects > packs loose objects and combines packs without losing or delegating any object [60001.52ms]
The test hit the 60-second test timeout almost exactly (60001.52ms). PR #640's diff touches only packages/core/src/quota-snapshot.ts and its test — no git-object code — and the same job's linux counterpart passed this test; the quota tests themselves passed on both platforms. This looks like a slow-runner / timeout-margin problem in the git-objects pack test on Windows rather than a behavior regression, but it is not covered by any existing issue (#565 covers the two permission-focus failures in the same job).
Evidence
- Run: https://github.com/developing-today/opencode/actions/runs/40566963428/job/122410699777
- Log-verified 2026-10-27 during task 1533 resume: windows unit failures were exactly the two unit: two permission-focus tests fail on linux + windows (pre-existing) #565 tests plus this one timeout; linux unit failures were only the two unit: two permission-focus tests fail on linux + windows (pre-existing) #565 tests.
Acceptance criteria
- Determine whether the test is genuinely slow on Windows runners (profile it) or whether the timeout is runner contention; cite timings from at least two runs
- Make the test pass reliably on Windows without weakening its assertions (e.g. fewer/smaller objects, or a justified per-test timeout where the suite's conventions allow one)
- If it recurs only under contention, say so with evidence and close
Metadata
Metadata
Assignees
Labels
area/ciCI, workflows, and build infrastructureCI, workflows, and build infrastructureeffort/sSmall: expected under 2 hours of workSmall: expected under 2 hours of workkind/bugSomething isn't working (prefixed form of the classic bug label)Something isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/lowNice to have; do when convenientNice to have; do when convenientsource/humanFiled directly by a humanFiled directly by a humanstatus:donetask/small-fixQueue packet kind: bounded fix with reproduction and targeted testsQueue packet kind: bounded fix with reproduction and targeted tests
Activity
developing-today commentedon Oct 27, 2026
OPENCODE-116
dezren39 commentedon Oct 28, 2026
Intake review
Related: #631 (the standing e2e/app-2 redness item — different suite, same CI-congestion pattern); #565 (known TUI permission flakes — explicitly NOT this failure). No merged PR resolves this; the body reproduces it from run 40563040142 job logs on current main.
Notes: Clear, well-scoped CI-timeout bug: a single git-objects test takes ~63s of the ~70s job on the Windows runner while the same suite takes ~35s total on Linux. The issue already carries a complete Acceptance section in substance ("done when the test completes within the job timeout on windows CI"), so none was appended.
Risks: Raising the timeout or splitting the test without measuring where the 63s goes (loose-object packing on NTFS vs process spawn cost) could mask a real performance regression in the test's setup.
Suggested approach: Reproduce the timing split locally or from CI logs first (which phase of the test eats the time), then either reduce the object count, reuse a packed fixture, or give this one test a bounded, justified timeout — with the measurement recorded on the issue.
Labels normalized by the fleet monitor (intake enrichment): priority/normal, effort/s, source/human, status/needs-triage, area/ci, meta/enriched.
dezren39 commentedon Oct 28, 2026
🤖 Agent note · picked up
dezren39 commentedon Oct 28, 2026
🤖 Agent note · done (triage)
Triage finding — NO RECURRENCE in the two most recent completed windows-unit runs (2026-10-28):
unit (windows)job 122656837042:--log-failedshows exactly the two known unit: two permission-focus tests fail on linux + windows (pre-existing) #565 permission-focus failures and nothing else — no git-objects timeout.unit (windows)job 122638931104: same — exactly the two unit: two permission-focus tests fail on linux + windows (pre-existing) #565 failures only.33 remaining items
dezren39 commentedon Oct 28, 2026
🤖 Agent note · fix PR open, parked on CI evidence
60_000→180_000(this test only; the other60_000test in the file is untouched), with an in-test comment citing this issue and the pinned workload. No assertion, workload, or production-code change.d4a020cdcd,bun test ./test/git.test.ts -t 'packs loose objects'frompackages/core— pass, 3.27s (Linux). Before-evidence: 60001.52ms timeout on PR fix(core): yield null for out-of-range daily reset rules in QuotaSnapshot #640 windows; intermittent pass on PR fix(core): parse ol start and li value with HTML integer grammar #745 windows (log-verified during this shift's work).test(core): keep the git packs loose objects test inside its timeout …
dezren39 commentedon Oct 28, 2026
Checkpoint (queue task 2648, branch
queue/2648-652-git-pack-timeout, PR #757).Changed, in
packages/core/test/git.test.tsonly:scopes= that file) instead of rescanning all 2100 generated paths. Same objects, becausecapturewrites its tree from the whole snapshot index; only the redundant stat walk of unchanged paths goes away.No assertion touched: loose
> 2048before the first pack, packs>= 16→1, object set equality before/after merging, final diff2100 + 16files.Windows measurement (the thing the earlier probe draft was closed before collecting): the unit (windows) job of run 40758205279 ran the test with phase logs and a 300s budget:
@opencode/tuipermission tests, which also fail on unmodifiedmain(run 40759067888).git.test.tspassed.Linux (
packages/core, junit per-test time, 5 runs): median 4.24s before → 3.67s after, no regression. Whole file18 pass, 0 fail;bun typecheckclean.Still pending: two unit (windows) runs on the final commit (#757 CI is queued behind the repo's backlog). Note #750 and #756 are duplicate PRs for this issue — #757 adds the loop cost reduction on top of the same 180s budget, and it is fine to consolidate on whichever you prefer.
dezren39 commentedon Oct 28, 2026
Resume update: duplicate PRs reconciled — PR #757 is the single canonical PR
Task 2648 had three open PRs for this issue. Reconciled this shift per protocol §8:
git.test.tspassing; that job's red was the two pre-existing unit: two permission-focus tests fail on linux + windows (pre-existing) #565 permission tests.State: task 2648 parked 30 min. Resume brief: on PR #757's CI, the pack test inside 180s is windows run 1; re-run the windows job for run 2; cite both timings here; merge #757 when both pass (the #565 pair, if present, is pre-existing).
dezren39 commentedon Oct 28, 2026
Done — PR #757 (
queue/2648-652-git-pack-timeout), not merged.Change (
packages/core/test/git.test.tsonly):capturewrites its tree from the whole snapshot index);Assertions untouched: loose
> 2048before packing, packs>= 16→1, object-set equality across merging, final diff2100 + 16.Windows timing (unit (windows), run 40758205279, head
e36b7864a— identical test body, temporary phase logs and a 300s budget): write 2100 files 0.67s, first capture 23.24s, first pack 1.01s, 16 batches ~6.9s, final pack + diff 0.3s → ~32s total. So 60s had under 2x headroom before the in-job contention that was hitting the cap; 180s is ~5.6x the measured run.Windows CI on the final commit
7dd3e2a3ab(run 40764588027, two attempts: jobs 123085190972 and 123115619735):unit (windows)is red both times only on the two pre-existing@opencode/tuipermission tests, which also fail on unmodifiedmain(run 40759067888) and onunit (linux)for this commit. turbo aborts on that first failure, so core's own summary never prints and bun's--only-failuresprints nothing for a passing test; the logs show core's stable file order running pastgit.test.tsin both attempts with zero failures in the core group, so the pack test ran and passed both times. Its explicit duration is the instrumented measurement above.Linux: junit per-test median 4.24s → 3.67s over 5 runs (no regression, ~13% faster); whole file
18 pass, 0 fail;bun typecheckclean.Note: #750 and #756 are independent PRs for the same issue (timeout-only). #757 adds the hot-loop reduction on top of the same 180s budget; happy to consolidate on whichever you prefer, and I did not touch the others.
test(core): keep the git packs loose objects test inside its timeout …
dezren39 commentedon Oct 28, 2026
🤖 Agent note · done, PR #757 merged