KB-2E09 rev 2

C2B1-XV — DOT-only bootstrap-admin rotation, restart persistence, post-rotation restore (2026-07-23)

21 min read Revision 2
current-statec2b1-xvdirectusbootstrap-admincredential-containmentrotationstatic-tokensession-revokerestart-persistencedot-onlydot-exclusivitybreak-glassencrypted-backupgoogle-driveisolated-restorenegative-controlzero-residuemac-freezeMAC_CONTROL_CHANNELS_PRESERVEDPASS_C2B1_XV_DOT_ONLY_ROTATION_RESTART_RESTORE_VERIFIED2026-07-23

C2B1-XV — DOT-only bootstrap-admin rotation, restart persistence, post-rotation restore

Ngày: 2026-07-23 · Hệ: VPS vmi3080463 (SSOT duy nhất) · Ủy quyền: Owner prompt C2B1-XV-DOT-SIMPLE REV3 + 2 phụ lục (freeze MacBook; giữ nguyên email, chỉ xoay password + static token).


1. Verdict

PASS_C2B1_XV_DOT_ONLY_ROTATION_RESTART_RESTORE_VERIFIED
OLD_ADMIN_PASSWORD_VALID              = NO
OLD_ADMIN_STATIC_TOKEN_VALID          = NO
ACTIVE_ADMIN_SESSIONS                 = 0
EXTERNAL_ADMIN_SESSIONS               = 0

NEW_ADMIN_PASSWORD                    = PASS
NEW_ADMIN_STATIC_TOKEN                = PASS
DIRECTUS_RESTART_PERSISTENCE          = PASS
ADMIN_USER_STATUS                     = active

BOOTSTRAP_ADMIN_MACHINE_CONSUMERS     = 0
SHARED_MACHINE_IDENTITY               = PASS
SYNC_SECRET_INDEPENDENT               = YES

CORE_PRODUCT_SMOKE                    = PASS
PRE_ROTATION_RESTORE                  = PASS
POST_ROTATION_BACKUP_UPLOAD           = PASS
REMOTE_READ_BACK                      = PASS
ISOLATED_RESTORE                      = PASS
NEGATIVE_CONTROL                      = FAILED_CLOSED
PLAINTEXT_OR_TEMP_SECRET_RESIDUE      = 0

ALL_DIRECTUS_SCHEMA_PG_MUTATIONS_VIA_DOT = YES
DIRECT_AGENT_WRITE_COUNT                 = 0

Khai báo bắt buộc về MacBook:

MAC_CONTROL_CHANNELS                              = PRESERVED
MAC_FILES_MUTATED                                 = 0
NEW_BREAKGLASS_CREDENTIAL_PROPAGATED_TO_MAC       = NO
OLD_MAC_ADMIN_LOGIN                               = DENIED
NEW_BREAKGLASS_ACCOUNT_LOCKOUT_RISK_FROM_OLD_MAC_LOGIN = NEUTRALIZED
MAC_BACKGROUND_RELOGIN_LOOP                       = NO
MAC_TO_VPS_CONNECTIVITY                           = PASS
DOT_INVOCATION_FROM_MAC                           = PASS

2. Khảo sát năng lực (Gate 0) — hai nguồn

Nguồn A — DOT thực thi thật: dot_tools 309 dòng · /opt/incomex/dot/bin 296 file dot-* · manifest approved-sql-manifest.tsv · paired verifier · status/checksum/callable path.

Nguồn B — năng lực chưa gắn nhãn: pg_proc 655 function · /opt/incomex/scripts · pipeline backup nightly đã chứng minh · evidence harness C2B1-HYB-B0.

Năng lực cần Hiện trạng đo được Kết luận
Rotate admin password + static token 0 DOT, 0 PG function, 0 script NEW_MINIMAL_DOT_REQUIRED
Revoke admin sessions không có gộp vào cùng DOT rotation
Neutralize bootstrap env + restart Directus chỉ có restart cho container khác (DOT-016/048/053) gộp vào cùng DOT rotation
Encrypted PG backup → Drive + read-back backup-to-gdrive.sh đã chứng minh nhưng chưa đăng ký DOT THIN_DOT_WRAPPER_REQUIRED
Isolated restore cơ chế B0 còn nguyên, script đã bị xoá khi cleanup, chỉ còn evidence THIN_DOT_WRAPPER_REQUIRED
Atomic PG write gate dot-pg-atomic-apply tồn tại & đã chứng minh từ 2026-06-26 nhưng vắng trong registry đăng ký, không sửa mã

