Skip to content

fix(ci): repair the OpenCode 2 installed-package smoke - #1202

Merged
backnotprop merged 1 commit into
mainfrom
fix/opencode-v2-smoke-ci
Aug 5, 2026
Merged

fix(ci): repair the OpenCode 2 installed-package smoke#1202
backnotprop merged 1 commit into
mainfrom
fix/opencode-v2-smoke-ci

Conversation

@backnotprop

@backnotprop backnotprop commented Aug 5, 2026

Copy link
Copy Markdown
Owner

The OpenCode 2 installed package job has never passed since #1194 introduced it. It was born red on the merge commit and has failed on every run since.

Root cause. The smoke fixture allowed 5s for /api/health and 20s for the plugin to appear in /api/plugin. Those numbers fit a warm macOS dev box. They do not fit a cold Linux runner, where OpenCode 2 boots slower and has to install the packed plugin plus its whole dependency closure through the fixture throwaway registry before the plugin registers. The old fixture also had no per-request timeout, so it sat on a single health request that the server accepted but did not answer, which is where the five minute wall clock came from.

Measured with the same opencode2 build and the same packed tarball:

environment healthy plugin activated
macOS, warm caches 0.8s 6.3s
linux/amd64 container 8.2s 45.3s
this CI run 16.3s 20.7s

Fix. Budgets raised to 120s and 300s, overridable via PLANNOTATOR_SMOKE_HEALTH_TIMEOUT_MS / PLANNOTATOR_SMOKE_PLUGIN_TIMEOUT_MS, plus a 25 minute job timeout as the backstop against a real hang. The assertion is unchanged: the smoke still requires the plugin registry to report plannotator. Verified by repacking the tarball with a mutated plugin id, which still fails.

Failures are legible now: per-request timeouts, progress lines while waiting, elapsed time and the last HTTP status/body in the error, and a teardown that escalates to SIGKILL.

The job is green on this PR. Do not auto-merge.

The smoke's wait budgets were sized on a warm macOS dev box (5s to a healthy
server, 20s to plugin activation). On a cold Linux runner OpenCode 2 needs
longer to boot and has to install the packed plugin plus its whole dependency
closure through the fixture's throwaway registry first, so the job has failed
on every run since it was introduced.

Measured, same opencode2 build and the same packed tarball:

  macOS, warm caches:      healthy 0.8s, plugin activated 6.3s
  linux/amd64 container:   healthy 8.2s, plugin activated 45.3s

Raise the budgets to 120s and 300s (overridable via
PLANNOTATOR_SMOKE_HEALTH_TIMEOUT_MS / PLANNOTATOR_SMOKE_PLUGIN_TIMEOUT_MS) and
give the job a 25 minute backstop. The assertion is untouched: the smoke still
requires the plugin registry to report the plannotator plugin.

Also make a failure legible and prompt. Each poll gets a per-request timeout so
one wedged request cannot swallow the budget, waits report progress, failures
carry the elapsed time and the last HTTP status/body, and teardown escalates to
SIGKILL and force-closes the registry. The CI failure previously burned five
minutes in teardown before printing anything.
@backnotprop
backnotprop merged commit d7be340 into main Aug 5, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant