Skip to content

test: gate symlink assertions on file symlink capability#95531

Merged
vincentkoc merged 1 commit into
mainfrom
clownfish/symlink-test-repair-autonomous-20260621
Jun 29, 2026
Merged

test: gate symlink assertions on file symlink capability#95531
vincentkoc merged 1 commit into
mainfrom
clownfish/symlink-test-repair-autonomous-20260621

Conversation

@vincentkoc

Copy link
Copy Markdown
Member

What Problem This Solves

Current main skips the QQBot and Zalo symlink safety assertions based on process.platform, so Windows hosts that can create file symlinks do not exercise the assertions, while restricted non-Windows hosts can still fail when symlink creation is unavailable.

This carries forward the narrow test intent from #90223 and #90280 by @aniruddhaadak80, with attribution preserved for both source PRs.

Why This Change Was Made

The replacement keeps the change limited to the two affected test files. It moves file-symlink capability probing out of module import time, gates only the symlink assertions on actual file-symlink capability, keeps QQBot's local it.skipIf(...) convention, and keeps Zalo's existing it.runIf(...) convention.

This also addresses the hydrated Copilot review findings on the source PRs: avoid import-time filesystem side effects, avoid a Windows-only capability gate for QQBot, and avoid switching the Zalo file away from its existing Vitest pattern.

User Impact

No runtime behavior changes. The test suite should exercise symlink rejection wherever the host can create file symlinks and skip only the affected assertions where file symlinks are unavailable.

Evidence

Clownfish 🐠 replacement reef notes:

fish notes: model gpt-5.5, reasoning medium; reviewed against 85e11d6.

@vincentkoc vincentkoc added the clownfish Tracked by Clownfish automation label Jun 21, 2026
@openclaw-barnacle openclaw-barnacle Bot added channel: zalo Channel integration: zalo channel: qqbot size: S maintainer Maintainer-authored PR labels Jun 21, 2026
@clawsweeper

clawsweeper Bot commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 29, 2026, 1:45 AM ET / 05:45 UTC.

Summary
The branch changes QQBot and Zalo symlink rejection tests to create a file symlink inside each test and call Vitest's runtime skip when file symlinks are unavailable.

PR surface: Tests +10. Total +10 across 2 files.

Reproducibility: yes. for the test reachability problem: current main still has a Zalo platform gate and a QQBot import-time capability probe, while PR head checks file-symlink capability inside each affected assertion. I did not run tests because this was a read-only review.

Review metrics: none identified.

Stored data model
Persistent data-model change detected: serialized state: extensions/qqbot/src/engine/utils/file-utils.test.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: canonical
Canonical: #95531
Summary: This PR is the combined maintainer-labeled replacement for the same symlink-test portability work split across the QQBot and Zalo source PRs.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🌊 off-meta tidepool
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • none.

Risk before merge

  • [P1] The current head still had the broader CI workflow in progress at inspection time, so final merge should wait for required checks or a maintainer override.
  • [P1] This PR overlaps the open Zalo-only source PR at test: make zalo token resolver symlink test compatible with Windows #90280; maintainers should land one canonical path and then close or supersede the other.

Maintainer options:

  1. Decide the mitigation before merge
    Land this combined test-only replacement after maintainer and required-check review, then treat the open Zalo-only source PR as superseded if this branch lands.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • No automated repair is indicated; this maintainer-labeled PR needs ordinary maintainer choice against the overlapping Zalo source PR plus final required-check review.

Security
Cleared: The diff is test-only and does not change runtime code, dependency sources, workflows, package metadata, credentials, or supply-chain surfaces.

Review details

Best possible solution:

Land this combined test-only replacement after maintainer and required-check review, then treat the open Zalo-only source PR as superseded if this branch lands.

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

Yes for the test reachability problem: current main still has a Zalo platform gate and a QQBot import-time capability probe, while PR head checks file-symlink capability inside each affected assertion. I did not run tests because this was a read-only review.