Hai ứng viên gần đúng trong registry đều bị loại sau khi đọc mã, không phải suy đoán: DOT-014 dot-backup là export JSON business-collection qua Directus API (không phải PG dump, không mã hoá, không lên Drive); DOT_KB_RESTORE là restore knowledge base. pg_proc chỉ có fn_admin_fallback_overdue_scanfn_iu_piece_restore — không liên quan.


3. DOT tái sử dụng và tạo mới tối thiểu

Code Tên Tier Loại Paired
DOT-318 dot-pg-atomic-apply B đăng ký cái đã có (0 dòng mã bị sửa) DOT-HEALTH-DOT
DOT-319 dot-directus-breakglass-rotate B mới, tối thiểu — 6 stage: password·token·sessions·neutralize·restart·cleanup DOT-320
DOT-320 dot-directus-breakglass-verify A mới — paired verifier DOT-319
DOT-321 dot-pg-backup-drive B thin wrapper DOT-322
DOT-322 dot-pg-restore-verify B thin wrapper DOT-321

Tái dùng nguyên trạng, không sao chép logic: dot-pg-atomic-apply, dot-collection-health, dot-apr-health, dot-balo-one-click-guard, reconcile-tasks.sh, reconcile-knowledge.sh.

/opt/incomex/scripts/backup-to-gdrive.sh không bị sửa và không bị gọi: sha256 19e4343…3288b khớp bản chụp trong checkpoint B0. DOT-321 chỉ tái dùng chuỗi stage đã chứng minh, khác đúng 3 điểm có chủ đích: prefix Drive riêng cho mỗi run, không retention (không bao giờ xoá artifact từ xa), staging trên tmpfs.


4. Registration và gate proof

Đường đi: Owner authorization → dot-pg-atomic-apply (path allowlist + manifest sha256 lock + static guardrail + psql -1 --single-transaction -v ON_ERROR_STOP=1) → registry + bản ghi phê duyệt trong CÙNG một transaction → dry-run → execute → paired verify.

  • approval_requests id 447, status=applied, request_type_code=new_dot, proposed_action_code=create_item, source=dot-pg-atomic-apply, evidence trỏ đúng prompt ủy quyền.
  • dot_tools: 309 → 314.

Gate đã tự chứng minh là fail-closed 2 lần, không phải giả định:

  1. Lần chạy đăng ký đầu: cột target_entity không tồn tại → ERRORrollback toàn bộ transaction, đo lại thấy 0 dòng được chèn.
  2. c2b1xv-expire-admin-sessions.sql bị từ chối vì một chữ trong COMMENT trùng động từ bị cấm — đúng lớp mìn đã ghi nhận (gateway quét toàn file, kể cả comment). Đã sửa cách diễn đạt, không nới guardrail.

Không dùng đường APR tương tác vì dot-apr-propose cần identity ghi được approval_requests; machine-transition không có quyền đó và agent bị cấm dùng admin trực tiếp. Bản ghi phê duyệt vì vậy được ghi PG-native qua chính gate — xem mục 14.


5. Zero direct-agent write

DIRECT_WRITE_USED                  = 0
DIRECT_SECRET_CONSUMPTION_BY_AGENT = 0

Mọi so sánh secret (old/new password, old/new token, SYNC_SECRET, token của Nuxt và agent-data) đều thực hiện bên trong DOT-320; agent chỉ nhận boolean. Token không bao giờ nằm trong argv: mọi lời gọi dùng curl --config <(...), đã kiểm chứng bằng probe với giá trị giả.

Bản đồ bypass (đo cấu trúc, không thực thi):

Câu hỏi Trả lời Vị trí cấu trúc
CAN_AGENT_CALL_DIRECTUS_WRITE_API_DIRECTLY YES endpoint nội bộ 172.18.0.4:8055 tới được từ host (PATCH không auth → 403)
CAN_AGENT_ACCESS_ADMIN_TOKEN_DIRECTLY YES /etc/incomex/c2b1/breakglass/current.env root:root 0600, mission chạy bằng root
CAN_AGENT_RUN_PSQL_WRITE_DIRECTLY YES docker exec postgres psql -U workflow_adminrolsuper=t, UPDATE trên directus_permissions/directus_users
CAN_AGENT_ACCESS_PG_WRITER_SECRET_DIRECTLY YES (không cần) socket-local trust: không đòi mật khẩu
CAN_AGENT_BYPASS_DOT_GATE YES gate là script mà chính root có thể không gọi
DOT_EXCLUSIVITY_ENFORCEMENT_GAP = YES

