`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.
download-artifact@v4 silently warned on digest mismatches, which hid the
corrupt `kilo-cli` download on run 25101862100 until the next step
failed with "CLI binary not found". v8 defaults `digest-mismatch`
to `error`, so the same failure surfaces on the download step itself
with an actionable message.
Also switches the build-cli upload to upload-artifact@v7's
`archive: false`, so the already-zstd'd tarball travels as-is instead
of being re-wrapped in a store-only zip. With `archive: false` the
`name:` input is ignored and the artifact is named after the file
(`kilo-cli.tar.zst`), so the two consumers (build-vscode, publish)
now reference `name: kilo-cli.tar.zst` and set `skip-decompress: true`.
The `kilo-vscode` upload stays on v4: it uploads a directory of .vsix
files and `archive: false` requires a single file.
Uncompressed tar left the artifact at ~2.7 GB (same as no-compression
zip on the previous attempt). zstd compresses the tree-sitter wasms
~4x while being near-native speed on the already-compact binaries,
which should bring the artifact close to ~1 GB.
zstd 1.5.7 and GNU tar 1.35 are preinstalled on both github-hosted
and blacksmith ubuntu-2404 images (per the actions/runner-images
Ubuntu2404 manifest and blacksmith's drop-in-replacement docs).
Already used in this same workflow by actions/cache@v4 for bun pm
cache restoration, so availability is empirically confirmed.
The prior shrink-artifact PR (#9671) didn't prevent the build-vscode
failure on run 25101862100. Artifact grew to 2.7 GB (compression-level: 0
stores uncompressed) and the ~36-minute download still hit the v4 action's
per-entry unzip bottleneck, leaving the cli-linux-x64 binary missing.
actions/download-artifact@v4 pipes the response through Node's
unzip-stream and writes each entry to disk sequentially on a single
thread. With ~480 entries per target x 12 targets the per-entry overhead
dominates total download time.
Collapsing everything into a single tar before upload reduces the
artifact to one zip entry, eliminates the per-file overhead, and lets
native 'tar -xf' do the actual extraction on the consumer side.
References:
- actions/upload-artifact#36 (canonical tracking issue)
- actions/toolkit#1533 (5000 files: 18m -> 22s with pre-tar)
- actions/download-artifact#362 (download speed investigation)
The kilo-cli artifact ballooned from ~1 GB to 1.83 GB after the codebase
indexing PR started emitting external sourcemaps and copying tree-sitter
wasms per target. The resulting 1.83 GB artifact triggered a silent
partial-extract in actions/download-artifact@v4 during build-vscode,
causing the 2026-04-29 publish run to fail with 'CLI binary not found'.
- Skip external sourcemaps in release builds (~620 MB saved across
12 targets); dev builds still emit maps for local debugging.
- Exclude any stray .map files from the CI artifact and skip zstd
compression on binaries (saves ~60 s on upload and reduces the
chance of partial-extract bugs on the download side).
Refs: PR #6966 (commit f74d54c4), run 25096325401
Prettier pads markdown table cells for column alignment, which turns any
content change into a table-wide realignment diff. Markdown was only in
prettierignore for packages/kilo-vscode/; the root formatter still
repadded docs elsewhere (e.g. TESTING.md, kilo-docs, AGENTS.md).
Adds *.md to the root .prettierignore, documents the convention in
AGENTS.md, and adds script/check-md-table-padding.ts + a workflow to
enforce it. Existing padded tables in Kilo-owned docs have been
rewritten via the script's --fix mode.