From 1ba4cd27d9250e23dcf6fd63eeee0d2a0de77468 Mon Sep 17 00:00:00 2001 From: Ben Kalsky Date: Thu, 24 Sep 2026 13:19:27 +0300 Subject: [PATCH 1/2] =?UTF-8?q?release:=20SiteAgent=202.19.3=20=E2=80=94?= =?UTF-8?q?=20a=20sandbox=20root=20that=20is=20a=20link=20is=20reported=20?= =?UTF-8?q?as=20one=20(#133)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 (1M context) --- README.md | 6 +++++- digitizer-site-worker/digitizer-site-worker.php | 4 ++-- digitizer-site-worker/readme.txt | 5 ++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2188cd62..cac902e1 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ WordPress PHP - Stable + Stable

--- @@ -239,6 +239,10 @@ These plug straight into **Aura's Fleet MCP Gateway**: read tools run on demand, ## Changelog +### 2.19.3 + +- **A sandbox root that is a link is reported as one, even when its target is gone.** `third_party.emcp_sandbox` probed `is_dir()` before `is_link()`; `is_dir()` follows a link, so a `wp-content/emcp-sandbox` link to a missing target read as `present: false, store: null`, and a healthy link was resolved before the no-follow rule applied. The link test now comes first in both places: presence counts the link itself, and `store` answers `sandbox_is_link` without resolving anything. (#133) + ### 2.19.2 - **The EMCP sandbox store is counted, not just noticed.** `audit_agent_code` → `third_party.emcp_sandbox` gains `active` (`EMCP_TOOLS_VERSION` is defined — the plugin is loaded) and `store`: `null` when `wp-content/emcp-sandbox` does not exist, `{ error }` (`sandbox_unreadable` / `sandbox_is_link` / `sandbox_walk_failed`) when it cannot be counted, else `{ files, executable_files, newest_mtime, truncated, unreadable_dirs }`. A metadata walk: no file is opened and no name or path leaves the site; iterative and capped at 20000 entries, directories included, so the cap bounds the work; `truncated` or `unreadable_dirs ≥ 1` makes the counts lower bounds. Links are never followed and never stat'ed — a link inside the store is one entry judged by its own name (a `*.php`-named link counts as executable), and a store root that is itself a link is not walked. A throw inside the walk stays inside this store, so `atarim_exec` still answers. `present` / `version`, `scan_executable_files` and `atarim_exec` are unchanged. Aura grades the count info / medium / high (Digitizers/Aura `docs/superpowers/specs/2026-09-21-agent-installed-packages-design.md` §3). (#129) diff --git a/digitizer-site-worker/digitizer-site-worker.php b/digitizer-site-worker/digitizer-site-worker.php index bcdba65e..f3f6c82f 100644 --- a/digitizer-site-worker/digitizer-site-worker.php +++ b/digitizer-site-worker/digitizer-site-worker.php @@ -3,7 +3,7 @@ * Plugin Name: SiteAgent for Aura * Plugin URI: https://my-aura.app/siteagent * Description: Remote site management agent for Aura dashboard. Enables secure updates, health monitoring, and maintenance operations via REST API. - * Version: 2.19.2 + * Version: 2.19.3 * Requires at least: 6.2 * Requires PHP: 7.4 * Author: Digitizer @@ -18,7 +18,7 @@ exit; } -define( 'AURA_WORKER_VERSION', '2.19.2' ); +define( 'AURA_WORKER_VERSION', '2.19.3' ); define( 'AURA_WORKER_FILE', __FILE__ ); define( 'AURA_WORKER_DIR', plugin_dir_path( __FILE__ ) ); diff --git a/digitizer-site-worker/readme.txt b/digitizer-site-worker/readme.txt index f977abd3..4fbab7a9 100644 --- a/digitizer-site-worker/readme.txt +++ b/digitizer-site-worker/readme.txt @@ -4,7 +4,7 @@ Tags: ai, automation, maintenance, updates, wordpress management Requires at least: 6.2 Tested up to: 7.1 Requires PHP: 7.4 -Stable tag: 2.19.2 +Stable tag: 2.19.3 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -253,6 +253,9 @@ Yes. SiteAgent is open source under the GPLv2 or later license. The source code == Changelog == += 2.19.3 = +* A third-party sandbox directory that is a link to a missing or unreachable location is now reported as a link, not as "no sandbox here". The audit checks for a link before it looks at what the link points to. Read-only; nothing changes on the site. + = 2.19.2 = * `audit_agent_code` now counts what is in a third-party agent tool's sandbox store (`wp-content/emcp-sandbox`): `third_party.emcp_sandbox` gains `active` (the plugin is loaded) and `store` — how many files, how many with an executable extension, and the newest modification date. Until now an empty directory and one holding forty PHP files looked the same to a fleet audit. Counts only: no file is opened and no file name leaves the site. Links are never followed; a sandbox directory that is itself a link is reported as such and not walked. A directory that cannot be read is reported as unreadable, never as empty. Read-only, no settings, nothing changes on the site. From f5f6490913c822b4b35a7a7334f69130a75023dc Mon Sep 17 00:00:00 2001 From: Ben Kalsky Date: Thu, 24 Sep 2026 13:19:56 +0300 Subject: [PATCH 2/2] docs(readme): move 2.12.0 to the changelog archive verbatim (readme word budget) Co-Authored-By: Claude Opus 5.5 (1M context) --- digitizer-site-worker/readme.txt | 18 ++---------------- docs/changelog-archive.md | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/digitizer-site-worker/readme.txt b/digitizer-site-worker/readme.txt index 4fbab7a9..3bfa8e7b 100644 --- a/digitizer-site-worker/readme.txt +++ b/digitizer-site-worker/readme.txt @@ -449,24 +449,10 @@ Yes. SiteAgent is open source under the GPLv2 or later license. The source code * Compatibility: a 2.13 site that is never sent a disconnect behaves exactly as 2.12 did. Nothing on the site changes until Aura asks for one. -= 2.12.0 = -* Feature: **a rule can now apply to some of a client's sites instead of all - of them.** Aura's signed ruleset names the site each document was issued - for, SiteAgent stores that identity, and a rule that lists the sites it - applies to is enforced only where it belongs. Rules that name no sites are - client-wide exactly as before. -* Safety: a site that cannot prove its own identity — an older record, a - document issued before this field existed — enforces EVERY rule rather than - skipping the ones it cannot place. Scoping only ever narrows on proof. -* Upgrade: the identity is recovered offline from the ruleset already stored, - by re-verifying its signature locally. No new network traffic, and a site - whose ruleset has not changed since the upgrade is repaired on its next - request rather than waiting for the next push. - -= 2.11.0 and earlier = += 2.12.0 and earlier = * WordPress.org truncates a Changelog over 5,000 words, and this plugin's history is longer than that. - The entries for 2.11.0 and every release before it were moved out of this file verbatim and are kept in full at: + The entries for 2.12.0 and every release before it were moved out of this file verbatim and are kept in full at: https://github.com/Digitizers/SiteAgent/blob/main/docs/changelog-archive.md == Upgrade Notice == diff --git a/docs/changelog-archive.md b/docs/changelog-archive.md index 9dec7ffc..06371dbb 100644 --- a/docs/changelog-archive.md +++ b/docs/changelog-archive.md @@ -16,6 +16,20 @@ the judgement call this file exists to avoid. Newest first, continuing exactly where `readme.txt`'s Changelog stops. += 2.12.0 = +* Feature: **a rule can now apply to some of a client's sites instead of all + of them.** Aura's signed ruleset names the site each document was issued + for, SiteAgent stores that identity, and a rule that lists the sites it + applies to is enforced only where it belongs. Rules that name no sites are + client-wide exactly as before. +* Safety: a site that cannot prove its own identity — an older record, a + document issued before this field existed — enforces EVERY rule rather than + skipping the ones it cannot place. Scoping only ever narrows on proof. +* Upgrade: the identity is recovered offline from the ruleset already stored, + by re-verifying its signature locally. No new network traffic, and a site + whose ruleset has not changed since the upgrade is repaired on its next + request rather than waiting for the next push. + = 2.11.0 = * Feature: **the magic-link connect now mints an Application Password for the dashboard.** A magic-link connection could run SiteAgent's own tools