Commit Graph

1927 Commits

Author SHA1 Message Date
Peter Steinberger
1e3a4a69b5 fix: preserve native trace heading typography (#103436)
* fix(ios): preserve native trace heading typography

* test(ios): attach trace heading visual proof

* test(ios): import shared chat UI for visual proof
2026-07-28 00:01:44 -04:00
metaforismo
a84ea8b732 fix(ios): suppress stale delayed UI actions (#113062)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 23:19:07 -04:00
Peter Steinberger
0fdc825b29 fix(ui): make the Control UI e2e suite green and gate merges on it (#114554)
* fix(ui): restore chat flow e2e coverage

(cherry picked from commit 16a094eaec4ae121db09f67c094a41262aa9cefc)

* test(ui): align browser Talk mocks with voice sessions

(cherry picked from commit ef0649334539954b253ab8c51ff436bd8ce757c6)

* test(ui): wait for chat startup in update E2E

(cherry picked from commit 586e1046320dd56398fd8a3b995a1a465f6c6fe2)

* test(ui): update sidebar session route expectation

(cherry picked from commit 9692985027556fad7bb7819c8e140a101e181c47)

* test(ui): update session management e2e contracts

(cherry picked from commit 4e99348dabf08fb8886d55e25a9f9eda1dfe1056)

* test(ui): align Codex session E2E contracts

Update the catalog layout assertion for reorderable sibling sections, expose advanced plugin settings explicitly, and make adopted sessions resolvable through the current path router.

(cherry picked from commit 1a03f924a32facb23302c5618a2b15004feeccff)

* test(ui): align composer e2e with metadata hydration

(cherry picked from commit eca1902e773be32c993ddb22594925f7da82f98f)

* fix(ui): restore usage hint click behavior

(cherry picked from commit ea63b5dab7c3c54048a04d60703e529e5b900df6)

* fix(ui): give reveal-only tooltips an explicit click-to-open opt-in

#112602 made the shared tooltip dismiss on pointer activation so an action
button never strands one open. The usage summary hint exists only to be read,
so clicking it did nothing on touch or in browsers that skip focus on click.
Opt that trigger in rather than bouncing focus through blur/focus, which
briefly drops focus for assistive tech.

(cherry picked from commit 16d165857a4006ae0a0df42168f34a40f4cc9117)

* test(ui): follow sidebar dock resize ownership

(cherry picked from commit fd4792a2dd9fc81fc63f8c9e25291ff2246d235a)

* test(ui): prove the dock resize persists off its clamp

Asserting the post-End width equals SIDEBAR_MIN_WIDTH_PX compared the clamp
to itself across reload, so the check would pass even if the persisted width
were dropped and the column fell back to its minimum. Step off the clamp
first and assert that value survives.

(cherry picked from commit 3636124c326a93b80006ccc4064415ec1a6c2c9f)

* test(ui): align native link routing e2e contracts

Use a non-link bubble hit target after flat assistant styling, assert modified clicks at the routing boundary instead of relying on Chromium tab creation, and preserve native context menus for internal anchors.

(cherry picked from commit 55fbd3052a40c5c03f00f0bf595ef356ac0d1f10)

* test(ui): align native catalog host assertions

(cherry picked from commit 9db9a2fcd5633675a88296b2ccd874563a00cb80)

* test(ui): target tool outcome rollup at dashboard session

Completed-work groups are dashboard-only, so the legacy main session never rendered the disclosure exercised by this test.

(cherry picked from commit ba84b617ef038866451ad03491298349d966a54f)

* test(ui): track discussion panel close action

The flexible multi-sidebar layout replaced the generic Close sidebar action with a panel-specific Close Discussion action. Keep the E2E toggle proof aligned with that intentional accessible-name contract.

(cherry picked from commit 422b1f2bd8fae2a7571881d0455c3040c2ef2de9)

* test(ui): mock pairing list in WhatsApp logout e2e

(cherry picked from commit 3730de075bbb50071fc0cb57c007ab894688a7a1)

* test(ui): open build info from identity menu

(cherry picked from commit b1626a6a723ec13c2cf50444b4c7a65fec289213)

* fix(ui): let the board fixture host page own its theme

The fixture module unconditionally re-added `wa-dark` at import time, which
runs after the host page's inline theme script. #111998 gave that page the
real prefers-color-scheme contract, leaving the line from #112076 stale: in
light mode the root ended up with both `wa-light` and `wa-dark`, so Web
Awesome rendered dropdowns dark.

(cherry picked from commit 43e50de9728f3d5feac9609142d28821896b4f77)

* test(ui): align approval E2E with scoped errors

(cherry picked from commit 6435fe995491c6bae2c28fa374d06cd77f3c46ac)

* test(ui): use radio role in Set Default E2E

(cherry picked from commit acc8d5a487aac4d56515ae35d976fd347efa0be5)

* ci: gate merges on the Control UI e2e suite

test/vitest/vitest.ui-e2e.config.ts was referenced only by package.json and
mantis-web-ui-chat-proof.yml, so nothing in the merge gate ever ran it and 39
failures accumulated across 21 files (#114438). Give it its own job: the suite
runs one file at a time because each owns a Chromium context and a mocked
Gateway, ~21 min measured, which does not fit checks-ui's 20-minute budget.
Also route the config file itself through the Control UI changed-scope so a
change to it triggers the job.

* test(ui): isolate MCP app conformance from sidecars

(cherry picked from commit c2bfd0a00edad804474ebb23449d3150557c7f78)

* test(ui): list newly created E2E sessions

(cherry picked from commit e1a2188699011e818e040358d4eaf6ce26eb0732)

* test(ui): synchronize full-suite e2e setup

* test(ui): drop implied-eval module import and align the e2e workflow guard

* test(ui): wait for pin editor roving focus before keyboard nav

* test(ui): read the startle class in one in-page step

* test(ui): synchronize transient e2e assertions
2026-07-27 19:31:31 -04:00
Peter Steinberger
69b54cf13c chore(docs): harden external link audit results (#114746) 2026-07-27 17:37:02 -04:00
Peter Steinberger
960b050add refactor(extensions): remove orphaned shadow trial and retired config aliases (#114709)
* refactor(memory-core): remove orphaned shadow trials

* refactor(qqbot): migrate direct voice upload formats

Release note: QQBot configs using voiceDirectUploadFormats now migrate through openclaw doctor --fix to audioFormatPolicy.uploadDirectFormats at root and account scope. Existing nested uploadDirectFormats values win conflicts, and runtime reads only the nested policy.

* refactor(feishu): migrate tools base alias

Release note: Feishu configs using tools.base now migrate through openclaw doctor --fix to tools.bitable at root and account scope. Existing bitable values win conflicts, and runtime accepts only the canonical key.

* refactor(extensions): remove dead runtime state

* chore(config): refresh bundled channel metadata

* refactor(codex): keep realtime fallback type private

* test(ci): align QA compatibility scenario count
2026-07-27 17:12:41 -04:00
Peter Steinberger
277e887c3a fix(release): validate frozen runtime pair evidence (#114707)
* fix(release): validate frozen runtime pair evidence

* fix(release): pin frozen runtime gap identities

* style(release): satisfy frozen validator lint

* fix(ci): repair release blocker checks
2026-07-27 15:49:42 -04:00
Peter Steinberger
fd0fdcc458 chore(docs): audit external links without gating PRs (#114643)
* docs: repair audited external links

* ci(docs): add advisory external link audit
2026-07-27 14:02:09 -04:00
Peter Steinberger
1695854877 fix(qa): isolate Mantis candidate execution (#114465)
* fix(qa): allow restricted Mantis worktree traversal

* fix(qa): pin Mantis harness checkout revision

* fix(qa): isolate Mantis candidate execution

* fix(qa): harden Mantis teardown
2026-07-27 12:11:34 -04:00
Peter Steinberger
ee9bc9a502 fix: harden cron and Workboard scheduling under load (#114564)
* fix: harden cron and Workboard scheduling under load

* test: refresh cron pagination prompt snapshots

* test: verify Workboard stress and generated cron snapshots

* fix(workboard): reclaim expired cross-board worker capacity safely

* fix(workboard): keep reclaim interval private to lifecycle owner

* fix(ci): pin and verify reliable OpenGrep security scanner

* test: guard checksum-verified OpenGrep installation
2026-07-27 09:29:42 -04:00
Dallin Romney
2e0a1d3c37 fix(release): use trusted harness pnpm pin (#114106) 2026-07-27 21:01:10 +08:00
Peter Steinberger
de6b114639 fix(ui): keep first turns visible and block browser regressions (#114498)
* fix(ui): require new-session Chromium regression checks

* fix(ui): stabilize first-turn browser regression scenarios

* test(ui): keep browser regressions within lint boundaries

* test(ui): keep rejected sessions out of browser fixtures
2026-07-27 07:38:48 -04:00
Peter Steinberger
45bad50e26 fix(qa): harden Mantis Telegram proof harness (#114429)
* fix(qa): harden Mantis Telegram proof harness

* fix(qa): require explicit Mantis dispatch
2026-07-27 04:33:06 -04:00
Peter Steinberger
079ac9390d refactor(ios): simplify node and Watch lifecycle ownership (#114366)
* refactor(ios): centralize node lifecycle owners

* fix(ios): sync native localization source inventory

* test(ios): prove gateway and notification lifecycles in simulator

* fix(ios): preserve voice upgrade and correlate watch snapshots
2026-07-27 03:23:31 -04:00
Peter Steinberger
3796a45911 fix(release): keep advisory summaries portable on macOS (#114371) 2026-07-27 02:38:11 -04:00
Peter Steinberger
0f68118176 fix(ci): run Testbox validation when draft PRs become ready (#114372) 2026-07-27 02:36:36 -04:00
Peter Steinberger
054495d16d fix(ci): verify stale bugs before closure (#114365) 2026-07-27 02:25:15 -04:00
Peter Steinberger
fee6db765d fix(openai): prevent onboarding from offering unavailable account models (#114356)
* fix(openai): keep account models and onboarding release proof authoritative

* fix(openai): document configured model catalog authority
2026-07-27 02:23:50 -04:00
Peter Steinberger
992a86a28f fix(linux): make the companion's Rust test suite runnable and run it (#114260)
Three defects that compounded into a test suite nobody could run and nobody
was running.

The suite has been red on main since 2026-07-20. `connect_frame_matches_gateway_schema`
asserts a TLS-pinned connection advertises no capabilities, but #111933 wrote
that assertion while caps held only inline-widgets, and #111920 made
`agent-kind` unconditional the same day. No textual conflict, so both landed
and the assertion has been wrong ever since. Pinning only withdraws inline
widgets, so assert exactly that.

`cargo test` could not run on macOS at all: tauri-plugin-notifications links a
Swift static library, nothing adds an rpath for the Swift runtime, and every
test binary aborted at load with `Library not loaded:
@rpath/libswift_Concurrency.dylib`. Emit the rpath from build.rs.

Neither surfaced because linux-app.yml never ran `cargo test` - it only checked
formatting and built bundles. Run the suite on Linux, and upgrade the macOS job
from `check` to `test` so link-time breakage like the rpath is caught at all;
`check` never links, so it cannot see this class of failure.
2026-07-26 23:43:32 -04:00
Peter Steinberger
e94796e447 fix(linux): restore the macOS build of the Tauri companion (#114243)
* fix(linux): restore the macOS build of the Tauri companion

Tauri gates `WebviewWindowBuilder::transparent` behind its `macos-private-api`
feature on macOS, so the companion stopped compiling for macOS when Quick Chat
landed in #109947: `no method named 'transparent' found for struct
'WebviewWindowBuilder'`. Enable that feature together with the matching
`app.macOSPrivateApi` config flag, which Tauri requires to agree with it or
tauri-build fails the allowlist check.

Quick Chat is built for a transparent window - quickchat.css makes html and
body transparent behind a 16px-radius translucent card with a drop shadow - so
compiling macOS by dropping `.transparent(true)` would ship an opaque rectangle
instead of the floating composer.

Also add a per-PR macOS `cargo check`. The only job that compiled the macOS
target sits behind a manual dispatch input in linux-app-release.yml, which is
why a broken macOS build survived for nine days.

* ci(linux): build the macOS companion on macos-15

tauri-plugin-notifications' Swift sources use typed throws
(`throws(FFIResult)`), which requires Swift 6. The macos-14 runner image still
ships Swift 5.x and cannot parse them, so the plugin's build script panics with
"Swift build failed for target: arm64-apple-macosx13.0".

This hit the new per-PR check immediately, and it means the release workflow's
`build_macos` job could not have produced a macOS bundle either - it compiles
the same crate on the same image, but only runs behind a manual dispatch input
so nothing surfaced it. Move both to macos-15.
2026-07-26 22:57:36 -04:00
Peter Steinberger
e66809fa35 ci: guard historical npm lock checks (#114073) 2026-07-26 04:27:20 -04:00
Peter Steinberger
8684e7ce03 fix: restore beta runtime release gates (#114064)
* test(qa): fix release runtime recovery gates

* test(qa): typecheck restart execution assertions
2026-07-26 03:58:41 -04:00
Peter Steinberger
f6131a4fbf build(deps): remove npm shrinkwrap; mirror pnpm lock into transient package locks (#114006)
* build(deps): remove npm shrinkwrap; mirror pnpm lock into transient package locks

npm 12 removed shrinkwrap (command + tarball/root loading). Delete all 82
committed npm-shrinkwrap.json files and stop publishing lockfiles; keep
pnpm-lock.yaml as the single reviewed dependency boundary. The generator
becomes scripts/generate-npm-package-lock.mjs and feeds plugin bundling via
a transient package-lock.json + npm ci (works on npm 11 and 12). Tarball
validation treats the published 2026.7.2 beta train as a shrinkwrap
transition; self-update npm detection now uses install topology instead of
the shipped shrinkwrap.

* fix(deps): repair lint, deadcode, and test-type lanes for the npm 12 migration

- sort integrity comparisons with an explicit comparator (oxlint)
- keep resolveBunGlobalNodeModules module-local (knip unused-export gate)
- model npm pack --json as npm<=11 array / npm 12 name-keyed object
- default calver destructuring in the tarball test fixture
2026-07-26 01:29:55 -04:00
Peter Steinberger
29ca63221f fix(ci): keep Telegram release scratch in isolated runtime (#114026)
* fix(ci): export Telegram candidate artifacts dir

* style(test): format Telegram QA assertion
2026-07-26 01:04:38 -04:00
Dallin Romney
af4acfee63 fix(ci): retain frozen-candidate QA runtime scratch (#114018)
* fix(ci): preserve frozen candidate QA artifact scratch

* docs(ci): clarify QA artifact staging contract
2026-07-25 21:28:57 -07:00
Peter Steinberger
b2f6ecc2a9 chore(compat): date the annotated deprecation families and expose removal-pending debt (#114002)
* chore(compat): date the annotated deprecation families and expose removal-pending debt

Adds 10 dated compat-registry records for shipped deprecated surfaces that
previously had @deprecated annotations only (removeAfter 2026-10-01 per the
approved 60-day window), extends the beta5 session-store record with the
package-root aliases, surfaces removal-pending records with due dates,
blockers, and readers in the plugin boundary report, and converts undated
cleanup obligations (CI timing job, zizmor excessive-permissions, staged
Codex CI auth, memory-host legacy state dir, agent-DB schema-ladder floors)
into dated markers visible to the weekly dated-TODO sweep. Metadata,
diagnostics, and docs only - no runtime behavior change.

* fix(compat): keep extension src test paths out of core string literals

The core import guardrail forbids extensions/*/src/ path shapes in core
production string literals; cite the package-root google-meet test and the
registry test for official-plugin-export-aliases instead.
2026-07-25 21:01:20 -07:00
Peter Steinberger
4596fd2dd2 feat(ci): weekly Codex sweep for date-carrying to-dos (#113914)
* feat(ci): weekly Codex sweep for date-carrying to-dos

Mondays 06:23 UTC (plus default-branch-only manual dispatch with
dry_run): a deterministic prefilter collects candidate lines where
to-do markers co-occur with date tokens, plus every deprecated compat
record from the plugin registry; a pinned openai/codex-action step
judges each candidate in context (genuine dated commitment vs
historical date or fixture) and writes an OVERDUE / DUE-30-days /
FUTURE report; a separate privileged job validates the report (tracked
file:line locations, date shape, inert text) and upserts one
marker-tagged tracking issue via the Barnacle app token, commenting
only when items newly become due.

The app token is minted on a fresh runner and checkout — never beside
Codex or its child processes; only the validated report artifact
crosses jobs. No permission-* subsets on token minting (installations
reject explicit subsets; see pr-ci-sweeper).

* chore(ci): localize upsert helpers with no external consumers
2026-07-25 18:18:06 -07:00
Peter Steinberger
71c654c72d fix(release): install package validation dependencies (#113907)
* fix(release): install package validation dependencies

* fix(release): isolate artifact validation tooling
2026-07-25 16:29:20 -07:00
Peter Steinberger
d5a3740707 fix(package): prevent installs from deleting required runtime modules (#113821)
* fix(package): preserve imported runtime chunks after install

* fix(package): isolate public build from private QA

* test(package): prove installed postinstall dependency graph
2026-07-25 14:05:41 -07:00
Peter Steinberger
fdb511f5a1 fix(ci): repair beta performance and mention gates (#113795) 2026-07-25 11:56:00 -07:00
Peter Steinberger
f43fac21c7 fix(gateway): stop showing retired HEARTBEAT.md in the agent files editor (#113621)
* fix(gateway): drop retired HEARTBEAT.md from agent core files

* fix(ci): stop asserting retired HEARTBEAT.md in docker release smoke

* docs: align HEARTBEAT.md references with cron scratch

* docs(agents): drop retired HEARTBEAT.md from workspace read comment
2026-07-25 04:58:31 -07:00
Dallin Romney
26b7bb822b fix(ci): validate frozen release candidates with compatible harnesses (#113628)
* fix(ci): keep release harnesses compatible with frozen candidates

* style: format release Telegram workflow test
2026-07-25 04:45:29 -07:00
Peter Steinberger
5bea268128 feat(anthropic): complete Claude Opus 5 rollout (#113392)
* feat(models): add Claude Opus 5 support

* test(models): align Opus 5 setup fixtures

* test(models): update ambient Opus 5 detection

* fix(models): reconcile Opus 5 support with main
2026-07-24 14:55:36 -07:00
Peter Steinberger
1564c0719f ci: pin exact action version comments (#113386) 2026-07-24 12:05:51 -07:00
Peter Steinberger
7dfb660d1f fix(release): keep msteams packaging and Docker reruns reliable (#113332)
* fix(release): forward-port beta packaging repairs

* fix(ci): acknowledge sweeper token grant
2026-07-24 07:05:41 -07:00
Peter Steinberger
8d67c40939 fix(ci): restore full-grant app token for pr-ci-sweeper
Every scheduled sweep failed at token minting since the explicit
permission subset was added: actions/create-github-app-token rejects any
request exceeding the installation grant, and these installations lack
actions:write/checks:read (stale.yml succeeds with actions:read;
auto-response succeeds with neither). Requesting no subset restores the
app's full granted set, which the re-fire lane demonstrably worked with.
If the org later grants actions:write+checks:read, the explicit subset
can return.
2026-07-24 06:21:04 -07:00
Peter Steinberger
73bba03e4c refactor: canonicalize session delivery state (#113225)
* refactor: canonicalize session delivery state

* test: canonicalize reply persistence fixtures

* test: canonicalize talk delivery fixtures

* test: canonicalize voice session routes

* test: canonicalize attachment delivery fixtures

* test: migrate gateway delivery fixtures

* fix: skip invalid session delivery rows

* test: align delivery SDK surface gates

* fix: preserve legacy delivery precedence

* test: canonicalize heartbeat delivery fixtures

* fix: preserve delivery route prompt identity

* test: canonicalize session delivery fixtures

* fix: preserve recoverable legacy delivery routes

* fix: canonicalize remaining session state

* fix: preserve canonical session classification

* style: format delivery state changes

* test: refresh plugin SDK delivery baseline

* test: avoid mutating session fixture input

* style: simplify delivery identity check

* style: simplify delivery origin spread

* fix: preserve fresh delivery route metadata

* test: assert canonical surface route switch

* fix: canonicalize doctor file-store imports

* fix: preserve transitional delivery migration state

* fix: satisfy canonical delivery CI gates

* ci: scope GitHub App token permissions

* test: infer canonical delivery projections

* test: canonicalize ACP requester delivery fixtures

* test: canonicalize harness rollback fixture

* style: apply pinned formatter
2026-07-24 01:01:19 -07:00
Vincent Koc
342816a58d fix(i18n): publish Android flavor locale artifacts 2026-07-24 15:26:58 +08:00
Peter Steinberger
169dad6224 fix: watch-pr-ci exits with false FAILURE when draft-to-ready cancels superseded runs (#113230)
* fix(scripts): ignore superseded workflow runs in watch-pr-ci rollup classification

Draft->ready re-triggers leave cancelled superseded runs on the head SHA
forever, and GitHub's aggregate rollup state counts them, so the watcher
emitted terminal FAILURE while the replacement run was still in progress
and could never reach GREEN (observed on PR #113150, head bd1b9a0e).

- fetch run identity per check and resolve same-name checks to the newest
  run/check id (GitHub latest-name-wins); drop cancelled checks from
  replaced runs; keep older runs' unique jobs visible
- paginate statusCheckRollup contexts (bounded, 10 pages) so >100-context
  rollups are not truncation-blind; changed or lost snapshots throw into
  the bounded retry
- classify GREEN when aggregate FAILURE is explained solely by superseded
  contexts with full visibility; truncation still fails conservatively

* ci: scope GitHub App token permissions in stale, labeler, auto-response, and pr-ci-sweeper

Fixes red main: #112963 bumped zizmor v1.22.0 -> v1.28.0, whose github-app
audit flags create-github-app-token mints without permission-* inputs (14
high findings, Workflow Sanity red on main since 3b7b2a2a1f). Most
workflows already migrated to scoped tokens; these four were stragglers.

Scopes follow each consumer's actual API surface: stale needs issues/PR
write plus actions read for its state-cache check; labeler needs label
CRUD (issues write), PR write, members read for maintainer gates, and
contents read where actions/labeler reads its config; auto-response needs
issues/PR write plus members read; pr-ci-sweeper needs actions write to
re-fire runs, checks read, and PR write. Verified locally with the exact
CI invocation (zizmor 1.28.0, repo config, regular persona, medium
severity/confidence): no findings, ignore/suppress counts match CI.
2026-07-23 22:46:04 -07:00
Peter Steinberger
3b7b2a2a1f chore: update dependencies and migrate major contracts (#112963)
* build(deps): complete latest dependency migrations

* fix(deps): satisfy updated dependency types

* fix(deps): hold incompatible build tooling

* fix(deps): preserve portable tooling contracts

* build(deps): allow reviewed fresh transitive releases

* fix(deps): repair major upgrade validation

* build(deps): regenerate current dependency graph

* fix(logging): keep tslog adapter type private

* fix(agents): narrow grep subprocess handle

* fix(codex): prefer pinned managed binary

* fix(codex): fence managed native provenance

* build(deps): align codex ACP with managed harness

* fix(slack): use socket-mode Undici runtime

* fix(slack): detect cross-runtime responses

* fix(slack): bridge package-owned fetch types

* fix(deps): retain tslog v4 JSON contract

* build(plugin-sdk): refresh logging API manifest
2026-07-23 21:21:01 -07:00
joshavant
ee317497d9 fix(ios): isolate release screenshot captures 2026-07-23 20:45:33 -05:00
Peter Steinberger
6c3d8fc1b0 ci(release): honor candidate pnpm pin (#113110) 2026-07-23 11:32:04 -07:00
Peter Steinberger
acd92f6a3d chore(deps): refresh repository dependencies (#112453)
* build(deps): update QA broker dependency

* build(deps): refresh repository dependencies

* build(deps): reconcile rebased shrinkwraps

* test(plugins): remove stale loader test state

* test(deps): stabilize updated dependency coverage

* fix(swift): use caller-isolated TaskLocal overload

* build(deps): regenerate rebased shrinkwraps

* test(msteams): preserve DNS validation in fetch helper

* fix(deps): avoid vulnerable optional image stack

* test(deps): validate generated LRU override

* refactor(ui): extract chat resizable divider

* test(ui): update divider ownership path

* fix(matrix): retain restart-compatible SDK

* style(cron): format update test
2026-07-23 16:17:13 +00:00
joshavant
b85c0e2064 fix(ios): harden release screenshot capture 2026-07-23 11:09:06 -05:00
Peter Steinberger
525a7f4c96 ci(release): restore full validation after config migrations (#112740)
* fix(browser): preserve scoped CDP authority policy

* test(release): migrate canonical config fixtures

* ci(release): repair acceptance harness drift

* ci(release): extend Anthropic setup budget

* test(release): align remaining CI contracts

* test(release): align Docker and QA contract tests

* docs(release): preserve validation evidence inputs

* test(plugins): align unprepared metadata reads

* ci(release): separate QA live suite filters

* test(release): bind cron MCP cleanup device
2026-07-23 08:46:55 -04:00
Peter Steinberger
6522ce37d9 fix(release): unblock Telegram QA and Copilot media proof (#112972)
* fix(release): build Telegram candidate with private QA

* fix(copilot): preserve offloaded prompt images
2026-07-23 04:43:53 -04:00
Peter Steinberger
e76c9aac30 fix(release): allow isolated Telegram private QA (#112935)
* fix(release): forward private QA flags to Telegram SUT

* test(ui): update catalog activity state owner
2026-07-23 02:17:48 -04:00
Dallin Romney
a195d6fcee fix(release): invoke frozen Telegram CLI directly (#112874) 2026-07-23 13:08:33 +09:00
Dallin Romney
f7d61b4352 fix(ci): skip new OpenClawKit suite for frozen targets (#112860) 2026-07-23 12:26:49 +09:00
Dallin Romney
67ef07863f fix(release): support frozen candidate contracts (#112841) 2026-07-23 12:03:11 +09:00
Dallin Romney
19d17bc3c4 refactor(qa): canonicalize runtime-pair lanes (#112603) 2026-07-23 10:06:12 +09:00