Fleet changelogs · dev.ecs0.net
rdmsm4x-changelog-20260901-1537-xentropy-rotation-gap-audit-tickets

rdmsm4x-changelog-20260901-1537-xentropy-rotation-gap-audit-tickets

[2026-09-01 15:37:42 EDT · rdmsm4x]

XEntropy source-code audit found it can plan and request credential rotations but cannot execute one end-to-end (zero outbound provider HTTP client anywhere in Sources/); filed 7 Xentropy feat tickets enumerating exactly what's missing, so the 4 open SEC rotation tickets (Cloudflare Global key, GoDaddy, dataroo.net TLS, 9-repo GitHub exposure) have a concrete build path instead of staying blocked indefinitely.

Scope

What changed (new files written this session)

  1. /Users/richh/dev/_ops/ecs0lib-audit-20260901/xentropy-rotation-review.md — full audit with file:line citations, every claim paired with a re-runnable command and raw output, positive controls for every "capability is absent" claim.
  2. Seven new ticket files under ~/dev/issues/open/ (see below) — no existing ticket file was modified.
  3. This changelog + its Apple Notes projection.

Key finding

RotationExecutionBoundary (Sources/XEntropyCore/RotationPlanning.swift:59-61) has exactly one case, ownerAttendedDeferred, applied unconditionally to every rotation-plan step. Zero URLSession/URLRequest/Process()/curl/libcurl hits anywhere in Sources/ (exhaustive grep, positive-controlled against import Foundation → 55 files). The app's own regression tests (SecretLeakBoundaryTests, CredentialCatalogServiceTests, StatelessMCPHandlerTests) already assert rotation.execute is permanently unavailable — this is a declared design boundary, not an oversight. Headless-agent authentication to request a rotation (per-lane HMAC keys, signed inbox files) is already real and working — that part of the brief is not a gap.

Tickets filed (~/dev/issues/bin/ticket open, project Xentropy, parent EPIC-20260829-02)

Ticket Title Depends on Relates to
FEAT-20260901-16 Credential risk-tier / blast-radius classification model — —
FEAT-20260901-17 Rotation execution-boundary policy + coordinator dispatcher 16 —
FEAT-20260901-18 Cloudflare provider adapter (create/canary/revoke) 17 SEC-20260831-01
FEAT-20260901-19 GoDaddy provider adapter (create-or-revoke/canary) 17 SEC-20260831-02
FEAT-20260901-20 Atomic write-back into global.env / project .env 17 SEC-20260831-01, -02
FEAT-20260901-21 Rotation atomicity — canary-before-commit and rollback 17 —
FEAT-20260901-22 Git-history exposure enumeration (all remotes/branches) — SEC-20260831-03, -07

Each ticket's --desc states what's missing, the file it belongs in, acceptance criteria, and whether it's agent-safe to build/test vs. owner-gated to run against a real provider. Verified via ticket show/ticket tree after filing — blocked_by/relates_to arrays confirmed populated, not just silently accepted.

Verification evidence

Backup / undo

Nothing destructive happened. To undo: delete the 7 ticket files under ~/dev/issues/open/ (their filenames are listed in the audit doc's ticket-filing command output) and re-run ticket reindex; delete the audit doc and this changelog pair. No other file was touched.

Outstanding owner actions