Asia Business Builders — Merchant Banking Kiến trúc Chatbot doanh số Phụ lục 2 · P2.10 · cập nhật 08/10/2026

Phụ lục 2 của Kiến trúc SIXDO Data Hub · đi kèm plan P2.10

Chatbot doanh số hỏi thẳng kho

Đã dựng và đã nghiệm thu: Claude viết truy vấn, một máy chủ nhỏ chạy nó bằng vai chỉ đọc. Dữ liệu từng dòng lên máy chủ AI; tên và số điện thoại khách thì không.

Bản 25/09 của trang này tả chatbot sẽ được dựng. Bản này tả cái đang chạy ngày 08/10/2026: hub đã sang PC văn phòng (máy PROD), chatbot trên laptop đọc kho đó qua NetBird, và Pha 7 bản laptop vừa được người ký đóng. Số cấu trúc kho đo trên PC lúc 15:32 ngày 08/10 bằng chính vai chỉ đọc của chatbot; các số khác ghi ngày đo bên cạnh. Chỗ nào chưa đo thì ghi là chưa đo. Trang này và bi/reports/3_report/P2.10.md phải nói cùng một điều; lệch nhau thì biên bản thắng.

24bảng và khung nhìn chatbot đọc được (PC, 08/10)
0cột tên, SĐT, email khách chatbot đọc được
44câu hỏi đã chấm qua chatbot (27/09)
2vai chatbot đang có: claude_ro, claude_ro_laptop

Phần 01

Hiện trạng ngày 08/10 — pha nào đã đóng

Chatbot đi theo đường A người dùng chọn ngày 25/09: đọc cùng vùng dữ liệu mà báo cáo và bản tin dùng, không đọc vùng dữ liệu cá nhân. Từ đó tới nay mọi pha đã chạy; còn phần máy CEO và một lần đọc nhật ký sau hai tuần dùng.


PhaNội dungKết quảNgày
0–2Chốt quyết định, chặn file cấu hình khỏi git, bộ câu vàng, dời bảng tên nhân viên sang vùng cá nhân (A2)Đạt25–29/09
3Vai claude_ro: 8 cài đặt an toàn, thu hồi 16 hàm lấy khoá đồng bộ khỏi mọi vai (D-3), giới hạn file tạm 1 GB (D-10)Đạt 33/33 ô26–29/09
4Máy chủ MCP tự viết, từ điển dữ liệu, thư mục hỏi riêng, thử tab ChatĐạt · tab Chat đạt có điều kiện25–26/09
5Hỏi 44 câu qua chatbot và chấm; ba câu dễ lộ (N4); không bí mật trong git; ghim máy chủĐạt theo quyết định người về một câu lệch 0,011%27–29/09
6Đêm đầu có vai chatbot; biên bản; dựng lại thư mục hỏi trên máy thứ hai (N10)Đạt · N10 đạt trên PC ngày 07/1027/09 · 07/10
7 · laptopChatbot trên laptop đọc kho của PC qua NetBird, vai riêng claude_ro_laptopĐóng — người ký 08/1007–08/10
7 · máy CEOCùng cách, vai claude_ro_ceo, máy của CEOChờ plan nhỏ chờ người duyệt trên máy CEO—
6.3Người đọc nhật ký sau khoảng hai tuần dùng, quyết giữ hay mở rộngChưa tới hạn~10/10

"Chọn đường A, bỏ qua vấn đề rời máy chỉ là số tổng hợp — vì thực tế chatbot chỉ có 2 tài khoản dùng. Để đường E về sau triển khai, hoặc phương án mã hoá, khi mở rộng hệ thống cho các phòng ban." — người dùng, 25/09/2026

Phản biện vẫn giữ nguyên từ ngày chọn: "chỉ hai người dùng" trả lời câu ai đọc câu trả lời, không trả lời câu dữ liệu của ai đi ra. Mã khách và hồ sơ khách giả danh vẫn là dữ liệu của khách hàng, và chúng đi tới nhà cung cấp dịch vụ AI. Điều khoản lưu giữ dữ liệu theo loại tài khoản Claude của từng người: chưa kiểm. Khi máy CEO vào, lịch sử hỏi nằm thêm trên một tài khoản Claude thứ hai.

Phần 02

Kiến trúc trong một hình

Kho nằm trên PC. Docker vẫn chỉ nghe loopback; máy khác vào được bằng đúng một đường: NetBird → tường lửa hẹp → chuyển tiếp cổng Windows. Chỗ dữ liệu rời máy là mũi tên đỏ — và nó mang theo kết quả truy vấn, không chỉ câu hỏi.