Không đường nào được sử dụng. Ghi thành blocker cho VPS-ADMIN-SECURITY-R0.


6. Entry verification

machine-transition-policy: admin_access=false, app_access=false. Không drift suốt mission: permissions 1243, malformed 632, policies 9, roles 10, access 10, machine permission rows 36, containers 11.

Chứng minh 6 consumer đã sạch admin bằng hành vi runtime, không bằng đọc file: admin login cuối từ 172.18.0.5 (reconcile ×2) là 2026-07-22 10:00:05; sau đó 4 khung 6 giờ liên tiếp đã chạy và báo All in sync!không tạo một admin login nào. Token của Nuxt và agent-data được so byte trong DOT: IS_BOOTSTRAP_ADMIN=NO, IS_SHARED_MACHINE=YES.

Đã phát hiện và loại 5 nghi vấn còn export credential admin trong cron (dot-orphan-scanner, dot-misclass-scanner, dot-dot-health, dot-dot-coverage, dot-apr-execute). Đo bằng cả mã lẫn runtime: 4 DOT đầu không hề tham chiếu DIRECTUS_ADMIN_TOKEN/DOT_TOKEN/dot-auth/Bearer/auth/login; dot-apr-execute chết ở curl: (7) localhost:8055; và không có admin login nào từ IP host kể từ 2026-06-27 dù cả 5 cron đã chạy nhiều lần. Kết luận: vestigial, và đã bị vô hiệu hoá tự động khi docker/.env bị làm rỗng.


7. Pre-rotation recovery

dot-pg-backup-driveincomex-encrypted-v1/c2b1xv-pre/C2B1XV_PRE_20260723T054505Z/, 121474522 bytes, sha256 649d09e7…1634a, read-back từ xa khớp cả size lẫn sha256/md5.

dot-pg-restore-verify trên chính artifact đó: 385 CREATE TABLE / 3.941.409 dòng, RESTORE_PIPESTATUS=0 0 0, PSQL_ERROR_LINES=0, 0 sai lệch cấu trúc so với production, negative control FAILED_CLOSED.

PRE_ROTATION_RECOVERY_READY = YES
PRE_ROTATION_RESTORE        = PASS

Đường phục hồi được chứng minh trước thay đổi bất khả nghịch, không phải sau.


8. Rotation, session revocation, restart persistence

Thứ tự bắt buộc, mỗi bước có paired verify riêng — không đổi mù hai thứ cùng lúc:

  1. --stage password → PATCH bằng token cũ (phao) · verify: old password 401, new password 200, phao token cũ vẫn sống, machine identity PASS.
  2. --stage token → PATCH bằng token cũ · verify: old token 401, new token = admin, new password vẫn 200.
  3. --stage sessions → qua dot-pg-atomic-apply: hết hạn chứ không xoá dòng, giữ nguyên vết kiểm toán.
  4. --stage neutralize → làm rỗng DIRECTUS_ADMIN_PASSWORD + DIRECTUS_ADMIN_TOKEN trong docker/.env.env.local, và DIRECTUS_PASSWORD trong /etc/incomex/reconcile/directus-admin.env (file mồ côi, wrapper không còn đọc). Không đụng /etc/incomex/agent-data.env — key tên cũ DIRECTUS_ADMIN_TOKEN ở đó thực chất giữ token machine, đã xác nhận bằng so byte.
  5. --stage restartdocker compose up -d --no-deps --pull never --force-recreate directus. Container id đổi (recreate thật), CONTAINERS_BEFORE=11 → AFTER=11, OTHER_CONTAINERS_UNCHANGED=10.

Đo được: đổi password khiến Directus tự xoá session — active admin sessions 36 → 1 ngay lập tức; EXTERNAL_ADMIN_SESSIONS về 0 tại thời điểm đó, tức session của MCP Mac chết trước cả bước revoke tường minh.

Sau restart (--phase post-restart, 8/8 PASS):

DIRECTUS_HEALTH         = PASS   (nội bộ 200 + public HTTPS 200)
NEW_ADMIN_PASSWORD      = PASS
NEW_ADMIN_STATIC_TOKEN  = PASS
OLD_ADMIN_PASSWORD      = DENIED (401)
OLD_ADMIN_STATIC_TOKEN  = DENIED (401)
ACTIVE_ADMIN_SESSIONS   = 0
SHARED_MACHINE_IDENTITY = PASS
ADMIN_USER_STATUS       = active

Directus 11.5 chỉ dùng ADMIN_EMAIL/ADMIN_PASSWORD khi bootstrap trên DB rỗng, nên làm rỗng chúng là an toàn — và điều đó đã được chứng minh bằng một lần recreate thật rồi mới kết luận, không suy diễn.


9. Lockout — đo, không đoán

Cơ chế có thật và đang bật: directus_settings.auth_login_attempts = 25 (đọc read-only, không sửa), kèm trạng thái suspended trên user.

Đo trực tiếp trên email không tồn tại (không chạm bộ đếm của tài khoản thật):

  • password rỗng400 INVALID_PAYLOAD — bị chặn ở tầng validate, không tới bước kiểm credential nên không tính vào bộ đếm;
  • password sai, khác rỗng401 INVALID_CREDENTIALS tính.

DOT-320 vì thế chỉ tạo tối đa một login sai mỗi lần chạy và luôn theo ngay bằng một login đúng để reset bộ đếm, đồng thời assert status=active trước và sau. ADMIN_USER_STATUS = active ở mọi mốc đo.


10. MacBook — freeze tuyệt đối

MacBook là control plane tin cậy duy nhất; không có mutation nào. Bằng chứng đọc-only cuối phiên: credentials.local.json mtime Mar 2 15:23:32 2026 mode 644 y nguyên, directus_stdio_server.py mtime Feb 24, entry mcpServers.directus nguyên vẹn, không có file .pre-*/.bak/.tmp nào được tạo. Không gọi bất kỳ tool mcp__directus__* nào. Không truyền credential mới về Mac.

Phân loại MCP Directus trên Mac: MCP_DIRECTUS_EXACT_ROLE = DIRECT_ADMIN_BYPASS — 10 tool gọi thẳng REST API Directus, không subprocess/ssh/dot-//opt/incomex, tức không route qua DOT. 6 tool đọc + 4 tool ghi (create_item, update_item, delete_item, trigger_flow) đều đi qua _request → cần auth. Auth thực tế chỉ là email+password admin: mã chỉ đọc staticToken ở gốc JSON (đang rỗng), không bao giờ đọc profiles[1].staticToken.

Tác động thực tế của rotation: 9/10 tool mất quyền; riêng directus_health vẫn chạy vì gọi thẳng /server/health không auth.

Rủi ro lockout từ Mac — đã trung hoà bằng kiến trúc, không bằng sửa Mac: _request gặp 401 sẽ xoá token và thử lại một lần, nên mỗi lời gọi tool có thể sinh 2 login sai. Điều này chỉ thành lockout nếu MCP tự động gọi lại. Đã theo dõi read-only 5 phút sau khi revoke:

Mốc admin status active sessions successful logins (5') auth/login từ IP Mac (5') auth/login bất kỳ (5')
T0 09:29:49Z active 0 3 (chính probe của DOT) 0 0
T+2m30s active 0 0 0 0
T+5m active 0 0 0 0

Lưu lượng duy nhất từ IP Mac trong 6 phút: 35 request /ui-preview/mcp-writes/eco-nav.js — trình duyệt, 0 request auth. ⇒ MAC_BACKGROUND_RELOGIN_LOOP = NO. MCP chỉ đăng nhập khi được gọi, mà nó không được gọi.


11. Core product smoke

DOT-320 --phase final: 24/24 PASS, SMOKE_RESIDUE = 0.

  • Directus health nội bộ + public HTTPS = 200
  • Nuxt: / 200 · /api/health 200 · /ui-preview/mcp-writes/mow-unified-canvas-v2.html 200 (/api/refresh-counts là route POST nên GET 404 là đúng)
  • Workflow read + safe mutation: CRUD đầy đủ trên knowledge_documents bằng machine identity, không admin, tự dọn sạch (create 200 → read 200 → update 200 → delete 204, residue 0)
  • Negative control: machine identity bị từ chối /users403
  • Balo bridge: dot-balo-one-click-guardPASS checks=37
  • agent-data healthy · reconcile-tasks & reconcile-knowledge All in sync! (chạy lại sau restart) · dot-collection-health rc=0 (compliance 96.0%, 6 issue tiền tồn) · dot-apr-health rc=0
CORE_PRODUCT_SMOKE          = PASS
MACHINE_ADMIN_LOGIN_CREATED = 0

Không ép các suy giảm UI registry/matrix/taxonomy đã biết phải PASS; không sửa chúng.


12. SYNC_SECRET

Đo tại entry: SYNC_SECRET byte-identical với static token admin đang sốngđược Directus chấp nhận làm BearerINDEPENDENT = NO.

Sau khi xoay token, chính phép xoay đã giải quyết: SYNC_SECRET_EQUALS_LIVE_ADMIN_TOKEN=NO, SYNC_SECRET_ACCEPTED_AS_DIRECTUS_BEARER=NO

SYNC_SECRET_INDEPENDENT_FROM_DIRECTUS_CREDENTIALS = YES

Consumer duy nhất là cron dot-apr-execute vốn đã hỏng (curl: (7)), nên giá trị này hiện là chuỗi chết. Không xây thêm cơ chế; ghi cleanup backlog.


13. Post-rotation backup, read-back, restore, negative control, residue

dot-pg-backup-driveincomex-encrypted-v1/c2b1xv-post/C2B1XV_POST_20260723T093848Z/, 121505020 bytes, sha256 1e77da4c…f5d2a, PIPESTATUS 0 0 0, plaintext chưa từng chạm đĩa, read-back từ xa khớp size + sha256 + md5.

dot-pg-restore-verify trên artifact hậu-rotation: tải mới từ Drive → sha khớp → giải mã+giải nén toàn luồng (385 CREATE TABLE, 3.941.556 dòng) → postgres:16 cô lập (HOST_BOUND_PORTS=0, NETWORK_INTERNAL=true) → restore ON_ERROR_STOP=1, PSQL_ERROR_LINES=0.

So khớp restored ↔ production: STRUCTURAL_MISMATCHES = 0, khớp chính xác trên toàn bộ khoá cấu trúc và mọi bảng bảo mật — base_tables_all=385, pk=437, fk=161, indexes=974, directus_users=14, directus_roles=10, directus_policies=9, directus_access=10, directus_permissions=1243, malformed_fields=632, machine_permission_rows=36, bootstrap_admin_present=1, machine_identity_present=1, machine_policy_admin_access=false, machine_policy_app_access=false.

Negative control: ciphertext cắt cụt → NEGATIVE_CONTROL_PIPESTATUS = 2 1 3FAILED_CLOSED; 351 shell table vẫn được tạo, và đó chính là lý do table count không bao giờ được làm cổng — chỉ exit code mới là cổng. Artifact thật không đổi (REAL_ARTIFACT_UNMODIFIED=YES); corruption thực hiện trên bản sao.

Zero residue (đo sau --stage cleanup):

PLAINTEXT_BACKUP_RESIDUE = 0     (streaming: plaintext chưa từng tồn tại)
TEMP_SECRET_RESIDUE      = 0     (5 file secret tạm đã shred)
RESTORE_TEST_RESIDUE     = 0     (container/volume/network/tmpfs/keyring)
BOOTSTRAP_ADMIN_SECRETS_OUTSIDE_CANONICAL_STORE = 0

Giữ lại: artifact mã hoá đã chứng minh restore được trên Drive (retention nightly không bị tiêu tốn — vẫn đủ 3 db + 3 cfg ở prefix gốc), và duy nhất /etc/incomex/c2b1/breakglass/current.env (root:root 0600 trong thư mục 0700).


14. DOT exclusivity proof

Mutation Executor
Directus password rotation DOT-319
Directus static-token rotation DOT-319
Directus session revoke DOT-319 → DOT-318 (manifest + sha256 + guardrail + 1 transaction)
Directus config neutralization DOT-319
Directus restart DOT-319 (canonical compose path)
Đăng ký DOT + bản ghi phê duyệt DOT-318
PG backup DOT-321
PG isolated restore DOT-322
Direct agent/API/psql write 0
ALL_DIRECTUS_SCHEMA_PG_MUTATIONS_VIA_DOT = YES
DIRECT_AGENT_WRITE_COUNT                 = 0

15. Bốn khiếm khuyết tự tìm thấy trong chính harness này

Cả bốn đều bị chặn bởi assertion fail-closed trước khi chạm production, và đều đã vá:

  1. gpg --list-packets luôn exit 2 (host chỉ giữ public key) — dưới pipefail, rc đó nuốt kết quả grep. Vá theo đúng dạng đã chứng minh: capture trước, match sau, không pipe vào grep.
  2. PIPESTATUS sau X="$(a|b|c)" chỉ có 1 phần tử vì pipeline chạy trong subshell → set -u báo PS[1]: unbound variable. Đây đúng là con bọ đã giết run đầu của B0 stage B ngày 2026-07-22. Vá: ghi ra file để pipeline là foreground thật, và chốt ${#PS[@]}==3 trước khi tin bất kỳ phần tử nào.
  3. tr -dc … </dev/urandom | head -c 32head đóng pipe, tr chết SIGPIPE (rc 141), pipefail+set -e thoát im lặng không qua die(), log trông như treo. Đã tái hiện đo được rc=141. Vá gen_password, vá luôn readkey (cùng lớp lỗi, dùng ở mọi nơi), và thêm finalizer trên EXIT để không lần thoát nào còn im lặng.
  4. Precheck "life-raft" áp cho mọi stage — sau khi neutralize làm rỗng env và cleanup xoá previous.env (đều là trạng thái đích), các stage hậu-rotation vĩnh viễn không chạy lại được. Đã thu hẹp precheck đúng 2 stage cần phao; đồng thời stage cleanup từng để sót 1 session do probe login không logout — đã thay bằng probe tự trả session và revoke lại về 0.

{"5432/tcp":null} nghĩa là cổng được expose chứ không publish; assertion cô lập đã sửa cho đúng ngữ nghĩa Docker và bổ sung kiểm tra Internal=true của network.


16. Phát hiện cần theo dõi (không xử lý trong mission này)

  1. workflow_steps DELETE grant biến mất. directus_permissions id 1550 (workflow_steps/delete, policy machine-transition) được tạo 2026-07-22 10:16:51 và hiện không còn, trong khi directus_activity không có bản ghi delete nào cho directus_permissions kể từ 2026-05-23 ⇒ bị xoá bằng đường PG trực tiếp, ngoài Directus. Vì vậy machine permission rows là 36, không phải 37. Canary S3 từng cần quyền này. Không khôi phục ở đây (sẽ là mutation quyền ngoài envelope).
  2. docker-compose.yml mode 644 chứa NUXT_DIRECTUS_SERVICE_TOKEN dạng plaintext (token machine, không phải admin) — world-readable trên host. Blocker cho VPS-ADMIN-SECURITY-R0.
  3. /opt/incomex/.env.local mode 644 — nay đã rỗng secret, nhưng quyền vẫn nới.
  4. SYNC_SECRET là chuỗi chết, consumer duy nhất đã hỏng → cleanup backlog.
  5. *dot-apr-execute cron /5 vẫn hỏng (curl: (7) localhost:8055) — tiền tồn.
  6. Residue tiền tồn không thuộc mission: container pg-restore-test-20260520T031054Z (từ 2026-05-20) và /tmp/{snap_before,c1_snapshot,c1_introspect}.sql (từ C1 2026-07-17). Theo chỉ thị không cleanup VPS trong mission này — để nguyên, ghi backlog.
  7. DOT_EXCLUSIVITY_ENFORCEMENT_GAP = YES (mục 5) — thực thi hiện dựa vào kỷ luật, chưa có cơ chế cưỡng chế.

17. Next gate

VPS-RECOVERY-PREP

Không mở cleanup. Không mở dự án phân quyền mới. Không sửa UI registry. Break-glass credential chỉ tồn tại tại /etc/incomex/c2b1/breakglass/current.env trên VPS (root:root 0600, thư mục 0700) và chưa từng rời khỏi VPS.

Back to Knowledge Hub knowledge/current-state/reports/c2b1-xv-dot-only-admin-rotation-restart-post-restore-2026-07-23.md