Skip to content

sync: upstream to v2026.3.12 (197 commits)#2395

Merged
alexey-pelykh merged 1 commit intomainfrom
fork-sync-v2026.3.12
Apr 18, 2026
Merged

sync: upstream to v2026.3.12 (197 commits)#2395
alexey-pelykh merged 1 commit intomainfrom
fork-sync-v2026.3.12

Conversation

@alexey-pelykh
Copy link
Copy Markdown

Upstream sync: v2026.3.11 → v2026.3.12

Range: 197 commits (0f8fd883..70d7a0854c)
File surface: 830 files (711 M / 116 A / 3 D)

D.1 Disposition Gate

  • 490 INCLUDE / 293 EXCLUDE / 47 EXTRACT / 1 COLLISION (resolved to EXTRACT) / 0 UNKNOWN

D.3 Apply + Stabilize

  • 487 INCLUDE files applied (450 M + 37 A); 3 D-status no-ops
  • 4 auto-gutted re-introductions deleted with tracking EXCLUDE-GUT rules: failover-error.test.ts, models-config.providers.discovery.ts, directive-handling.levels.ts, vllm-setup.ts
  • ~266 files reclassified INCLUDE → EXTRACT during build stabilization for upstream type shifts (UI ThemeMode/ResolvedTheme split, TuiStateAccess.firstAgentId, OnboardOptions.runtime, SessionStatus.contextTokens, CronProps.accountSuggestions, UiSettings.navWidth/themeMode, verifyBootstrapToken shape, Mattermost handler signature)
  • 23 extension package.json version bumps reverted (fork stays at 0.6.0 per workspace convention)
  • extensions/googlechat/package.json peerDependencies.remoteclaw kept at workspace:*
  • extensions/matrix/package.json dropped re-introduced @mariozechner/pi-agent-core dep
  • pnpm install regenerated lockfile (+682 / −79 lines)

D.4 EXTRACT Ports

  • Line webhook security hardening (src/line/webhook{,-utils,-node}.ts + tests): 64 KB raw body cap, signature verified before body parsing, removed unsigned-empty-events verification bypass
  • ❌ Discord monitor/provider.ts lazy-load: reverted — gutted ACP control-plane + skill-commands deps
  • ⏭️ Browser proxy-files.ts: fork-gutted, no action
  • ⏭️ Telegram bot-handlers.ts: gutted model-selection / sessions/model-overrides imports — deferred
  • ⏭️ Gateway server.impl.ts hook-client-ip: requires server/hooks.ts port — deferred

D.4.5 Regression Gate

  • Tombstones: 0 violations
  • Stub fingerprints: 0 violations
  • Semantic invariants: PASS (reverted re-introduced vi.mock("./pi-embedded.js") in subagent-announce.timeout.test.ts)

Fork Debt Cleanup

  • Pre-existing docs.remoteclaw.aidocs.remoteclaw.org on 8 files (Swift + Markdown)
  • README badge v2026.3.11 → v2026.3.12
  • package.json upstreamVersion 2026.3.11 → 2026.3.12

Build State

  • pnpm check PASS (format + tsgo + lint + lint:tmp:no-random-messaging + lint:no-remoteclaw-ai)
  • Pre-existing failures carried: 2 openresponses-parity.test.ts cases (not B8 regression — failing on main pre-sync)

Carry-Forward Debt

~266 reverted files remain at fork HEAD and need hunk-level review in a follow-up batch or dedicated reclassification batch. UI subsystem (ThemeMode migration, skills/usage panels) is the largest cluster.

🤖 Generated with Claude Code