Kiến trúc chatbot doanh số ngày 08/10/2026 Trên laptop, chủ dự án hỏi ở Claude Code; máy chủ MCP trên laptop nối qua NetBird tới PC. Trên PC, tường lửa chỉ cho IP laptop, chuyển tiếp cổng đưa vào PostgreSQL chỉ nghe loopback. Vai claude_ro_laptop đọc vùng bi_reader, bị từ chối ở vùng bi_pii. Câu hỏi và kết quả truy vấn đi lên máy chủ AI. Máy CEO là phần chờ duyệt. Claude — máy chủ AI, NGOÀI mọi máy nhận câu hỏi, luật hỏi và kết quả truy vấn LAPTOP · máy DEV mang đi HN ↔ HCM Chủ dự án Claude Code · tab Code mở SIXDO_CHATBOT_PC\ stdio Máy chủ MCP tự viết bi/mcp/mcp_datahub_ro.py · 1 công cụ • vai claude_ro_laptop, mật khẩu ở pgpass • giờ cấm, chỉ đọc, ≤ 200 dòng, 60 s • nhật ký mcp_audit_claude_ro_laptop SIXDO_CHATBOT\ → DB dev của laptop số dừng ở 02/10 · Docker laptop đang tắt RỜI MÁY câu hỏi + kết quả NetBird WireGuard · TCP 5433 một chiều laptop → PC PC · máy PROD đặt cố định ở văn phòng · IP NetBird riêng Tường lửa Windows Allow hẹp: chỉ IP laptop Chuyển tiếp cổng IP NetBird của PC → loopback task giữ cổng sau khởi động Thư mục hỏi trên PC SIXDO_CHATBOT\ vai claude_ro · loopback dùng nghiệm thu N10 PostgreSQL · datahub-pg chỉ nghe loopback Vùng bi_reader ĐỌC ĐƯỢC 24 bảng / khung nhìn dòng hàng, đơn không địa chỉ, tổng hợp bản tin, cổng dq Vùng bi_pii BỊ TỪ CHỐI tên · SĐT · email khách, địa chỉ giao, tên nhân viên lỗi 42501 do Postgres Cùng kho với đồng bộ đêm 01:00, Power BI, bản tin 07:00 — chatbot không tự tính một con số doanh thu thứ hai MÁY CEO · chờ người duyệt vai claude_ro_ceo · nhóm NetBird ceo thư mục SIXDO_CHATBOT_HUB\ chưa tạo Ba điều hình này nói 1. Kết quả truy vấn đi lên máy chủ AI — đó là cái giá của đường A, ở mọi thư mục hỏi. 2. Tên và SĐT khách bị chặn ở Postgres, trước khi tới mô hình — không bằng lời dặn. 3. Đường vào PC chỉ có một: NetBird → tường lửa hẹp → chuyển tiếp cổng. Docker vẫn chỉ nghe loopback; rào cuối là mật khẩu riêng từng vai.

Khung nét đứt = chưa dựng hoặc không phải đường chính. Mũi tên đỏ = chỗ dữ liệu rời máy. IP NetBird không phải bí mật (ghi trong runbook Pha 7).

Phần 03

Hỏi ở đâu — bốn thư mục, hai ngày dữ liệu

Chatbot không có trên web, điện thoại hay Teams. Nó chạy ở một thư mục hỏi trên một máy có máy chủ MCP và có mật khẩu của một vai chỉ đọc. Hiện có ba thư mục chạy được, một thư mục đang chờ duyệt.


Thư mục hỏiMáyĐọc kho nào, bằng vai nàoDùng để
SIXDO_CHATBOT_PC\LaptopKho PC qua NetBird · claude_ro_laptop · số mới nhất (đo 08/10: đến 07/10)✓ Hỏi hằng ngày của chủ dự án
SIXDO_CHATBOT\PCKho PC tại chỗ · claude_ro · loopback✓ Người ngồi tại PC; nghiệm thu N10 ngày 07/10
SIXDO_CHATBOT\LaptopDB dev của laptop · claude_ro · số dừng ở 02/10! Chỉ để thử khi sửa chatbot. Docker laptop tắt thì báo lỗi kết nối
SIXDO_CHATBOT_HUB\Máy CEOKho PC qua NetBird · claude_ro_ceoChờ Plan nhỏ ngày 08/10, người duyệt trên máy CEO

