|
| 1 | +# Completion Audit |
| 2 | + |
| 3 | +Last audited: 2026-05-26 |
| 4 | + |
| 5 | +Objective: make the `mautic-control` OpenClaw plugin production-ready for ClawHub deployment, preserving the local Docker stack behavior and identifying exact remaining blockers if public deployment is not possible. |
| 6 | + |
| 7 | +## Result |
| 8 | + |
| 9 | +The plugin package is production-prepped for ClawHub package review and private/internal OpenClaw deployment. Public ClawHub listing remains blocked because the GitHub source repository is private and direct ClawHub GitHub-source dry-run cannot fetch it. |
| 10 | + |
| 11 | +Do not mark public ClawHub deployment complete until one of these is true: |
| 12 | + |
| 13 | +- The repository is made public. |
| 14 | +- ClawHub has an approved private-source review path for `CompleteTech-LLC-AI-Research/openclaw-mautic-plugin`. |
| 15 | + |
| 16 | +## Prompt-To-Artifact Checklist |
| 17 | + |
| 18 | +| Requirement | Evidence | Status | |
| 19 | +| --- | --- | --- | |
| 20 | +| Audit package, manifest, runtime, docs, and stack | `docs/CLAWHUB_READINESS.md`, this audit, repeated `npm`/stack/OpenClaw checks | Complete | |
| 21 | +| Publishable package metadata | `package.json` has scoped name, version, description, license, author, repository, bugs, homepage, keywords, files, OpenClaw compat/build metadata | Complete | |
| 22 | +| Not private-only package posture | `package.json` has `"private": false` | Complete | |
| 23 | +| Source metadata | `package.json.repository`, `package.json.homepage`, `package.json.bugs`; `npm run clawhub:dry-run` supplies source repo/ref/commit | Complete | |
| 24 | +| License, changelog, security policy | `LICENSE`, `CHANGELOG.md`, `SECURITY.md` | Complete | |
| 25 | +| Maintainer/support info | `package.json.author`, `SECURITY.md`, repository issue URL | Complete | |
| 26 | +| Keep sensitive values out of package/docs | Secret scan found only variable names and safety docs, not actual token/password values | Complete | |
| 27 | +| Threat model documented | `SECURITY.md` primary risks and mitigations | Complete | |
| 28 | +| Dangerous capabilities opt-in by default | `openclaw.plugin.json` and `lib/runtime.js` default maintenance, automation, workspace read/write to false | Complete | |
| 29 | +| Preserve local maintenance behavior | local stack bootstrap explicitly sets `allowMaintenanceCommands=true`, `allowAutomationJobCommands=false` | Complete | |
| 30 | +| API path restriction | `assertMauticApiPath` in `lib/runtime.js`; covered by `test/runtime.test.js` | Complete | |
| 31 | +| Workspace path guards | `safeWorkspacePath`, `assertPathWithinRoot`; covered by `test/runtime.test.js` | Complete | |
| 32 | +| Workspace read/write/delete policy | `allowWorkspaceRead`, `allowWorkspaceWrite`; live smoke writes/reads a nested file | Complete | |
| 33 | +| Console command allowlist | hardcoded command list plus capability toggles; covered by unit and live smoke tests | Complete | |
| 34 | +| OpenClaw state no longer on Windows 9p for `/state` | stack uses `openclaw_state:/state`; live stat shows auth/session files mode `600` | Complete | |
| 35 | +| Deep security audit no critical findings | `openclaw security audit --deep --json` reports `critical: 0` | Complete | |
| 36 | +| Required environment/config docs | `README.md` documents Mautic credentials, console token, base URL, console URL, workspace roots, optional env fallbacks | Complete | |
| 37 | +| Console bridge deployment/security docs | `README.md` and `SECURITY.md` document `mautic/console-bridge.php`, token, and private-network requirement | Complete | |
| 38 | +| Tool behavior with/without console bridge | `README.md` states only `mautic_console` requires the bridge | Complete | |
| 39 | +| Unit tests | `test/runtime.test.js`, run by `npm test` | Complete | |
| 40 | +| Live smoke test script | `scripts/live-smoke.mjs`, run by `npm run live:smoke` | Complete | |
| 41 | +| CI workflow | `.github/workflows/ci.yml` runs lint, tests, and package validation | Complete | |
| 42 | +| ClawHub dry-run | `npm run clawhub:dry-run` passes from local folder with source metadata | Complete | |
| 43 | +| Direct GitHub-source ClawHub dry-run | `clawhub package publish CompleteTech-LLC-AI-Research/openclaw-mautic-plugin --dry-run` fails because repo is private | Blocked | |
| 44 | +| Repo clean and pushed | `git status --short --branch` reports `main...origin/main` after latest push | Complete | |
| 45 | + |
| 46 | +## Latest Verification Commands |
| 47 | + |
| 48 | +Run from `/mnt/c/users/timot/documents/projects/docker/mautic-plugin`: |
| 49 | + |
| 50 | +```bash |
| 51 | +npm run lint |
| 52 | +npm test |
| 53 | +npm run package:check |
| 54 | +npm run live:smoke |
| 55 | +npm run clawhub:dry-run |
| 56 | +``` |
| 57 | + |
| 58 | +Run from `/mnt/c/Users/timot/Documents/projects/docker/openclaw-mautic-stack`: |
| 59 | + |
| 60 | +```bash |
| 61 | +node scripts/audit.mjs |
| 62 | +node scripts/audit.mjs --live |
| 63 | +docker compose exec -T openclaw sh -lc 'openclaw security audit --deep --json' |
| 64 | +``` |
| 65 | + |
| 66 | +## Remaining Warning |
| 67 | + |
| 68 | +`openclaw security audit --deep --json` reports one warning: |
| 69 | + |
| 70 | +`plugins.tools_reachable_permissive_policy` |
| 71 | + |
| 72 | +This is documented and accepted for the trusted local single-operator stack. Mitigation for broader deployment is to use restrictive OpenClaw profiles or explicit tool allowlists for agents that process untrusted input. |
0 commit comments