Files
clawsec/wiki/compatibility-report.md
T
davida-ps fefecaa60a feat(wiki): add full in-app wiki browser and llms index (#80)
* feat(wiki): add full in-app wiki browser and llms index

* feat(wiki): auto-generate per-page llms exports

* vuln package

* fix(wiki): guard malformed route decoding

* fix(wiki): preserve markdown anchor fragments across page links

* refactor(markdown): share default render components

* fix(wiki): block unsafe markdown link schemes

* fix(wiki): block unsafe markdown image schemes

* docs(wiki): migrate root docs into wiki pages

* chore(wiki): de-track generated llms exports

* chore(wiki): ignore generated public wiki artifacts

* fix(wiki): align llms urls with per-page endpoint pattern

* fix(wiki): derive llms index from wiki index page

* refactor(markdown): share frontmatter and title helpers

* refactor(wiki): share route and llms path mapping

* ci(pages): add pr verify workflow and tighten deploy triggers
2026-02-26 10:43:36 +02:00

6.9 KiB

Cross-Platform Compatibility Report

1) Executive Summary

Overall status by OS

  • Linux: Good, primary workflows validated; still some POSIX-only scripts/docs.
  • macOS: Good, with caveats around POSIX tool availability and Homebrew-specific assumptions.
  • Windows: Partial, Node/Python pieces work, but many shell-first install/release workflows still require WSL/Git Bash.

Highest-risk incompatibilities

  1. (Fixed) Literal $HOME path creation risk in audit watchdog cron setup payload generation.
  2. (Fixed) Path env vars accepted as raw strings in multiple Node entrypoints without expansion/validation.
  3. (Open) Large portions of manual install/release guidance remain POSIX-only (bash, jq, curl, unzip, chmod, find -exec).

SKILLS install path-expansion root cause

Root cause was a combination of:

  • shell-side literal env assignment (for example, PROMPTSEC_INSTALL_DIR='$HOME/...')
  • Node scripts not expanding home tokens
  • cron payload construction escaping $ (\$HOME), forcing literal interpretation in downstream shell execution

This could produce paths like ~/.openclaw/workspace/$HOME/....


2) Findings Table

ID Severity OS Impact Component Description Proposed Fix Status
CP-001 Blocker Linux/macOS/Windows skills/openclaw-audit-watchdog/scripts/setup_cron.mjs Literal $HOME could be propagated into cron payload, creating wrong runtime paths. Expand/normalize home tokens and reject unresolved escaped tokens before job creation. Fixed
CP-002 High Linux/macOS/Windows skills/clawsec-suite/hooks/.../handler.ts, .../scripts/guarded_skill_install.mjs, .../lib/suppression.mjs, skills/openclaw-audit-watchdog/scripts/load_suppression_config.mjs Env path vars treated as opaque strings; ~, $HOME not consistently handled. Shared/consistent path resolution + fail-fast validation. Fixed
CP-003 Medium macOS/Windows skills/openclaw-audit-watchdog/test/render_report_suppression.test.mjs, .../scripts/codex_review.sh Hardcoded /opt/homebrew and which assumptions. Use process.execPath for tests; PATH-first Codex discovery. Fixed
CP-004 Medium Windows (+ CI) repo-wide line endings Missing .gitattributes could introduce CRLF script breakage (env bash^M). Add .gitattributes with LF enforcement for scripts/config/text. Fixed
CP-005 Medium macOS/Windows .github/workflows/ci.yml TS/lint/build checks were Linux-only. Add OS matrix for Node checks (ubuntu, macos, windows). Fixed
CP-006 High Windows Multiple SKILL docs and shell scripts Install/maintenance flow is still heavily POSIX-shell based. Add PowerShell equivalents or Node wrappers for critical flows. Open
CP-007 Medium Linux/macOS/Windows skills/soul-guardian/scripts/soul_guardian.py Path(...).expanduser() handles ~ but not $HOME/%USERPROFILE%. Add explicit env-token expansion + validation for --state-dir. Open
CP-008 Medium Windows scripts/release-skill.sh, scripts/populate-local-*.sh GNU/BSD shell toolchain assumptions block native Windows usage. Provide cross-platform Node/Python replacements or PowerShell equivalents. Open
CP-009 Low Windows documentation + scripts using chmod 600/644 POSIX permission semantics are partial/non-portable on Windows. Document best-effort behavior and Windows ACL alternatives. Open
CP-010 Low macOS/Windows CI non-Node jobs Shell/Python/security scan jobs remain Ubuntu-only. Add scoped matrix or dedicated non-Linux smoke jobs where practical. Open

3) Detailed Findings

Paths

  • Fixed: centralized home-token expansion and suspicious token rejection for critical runtime/install path env vars.
  • Fixed: path normalization before filesystem access and before cron payload construction.
  • Open: soul_guardian.py still expands only ~, not $HOME/Windows env tokens.

Shell / Command Dependencies

  • Confirmed extensive POSIX dependencies (bash, curl, jq, mktemp, chmod, find, unzip, openssl, shasum/sha256sum).
  • Fixed minor hardcoded binary path assumptions.
  • Open: no full native PowerShell parity for core shell workflows.

Permissions / Filesystem Semantics

  • Confirmed many scripts rely on POSIX permission commands.
  • Existing state.ts already handles chmod failures on unsupported filesystems.
  • Open: documentation still mostly assumes POSIX permissions.

Line Endings

  • Fixed by adding .gitattributes with LF rules for scripts and key text/config files.

Runtime Dependencies

  • Node scripts generally portable.
  • Python utilities are portable.
  • OpenSSL usage in documentation/workflows remains shell/toolchain dependent.

CI / Automation

  • Fixed: TS/lint/build matrix now runs on Linux/macOS/Windows.
  • Open: remaining security/shell/python jobs are Linux-only by design.

4) SKILLS Install Investigation

Reproduction (pre-fix)

  1. Set install dir with literal token (common quoting mistake):
    • export PROMPTSEC_INSTALL_DIR='$HOME/.config/security-checkup'
  2. Run:
    • node skills/openclaw-audit-watchdog/scripts/setup_cron.mjs
  3. The generated payload command used escaped $ in cd path, resulting in literal token usage at execution time (cd "\$HOME/..."), which can resolve under current working directory (for example, ~/.openclaw/workspace/$HOME/...).

Root cause analysis

  • POSIX single quotes prevent variable expansion.
  • Node does not auto-expand env vars inside strings.
  • Existing payload escaping converted $ to literal in shell command text.

Fix implemented

  • Added explicit path resolution (supports ~, $HOME, ${HOME}, %USERPROFILE%, $env:USERPROFILE) and normalization.
  • Added fail-fast validation for unresolved/escaped home tokens.
  • Applied to watchdog cron setup, watchdog suppression config loader, suite hook handler, suite advisory suppression loader, and suite guarded installer.
  • Added tests covering expansion and escaped-token rejection.

Validation targets

  • bash / zsh: expanded env values and reject literal escaped home tokens.
  • sh (where scripts are invoked through Node entrypoints): same path behavior in Node layer.
  • Windows PowerShell: %USERPROFILE% / $env:USERPROFILE expansion and path normalization validated in Node tests.

Source References

  • .gitattributes
  • .github/workflows/ci.yml
  • skills/clawsec-suite/hooks/clawsec-advisory-guardian/handler.ts
  • skills/clawsec-suite/hooks/clawsec-advisory-guardian/lib/suppression.mjs
  • skills/clawsec-suite/scripts/guarded_skill_install.mjs
  • skills/openclaw-audit-watchdog/scripts/setup_cron.mjs
  • skills/openclaw-audit-watchdog/scripts/load_suppression_config.mjs
  • skills/soul-guardian/scripts/soul_guardian.py
  • scripts/release-skill.sh
  • scripts/populate-local-feed.sh
  • scripts/populate-local-skills.sh
  • wiki/remediation-plan.md
  • wiki/platform-verification.md