On a fresh CI runner, multiple Turbo tasks starting in parallel can race
to extract the Gradle wrapper zip, producing ClosedFileSystemException.
Run ./gradlew --version before turbo test:ci to ensure the wrapper is
fully extracted before any parallel task touches it.
Re-enable @kilocode/kilo-jetbrains in bun turbo typecheck (package.json) and
bun turbo test:ci (test.yml). Add Java 21 setup to the typecheck workflow so
Gradle can run. Fix three serialization test failures:
- KiloProfile200Response with null balance / with organizations: Effect's HttpApi
OpenAPI generator emits balance and currentOrgId as non-nullable even though
the server schema uses Schema.NullOr. Add fixProfileNullable step to
OpenApiSpecNormalizer that wraps these fields in anyOf: [{schema}, {type:null}]
before Kotlin client generation, plus regression tests.
- model limit context and output deserialize with large values (NoSuchMethodError):
compileTestKotlin was not invalidated when the generated API type changed, leaving
stale bytecode referencing the old ProviderConfigModelsValueAnyOfLimit class.
Wire compileTestKotlin -> fixGeneratedApi in backend/build.gradle.kts so API
regeneration always invalidates test compilation.
Replace legacy "opencode" references with "kilo" in CLI output,
API metadata, SDK error messages, and documentation. Add automatic
labels to GitHub issue templates, expand triage agent with jetbrains
and extension teams, and update the github-triage tool to target the
Kilo-Org/kilocode repository.
- Adds 'new file' marker to check-forbidden-strings workflow
- Marks the SKIP_FILES addition in extract-source-links.ts
- Updates nvidia-headers test to assert the new kilo.ai/Kilo Code values
Replace the inline opncd.ai/s/ grep added to check-kilocode-change with a standalone script/check-forbidden-strings.ts. Wired into test-vscode.yml as a separate step alongside the existing marker check.
- Add kilocode_change markers around Java 21 setup in test.yml (required
by annotation checker for .github/** changes)
- Fix test-ci.ts: use ./gradlew.bat (not bare gradlew.bat) on Windows so
bun's shell can locate and execute the wrapper script
- Fix HistorySessionActionsTest: delete two items races — use waitFor
instead of fixed-duration flush so both coroutine deletes complete before
asserting; sort IDs for ordering-independent comparison
- Add setup-java@v4 (temurin 21) step to test.yml so Windows runner has
the JDK required for Gradle Kotlin compilation
- Fix SessionRecoveryTest: existing-session flow (controller("ses_test"))
calls showSession() after history load, setting showSession=true;
update show=false -> show=true in 7 assertSession calls that tested
this flow
`harbor run` (jobs.py) only exposes `--agent-setup-timeout-multiplier`;
the absolute `--agent-setup-timeout` flag only exists on `harbor trials`.
Use the multiplier (2.0 = 720s from the 360s default) instead.
Hardcodes the list of active and disabled workflows and fails CI when
.github/workflows/ drifts. Wired into check-opencode-annotations so we
don't add a new workflow file for this.
The hello-world smoke test occasionally hits Harbor's 360s
AgentSetupTimeoutError when an apt mirror or NodeSource cdn is slow on
the Blacksmith runner, even though the install normally finishes in
~2:23. Bump the cap to 600s and start uploading the install script's
stdout/stderr so we can pinpoint the stalling step next time.
Covers the "Node.js 20 is deprecated" warning emitted by actions/checkout,
actions/setup-node, actions/cache, actions/upload-artifact and
actions/download-artifact on their older releases.
Every bumped line carries an inline `# kilocode_change` marker since these
workflow files are shared with upstream OpenCode. When upstream bumps its
own action versions we just drop the markers on merge.
Keeps the 4vcpu host change in test.yml (already annotated with
# kilocode_change). The Node 20 deprecation warning stays for now;
`FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true` already forces the v4 actions to
Node 24 at runtime, so the warning is informational and CI still works.
Bumping all actions would require 40+ kilocode_change markers across
shared upstream workflows and invite conflicts on every upstream merge —
we'll pick up the version bumps when upstream does.
- Bump all active workflows to action versions that natively target Node 24:
checkout@v6, setup-node@v6, cache@v5, upload-artifact@v7, download-artifact@v8.
Resolves the "Node.js 20 is deprecated" warning in CI logs. The kept
`FORCE_JAVASCRIPT_ACTIONS_TO_NODE24` env stays as a no-op safety net (also
in upstream OpenCode).
- test-runner: when running under GitHub Actions, emit a `::warning::`
annotation per flaky file and append a markdown table to
`$GITHUB_STEP_SUMMARY`. mikepenz/action-junit-report already surfaces
failures from the JUnit XML, but flakies pass cleanly on retry and were
invisible in the UI.
- Lower default runner concurrency from `os.cpus().length` to `min(4, cpus)`.
The bottleneck in CI is shared resources (OAuth callback ports, global
filesystem like `~/.local/share/kilo`), not CPU, so eight parallel Bun
processes were triggering port/FS races instead of going faster.
- Raise per-test timeout from 30s to 60s. Slow `spawn` on Windows was
tripping the 30s limit on tests that were just slow, not broken
(e.g. `session/prompt.test.ts` at ~86s, `provider/provider.test.ts` at ~54s).
- Retry failing files once and surface them as FLAKY in the summary plus a
dedicated section. Bugs still fail on every attempt; contention recovers.
- Drop CI runners from 8vcpu to 4vcpu to match upstream OpenCode — with
concurrency capped at 4, the extra cores bought us nothing.
Consolidate workflow disabling: the six workflows previously soft-disabled
via `if: false` / `&& false` are now moved and renamed alongside the
other `.disabled` workflows so the disabling mechanism is consistent.
Reset six workflow files that were soft-disabled via `if: false` / `&& false`
to the last merged upstream (v1.14.29) before moving them to the disabled folder
in a follow-up commit.