Skip to content

chore(deps): refresh fixtures and enforce inspector smoke checks - #295

Draft
steipete wants to merge 2 commits into
mainfrom
chore/deps-refresh-20260830
Draft

steipete wants to merge 2 commits into
mainfrom
chore/deps-refresh-20260830

Conversation

@steipete

@steipete steipete commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

Refreshes stale fixture package pins and the inspector dependency, and fixes the synthetic probe planner's missing classification for widget presenter descriptors. This is a draft: required CI cannot be declared green while the upstream blockers below remain.

Why This Change Was Made

  • Update the published inspector from 0.3.21 to 0.3.23 and its source pin to the v0.3.23 tag commit 19512a12323eab2fff783820ffd20c3c04040964. The release fixes archive-extraction lifetime and bundled-source scanner memory use.
  • Promote 22 official fixture pins to stable 2026.8.1 and regenerate locks with npm. No new direct dependencies or major-version upgrades. Refresh existing minor/patch override pins, including Axios 1.15.2 → 1.20.0, qs → 6.16.0, ws → 8.21.3, protobufjs 7 → 7.6.6, and the existing OpenTelemetry/Anthropic SDK overrides.
  • Classify registerWidgetPresenter as descriptor metadata, like other provider registrars; channel presentation itself still needs runtime context.
  • Forward the smoke wrapper's --check flag so reports containing breakages produce a nonzero command exit, with a regression test for both reporting and check modes.
  • Preserve host-linked OpenClaw peers, the deliberately promoted host source pin, historical eval targets, and external Git fixture source ownership.

Related #294: the inspector bump overlaps that existing PR. Coordinate the two before landing. Existing Git fixture update PRs were not merged or superseded.

User Impact

The inspector uses bounded memory for bundled sources, fixture fallback pins follow the current stable release, and widget presenter metadata no longer causes an unclassified synthetic-plan failure.

Dependency Diff

Package Before After
@openclaw/brave-plugin 2026.8.1-beta.3 2026.8.1
@openclaw/codex 2026.8.1-beta.3 2026.8.1
@openclaw/diagnostics-otel 2026.7.1 2026.8.1
@openclaw/diagnostics-prometheus 2026.8.1-beta.3 2026.8.1
@openclaw/diffs 2026.8.1-beta.3 2026.8.1
@openclaw/discord 2026.7.1 2026.8.1
@openclaw/feishu 2026.7.1 2026.8.1
@openclaw/google-meet 2026.8.1-beta.3 2026.8.1
@openclaw/lobster 2026.7.1 2026.8.1
@openclaw/matrix 2026.7.1 2026.8.1
@openclaw/mattermost 2026.7.1 2026.8.1
@openclaw/memory-lancedb 2026.8.1-beta.3 2026.8.1
@openclaw/msteams 2026.7.1 2026.8.1
@openclaw/nextcloud-talk 2026.7.1 2026.8.1
@openclaw/nostr 2026.7.1 2026.8.1
@openclaw/synology-chat 2026.7.1 2026.8.1
@openclaw/tlon 2026.7.1 2026.8.1
@openclaw/twitch 2026.7.1 2026.8.1
@openclaw/voice-call 2026.7.1 2026.8.1
@openclaw/whatsapp 2026.8.1-beta.3 2026.8.1
@openclaw/zalo 2026.7.1 2026.8.1
@openclaw/zalouser 2026.7.1 2026.8.1

GitHub Actions references and pnpm 11.24.0 were already current. Teams now pins the same 2026.8.1 artifact materialized by the configured latest tag; its compiled-call inspection failure remains explicit. QQbot's retained beta pin is newer than its legacy package's latest tag; migrating its package identity is covered by #287 and is outside this refresh's no-new-dependencies constraint.

Evidence

Toolchain: Node 22.23.2 and npm 10.9.9, matching the required CI runtime family. This repository runs JavaScript directly and has no separate build target.

The initial npm test stopped before tests when Zalouser extraction exceeded the local 120-second tar timeout. The remaining fixtures were materialized with CRABPOT_GIT_TIMEOUT_MS=600000 (local only; no committed timeout or CI change), then the complete test runner was executed:

