172 Commits
Author SHA1 Message Date
Vincent Koc 3939d79b0a fix: let Barnacle age items carrying only review evidence (#185628) 2026-10-27 15:50:38 +08:00
Shakker 79fc84c2f3 refactor: privatize script declarations (#183105)
Privatizes unused script implementation declarations and removes one dead release-plan marker without changing command, build, release, or CI behavior.
2026-10-25 01:40:55 +00:00
Peter Steinberger c64f3109b8 fix(ci): settle completed runs behind stale list entries (#156574) 2026-10-24 03:42:18 -07:00
Peter Steinberger bab7e0a136 fix(ci): keep the GitHub context repo getter in Barnacle auto-response
Preserve the Actions Context prototype when deriving the admitted context.
Object spread dropped its repo getter, crashing PR auto-response during
maintainer membership checks after #177120.

Exercise the existing candidate-label flow with a class-based context so
inherited repo getters stay covered by the regression suite.

Failing runs:
https://github.com/openclaw/openclaw/actions/runs/40059408459
https://github.com/openclaw/openclaw/actions/runs/40061593223
2026-10-23 23:09:14 -07:00
Vincent Koc d66c5f9ade fix(ci): refresh stale security review publishers (#182134) 2026-10-24 11:06:57 +08:00
Vincent Koc 526f08b622 fix(ci): protect reactivated work during Barnacle cleanup (#177120)
* fix(ci): protect reactivated work during Barnacle cleanup

* fix(ci): recheck Barnacle admission after comment pagination
2026-10-23 19:27:44 +08:00
Dallin Romney 1f49237c16 feat(release): validate Windows-node releases and main (#119762)
* ci: validate gateway candidates against Windows releases and main

* docs(release): document Windows-node reruns

* test(release): tolerate formatted summary columns

* fix(release): pin reachable Windows workflow revision

* test(release): preserve Windows candidate scheduling

* test(release): include Windows-node retry group

* test(release): preserve Windows validation harness

* docs(release): format Windows validation reference

* fix(release): pin maintained Windows candidate harness

* fix(release): require stable Windows node compatibility
2026-10-22 23:47:04 -07:00
Dallin Romney 2a12851979 fix(release): move validation waivers into trusted tooling (#173437)
* fix(release): waive provider outages without changing frozen candidates

* refactor(release): reuse existing waiver evidence owners

* fix(release): preserve waiver authority through publication and closeout

* test(release): follow authenticated closeout evidence owner

* fix(release): preserve waiver approver across publisher reruns

* fix(release): evaluate checked-in tooling waivers within FRV

* fix(release): accept empty legacy waiver evidence

* fix: preserve release evidence through tooling cutover

* test(release): align fixtures with admitted verifier tooling
2026-10-22 22:54:41 -07:00
Peter Steinberger 69716f2c5b fix: reconcile completed CI security reviews (#180808)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-10-22 10:30:38 -07:00
f2df9d01fb fix(release): reuse admitted changelog descendants (#178152)
* fix(release): reuse admitted changelog descendants

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

* fix(release): validate admitted descendant reuse at seal

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:15:16 -07:00
Josh Avant a567b8ec01 feat: schedule weekly mobile store releases with Discord results (#173725)
* fix(ios): handle App Store versions without a selected build

* feat: schedule weekly mobile store releases with Discord results

* fix: admit scheduled mobile store uploads

* fix: suppress embeds in mobile release notifications

* fix: clarify mobile release notification headlines
2026-10-15 22:45:01 -07:00
Ayaan Zaidi 4d60655c33 fix(ci): continue stale PR scans at the label limit (#172833)
fix(ci): keep the stale PR scan going when a PR is at the 100-label limit

The Stale workflow posted its inactivity warning and then added the `stale` label unconditionally. On a PR that already had 100 labels, GitHub rejected the label with 422 ("Issues cannot have more than 100 labels") and the whole scan aborted, so later PRs were never evaluated and the job went red. That 422 is now recorded as a per-PR outcome: the warning comment receipt is kept (no duplicate warning on the next run), no other labels are removed, and the scan continues. Every other error still fails the job.

Proof: the capacity regression failed before the fix; all 114 lifecycle tests pass after. A real dispatched scan evaluated 188 PRs, recorded two capacity outcomes, kept the existing warnings and advanced its cursor.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-10-14 23:50:41 -07:00
Dallin Romney 5930f05a68 fix(ci): combine ordinary Security Review evaluation (#172524)
* fix(ci): combine ordinary Security Review evaluation

* fix(ci): preserve Security Review mode through enforcement
2026-10-14 14:58:32 -07:00
Dallin Romney 208c6ce4fa fix(ci): reuse Security Review notice inventories (#172516) 2026-10-14 14:17:07 -07:00
Vincent Koc 609835f703 fix(ci): close stale PRs despite automated review activity (#172022)
* fix(ci): close stale PRs despite automated review activity

* fix(ci): resume stale closures across Barnacle app failover

* fix(ci): align stale lifecycle lint and workflow guards

* fix(ci): preserve stale warning and edit provenance

* fix(ci): retain activity and checkpoints across stale races

* test(ci): align stale checkpoint recovery guard

* fix(ci): preserve stale scan progress on all failures

* fix(ci): recognize REST draft activity events
2026-10-14 23:46:46 +08:00
Peter Steinberger ee192100b3 fix(ci): degrade Security Review CI job pages on GitHub 5xx (#171583)
GitHub can persistently fail a 100-job page of a CI attempt with a slow
502 while smaller pages of the same range succeed. The shared client's
in-request 5xx retries then exhaust the 30-second read deadline, and
recovery restarts against the same URL until the budget runs out, leaving
the combined openclaw/ci-gate status pending.

List attempt jobs at 100, then 50, then 25 per page. Above the floor, a
5xx skips in-request retries and the same offset range is requested
again at half size. The 25-job floor keeps the normal read retries,
deadline, and recovery restarts; read timeouts still restart the full
evaluation with fresh authority, and enumeration must still reach the
reported total.
2026-10-13 20:21:23 -07:00
Dallin Romney 8b15f4d1d1 fix(ci): reconcile fork checks when associations name stacked children (#168804) 2026-10-13 00:05:23 +00:00
Josh Avant 73360cc6cf refactor(ci): remove Security Review comment forwarding support (#169510) 2026-10-11 18:44:38 -07:00
Josh Avant 4c7683b94c fix(ci): handle security approval comments directly (#169490) 2026-10-11 18:13:03 -07:00
Ayaan Zaidi 48b2ccd285 fix(ci): stop Security Review starting a run for every PR comment (#169437)
## What Problem This Solves

Security Review starts an Actions run for every PR comment create, edit and delete in this repository, then skips almost all of them. On 2026-10-11 it started 30,115 runs in 24 hours; in a 100-run sample, 75 were `clawsweeper[bot]` comment events that ended `skipped`. GitHub creates a run per subscribing workflow before job conditions apply, so the job-level filter cannot prevent this.

## User Impact

No change to the approval contract: `/allow-security-sensitive-change` and `/allow-dependencies-change` comments, and the edits or deletions that revoke them, still re-evaluate the guards, and authorization is still read from live comments. Approval-command activity reaches Security Review a few seconds later because it now hops through the shared listener. Projected saving: roughly 29k Actions runs per day.

## Why This Change Was Made

- `ClawSweeper Dispatch` already receives every comment event (it is the shared listener since #169355). It now also subscribes to comment `deleted` and runs a `security-review-command` job only when the comment or its previous body mentions an approval command. That job checks out the existing `parseApprovalCommands` helper (same parser the resolver used), confirms a real command, and runs `gh workflow run security-review.yml -f pull_request=<n>` with `GITHUB_TOKEN`. The existing `dispatch` job ignores `deleted` comments, so ClawSweeper intake is unchanged.
- `Security Review` drops `issue_comment` and gains a `workflow_dispatch` input naming the PR. The resolver accepts that dispatch only when the payload sender is GitHub Actions (`id` 41898282, `github-actions[bot]`, `Bot`); manual dispatches by people keep failing with the existing "requires an automatic pull request or CI event" error before any API call. The input only selects the PR; the review job reads approvals from live comments as before.
- `merge-prior-ci-security.mjs` accepts a Security Review publisher with event `workflow_dispatch` only when the run actor is that same GitHub Actions identity. `issue_comment` publishers remain accepted because statuses published before this change are still valid evidence.
- zizmor flagged an `if:` check on `github.actor` as spoofable, so the identity check lives in the resolver on the immutable sender ID instead.

For SecOps: the forwarding job in `clawsweeper-dispatch.yml` is now part of the revocation path. Please decide whether that file (or the job) should join the SecOps CODEOWNERS closure; this PR does not change CODEOWNERS.

## Evidence

- Focused tests (473 passed across `security-review-workflow`, `security-review-event`, `security-review-script`, `pr-merge-prior-ci*`, `ancillary-workflow-concurrency`, `clawsweeper-dispatch`):
  - the listener step runs as real bash with a stub `gh` against the full approval-command table that previously lived in the resolver tests: creates, previous-body revocations and deletions dispatch exactly `workflow run security-review.yml --repo openclaw/openclaw --ref main -f pull_request=42`; prose, quoted, uppercase, suffixed and mixed comments do not;
  - the listener must keep `created`, `edited`, `deleted` comment subscriptions;
  - the resolver selects the PR for a GitHub Actions dispatch and rejects dispatches from a user, a spoofed login, a wrong ID, and another bot before any API request;
  - the prior-CI verifier accepts an automation-dispatched publisher and rejects a human-dispatched one.
- `node --import tsx scripts/check-workflows.mts` (actionlint, zizmor): passed.
- GitHub sets `actor` and `triggering_actor` to `github-actions[bot]` (`Bot`) for `GITHUB_TOKEN` `workflow_dispatch` runs; observed on openclaw/clawsweeper run 38180548598.
- Live negative proof: a manual `workflow_dispatch` of this branch's `security-review.yml` by a maintainer (https://github.com/openclaw/openclaw/actions/runs/38183944875) failed in the resolver with "Security review requires an automatic pull request or CI event." and published no status.
- Limit: `issue_comment` workflows run from `main`, so the end-to-end comment → dispatch → review path can only be observed after merge. I will post a test approval command and its deletion on a disposable PR after merge, confirm both re-evaluations and the `openclaw/ci-gate` status, and compare hourly Security Review run counts.
2026-10-11 17:21:15 -07:00
Dallin Romney c57f3559f3 improve: simplify repository tooling, contribution templates, and packaged skill docs (#168708) 2026-10-10 22:17:17 -07:00
Josh Avant 50d7eb1b7f fix: recover transient security review notice failures (#163357) 2026-10-08 17:11:27 -07:00
Josh Avant 71cc747b57 fix: stop security review cleanly when closed PR disables edits (#163356) 2026-10-08 17:11:24 -07:00
Vincent Koc 11f0d107b5 fix(ci): avoid redundant release validation work and delayed failures (#167356)
* fix(ci): preserve release failure diagnostics and bounded recovery

* fix(ci): bound and pack measured full-release test jobs

* fix(ci): reuse authenticated release publications and fail waits early

* fix(ci): require complete retained publication inputs

* fix(ci): narrow artifact and workflow error contracts
2026-10-08 18:02:42 +00:00
Peter Steinberger dd1c135435 refactor(scripts): deslop scripts (#166083)
* refactor(scripts): deslop scripts

* fix(scripts): preserve existing timing and restart contracts
2026-10-06 14:51:35 -07:00
Peter Steinberger fb1784767e refactor(scripts): deslop scripts (#165571) 2026-10-05 06:49:48 -07:00
Josh Avant e6f2610a1c fix(ci): make informational security notices easier to spot (#164056)
* fix(ci): make informational security notices easier to spot

* fix(ci): keep informational notices at body text size

* fix(ci): lead with the security approval outcome
2026-10-03 01:04:31 -05:00
Peter Steinberger de2f83e271 refactor(scripts): deslop CI and release tooling (#164009)
## What Problem This Solves

CI and release tooling still carries retired selection paths, duplicate evidence projections, and single-use command factories that make its current behavior harder to follow.

## User Impact

No user-visible change. CI keeps the same jobs and gates; release receipts, manifest digests, CLI output, packaging contracts, and generated Gateway protocol bytes stay compatible. No SDK API, config, wire, or persisted-data changes.

## Why This Change Was Made

This batch removes **1,235 net production/tooling lines** (890 added, 2,125 deleted; tests excluded).

- Remove the unused extension fallback and core-impact classifier after their production caller was retired in `6a501796576`. The current planner consumes explicit targets; meaningful coverage now exercises that path. Remove unused current-planner options while retaining arguments needed by September frozen targets.
- Use the existing grouping helper and direct descriptors for CI shards; let the Docker lane constructor own its default command and remove one-use factories. Selection, lane ordering, prerequisites, and commands remain identical.
- Reuse release-policy child topology, evidence projections, and canonical JSON sorting; remove always-empty advisory machinery. Share the existing postpublication diagnostic schema while retaining the observer's `startup_failure` extension and historical receipt validation.
- Cross-OS packaging now uses the canonical package helper directly instead of maintaining a second pack/inventory implementation. That helper predates July 2026 and exists in all 36 available July-or-later release tags. Remove npm-runner forwarding and test-only APIs.
- Simplify docs translation fence/link processing and remove unused route, cursor, and split-depth state. Replace hand-written ZIP CRC with Node's implementation; remove an unreachable Swift fallback, retired cancellation adapter, and redundant timing/tarball branches.
- Keep the actual core consumer of the shared package metadata helper in Knip's graph, rather than suppressing a dead-export warning.

## Evidence

Remote proof uses [Blacksmith Testbox run 37090710184](https://github.com/openclaw/openclaw/actions/runs/37090710184), lease `tbx_01m3zt7sykcrdm1fq4m8zf4bz4`, with dependencies installed. Final source tree `3b3f07ba57325ab7da7335fd125dec0fd43216ac` matches commit `8c147759f7a8047189daf2ac0bacd4ae4f5b88d9`. After full-sync timeouts, targeted transfer plus whole-tree verification completed the proof.

- Focused TypeScript selection: **1,988 tests passed across 30 files**, about 398 seconds including the wrapper. Changed-test single-worker proof: **629 passed**; tooling shard 308.96 seconds. The root retention test passed all four cases. An additional eight-file selection passed **255 tests**, 30.16 seconds including the wrapper.
- `cd scripts/docs-i18n && go test ./...`: passed, package time 0.179 seconds.
- Base/candidate comparisons: **393 release output/error/digest comparisons**, **1,234 Docker comparisons across 727 plans**, **24 extension selection/packing comparisons**, and four Node shard-inventory profiles passed. Generated Swift protocol output is byte-identical.
- `pnpm test <changed files> --maxWorkers=1` retains the expensive real-repository ownership assertions: source-owner file 87.778 seconds; cross-OS release checks 0.971 seconds; workflow control 0.486 seconds; extension preparation 0.272 seconds. No new CI job or added test budget.
- Independent autoreview found no actionable P0/P1 regression. Final `check-changed` passed, including types, lint, package boundaries, ratchets, and all three unused-export scans. Both import-cycle checks reported **0**. Final single-worker replay of npm locks, cross-OS packaging, and release summaries: **306 tests passed**, 30.82 seconds including the wrapper.

Fixes found along the way: no separate product bug was established. Gate findings were corrected in the owning changes; tests were not weakened to conceal failures.
2026-10-03 04:04:39 +00:00
Peter Steinberger 7cbaa6b36f refactor(scripts): deslop shared tooling flows (#162824)
Consolidate script lifecycle and helper ownership while preserving CLI, generated-output, cleanup, and guard contracts. Reject inherited object keys in model-matrix option admission with the existing unknown-argument diagnostic.

Validation: 90 full sibling suites; original-fails parser regression; byte-identical native outputs; changed checks; SDK surface and API comparison; both zero-cycle checks; independent isolated review.
2026-10-01 21:30:19 +00:00
Peter Steinberger afcb342244 refactor(scripts): deslop tooling scripts third pass (#161354)
* refactor(scripts): deslop tooling scripts third pass

Consolidate AST traversal, binding and shadow handling, report grouping,
fixture metadata, and developer harness plumbing. Remove the unused PR
comment verdict parser and one-use forwarding layers while preserving CLI,
guard, baseline, and generated-byte contracts.

* test(scripts): parse mocked fetch requests with Request

* test(scripts): include shared AST helper in protocol fixture
2026-09-29 17:00:46 -07:00
Josh Avant 35263bd17a fix(ci): stop obsolete security reviews after PR lifecycle changes (#160890)
* fix(ci): stop obsolete security reviews after PR lifecycle changes

* fix(ci): preserve security review evidence after merges
2026-09-28 21:34:29 -05:00
Peter Steinberger 824982caa6 fix(ci): preserve security authority in baseline failure admission 2026-09-27 21:45:21 -07:00
Peter Steinberger 9726512367 ci(security-review): reconcile ci-gate statuses when CI completion delivery is lost (#155392)
Lost CI-completion deliveries can leave the required ci-gate status pending after CI finishes. Add scheduled reconciliation through the existing trusted Security Review resolver and enforcement job.

Preserve overlapping completion windows, reject incomplete listings before publication, keep provisional statuses eligible, and trust only Actions-owned gate statuses. Bound each pass to the oldest 100 heads and retain the successful window anchor while a backlog remains.

Reruns whose original creation time predates the three-hour listing margin retain the documented existing recovery path through a push or Security Review rerun.

Validation: exact-head CI passed, focused entry-point and workflow regressions passed, and live read-only GitHub transport proof completed. Production scheduled recovery remains post-merge proof.
2026-09-27 14:08:14 -07:00
Peter Steinberger f8a3418494 refactor(scripts): deslop tooling subdirectories and agent skill helpers (#159218)
Consolidate repeated tooling flows while preserving command contracts. Fix swallowed HTML translation errors and browser-realm error handling in the Google Live smoke. Owner tests and CLI parity passed on Testbox; final broad gate replay follows a fixture lint correction.
2026-09-26 18:13:40 -07:00
Hannes Rudolph 340092231c docs: remove stale showcase section (#158575) 2026-09-25 21:11:35 -06:00
Josh Avant bf6de07f15 fix(ci): recover interrupted Security Review response bodies (#157651) 2026-09-24 20:11:01 -05:00
Josh Avant 507b137ff0 fix: clarify lockfile cleanup fallback when write access is unavailable (#157008)
* fix: clarify lockfile cleanup fallback when write access is unavailable

* test: use findLast for dependency review status assertion
2026-09-23 23:44:07 -05:00
Josh Avant b770a861bd fix(ci): recover Security Review from read timeouts (#156176) 2026-09-24 03:47:25 +00:00
45920b3853 fix(ci): stop obsolete security review reads after new pushes (#156798)
Stop obsolete Security Review reads and non-quota recovery waits after a newer PR head supersedes the evaluated revision. Reuse the existing supersession outcome and preserve per-SHA publication serialization, final approval checks, and autoscrub writes/cleanup.

Regression coverage proves early exit before further pagination or recovery waiting; the unchanged-head control completes. In-flight request deadlines, server-directed quota waits, checkout, and runtime setup are unchanged.

Contributor credit: VACInc and vincentkoc.

## Work sessions

- [Original discussion](https://team.openclaw.ai/chat/roboclaw/dashboard/1b82108b-d6ca-44f2-95d5-63a6831c6bb7)
- [Implementation and verification](https://team.openclaw.ai/chat/roboclaw/68b61c50)

---
[View the OpenClaw team session](https://team.openclaw.ai/chat/roboclaw/dashboard/68b61c50-c2d0-461b-ab98-37947c99b1f1)

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
2026-09-23 20:24:31 -07:00
Dallin Romney 86f5656a2a fix(release): require Gateway and Telegram validation (#156811)
* fix(release): ignore waivers for other release trains

* test(auto-reply): await active admission boundary

* fix(release): restore blocking validation without lane waivers

* fix(release): require Gateway install and upgrade checks on every OS

* test(ci): align Testbox timeout with its existing lease

* fix(ci): include readonly reuse in PR wrapper closure

* fix(release): restore blocking Telegram validation

* refactor(release): remove legacy waiver transition handling

* test(release): expect Telegram QA to block release checks
2026-09-23 19:04:50 -07:00
Peter Steinberger 0708f975ab fix(ci): stop reviving canceled test workflows
Cancellation did not prove an infrastructure error or absence of executed
and failed tests, yet the sweeper automatically replayed whole workflows.
The three-day census found nine such reruns, including five CI workflows.

Remove canceled-run revival. Keep bounded recovery for missing or
startup-failed CI before tests execute, with infrastructure warnings and
the existing live head/PR checks.

The actual sweeper boundary changed from one canceled-run replay to zero
without a PR mutation. Both shared-fixture importers passed 20 standalone
runs and three replays under their CI configs on Testbox.
2026-09-23 18:27:19 -07:00
Josh Avant ae53b4f777 fix(ci): remove lockfile changes after main advances (#156171) 2026-09-23 13:32:34 -05:00
Josh Avant e6bd12b4cd fix(ci): avoid dependency warnings from unrelated main updates (#156040) 2026-09-22 19:52:41 -05:00
Josh Avant a98b766352 fix(ci): recover Security Review when diff data settles slowly (#155921) 2026-09-22 15:12:41 -05:00
Josh Avant 0c98d387e8 fix(ci): identify changed PR fields in Security Review errors (#155266) 2026-09-21 18:47:03 -05:00
Josh Avant 0dc39583dd fix: recover Security Review after transient status failures (#155248) 2026-09-21 18:08:41 -05:00
Josh Avant f7c0c42c04 fix(ci): prevent false Security Review failures (#155231) 2026-09-21 17:22:30 -05:00
Josh Avant 25b469ec73 fix(ci): retry Security Review HTTP 500 reads (#155196) 2026-09-21 16:27:12 -05:00
Josh Avant 6615891cc3 fix(ci): skip superseded security review runs (#155170) 2026-09-21 15:52:39 -05:00
Josh Avant 9d5c532435 fix(ci): recover security review from inconsistent file lists (#155129) 2026-09-21 15:00:29 -05:00