@alexey-pelykh alexey-pelykh force-pushed the fork-sync-v2026.3.12 branch 2 times, most recently from 766b4bf to e03ba60 Compare April 18, 2026 06:23
D.1 gate: 490 INCLUDE / 293 EXCLUDE / 47 EXTRACT / 1 COLLISION (resolved as EXTRACT)
D.3 apply: 487 files written, 4 auto-gutted re-introductions removed (models-config
providers.discovery.ts, vllm-setup.ts, failover-error.test.ts, directive-handling
.levels.ts) with tracking EXCLUDE-GUT rules added.
D.3 stabilize: ~266 INCLUDE reclassified to EXTRACT during type/build convergence
(UI subsystem + TUI + wizard + onboard + mattermost + gateway ws-connection carry
upstream type shifts — ThemeMode/ResolvedTheme split, SessionStatus contextTokens,
OnboardOptions runtime, TuiStateAccess firstAgentId, CronProps accountSuggestions,
UiSettings navWidth/themeMode). Kept: 244 M + 10 A INCLUDE files.
D.4 ports: Line webhook security hardening (64 KB body cap, sig-before-parse,
removed unsigned-empty-events bypass) + Line tests. Discord provider lazy-load
attempted but reverted (gutted ACP control-plane/skill-commands deps). Browser
proxy-files (fork-gutted), Telegram bot-handlers (model-selection deps), and
gateway server.impl hook-client-ip thread deferred.
D.4.5 gate: tombstones 0, stub fingerprints 0, semantic invariants pass.

B8-post CI reverts (5 files): CI caught additional fork-divergence after local
check passed. Reverted + added EXTRACT rules:
  - src/config/zod-schema.agent-runtime.ts (CliRuntimeIdSchema + fork `auth`/
    `runtimeArgs` fields + non-empty workspace refine — upstream schema dropped
    all three, broke 11 default-agent-elimination.test.ts cases)
  - src/config/zod-schema.agent-defaults.ts (references CliRuntimeIdSchema)
  - src/cli/update-cli.test.ts + src/cli/update-cli/shared.ts (fork update flow
    diverges: REMOTECLAW_UPDATE_PACKAGE_SPEC env, dev/next/latest channels,
    downgrade-yes semantics)
  - src/dockerfile.test.ts (references REMOTECLAW_NODE_BOOKWORM_IMAGE and fork
    playwright-opt-in pattern)

Subsystems heavily reverted as carry-forward EXTRACT debt:
  - ui/ (UI ThemeMode/skills/usage migration — separate batch)
  - src/tui/ (TuiStateAccess shape shift)
  - src/wizard/ (OnboardOptions runtime field)
  - src/commands/onboard* (provider auth catalog)
  - src/gateway/server/ws-connection/ (verifyBootstrapToken object shape)
  - extensions/mattermost/ (monitor handler signature shift)

pnpm install regenerated lockfile (extensions/matrix dropped re-introduced
@mariozechner/pi-agent-core dep; 23 extension package.json version reverts
0.6.0 to suppress upstream release versioning). All extension peerDependencies
reverted workspace:* per fork convention.

docs.remoteclaw.ai -> docs.remoteclaw.org fixes on 8 non-test files (upstream
introduced .ai domain references, fork enforces .org).

README badge v2026.3.11 -> v2026.3.12. package.json upstreamVersion updated.

