Commit Graph

4163 Commits

Author SHA1 Message Date
Peter Steinberger
ce919593bf fix(ui): unblock rebases with generated i18n conflicts (#109279)
* fix(ui): automate i18n conflict resolution

* fix(ui): preserve i18n cache merge intent

* fix(ui): restrict resolver to generated locales

* fix(ui): prune stale locales before baseline

* fix(ui): handle removed locale conflicts
2026-07-16 12:52:28 -07:00
Peter Steinberger
6c39e713d4 refactor: move native hook relay registry to SQLite (#109289)
* refactor: store native hook relays in SQLite

* chore: satisfy relay store CI checks
2026-07-16 12:14:06 -07:00
Dallin Romney
c4b2183db6 fix(release): repair frozen validation compatibility (#109272) 2026-07-16 11:45:31 -07:00
tzy-17
e9b974e18b fix(ci): bound release evidence dispatch (#108898) 2026-07-16 11:38:19 -07:00
Peter Steinberger
04c31f453c fix: reject oversized credential files in remaining readers (#109260)
* fix(security): bound remaining credential file reads

* fix(anthropic-vertex): keep ADC helper type private
2026-07-16 11:33:18 -07:00
tzy-17
9c61809ec4 fix(ci): bound plugin npm artifact connection (#108897) 2026-07-16 11:23:01 -07:00
Dallin Romney
954c77d4ef test(ci): temporarily omit Z.AI API Platform validation (#109246)
* test(ci): temporarily omit Z.AI API Platform validation

* test(ci): align disabled provider count
2026-07-16 11:16:29 -07:00
Peter Steinberger
21b08f34b7 perf(ci): run the deadcode Knip scans concurrently (#109151)
* perf(ci): run the deadcode Knip scans concurrently

check-dependencies spent ~194s running seven Knip child processes
strictly serially (three package scripts, each iterating its scans).
The scans are independent processes over separate configs: both
deadcode scripts now Promise.all their scans, the CI task launches the
three package scripts concurrently with buffered logs, and the lane
moves to the 16 vCPU class for core/memory headroom. The
missing-exports-script contract violation now fails fast before
launching scans. Local: unused-files 218% CPU, 37s wall.

* test(ci): align prerelease plan with the 16 vCPU dependencies lane
2026-07-16 10:46:44 -07:00
Peter Steinberger
2cd3ee43ee refactor: store workspace setup state in SQLite (#109147)
* refactor(state): move workspace setup state to SQLite

* test(state): track workspace cleanup temp dirs

* fix(state): satisfy workspace migration gates

* docs(state): fix migration list indentation

* fix(state): verify sibling migration claims

* fix(state): remove obsolete claim probe
2026-07-16 10:28:36 -07:00
Peter Steinberger
1effda0d8c fix(crabbox): make signal-cleanup proof deterministic (#109223)
* test(crabbox): stabilize signal cleanup proof

* test(crabbox): wait for signal cleanup readiness
2026-07-16 10:24:02 -07:00
Peter Steinberger
ba65a56ffd test(scripts): fix pid-write race in tsc-boundary SIGTERM test (#109140)
The child wrote its pid with fs.writeFileSync, which makes the file visible at
open() (0 bytes) before the content lands. Under CI load the existsSync-gated
reader in waitForFile could observe the empty file, so readFileSync returned ''
and Number.parseInt yielded NaN, making isProcessAlive(NaN) false and failing the
pre-kill liveness assertion (checks-node-compact-small-6 flake). Write the pid to
a temp file and rename it into place so the path only appears with full content.
2026-07-16 09:54:49 -07:00
Peter Steinberger
af42fbb6f3 perf(ci): unblock parallel oxlint shards and gate the lint-lane i18n verify (#109144)
* perf(ci): unblock parallel oxlint shards and gate the lint-lane i18n verify

check-lint is the slowest static lane (median 252s): the control-UI
i18n verify runs 86s unconditionally and the three oxlint shards run
serially (89s) because the parallel gate demands 48GB of memory — a
local-Mac threshold that Blacksmith's 32GB 16 vCPU class can never
meet. CI now parallelizes shards at 8+ cores / 24GB+, and the lint case
reuses the existing run_control_ui_i18n manifest gate so diffs that
cannot affect generated catalogs skip the verify while oxlint always
runs.

* chore(ci): print oxlint shard concurrency decision

The lint-lane validation run still executed shards serially on a 16
vCPU runner; one log line exposes the resolved concurrency and the
host resources the decision saw.
2026-07-16 09:45:47 -07:00
Peter Steinberger
e363add72f fix(prompt-probe): close stalled response bodies (#109188) 2026-07-16 09:39:48 -07:00
zengLingbiao
5f4f249d88 fix(prompt-probe): bound Anthropic upstream proxy fetch requests (#108832)
* fix(prompt-probe): bound Anthropic upstream proxy fetch requests

* test(prompt-probe): exercise stalled upstream deadline

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 09:04:39 -07:00
Peter Steinberger
d806cf4171 test: reuse resolver git fixture (#109154) 2026-07-16 09:03:15 -07:00
Peter Steinberger
46c3dba537 chore: gate releases on Codex progress follow-through (#108828)
* test(release): gate Codex progress follow-through

* test(release): register Codex follow-through entry

* test(release): harden Codex follow-through proof

* test(release): preserve legacy Codex follow-through proof
2026-07-16 09:01:00 -07:00
Peter Steinberger
243beca126 ci(release): extend gateway restart harness timeout 2026-07-16 16:59:34 +01:00
Peter Steinberger
89a16c93b5 fix(ci): give vitest no-output retries the full watchdog window
Shards that pin a short no-output timeout (agents-core stripes) die fast
on the known warm-cache stall, but a cold Vitest module cache makes the
same imports legitimately silent for minutes - the in-job retry then
re-dies at the short limit without running a single test (observed 4x
on agents-core-runner-cli-2 today). Raise the retry attempt's window to
the 300s watchdog floor while keeping the fast first kill.
2026-07-16 16:42:01 +01:00
zengLingbiao
b273fd41c4 fix(e2e): bound ClickClack fixture plugin fetch requests (#108826)
* fix(e2e): bound ClickClack fixture plugin fetch requests

* test(e2e): exercise ClickClack response deadline

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 08:35:51 -07:00
Peter Steinberger
3690f02c71 fix(build): tolerate plugin SDK dts variance (#109119) 2026-07-16 08:35:10 -07:00
Alix-007
0159f54268 fix(e2e): bound Pond gateway connections (#108973)
* fix(e2e): bound Pond gateway connections

* fix(e2e): declare Pond gateway RPC types

* fix(e2e): close Pond socket when setup fails

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 08:18:44 -07:00
Peter Steinberger
f3a2f9f8a7 perf(ci): gate prompt-snapshot regeneration on the generator's blast radius (#109083)
check-prompt-snapshots costs 200-310s per PR regenerating real prompt
stacks, but snapshots only change when the generator's import graph or
its fixtures do. The manifest now computes that reach (same pattern as
QA smoke gating: always-run surface regex incl. the codex extension
whose test API loads via a dynamic module id, plus import-graph walk
from the snapshot helper; deletions and null diffs fail safe to
running). Unaffected PR diffs skip the lane with an explicit log line;
pushes and dispatches always run.
2026-07-16 08:06:06 -07:00
ooiuuii
f12b4af021 fix(install): normalize Windows temp short paths (#108050)
* Normalize Windows installer temp paths

* fix(install): canonicalize Windows temp root

Co-authored-by: luyifan <al3060388206@gmail.com>

* fix(install): resolve Windows temp aliases with Get-Item

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 08:02:31 -07:00
Peter Steinberger
f3fcea0cde fix(release): filter unresolved PR title references 2026-07-16 15:53:00 +01:00
xingzhou
16c2bbb540 fix(mantis): bound Crabbox source checkout (#108940) 2026-07-16 07:49:07 -07:00
Peter Steinberger
a0d6cd724a feat(ui): animated Clawd mascot on the new-session welcome hero (#108825)
* feat(ui): animated Clawd mascot on the new-session welcome hero

Ports the native mascot to the Control UI as a canvas-backed
<openclaw-mascot> Lit component: exact 120x120 vector geometry, mood
loops (idle/curious/thinking/working/happy/celebrating/sad/sleepy/
attentive), deterministic seeded animator, DPR-aware rendering,
visibility-paused rAF, theme-reactive palette, and a reduced-motion
static pose. The new-session welcome hero swaps its static lobster
sprite for the living mascot.

* fix(ui): cancel stale mascot gestures on mood change

* fix(ui): keep MascotEffect internal to the pose module

* test(lint): allowlist the canvas fill suppression for the web mascot
2026-07-16 07:38:14 -07:00
Peter Steinberger
1b2598276a Revert "fix(ci): bound agents-core no-output stalls to one minute"
This reverts commit 022a567406.
2026-07-16 06:36:11 -07:00
Peter Steinberger
022a567406 fix(ci): bound agents-core no-output stalls to one minute
The agents-core graph can stall emitting nothing after warming Vitest's
module cache; a cli-runner stripe sat silent for the full 300s watchdog
window before its retry passed in seconds (run 29499091157, +5min on a
green PR). Give the family the same 60s no-output timeout the gateway
startup-health group already uses for this stall class.
2026-07-16 06:04:23 -07:00
Sedrak Hovhannisyan
cc34a46c14 fix: prevent source builds from exhausting host memory (#108790)
* fix: reduce peak memory in source builds

* fix(build): preserve CLI no-dts fast path

* fix(build): preserve forwarded tsdown selectors

---------

Co-authored-by: openclaud11-sys <openclaud1.1@gmail.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 05:58:53 -07:00
Peter Steinberger
771233cf94 perf(ci): trim compact packing cap to 220s for loaded-fleet headroom
Fleet-contended runners inflate measured group runtimes ~20-25% over
the serial-run hints (bins hit 300-358s on a loaded 12:1xZ run against
a 260s packed estimate). A 220s cap keeps the slowest bin near the
5-minute PR wall-clock budget under load at the cost of two extra
jobs (24 -> 26).
2026-07-16 05:29:45 -07:00
Alix-007
66a4205c57 fix(e2e): bound official installer download (#108937)
* fix(e2e): bound official installer download

* test(e2e): cover downloaded installer execution

* fix(e2e): harden installer download proof

Co-authored-by: Alix-007 <li.long15@xydigit.com>

* test(e2e): type installer fixture environment

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 05:26:00 -07:00
lybnnnn
02f494b51e fix: clarify SQLite version error message to prevent user confusion (#108382)
* fix: clarify SQLite version error message to prevent user confusion

The error message "3.44.6+" was misinterpreted by users as meaning "3.44.6 and above",
when it actually means "3.44.6+ for the 3.44.x series only". This commit clarifies the
error message to explicitly state that only specific patched versions (3.44.6+, 3.50.7+,
and 3.51.3+) are safe, and that SQLite 3.46.1 is not among them.

Changes:
- Update error message in src/infra/node-sqlite.ts to clarify version requirements
- Update test expectations in src/infra/node-sqlite.test.ts to match new error format
- Fix unnecessary template literal expressions flagged by oxlint

The code logic remains unchanged - SQLite 3.46.1 is correctly rejected as unsafe.

* fix: clarify SQLite version error message to prevent user confusion

The previous error message stated '3.44.6+' which users misinterpreted as
'3.44.6 and above', leading to confusion when versions like 3.46.1 were rejected.

The new message explicitly states '3.44.6+ in the 3.44.x series' and
'3.50.7+ in the 3.50.x series' to make it clear that only specific
minor version series received the WAL-reset bug fix.

This matches the SQLite team's actual fix announcement which only
backported the fix to 3.44.x and 3.50.x series, plus 3.51.3+.

* fix(sqlite): align unsafe version diagnostics

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 05:24:14 -07:00
Peter Steinberger
1d5479520f perf(ci): skip global declaration emission in the CI artifacts build (#108949)
* perf(ci): skip global declaration emission in the CI artifacts build

Declaration emission is ~95% of the tsdown wall clock (measured 132.5s
with dts vs 6.0s without on the main graph; 224.7s in CI). PR CI's dist
consumers only execute runtime JS, so the ciArtifacts profile now skips
global dts and the plugin-sdk export gate validates self-built scoped
declarations (write-plugin-sdk-entry-dts non-canonical mode, 45s local).
The step cache is dropped in self-build mode because its outputs depend
on the SDK source graph the canonical cache inputs do not cover.
Release and docker packaging builds keep canonical declarations.
Local end-to-end: build:ci-artifacts 92s with all gates green.

* fix(ci): pin gateway suites to the proven 2-worker Vitest budget

gateway-core and gateway-methods flaked at 6 workers (hook timeouts,
mock-state res.setHeader TypeError, waitForAssertion misses) on the
first run after the worker-budget raise while passing on two prior
validation runs — the same intermittent contention class media-ui
showed. Pin both like the other timing-sensitive groups.
2026-07-16 04:54:34 -07:00
Peter Steinberger
509f5d3409 fix: bound npm fixture upstream response bodies (#108960)
* test: bound npm fixture upstream responses

* test: auto-clean npm fixture temp dirs

* style: format npm fixture assertion test

* test: simplify plugin fixture temp cleanup
2026-07-16 04:53:43 -07:00
Alix-007
f198758006 fix(e2e): bound cross-OS installer fetches (#108771)
* fix(e2e): bound cross-OS installer fetches

* test(e2e): prove Windows installer timeout

Co-authored-by: Alix-007 <li.long15@xydigit.com>

* test(e2e): track installer proof temp dirs

Co-authored-by: Alix-007 <li.long15@xydigit.com>

* fix(e2e): buffer POSIX installer downloads

Co-authored-by: Alix-007 <li.long15@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 04:50:53 -07:00
Peter Steinberger
037ef6695a fix(ci): bound actionlint downloads (#108938) 2026-07-16 04:24:26 -07:00
Peter Steinberger
d739daef10 fix(ci): handle Android license pipe closure 2026-07-16 12:12:18 +01:00
Alix-007
f538addc66 fix(ci): bound non-root NodeSource setup download (#108911) 2026-07-16 04:08:47 -07:00
Peter Steinberger
06e3a09bd8 fix(ci): preserve advisory release checks 2026-07-16 11:56:01 +01:00
Peter Steinberger
0b97e22a10 test(e2e): synchronize npm upstream body timeout (#108873)
Co-authored-by: Alix-007 <li.long15@xydigit.com>
2026-07-16 03:48:02 -07:00
Peter Steinberger
e0ffbd90d9 fix(ci): isolate bounded metadata retries (#108804)
* fix(ci): bound Mantis runner IP retries

* fix(e2e): isolate Windows metadata retries

* fix(ci): validate complete runner IPv4

Co-authored-by: Alix-007 <li.long15@xydigit.com>

---------

Co-authored-by: Alix-007 <li.long15@xydigit.com>
2026-07-16 03:39:31 -07:00
Peter Steinberger
b6b8e59b9e refactor(ci): share Android toolchain setup (#108855)
* refactor(ci): share Android toolchain setup

* fix(ci): preserve frozen Android targets
2026-07-16 03:38:31 -07:00
Peter Steinberger
2c7cf8d745 perf(ci): scale Vitest workers with runner class and share serial module cache (#108788)
* perf(ci): scale Vitest workers with runner class and share serial module cache

Compact node-test jobs pinned OPENCLAW_VITEST_MAX_WORKERS=2 regardless of
runner size, so import-bound suites (30-45s of module-graph import per
file) crawled: runner-cli spent 284s on 5s of tests, commands-1 296s on
10s. With serial plans the budget now scales with the class (6 on 8vcpu,
3 on 4vcpu); timing-sensitive groups (tooling, tui-pty, infra-process)
stay pinned to 2 via plan-level env. Serial bins share one Vitest
fs-module-cache path so later plans reuse the first plan's transforms.
The import-bound commands stripes and security suite move to the 8vcpu
class, and packing hints refresh from serial-run measurements (run
29481835688).

* perf(ci): stripe cli-runner suite and pin media-ui worker budget

The agents-core config runs files serially (fileParallelism false guards
shared module state), so raising the worker budget cannot help its
import-heavy cli-runner suite (~35s module import per file, 213s serial).
Stripe it three ways so bins parallelize the imports instead. media-ui
hosts browser locator tests that timed out at 6 workers on the first
validation run; pin it to the proven 2-worker budget. commands-1's hint
drops to its measured 6-worker runtime.
2026-07-16 03:36:37 -07:00
Peter Steinberger
e95577ded7 fix(e2e): bound macOS Discord host requests (#108880) 2026-07-16 03:36:20 -07:00
Alix-007
de10d98c81 fix(e2e): bound OpenShell installer fetch (#108810) 2026-07-16 03:27:03 -07:00
Peter Steinberger
76a236da5f fix(ci): harden release validation gates (#108798)
* fix(ci): harden release validation gates

* fix(apns): keep tombstones in strict SQLite schema

* fix(ci): isolate PR publication transport
2026-07-16 03:21:08 -07:00
Peter Steinberger
8dd204e4fc fix(installer): retry transient Windows npm failures 2026-07-16 11:19:41 +01:00
Peter Steinberger
27065a65b7 fix(scripts): survive pr worktree teardown in lock release and self-heal stale registrations (#108870) 2026-07-16 03:13:44 -07:00
Alix-007
e3e071f8c1 fix(installer): bound PowerShell download stalls (#108791) 2026-07-16 03:13:26 -07:00
Peter Steinberger
57ae43a89c fix(ci): harden full release validation 2026-07-16 10:26:29 +01:00