Commit Graph

8219 Commits

Author SHA1 Message Date
Peter Steinberger 2e50bdf9fb test(release): route workflow regressions (#129914) 2026-08-25 23:21:59 -07:00
Peter Steinberger 9b77c06bbd fix(channels): honor trusted plugin activation contracts (#114492)
* fix(channels): validate activation through trusted channel owners

* refactor(channels): simplify credential contract detection

* test(channels): require complete Slack activation credentials

* test(channels): type trusted installed Slack owner fixture

* test(channels): preserve literal types in owner state fixtures
2026-08-25 22:55:17 -07:00
Peter Steinberger 0285926bf9 refactor(codex): compact generated protocol JSON (#129524) 2026-08-25 22:26:54 -07:00
Vincent Koc 263d2a2a91 fix(i18n): include concatenated Apple UI strings (#129882)
* fix(i18n): include concatenated Apple UI strings

* test(i18n): cover multiline Apple modifiers
2026-08-26 13:24:48 +08:00
Vincent Koc 67c5a85619 fix(release): bind prerelease plugins into package Telegram QA (#129784)
* fix(release): bind prerelease plugins into package Telegram QA

* fix(release): preserve registry artifact provenance
2026-08-26 13:17:30 +08:00
Vincent Koc 2b06180bb5 fix(package): restore npm package size headroom (#129782)
* fix(package): externalize diffs build outputs

* chore: remove release-owned changelog entry

* fix(build): generate selected plugin assets before Docker staging

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-08-26 12:40:27 +08:00
Peter Steinberger a5f36aef39 fix(parallels): avoid host networking for macOS upgrades (#129861) 2026-08-25 21:37:00 -07:00
RoboClaw 11d18dc7f7 fix(sessions): bound active transcript hydration (#129343)
* fix(sessions): bound active transcript hydration

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>

* test(sessions): profile bounded transcript hydration

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>

* chore(sessions): satisfy hydration CI guards

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>

* refactor(sessions): keep bounded reader internal

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>

* fix(sessions): reload complete history before rewrites

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>

---------

Co-authored-by: roboclaw-bot <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-25 21:29:45 -07:00
Peter Steinberger 3a37a12d89 fix(package): prevent installs from deleting validated runtime assets (#129724)
* fix(package): enforce postinstall inventory parity

Reject packages whose pruning inventory omits shipped dist assets, and verify every installed bundled plugin artifact survives postinstall. Preserve lifecycle-free historical package compatibility.

Fixes #129722

* fix(package): keep parity helper private

* refactor(package): deduplicate SDK artifact requirements
2026-08-25 21:14:39 -07:00
Vincent Koc db085b7d8f fix(tooling): arm prompt cleanup before spawn (#129755) 2026-08-26 11:43:39 +08:00
Peter Steinberger c406ef4b4d test: consolidate prompt snapshot deltas (#129295) 2026-08-25 20:42:03 -07:00
Peter Steinberger 20b453f155 fix(agents): reject forged plugin owner authority (#104872)
* fix(security): bind channel owner authority to trusted runtime

* fix(plugins): preserve untrusted channel guest ingress

* fix(plugins): snapshot channel ingress authority once
2026-08-25 20:36:05 -07:00
tzy-17 7133f92007 fix(bench): preserve Unicode across bounded gateway diagnostics (#120125) 2026-08-25 20:24:33 -07:00
Peter Steinberger 570072f090 fix(crabbox): keep packaged commands runnable without dev dependencies (#125419) 2026-08-25 20:18:44 -07:00
Peter Steinberger 54b0f9ff85 fix(release): prevent empty VCR mirror inputs (#129467)
* fix(release): preserve VCR mirror source digests

Transport only attestation-verified digests across secret-scanned job outputs, reconstruct immutable GHCR refs inside the VCR mirror, and add an approved mirror-only recovery path.\n\nCloses #129466

* fix(release): verify VCR recovery sources

Revalidate attestations and release-version labels before any VCR registry write so manual recovery preserves the immutable source boundary.

* test(release): keep VCR regression scoped

Leave global workflow-to-test routing cleanup for a follow-up; this PR directly changes and runs both VCR regression suites without forcing metadata-complete CI.

* fix(ci): preserve caches after warmer failures

Finish every selected cache-warm group, save content-keyed transform and compile caches, then fail visibly after the save steps. Ordinary CI remains fail-fast.
2026-08-25 20:15:42 -07:00
Peter Steinberger b3d3494919 refactor(i18n): compact native source inventory (#129777) 2026-08-25 20:08:10 -07:00
Peter Steinberger b5fcae34fe refactor(install): remove obsolete Baileys media hotfix (#129751) 2026-08-25 20:00:29 -07:00
Peter Steinberger 9e8144e8d4 fix(parallels): preserve saved macOS snapshot sessions (#129788) 2026-08-25 19:48:34 -07:00
Peter Steinberger 5e81a346d7 fix(ci): narrow release validation GitHub contract (#129783)
Replace the checker-only broad Octokit shape with exact issue request and response contracts, and make the test harness reject impossible missing issue responses.

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-08-25 19:47:59 -07:00
Peter Steinberger e5173eddd4 fix(parallels): macOS dev upgrade needlessly rebuilds the checkout (#129444)
* fix(parallels): skip packaging for macOS dev upgrades

* fix(test): sanitize compile cache for all vitest children

* test(node-host): honor disabled worker compile-cache fixtures
2026-08-25 19:39:31 -07:00
Peter Steinberger 637da87a5d fix(gateway): tools.invoke must carry the caller's host-minted role authority (#129725)
* fix(gateway): tools.invoke must carry the caller's host-minted role authority

The connect handshake resolves each connection's authority once and stores it
server-side (shared-secret operator owners mint system authority there).
tools.invoke discarded that fact and re-derived ownership from scopes, so a
shared-secret caller with no durable profile resolved to the deny-by-default
role and was refused dispatch on its own agents — while the same connection
could still mutate sessions directly.

Carry client.internal.operatorRoleActor into the synthetic dispatch client and
keep the scope-derived fallback for callers that have no connection actor
(HTTP). Regression test fails pre-fix with the FORBIDDEN agent-allowlist error.

* test(opencode): close the fake CLI before exec to stop ETXTBSY flakes

The catalog suite wrote the fake opencode executable and spawned it
immediately. Under parallel CI shards the write handle could still be open
at exec time, so the launch failed with ETXTBSY and failed the shard.

Write through an explicit file handle with an fsync before close so the
binary is fully durable before the first spawn.

* fix(ci): repair red main type and lint gates

Two gates were failing on main independently of this branch:

- extensions/qa-lab cleanup tests still built OpenClawCrablineChannelDriverSelection
  with the retired smokeArtifactPath and a stale capabilityMatrixPath, so
  check:test-types failed after the readiness-artifact change (#124189).
  Align both fixtures with the current type and its pinned constants.
- scripts/github/release-validation-campaign.d.mts declared the Actions Octokit
  client as any (#129726), tripping no-explicit-any. Declare the structural
  subset the publisher actually calls instead of suppressing the rule.

Verified failing on clean origin/main before the fix.
2026-08-25 19:15:01 -07:00
Patrick Erichsen 004b06b6a0 Release validation: add isolated campaign skill runner (#129726) 2026-08-25 17:58:39 -07:00
Peter Steinberger 5ce9b61ceb fix(doctor): preserve managed container services (#129527)
* fix(doctor): preserve managed container services

* fix(doctor): scope linger checks to user services

* fix(doctor): limit container repair to user services

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-25 17:48:32 -07:00
Vincent Koc f457c2cea1 refactor(ios): share Agent Pro detail components (#119868)
* refactor(ios): share Agent Pro detail components

* test(ios): update Agent Pro i18n source contract
2026-08-26 08:41:06 +08:00
Vincent Koc e7d66d0544 fix(ci): run isolated gateway agent methods (#129686) 2026-08-26 08:11:54 +08:00
Peter Steinberger 85d5df1d87 fix(onboarding): OpenAI setup installs mismatched Codex plugin (#129195)
* fix(onboarding): align Codex plugin with core release

Amp-Thread-ID: https://ampcode.com/threads/T-01a037b4-f621-7144-bfdf-a68df795dd57

* test(onboarding): reject unpinned Codex candidates

Amp-Thread-ID: https://ampcode.com/threads/T-01a037b4-f621-7144-bfdf-a68df795dd57

* fix(onboarding): match stable correction release plugin cohorts

Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>

* test: isolate plugin metadata and register startup retry coverage

* test: adopt upstream startup retry ownership pattern

* test: keep plugin metadata readers process-stable

* test: isolate terminal session recovery cases

* test: drop speculative gateway isolation change

* test(gateway): mock terminal transcript lifecycle decision

* fix(plugins): align correction cohorts across stable tracks

---------

Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>
Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-08-25 17:03:39 -07:00
Vyctor H. Brzezowski 64853b1a9d improve(control-ui): restructure the composer as a multiline surface (#124301)
* improve(control-ui): align composer stack with current main

* refactor(ui): isolate new-session permission state

* fix(ui): close composer CI regressions

* test(ui): align composer presentation contracts

* test(ui): fix composer browser contracts

* test(ui): stabilize composer browser ownership

* test(ui): target presented mobile composer

* test(ui): select accessible mobile composer

* test(ui): open mobile rail session directly

* fix(ui): keep mobile composer content laid out

* fix(ui): address composer review findings

* fix(ui): close composer interaction gaps

* fix(ui): bound swarm task popover

* fix(ui): restore progress-card docking beside the wide composer

The multiline restructure dropped the .session-progress-card--dock
placement shipped in #129141 and left the completed marker inside the
collapsed-only summary span, so it vanished when the disclosure opened.
Restore the dock positioning block and hoist the marker into the
always-visible summary grid.

* fix(ui): bound swarm task popover by its composer anchor

The popover capped its height against the raw viewport, so on short
mobile viewports its top rendered above the screen. Register the swarm
group with the existing composer popover anchor observer and consume the
measured --chat-composer-popover-max-height, keeping the viewport calc
only as fallback. The new actual-tree mobile regression failed with
-71px top clipping before the fix.

* fix(ui): restore Draft capability controls and split the new-session composer

Restores the Draft option and selected-state indicators the capability
menu lost in the restructure, and moves the capability/visibility
controls into composer-capability-controls.ts so composer.ts drops back
under the 700-line lint gate (677 lines) without a suppression.

* test(ui): prove permission-mode final effect before session creation

Adds mocked-gateway proof that an admin's Full selection reaches
sessions.create as permissionMode:"full" exactly once, and that a
write-scoped operator's retained Full selection is rejected before
creation with a visible status notice and zero create requests. Also
aligns the mobile footer reading-order assertion with the shipped
attachments-draft-model order.

* test(ui): register swarm popover layout test as node-driven

chat-swarm-progress.browser.test.ts drives its own Playwright chromium
from node, but d3396c4d3b added it without registering it in
nodeDrivenBrowserLayoutTests, so the browser-mode chromium project tried
to fetch it into the page and failed on the node-only playwright import.
This was the deterministic checks-ui failure on both prior heads.

* test(ci): register codex attempt-startup-retry in its support lane

#129505 added extensions/codex/src/app-server/attempt-startup-retry.test.ts
without lane ownership, so the full-suite coverage guard
(test/vitest-projects-config.test.ts) fails on every full run. Register it
beside attempt-startup.test.ts in the attempt-support lane.

* test(ui): expect last-activity suffix in composer summary label

Merge weave: #129520 appends the accessible last-activity to the summary
aria-label; align the restructured composer card's assertion with it.

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-25 16:59:46 -07:00
Peter Steinberger 9b2831afd5 feat(buzz): authorize different senders in each room (#129655)
* feat(buzz): support room-scoped sender authorization

* fix(buzz): synchronize generated official channel catalog
2026-08-25 16:52:42 -07:00
Josh Avant bb8c04d537 fix(whatsapp): keep QR login owner-scoped (#129381) 2026-08-25 16:12:35 -07:00
Peter Steinberger 7dd6d9452e refactor(apple): canonicalize string catalog formatting (#129592) 2026-08-25 14:23:48 -07:00
Andy Ye 6831959294 fix(installer): honor explicit git checkout targets (#128407)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-25 14:22:45 -07:00
Peter Steinberger 161a52f29b fix(maintainers): avoid skipped CI runs blocking PR landing (#129428) 2026-08-25 14:21:44 -07:00
Peter Steinberger 31542bc375 fix(i18n): refresh native locales when locale inventory changes (#129438) 2026-08-25 14:12:03 -07:00
Peter Steinberger 9b7c95a0f0 fix(anthropic): keep automated heartbeats on subscription usage (#129513)
* fix(anthropic): keep automated heartbeats on subscription usage

* test(agents): align retired heartbeat template expectations

* fix(anthropic): avoid heavyweight policy bootstrap imports

* chore(config): prune retired template assertion baseline

* test(vitest): cover Codex startup test family

* refactor(anthropic): remove obsolete thinking-profile re-export
2026-08-25 14:11:38 -07:00
Peter Steinberger e8b6a04ef5 refactor(scripts): share SQLite payload proof contract (#129499)
Amp-Thread-ID: https://ampcode.com/threads/T-01a037b7-6475-7130-8be6-39147410914b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-25 13:56:54 -07:00
Peter Steinberger de9a65c30f refactor(scripts): remove obsolete z.ai fallback reproduction (#129208) 2026-08-25 05:46:28 -07:00
Peter Steinberger 7401d21bdc refactor(scripts): remove obsolete sqlite incident reproductions (#129212) 2026-08-25 05:16:50 -07:00
Peter Steinberger 4dc7bb7411 chore(deps): refresh dependencies after seven-day cooldown (#129187)
* chore(deps): refresh dependencies after cooldown

* fix(gateway): emit append-only Responses content events

* chore(deps): retain unverified Sherpa runtime
2026-08-25 05:00:46 -07:00
Peter Steinberger fff5eb05f6 fix(release): allow ANSI in focused evidence logs (#129238)
* fix(release): allow ANSI in focused evidence logs

* test(release): exercise focused log fallback
2026-08-25 04:25:39 -07:00
Peter Steinberger e08ed41de6 refactor(podman): share rootless security helpers (#129242) 2026-08-25 04:06:53 -07:00
Peter Steinberger 5af05ab1a2 improve: validate built CLI with Bun 1.4 (#129192)
* ci: validate built CLI with Bun 1.4

Amp-Thread-ID: https://ampcode.com/threads/T-01a037b7-66db-71f0-91e7-1578b383afb2

* test: align Bun Docker image assertion

Amp-Thread-ID: https://ampcode.com/threads/T-01a037b7-66db-71f0-91e7-1578b383afb2

* test: tolerate cold CLI startup in CI

Amp-Thread-ID: https://ampcode.com/threads/T-01a037b7-66db-71f0-91e7-1578b383afb2

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-25 03:44:57 -07:00
Peter Steinberger 32f49a4937 fix(workers): preserve executable workspace files on Windows nodes (#129226)
* fix(workers): preserve executable modes on Windows nodes

* fix(ci): route worker workspace transfers to Windows
2026-08-25 03:39:25 -07:00
Peter Steinberger e33606ef10 fix(release): verify focused candidate checkout (#129201)
* fix(release): verify focused candidate checkout

* fix(release): ignore unselected historical validation children
2026-08-25 03:17:24 -07:00
Peter Steinberger 2907a16a63 refactor(scripts): remove test-only extension package boundary helper (#129171)
* refactor(scripts): remove test-only extension package boundary helper

* test(plugins): preserve exact extension boundary containment
2026-08-25 03:06:29 -07:00
Finn763 8e040714b3 fix(workers): preserve v1 bundle identity on Windows (#128989)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-25 02:31:30 -07:00
Josh Lehman 06e0f385f7 test(onboard): handle telemetry consent prompt (#128943) 2026-08-25 02:06:02 -07:00
Vitor Cepeda Lopes c7be344892 fix(worker): support Windows shared-host quiescence (#128628)
* fix(worker): support Windows shared-host quiescence

* fix(gateway): persist Windows quiescence leases safely

* test(windows): include quiescence in existing shard

* test(windows): canonicalize quiescence workspace path

* fix(gateway): make Windows quiescence leases durable

* ci: route Windows quiescence changes

* test(ci): keep Windows routing coverage scoped

* fix(workers): prune expired Windows workspace leases

Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com>

---------

Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-25 02:02:34 -07:00
Peter Steinberger bea9084913 fix(pr): avoid OS argument limits during worktree recovery (#129169) 2026-08-25 02:02:14 -07:00
Peter Steinberger 72b06b0077 fix(release): keep polling before decision artifacts exist (#129166)
Handle GitHub's current missing-artifact message without abandoning active full validation, while preserving early blocker decisions. Covers #129104.
2026-08-25 01:55:19 -07:00
tzy-17 aa3e0ae429 fix(i18n): keep surrogate pairs intact when bounding process output tail (#120114)
* fix(i18n): keep surrogate pairs intact when bounding process output tail

appendBoundedProcessOutput used nextText.slice(-maxChars) to keep the
newest maxChars of captured process output. When the boundary landed
inside a UTF-16 surrogate pair (e.g. emoji in stderr), the retained
tail began with a dangling low surrogate, corrupting downstream JSON
serialization and fatal TextDecoder paths.

Switch to sliceUtf16Safe(nextText, -maxChars) from normalization-core,
which adjusts the boundary off the surrogate pair. The helper was
already imported elsewhere in the dependency graph.

* fix(i18n): count actually-dropped units when bounding surrogate-safe tail

Address ClawSweeper P2 finding on PR #120114: sliceUtf16Safe may
return fewer than maxChars code units when it advances past a low
surrogate at the boundary, so truncatedChars must derive from the
actual retained tail length rather than maxChars. For the emoji
case ("ab😀cdef", maxChars=5) the safe slice retains "cdef" (4
units), so 4 units are dropped, not 3.

Compute truncatedChars from nextText.length - text.length and
update the regression test expectation to 4.
2026-08-25 01:51:03 -07:00