Skip to content

feat(aegis): tolerance learns version churn; XProtect staleness learns the updater heartbeat - #7

Merged
opencdlee-dotcom merged 1 commit into
mainfrom
ship/version-churn-xprotect-2026-08-12
Aug 12, 2026
Merged

feat(aegis): tolerance learns version churn; XProtect staleness learns the updater heartbeat#7
opencdlee-dotcom merged 1 commit into
mainfrom
ship/version-churn-xprotect-2026-08-12

Conversation

@opencdlee-dotcom

Copy link
Copy Markdown
Owner

Finishing the two residuals from #6.

Tolerance learns version churn

A vendor's versioned install dir renames on every release (claude-code-2.1.226.228, runner bin.2.336.0), so the same reviewed binary presented a "new" beacon identity per update and re-alerted anyway. Dotted version segments are now normalized to #only inside path-like :-fields. An ip, port, or trust verdict is its own :-field with no /, so endpoints stay literal: a new ip:port always alerts. net-beacon joins the tolerance category allowlist.

This is the same precedent the hash-strip already set (same path, same trust class, new content), applied to the path's version component. risk:-kind incidents remain never-tolerated and the process sensor still grades signatures independently.

Measured on the live verdict history: 4 → 6 tolerized identities — both recurring Claude-extension endpoints (3 human verdicts each, across three version directories).

XProtect staleness learns the updater heartbeat

Corpus age alone conflated two opposite diagnoses: "update path broken — go fix Software Update/MDM" vs "updater alive, Apple has not shipped — nothing to fix locally". The xprotect version Installed stamp is the update mechanism's own heartbeat and separates them: corpus older than the threshold but heartbeat fresh (≤14d) now reports INFO with the honest no-action detail instead of the misleading MEDIUM.

The live case that exposed it: corpus v5355 is 75 days old, but the OS updater (re)installed it the same morning the finding told the operator to check Software Update.

Verification

  • 8 new tests (version-normalization mechanics incl. IP-field immunity, end-to-end beacon tolerance with new-endpoint alerting, heartbeat parsing incl. non-UTC/garbage refusal).
  • Full suite: 879 passed, 4 skipped (platform-scoped) locally; CI dispatched on this branch.
  • Deployed to the live monitor (runtime copy sha256-in-sync, agent reloaded, watchdog OK).

🤖 Generated with Claude Code

…s the updater heartbeat

Finishing the two residuals from the acquired-tolerance ship (#6):

- Version churn is path churn: a vendor's versioned install dir renames on
  every release (claude-code-2.1.226 -> .228, runner bin.2.336.0), so the
  same reviewed binary presented a "new" beacon identity per update.
  Dotted version segments are now normalized — ONLY inside path-like
  ':'-fields; an ip/port/trust verdict is its own field with no '/', so
  endpoints stay literal and a new endpoint always alerts. net-beacon joins
  the tolerance category allowlist. Measured on the live verdict history:
  4 -> 6 tolerized identities (both recurring Claude-extension endpoints,
  3 human verdicts each across three version dirs).

- XProtect staleness conflated two opposite diagnoses: "update path broken
  (go fix Software Update/MDM)" vs "updater alive, Apple has not shipped
  (nothing to fix locally)". The `xprotect version` Installed stamp is the
  updater's own heartbeat and separates them: corpus old + heartbeat fresh
  (<=14d) now reports INFO with the honest no-action detail instead of the
  misleading MEDIUM. Live case that exposed it: corpus v5355 is 75 days old
  but was (re)installed the same morning the finding said to check
  Software Update.

Suite: 879 passed, 4 skipped (platform-scoped).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@opencdlee-dotcom
opencdlee-dotcom merged commit 0de5d49 into main Aug 12, 2026
10 checks passed
@opencdlee-dotcom
opencdlee-dotcom deleted the ship/version-churn-xprotect-2026-08-12 branch August 12, 2026 23:44
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