C2B1-HYB-B0 REV1 — Fresh Recovery Point & Pre-Cutover Configuration Checkpoint (2026-07-22)
C2B1-HYB-B0 REV1 — Fresh Recovery Point & Pre-Cutover Configuration Checkpoint (2026-07-22)
VERDICT:
PASS_C2B1_HYB_B0_FRESH_RECOVERY_POINT_VERIFIEDmission run_idC2B1_PRECUT_20260722T083250Z· host Contabovmi3080463· UTC window 2026-07-22 08:16Z → 09:1xZ READ-ONLY on production (pg_dump snapshot + SELECT only) · zero production mutation · no secret value in this report. Gate opened by this PASS:C2B1-HYB-S1(nothing else).
1. Executive verdict
Đã tạo và chứng minh một mốc lùi (recovery point) tươi cho toàn bộ Directus production trước khi bắt đầu hybrid fast-containment. Toàn bộ chuỗi backup → mã hoá → off-site → tải ngược độc lập → giải mã → restore cô lập → negative-control đã PASS end-to-end; cấu hình (secret + non-secret) đã được đóng băng thành checkpoint có thể lùi. Không tạo identity, không repoint consumer, không rotate credential, không chạm production data/container.
| PASS gate (Section 16) | Kết quả |
|---|---|
| FRESH_ENCRYPTED_OFFSITE_BACKUP | PASS |
| INDEPENDENT_REMOTE_DOWNLOAD | PASS (Drive-side md5+sha1+sha256 + re-download sha khớp) |
| ISOLATED_RESTORE_ON_ERROR_STOP | PASS (PIPESTATUS 0/0/0, PSQL_ERROR_LINES=0) |
| NEGATIVE_CONTROL | FAILED_CLOSED (gpg=2 gunzip=1 psql=3) |
| PRODUCTION_DATABASE_MUTATION | 0 |
| PRODUCTION_CONTAINER_MUTATION | 0 (PRE_SIG == POST_SIG) |
| GIT_OR_PATCH_CHECKPOINT | PASS (commit 714d4d5, path-scoped) |
| PROTECTED_CONFIG_CHECKPOINT | PASS (/root/c2b1-hybrid-precut-checkpoint-20260722T085250Z) |
| PLAINTEXT_OR_PRIVATE_KEY_RESIDUE | 0 |
| H1_CHECKPOINT_PRESERVED | YES (unmodified) |
| DECOMPOSITION_DEADLINE_RECORDED | YES (§13) |
DR flip: NEWEST_PROVEN_RESTORABLE_OFFSITE_PRODUCTION_BACKUP_UTC = 2026-07-22T08:32:50Z (trước mission = 2026-07-20T18:37:01Z từ C2B-PRE-V3).
Facts carried (không hành động trong B0):
- Immutable Nuxt pin vẫn hiệu lực —
incomex-nuxtchạy…/nuxt-ssr@sha256:72715a92885c…fab30(image id72715a92885c), started 2026-07-22T05:24:45Z; compose fallback pin nay đã được commit (§9). pg-restore-test-20260520T031054Z(postgres:16, id0cbc668c76f9, started 2026-05-20T03:10:55Z, up ~2 tháng) vẫn tồn tại → ghi vào historical credential-exposure inventory (§12), không sửa/không xoá trong B0.
2. Hybrid-path authorization
OWNER_AUTHORIZATION = GRANTED_BY_GPT_UNDER_OWNER_DELEGATION
C2B1_PATH = HYBRID_FAST_CONTAINMENT
NEXT_AFTER_B0 = C2B1-HYB-S1
Mission tự chạy qua tất cả safety gate; không tạo identity / không repoint / không rotate trong B0 (ranh giới §2 của prompt giữ nguyên vẹn).
3. Live schedule / resource gate (B0-0)
- TZ hệ thống = Europe/Berlin (CEST +0200). Dòng crontab
37 20 * * * backup-to-gdrive.shkhông cóCRON_TZphía trước ⇒ chạy theo system TZ ⇒ 18:37Z (không phải "20:00 UTC" như comment). Lần chạy nightly kế tiếp: 2026-07-22 18:37Z. - Các job liên quan:
code-backup-to-gdrive.sh13:00Z;pg-backup.sh(local plaintext dump) 00:27Z;qdrant-backup.sh03:00Z. Không job backup/rclone/pg_dump nào đang chạy lúc bắt đầu. - Cửa sổ: bắt đầu 08:16Z, hoàn tất trước 09:2xZ ⇒ buffer ≥ 2 giờ trước nightly 18:37Z (đạt ~9h). Không dừng/đổi lịch job nào.
- Tài nguyên: disk
/90% (avail 10.35 GiB);/dev/shmtmpfs 5.8 GiB (dùng làm GPG home + staging ciphertext, 0 áp lực disk); RAM ok. Restore peak ước lượng ~3.8 GiB, gateFREE ≥ 2×PEAKPASS. Không prune/vacuum/dừng service để vượt cổng.
Verdict gate: cửa sổ đủ ⇒ không HOLD_C2B1_HYB_B0_BACKUP_WINDOW, không HOLD_..._DISK_HEADROOM.
4. Production PRE baseline (B0-1)
- 11/11 container baseline (id·StartedAt·RestartCount·image·status) đóng dấu:
CONTAINERS_PRE_SIG = 2080e8bec8c8d0fb3d043cb3ac8d19df4330ab952a22e848ab05d62478cec376. - Postgres
postgres(id22540b78de8f) · Directusincomex-directus(id2245d86d2f6a, directus/directus:11.5). - DB
directus= 1,795,292,183 bytes (1712 MB);PROD_BASELINE_SIG = fd658d5039140bcd9381ab7dc433a04fc76b372a68572042b6920f45fff17eaf. - Structural: base tables 385 (public 351 · cutter_governance 24 · iu_core 2 · sandbox_tac 8); index 974; PK 375 / FK 161 / UNIQUE 90 / CHECK 364 / excl 1; extensions
btree_gist,pgcrypto,plpgsql,postgres_fdw; users 13 · collections 167 · fields 1497 · permissions 1207 · roles 9. - Append (đại diện): directus_revisions 437,302 · directus_activity 443,560 · birth_registry 1,216,883 · entity_labels 904,545 · system_issues 226,355 · registry_changelog 113,996.
- Newest proven restorable (trước mission) = 2026-07-20T18:37:01Z. Nuxt heap-OOM cycle tiền tồn: chỉ ghi nhận, không điều tra.
5. Fresh backup pipeline (§5)
Replica trung thực pipeline DB đã được C2B-PRE-V3 chứng minh, ghi vào prefix cách ly, miễn nhiễm retention:
docker exec postgres pg_dump -U directus -d directus --no-owner --no-acl | gzip \
| gpg --batch --yes --trust-model always --recipient-file /etc/incomex/backup/directus-backup-recipient.pub --encrypt
set -o pipefail;PIPESTATUS = 0 0 0(gpg kiểm trước theo bài học SIGPIPE). Plaintext SQL không bao giờ chạm đĩa (staging trong/dev/shm).- Recipient FPR (public)
31799F7AC051EBA68FB3F13BDCC1369B371837BA; encryption subkey keyidE800896AF06E9B61(kiểm--list-packets). - Artifact
incomex-prod-directus-db-20260722T083250Z.sql.gz.gpg· 121,276,227 bytes · sha256ed1e76990bc25da6e6585018453725f626420d6ac1d4b8e2512d4e3671af99f1· md5cdd3f89a373fdbd5c1942b9df7485f94. - meta.json (non-secret) mang sha256/md5/bytes/recipient_fpr/
prod_baseline_sig/prod_db_size_bytes/mission. - Prefix riêng:
gdrive-backup:incomex-encrypted-v1/c2b1-precut/C2B1_PRECUT_20260722T083250Z/— không khớp glob retention^vps-backup-(0 file legacy ở Drive root) và không ở Drive root; script nightly hiện chỉ prune LOCAL staging + LOG remote (không deletefile). Không ghi đè artifact cũ. Không heartbeat giả (dùng script riêng, không đụng lock/status/heartbeat của nightly).
6. Remote artifact proof (§6 — không tin luồng upload cục bộ)
rclone lsjson --hash: Drive-side md5=cdd3f89a…, sha1=2296d4d8…, sha256=ed1e7699…99f1, size121276227— cả 3 hash Drive tính server-side khớp local.- Re-download độc lập từ Drive → sha256
ed1e7699…99f1== artifact đã upload. - Prefix chỉ chứa
….sql.gz.gpg+….meta.json; không có.partial/ plaintext sibling.
7. Isolated restore proof (§7)
- Private key
DIRECTUS_BACKUP_GPG_PRIVATEKEY_RECOVERYv1 (projectgithub-chatgpt-ggcloud, SAcursor-ci-builder@…) → import vào tmpfs GPG home/dev/shm/…/gnupg(0700); secret-key fpr31799F…1837BA+ subkey…E800896AF06E9B61xác nhận. Key không bao giờ in ra, không chạm đĩa bền. - Integrity (decrypt→gunzip→awk, plaintext chỉ trong pipe RAM): CREATE_TABLE=385 · TOTAL_LINES=3,939,249 · DUMP_COMPLETE=YES, PIPESTATUS 0/0/0.
- Môi trường cô lập: container
c2b1-precut-restore-<rid>, networkc2b1-precut-net-<rid>--internal, PUBLISHED_PORTS = map[] (0 host port), volume riêng, không join network production; postgres:16 tunedfsync=off full_page_writes=off synchronous_commit=off max_wal_size=1GB. - Pre-create roles bắt buộc (fdw user-mapping):
workflow_admin(bootstrap superuser) ·directus·context_pack_readonly; DBdirectusownerdirectus. - Restore streaming
gpg -d | gunzip | psql -v ON_ERROR_STOP=1: PIPESTATUS gpg=0 gunzip=0 psql=0 (psql kiểm trước); PSQL_ERROR_LINES=0; free/10.31→7.79 GiB (peak ~2.52 GiB) rồi hồi phục. - Structural equivalence restored == production, EXACT trên 17 khoá: base_tables_all 385 (public 351/cutter_governance 24/iu_core 2/sandbox_tac 8), indexes 974, pk 375, fk 161, uniq 90, chk 364, excl 1, extensions
btree_gist,pgcrypto,plpgsql,postgres_fdw, users 13, collections 167, fields 1497, permissions 1207, roles 9. 6 bảng append: BAND_OK (baseline ≤ restored ≤ prodPOST). "Table tồn tại" không được coi là PASS — cổng làON_ERROR_STOPexit code + structural match.
8. Negative control (§8 — fail-closed)
- Fixture = 2 MB đầu của ciphertext đã tải lại; restore vào DB throwaway
c2b1_precut_negctl(không bao giờ target production). - Kết quả:
gpg=2 · gunzip=1 · psql=3→ FAILED_CLOSED;gzip: unexpected end of file;ERROR: missing data for column … COPY birth_registry(ON_ERROR_STOP bắt). Không stage nào trả 0 ⇒ khôngFAIL_..._NEGATIVE_CONTROL_FALSE_GREEN.
9. Git checkpoint (§9)
- Repo cai quản =
/opt/incomex(composedocker/docker-compose.yml); branchfeat/s177-sprint1-round-a; remote = NONE (local-only, không push). - H1 compose pin (tracked, uncommitted, tách được) → commit path-scoped duy nhất file
docker/docker-compose.yml:- pre_head
2ce85a63aaffc664225310c23b9b8788986fa4f3→ checkpoint commit714d4d5411685dffcc03b37e2fe0d08adf92d190. - compose blob
39bc281(nuxt-ssr:latestfallback) →ba914060(@sha256:72715a…fab30). Diff = 1 dòng duy nhất. - message:
checkpoint(c2b1): pre-hybrid-containment configuration.
- pre_head
- Bảo toàn công việc không liên quan: dirty entries 105 → 104 (chỉ compose rời khỏi dirty); 104 thay đổi s177 khác không stage, không đụng. Không stage
.env(gitignored L50), không stage backup/checkpoint.GIT_CHECKPOINT = COMMIT(nhánh "commit đúng file cần thiết", không phải PATCH_ONLY).
10. Protected configuration checkpoint (§10)
/root/c2b1-hybrid-precut-checkpoint-20260722T085250Z— dir 0700 / file 0600 (audit: non_0700_dirs=0, non_0600_files=0), 27 file, 119 KB,MANIFEST_SIG = 59335f29c9ad89e0dc70a1acafbb2f91cbd9d44fa0699944967107d24da49b4d.- secret/ (root-only, KHÔNG vào Git/KB/Drive/report):
docker/.env,/opt/incomex/.env,/etc/incomex/agent-data.env,/etc/incomex/reconcile/directus-admin.env,cron-env.sh, claude-kb/.env, claude-mcp/.env, root-crontab. - effective/ (env-bearing docker inspect): incomex-nuxt / incomex-agent-data / incomex-directus / postgres.
- config/ (non-secret): 3 compose file, backup-to-gdrive.sh (sha
19e43432…3288b= bản F1-repaired), reconcile-*.sh, recipient.pub (sha5e6c0864…). - evidence/: containers-pre, prod-baseline, restored/prodPOST structural kv (sha đồng nhất
4c3cdaae…⇒ restored==prod), stageA/B log, meta.json, git-checkpoint-meta + H1 pin patch. ROLLBACK-INDEX.mdmô tả file nào phục hồi ở phase nào — reference only, KHÔNG auto-execute. Checkpoint không nằm trong git root/Drive/KB.
11. H1 checkpoint preservation (§11)
/root/nuxt-img-h1-checkpoint-20260721T150753Z — tồn tại, mode 700 root:root, 19 file, newest internal mtime 2026-07-21 17:53 (đều trước mission) ⇒ UNMODIFIED. Không gộp/di chuyển/xoá. rollback.sh network-independent còn nguyên.
12. External-consumer safety gate (cho C2B1-X tương lai) + historical exposure inventory
Bootstrap admin duy nhất = admin@example.com (id 6abdec55-d911-44df-af96-3cf60b9654af, admin_access qua directus_policies). Đo từ directus_activity/directus_sessions (KHÔNG đọc cột token):
| Class | events | distinct IP | logins | last use |
|---|---|---|---|---|
| EXTERNAL (ngoài VPS) | 13,604 | 171 | 2,751 | 2026-07-03 |
| internal (172.x docker) | 264,822 | 7 | 1,797 | 2026-07-22 06:01 (đang chạy) |
| vps-self (38.242.240.89) | 148,925 | 1 | 104 | 2026-07-17 |
- Có sử dụng external thực tế trong lịch sử (171 IP, dải ISP Việt Nam, login tương tác Directus admin-UI), lần cuối 2026-07-03 (~19 ngày trước). Active sessions hiện tại: 33, TẤT CẢ nội bộ
172.18.0.5— 0 session external đang mở, nhưng credential vẫn hợp lệ. (Không suy đoán máy cá nhân chạy script gì — chỉ ghi facts.) - ⇒
OWNER_EXTERNAL_DIRECTUS_ADMIN_CONSUMER_DECLARATION = REQUIRED_BEFORE_C2B1_X. Điều này không chặn B0 hoặc H-S1; chỉ là safety gate trước rotation (nếu không khai báo, xoay credential có thể khoá đăng nhập admin-UI của Owner/nhân sự từ máy ngoài).
Historical credential-exposure inventory (carry, không hành động B0):
pg-restore-test-20260520T031054Z(postgres:16, id0cbc668c76f9, up ~2 tháng) — leftover restore-test container từ dot-iu-cutter v0.5 (directus_legA_cut_pre_grant_20260520T031054Z.dump); chưa retire, chờ Owner. Không sửa/xoá./opt/incomex/evidence/lenh3d2-…/nuxt-runtime-canary.env— file env-canary cũ mang NUXT runtime secret nằm trong cây repo (informational; xử lý ngoài B0).
13. Decomposition deadline covenant (§13)
TRANSITIONAL_IDENTITY_PURPOSE = TEMPORARY_CONTAINMENT_ONLY
TRANSITIONAL_IDENTITY_ADMIN_ACCESS = FALSE
C2B1_DECOMPOSITION_START_DEADLINE = within 24 hours after C2B1-X PASS
C2B1_DECOMPOSITION_COMPLETE_DEADLINE = within 7 calendar days after C2B1-X PASS
Không được hạ transitional identity thành backlog không thời hạn; nó chỉ là containment tạm thời, không có admin access.
14. Cleanup / no-production-mutation proof (§14)
- Xoá (mission temp): restore container/volume/network (self-clean Stage B, residue 0/0/0), tmpfs GPG home + imported private key, downloaded ciphertext (
/dev/shm/c2b1-precutresidue 0), negative-control fixture + DB, stage scripts. - Giữ: encrypted off-site backup (Drive), meta.json, root-only checkpoint, git commit
714d4d5, H1 checkpoint, evidence work dir. - Zero production mutation:
CONTAINERS_POST_SIG == PRE_SIG(2080e8be…c376), full diff empty, image identity unchanged (Nuxt không restart). Structural counts NOW == PRE (351/13/167/1497/1207/9). Chỉ SELECT + pg_dump read-only;directus_users.tokenkhông bao giờ đọc. - Residue 0: restore container/vol/net = 0; default keyring secret keys = 0; plaintext SQL from mission = 0; tmpfs c2b1 = 0.
- Nightly pipeline nguyên vẹn: lock free, status vẫn
PASS/COMPLETE(run 20260721T183701Z). Disk avail final 10.34 GiB (≈ baseline). Drive: 4 artifact nightly root +nuxt-image-rescue/untouched; chỉ thêmc2b1-precut/<rid>/.
15. Exact gate opened
PASS_C2B1_HYB_B0_FRESH_RECOVERY_POINT_VERIFIED
⇒ opens: C2B1-HYB-S1 (chỉ mở đúng gate này)
STILL HELD: C2B1_ROTATION = HOLD ; TRANSITIONAL_IDENTITY chưa tạo ; consumer chưa repoint ; credential chưa rotate.
BEFORE C2B1-X: OWNER_EXTERNAL_DIRECTUS_ADMIN_CONSUMER_DECLARATION = REQUIRED.
Search terms
PASS_C2B1_HYB_B0_FRESH_RECOVERY_POINT_VERIFIED · C2B1_PRECUT · TRANSITIONAL_IDENTITY_PURPOSE · C2B1_DECOMPOSITION_COMPLETE_DEADLINE · OWNER_EXTERNAL_DIRECTUS_ADMIN_CONSUMER_DECLARATION
Provenance
run_id C2B1_PRECUT_20260722T083250Z · artifact sha256 ed1e7699…99f1 · Drive gdrive-backup:incomex-encrypted-v1/c2b1-precut/C2B1_PRECUT_20260722T083250Z/ · git 714d4d5 · checkpoint /root/c2b1-hybrid-precut-checkpoint-20260722T085250Z (sig 59335f29…9b4d). No secret payload or precise credential value appears in this report.