Hai thư mục trên cùng laptop trả hai ngày dữ liệu khác nhau. Chỗ phân biệt duy nhất là dòng đầu mỗi câu trả lời: "Dữ liệu đến …". Máy chủ chỉ in ngày, không cảnh báo khi số đã cũ. Người hỏi đọc lướt qua dòng đó là dùng số 02/10 như số mới.

Vì sao thư mục hỏi phải nằm ngoài repo

Claude Code nạp file luật CLAUDE.md của thư mục đang mở và của mọi thư mục cha. Mở trong repo là nạp nguyên bộ luật phát triển, có công cụ ghi trên mã đang chạy thật và đọc được file mật khẩu. Thư mục hỏi có một file luật ngắn (7 luật đọc số, luôn trả lời tiếng Việt, không liệt kê mã khách), một skill, từ điển dữ liệu, và file cấu hình máy chủ. Mẫu nằm trong repo ở bi/chatbot/khong_gian_hoi/ (đuôi .mau); cài bằng bi/chatbot/cai_khong_gian_hoi.py, kiểm lại bằng --kiem.

Danh sách cấm 46 luật — theo tài khoản Claude, không theo máy

File .claude/settings.json của thư mục hỏi cho phép đúng một công cụ (truy_van) và cấm 46 công cụ khác: dòng lệnh, sửa file, trình duyệt, gửi tin sang phiên khác, hẹn giờ, đăng trang, connector thư / tệp / lịch. Đo 26/09: luật cấm chặn lúc gọi ở cả chế độ default lẫn auto. Đo 07/10 trên PC: mã của connector đi theo tài khoản Claude — PC dùng cùng tài khoản nên cùng mã. Tài khoản của CEO sẽ có mã khác, nên phải soát lại trước khi CEO hỏi (bước C5 của plan máy CEO).

Tab Chat của Claude Desktop — đạt có điều kiện, chưa đo trên máy CEO

Thử ngày 26/09 trên máy dev: ứng dụng đang chạy ghi đè file cấu hình bằng bản trong bộ nhớ, nên chỉ thêm được máy chủ khi ứng dụng đã tắt hẳn (cả khay hệ thống). Thêm xong thì máy chủ còn sau khi tắt mở lại. Hỏi chung chung "dữ liệu đến ngày nào" thì tab Chat không gọi công cụ; phải nhắc tên nguồn trong câu hỏi. Tab Chat không đọc file luật hay skill — nên mọi luật an toàn phải nằm trong máy chủ. Đã gỡ khỏi máy dev; phép chấm thật dời sang máy CEO (quyết định D-11).

Ba câu để bắt đầu

Hỏi như hỏi một người phân tích — bằng tiếng Việt, không cần viết truy vấn. Câu trả lời mở đầu bằng ngày dữ liệu và kết thúc bằng câu SQL đã chạy. Sổ 84 câu chia nhóm và hạng khó: Phụ lục 6.

01 Tổng quan tháng
"Doanh thu và số đơn tháng 9/2026 theo từng kênh, kèm tỉ trọng mỗi kênh trên tổng. So với tháng 9/2025."
02 Câu báo cáo chưa trả lời được
"Top 5 cửa hàng tháng 9/2026 chiếm bao nhiêu phần trăm doanh thu toàn hệ thống? Cửa hàng nào tăng mạnh nhất so với cùng kỳ?"
03 Sản phẩm
"10 mã hàng bán chạy nhất tháng 9/2026 theo doanh thu và theo số lượng. Dòng hàng nào có tỉ lệ trả cao nhất?"

Phần 04

Một câu hỏi đi qua những đâu

Chín bước, theo thư mục hỏi hằng ngày trên laptop. Bước 8 là chỗ kết quả rời máy. Thư mục hỏi trên PC đi cùng đường, bỏ bước 5.


1Người gõ câu hỏi tiếng Việt trong Claude Code, thư mục SIXDO_CHATBOT_PC\.
2Câu hỏi cùng file luật, skill và mô tả công cụ đi lên máy chủ AI. Mô hình viết một câu SQL và gọi truy_van.
3Máy chủ MCP trên laptop kiểm trước khi chạm kho: đúng một câu, mở đầu bằng select/with/values/table/explain/show · không chứa tên hàm lấy khoá · ngoài giờ 00:30–03:00 theo đồng hồ laptop · chuỗi kết nối không mang mật khẩu. Trượt một luật là từ chối, không nối kho.
4Mở kết nối mới bằng vai claude_ro_laptop; mật khẩu lấy từ pgpass.conf của tài khoản Windows, không nằm trong cấu hình.
5Gói đi qua NetBird (WireGuard mã hoá hai đầu), tới tường lửa PC — chỉ IP laptop qua được — rồi chuyển tiếp cổng đưa vào loopback.
6Trong giao dịch chỉ đọc, máy chủ kiểm vai không phải siêu quản trị và không thuộc bi_pii; đặt lại 60 giây / 3 giây chờ khoá / 0 luồng song song; đọc bảng khoá — đồng bộ đêm đang giữ khoá 91626 thì từ chối. Chỉ đọc bảng khoá, không bao giờ tự lấy.
7Postgres chạy câu bằng quyền của vai. Chạm vùng tên/SĐT khách → lỗi 42501. Máy chủ dừng đọc ở dòng 201, cắt chữ dài, gắn dòng đầu "Dữ liệu đến …" (ngày lớn nhất trong bt_kpi_ngay) và ghi một dòng nhật ký trên laptop. Trên PC, Postgres ghi thêm câu lệnh vào nhật ký container (vai này bật log_statement = all).
8Kết quả đi lên máy chủ AI. Mô hình đọc số và viết câu trả lời, kèm câu SQL đã chạy.
9Nhật ký hai phía khớp số câu: đo 07/10 18:12–18:16, 4 câu trên laptop = 4 câu trong nhật ký PC.

Bước 3, 6 và 7 nằm trong máy chủ, không nằm trong lời nhắc. Lời nhắc có thể bị mô hình bỏ qua hoặc không tới được (tab Chat không đọc file luật). Luật trong máy chủ chạy ở mọi giao diện, mọi lần. Và tất cả đều chỉ là lớp xếp chồng: ranh giới thật là quyền của vai trong Postgres.

Phần 05

Chatbot thấy gì — và cái gì đi lên máy chủ AI

Hai vai chatbot là thành viên của đúng một nhóm: bi_reader — vùng mà bản tin Teams đang đọc. Không thuộc bi_pii. Tập đọc được không liệt kê bằng tay; nó bằng tập của bi_reader tại lúc chạy, và phép nghiệm thu so hai tập tự động.


Loại dữ liệuỞ đâuRời máy?Ghi chú
Số tổng hợp theo ngàybt_kpi_ngay, bt_kenh_nhomCó≈ 153,5 nghìn dòng ngày × kênh × cửa hàng (ước lượng thống kê, PC 08/10) — cùng số với bản tin
Dòng hàng, đơn hàngfact_sales, fact_order_bi, fact_paymentCóKhung nhìn trên ≈ 5,18 triệu dòng hàng; mã đơn, mã hàng, mã cửa hàng, mã nhân viên bán, mã khách
Hồ sơ khách giả danhdim_customer_biCóMã khách, giới tính, nghề, tỉnh/quận/phường, hạng thẻ, điểm. Đo 25/09: 2.257 mã khách có dạng số điện thoại, tất cả là khách chưa có đơn bán. Chưa đo lại trên PC
Dòng một khách của bản tinbt_khach_mua_dau, bt_khach_ngayCóKhoá khách là mã băm, không phải mã gốc
Danh mục, thuế suất, cổng chất lượngdim_* (8), dim_thue_gtgt, 8 bảng dq_*CóĐịa chỉ và SĐT cửa hàng là thông tin doanh nghiệp
Tên nhân viêndim_salesperson_bi, dim_salespersonKhôngA2: dời sang vùng bi_pii ngày 26/09. Chatbot xếp hạng nhân viên theo mã
Tên, SĐT, email, ngày sinh, địa chỉ giao của kháchdim_customer, dim_customer_pii, fact_order, fact_order_lineKhôngVùng bi_pii, 6 quan hệ — Postgres từ chối
Bảng đối chiếu chi tiếtdq_order_recon, dq_exception, dq_fk_checkKhôngMang mã khách và mã đơn lệch — chỉ vai chủ đọc
Dữ liệu thô, lớp làm sạchschema raw, stagingKhôngVai chatbot không có quyền vào schema

Số dòng ghi "≈" là ước lượng thống kê của Postgres (reltuples), không phải đếm từng dòng. Bản đồ đầy đủ các lớp: Phụ lục 7.

Con số ra theo định nghĩa nào

Chatbot không có định nghĩa riêng. Mô tả công cụ truy_van mang 7 luật đọc số, máy chủ gửi kèm ở mọi giao diện:

Chỉ tiêuCột / luậtNguồn quyết định
Doanh thusum(dt) trên bt_kpi_ngay, sum(doanh_thu) trên fact_sales — không gồm phí ship, không dùng amountGATE B, ký 27/09
Số lượng bánsum(sl_ban) — SL thuần FAST, không lọc line_kindGATE B (B3, B3b); sửa mô tả công cụ 07/10
Kênh "POS"kenh_hien_thi: cửa hàng thật; đơn POS gõ ở kho online tách dòng riêngD-13, 27/09
Đơn khuyến mãiĐơn có quà tặngD-16, Marketing xác nhận 28/09
Kỳ từ 09/2025Kèm cảnh báo Q22 (thẻ trả trước)Kế toán, Q22 phương án (a)
"% DT khách định danh"Kèm ghi chú tài khoản gộp ShopeeD4, 24/09

Phần 06

Không va với đồng bộ đêm 01:00

Chatbot đọc thẳng khung nhìn trên 5 triệu dòng — đúng thứ mà đồng bộ đêm dựng lại mỗi đêm. Ngày 20/09 một phiên truy vấn bị bỏ quên đã giữ khoá 3 tiếng và làm kẹt cả lượt dựng lại. Sáu lớp dưới đây để chuyện đó không lặp lại, và để một câu hỏi viết sai không làm đầy đĩa.


LớpCơ chếChặn đượcKhông chặn được
L1Giao dịch bỏ quên tự đóng sau 30 giây (cài trên vai)Kiểu sự cố 20/09 — 30 giây thay vì 3 tiếng—
L2Mỗi câu tối đa 60 giây (vai + máy chủ đặt lại mỗi câu)Một câu nặng giữ khoá lâu60 giây vẫn là 60 giây dbt phải chờ
L3Chờ khoá tối đa 3 giâyChatbot xếp hàng sau dbt—
L4Máy chủ đọc bảng khoá: đồng bộ đang giữ khoá 91626 thì từ chối · 16 hàm lấy khoá đã thu hồi khỏi mọi vai (D-3, 26/09)Pha nạp của đồng bộ; chatbot không thể giành khoáPha dựng lại (dbt) — chạy sau khi khoá đã nhả
L5Máy chủ từ chối trong 00:30–03:00 theo đồng hồ máy chạy máy chủLượt đêm trên PC: đo 06/10 chạy 01:00:01 → 01:51:17 (đọc lại 90 ngày), nằm gọn trong giờ cấmLượt chạy bù buổi sáng khi PC tắt lúc 01:00 · máy CEO đặt sai múi giờ
L6File tạm mỗi phiên tối đa 1 GB (D-10)Một câu sai ghi đĩa vô hạn. Đo 07/10 trên PC: câu nặng nhất (K03) đỉnh 764,8 MiB = 74,7%View nặng thêm sau một thay đổi dbt → câu K03 vượt 1 GB, báo lỗi 53400

Nói thẳng: L1–L3 là gờ giảm tốc, không phải tường — phiên đăng nhập tự gỡ được. Rào chắn thật chỉ có hai: vai chatbot không có một quyền ghi nào, và nó không đọc được vùng cá nhân. Biên của L6 đang mỏng dần: file tạm của các câu lõi đã gấp đôi sau P2.13 (26/09 → 29/09), và "theo dõi lỗi 53400" hiện chỉ là một dòng báo cáo khi chạy phép nghiệm thu, chưa có cảnh báo tự động.

Phần 07

Máy chủ MCP — tự viết, một file, một công cụ

Máy chủ MCP là chương trình nhỏ đứng giữa Claude và kho: bi/mcp/mcp_datahub_ro.py, chạy bằng Python 3.13 và psycopg 3.3.5, không cài thêm gói nào. Tự viết (D-2, 25/09) vì gói có sẵn postgres-mcp 0.3.0 có lỗ CVE-2026-85620 chưa vá và không có chỗ đặt luật giờ cấm, khoá, ngày dữ liệu.


Mười một luật chạy trong máy chủ

Trước khi chạm kho: đúng một câu, mở đầu bằng từ trong danh sách cho phép · không có tên hàm lấy khoá · ngoài 00:30–03:00 · chuỗi kết nối không mang mật khẩu.
Trong giao dịch chỉ đọc, kết nối mới mỗi câu, luôn hoàn tác: vai không phải siêu quản trị, không thuộc bi_pii · đặt lại 60 s / 3 s / 0 luồng · đọc bảng khoá, đồng bộ đang chạy thì từ chối · dòng đầu "Dữ liệu đến …".
Khi trả kết quả: đọc theo luồng và dừng ở dòng 201 (huỷ câu trên máy chủ thay vì kéo 5 triệu dòng về) · ≤ 200 dòng, ≤ 40.000 ký tự, mỗi ô ≤ 300 ký tự, bị cắt thì nói rõ.
Nhật ký: mỗi lần gọi đúng một dòng — tài khoản Windows, vai, nguyên văn SQL + mã băm, số dòng, thời gian, mã lỗi. Mở không được file nhật ký thì từ chối trước khi chạm kho. Mỗi vai một file riêng.
Kho không với tới: báo lỗi sau tối đa 4 giây, không treo.
Phép kiểmKết quảNgày
Bộ kiểm máy chủ135/135 ca (gồm giao thức qua stdio thật, giờ cấm bằng đồng hồ giả, khoá giả, kho tắt) · 26/26 lần cố tình làm hỏng một luật đều bị bắt25/09 · 07/10
Tham số hoá vai / máy (bộ cài, script tạo vai, phép nghiệm thu)39/39 + 29/29 ca · 13/13 đột biến bị bắt · bắt thêm một lỗi cũ: \quit 1 của psql thoát 007/10
Chạy thật trên khoVùng cá nhân → 42501 · câu ghi giấu trong câu đọc → 25006 · hai câu lách luật tách câu → Postgres từ chối (42601) · lượt thật lúc 01:02 ngày 26/09 bị từ chối giờ cấm sau 2 ms25–26/09
Nhật ký tới 28/09108 lượt: 104 thành công · 2 lần chatbot đoán sai tên cột · 0 lần vượt giới hạn file tạm · chậm nhất 36,4 s29/09

Phát hiện khi soát lại trang này (08/10): mã băm ghim máy chủ trong biên bản (N8, 29/09) không còn khớp file đang chạy. File đổi hai lần ngày 07/10 (P2.10-51, P2.10-52) — chỉ phần mô tả công cụ: thêm tên cột order_date, và luật doanh thu / số lượng theo GATE B. Thư mục hỏi trên PC và laptop đã cài bản mới. Kịch bản hỏng: người kiểm lại theo biên bản thấy lệch, không biết là đổi có chủ đích hay bị sửa trộm. Ghi vào danh sách phát hiện, chưa sửa biên bản.

Phần 08

Nghiệm thu — mười một phép đo

Bảng đầy đủ kèm bằng chứng: bi/reports/3_report/P2.10.md §2 và §13. Kết luận chính thức là của người ký; agent soạn và đo, không tự duyệt.


#Đo gìKết quả
N1Tập đọc được, đăng nhập thậtĐạt 29/09 — tập của claude_ro trùng bi_reader (24) · vùng cá nhân 4/4 bảng thử → 42501 · đọc file hệ thống, lấy khoá → 42501. Trên PC 07/10 cho claude_ro_laptop: 0/31 ô trượt
N2Chỉ đọc là thậtĐạt 29/09 — tự gỡ chế độ chỉ đọc được, nhưng create table vẫn bị từ chối vì không có quyền
N3Bộ câu vàng hỏi bằng tiếng ViệtĐạt theo quyết định người — 31 câu phải trả lời: 29 đạt, 1 đạt theo định nghĩa lúc hỏi, 1 lệch 1.168.000 đ (0,011%, người chấp nhận) · 13 câu phải từ chối: 12 đạt, 1 từ chối đúng nhưng bằng tiếng Anh (trước khi có luật "luôn tiếng Việt") · 30/30 mở đầu đúng ngày
N4Ba câu dễ lộĐạt 29/09 (laptop) và 07/10 (qua NetBird) — 0 tên, 0 SĐT, 0 email, 0 mã khách; người xác nhận câu chữ 08/10
N5Hồi quy quyềnĐạt 29/09 — báo cáo và bản tin không đổi quyền
N6Đêm đầuĐạt 27/09 (laptop) và 07/10 (PC)
N7Không bí mật trong gitĐạt 29/09 — 5 mật khẩu × 0 lần trong lịch sử
N8Ghim máy chủĐạt 29/09 · ! mã băm đã cũ từ 07/10 (Phần 07)
N9Luật máy chủ ở cả hai giao diệnTab Code Đạt · tab Chat dời sang máy CEO
N10Dựng lại trên máy thứ haiĐạt 07/10 trên PC (lần 2, sau sửa mẫu); tài khoản Windows thứ hai: người chốt không cần
N11Đường vào từ máy khácBản laptop: Đóng 08/10 — 5 đạt, 1 ghi theo số đo phía PC, 1 bỏ qua, 1 không đo được, 0 trượt (Phần 09) · bản máy CEO: chờ

