chore: upstream absorb 2026-03-24 (348 commits, merge, golem green)#8
chore: upstream absorb 2026-03-24 (348 commits, merge, golem green)#8siofra-seksbot merged 350 commits intomainfrom
Conversation
…3307) thanks @BunsDev Co-authored-by: BunsDev <[email protected]> Co-authored-by: Nova <[email protected]>
Previously, `--at` with an offset-less ISO datetime (e.g. `2026-03-23T23:00:00`) was always interpreted as UTC, even when `--tz` was provided. This caused one-shot jobs to fire at the wrong time. Changes: - `parseAt()` now accepts an optional `tz` parameter - When `--tz` is provided with `--at`, offset-less datetimes are interpreted in that IANA timezone using Intl.DateTimeFormat - Datetimes with explicit offsets (e.g. `+01:00`, `Z`) are unaffected - Removed the guard in cron-edit that blocked `--tz` with `--at` - Updated `--at` help text to mention `--tz` support - Added 2 tests verifying timezone resolution and offset preservation
* tools: extend seam audit inventory * tools: tighten seam audit heuristics * tools: refine seam test matching * tools: refine seam audit review heuristics * style: format seam audit script * tools: widen seam audit matcher coverage * tools: harden seam audit coverage * tools: tighten boundary audit matchers * tools: ignore mocked import matches in boundary audit * test: include native command reply seams in audit
) * fix(command-auth): handle unresolved SecretRef in resolveAllowFrom * fix(command-auth): fall back to config allowlists * fix(command-auth): avoid duplicate resolution fallback * fix(command-auth): fail closed on invalid allowlists * fix(command-auth): isolate fallback resolution errors * fix: record command auth SecretRef landing notes (openclaw#52791) (thanks @Lukavyi) --------- Co-authored-by: Ayaan Zaidi <[email protected]>
…Telegram DM topics (openclaw#52217) When a channel plugin lacks a custom buildToolContext (e.g. Telegram), the fallback path in buildThreadingToolContext did not set currentThreadTs from the inbound MessageThreadId. This caused resolveTelegramAutoThreadId to return undefined, so message tool sends without explicit threadId would route to the main chat instead of the originating DM topic. Fixes openclaw#52217
* tools: extend seam audit inventory * tools: audit cron seam coverage gaps * test: add cron seam coverage tests * fix: avoid marking NO_REPLY cron deliveries as delivered * fix: clean up delete-after-run NO_REPLY cron sessions
* chore(perf): start builtin sqlite hotpath workstream * perf(memory): reuse sqlite statements during sync * perf(memory): snapshot file state during sync * perf(memory): consolidate status sqlite reads * docs(changelog): note builtin sqlite perf work * perf(memory): avoid session table scans on targeted sync
…penclaw#53957) * perf(slack): instrument runtime and trim DM overhead * perf(slack): lazy-init draft previews * perf(slack): add turn summary diagnostics * perf(core): trim repeated runtime setup noise * perf(core): preselect default web search providers * perf(agent): restore OpenAI auto transport defaults * refactor(slack): drop temporary perf wiring * fix(slack): address follow-up review notes * fix(security): tighten slack and runtime defaults * style(web-search): fix import ordering * style(agent): remove useless spread fallback * docs(changelog): note slack runtime hardening
Conflicts resolved: - ci.yml: adopt upstream's scope job rename, replace Blacksmith runners with ubuntu-latest/windows-latest - browser test: take upstream's named constant refactor
footgun-seksbot
left a comment
There was a problem hiding this comment.
Review: Upstream Absorb 2026-03-24
Reviewer: FootGun 🔫
Verdict: Request changes (minor — fixable without re-merge)
What Looks Good
- Conflict resolution is clean. No stray conflict markers. The CI workflow correctly adopts upstream's
scopejob rename and replaces Blacksmith runners withubuntu-latest/windows-latest. The browser test conflict was taken correctly from upstream. - Merge strategy is correct. 348 commits is well above the rebase threshold. Merge is the right call.
- Golem tests pass. Smoke and workspace-file-ops both green — the important thing for our fork.
- No security concerns in the conflict resolution. Nothing custom was dropped.
CI Failures — 4 Categories
1. Stale generated metadata (MUST FIX)
checkjob:bundled-plugin-metadata.generated.tsis staleconfig-docs-driftalso fails (same category — generated baselines need refresh)- Fix: Run
pnpm check:bundled-plugin-metadata -- --updateandpnpm check:base-config-schema -- --update(or whatever the upstream regeneration commands are), commit the results.
2. Zulip plugin-sdk import guardrail (MUST FIX on Windows)
checks-windows (test, 7):extensions/zulip/index.tsimports fromopenclaw/plugin-sdkroot instead of a subpath. This is an upstream issue (the zulip extension landed with this import pattern), but our CI catches it.- Fix: Either update the import to use the subpath (
openclaw/plugin-sdk/channelor similar), or if this is intentional upstream, update the guardrail allowlist.
3. spine-exec-intercept.test.ts (PRE-EXISTING — not blocking)
vi.mock("./spine-client.js")is not properly intercepting the realfetchin CI. The mock works locally butspineExecmakes actual HTTP requests tobroker.test(ENOTFOUND). This is a pre-existing issue onmain— the test file existed before this PR.- Not a blocker for this absorb. Should be fixed separately (likely needs vitest ESM mock hoisting fix or moving to
vi.hoisted()).
4. Labeler workflow (NOISE — not blocking)
labelandlabel-issuesfail — this is a fork artifact (missing label config). Pre-existing, not related to this PR.
Recommendation
Fix items #1 and #2 (generated file refresh + zulip import), then this is good to merge. Items #3 and #4 are pre-existing and tracked separately.
Good first trial of the nightly absorb process, Síofra. 🌿
… imports 1. Regenerated bundled-plugin-metadata.generated.ts (stale after upstream merge) 2. Fixed Zulip extension monolithic plugin-sdk imports: - OpenClawPluginApi → openclaw/plugin-sdk/plugin-entry - emptyPluginConfigSchema, PluginRuntime, OpenClawConfig → openclaw/plugin-sdk/core - ChannelAccountSnapshot inline imports → openclaw/plugin-sdk/zulip 3. Added ChannelAccountSnapshot re-export to src/plugin-sdk/zulip.ts
footgun-seksbot
left a comment
There was a problem hiding this comment.
Both items fixed. Remaining failures are pre-existing on main (spine-exec-intercept mock issue + labeler fork artifact).
Good to merge. 🔫
footgun-seksbot
left a comment
There was a problem hiding this comment.
Approved
Both fixes verified:
- Generated files regenerated — bundled-plugin-metadata.generated.ts updated, config-docs baseline current.
- Zulip import guardrail fixed — all monolithic openclaw/plugin-sdk imports replaced with scoped subpaths. Lint passes.
The remaining CI failures (spine-exec-intercept, labeler) are pre-existing on main and not introduced by this merge.
Good to merge.
Upstream Absorb: 2026-03-24
Strategy: merge (348 commits — above rebase threshold of 50)
Range:
d18446261433→a03bbca4df81Conflicts Resolved
.github/workflows/ci.yml— adopted upstream'sscopejob rename (waspreflight), replaced Blacksmith runners withubuntu-latest/windows-latestsrc/browser/server-context...test.ts— took upstream's named constant refactor (trivial)Build
Golem Integration Tests
Upstream Highlights (last 20 of 348)
First trial of nightly upstream absorb process. Manual conflict resolution by Síofra, automated build + golem testing.