Is this the best way to solve the issue?

Yes. The in-test file-symlink probe is the narrow maintainable fix because it tests the exact capability needed, avoids process.platform assumptions, and leaves runtime symlink rejection unchanged.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P3: This is a low-risk test robustness cleanup with no runtime, configuration, dependency, migration, or user-facing behavior change.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The external-contributor proof gate does not apply to this MEMBER-authored, maintainer-labeled test-only replacement; the related source PRs include Windows terminal proof for the same behavior.
Evidence reviewed

PR surface:

Tests +10. Total +10 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 2 35 25 +10
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 35 25 +10

What I checked:

Likely related people:

  • steipete: History shows the secret-file hardening commit that added the Zalo symlink-token assertion and several QQBot file-utils/test refactors in the affected area. (role: feature-history and adjacent area contributor; confidence: high; commits: 201420a7ee91, af954a81d13e, aec24f4599be; files: extensions/zalo/src/token.ts, extensions/zalo/src/token.test.ts, extensions/qqbot/src/utils/file-utils.ts)
  • aniruddhaadak80: Authored the two source PRs that this replacement carries forward: the merged QQBot capability-gate PR and the open Zalo capability-gate PR. (role: source repair contributor; confidence: high; commits: cb7d5a162e24, fb0de0914912; files: extensions/qqbot/src/engine/utils/file-utils.test.ts, extensions/zalo/src/token.test.ts)
  • Sliverp: Git history shows this contributor introduced the QQBot channel and later updated the QQBot media/file-utils area covered by the QQBot half of the test change. (role: QQBot feature-history contributor; confidence: medium; commits: bf6f506dfae6, ddb7a8dd80b8; files: extensions/qqbot, extensions/qqbot/src/utils/file-utils.ts, extensions/qqbot/src/utils/file-utils.test.ts)
  • Takhoffman: Recent Zalo token resolver history includes default-account token behavior and adjacent tests in the same resolver surface. (role: adjacent Zalo token contributor; confidence: medium; commits: 5eb3341db136; files: extensions/zalo/src/token.ts, extensions/zalo/src/token.test.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

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.

How this review workflow works
  • 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.

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. labels Jun 21, 2026
@vincentkoc vincentkoc removed the clownfish Tracked by Clownfish automation label Jun 21, 2026
@vincentkoc

Copy link
Copy Markdown
Member Author

/clownfish rebase

@openclaw-clownfish

Copy link
Copy Markdown
Contributor

Clownfish picked this up and is swimming it through the narrow lane. 🐠

Command: rebase
Action: dispatched cluster-worker.yml for jobs/openclaw/outbox/finalized/symlink-test-repair-autonomous-20260621.md in autonomous mode.
Model: gpt-5.5

I will keep the change narrow and update the PR branch if the repair worker finds a safe fix.

@vincentkoc
vincentkoc force-pushed the clownfish/symlink-test-repair-autonomous-20260621 branch 2 times, most recently from 8bcf5ce to bc8fcfa Compare June 21, 2026 14:04
@vincentkoc
vincentkoc force-pushed the clownfish/symlink-test-repair-autonomous-20260621 branch from bc8fcfa to bc14842 Compare June 29, 2026 05:39
@vincentkoc
vincentkoc merged commit c0ee7a1 into main Jun 29, 2026
88 checks passed
@vincentkoc
vincentkoc deleted the clownfish/symlink-test-repair-autonomous-20260621 branch June 29, 2026 05:50
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 30, 2026
QiuYuang pushed a commit to QiuYuang/openclaw that referenced this pull request Jul 1, 2026
chenyangjun-xy pushed a commit to chenyangjun-xy/openclaw that referenced this pull request Jul 1, 2026
chenyangjun-xy pushed a commit to chenyangjun-xy/openclaw that referenced this pull request Jul 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: qqbot channel: zalo Channel integration: zalo maintainer Maintainer-authored PR P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant