Skip to content

Security & quality hardening for 1.5.4 (P0-01…P0-13) - #39

Merged
KNIHAL merged 18 commits into
masterfrom
security/hardening-1.5.4
Nov 3, 2026
Merged

KNIHAL merged 18 commits into
masterfrom
security/hardening-1.5.4

Conversation

@KNIHAL

@KNIHAL KNIHAL commented Nov 3, 2026

Copy link
Copy Markdown
Owner

What

P0 hardening before 1.5.4 and the 10 Nov launch:

  • Dependencies: simple-git 4, MCP SDK 1.32, zod 4.6 (npm audit --omit=dev clean)
  • Windows nested cmd.exe fix for npm install (issue npm install fails on packages with postinstall scripts: 'node' not recognized in nested cmd.exe #2)
  • Credential redaction in logs and errors; Docker Compose shell injection fix; http_check SSRF guard; consistent path protection (real-path, macOS/Linux/Windows)
  • CI: Node 22/24, npm ci, audit, Dependabot, package-contents and docs-drift checks
  • Permission levels raised for risky tools, per-action levels for git_stash/git_tag, missing level is a test failure
  • MCP tool annotations derived from permission levels; stdout is JSON-RPC only (test)
  • Input fuzz helper and boundary tests
  • 1.5.0 upgrade fixture test, corrupt db/.env/secrets/config tests; clearer corrupt-db error
  • edit_file matches CRLF files; github_list_issues state=all pages past PRs
  • homepage/bugs, provenance publish workflow, release metadata test; version bump to 1.5.4

Why

Fixes issues from the external audit and QA findings before the launch.

Tests

77 files / 1264 tests pass locally on Windows (Node 24).

Notes

  • The docs-drift job checks out the docs repo master. The docs for P0-06..13 are on KNIHAL/causly-agent-environment branch docs/hardening-1.5.4, so that job fails until the docs are merged.
  • Not yet done: MCP Inspector run, manual Windows tarball check, npm publish.

KNIHAL added 17 commits October 31, 2026 21:42
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01KXDWKN2tz335nxPSo4Sv2b
…-RPC test

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01KXDWKJrAj1tYcVEYYyGvEv
…st PRs

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01KXDWKJrAj1tYcVEYYyGvEv
…-db error

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01KXDWKJrAj1tYcVEYYyGvEv
…nstall test)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01KXDWKJrAj1tYcVEYYyGvEv
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-03T11:27:29.659770Z b924f5c PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b924f5cab8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tools/pathRules.js
// Causly's own data: ~/.causly or CAUSLY_HOME (API keys, secrets store, database), a custom
// CAUSLY_ENV_FILE and the .env next to the code (a git checkout).
function causlyOwnPaths(env) {
return [env.CAUSLY_HOME, env.CAUSLY_ENV_FILE, path.join(PACKAGE_ROOT, ".env")].filter(Boolean);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Include the checkout secrets store in protected paths

When the server runs from a source checkout, dataDir() places the default secrets store at <PACKAGE_ROOT>/.causly-secrets.enc, but this list only protects CAUSLY_HOME, CAUSLY_ENV_FILE, and <PACKAGE_ROOT>/.env. The file tools can therefore still overwrite or delete the encrypted store, potentially destroying saved secrets. Include the actual default store path in the protected paths.

Useful? React with 👍 / 👎.

Comment thread .github/workflows/ci.yml
uses: actions/checkout@v4
with:
repository: KNIHAL/causly-agent-environment
ref: master

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Point docs drift at the revision containing the updates

While the P0-06..13 documentation updates remain only on the docs branch, this job checks out master and then runs tests/docsDrift.test.js with CAUSLY_REQUIRE_DOCS=1. That makes the check compare the updated manifest and permission levels against the stale docs revision, so the new docs-drift job fails until the docs changes are merged. Point it at the revision containing those updates, or land the docs changes first.

Useful? React with 👍 / 👎.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01KXDWKJrAj1tYcVEYYyGvEv
@KNIHAL
KNIHAL merged commit 8b4208d into master Nov 3, 2026
11 checks passed
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