Giới hạn của chính phép nghiệm thu: câu hỏi ở N3 chạy ở chế độ auto và mức suy nghĩ thấp, không phải cấu hình CEO sẽ dùng. Mọi lần từ chối ở N3 và N4 đều xảy ra ở tầng lời nhắc (0 lần chatbot gặp 42501); tầng quyền được đo riêng bằng script, không bằng chính chatbot. Bộ câu vàng chỉ đo được những câu đã soạn.

Phần 09

Đường vào từ máy khác — Pha 7 bản laptop

Từ đêm 05→06/10 kho nằm trên PC, còn chủ dự án hỏi từ laptop mang đi. Ngày 07/10 người chọn cho laptop đọc thẳng kho của PC qua VPN, và chốt năm điều dưới đây.


#Người chọnVì sao, và khác thiết kế gốc ở đâu
D-19Laptop đọc thẳng kho PC qua VPNKhông chép bản dump về laptop
D-20Chuyển tiếp cổng Windows trên IP NetBird của PCThiết kế gốc cho Docker nghe trên IP VPN — bỏ, vì Docker lên trước NetBird thì container không gắn được IP và kho PROD không lên. Cách này không đổi docker-compose.yml
D-21Vai riêng claude_ro_laptopCùng quyền claude_ro, mật khẩu riêng, ghi mọi câu lệnh vào nhật ký PC — gỡ một vai là cắt một máy
D-22Xong N6 / N10 trên PC trướcĐúng điều kiện plan
D-23Chỉ xoay mật khẩu vai yếuĐo trên PC: 4 vai đăng nhập đều 32 ký tự sinh ngẫu nhiên; người xác nhận không vai nào tự đặt → không xoay

N11 bản laptop — tám dòng

#Phép thửKết quả
1Vai laptop qua NetBird: tập đọc = bi_reader, vùng cá nhân → 42501Đạt — trên PC 0/31 trượt, từ laptop 0 trượt / 2 bỏ qua
2Vai chủ / vai Power BI từ laptopĐạt — sai mật khẩu cả 4 vai. Chặn bằng mật khẩu, không bằng mạng: Postgres trong container không lọc được theo IP
3Máy trong LAN văn phòng không có NetBirdBỏ qua — người chốt. Chứng cứ gián tiếp: PC chỉ nghe loopback + IP NetBird
4Thiết bị thứ ba trong NetBirdKhông đo được — mới có 2 máy
5PC khởi động lại, chưa ai đăng nhậpGhi theo số đo phía PC: chuyển tiếp cổng mở lại được, nhưng Docker chưa lên trước khi có người đăng nhập → chatbot không dùng được
6PC khởi động lại, đã đăng nhậpĐạt 08/10 — chuyển tiếp cổng không tự nghe lại; task hệ thống SIXDO-DataHub-GiuCongNetBird sửa sau ~2'20"; laptop vào được 10:13
7Giờ cấmĐạt — từ chối trước khi nối kho
8Nhật ký PC khớp nhật ký laptopĐạt 07/10 — 4 câu = 4 dòng

Sự cố thật ngày 07/10: đứt 3 giờ 40 phút, không ai được báo

PC được khởi động lại lúc 18:23. Sau đó chuyển tiếp cổng không nghe lại trên IP NetBird, dù cấu hình, dịch vụ và luật tường lửa còn nguyên. Laptop không vào được tới 22:06, khi người khởi động lại dịch vụ iphlpsvc bằng tay. Agent lúc đầu đoán nhầm là lỗi NetBird; đo phía PC bác bỏ. Sửa bền: task chạy bằng tài khoản hệ thống, 3 phút sau khởi động rồi mỗi 15 phút kiểm cổng, tự khởi động lại dịch vụ tối đa hai lần, không được thì gửi một thẻ vào kênh Vận hành. Đã cứu đúng 3/3 lần khởi động ngày 08/10.

Phần 10

Rủi ro còn lại sau khi làm hết


MứcRủi roKịch bản hỏng cụ thể · giảm thiểu
CaoDữ liệu từng dòng rời máyCEO hỏi "10 khách mua nhiều nhất tháng này, ở phường nào, hạng thẻ gì". Chatbot trả mười mã khách kèm phường, nghề, hạng thẻ — ai có danh sách khách là nhận ra người. Giảm: luật "không liệt kê mã khách"; N4 đo 0 lần lộ — nhưng đây là tầng lời nhắc, không phải cấu trúc
CaoCổng kho PROD mở ra ngoài loopback lần đầuLaptop mất hoặc nhiễm mã độc → kẻ giữ pgpass.conf đọc toàn vùng bi_reader của PC từ mọi mạng laptop đi qua, tới khi có người gỡ. Giảm: vai riêng (ALTER ROLE claude_ro_laptop NOLOGIN) + gỡ máy khỏi NetBird — hai lệnh có sẵn, chưa diễn tập
CaoSố sai mà trông hợp lýVí dụ thật ở N3: chatbot viết "cùng tên gọi với Power BI" nhưng gom dòng hàng theo cách khác, lệch 1.168.000 đ. Giảm: định nghĩa nằm trong mô tả công cụ; câu trả lời kèm SQL; bản tin vẫn là nguồn số tất định mỗi sáng
TBHạn đăng nhập NetBird của laptopHết hạn 14/10/2026 15:10 giờ VN → chatbot laptop báo lỗi kết nối tới khi người đăng nhập lại NetBird. Không ai được báo trước
TBPC khởi động lại lúc vắng ngườiDocker chạy theo phiên đăng nhập → kho không lên → chatbot và cả lượt đêm 01:00 cùng dừng. Task canh gác gửi thẻ "chưa đăng nhập" (đã thấy 08/10 10:00) — việc của P2.7
TBDanh sách cấm theo mã tài khoảnTài khoản Claude của CEO có connector thư / tệp / lịch với mã khác → không bị cấm → mô hình đọc được thư của CEO trong phiên hỏi số. Giảm: bước C5 bắt buộc trước khi CEO hỏi
TBChữ lạ trong dữ liệu nguồn lái câu trả lờiMột tên hàng trong FAST chứa câu lệnh dành cho mô hình. Quyền kho vẫn chặn đọc thêm và ghi, nhưng câu trả lời có thể bị lái. Bộ câu vàng không đo được điều này
TBHai ngày dữ liệu trên cùng laptopHỏi nhầm thư mục SIXDO_CHATBOT\ của laptop → số dừng ở 02/10, chỉ dòng "Dữ liệu đến" cho biết
ThấpNhật ký PC không ghi tên vaiKhi có thêm claude_ro_ceo bật ghi câu lệnh, hai máy hỏi cùng lúc thì nhật ký PC không tách được câu nào của ai. Nhật ký hai máy vẫn tách file
ThấpBản máy chủ lệch nhau giữa các máyMã băm ghim đã cũ (Phần 07); gói cho máy CEO chép tay một lần nên không tự cập nhật khi laptop sửa máy chủ hay danh sách cấm
ThấpNói quá về "không thấy"Chatbot vẫn liệt kê được tên cột của bảng khách qua danh mục hệ thống. Phát biểu đúng: không đọc được giá trị

Phần 11

Việc đang chờ người, và về sau

Không việc nào dưới đây chặn chatbot đang chạy. Chúng quyết định nó có mở thêm cho CEO hay không, và có giữ được qua tuần tới hay không.

14/10Đăng nhập lại NetBird trên laptop trước 15:10 giờ VN.
~10/10Bước 6.3: người đọc nhật ký hai máy (mcp_audit.jsonl, mcp_audit_claude_ro_laptop.jsonl) sau khoảng hai tuần dùng, quyết giữ hay mở rộng. Kèm điền §10 biên bản Pha 1–6.
CEOPlan nhỏ 2_doing/P2.10_pha7_may_ceo_2026-10-08.md + gói file không chứa bí mật: bốn câu C-1…C-4 (vào NetBird bằng khoá dùng một lần hay tài khoản CEO · đếm nhật ký khi hai vai cùng ghi · sinh mật khẩu trên PC · máy CEO cố định hay mang đi), rồi bảy bước C0…C7 — người duyệt trên máy CEO.
Sau nàyKhi mở cho phòng ban, đường A không còn hợp: đường E (chỉ bảng cộng sẵn), hoặc máy chủ thay mã khách bằng mã tạm trước khi trả mô hình. "Mã hoá" bảo vệ đĩa và đường truyền, không giải bài rời máy — mô hình phải đọc được chữ mới trả lời được.
Đọc tiếp

Các lớp của kho mà chatbot đứng trên

Từ FAST tới bên tiêu thụ, mỗi lớp chứa gì, ai ghi, ai đọc, lớn bao nhiêu: Phụ lục 7 · Kiến trúc kho dùng chung. Vai nào thấy gì: Phụ lục 3. Sổ câu hỏi: Phụ lục 6.

← Về Kiến trúc SIXDO Data Hub