Upstream-range: 0f8fd88..70d7a08
Upstream-boundary: v2026.3.12
Cherry-picked-from: @ccc7003360
Cherry-picked-from: @7a8316706c
Cherry-picked-from: @4efe7a4dcd
Cherry-picked-from: @1ec49e33f3
Cherry-picked-from: @a7a5e01c4c
Cherry-picked-from: @f7f75519ad
Cherry-picked-from: @0d7db6c652
Cherry-picked-from: @c58fffdab6
Cherry-picked-from: @209decf25c
Cherry-picked-from: @f46913b834
Cherry-picked-from: @ad7db1cc06
Cherry-picked-from: @accabda65c
Cherry-picked-from: @361f3109a5
Cherry-picked-from: @18f15850e6
Cherry-picked-from: @1dcef7b644
Cherry-picked-from: @2504cb6a1e
Cherry-picked-from: @4f462facda
Cherry-picked-from: @672924b01e
Cherry-picked-from: @99a5a3c16a
Cherry-picked-from: @276ee259ca
Cherry-picked-from: @d8d8dc7421
Cherry-picked-from: @f7416da905
Cherry-picked-from: @cee8717020
Cherry-picked-from: @8baf55d8ed
Cherry-picked-from: @12dc299cde
Cherry-picked-from: @99ec687d7a
Cherry-picked-from: @f3c00fce15
Cherry-picked-from: @6c196c913f
Cherry-picked-from: @241e8cc553
Cherry-picked-from: @e8a162d3d8
Cherry-picked-from: @0bcb95e8fa
Cherry-picked-from: @4dfd8eea90
Cherry-picked-from: @d8ee97c466
Cherry-picked-from: @82e3ac21ee
Cherry-picked-from: @ed0ec57a7b
Cherry-picked-from: @c5ea6134d0
Cherry-picked-from: @9aeaa19e9e
Cherry-picked-from: @97683071b5
Cherry-picked-from: @46a332385d
Cherry-picked-from: @f37815b323
Cherry-picked-from: @658bd54ecf
Cherry-picked-from: @46cb73da37
Cherry-picked-from: @62a71361a9
Cherry-picked-from: @1dfc35fc28
Cherry-picked-from: @cb7b38105f
Cherry-picked-from: @7c889e7113
Cherry-picked-from: @a6711afdc2
Cherry-picked-from: @f640326e31
Cherry-picked-from: @8ea79b64d0
Cherry-picked-from: @5acf6cae8e
Cherry-picked-from: @8582cb08b5
Cherry-picked-from: @783a0d540f
Cherry-picked-from: @4f620bebe5
Cherry-picked-from: @8e0e4f736a
Cherry-picked-from: @171d2df9e0
Cherry-picked-from: @f2e28fc30f
Cherry-picked-from: @ff47876e61
Cherry-picked-from: @f3be1c828c
Cherry-picked-from: @2f037f0930
Cherry-picked-from: @deada7edd3
Cherry-picked-from: @0a8d2b6200
Cherry-picked-from: @b0f717aa02
Cherry-picked-from: @29b36f8e4a
Cherry-picked-from: @e1d054547e
Cherry-picked-from: @797b6fe614
Cherry-picked-from: @c965049dc6
Cherry-picked-from: @48cbfdfac0
Cherry-picked-from: @3e730c0332
Cherry-picked-from: @eff0d5a947
Cherry-picked-from: @99170e2408
Cherry-picked-from: @7844bc89a1
Cherry-picked-from: @8ad0ca309e
Cherry-picked-from: @8525fd94ea
Cherry-picked-from: @688e3f0863
Cherry-picked-from: @e6897c800b
Cherry-picked-from: @3fa91cd69d
Cherry-picked-from: @0a8fa0e001
Cherry-picked-from: @3e28e10c2f
Cherry-picked-from: @9342739d71
Cherry-picked-from: @b77b7485e0
Cherry-picked-from: @96fb423528
Cherry-picked-from: @f96ba87f03
Cherry-picked-from: @dc3bb1890b
Cherry-picked-from: @46f0bfc55b
Cherry-picked-from: @9f08af1f06
Cherry-picked-from: @115f24819e
Cherry-picked-from: @0b34671de3
Cherry-picked-from: @b3e6f92fd2
Cherry-picked-from: @60c1577860
Cherry-picked-from: @136adb4c02
Cherry-picked-from: @33ba3ce951
Cherry-picked-from: @86135d5889
Cherry-picked-from: @f76a3c5225
Cherry-picked-from: @9cb0fa58c2
Cherry-picked-from: @2d42588a18
Cherry-picked-from: @1492ad20a9
Cherry-picked-from: @55f47e5ce6
Cherry-picked-from: @5e389d5e7c
Cherry-picked-from: @fda4965818
Cherry-picked-from: @08aa57a3de
Cherry-picked-from: @4ca84acf24
Cherry-picked-from: @e525957b4f
Cherry-picked-from: @50cc375c11
Cherry-picked-from: @3700279b14
Cherry-picked-from: @d93db0fc13
Cherry-picked-from: @fd568c4f74
Cherry-picked-from: @143e593ab8
Cherry-picked-from: @4da617e178
Cherry-picked-from: @904db27019
Cherry-picked-from: @1d986f1c01
Cherry-picked-from: @445ff0242e
Cherry-picked-from: @eece586747
Cherry-picked-from: @268e036172
Cherry-picked-from: @7332e6d609
Cherry-picked-from: @9cd54ea882
Cherry-picked-from: @bf89947a8e
Cherry-picked-from: @d83491e751
Cherry-picked-from: @319766639a
Cherry-picked-from: @2622d2453b
Cherry-picked-from: @9692dc7668
Cherry-picked-from: @7fd4dea1af
Cherry-picked-from: @21d1032ca4
Cherry-picked-from: @fd2b06d463
Cherry-picked-from: @300a093121
Cherry-picked-from: @2c8f31135b
Cherry-picked-from: @589aca0e6d
Cherry-picked-from: @1c7ca391a8
Cherry-picked-from: @01e4845f6d
Cherry-picked-from: @212afb6950
Cherry-picked-from: @92191fcd68
Cherry-picked-from: @86a3149b2e
Cherry-picked-from: @ee6bdb3bab
Cherry-picked-from: @ddcaec89e9
Cherry-picked-from: @d5bffcdeab
Cherry-picked-from: @52e2a7747a
Cherry-picked-from: @35aafd7ca8
Cherry-picked-from: @91b701e183
Cherry-picked-from: @d96069f0df
Cherry-picked-from: @2649c03cdb
Cherry-picked-from: @d4f535b203
Cherry-picked-from: @d5b3f2ed71
Cherry-picked-from: @9bbdb5ca94
Cherry-picked-from: @b2e21e3792
Cherry-picked-from: @8661c271e9
Cherry-picked-from: @4dd4e36450
Cherry-picked-from: @f12cd92bb3
Cherry-picked-from: @fed24a1311
Cherry-picked-from: @bcbf429d6b
Cherry-picked-from: @87ad1ce9b1
Cherry-picked-from: @c80da4e72f
Cherry-picked-from: @b14a5c6713
Cherry-picked-from: @268a8592de
Cherry-picked-from: @e951a42bcb
Cherry-picked-from: @72ba05504e
Cherry-picked-from: @c25e46a433
Cherry-picked-from: @88244c0942
Cherry-picked-from: @f36d8c09f1
Cherry-picked-from: @de3e6a8c5b
Cherry-picked-from: @ddeb423944
Cherry-picked-from: @0068f55dd8
Cherry-picked-from: @f906bf58db
Cherry-picked-from: @d6d01f853f
Cherry-picked-from: @4fb3b88e57
Cherry-picked-from: @296a106f49
Cherry-picked-from: @c8439f6587
Cherry-picked-from: @23c7fc745f
Cherry-picked-from: @b858d6c3a9
Cherry-picked-from: @7dc447f79f
Cherry-picked-from: @6b14e6b55b
Cherry-picked-from: @08da1b47ba
Cherry-picked-from: @21fa50f564
Cherry-picked-from: @3e2c776aaf
Cherry-picked-from: @42613b9baa
Cherry-picked-from: @ff2368af57
Cherry-picked-from: @fb9984a774
Cherry-picked-from: @ec3c20d96d
Cherry-picked-from: @496ca3a637
Cherry-picked-from: @0979264ed5
Cherry-picked-from: @a60a4b4b5e
Cherry-picked-from: @433e65711f
Cherry-picked-from: @42efd98ff8
Cherry-picked-from: @2201d533fd
Cherry-picked-from: @17c954c46e
Cherry-picked-from: @0f290fe6d6
Cherry-picked-from: @255414032f
Cherry-picked-from: @f803215474
Cherry-picked-from: @fd07132389
Cherry-picked-from: @c52f23f794
Cherry-picked-from: @7509c4a057
Cherry-picked-from: @4656317770
Cherry-picked-from: @bffce8ea4f
Cherry-picked-from: @0c8ea8d987
Cherry-picked-from: @4e872521f0
Cherry-picked-from: @61d219cb39
Cherry-picked-from: @6472949f25
Cherry-picked-from: @fc2b796f02
Cherry-picked-from: @70d7a0854c
@alexey-pelykh alexey-pelykh merged commit b9747cd into main Apr 18, 2026
12 checks passed
@alexey-pelykh alexey-pelykh deleted the fork-sync-v2026.3.12 branch April 18, 2026 06:56
alexey-pelykh added a commit that referenced this pull request Apr 18, 2026
B8 DIFF-SYNC (#2395) inadvertently re-introduced upstream's strict
`appcast.xml contains no <item> entries` validation, breaking the
fork's publish-next workflow.

Fork has a stub empty appcast.xml because macOS updates aren't
published yet (per #2119, #6d51373c0e). The upstream validator in
v2026.3.12 restored the strict check that was previously relaxed.

Reverts just the zero-items error line from scripts/release-check.ts;
preserves all other upstream improvements to the validator (new
plugin-sdk required paths, collectForbiddenPackPaths extraction).

Test: release-check.test.ts 9/9 pass.
alexey-pelykh added a commit that referenced this pull request Apr 18, 2026
B8 DIFF-SYNC (#2395) inadvertently re-introduced upstream's strict
`appcast.xml contains no <item> entries` validation, breaking the
fork's publish-next workflow.

Fork has a stub empty appcast.xml because macOS updates aren't
published yet (per #2119, #6d51373c0e). The upstream validator in
v2026.3.12 restored the strict check that was previously relaxed.

Reverts just the zero-items error line from scripts/release-check.ts;
preserves all other upstream improvements to the validator (new
plugin-sdk required paths, collectForbiddenPackPaths extraction).

Test: release-check.test.ts 9/9 pass.
alexey-pelykh added a commit that referenced this pull request Apr 18, 2026
B8 DIFF-SYNC (#2395) introduced two publish-next regressions:

1. scripts/release-check.ts required plugin-sdk build outputs for 5
   gutted providers (google-gemini-cli-auth, memory-core, memory-lancedb,
   minimax-portal-auth, qwen-portal-auth). Fork doesn't build these —
   the Middleware Boundary excludes LLM provider auth and memory
   subsystems. Remove 10 required-path entries (.js + .d.ts each).

2. 6 extension package.json files (googlechat, matrix, msteams, nostr,
   tlon, zalouser) had stale rootDependencyMirrorAllowlist entries
   pointing to root deps that ARE present. The validator enforces
   allowlist == missing-in-root; fork's root has the mirrors so
   allowlist must be empty. Sync all 6 extensions to match actual
   missing-in-root (which is [] for all).

Test: release-check.test.ts 9/9 pass.
alexey-pelykh added a commit that referenced this pull request Apr 18, 2026
…2397)

B8 DIFF-SYNC (#2395) introduced two publish-next regressions:

1. scripts/release-check.ts required plugin-sdk build outputs for 5
   gutted providers (google-gemini-cli-auth, memory-core, memory-lancedb,
   minimax-portal-auth, qwen-portal-auth). Fork doesn't build these —
   the Middleware Boundary excludes LLM provider auth and memory
   subsystems. Remove 10 required-path entries (.js + .d.ts each).

2. 6 extension package.json files (googlechat, matrix, msteams, nostr,
   tlon, zalouser) had stale rootDependencyMirrorAllowlist entries
   pointing to root deps that ARE present. The validator enforces
   allowlist == missing-in-root; fork's root has the mirrors so
   allowlist must be empty. Sync all 6 extensions to match actual
   missing-in-root (which is [] for all).

Test: release-check.test.ts 9/9 pass.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant