LỆNH 1.6 — Báo cáo khôi phục có kiểm soát 40 DOT bin bị lùi
LỆNH 1.6 — Báo cáo khôi phục có kiểm soát 40 DOT bin bị lùi
- Thời điểm thực hiện: 2026-07-15 (Asia/Ho_Chi_Minh; VPS CEST)
- Phạm vi: đúng 40 file
/opt/incomex/dot/bin/*trong allowlist forensic - Nguồn khóa: local DOT Git object
5a2e1bf998d89813729d6f10a0d87849075738b9 - Verdict: PASS — đã khôi phục 40/40; dừng chờ Owner
1. Ba tuyên ngôn và rào chắn
- Hệ thống vận hành thật nằm trên VPS; mọi kết luận dưới đây dựa trên output thật tại
/opt/incomex. - PostgreSQL 16 là DB duy nhất; nhiệm vụ này không chạy SQL, không ghi DB và không chạy DOT nghiệp vụ.
- DOT là cổng ghi duy nhất; Nuxt chỉ đọc. Lệnh 1.6 không bắt đầu Balo sync.
Không deploy/recreate/restart/reload; không sửa Nuxt, nginx, compose, container, scheduler, workflow hoặc GitHub. Workflow Deploy to VPS được kiểm trước và sau, đều là disabled_manually.
2. Recovery script và nguồn
- Script VPS:
/opt/incomex/evidence/dot-recovery-1.6-20260715T135844Z/recover-40-dot.sh - Bản script trong KB tree:
knowledge/current-state/reports/evidence/dot-recovery-1.6-20260715T135844Z/recover-40-dot.sh - SHA256 script:
1780c128610686858c0d70a9eab305b50ec0c35e20d932cf9eefa0819a2395f5 - Mode script VPS:
700, ownerroot:root bash -n: PASS;shellcheck: PASS.- Source được đọc bằng
git show 5a2e1bf...:<path>từ local object của/opt/incomex/dot; không lấy blob từ GitHub remote. - Dry-run:
DRY_RUN|PASS|zero_dot_writes=true. - Apply:
RECOVERY|PASS|restored=40. - Verify của script:
VERIFY|PASS|sha=40/40|bash_n=40/40|remaining_tracked_diff=sql/approved-sql-manifest.tsv. - Verify độc lập sau apply:
INDEPENDENT_40|PASS|sha=40/40|mode=40/40|bash_n=40/40.
3. Bảng 40 file
SHA nguồn = SHA sau vì verify độc lập đã so byte 40/40. Các SHA dưới đây là SHA256 đầy đủ. Version lấy từ biến runtime VERSION= khi có; riêng header comment của dot-apr-propose còn ghi 2.0.0, nhưng biến thực thi và yêu cầu forensic đều là 2.0.2.
| # | Path | SHA trước | SHA nguồn = SHA sau | Mode trước→sau | Version trước→sau | KQ |
|---|---|---|---|---|---|---|
| 1 | bin/dot-apr-execute |
d1bd8fc7dc8b2c681a8f42dc58cdd6ab39a420e0327c109c28d1a8780b5cab97 |
06211e6dc4d90ec4fbac26c521c146bef32c73ec97c0081783fa2986c0cbb8cc |
755→755 | 1.0.0→2.2.0 | PASS |
| 2 | bin/dot-apr-health |
ac113934f70c6d41794d511c441848b897c4430f1f91ca8ab28ef410719061eb |
8cade4886f65d33edfb3dc6139db6ba19ac7c325bf35380108edb393891f5036 |
755→755 | 1.0.0→1.0.0 | PASS |
| 3 | bin/dot-apr-propose |
9dc5365ea29249f59782535b2dca4c3d584cb8ff988eabc101bba8aee403337f |
d2ed0283d3d7ab2f6dad24a4c69cb5830a455a6b39d2bc91b2ce77f6c2923da4 |
755→755 | 1.0.0→2.0.2 | PASS |
| 4 | bin/dot-birth-backfill |
f1aa90f46cf9eabb173af0f8a48acde83dfb6009990ac5d23e05bb83f8a8d4a3 |
2a5f049fafe016447bf5b712e26e0221b83c42e0ff47f22feaf2c767a08957b9 |
755→755 | 1.0.0→1.0.0 | PASS |
| 5 | bin/dot-birth-trigger-setup |
38f17ab2d886eb5fc8e28f88dc60e85053945dcfe8e5e69946bb1248959227a7 |
e79a65629ad07a7fb43b38f7384fe06207e69405277fb8a2ef174653a5bcff4c |
755→755 | 1.0.0→1.0.0 | PASS |
| 6 | bin/dot-collection-create |
e9062d8c022c77cee76ea190572d053562aabc49bee62b50ff972c5c9aa0898d |
cd20287fdc9ce5d46aab58c63a37c9f99dadb62afb4b6e7d1e69157b9f77846d |
755→755 | 2.0.0→2.0.0 | PASS |
| 7 | bin/dot-collection-field-sync |
63f4914a3888e1ccff82511678d7f6cce873d65c09bd9182d57f6b6cc24c8574 |
8322dca28668a365b8b28599d1e9ca4d286998ce9cc9cf786ceebdc535dcc8ef |
755→755 | 1.0.0→1.0.0 | PASS |
| 8 | bin/dot-collection-health |
9cf3c62f9b84496b74414824026e8dde452ea98e19a393e3a1aa29cb3aa70f5c |
85a32a0469c28432239d1fae4cf48cd7fb196335bd96ee41a407831dfb12e8d8 |
755→755 | 2.2.0→2.2.0 | PASS |
| 9 | bin/dot-coverage-inspector |
c8fb9bbf7a741e3ad7d6de81a80068a9ad7389d439587c4fb372e0068d566000 |
1c080791eb43f28cbc5c4dfb505a5967945d9196bfa13d24118c22986c08f386 |
755→755 | 1.0.0→1.0.0 | PASS |
| 10 | bin/dot-cron-matrix-setup |
efc1c94a0530e1868159917f47a7c8489bef3c52fd194f11b4376594ad0fa981 |
67914a1b5c37e29a47ff853b89307b2ebb5d2bfc70360c520c57dd8be5cfa531 |
755→755 | 1.0.0→1.0.0 | PASS |
| 11 | bin/dot-cron-pivot-setup |
b2a2758c0128bd0ab146f6b8812f9b228010bca23c478b497f916484221885b7 |
6fbf1a47930b99c990cbd952f43c5e9e1fd36a35e2a755cc5a41c39d8ca6ecb9 |
755→755 | 1.0.0→1.0.0 | PASS |
| 12 | bin/dot-dot-coverage |
18fb001c511d98554ecb23fa17b79357767e52fa2a58760928f4fcc8f053681f |
cca1f47f50e506ee8a0f8ce168354f4953b2586948d389c45ae175614404da9d |
755→755 | 1.0.0→1.0.0 | PASS |
| 13 | bin/dot-dot-health |
02974ac79177dd08afc0e7ca3e357613147c78f51509bf5d530ec1f6156f6ebe |
28bc0b8e1ad93d380045e5e3cff6a6934d67c4b9bfffdd51ac5caaa1630a6bf2 |
755→755 | 1.0.0→2.0.0 | PASS |
| 14 | bin/dot-dot-register |
9c594efdd81c4cfe372a1801637b31762e9020e04a2322b6e1f61ed31906286a |
31d5cf1508c7950cc30a2a6abb46d7cee868e1cbf951a6095ff0aee7ba48583f |
755→755 | 1.0.0→1.0.0 | PASS |
| 15 | bin/dot-entity-deprecate |
446ff4cc15c6d7e5754d57c4e3db1ce5d83d42e06ef904eaa9a0c38f7a301057 |
77e53db286ea9e5fff5abff0ea246786632bcf6a0e3066cbc490b475c34c65e8 |
755→755 | 2.0.0→2.0.0 | PASS |
| 16 | bin/dot-entity-retire |
f518dfd990f4a345783f4f5790bb84edaea84412fe1b29a2e2965aa06445d7cc |
af8e8cd2fdb33b314d7eab3ef7435f412e0c8b24964869a9e46437ccd0c492c1 |
755→755 | 2.0.0→2.0.0 | PASS |
| 17 | bin/dot-inspect-pen |
221d9b7c5f7ee14f46a654b7975be37849ffb4f6f3ffa4a4be818470531cb987 |
5a0cb24d92e05f6ecf8a5ee9a8b95ad01fba1d7e09b9460fb11c288e1b7993dc |
755→755 | 1.0.0→1.0.0 | PASS |
| 18 | bin/dot-knowledge-search |
2e4c202efc1f6a70383562b7e9812f2599cc27aee87a771b57199e216a503700 |
1e54132430a692479443d5c4333c54e32f4202b725e4b6870eec38eb4b8b3ee0 |
755→755 | NA→NA | PASS |
| 19 | bin/dot-label-trigger-setup |
07e9845f23c5970a77f0c777f2aba8296d57ee7b8c2d5f9840dab2504f291c9e |
16ee40abef8a0b3b036e7f62dd140880a18c5e6a67c1942da12dac4fa7bdabd2 |
755→755 | 2.0.0→2.0.0 | PASS |
| 20 | bin/dot-matrix-declare |
6665004709c6d0425f67ec5c1deb3474ce62d77360b711abea10f924c65e5c2b |
0ff96bb7783a7964e1ccc047553b554ae879a1b5c32690f72afae28469bc5a7c |
755→755 | 1.0.0→1.0.0 | PASS |
| 21 | bin/dot-matrix-health |
fe9a9e5d2f070e6b3a898ea77124bb0d2c0b405315012d092bb801a9957ca95b |
b024938304101b2689935511b87501296fe0ddfbd8aa95f23c1d213f851ce1d8 |
755→755 | 1.0.0→1.0.0 | PASS |
| 22 | bin/dot-matrix-retire |
e1f9f925f1a5857423c85deadb40947915f8670e34d84c80a4eb1c9703d25fe3 |
3666ab0a9f42c3b468d7a8eb877314d534c211e78153de8c7a56d0bf55ac8cff |
755→755 | 1.0.0→1.0.0 | PASS |
| 23 | bin/dot-matrix-update |
f7fd8636a503c81252018522e5e5a11de556c5e57eec211e6f95858b8a629b44 |
aacff34d143164ac6e139c8163703732102a8659266eafeaf8a8c1be9a9fd7e6 |
755→755 | 1.0.0→1.0.0 | PASS |
| 24 | bin/dot-migration-s127d-legacy-origin |
2055199d0f66cac8ee2b4549d680ba927b0d6038dde8285b9fa962d636eee3bd |
9c32c0ca5f98906dd83bdc72ce9d35e0c9c07054a8a2698bc6b1442595a67155 |
755→755 | 1.0.0→1.0.0 | PASS |
| 25 | bin/dot-migration-s128b-dead-links |
95b0320797a14aa5b2af330930cec1a4c0adb9a18c35c4c8ba52fcb576586397 |
b062a9c0113a1ba936f527ca011b854f92286357acfa094a70ad7877c0d0e311 |
755→755 | 1.0.0→1.0.0 | PASS |
| 26 | bin/dot-migration-s155-p1b |
0f3af8bdfa9fea20756587612f20c708c08ce78ebf8a5e7da01fc9a9b161175c |
79b34ac8c6f56646046b26d7c6d6376b4d6326011eadbd6b13f2dad043989918 |
755→755 | 1.0.0→1.0.0 | PASS |
| 27 | bin/dot-nrm-draft |
f0ea2fe5e5074bf91e2b45f23c6f9d8d8d116d680c1a6fa3814cea75e76660e2 |
617704a093db543e3cefe3c072cb0451102a28d32c38a6a00d1e33a61754cd1f |
755→755 | 1.0.0→1.0.0 | PASS |
| 28 | bin/dot-pg-audit-ensure |
4ce159193ab65a48bfa071061f446ec4d6f6d8552f3e510868d3290743da8156 |
51f5f79b9a0b4b0b9ed482a4dfaa68bcf3a88e143bde11cb2723c21972483036 |
755→755 | 2.0.0→2.0.0 | PASS |
| 29 | bin/dot-pg-triggers-ensure |
ac98005ddae5d41f493c8045677ad81eca0a2902a6948ca6f539d8fadd8b2599 |
a3aeacd0513d4ea230c112d9b7603d8ec3a59001d267d88f4e151826299215c4 |
755→755 | 1.0.0→1.0.0 | PASS |
| 30 | bin/dot-pg-views-ensure |
bbebebbee27cf371b31697b4284d3c4f25d5ba1a0c33c24973f34258968208b8 |
015f06411777b03755dc619a0db81c8fbe007dc947e6ee882aa0acafa6fefecd |
755→755 | 12.0.0→12.0.0 | PASS |
| 31 | bin/dot-pivot-declare |
fcf16faaaacb8c903a2d2a0341cff04d95d9a4b0653819cfb537fae1ccc06d55 |
7029fe88f96268b929e305739724b6f646984197e0fb6452f52ec5b6169b3c06 |
755→755 | 1.0.0→1.0.0 | PASS |
| 32 | bin/dot-pivot-health |
5c0fa4af5e8ccacc116628b64e05f22332c64edf0d3d27f9ddd151fde292aa47 |
efe5b1085c79c7bd9922756cde9fa7f9b9ef28dfd9ba21fc2d0458191deb37df |
755→755 | 1.0.0→1.0.0 | PASS |
| 33 | bin/dot-pivot-virtual-create |
7d2c366590c97db8143715150c511e5c0c112a91d231cb6529e7b89697b4093f |
9823e61fec5a97b35c67ebeabe4391fac448168ef5063662c1ece880e72104e8 |
755→755 | 1.0.0→1.0.0 | PASS |
| 34 | bin/dot-production-truth-gate |
5a649eec7e318581fdef45ad952ab7ab289cf9c29207fdc63f32e5dfd3eddaf3 |
5994a9036257f27bb853b414b913c08fc646abf588521c72f5798be770099a06 |
755→755 | 1.0.0→1.0.0 | PASS |
| 35 | bin/dot-schema-birth-registry-ensure |
50586a7ab7767f21143f1081b550e2be987a97ebf3a1a07e2f271ba332a98297 |
f7afe712ee1b35c037fd149519b31acf8e291b51804df7d5a7b06fb55140a262 |
755→755 | 1.0.0→1.0.0 | PASS |
| 36 | bin/dot-schema-dot-origin-ensure |
ab19742489ec3f0a7b86da584b998b6040ef0ac4a85c72e8706212b17a21dabb |
0b534fd97b4bd338315f22247af92c8c7dcc95a59f43445ad7600a7187669623 |
755→755 | 1.0.0→1.0.0 | PASS |
| 37 | bin/dot-schema-meta-catalog-add-composition |
90ab27f5e735bbc723282454bc16e0130a904886fb2bbf3c689eede266c8412b |
588b7d707af2844230b4032d52a506b303cab55889c55a813f3c3c27e9dfda26 |
755→755 | 1.0.0→1.0.0 | PASS |
| 38 | bin/dot-schema-species-tree-ensure |
3ac0ee2be06e6ea8cd62c3bf39124cb97a7f9f511399244fb20676490c57a927 |
dad0e2994816966e8d983f4efb7fd4a0329f2fea9c9a995aff06ea1e5eea8b65 |
755→755 | 1.0.0→1.0.0 | PASS |
| 39 | bin/dot-schema-taxonomy-pg-apply |
3cd6784d1604b45c892bb6300fa1c90af86a7eb9b1b7153804b1d155aa789a4e |
c9354c5f5db4da3ddf9e19ba72e4674a706e86e820cf5c5b55da16b56029ffb0 |
755→755 | 1.0.0→1.0.0 | PASS |
| 40 | bin/dot-schema-trigger-registry-ensure |
2985158295f88684f95107b04f80ca03cc69c0d6f532858607d78c33b7a80a01 |
941e5e0cac89851503445587409135562a939656f1083c5eb63663b790e55fc5 |
755→755 | 1.0.0→1.0.0 | PASS |
Ba hồi quy trọng yếu đã trở về đúng biến runtime:
VERSION|bin/dot-apr-execute|VERSION="2.2.0"
VERSION|bin/dot-apr-propose|VERSION="2.0.2"
VERSION|bin/dot-dot-health|VERSION="2.0.0"
4. Manifest và cổng ghi
sql/approved-sql-manifest.tsv
- SHA trước:
0a96f8579068808e6e1ab678c5789a3d4255918e862b11c695f740280ce425be - SHA sau:
0a96f8579068808e6e1ab678c5789a3d4255918e862b11c695f740280ce425be - Số dòng
sua-re/*trước/sau:6/6. - Tracked diff duy nhất còn lại so với commit nguồn:
sql/approved-sql-manifest.tsv, đúng ngoại lệ phải giữ.
bin/dot-pg-atomic-apply
- Không thuộc allowlist 40; không được sửa.
- Tồn tại; mode
755;bash -nPASS; 2 SQL reference liên quan đọc được. - Current SHA:
cf90611d2c762f26865781f585e61bc4225ab39a6c60255e2f6cc199d180cd62. - Source SHA tại
5a2e1bf...:cf90611d2c762f26865781f585e61bc4225ab39a6c60255e2f6cc199d180cd62. - Kết luận: PASS — KEEP_UNCHANGED.
- Điều kiện bổ sung đã được đánh giá: vì SHA khớp nguồn tin cậy nên cờ
HOLDvà điều kiện chặn Balo không bị kích hoạt. Không có Balo sync nào được bắt đầu trong Lệnh 1.6. Nếu cổng này phát sinhHOLDở lần kiểm sau, nhiệm vụ Balo sync phải bị chặn cho tới khi cổng được xác minh/khôi phục trong một lệnh riêng.
5. Backup, rollback và zero-touch
- Backup ngoài DOT tree:
/opt/incomex/evidence/dot-recovery-1.6-20260715T135844Z/backup - Metadata:
backup/metadata.txt; bảng SHA/mode/uid/gid:backup/files.tsv; preimage:backup/preimage/bin/*. - Backup integrity độc lập:
BACKUP_INTEGRITY|PASS|sha_mode_owner=40/40. - Rollback command (chỉ dùng nếu Owner ra lệnh):
/opt/incomex/evidence/dot-recovery-1.6-20260715T135844Z/recover-40-dot.sh rollback
Không chạy rollback vì apply và verify đều PASS.
Zero-touch được đối chiếu SHA/ID/StartedAt trước-sau:
- Balo/DB: không SQL, không DOT nghiệp vụ, không ghi DB.
- Nuxt artifact: SHA không đổi.
- nginx config: SHA không đổi.
- compose: SHA không đổi.
- 6 container: ID, image và
StartedAtkhông đổi; không restart/recreate. - scheduler/crontab: SHA không đổi.
- GitHub: không ghi; workflow vẫn
disabled_manually. find bin -name '*.recovery.*':0file tạm tồn dư.
6. Evidence production
Evidence root trên VPS:
/opt/incomex/evidence/dot-recovery-1.6-20260715T135844Z/
├── recover-40-dot.sh
├── workflow-state.txt
├── dry-run.log
├── apply.log
├── post-verify.log
├── zero-touch-before.txt
├── zero-touch-after.txt
└── backup/
├── metadata.txt
├── files.tsv
└── preimage/bin/* (40 file)
Các dòng kết luận production:
DRY_RUN|PASS|zero_dot_writes=true
BACKUP|PASS|files=40
RECOVERY|PASS|restored=40
INDEPENDENT_40|PASS|sha=40/40|mode=40/40|bash_n=40/40
BACKUP_INTEGRITY|PASS|sha_mode_owner=40/40
ZERO_TOUCH_PROTECTED|PASS|manifest_compose_nginx_nuxt_containers_crontab_unchanged
MANIFEST|sha=0a96f8579068808e6e1ab678c5789a3d4255918e862b11c695f740280ce425be|sua_re_rows=6
TRACKED_DIFF|sql/approved-sql-manifest.tsv
BIN_DIFF_COUNT|0
ATOMIC_GATE|PASS|action=KEEP_UNCHANGED|balo_block=NOT_TRIGGERED
7. Kết luận và điểm dừng
Lệnh 1.6 hoàn tất PASS đúng phạm vi: 40/40 DOT bin đã trở về byte của local commit khóa; manifest hợp lệ được giữ nguyên; cổng ghi PASS và không bị sửa; các vùng cấm không đổi. Không deploy và không chuyển sang Balo sync. DỪNG chờ chỉ đạo Owner.