CRABPOT_TEST_OPENCLAW_PATH=.crabpot/openclaw node --test --test-concurrency=1 test/*.test.mjs
# tests 191
# pass 188
# fail 3
# skipped 0

All three failures are the existing Teams discovery issue: contract coverage, fixture inspection, and compatibility report classification. The widget-probe failure is gone. The five focused inspector pin/CLI tests, including the new failure-exit regression, pass.

Live CLI integration against the exact promoted OpenClaw checkout:

CRABPOT_PLUGIN_INSPECTOR_CLI=source node scripts/check-generated-surface-fixture.mjs --check --openclaw .crabpot/openclaw
generated surface: PASS (0 static missing, 0 runtime missing)

node scripts/check-generated-surface-fixture.mjs --check --openclaw .crabpot/openclaw
generated surface: PASS (0 static missing, 0 runtime missing)

Full real-fixture reports in both dependency modes now return the correct failure exit:

CRABPOT_PLUGIN_INSPECTOR_CLI=source npm run plugin-inspector:smoke -- --out .crabpot/deps-refresh/source-smoke-report
Status: FAIL
Fixtures: 60
Breakages: 1
source smoke exit: 1

npm run plugin-inspector:smoke -- --out .crabpot/deps-refresh/package-smoke-report
Status: FAIL
Fixtures: 60
Breakages: 1
package smoke exit: 1

Both report msteams: missing registrations: registerChannel. Before the wrapper repair, both printed the same failure but returned exit 0 because --check was dropped.

The override follow-up also installs the actual Teams dependency graph and exercises its Axios package against a local HTTP server:

npm --prefix plugins/msteams ci --ignore-scripts --no-audit --no-fund
added 146 packages in 2m

node .crabpot/deps-refresh/axios-live-proof.mjs
axios 1.20.0: HTTP 200 {"fixture":"msteams","proof":"local-http"}

node --test test/fixture-security.test.mjs
# tests 3
# pass 3
# fail 0

The HTTP probe creates a loopback server, requests a JSON response through the installed Axios client, and asserts the status and response body. The full 191-test run above precedes this override-only follow-up; the focused security tests and real install/HTTP check validate that delta. Codex autoreview also reviewed the follow-up cleanly at P0.

The static compatibility, capture, synthetic, cold-import, workspace, platform, and generated-surface reports were regenerated. The candidate retains one hard fixture breakage. npm run check:contracts and node scripts/sync-fixtures.mjs --check pass.

The final committed-lock audit uses the repository's existing classifier and finds two high entries. The first PR CI run additionally caught Teams' stale Axios override; refreshing it to 1.20.0 removes that third gate finding. A normal repair attempt preserves the affected dependency range:

npm --prefix plugins/memory-tencentdb audit fix --package-lock-only --ignore-scripts --no-fund
25 vulnerabilities (23 moderate, 2 high)

No assertion, fixture expectation, security finding, or job was disabled. Codex autoreview completed all 19 bounded chunks with no accepted/actionable P0 findings. Two normal-tier attempts stopped on model capacity; the same model completed on its supported priority tier. This review result does not imply that the documented test or audit gates pass.

CI Reasoning and Remaining Blockers

The latest observed required default-branch Check run passed. The reported red state is the scheduled development Track Dashboard, which failed four tests: three derive from missed Teams channel registration and one from widget presenter classification. This patch fixes the widget classification; it preserves the Teams expectation.

The actual @openclaw/msteams@2026.8.1 archive calls (0, require("openclaw/plugin-sdk/channel-entry-contract").defineBundledChannelEntry)({...}) in dist/index.cjs. Inspector 0.3.23 only recognizes the helper immediately followed by an opening parenthesis, so it returns no registrations for this valid compiled call. The standalone fixture CLI reproduces the missing registerChannel failure with host analysis disabled. Fix and publish the parser in plugin-inspector before landing this refresh; do not weaken the fixture assertion or rewrite upstream plugin source in Crabpot.

The audit also finds two high-severity OpenTelemetry entries in TencentDB Memory. The published @tencentdb-agent-memory/memory-tencentdb@1.0.1 requires @opentelemetry/sdk-node ^0.218.0; normal npm audit fix retains the affected graph. The original HEAD lockfile produces the same two findings today. The Jaeger advisory requires propagator 2.9.0 or newer. Request an upstream package update with a supported patched SDK range; the audit gate is unchanged.

Additional CI Evidence and Upgrade Boundaries

The first PR Check run completed with failures in security, all four static lanes, and 5 of 24 isolated fixture lanes. The static failures reproduce the same three Teams assertions on Ubuntu, macOS, Windows, and the container. The follow-up override refresh repairs the Axios security finding; the two TencentDB entries remain.

The isolated failures are distinct: brave-plugin, codex, diffs, and discord attempt to capture missing index.ts source entries from npm archives. The inspector can assign sdk-alias-required ahead of the missing-entrypoint state, so the executor's existing missing-entrypoint guard does not apply. The captured Codex execution artifact confirms that status and path. Teams' compiled CommonJS entry additionally fails to resolve openclaw/dist/plugin-sdk/channel-entry-contract.js through the mock capture runner. Fix entrypoint readiness precedence and CommonJS SDK capture at the inspector ownership boundary, then rerun the lanes; do not add policy exemptions or silently drop failing probes here.

Major overrides retained for upstream compatibility review: fast-uri 3 → 4, protobufjs 7 → 8, uuid 11 → 14, basic-ftp 5 → 6, linkify-it 5 → 6, markdown-it 14 → 15, undici 7 → 8, form-data 2 → 4, tough-cookie 4 → 6, conf 10 → 15, and cos-nodejs-sdk-v5 2 beta → 3. These overrides affect externally owned plugin consumers, which cannot all be validated while the integration gates are blocked. In particular, uuid 12 removes CommonJS support; protobufjs 8 changes edition behavior. Prefer publisher-led consumer migrations over forcing these majors across the fixture graphs. No version downgrade to an older stable tag was made.

The final-head Check run completed failure at e8e74d62af7c1a3fded4b4088412905c7466c019: all four static lanes reproduce exactly the three Teams assertions; 22 of 27 isolated lanes pass and the same five fail. Its security log confirms the Axios finding is gone and only the two TencentDB OpenTelemetry entries remain. No new failure class appeared after the override refresh.

Fixture Impact

  • Updates fixture npm pins and locks
  • Updates submodule pins
  • Changes synthetic probe classification

Notes

No production services, credentials, fixture source repositories, releases, tags, or merges were changed. This PR must remain a draft until the blockers and required checks are resolved.

@clawsweeper

clawsweeper Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

@clawsweeper clawsweeper Bot added merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. P2 Normal priority bug or improvement with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Aug 31, 2026
@clawsweeper

clawsweeper Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed August 31, 2026, 4:23 AM ET / 08:23 UTC.

ClawSweeper review

What this changes

The PR refreshes 22 plugin-fixture package pins and reports, updates plugin-inspector to 0.3.23, classifies widget presenters as metadata, and makes inspector smoke checks return failing exit codes.

Regression provenance

Possible regression — probable (reviewed change; failure trace). No predecessor PR is attributed.

Merge readiness

⚠️ Needs maintainer review before merge - 5 items remain

Keep this draft open: the promoted inspector release leaves the refreshed fixtures unable to satisfy required checks, and the security gate still has two high-severity inherited dependency findings.

Priority: P2
Reviewed head: e8e74d62af7c1a3fded4b4088412905c7466c019

Review scores

Measure Result What it means
Overall readiness 🦐 gold shrimp (3/6) The smoke-exit behavior has strong real-run evidence, but the promoted baseline is not ready while required fixture and security gates remain blocked.
Proof confidence 🦞 diamond lobster (5/6) Sufficient (terminal): The PR body supplies after-change terminal traces for the actual source-mode and published-package smoke commands over 60 fixtures, each showing that a reported breakage now exits nonzero; that proves the changed wrapper behavior, although it also exposes the unresolved fixture failures.
Patch quality 🦐 gold shrimp (3/6) Security review found an item that needs attention.

Verification

Check Result Evidence
Real behavior Verified Sufficient (terminal): The PR body supplies after-change terminal traces for the actual source-mode and published-package smoke commands over 60 fixtures, each showing that a reported breakage now exits nonzero; that proves the changed wrapper behavior, although it also exposes the unresolved fixture failures.
Evidence reviewed 6 items Introduced inspector pin: The branch changes both source-mode and package-mode inspector selection to 0.3.23; this is the introduced dependency whose reported parser/readiness gaps affect the refreshed fixtures.
Required Teams contract: The configured Microsoft Teams fixture requires a channel registration, and the fixture-inspection test accepts the channel-entry factories only when inspection discovers them.
Recorded failing result: The generated branch report records the Teams fixture as blocking because registerChannel was not discovered.
Findings 1 actionable finding [P1] Pin an inspector release that handles the refreshed entrypoints
Security Needs attention Resolve retained TencentDB OpenTelemetry findings: The changed fixture lock continues to resolve the affected OpenTelemetry 0.218.0 graph; the supplied evidence says the upstream package range prevents a compatible lock-only update.

How this fits together

Crabpot materializes configured OpenClaw plugin fixtures and passes them to plugin-inspector for compatibility reports. The smoke wrapper and static suite consume those reports to make CI fail on fixture breakages.

flowchart LR
A[Fixture manifest] --> B[Fixture packages]
B --> C[Plugin inspector]
C --> D[Smoke wrapper]
D --> E[Static suite]
E --> F[Reports and CI]
Loading

Before merge

  • Pin an inspector release that handles the refreshed entrypoints (P1) - The 0.3.23 pin still misses the valid compiled Teams channel-entry form and misorders readiness for several refreshed package entrypoints. The required registerChannel contract therefore fails, and forwarding --check makes the default track fail; wait for the upstream parser/readiness repair and repin before merging.
  • Resolve security concern: Resolve retained TencentDB OpenTelemetry findings - The changed fixture lock continues to resolve the affected OpenTelemetry 0.218.0 graph; the supplied evidence says the upstream package range prevents a compatible lock-only update.
  • Resolve merge risk (P1) - Required static checks and five isolated fixture lanes remain failing because the pinned inspector does not yet handle the refreshed compiled entrypoint forms.
  • Resolve merge risk (P1) - The fixture-security gate retains two high-severity OpenTelemetry findings in the TencentDB fixture; its upstream dependency range prevents a safe lock-only repair.
  • Complete next step (P2) - The remaining fixes require upstream inspector and dependency releases rather than a safe repository-local repair on this branch.

Findings

  • [P1] Pin an inspector release that handles the refreshed entrypoints — scripts/plugin-inspector-source.mjs:8
  • [high] Resolve retained TencentDB OpenTelemetry findings — plugins/memory-tencentdb/package-lock.json:891
Agent review details

Security

Needs attention: The PR does not introduce the reported OpenTelemetry findings, but its changed TencentDB fixture lock retains two high-severity dependency findings that currently block the repository security gate.

Review metrics

Metric Value Why it matters
Refresh scope 74 files; +25,789 / -23,142 lines The broad lockfile and generated-report refresh makes a fully passing fixture matrix necessary before merge.
Known required failures 4 static lanes and 5 isolated fixture lanes failing These failures prevent the new fixture baseline from serving as a reliable compatibility signal.

Merge-risk options

Maintainer options:

  1. Update after the inspector repair (recommended)
    Repin to an inspector release that recognizes the refreshed compiled entries, then rerun the required default track and isolated fixture lanes.
  2. Defer the refresh
    Keep this draft paused until both the inspector and TencentDB upstream dependency blockers have supported releases.

Technical review

Best possible solution:

Wait for an inspector release that recognizes the compiled Teams entrypoint and preserves missing-entrypoint readiness precedence, then repin it and rerun the complete default track; land only after the TencentDB upstream security range is also resolved.

Do we have a high-confidence way to reproduce the issue?

Yes. The branch's generated report and supplied required-check results consistently reproduce the missing Teams registration after the refreshed fixture and inspector pins.

Is this the best way to solve the issue?

No. Forwarding --check is correct, but promoting the fixtures before the inspector can classify their entrypoints makes the required compatibility suite unusable.

Full review comments:

  • [P1] Pin an inspector release that handles the refreshed entrypoints — scripts/plugin-inspector-source.mjs:8
    The 0.3.23 pin still misses the valid compiled Teams channel-entry form and misorders readiness for several refreshed package entrypoints. The required registerChannel contract therefore fails, and forwarding --check makes the default track fail; wait for the upstream parser/readiness repair and repin before merging.
    Confidence: 0.98

Overall correctness: patch is incorrect
Overall confidence: 0.98

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against ac4feae222ee.

Labels

Label justifications:

  • P2: This is a useful compatibility-fixture refresh, but its current failures are contained to repository validation rather than an active end-user outage.
  • merge-risk: 🚨 compatibility: Promoting 22 fixture package versions changes the compatibility baseline while several refreshed entrypoints are not yet classified correctly.
  • merge-risk: 🚨 automation: The PR intentionally changes smoke checks from reporting a breakage successfully to failing the command, and the resulting CI path is currently red.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (terminal): The PR body supplies after-change terminal traces for the actual source-mode and published-package smoke commands over 60 fixtures, each showing that a reported breakage now exits nonzero; that proves the changed wrapper behavior, although it also exposes the unresolved fixture failures.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body supplies after-change terminal traces for the actual source-mode and published-package smoke commands over 60 fixtures, each showing that a reported breakage now exits nonzero; that proves the changed wrapper behavior, although it also exposes the unresolved fixture failures.

Evidence

Security concerns:

  • [high] Resolve retained TencentDB OpenTelemetry findings — plugins/memory-tencentdb/package-lock.json:891
    The changed fixture lock continues to resolve the affected OpenTelemetry 0.218.0 graph; the supplied evidence says the upstream package range prevents a compatible lock-only update.
    Confidence: 0.9

What I checked:

  • Introduced inspector pin: The branch changes both source-mode and package-mode inspector selection to 0.3.23; this is the introduced dependency whose reported parser/readiness gaps affect the refreshed fixtures. (scripts/plugin-inspector-source.mjs:8, e8e74d62af7c)
  • Required Teams contract: The configured Microsoft Teams fixture requires a channel registration, and the fixture-inspection test accepts the channel-entry factories only when inspection discovers them. (crabpot.config.json:546, e8e74d62af7c)
  • Recorded failing result: The generated branch report records the Teams fixture as blocking because registerChannel was not discovered. (reports/crabpot-report.md:3215, e8e74d62af7c)
  • Automation behavior changed: The introduced wrapper now forwards --check, so a fixture breakage becomes a nonzero smoke exit; the repository test covers both report-only and check modes. (scripts/run-plugin-inspector-smoke.mjs:15, e8e74d62af7c)
  • Prior behavior provenance: Current-main history shows the smoke path was deliberately made report-only in commit f054ec9; the PR reverses that behavior only after adding a check-mode regression test. (scripts/run-plugin-inspector-smoke.mjs:14, f054ec93d1f1)
  • Security-gate context: The refreshed TencentDB lock still resolves OpenTelemetry packages at 0.218.0. The PR body reports that these two high findings also exist on its starting lockfile, so this is a retained gate blocker rather than an introduced vulnerability. (plugins/memory-tencentdb/package-lock.json:891, e8e74d62af7c)

Likely related people:

  • Patrick Erichsen: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)
  • Vincent Koc: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)
  • steipete: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)

Rank-up moves

Optional improvements that raise the rating; they are not merge blockers.

  • Repin after the upstream inspector recognizes the Teams compiled entrypoint and preserves missing-entrypoint precedence, then show a passing required default track.
  • Obtain an upstream-compatible TencentDB dependency update that clears the two remaining high-severity findings.

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (2 earlier review cycles)
  • reviewed 2026-08-31T07:53:45.420Z sha 372f721 :: found issues before merge. :: [P1] Wait for a Teams-compatible inspector release
  • reviewed 2026-08-31T08:11:27.734Z sha e8e74d6 :: found issues before merge. :: [P1] Pin an inspector release that recognizes the Teams CJS entry

@clawsweeper clawsweeper Bot removed the merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. label Aug 31, 2026
@clawsweeper clawsweeper Bot mentioned this pull request Sep 9, 2026
8 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P2 Normal priority bug or improvement with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant