Commit graph

3247 commits

Author SHA1 Message Date
Peter Steinberger
4a03e27230
ci(macos): restore runtime dependency for Swift tests
Keep package checks independent of Linux. Consume the successful producer artifact ID, including retained outputs on failed-job reruns, and preserve exact-revision verification without polling on an allocated Mac.
2026-10-21 10:56:28 -07:00
Josh Lehman
6badfc0475
test: drop retired heartbeat config from Gateway fixtures (#179626)
#179387 made the schema reject agents.defaults.heartbeat, so Gateway
fixtures that still wrote heartbeat: { every: "0m" } failed startup.
The performance workflow keeps the key only for candidates whose schema
still accepts it.
2026-10-21 10:07:27 -07:00
Peter Steinberger
2c3eb43af6
test(ui): retain single-widget chrome failure diagnostics (#179455) 2026-10-21 07:00:50 -07:00
Peter Steinberger
2679349115
perf(ci): parallelize preflight tree checkout
Use two command-local checkout workers while preserving the complete planner input tree and existing fetch and lifecycle policy. Add a reproducible materialization benchmark and document its local measurements and limitations.
2026-10-20 23:25:52 -07:00
Peter Steinberger
381e63226d
ci(ios): run Swift checks once on successful builds
Reuse the required Xcode SwiftLint and SwiftFormat phases after successful
current builds. Retain standalone diagnostics after failed or skipped builds
and for historical/frozen targets, including formatting after lint failure.
Keep every build target, simulator suite, runner and job unchanged.

Five interleaved local CI-shaped warm pairs improved the generation/build
segment median from 52.08s to 46.23s and p95 from 64.30s to 52.06s. Hosted
wall-time savings remain for the next natural CI run to measure.

Validation: 800 workflow/planner tests, 21 focused final admission cases,
complete iOS build-for-testing, targeted types/lint/format, workflow validation
and independent P2 review passed.
2026-10-20 23:24:33 -07:00
Peter Steinberger
cc14a17e5f
perf(ci): overlap baseline ratchets and reuse identical source snapshots
Run the same checks in two managed slots, retaining aggregate failures and
fatal cancellation cleanup. Keep frozen targets on their original commands.

Reuse fresh database-worker rows only when the complete current and historical
source maps match. Always validate current credential writers; changed snapshots
retain full historical analysis and the existing cache identity checks.

The local frozen-input full command fell from 713.31s to 505.67s, with 29% less
recorded CPU work. Both runs retain the same three inherited UI max-lines
failures. Focused boundary, queue and planner tests, typecheck, lint, formatting,
actionlint, script erasability and independent P2 review passed.
2026-10-20 22:59:31 -07:00
Dallin Romney
5303aee804
fix(release): accept the readable SDK diff summary in publish preflight evidence (#179044) 2026-10-20 22:29:26 -07:00
Peter Steinberger
f087ae16fc
ci(macos): overlap Swift builds with Linux runtime verification
Start both native phases after preflight and wait for the same-run runtime only after app test compilation. Preserve every native test partition, exact-checkout verification, producer-failure handling, retained successful output, runner, and job deadline.

Natural hourly 39539608388 published the runtime seven minutes before Linux verification ended. Replaying its existing setup and compilation projects an 11.6-minute earlier native finish with the same three jobs and build/test work. Local Swift builds with and without dist, wrapper and artifact fixtures, focused workflow/planner/manifest checks, targeted types/lint, pinned workflow validation, docs links, and P2 review passed.
2026-10-20 22:18:44 -07:00
Peter Steinberger
e8d8145cd6
ci: bump create-github-app-token to v3.3.0 in security review (#178708)
Moves the security-review workflow's primary and fallback GitHub App token steps to upstream v3.3.0 (64ab729a6294000f5aa4a4bc0b73d1f32bc45510), split out of the seven-day dependency refresh in #178071.
2026-10-20 22:02:09 -07:00
Josh Avant
d3da87e79d
improve(ios): reduce screenshot test startup overhead (#178891)
* improve(ios): reduce screenshot test startup overhead

* docs(ios): describe grouped screenshot sessions
2026-10-20 18:21:34 -07:00
Dallin Romney
10f76c5d37
fix(release): recover every failed artifact producer (#178179)
* fix(release): recover every failed artifact producer

Account for npm, Docker, and candidate producer jobs during failed release continuation, binding each recovery to the authenticated workflow and exact dispatch evidence.

Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>

* fix(release): retain discovered artifact producers

Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>

* test(release): exercise structured artifact recovery

Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>

* fix(release): retain legacy npm recovery

Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>

* fix(release): adopt recovered artifact attempts

Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>

* fix(release): keep candidate recovery fail closed

* fix(release): adopt retried Docker architectures

* test(release): type Docker retry producer entries

Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>

---------

Co-authored-by: roboclaw-bot <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>
2026-10-20 16:33:54 -07:00
Dallin Romney
fcac507982
fix(release): recover FRV before plan seal (#178218)
* fix(release): recover FRV before plan seal

Checkpoint exact attempt-one preparation inputs before execution-plan sealing so a retry can recover pre-seal failures without rebuilding authority from live state. Bind the eventual sealer attempt into the immutable plan and authenticate it at publication and cancellation boundaries.

Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>

* fix(release): keep plan cache writes attempt-scoped

Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>

* fix(release): authenticate preseal checkpoint layout

Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>

* test(release): type cached plan fixture explicitly

Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>

---------

Co-authored-by: roboclaw-bot <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>
2026-10-20 16:24:52 -07:00
Josh Avant
598e945b9f
fix(ios): recover Watch screenshots when the runtime becomes unavailable (#178818)
* fix(ios): repair unavailable Watch runtimes before screenshots

* test(ios): move Watch runtime coverage to the shared capture lane
2026-10-20 16:09:03 -07:00
Josh Avant
65fab36c6b
fix(ios): avoid blocking screenshot phases on resource diagnostics (#178765)
* fix(ios): avoid blocking screenshot phases on resource diagnostics

* test(ios): align screenshot diagnostics workflow expectations
2026-10-20 15:06:47 -07:00
Dallin Romney
f6c006637e
fix(release): show readable SDK acknowledgement diff (#178158)
Co-authored-by: roboclaw-bot <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>
2026-10-20 14:19:57 -07:00
Josh Avant
765ae71d6a
feat(ios): isolate simulator startup resource activity (#178534)
* feat(ios): isolate simulator startup resource activity

* fix(ios): recognize hosted simulator process origins

* feat(ios): probe simulator services and Spotlight indexing
2026-10-20 13:38:59 -07:00
Josh Avant
4a3af6e4d3
feat(ios): add bounded release resource diagnostics (#178285)
* feat(ios): add bounded release resource diagnostics

* fix(ios): guard signal forwarding after failed spawn

* fix(ios): make delayed resource observations explicit

* fix(ios): align CPU deltas with process observations
2026-10-20 05:15:25 -05:00
Peter Steinberger
888aa30368
ci: give weekly PostgreSQL shards runtime headroom (#178305) 2026-10-20 03:00:05 -07:00
Peter Steinberger
2e750ba704
ci: shard weekly PostgreSQL qualification (#178223) 2026-10-20 01:29:33 -07:00
Dallin Romney
a000edb51d
test(release): forward-port 2026.10.5 release-line harness fixes (#177319)
* fix(test): treat the env-gated Agents API live proof as optional shard evidence

test/gateway-agentsapi.live.test.ts (new since 2026.10.4) skips its only case
unless OPENCLAW_LIVE_AGENTS_API=1, which the native live test-harness shard
never sets, so the shard's no-passing-assertions guard failed it on every
2026.10.5 candidate once the other harness tests went green. Register it in
the existing whole-file opt-in map like the other env-gated live proofs.

(cherry picked from commit 761ef64bd5)

* fix(test): decode the Codex CLI JSON error after plugin uninstall

The live Codex npm plugin lane matched the expected post-uninstall error
against raw --json stdout, where quotes are escaped, so the correct
owner-plugin-not-activatable error never matched. Decode the canonical CLI
error message first, as the 2026.10.4 release line does (a9fd56df7d).

(cherry picked from commit e8772a9703)

* fix(test): scope CLI announcement barrier to parent probe

(cherry picked from commit d5c0db78de)
(cherry picked from commit a48d4a8fae)

* test(live): wait out the crash-loop breaker before the orphan settles

The native subagent restart live proof SIGKILLs the Gateway three times in
about two minutes. The third unclean boot trips the documented restart-loop
breaker (3 unclean boots within 5 minutes, #166238), which pauses restart
settlement, including interrupted subagent recovery (#166846), until the
unclean window drains. The orphan assertion added with the #169144 backport
only waited 30 seconds, so the nonannouncing child was still `running`.

Wait up to 360 seconds for the orphan settlement so the proof covers the
breaker pause and the automatic resume after its window. Assertions are
unchanged. 2026.10.4 passed because it predates the breaker pause, startup
subagent reconciliation, and this assertion.

Deterministic proof: the quiet-child e2e twin with SIGKILL restarts and an
exec-blocked child passes with one prior kill; with two warm-up kills it logs
"restart-loop breaker tripped" and the parent continuation never arrives
within 60 seconds; with a 400-second wait it settles and passes (338s).

(cherry picked from commit 1a4c2a0ebc)

* test(qa-lab): skip user-role runtime carriers in visible-child send proof

The sessions_send visible-child proof timed out on every 2026.10.5
candidate: its synthetic provider picked the latest user item that lacked
the legacy <<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>> marker as the user prompt.

Since #168546 (backport 8d66b946cd), OpenAI-compatible Responses
endpoints, including mock-openai, keep runtime context in a user-role
"OpenClaw runtime context:" carrier after the user turn instead of a
developer message. The fixture then read that carrier as the prompt, never
saw the "send" prompt on turn 2, answered PARENT_READY again, and the test
waited for PARENT_DONE until timeout.

Captured provider requests: v2026.10.4 sends the turn-2 carrier with role
developer; the 10.5 tip sends it with role user. Reverting a293f2e850
(#168410) left the failure unchanged.

Select the prompt with the shared qa-lab isInternalRuntimeContextCarrierText
helper, which already accepts current and legacy carrier shapes.

(cherry picked from commit d3a06e7e57)

* test(buzz): skip real reconnect backoff in cold-start recovery

(cherry picked from commit fa2049a369)

* fix(release): let the Telegram release lane finish its 25 scenarios

The isolated Telegram candidate job hit its 60-minute limit at scenario 24/25
on every 2026.10.5 candidate (about 62 minutes needed at 102-108s per packaged
Gateway start). main carries the same Telegram scenario set and job, so
raise the job budget to 90 minutes; the calling release-checks job keeps its
210-minute bound.

Also carry the 2026.10.4 release-line fixture fix for
telegram-prepared-delivery-recovery (8b78670080): keep the audit receipt in
the shared Gateway workspace and create it up front so the isolated SUT can
append without EACCES. main still writes it under the private tempRoot.

(cherry picked from commit 3cb49f0c4c, adapted to main's runner anchor)

* test(gateway): probe startup readiness on fresh connections

The deferred-fleet startup test failed twice in 2026.10.5 FRV #12 with
`fetch failed` / `read ECONNRESET`. Its Gateway shares the test process's
event loop. A /healthz or /readyz probe could reuse a keep-alive socket
that Undici still treated as live; when the request was written and a
synchronous main-thread startup stall followed, the server's idle-timer
callback ran before the poll phase read the request and destroyed the
socket with the request unread, so the kernel reset the connection.

main still probes with default keep-alive fetches. Probe with
`Connection: close`, matching existing Gateway test probes. Assertions are
unchanged.

(cherry picked from commit e3c63f2de4, adapted to main's probe sites)

* test(live): expect review effort for Skill Workshop background reviews in the Ultra lane

Since #161057 the Skill Workshop counts iterations per session, so Ultra probe
sessions trigger a background review after idling. The review runs under its
own skill-workshop-review: run and does not inherit the session's thinking
level, so the lane's every-request-is-max assertion failed on 2026.10.5
whenever a review reached the provider.

On main, #173889 pins review runs to thinkLevel "low" (review-run.ts), which
the OpenAI stream wrapper sends as effort "low". Expect that effort for review
runs; Ultra runs and their sessions must still be max, and independent
heartbeats stay medium.

The live file is over the line cap, so the Ultra wire effort policy moves to
a sibling helper with its observation type, and the deterministic review
cases run in the normal helper suite.

(cherry picked from commit ca1521329f, adapted to main's review thinking level)

* test(release): forward-port 2026.10.4-line upgrade-survivor and runtime-smoke harness fixes

Release-line harness fixes that 2026.10.1-2026.10.5 carried but main never
received:

- cron-scheduled-authority: seed the cron authority specimen through the
  published baseline's own SQLite writer (seedPublishedCronJobs) instead of a
  raw cron/jobs.json that current candidates treat as a retired pre-July
  store; drop owner fields for pre-2026.7.1 baselines
  (usesCronOwnerAtBaseline). The dispatcher passes the package root to
  seedState, and the scenario now requires a published baseline.
- bundled plugin runtime smoke: join deferred read-only update discovery via
  update.status before the package-manager child watchdog. main still defers
  install discovery (`<manager> root -g`) until after ready, so it can race
  the watchdog's no-package-manager-children check.

Skips the codex npm plugin live source-reply grep from the release commit:
main already probes dynamic-tool-source-reply.ts and dynamic-tools.ts.

(cherry picked from commit fcdf0d1b2c, codex grep hunk dropped; cron seed
test adapted to main's executable-mode fixture writes)
2026-10-19 23:28:30 -07:00
Peter Steinberger
e1dad1bd02
ci: qualify PostgreSQL 16 and 18 weekly (#178034)
* ci: qualify PostgreSQL 16 and 18 weekly

* test: follow immutable workflow key sorting convention

* ci: select PostgreSQL conformance for shared action changes
2026-10-19 23:01:51 -07:00
Peter Steinberger
9252f89534
fix(ci): isolate native policy tests and reuse Linux runtime
Keep native policy fixtures under shared test isolation through execution and
cleanup so node-service mocks cannot replace their selected CLI. Preserve all
cancellation, authority, and response-order assertions from the shared-owner
cutover in #177795.

Use an exact-checkout runtime artifact from the Linux build for macOS policy
tests. Install seven workspace dependency closures and omit unused plugin,
UI, and sealed-worker output instead of rebuilding the full workspace on Mac.

Proof: 21 native tests across five suites, 36 focused workflow/planner tests,
76 checkout tests, targeted types/lint/format, workflow validation, and P2 review.
2026-10-19 20:30:41 -07:00
Peter Steinberger
2ee6496b0c
fix(ci): prepare shared policy CLI for native tests
Native exec policy fixtures now use the real CLI after #177795. Install the full workspace and build the runtime before this native test phase; retain filtered dependency installs for other phases and older targets.

Proven with the sandboxed native cwd, socket cancellation and skill-trust suites (10 tests / 32 cases), workflow regression, targeted types/lint, workflow checks and clean P2 review. No native authority, cancellation or timeout changes.
2026-10-19 19:35:28 -07:00
Peter Steinberger
725c9261af
fix: keep folded socket owner in network scans (#177733) 2026-10-19 14:53:29 -07:00
RoboClaw
c192d50700
fix(ci): prevent locale refresh deferral after slow checkout (#177376)
Refresh canonical main through the existing pinned checkout after full-history bootstrap and artifact download, before dependency setup or worker-memory admission. Keep the terminal freshness guard unchanged.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
2026-10-19 14:23:55 +00:00
RoboClaw
b28c930d15
chore: update dependencies with a seven-day cooldown (#176423)
* chore: update dependencies with a seven-day cooldown

Worked on by:
- @steipete

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
OpenClaw-Publication: 85123e9c-a543-48e3-a29c-9b01ea5ef83f

* Publish openclaw/update-all-dependencies-with-a-seven-day-cool-off

Worked on by:
- @steipete

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
OpenClaw-Publication: 74b57fb5-59b0-4d2f-8884-b509c249838e

* fix: repair dependency qualification gates

Join pending plugin-state writes during native guard preparation. Update ingress and cancellation fixtures at their actual owning boundaries and provision the Watch runtime before screenshots.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

* fix: qualify dependency update runtime and tooling paths

Join database-wide pending publication before preparing native authority; retain execution settlement independently of terminal presentation. Defer interaction-only chat dialogs, exercise the actual formatter wrapper, and provision usable Watch runtimes without weakening gates.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

* Publish openclaw/update-all-dependencies-with-a-seven-day-cool-off

Worked on by:
- @steipete

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
OpenClaw-Publication: 8642734d-2859-4f3c-a70e-7a4d2f5a1ea1

* Publish openclaw/update-all-dependencies-with-a-seven-day-cool-off

Worked on by:
- @steipete

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
OpenClaw-Publication: 6147753b-a480-4d04-8882-6d9b51006f47

* fix: prepare monitor authority and verify Watch runtime readiness

Rejoin plugin-state publication after awaited Codex monitor preparation while preserving the original synchronous authority guard. Require Watch runtime bootability before accepting cached simulator metadata.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

* Publish openclaw/update-all-dependencies-with-a-seven-day-cool-off

Worked on by:
- @steipete

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
OpenClaw-Publication: 02d702e3-4030-496e-abc5-c818d4aec7a0

* Publish openclaw/update-all-dependencies-with-a-seven-day-cool-off

Worked on by:
- @steipete

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
OpenClaw-Publication: 3e069942-c5c9-4059-9fe0-bae78e34b6e6

* test: await lazy attachment previews in consumer fixtures

Preserve attachment behavior assertions while waiting for their async preview boundary. Control the cold read until its pending state is visible. Extract preview cases from the over-cap chat-view test without removing coverage. Include the canonical root-help mock-export repair from e63269c28a.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

* Publish openclaw/update-all-dependencies-with-a-seven-day-cool-off

Worked on by:
- @steipete

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
OpenClaw-Publication: d8af6943-60b3-445b-8fa5-536dfd300cc8

* test(codex): isolate deferred hooks and handshake clocks

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

* Publish openclaw/update-all-dependencies-with-a-seven-day-cool-off

Worked on by:
- @steipete

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
OpenClaw-Publication: 18e051ba-09cc-4fa2-87b7-49eda74ac61b

* test(ci): keep the capacity-plan timings mock export-preserving

(cherry picked from commit b791dd0664)

* test(ui): align model defaults help expectations

---------

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-10-19 04:47:07 -07:00
RoboClaw
ea4ed09098
fix(ci): let locale refresh catch up without a shared cache (#173806)
* fix(ci): retain locale work after publication deferral

Cache complete per-locale translation memory within its canonical baseline and generation policy. Reuse only source-hash-compatible entries on the next main run while preserving zero-fallback and stale-publication gates.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

* test(ci): validate the locale memory cache writer

Qualify the exact data-only locale cache paths, immutable key, upstream-main admission and mandatory zero-fallback artifact boundary in the central cache-write guard.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

* fix(ci): catch up locale artifacts without a shared cache

Replace the translation-memory cache with same-run, identity-bound TM artifacts. Reconcile once on fresh canonical main, preserve canonical corrections and forced refresh, and leave strict validation and the terminal publisher freshness checks unchanged.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

* test(ci): prove locale finalizer credentialed effects

Exercise real workflow steps, artifact admission, generator requests, strict validation and local Git publication. Retain nearest denied-producer and malformed-artifact controls, and replace the argument-only forced-refresh cases with output proof. Route the long composition through the existing release-proof inventory while retaining fast PR contracts.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

---------

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
2026-10-19 16:53:43 +08:00
Vincent Koc
b6e0872bdb
fix(ci): skip unused macOS companion dependencies (#177023) 2026-10-19 16:14:41 +08:00
RoboClaw
f2489c4109
feat: localize public conversation controls (#173800)
* feat: localize public conversation controls

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

* fix(i18n): preserve public-reader catalog order and mock exports

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

* fix(ci): serialize selected singleton test jobs

Normalize one-group projections only after packing while preserving the previous two-worker ceiling and existing capacity qualifications. Add deterministic failing-base coverage and retain the original four-target assertion.

Verified all 146 planner tests on the exposing localization inventory (109.81s wall), 183 focused planner/capacity tests in the repair checkout, targeted types/lint/format, and independent P0-P2 autoreview. No capacity, timing, memory, build, or runner budget is widened.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

* perf(i18n): avoid eager locale matcher compilation

Construct only the regexes needed during system-locale selection instead of compiling a second full rule collection at startup. Canonical language prefixes are already lowercase. Regenerate the boot module manifest through its cold/warm capture owner.

Focused locale and public-reader boundaries pass, along with targeted types, lint, format and independent P0-P2 review. New-route gzip is 1049987 bytes under its unchanged 1050000-byte ceiling. Chat gzip remains over the unchanged ceiling and requires the pending budget decision; this is not passing CI evidence.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

* chore(ui): adjust approved Chat boot byte ceiling

Vincent approved the Chat gzip ceiling adjustment from 1490000 to 1500000 bytes on 2026-10-19. Retain every other request, byte, catalog, and startup baseline limit unchanged.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

* perf(ui): load catalog popup with existing sidebar menus

Keep retained catalog state eager, but supply its popup renderer from the existing lazy sidebar menu module. First open requests that same loader; view replacement, trigger retargeting, mutation authority and focus remain unchanged. Regenerate the boot manifest through cold/warm capture.

Nine focused owner/mounted tests, strict same-toolchain performance comparison, and independent P0-P2 review pass. New Session is 1049972 bytes under its unchanged1050000 limit; no additional ceiling adjustment. Full build and static checks are being collected separately.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

---------

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
2026-10-19 16:12:58 +08:00
Vincent Koc
1f85bb87fb
fix(ci): build the macOS Periphery index once (#176920)
* fix(ci): build the macOS Periphery index once

* fix(test): satisfy Periphery fixture lint rules

* docs(ci): describe combined Periphery workflow selection

* test(ci): follow the shared iOS Periphery job owner

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-10-19 13:48:02 +08:00
Peter Steinberger
3635488e5a
improve: reduce typecheck graph discovery time and memory (#176756)
* perf: use tsrs for typecheck graph membership

* ci: remove retired type planner switch
2026-10-18 19:31:43 -07:00
Vincent Koc
18e1c34753
refactor(test): avoid duplicate macOS power lifecycle run (#176725) 2026-10-19 09:39:31 +08:00
Peter Steinberger
81ea1b45b9
ci: move macOS jobs to macOS 27 runners (#176402)
Moves openclaw CI macOS jobs to the macOS 27 (`xcode-27`) runners; Swift CodeQL stays on macos-26-intel until github/codeql#22742 adds macOS 27 tracing. Deployment floors stay explicit (native app macOS 26.2, shared Swift packages macOS 15, Tauri macOS 13.0).

Admin-merged with three exact-head failures that are inherited from main and not changed by this PR: control-ui-performance (chat boot gzip 1,490,252 B vs 1,490,000 B ceiling, identical on base and head), the OpenAI Decision platform case (matches pinned-main job 117822757020), and the startup-core fixture cold-import race introduced on main by #175989. Autoreview scoped-clean through P2.
2026-10-18 17:28:46 -07:00
Peter Steinberger
3a4e7aefd7
build(docker): move images to Debian trixie (#176595)
The official Docker images were built on Debian 12 bookworm, whose coreutils 9.1 lacks mv --exchange/--no-copy, so Doctor's btrfs NOCOW repair was always skipped in containers (e.g. Synology NAS). Build, runtime and sandbox images now use Debian 13 trixie (coreutils 9.7) with pinned digests and the NOCOW repair utilities; Node stays on 24 to match release CI. Installer test coverage keeps bookworm alongside trixie. Default/slim image +6.1 MB, browser +32.9 MB. Verified: default/slim/browser builds, isolated Gateway, Chromium, and a real btrfs NOCOW repair.

Fixes #171930
2026-10-18 16:17:46 -07:00
RoboClaw
4693fb9224
chore(tooling): type check with tsrs instead of tsgo (#175711)
* chore(tooling): type check with tsrs instead of tsgo

Switch scripts/run-tsgo.mts (pnpm tsgo, every tsgo:* lane and the CI
type-graph shards) to the pinned tsrs 0.16.0-ts7.1.0-dev.20260929 native
binary. Hosts tsrs ships no binary for (Windows, Intel macOS) keep running
tsgo. tsgo (typescript@7.1.0-dev) also keeps declaration emit, the plugin
SDK consumer check, the core boundary inventory and tsgo:profile.

Requested-by: obviyus (@obviyus)

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
Co-authored-by: Kimiyu-186 <202845257+Kimiyu-186@users.noreply.github.com>

* fix(tooling): clear TS 7.1 circularity errors and keep tsgo for releases

TypeScript 7.1 (tsrs and current tsgo nightlies) reports TS5115 on zod's
inferred z.json() nested in z.record() and on postcss-selector-parser's
self-referential Selector type. Give the codex plugin one explicitly typed
JSON schema, and keep the CSS audit scripts off Selector-typed values.

Add OPENCLAW_TYPECHECKER=tsgo as the explicit tsgo fallback and use it for
every type-check lane in Full Release Validation.

Requested by Peter Steinberger.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com>
Co-authored-by: Kimiyu-186 <202845257+Kimiyu-186@users.noreply.github.com>

* fix(tooling): honor invocation typechecker overrides

Use the prepared environment for compiler selection and provenance. Add red/green regressions and keep watchdog fixtures rooted in their own compiler install.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

* fix(test): install the default checker in declaration fixtures

Use the existing private package materializer for tsrs and its optional native dependency. The SDK consumer regression failed on the published head and passes with the complete fixture toolchain.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

* fix(tooling): preserve ordinary Go profiling requests

Select Go for prepared pprof arguments and keep metrics on the same compiler. Fail explicitly forced tsrs profiling instead of silently omitting CPU and heap profiles. Preserve both environment and CLI profiling contracts with owning-boundary regressions.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

* docs: avoid overlapping the formatter tooling guidance

Drop the redundant tsrs annotation from the shared tooling-guide line. The command names are unchanged and the dedicated testing documentation already describes backend selection, so main can retain its newer formatter policy without a conflict.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

* fix(test): run changed-format checks through the package script

Restore the changed-file formatter regression test after the formatter selector wrapper replaced the direct oxfmt package command. Keep real misformatted failure, formatted success, deleted-path handling, and CI parity.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

* fix(test): wait for acquisition admission before cancelling

Keep a retained caller on the held download and wait for the cancelling caller's real abandonment subscription. Initial version probes did not establish waiter admission and could deadlock the cancellation fixture. Preserve all existing installation and shared-download assertions.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>

---------

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
Co-authored-by: Kimiyu-186 <202845257+Kimiyu-186@users.noreply.github.com>
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com>
2026-10-19 07:12:43 +08:00
Ayaan Zaidi
2f595930f1
fix(hooks): catch stale generated files and oversized AGENTS.md before commit (#176065)
Related: #176053 (merged; it trims root `AGENTS.md` under the cap)

## What Problem This Solves

Fixes: PRs fail CI on their first push for generated files, docs lint and size caps that a seconds-fast local check would have caught, and root `AGENTS.md` regrows past the 20,000-character cap that OpenClaw loads whole.

## User Impact

No product change. Contributors and agents see these failures at commit time with the regen command, not after a CI round trip. A tracked `AGENTS.md` over the workspace bootstrap cap now fails CI.

## Why This Change Was Made

- **Pre-commit freshness checks.** `git-hooks/pre-commit` (installed by `pnpm install`) now runs existing `--check` scripts, chosen from staged paths and run in parallel: `lint:docs` on changed docs, `protocol:check`, `native:i18n:verify`, `config:docs:check`, the line-cap ratchet, and the new AGENTS.md size check. Each failure prints its fix command. Typecheck, lint and tests stay with hosted CI, and commits replayed by merge, rebase, cherry-pick or revert skip the checks. The content guard (`guard-staged-content.mjs`) runs the step and redacts its output with its existing redactor, so blocked private literals are never echoed. The hook judges only the bytes being committed: checks that import the working-tree code graph (protocol, native i18n, config docs, AGENTS.md size) are skipped with a one-line note when any tracked file has unstaged edits, `lint:docs` is skipped only when its own files or config are dirty, and the line-cap ratchet reads the index and always runs. Plain `node` package scripts start without pnpm. Path predicates live in their owners: `changed-lanes.mts` (also used by `check:changed` for the line-cap ratchet) and `hasProtocolGenerationInput` shared with CI's check family scope.
- **AGENTS.md size check.** `scripts/check-agents-md-size.mts` reads the cap from `resolveBootstrapMaxChars()` instead of copying the number. It runs in the hook, `pnpm check` and the CI check-docs job.

Left out on purpose, because each is too slow or already red on `main` for unrelated files: max-lines ratchet (~30 s), knip unused files (92 s), madge cycles (22 s), Control UI i18n (16 s), plugin SDK API diff (two full builds).

## Evidence

Back-test against first-push CI failures from a 90-day sample of merged PRs (26 rows; 2 retired checks; detached worktrees at each failing head):

| Row | CI failure | Hook before | Hook after |
|---|---|---|---|
| #122960 | docs MD051 link fragments | pass | **fail**, same 3 errors as CI |
| #112339 | Swift protocol models drift | pass | **fail**, same drift |
| #115577 | native i18n inventory drift | pass | **fail**, same message |
| #165543 | config baseline hash | pass | **fail**, same hash mismatch |
| #151896 | line-cap growth 3557 → 3676 | pass | **fail**, same counts |

The other 19 live rows need typecheck, tests, UI build or slow audits, which stay in hosted CI by design.

Size check back-test: it first fails at bb7d32e55d (#167739, 20,414 chars), and fails again at b19d5542f6 (#173903) after the earlier trim.

Freshness step wall time, median of 3 on a warm checkout (before = previous head 7aae97981b, after = this head):

| Staged change | Checks | Before | After |
|---|---|---|---|
| nothing | none | 0.17 s | 0.28 s |
| `CHANGELOG.md` | none | 0.20 s | 0.24 s |
| one docs page | lint:docs | 0.92 s | 1.13 s |
| one `src/**/*.ts` | line-cap | 1.29 s | 1.42 s |
| a scoped `AGENTS.md` | size check | 0.92 s | 1.07 s |
| protocol schema `.ts` | protocol, line-cap | 4.77 s | 4.39 s |
| Android Kotlin source | protocol, native i18n | 4.41 s | 4.48 s |
| plugin manifest | config docs | 8.19 s | 8.97 s |

Spawning `node` directly saves about 0.1–0.3 s per check against `pnpm -s`; the after column also pays one extra `git diff` for the unstaged-input rule. Most of the remaining time is in the checks themselves. `protocol:check` and `config:docs:check` are not cached: their inputs are transitive imports across `src/`, `packages/` and every plugin manifest, and no existing owner lists them reliably.

Checks run: new and existing hook tests, including `test/git-hooks-pre-commit-freshness.test.ts` (real guard, real freshness step and a real `node` runner: a partly staged docs page with a blocked literal in its unstaged edit is skipped; a staged protocol schema with an unstaged edit in an imported owner outside the trigger list skips `protocol:check` while the line-cap ratchet still runs; and a failing check that prints a private literal is redacted), `test/scripts/check-staged-freshness.test.ts`, `changed-lanes.test.ts`, `check.test.ts`, `tsgo:scripts`, `tsgo:test:root`, oxlint, oxfmt. All commits went through the new hook.

**Merge danger:** two-way door; a revert restores the previous hook and CI step. No state, config or published contract changes. Blast radius: every local commit in this repository (adds about 0.3 s to 9 s depending on staged paths) and the CI check-docs job. #176053 has landed, so the size check passes on `main`.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-10-18 10:31:34 -07:00
Vincent Koc
fee2073acc
fix(ci): skip discarded Linux fixture package builds (#176029)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-10-18 12:01:17 +08:00
Peter Steinberger
7f4c63524a
ci: default daily tests to Bun and retain dual release validation (#175699)
Some checks are pending
Native App Locale Refresh / Refresh native pt-BR (push) Blocked by required conditions
Native App Locale Refresh / Refresh native ru (push) Blocked by required conditions
Native App Locale Refresh / Refresh native sv (push) Blocked by required conditions
Native App Locale Refresh / Refresh native th (push) Blocked by required conditions
Native App Locale Refresh / Refresh native tr (push) Blocked by required conditions
Native App Locale Refresh / Refresh native uk (push) Blocked by required conditions
Native App Locale Refresh / Refresh native vi (push) Blocked by required conditions
Native App Locale Refresh / Refresh native zh-CN (push) Blocked by required conditions
Native App Locale Refresh / Refresh native zh-TW (push) Blocked by required conditions
Native App Locale Refresh / Commit native locale refresh (push) Blocked by required conditions
Node Runtime Conformance / scope (push) Waiting to run
Node Runtime Conformance / TypeScript contracts (push) Blocked by required conditions
Node Runtime Conformance / Rust workspace (push) Blocked by required conditions
OpenClaw Stable Main Closeout / Resolve stable release closeout inputs (push) Waiting to run
OpenClaw Stable Main Closeout / Verify stable main closeout (push) Blocked by required conditions
Plugin Init Scaffold Validation / scope (push) Waiting to run
Plugin Init Scaffold Validation / Validate provider scaffold (push) Blocked by required conditions
Plugin NPM Release / preview_plugins_npm (push) Waiting to run
Plugin NPM Release / Validate release publish approval (push) Blocked by required conditions
Plugin NPM Release / preview_plugin_pack (push) Blocked by required conditions
Plugin NPM Release / Preflight plugin npm package () (push) Blocked by required conditions
Plugin NPM Release / Seal prepared plugin npm release (push) Blocked by required conditions
Plugin NPM Release / Trusted publisher OIDC exchange (push) Blocked by required conditions
Plugin NPM Release / approve_plugins_npm_release (push) Blocked by required conditions
Plugin NPM Release / Publish plugin npm package () (push) Blocked by required conditions
Plugin NPM Release / verify_plugins_npm (push) Blocked by required conditions
Vitest Cache Warm / dependencies (push) Waiting to run
Vitest Cache Warm / warm (push) Waiting to run
Workflow Sanity / actionlint (push) Waiting to run
Workflow Sanity / generated-doc-baselines (push) Waiting to run
* ci: default daily tests to Bun and retain dual release validation

* test(ci): align fixtures with the daily Bun policy

* fix(ci): preserve Node-only gateway test routing

Resolve split gateway membership through the existing CI inventories and make the native-launch artifact assertion independent of directory enumeration order.

* test(ci): align Gateway routing with fork-fixed contracts
2026-10-17 20:27:06 +00:00
Peter Steinberger
58ef51f9ec
ci: balance PostgreSQL conformance across three timed shards
Replace the infra/integration name split with the existing weighted
allocator over the unchanged target inventory. Commit advisory target
weights; new tests still enter the inventory with a default weight.
Keep worker limits and the existing aggregate gate. Count all three
hosted jobs in admission and restore a 30-minute deadline for every row.

Three hourly runs measured 23.28/12.70, 26.22/15.75, and 25.80/24.87
minutes (35.98, 41.97, and 50.67 total job-minutes). Replaying per-file
spans, project overhead, and the single runtime-build owner projects:
10.82/11.58/17.57, 12.85/13.98/18.30, and 16.43/18.70/20.16 minutes.
For the latest workload, the critical path drops about 5.6 minutes (22%)
at a cost of about 4.6 extra job-minutes. The slowest row has 9.84 minutes
of deadline margin. These are projections, not post-change CI results;
the latest infra run includes eight failed cases and already has #175774.

Evidence: all 88 targets occur exactly once in the dry-run partition.
The old runner fails the new numeric-shard regression. Focused runner,
workflow, admission and allocator tests pass (41 selected tests), as do
targeted types, script/test lint, format, syntax and workflow validation
with pinned actionlint and zizmor. Final P2 review is scoped-clean.
No CI dispatches or reruns were used for proof.
2026-10-17 13:02:49 -07:00
Peter Steinberger
0636e55239
fix(cli): CLI and Doctor commands work on PostgreSQL (#175069)
* fix(cli): offline auth commands use the selected engine

* test(cli): update async auth and startup fixtures

* test(cli): document async auth fixture isolation

* fix(cli): prepare agent deletion auth ownership asynchronously

* fix(cli): preserve offline config and auth write boundaries

* fix(cli): keep log diagnostics independent of database credentials

* fix(cli): allow synchronous PostgreSQL access for one-shot commands

Install an immutable process role before executable CLI startup so offline
commands and Doctor repairs can use the existing synchronous bridge. Keep
Gateway and unset main-thread access restricted to explicit admission, and
reject embedded Gateway startup from a process classified as a one-shot.

Preserve the Gateway role for interactive setup paths that can host a session
Gateway. Keep worker behavior unchanged and document the CLI exception.

Stacked on the offline engine-selection work in #174857.

* test(cli): isolate process identity in entrypoint simulations

Keep process-lifetime role immutability real in subprocess coverage while
allowing the existing in-process entry and cleanup fixtures to simulate
separate CLI and Gateway processes.

* fix(cli): select PostgreSQL before one-shot state access

* fix(cli): recover Doctor config before selecting storage

* fix(cli): keep PostgreSQL discovery off SQLite snapshots

* fix(doctor): repair PostgreSQL session state through its engine owner

* fix(cli): complete PostgreSQL Doctor parity and conformance proof

* fix(doctor): prepare PostgreSQL schemas through engine admission

* fix(doctor): inspect PostgreSQL state through its read owners

* fix(doctor): inspect PostgreSQL before maintenance without runtime leases

* ci: budget PostgreSQL infrastructure conformance for complete recovery coverage

* fix(doctor): retain maintenance custody during lease admission

* fix(doctor): inspect healthy PostgreSQL recovery state

* fix(doctor): inspect PostgreSQL media through its owner

* test(cli): allow PostgreSQL recovery capture to finish

* fix(cli): preserve diagnostic storage owners

* test(models): prove PostgreSQL catalog reads through its worker

* test(cli): align PostgreSQL proof tooling with final owners

* fix(doctor): preserve offline config recovery ownership

* fix(doctor): preserve unresolved-config output contracts

* fix(cli): preserve transport and service storage owners

* fix(cli): select the configured owner for mixed config edits

* fix(cli): preserve target owners and PostgreSQL read snapshots

* fix(cli): include snapshot modules in offline tooling

* test(cli): document lifecycle preflight mock isolation

* fix(cli): preserve updater and redirected config ownership

* fix(config): discard rejected source environment during admission
2026-10-17 08:13:19 -07:00
Vincent Koc
2ff0acf65b
perf(ci): compile the standalone Windows power test directly (#175602) 2026-10-17 23:12:12 +08:00
Vincent Koc
1bad54b1f8
perf(ci): retain only reusable Node runtime Rust dependencies (#175605) 2026-10-17 22:54:05 +08:00
Vincent Koc
c10c1f410e
fix(ci): speed up Windows validation compression (#175524) 2026-10-17 21:33:35 +08:00
Vincent Koc
7836689f15
fix(ci): avoid full history for manual Testbox shells (#175526) 2026-10-17 21:05:37 +08:00
Peter Steinberger
a3ac586a6b
ci: shard PostgreSQL conformance by test group
Keep the existing PostgreSQL target inventory and split it into infra/state and integration jobs. Both use the same pinned image and extensions, retain 30-minute budgets, and aggregate through the existing postgres-conformance gate. The prior job consumed 30m20s, including 25m05s in infra before later groups.
2026-10-16 23:48:16 -07:00
Vincent Koc
83fab6f214
fix(ci): reuse Watch RTC cache in iOS Periphery (#175055)
* fix(ci): reuse Watch RTC cache in iOS Periphery

* fix(tests): preserve Apple cache workflow row tuples
2026-10-17 12:09:52 +08:00
Vincent Koc
b682a5f318
fix(ci): avoid rebuilding Control UI in build Testbox (#175050) 2026-10-17 11:56:16 +08:00
Vincent Koc
de5e2e3720
chore(ci): remove one-off Memory search screenshot collection (#175059) 2026-10-17 03:50:47 +00:00
Vincent Koc
32ff9a7326
refactor(memory): move indexed search presentation into plugin (#174925)
* refactor(memory): move indexed search presentation into plugin

* fix(memory): align extracted search SDK contracts

* test(memory): remove redundant agent lifetime fixture case

* test(memory): initialize no-agent fixture directly
2026-10-17 03:28:21 +00:00
Vincent Koc
ec70bcbd19
fix(ci): avoid historical blob downloads in timing refits (#175010)
* fix(ci): avoid historical blob downloads in timing refits

* fix(ci): use immutable sorting in timing regression
2026-10-17 11:16:56 +08:00