Commit Graph

5160 Commits

Author SHA1 Message Date
Peter Steinberger 3a49aa1ac6 improve: split hosted Windows CI into three lanes (#123577)
* ci: split Windows tests into three lanes

* test: cover three-way Windows CI partition
2026-08-14 02:40:02 -07:00
Ayaan Zaidi fc87337c14 fix(ci): keep Telegram shards alive after the first isolated file (#123576)
Five-file Telegram jobs finished the first file, then isolate re-imported the next graph in silence until the 300s watchdog killed the worker. Recycle the Vitest process after each file and keep five files per CI job.
2026-08-14 14:50:21 +05:30
Peter Steinberger 8865c2539b ci: shorten hosted PR path (#123570) 2026-08-14 02:11:25 -07:00
Peter Steinberger 749340fc16 ci: widen hybrid Blacksmith routing (#123552) 2026-08-14 01:37:32 -07:00
Peter Steinberger e51ee089b7 improve: add hybrid CI runner backend (#123479)
* ci: add hybrid runner backend

* test: admit hybrid backend in CI fixture
2026-08-14 00:19:28 -07:00
Ayaan Zaidi d4ee874fea fix(ci): preserve scoped extension test plans (#123534)
Preserve externally scoped Telegram and Matrix test plans instead of expanding each CI shard back into the full extension suite. Keep broad runs bounded and retain external include ownership through directory run specs.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-14 12:43:54 +05:30
Ayaan Zaidi 14882ac44d fix(ci): prevent Telegram test watchdog stalls (#123514)
Bound Telegram extension tests to five files per Vitest process across explicit config, directory, and full-suite routes while preserving serial isolated execution.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-14 11:55:29 +05:30
Peter Steinberger 1400049ae9 improve(ci): cut hosted test import time with warm caches (#123465)
* perf(ci): restore hosted test caches across lanes

* perf(ci): restore caches in remaining Vitest lanes
2026-08-13 22:41:27 -07:00
Peter Steinberger 1ea1499107 perf(test): consolidate channel artifact parity (#123480) 2026-08-13 22:25:39 -07:00
Peter Steinberger 737982d5fe fix(macos): adopt Peekaboo 4.1 bridge contracts (#123420)
* feat(macos): adopt checked Peekaboo bridge runtime

* fix(macos): preserve bridge snapshot retention

* docs(macos): clarify bridge client identity

* fix(macos): retry transient timestamp signing

* build(macos): pin embedded Peekaboo runtime

* fix(macos): expose embedded bridge source identity

* test(macos): isolate gateway launch agent hooks

(cherry picked from commit 7da18c5fee43fed7e8dfa42c4851f99d035b2a36)

* test(macos): pin gateway command mode

* fix(macos): preserve Peekaboo bridge provenance
2026-08-13 22:03:47 -07:00
Peter Steinberger 27c4433939 fix(ci): trust dependency approvers before graph compare (#123456) 2026-08-13 21:03:34 -07:00
Peter Steinberger 575467aa58 fix(openai): unify server-side compaction gates and harden compaction recovery (#123397)
* fix(openai): unify server compaction policy

* fix(openai): preserve managed responses aliases

* fix(compaction): harden bounded recovery

* refactor(compaction): simplify orphan output classifier

* fix(compaction): unanchor overflow classifiers and route image constant through runtime facade

* test(openai): use provider input config in compaction parity

* test(openai): model default compaction route accurately

* fix(openai): isolate responses payload policy imports

* fix(ai): remove unused responses api re-export

* fix(plugins): resolve responses policy source alias
2026-08-13 20:45:07 -07:00
Peter Steinberger c06f993b5c fix(ci): restore hosted cache writers (#123440) 2026-08-13 20:16:54 -07:00
Peter Steinberger edf1777ddb refactor(i18n): re-key native i18n artifacts to content-hash identity (v2) (#123347)
* refactor(i18n): re-key native i18n artifacts to content-hash identity (v2)

The native inventory stored a write-only 'line' field per entry, so any
unrelated edit above a string rewrote apps/.i18n/native-source.json
(~half of all commits touching it were pure line-number churn). Identity
was (surface, path, source), duplicating the same string per file
(5385 entries for 4187 unique pairs) and churning IDs on file moves.
Locale artifacts were positional arrays repeating full English source
text, so one inserted string rewrote diff spans in all 21 files.

v2 artifacts: inventory entries keyed by (surface, source) with merged
per-site {path, kind} lists and pure sha256 content-hash IDs; locale
files become id-keyed sorted translation maps. Existing translations
carry over by source match with a deterministic duplicate pick; the
sticky-ID reuse machinery and positional validation are deleted.
Everything under apps/.i18n plus generated platform locale artifacts is
marked linguist-generated. ci-changed-scope gains a one-time
owner-complete migration escape mirroring the control-ui precedent.

CLI surface (baseline/check/sync/verify) and the locale-refresh
workflow are unchanged.

* ci: register run-attempt-state test in its Vitest lane

Commit e04dfd26e2 added extensions/codex/src/app-server/run-attempt-state.test.ts
without a lane owner, so the full-suite ownership audit
(test/vitest-projects-config.test.ts) fails on main. Register it in the
attempt-light shard alongside its run-attempt siblings.
2026-08-13 19:39:32 -07:00
Jesse Merhi 3cdf888b76 fix(tooling): bound tsgo core test memory (#122748)
* fix(tooling): bound tsgo core test memory

* perf(tooling): reuse bounded tsgo test state

* fix(tooling): preserve bounded tsgo aggregate coverage

* fix(tooling): satisfy rebased lint checks

* test(sqlite): stabilize publication replacement fault

* fix(tooling): guard targeted tsgo declarations

* fix(tooling): guard inherited package test roots

* fix(tooling): guard shared test declaration roots

* test(gateway): synchronize staged recovery proof

---------

Co-authored-by: Jesse Merhi <jesse-merhi@users.noreply.github.com>
2026-08-14 12:38:42 +10:00
Peter Steinberger 257eb21235 improve(ci): shorten GitHub-hosted Node matrix (#123406)
* improve(ci): shorten GitHub-hosted matrix wall time

* fix(ci): keep hosted dependency setup store-only

* fix(ci): split the hosted tooling tail
2026-08-13 19:32:50 -07:00
Peter Steinberger b376b13fec feat(docker): weekly refresh of published moving image tags (#123348)
* feat(docker): schedule image refreshes

* docs(docker): explain weekly image refreshes

* test(scripts): gate workflow-step execution on bash 4 mapfile support

Stock macOS bash 3.2 lacks mapfile; CI truth is Linux bash 5.

* test: cover docker-release suffix threading and sanctioned second caller

* test(codex): wire run-attempt-state into the attempt-extra project

#123345 added the file without a project owner; the full-suite coverage
guard fails for any PR that runs it.

* fix(ci): run build-artifacts PR validation on hosted runners

ci-build-artifacts-testbox.yml pinned PR runs to blacksmith-16vcpu and
ran Testbox lifecycle steps unconditionally, so the prepare-run landing
gate starved for every PR during a Blacksmith outage even with
OPENCLAW_CI_RUNNER_BACKEND=github. PR events now build on ubuntu-24.04
with dispatch-only Testbox steps, mirroring ci-check-testbox.yml.

* test(ci): align build-artifacts dispatch guard
2026-08-13 19:20:05 -07:00
Jason (Json) 08224cdedb fix(plugins): keep inventory available without a system owner (#123378)
* fix(plugins): degrade inventory without system owner

* fix(plugins): keep workspace resolver internals private

* fix(plugins): align workspace persistence compatibility
2026-08-13 19:04:33 -07:00
Peter Steinberger 7a378f1f8e improve(ci): rebalance GitHub-hosted compact test lanes (#123383)
* perf(ci): rebalance GitHub-hosted compact hints

* test(ci): exclude failed hosted timing samples

* fix(ci): keep Codex state test in one Vitest lane
2026-08-13 17:45:33 -07:00
Peter Steinberger 20be26cfe2 refactor(test): remove residual test-only seams (#123168)
* refactor(test): remove residual test-only seams

* fix(test): fresh-load Vitest ownership configs

* test(infra): repair boundary test routing

* test(infra): use landed Codex test owner
2026-08-13 17:16:55 -07:00
Peter Steinberger 1348387076 refactor(plugins): replace node-llama-cpp with managed llama-server (#123105)
Move llama.cpp chat and local embeddings onto a verified externally managed llama-server runtime. Remove the in-process native runtime, forked embedding workers, and node-llama-cpp dependency while preserving guided setup, local GGUF models, tool-capable agent runs, diagnostics, and operator docs.
2026-08-13 16:58:20 -07:00
Peter Steinberger 1287befae7 fix(release): preserve upgrade diagnostic probe (#123338)
* fix(release): preserve upgrade diagnostic probe

* test(vitest): reinstantiate contract projects for audits

* style(test): format upgrade diagnostic assertions

* test(ui): isolate route transition outlet fixture
2026-08-13 16:56:43 -07:00
Peter Steinberger 6995f98243 ci: split remaining GitHub-hosted tail lanes (#123364)
* ci: codify manual-only Node 22 compatibility

* ci: split remaining hosted tail lanes

* fix(qa-lab): carry the validated part index into the plan id type

* test(ci): repair hosted tail lane guards
2026-08-13 16:52:25 -07:00
Peter Steinberger b1491356df ci: shard hosted UI e2e further (#123329) 2026-08-13 15:20:37 -07:00
Peter Steinberger 4a5aeb8dd2 improve(ci): shorten GitHub-hosted outage runs (#123294)
* ci: run push compacts without tooling lanes and stripe giants three-way

* fix(ci): keep CompactNodeTestPlanMode internal

knip --production flags the exported type as unused; no external module
imports it.

* ci: shard hosted lint and node tests

Split core oxlint across hosted runners and use backend-specific compact Node admission caps while preserving Blacksmith behavior.

* test(ci): guard plugin prerelease planner isolation
2026-08-13 15:19:15 -07:00
Peter Steinberger f8bca11d77 chore(ui): add dead-CSS audit script and delete unreferenced stylesheet rules (#123178)
* chore(ui): add dead-CSS audit script and delete unreferenced stylesheet rules

* fix(scripts): type-safe AST walking in the dead-CSS audit

* fix(scripts): detect ternary-headed class stems and restore live wizard rules
2026-08-13 14:53:17 -07:00
Peter Steinberger e7aa4d203e fix(ci): run complete plugin tests for direct changes (#123314) 2026-08-13 14:29:24 -07:00
Peter Steinberger ffa8a1d892 fix(release): print post-update config diagnostics (#123221) 2026-08-13 14:24:22 -07:00
Peter Steinberger d805562a84 fix(ui): verify referenced translation keys (#123279) 2026-08-13 11:32:56 -07:00
Vincent Koc abd63c06c2 fix(ci): allow GitHub-hosted npm preflight (#123191) 2026-08-14 02:32:01 +08:00
Peter Steinberger 2a70d849e8 improve(ci): stripe giant compact test groups (#123142)
* ci: stripe media-ui, gateway-core, and security compact groups

* fix(ci): preserve compact stripe config ownership
2026-08-13 10:46:38 -07:00
Peter Steinberger fb82d87cad fix: keep CI running during Blacksmith outages (#123263)
* ci: add runner-backend circuit breaker with GitHub-hosted fallback

* fix(ci): extend hosted timeouts to circuit-breaker runs
2026-08-13 10:18:35 -07:00
Peter Steinberger c3d843eb24 test: remove residual duplicate assertions (#123134)
* test: remove residual duplicate assertions

* test: repair stale routing and capability fixtures

* fix(cli): bound one-shot stream drain exit
2026-08-13 04:41:37 -07:00
Vincent Koc 57fabb2c9c fix(release): allow ANSI in reusable job logs (#123129)
Preserve ANSI output for reusable validation job-log reads while retaining a bounded fallback for GitHub CLI versions that do not support the raw-output flag.
2026-08-13 19:19:03 +08:00
Peter Steinberger fa18d8d273 ci: pipeline canonical main runs across two concurrency slots (#123135)
Measured canonical-main first-start delay: median 180s, average 209s; 10 of the last 30 runs waited more than 300s.

Approved tradeoff: up to ~+30 concurrent Blacksmith VMs during merge storms. Scope is canonical main pushes only; pull requests, manual runs, non-main refs, and forks keep their existing semantics.

Bump the canonical-main concurrency group from v7 to v8 so in-flight old-group runs cannot mix with the two-slot pipeline.
2026-08-13 04:04:51 -07:00
Ayaan Zaidi d2afbd05ad refactor(plugin-sdk): replace API baselines with diffs (#123036)
* refactor(plugin-sdk): replace API baselines with diffs

* perf(plugin-sdk): bound API diff resources

* fix(plugin-sdk): isolate API diff dependencies

* fix(release): forward Plugin SDK acknowledgement

* fix(release): enforce SDK acknowledgement on publish

* chore: preserve generated-doc ignore policy

* fix(release): freeze SDK API evidence before publish

* fix(ci): satisfy SDK evidence guards

* fix(release): bind complete SDK evidence

* fix(release): authenticate plugin SDK evidence

* fix(plugin-sdk): abort interrupted API diffs

* test(ui): freeze page clock in background-tasks rail e2e

The rail transcript is compared byte-for-byte across the detail-panel
round-trip while it renders live relative ages; on slow CI runners the
second boundary ticks between the two reads (11s -> 12s) and fails the
equality assertion. Fix the page Date with Playwright setFixedTime while
keeping timers running so the tasks.list polling assertions still hold.

Repro: a 1.5s stall between the reads fails pre-fix with the exact CI
diff and passes post-fix.

* fix(scripts): drop unused export on dependency-evidence CLI main

Knip's workflow scan re-roots script references after an actions/checkout
step that sets path:, so the new trusted-tooling checkout in
openclaw-npm-release.yml stops marking this CLI as a workflow entry and
its exported main() surfaces as an unused export in check-dependencies.
Nothing imports main; the module invokes it through its own entry guard,
so the export keyword was dead surface either way.

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-13 03:45:36 -07:00
Vincent Koc 9794a4a49c fix(release): bind reusable evidence verifier source (#123115) 2026-08-13 18:19:28 +08:00
Peter Steinberger 581e67e887 ci: refresh compact shard packing hints from current main runtimes (#123100) 2026-08-13 02:38:50 -07:00
Vincent Koc 93cdb610b3 fix(release): keep validation evidence reuse dependency-free
* fix(release): keep evidence reuse dependency-free

* fix(release): preserve preflight failure trailer
2026-08-13 17:26:31 +08:00
Vincent Koc 03e89dc9d5 fix(release): include plugin tooling dependencies (#123082) 2026-08-13 17:22:11 +08:00
Peter Steinberger 7235943790 fix(release): align survivor session metadata assertion (#123068)
* fix(release): align survivor session metadata assertion

* test(release): cover SQLite survivor metadata
2026-08-13 01:41:53 -07:00
Peter Steinberger 3b6e54041f ci: replace dependency sticky disk with exact cache (#123040)
Amp-Thread-ID: https://ampcode.com/threads/T-019ff3db-c467-70ad-8ed3-81f2ba94b0c0

Co-authored-by: Amp <amp@ampcode.com>
2026-08-13 01:13:25 -07:00
Peter Steinberger fce5b6688a refactor(tooling): enforce zero wrapper and export debt (#123020) 2026-08-13 00:40:32 -07:00
Jesse Merhi b9f2eba177 fix(perf): reuse prepared plugin generations 2026-08-13 17:03:19 +10:00
Jesse Merhi b2e023adc6 test(perf): benchmark gateway plugin snapshot load 2026-08-13 17:03:19 +10:00
Vincent Koc 8371831eba fix(ci): validate duplicate coverage on frozen targets 2026-08-13 14:37:21 +08:00
Leon-SK668 cc2ed816be fix(mac): preserve Xcode preflight failure diagnostics (#121170) 2026-08-13 14:17:32 +08:00
Vincent Koc fd353ee5d7 fix(parallels): recover migration-refused gateway startup 2026-08-13 13:14:22 +08:00
Vincent Koc 1e7a76f49c fix(e2e): declare agents-delete fixture owners (#123000) 2026-08-13 13:07:55 +08:00
Peter Steinberger 9bf9bcebc4 refactor(gateway): remove suspension mock replay (#122977)
* test(gateway): remove suspension mock replay

* test(agents): stabilize headless timeout assertion
2026-08-12 21:24:50 -07:00