KB-7B8D rev 17

HVU UI03–B3 — B2.1 hoàn tất; B3 dừng và rollback

42 min read Revision 17

HVU-UI03 — UI đã lên KB

Master list · 22/09/2026 · yêu cầu Owner trực tiếp

Khoảng cách logo theo Owner: runtime 2d361c5; giảm riêng margin-right GPT từ 4px xuống 1px để bù khoảng trắng trong SVG. Claude giữ nguyên; kích thước/đuôi tên/dữ liệu không đổi. Build 408776 bytes, publish atomic.

Cân kích thước logo theo Owner: runtime 5ed0e52; chỉ thêm CSS GPT 21×21px, Claude giữ 18×18px để cân cảm quan. Build Renderer bytes 408710, publish atomic; không thay logic hoặc dữ liệu.

Sửa logo theo Owner 23/09: runtime c94d0d4. Chỉ thay tiền tố GPT/Claude bằng biểu tượng, giữ nguyên đuôi tên hiển thị (Chat/Work, Chat/Cowork, Code CLI…). Hai logo 18px, bỏ nền/crop. GPT dùng SVG nguyên bản OpenAI-black-monoblossom.svg tải trực tiếp https://cdn.openai.com/brand/OpenAI-Logos-2025.zip; bỏ PNG ảnh chụp trước đó. Build 408592 bytes; kiểm browser ảnh loaded=true, width=18, suffix đúng Chat/Work/ Chat/Cowork; identity/signal/polling byte-identical. Không sửa nguồn GitHub hoặc bảng phiên dịch A9.

Logo actor — Owner 23/09: runtime 3425683; chỉ renderer VPS đổi tên hiển thị bắt đầu GPT/Claude thành logo (GPT dùng PNG Owner gửi, Claude SVG Simple Icons nhúng màu #c2785b). Tên đầy đủ giữ ở alt/title, nhãn gốc tooltip; actor khác giữ chữ. Cả Master list và bảng người làm chi tiết dùng cùng quy tắc trình bày; không sửa A9/source data. Build Renderer bytes 414060; PASS actor selectors, task ordering, elapsed time, polling unchanged. Browser thật 7 ảnh đang hiển thị loaded=true, Claude/GPT có alt đầy đủ, chấm xanh giữ nguyên. Backup /opt/incomex/deploys/hvu-actor-logos-20260923/. Các cải tiến tìm kiếm/tên hiển thị/ẩn việc Done của lượt khác được giữ nguyên.

Cột Trước (Owner yêu cầu): runtime 49f2477, ngay sau Time vừa làm; tính frontend từ lastCommit[1] và clock reactive hiện hữu, không lưu giá trị, thêm timer/API/service/backend. <60 phút → phút nguyên; <24h → giờ 1 số lẻ; còn lại ngày 1 số lẻ, dấu phẩy. Thiếu/sai ngày → —; thời gian tương lai → 0p. Evidence: PASS: 10 elapsed-time cases, PASS: existing timers and API calls unchanged; build Renderer bytes 395459; browser thật 8 cột/8 task, ví dụ 4p, 5,1h, 1,3 ngày; các cột tên/sao/actor/time/tiến độ vẫn hiện. Backup /opt/incomex/deploys/hvu-elapsed-20260922/. Unrelated submodule web-rp-current giữ nguyên.

Chỉnh độ thoáng theo Owner: runtime 3dc8402, chỉ 2 giá trị CSS: sao chưa chọn #d1d5db → #f1f2f4; hệ số độ rộng sidebar desktop 1.2 → 0.96 (= giảm thêm 20%). Không đổi logic/storage/dữ liệu. Build Renderer bytes 395055, deploy atomic hoàn tất.

Star (Owner bổ sung): runtime b9695e1; cột Star giữa STT/tên, 3 sao vàng nhạt, chọn 1–3/bấm lại mức đã chọn để bỏ. localStorage incomex-hvu-task-priorities-v1 theo work-id, không theo STT; không ghi Git/VPS, không tự sắp xếp. Có thông báo nếu browser không lưu được. Build Renderer bytes 395053; browser thật 7 headers/8 task, chọn 2 → refresh → persisted: true; chọn 3 three: true; bấm lại cleared: false. Đã bỏ sao thử nghiệm. Actor/polling/detail byte-identical, 5 Python hashes OK. Backup UI /opt/incomex/deploys/hvu-stars-20260922/.

Nút Cập nhật (Owner bổ sung): commit runtime cb5f01d; tải lại riêng iframe Task view để nhận cả renderer mới và dữ liệu/trạng thái, không reload parent KB. Background polling/gateway giữ nguyên. Build Renderer bytes 392845; kiểm browser bấm nút thật → URL KB giữ nguyên, bảng trở lại 8 task/6 cột. Đã triển khai.

Điều chỉnh tiếp theo theo Owner: runtime f5ec63c, một dòng/task với 6 cột STT | Tên công việc | Người vừa làm | Time vừa làm | Người đang làm | Tiến độ. Tách hai tên người, chữ xám nhạt, giữ chấm xanh theo tín hiệu; năm 2 chữ số. Dùng nguyên selector actor hiện hữu. Evidence: PASS: actor rules, polling, detail view unchanged; 5 Python source/test hashes OK; build Renderer bytes 392793; browser thật columns: 6, tasks: 8, thời gian 10:44 22/09/26, HPML Codex / 11:08 22/09/26 / —. Backup riêng /opt/incomex/deploys/hvu-master-columns-20260922/; không sửa dữ liệu/gateway. Các ghi chú 7 cột dưới đây là lịch sử bản đầu.

  • Bước 0–2: đọc skill/OR/Hiến pháp/AGENTS/COLLAB và cleanup hiện hành; VPS là SSOT runtime. Tái dùng Nuxt UI/table, chấm và thanh tiến độ có sẵn; không thêm nguồn dữ liệu hoặc luật trạng thái.
  • Bước 3: thêm Master list 7 cột, STT tự đếm, Last time từ lastCommit[1], tìm kiếm chung và mở chi tiết. Hai view dùng cùng hàm người làm. Chỉ sửa app.vue và README runtime.
  • Bước 4–5, kiểm độc lập với bản trước: PASS 60 actor parity cases; polling and detail template unchanged; Ran 15 tests in 6.655s / OK; sync.py: OK, presence.py: OK, secret-runtime.py: OK, test files OK khi đối chiếu SHA256. Renderer bytes 393353; live HTTP 200. Browser thật: 8 task, đúng 7 headers; hpml có Claude Chat/Cowork vừa làm và Codex đang làm, khớp detail; lọc hpml=1, không khớp=empty, xóa lọc=8. View chi tiết/tabs giữ nguyên. Không restart gateway/service hoặc chỉnh webhook/backstop.
  • Bước 6: runtime commit 99e1618501cf1cbeb4c875edbfbb5c406ee91582; backup và log tại /opt/incomex/deploys/hvu-master-list-20260922/; rollback riêng UI theo scripts/hvu-b2/README.md. Unrelated modified submodule web-rp-current giữ nguyên. Runtime mirror cũ trong workspace vẫn là lịch sử, không dùng deploy. Bản source runtime đã commit tại VPS; không push Git remote trong lượt này.

Ngày 21/09/2026, Executor Codex. Owner tiếp tục chỉnh UI trực tiếp trên KB. Phạm vi: UI compact + HTML MOT thật + thiết kế contract đồng bộ. Webhook chưa bật.

3 câu Tuyên ngôn

  • Vĩnh viễn: giữ nguồn HTML công việc trên GitHub, dùng khung chung, không viết lại MOT; runtime shell VPS giữ nguyên.
  • Nhầm: fixture có nhãn; không suy actor từ Git pusher; dữ liệu thực tế sẽ theo snapshot riêng từng việc và cùng revision HTML.
  • Tự động: chưa hoàn tất đồng bộ. Contract webhook + kiểm tra bù đã ghi trong README/COLLAB; không báo tự động hoạt động khi chưa nối.

Bước 0–2

Đã đọc incomex-rules, OR v7.58, Hiến pháp v4.6.3; đọc COLLAB, nguồn lắp ráp, HTML MOT. Owner mới ưu tiên webhook thay thiết kế no-webhook cũ; lượt này hoàn thiện UI trước trong khi hỏi tùy chọn phạm vi triển khai webhook, chưa có trả lời. Assembly: Nuxt UI hiện hữu UAccordion/UTabs/UTooltip/UButton/UInput/UBadge/UAlert. Hai tab Kiểm soát và Nội dung công việc; sidebar bằng 80% UI02; các hàng gọn. Tiến độ 4 thanh, tooltip, xám/xanh/đỏ/vàng cam. Sáu actor, 12 chấm, fixture có nhãn. HTML nguyên bản MOT được mirror không chỉnh nội dung.

Bước 3–4

Source app.vue commit 94422f6c16c007acf0498742f1c6faf91c50b400; contract README commit 4bb7ee9ed8fb34162e6a704f8fb98061ae34c230; pack metadata commit 7b31c20c17c6431ba64287e5cd0f8e146c48530f; HTML commit c2e27f322511c8b6337d399fc6a68ca2855c8b47. Ghi qua workspace tools với expected version/head. Build Nuxt generate exit0; pack 407334 bytes. Mũ coder hoàn thành assembly; mũ reviewer kiểm tra thao tác và DOM, đối chiếu SHA nguồn với mirror. Không đổi DB, quyền, nginx hay runtime shell. Backup /opt/incomex/deploys/hvu-ui03-before-20260921.html. Mirror thay nguyên tử.

Bước 5 — evidence thật

knowledge/modules 200 259263 01dcaca753ffc86e1d66fe0c73819594a81d5c27d8c666ea5b77380ce9ae5d44
ui-preview/hpml-view-for-user/view.html 200 407334 cabea1d8ac04cb5a8e895ec12a62907b6dd7c7d690d30f134049260bd7bdc112
ui-preview/hpml-view-for-user/documents/mow-mot-moit-mout.html 200 1827486 f4aac30c492f104ec54ff7a03ace54ce70d802e2dd49a417ad9b7285897a050c

DOM đo local desktop:

{"dots":12,"grid":1193.8209228515625,"left":336.5411682128906,"oldLeft":420.68284606933594,"overflow":false,"ratio":0.7999878563087944,"stageBars":4}

Browser live thấy 2 tab, bốn nút tên giai đoạn, bảng 6 thành viên. Đã thử mở tiến độ local, chuyển công việc/tab trên production. MOT hiện UI Master/Quy trình/các bảng trong iframe; ảnh chụp xác nhận. Chưa kiểm mọi chức năng/liên kết của HTML MOT nguồn; tài liệu gốc có đường dẫn tương đối và asset ngoài, giữ nguyên không tự public file phụ. Iframe sandbox tách tài liệu. Mở rộng dẫn tới mirror toàn trang.

Một kiểm tra urllib local lỗi CA; dùng curl với kiểm tra TLS mặc định thành công, không tắt TLS. Console outer KB có Directus Auth Init Error khi anonymous và lỗi MutationObserver đã có ở shell; không sửa ngoài scope. MOT hiển thị được, không kết luận mọi chức năng ứng dụng MOT hoạt động. Temporary viewport đã reset, tab KB giữ mở.

Bước 6 — bàn giao và còn mở

URL https://vps.incomexsaigoncorp.vn/knowledge/modules. Nguồn/README/COLLAB đã cập nhật. Còn mở: triển khai receiver, xác thực webhook, index snapshot, asset manifest và cơ chế tab nạp phiên bản mới, kiểm tra bù; xác minh nguồn actor đang làm. Không giả tín hiệu bằng push author. OR không cần đổi vì đây là áp dụng nguyên tắc có sẵn, không thêm luật nền.

Tham chiếu màu: https://developer.apple.com/design/human-interface-guidelines/color ; cơ chế webhook: https://docs.github.com/en/webhooks/using-webhooks/best-practices-for-using-webhooks

HVU-B2-20260921-01 — hoàn tất đường ống dữ liệu, 21/09/2026

Executor_Surface=Codex/GPT Work. Gate trước mutation: AGENTS → COLLAB → PROMPT → README §11–12. Last PROMPT commit=376b72b845fc72bfaa84e69c1aa886340d46bf3a khớp READY; main lúc gate=47adbc7bbbb9f1d89c880c1f9f40adbf11b8961f. Recheck sau triển khai vẫn cùng PROMPT SHA. Chỉ RUN B2, không B3 Surface/current actor; không redesign UI03.

3 câu Tuyên ngôn / bước 0–2

Vĩnh viễn: một pipeline đọc main, task auto-discovery, không duy trì danh sách tay. Chặn nhầm: anonymous bare clone riêng, user hvu-view chỉ ghi cache, chưa biết actor không đoán; app dashboard bị loại khỏi mirror dữ liệu. Tự động: webhook push + systemd backstop 15 phút cùng oneshot, last-good và tự retry; UI poll manifest 60 giây. OR v7.58/Hiến pháp v4.6.3 đã đọc trong phiên. Dùng systemd/nginx/Nuxt/Git hiện hữu; không DB/queue/daemon mới.

Bước 3–4 / nguồn và triển khai

Runtime VPS /opt/incomex/docker/nuxt-repo/scripts/hvu-b2; route web/server/api/knowledge/owner-view-webhook.post.ts. Nuxt chỉ nhận chuông đã xác thực; business parser ở Python. Commit runtime cuối 8d89757fdd52241dffcdcdef77a090a977bd3fa2, backup VPS→GitHub web-test branch codex/hvu-b2-20260921 (push exit0). Source app.vue được mirror tham khảo vào workspace bcc69d2b25360cb068d1dab8bfb32f6475fa7cab; không dùng workspace để deploy runtime.

Clone riêng /opt/incomex/data/hvu-b2/repo.git, anonymous HTTPS, push URL disabled, không checkout/execute repo. Public data /ui-preview/hpml-view-for-user/data/. Immutable revision documents + tasks snapshot; status pointer publish sau cùng. Scheduler user hvu-view/ProtectSystem=strict chỉ có hai vùng writable cache/state. Asset tương đối được khai báo trong HTML/CSS mới copy, chặn path traversal/symlink/hidden/markdown. Một task lỗi giữ docRevision last-good có nhãn; snapshot lỗi không thay bản tốt.

Webhook 682624761, push only, URL https://vps.incomexsaigoncorp.vn/api/knowledge/owner-view-webhook; raw HMAC constant-time. GSM là secret SSOT, bản runtime transient trong mount sẵn có. Không ghi giá trị secret vào repo/log/report. incomex-hvu-secret.service tự nạp lại lúc boot; backstop không phụ thuộc secret. Không đổi quyền token/cổng ghi.

Nuxt build+deploy chuẩn exit0; nginx -t PASS, container healthy. Original Nuxt rollback=/opt/incomex/deploys/nuxt-output.truoc-20260921-093200; lần dựng cuối backup=/opt/incomex/deploys/nuxt-output.truoc-20260921-093648. UI rollback=/opt/incomex/deploys/hvu-b2-before-view-20260921.html. Runtime README có hướng dẫn rollback; không reset repo dữ liệu.

Bước 5 — output thật

Ran 8 tests in 0.755s
OK
Webhook: 7 assertions PASS; raw bytes, bad/missing signature, event/repo/ref
missing 401
wrong 401
valid0 202
valid1 202
valid2 202
two_backstop_runs_documents_unchanged True
metrics: {"fetch":0,"build":0,"copy":0} (hai lượt backstop và ba chuông lặp)

Tests cô lập: A0/READY; KQ sai RUN_ID và trùng prefix bỏ qua; root Done thắng; Owner cần quyết; không parse P; malformed unknown; task mới không cần root list; no-op giữ mtime/hash; lỗi giữ snapshot và lượt sau tự hồi phục; remote cũ không hạ revision. Production không bị cố gây outage để thử lỗi. Browser cô lập timestamp 36 phút vẫn thấy 6 task và badge stale.

GitHub Recent Deliveries:

push 2026-09-21T07:40:43.507Z duration 0.62s status 202
published bcc69d2b25360cb068d1dab8bfb32f6475fa7cab 07:40:45 UTC
push 2026-09-21T07:42:13.235Z duration 0.81s status 202
published c39d3273c083b28efb1611de8204b096834261a8 07:42:15.133 UTC

Push tự publish ~2 giây, không bấm/start unit; UI tab đang mở tự đổi document href 0f4d184... → bcc69d2... → c39d327... mà không reload toàn trang. MMIM HTML lớn vẫn hiển thị. Thiếu asset ngoài Git giữ cảnh báo, không chặn B2.

Kiểm cuối:

final_data_revision 13235ec74310e2954376e0f15d27544dd8922e6f
hermes-joint-workspace available ['done','changing','pending','pending']
hpml-view-for-user runtime ['done','done','changing','pending']
jev-integration available ['done','unknown','pending','pending']
mcp-workspace missing ['done','changing','pending','pending']
mow-mot-moit-mout available ['done','blocked','pending','pending']
vps-clean-20-9-26 available ['done','blocked','pending','pending']
renderer SHA256 b2d776c62a2d5c5d47c6129c04df86a213b9e6f4372805168e2f19b42258597f
systemd timer/socket/secret: enabled/enabled/enabled
Nuxt: healthy
scoped git status: clean
browser errors after final correction: []

Public source paths COLLAB/PROMPT/.git không được copy; directory listing giữ nginx hiện hữu tắt. A0 được hiển thị nguyên văn theo yêu cầu, gồm cả chỉ đạo cũ còn trong nguồn; renderer không diễn giải lại.

Bẫy đã sửa và giới hạn

Staging tempfile0700 gây403, sửa gốc0755 và có regression. /api/owner-view đi backend khác gây404, chuyển sang nhánh Knowledge có sẵn; ping đăng ký ban đầu404 là lịch sử, hai push sau đã202. Tài liệu hpml/view.html thực chất app Nuxt cũ; nhúng sandbox sinh localStorage errors. Đã loại dashboard app khỏi nhánh tự mirror (không thêm allow-same-origin), giữ đúng ranh giới app/data. Renderer cuối không có lỗi B2 mới; log cũ giữ làm evidence. B3 chưa làm; lastActors chỉ prefix rõ surface, [GPT]/[Claude]/author chung không suy; activeActors=null.

Bước 6 / đóng việc

Workspace README cập nhật contract đúng webhook/backstop15; COLLAB giữ quyết định/evidence và KQ cuối. Runtime đã backup. OR không cần đổi: áp dụng luật hiện hữu. Nợ ngoài phạm vi: B3 Surface/current actor, tài liệu/asset thiếu của các task khác; không cản B2.

HVU-B2.1-20260921-01 — hoàn tất sửa tín hiệu và retention

Executor_Surface=Codex/GPT Work. Gate trước mutation: đọc AGENTS → COLLAB → PROMPT → README §11–12; commit cuối PROMPT 27c53fe00f53c616f5422c639abf67e34843bb55 khớp READY, runtime baseline 8d89757fdd52241dffcdcdef77a090a977bd3fa2. Workspace gate HEAD 89a4d9c5bd9a840601b006076ebb65ca6bf84155. Không sửa luật nền, gateway, webhook/auth/unit/backstop hay Surface/presence.

Bước 0–2 — nguyên tắc và thiết kế

Vĩnh viễn: bám đúng A9, dữ liệu lấy từ main, không tạo nguồn trạng thái thứ hai. Chặn nhầm: READY/KQ không phụ thuộc thứ tự; không suy actor; GC chỉ cache revision 40 hex, bảo vệ current và last-good. Tự động: GC sau publish, hardlink tài liệu bất biến khi an toàn; HEAD không đổi không fetch/build/copy. Dùng Git, Python stdlib, systemd và Nuxt UI hiện hữu; không thêm dịch vụ/dependency.

Bước 3–4 — thay đổi và tự review

Runtime VPS commit c71a94c377df07c0aa250a3643d779084473113c, đã backup VPS→GitHub web-test branch codex/hvu-b2-1-20260921 (push exit 0). Chỉ 5 file scripts/hvu-b2: sync.py, test_sync.py, ui/app.vue, README.md, 00-NHAN-THU-MUC.md. UI03 chỉ thêm một dòng Gần nhất từ lastCommit. Workspace app/contract mirror eafc34c813c17e857a5600bb705bcd61b8efadde; app SHA256 1584e25ba41fbc393b3406859c99f1c53664f868cc21eaf814fad0b23411087c khớp VPS. Git dirty duy nhất web-rp-current có trước, không đụng.

READY chỉ nhận đủ 40 hex, bất kỳ dòng không gạch nào khớp last PROMPT commit; placeholder và SHA cũ không cảnh báo. KQ đúng RUN, XONG ưu tiên DỪNG; sai RUN không dùng. READY chưa có KQ: “READY hợp lệ · chưa có KQ”. Không parse P.

GC giữ current + 2 snapshot publish gần nhất theo receivedAt, kiểm ancestry. Chỉ chọn thư mục data/revisions/<40 hex>, không theo symlink/không đụng legacy documents hoặc bare Git. Snapshot còn tham chiếu last-good legacy được bảo vệ; snapshot mới mang đầy đủ last-good vào chính revision trước GC, giữ documentRevision nguồn. Staging random .snapshot-* mode0700 khi dựng, chỉ0755 sau validate, rename trong cùng mount. Lúc đầu hardlink bị systemd tách hai ReadWritePaths thành hai mount dù cùng đĩa; đã chuyển staging sang cùng revision mount, không nới sandbox. File đã publish không sửa in-place. Khi HTML thay đổi, test xác nhận inode mới và bytes bản trước không đổi. GC audit trong journal và state/last-gc.json; bản bằng chứng lượt này ở /opt/incomex/deploys/hvu-b2.1-20260921/gc-audit.json.

Mũ reviewer: kiểm diff/phạm vi, biên symlink, task lỗi liên tiếp qua nhiều GC, dữ liệu không đổi và dữ liệu đổi, nguồn A9 độc lập bằng Git log/show; không dùng màu kỳ vọng hard-code từ dữ liệu production.

Bước 5 — output thật / acceptance

Ran 11 tests in 2.124s
OK
Webhook: 7 assertions PASS; raw bytes, bad/missing signature, event/repo/ref
Renderer bytes 385393
nuxt generate exit 0 — Prerendered 3 routes; Generated public .output/public
renderer SHA256 af1f920ac70c3cb08309e722e5de6f42bc5e8335a1bca96091da331f2a621012
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
incomex-nuxt: healthy
runtime backup push exit 0

Parser đối chiếu tại snapshot 839828c430fb5d4f5fabc5364be0214735230453 (Git log PROMPT + token thật, không nhập lại màu):

Task PROMPT cuối / READY khớp 4 trạng thái
hermes-joint-workspace Không PROMPT / 0; A0 CHƯA XÁC NHẬN changing,pending,pending,pending
hpml-view-for-user 27c53fe / 1 (có thêm READY cũ) done,done,changing,pending
jev-integration Không PROMPT / 0; placeholder không phải READY done,changing,pending,pending
mcp-workspace d15eac2 / 0 done,changing,pending,pending
mow-mot-moit-mout 2d673a3 / 0; Owner P01 còn trong mục chờ done,blocked,pending,pending
vps-clean-20-9-26 7ad18cf / 1 (READY cũ phía dưới không thắng); KQ VPSC-V1B XONG done,done,done,blocked

VPSC vẫn đỏ Nghiệm thu vì mục Owner cần quyết thực tế có “- Không có quyết định chờ Owner...” và “- Q04 · CLOSED...”, không phải sentinel - —. Đây là lỗi dữ liệu đã nêu P13/P14, không thêm heuristic che lỗi, không sửa việc khác. JEV không còn unknown/cảnh báo READY giả. MMIM gộp 24 lần cảnh báo thành 20 đường dẫn khác nhau trong một dòng, tối đa3 ví dụ; không thay source hay chính sách ảnh.

two checks unchanged: True
missing 401
wrong 401
valid-0 202
valid-1 202
valid-2 202
three bells unchanged: True
metrics unchanged HEAD: {fetch:0,build:0,copy:0}
TimersCalendar={ OnCalendar=*-*-* *:00/15:00 ; next_elapse=Mon 2026-09-21 11:00:00 CEST }
ActiveState=active
document hermes-joint-workspace 200 7972
document jev-integration 200 12197
document mow-mot-moit-mout 200 1827486
document vps-clean-20-9-26 200 10152

Push workspace eafc34c lúc08:46:54Z → publish 2026-09-21T08:46:59.004553+00:00 (~5 giây), không bấm Cập nhật/start unit. Chuông tiếp từ task Hermes được nhận bình thường; cả hai metrics fetch1/build1/copy0/hardlink4. Browser đang mở tự đổi dòng Gần nhất từ commit P14 sang “15:46:54 ... docs(hvu): mirror VPS B2.1 latest activity renderer and retention contract”, không reload. 6task,12chấm xám, activeActors=null, đúng chưa có B3. MMIM mở tab Nội dung, DOM hiển thị đầy đủ bảng quy trình. Fixture cô lập status=fresh nhưng lastSuccessAt36 phút trước → UI stale vẫn hiện6task, console []. Outer KB vẫn có Directus Auth Init Error/Sentry DSN có trước ở shell, không có lỗi mới từ renderer; không sửa ngoài scope.

Retention production: 15→3 revision; unique-inode logical bytes 29,482,133→5,648,680 ở GC đầu, còn1,926,347 sau hai publish tiếp. Không phải tuyên bố giải phóng toàn bộ dung lượng VPS. Bốn HTML đều hardlink qua3revision: inode Hermes1614655, JEV1614657, MMIM1614659, VPSC1614661; nlink3. Current và các document đều HTTP200. Test cô lập nhiều lần task lỗi vẫn giữ HTML, recovery tự phục hồi; mạng lỗi giữ JSON last-good; remote cũ bị chặn; symlink/outside/staging/legacy giữ nguyên.

Danh sách GC thực tế (đúng giới hạn P14)

[
  {
    "event": "revision-gc",
    "beforeCount": 15,
    "afterCount": 3,
    "beforeBytes": 29482133,
    "afterBytes": 5648680,
    "deleted": [
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/13235ec74310e2954376e0f15d27544dd8922e6f",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/0f4d184af03e50c96a6af31fdbf7aab31a0d38d4",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/afd7e854bfbe45948a583613b13a05efe1229ba3",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/a15cfff1fdc441b9a630b79335c1ee75e9513905",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/76c5490fe8088a9cb18af7722da8235fb0840220",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/894020ea2d0b9b573b89cc1e5ed23cbc52f8b545",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/7ad18cf486bc6e77c07c7235dd6599b099a8ec3a",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/9eb48ccfc1965f3d57f023d1b3a7e660fde08e4b",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/c39d3273c083b28efb1611de8204b096834261a8",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/bcc69d2b25360cb068d1dab8bfb32f6475fa7cab",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/e9b39f345e2e4dcdf71c493f08597839f6557f1b",
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/27c53fe00f53c616f5422c639abf67e34843bb55"
    ],
    "kept": [
      "74b3a583a15ed98cc41a082de385604cdb938f27",
      "89a4d9c5bd9a840601b006076ebb65ca6bf84155",
      "d1afbe4d13db42b0efa2e3f2c720bf7acd99fe63"
    ]
  },
  {
    "event": "revision-gc",
    "beforeCount": 4,
    "afterCount": 3,
    "beforeBytes": 5671239,
    "afterBytes": 3787307,
    "deleted": [
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/89a4d9c5bd9a840601b006076ebb65ca6bf84155"
    ],
    "kept": [
      "74b3a583a15ed98cc41a082de385604cdb938f27",
      "d1afbe4d13db42b0efa2e3f2c720bf7acd99fe63",
      "eafc34c813c17e857a5600bb705bcd61b8efadde"
    ]
  },
  {
    "event": "revision-gc",
    "beforeCount": 4,
    "afterCount": 3,
    "beforeBytes": 3810587,
    "afterBytes": 1926347,
    "deleted": [
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/74b3a583a15ed98cc41a082de385604cdb938f27"
    ],
    "kept": [
      "839828c430fb5d4f5fabc5364be0214735230453",
      "d1afbe4d13db42b0efa2e3f2c720bf7acd99fe63",
      "eafc34c813c17e857a5600bb705bcd61b8efadde"
    ]
  }
]

Bước 6 — bàn giao / rollback

Runtime rollback: /opt/incomex/deploys/hvu-b2.1-20260921/sync.py và view.html; restore nguyên tử hai file theo đường VPS hiện hữu. Cache bị GC có thể dựng lại từ Git, không xóa source. Backstop/webhook/last-good vẫn hoạt động. KQ ghi trong COLLAB cùng lượt hoàn tất; Host đọc Git + báo cáo này để nghiệm thu. B3/gateway/presence chưa làm. Không tạo file tiến độ mới.

Kiểm sau ghi KQ

Workspace/KQ commit 9d1363bf13c81644f18dac7421b27d00445a99a1 đã tự publish. Output cuối (GC thêm sau KQ được ghi đầy đủ):

{
  "published": "9d1363bf13c81644f18dac7421b27d00445a99a1",
  "health": "fresh",
  "kq": "KQ@HVU-B2.1-20260921-01 XONG",
  "stages": [
    "done",
    "done",
    "done",
    "changing"
  ],
  "revisionCount": 3,
  "lastGC": {
    "event": "revision-gc",
    "beforeCount": 4,
    "afterCount": 3,
    "beforeBytes": 1949599,
    "afterBytes": 1926898,
    "deleted": [
      "/opt/incomex/docker/nginx/static/ui-preview/hpml-view-for-user/data/revisions/d1afbe4d13db42b0efa2e3f2c720bf7acd99fe63"
    ],
    "kept": [
      "839828c430fb5d4f5fabc5364be0214735230453",
      "9d1363bf13c81644f18dac7421b27d00445a99a1",
      "eafc34c813c17e857a5600bb705bcd61b8efadde"
    ]
  }
}

Bản báo cáo revision4 trong COLLAB là evidence trước ghi KQ; bổ sung này xác minh KQ đã tới production. Fixture/server test cô lập đã dọn.

HVU-B3-20260921-01 — DỪNG, Agent-data đã rollback

Bước 0–2 / gate và thiết kế

Executor Codex/GPT Work. Đọc AGENTS → COLLAB A0/P16/Host xử lý P16 → PROMPT → README §11–12. Last PROMPT commit fd682db6114c350bb9615875a493eaa23396ddef khớp READY; repo HEAD 03111fa9f7e2ae554abde63ed2c43582412ffa23 không bị dùng thay PROMPT SHA. Đã đọc lại skill Incomex và search_knowledge OR/Hiến pháp trong main process, không subagent.

Ba tuyên ngôn: (1) ký ức actor theo từng task/SHA, không TTL; (2) chỉ provenance transport, không tin tool arguments/author/message; (3) presence tự sinh từ call, clear theo commit, TTL10 phút, không Git commit. Thiết kế dùng helper Python stdlib/state volume sẵn có, không thêm DB/tool/schema. B3 warning A9 hoãn đúng PROMPT.

Bước 3–4 / đã làm và điểm dừng

Đã khảo sát hai gateway, chụp rollback mã/compose và baseline initialize/tools/list/error. Candidate Agent-data dùng context identity, session store bounded, provenance task→commit, presence surface×task, hidden metadata cho task queue; giữ nguyên arguments/results, author/message. Build overlay image agent-data-hvu:b3-20260921 exit0; image này không còn chạy.

Mũ reviewer/test cô lập: A/B/A cho X,Y,Z, clear đúng surface/task (Y không bị X xoá), call tiếp sáng lại, TTL601s loại presence nhưng giữ writers,200 touch không tạo commit/không tăng file/mỗi30s tối đa một lần ghi, sanitize80 ký tự, scope transaction/copy/move không đọc content làm path, session bounded2048. Output thật:

test_memory_presence_and_unknown ... ok
test_scope_sanitize_and_bounds ... ok
Ran 2 tests in 0.479s
OK

Đây chỉ là synthetic, không chứng minh identity/live production hay acceptance B3 toàn bộ.

Triển khai Agent-data trước. Lượt đọc MCP thật lúc gateway đang khởi động trả:

Transport send error ... unexpected server response: HTTP 502: Bad Gateway

Theo P16 + lệnh Owner “lỗi gateway nào rollback gateway đó ngay”, đã rollback ngay và DỪNG, không sang Claude. Bản đối chiếu post-deploy B3 chưa thu đủ nên không gọi contract B3 PASS. HTTP502 xuất hiện trong startup; chưa đủ bằng chứng quy nguyên nhân cho helper B3. Bản cũ sau rollback cũng cần khoảng2 phút khởi động. Không tự đổi version, auth, URL, public contract hay thử triển khai tiếp.

Rollback có hai lệnh compose phục hồi bị chồng lúc hủy tiến trình deploy đang chạy; một lệnh báo container cũ không còn tồn tại. Đã kiểm trạng thái cuối bằng image/health, so mã/contract và gọi MCP thật; không dùng exitcode của lệnh chồng làm bằng chứng rollback thành công.

Bước 5 / kết quả sau rollback

Agent rollback: initialize/tools/list/error byte-for-byte identical for all 4 profiles
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
agent-data-r03:20260920-finalclose healthy
claude-mcp-local:r03-finalclose-20260920 healthy
workspace_read(work/hpml-view-for-user/COLLAB.md): thành công; source_head=03111fa9f7e2ae554abde63ed2c43582412ffa23

Mã server.py/workspace_tools.py/workspace_tasks.py Agent-data đã khôi phục, scoped git diff trống. Claude app/server.py byte-for-byte bằng backup, không sửa/deploy Claude. Không đổi sync.py/UI03/webhook/backstop/retention của B2.1; không bump version, không đổi author/message. Không có B3 core ở production.

Baseline / rollback Agent-data:

Profile Tools server version connector schema version schema hash
/mcp 37 1.3.0 agent-data-r03-finalclose-20260920.1 dbbfc590a969
/mcp-gpt 10 1.3.0 agent-data-r03-finalclose-20260920.1+b1gdc 1c1c7ea1315d
/mcp-gpt-full 37 1.3.0 agent-data-r03-finalclose-20260920.1+b1gdc+workspace-20260918 dbbfc590a969
/mcp-readonly 7 1.3.0 agent-data-r03-finalclose-20260920.1 dbbfc590a969
Claude baseline /mcp:23 tools, serverInfo name=incomex-claude-mcp, version=1.27.1 (giá trị SDK trả thật). Không sửa nên không có “sau deploy Claude”. Canonical SHA256 toàn initialize/list/error: Agent /mcp 3b82f9791c1a98645a263eba65b8b4475d1cf0265334ed62c9b3e8843aba5d57; /mcp-gpt 420afa59bad524baa563d38fae01adb1577db7e1e176a659fd76598ad68188f0; /mcp-gpt-full 702356ddea25202f64e10f7772f58acd2faca0ffce5fed8bc6017195dc978f3f; /mcp-readonly 40fd809a9b420174792d396edf5a7bb1ea6b7550e73766a450fe55abb7e45da9; Claude a5e2c594f65788f5e566840b75248a050b027d0e4a54d7fd2dfec2eb7b592b6d.

Đường ghi và giới hạn tín hiệu

  • Hai gateway mục tiêu: Agent-data workspace_* (clone /opt/incomex/data/workspace-tools/github-workspace); Claude fs_* → host helper gh_put/gh_apply_commit_push (clone /opt/incomex/mcp-roots/gh). Host helper của Claude thuộc đường gateway này, không phải surface riêng.
  • Stdio proxy hiện tại mcp_server/stdio_server.py gửi workspace calls tới /mcp, nên đi qua Agent-data; nếu proxy không chuyển clientInfo, chỉ thấy nhãn proxy/User-Agent, chưa thể phân biệt người phía sau. Không được suy đoán.
  • incomex-cowork-mcp → adapter /opt/incomex-cowork/adapter/coworkd.py → cowork-runner: có shell/shell_async, workspace riêng /var/lib/incomex-cowork/workspace, patch_export. Mã khảo sát không có đường tự push incomex-workspace; chỉnh sửa tại runner/patch_export không phải commit nguồn. Nếu người/agent đem patch hoặc git push ngoài hai gateway thì B3 không đóng dấu/presence cho đoạn đó.
  • workspace_exec chạy snapshot cô lập; schema nói rõ snapshot writes không thay source. Không được coi thao tác trong snapshot là commit vào incomex-workspace. Apply trở lại qua gateway mới có thể có provenance.
  • SSH/local git trực tiếp, host automation/script có quyền ghi clone/push, GitHub web/API/CLI và clone ngoài VPS: đều nằm ngoài hai transport, không thể đóng dấu/presence ở B3. Commit mới không có provenance matching SHA phải unknown. Không khẳng định đã kiểm kê được mọi máy/credential bên ngoài VPS.
  • Các script deploy/finalize workspace cũ còn tham chiếu incomex-workspace là đường operator ngoài gateway; không sửa/chạy chúng. Không mở rộng scope sang Cowork/Hermes/local/GitHub.

Bước 6 / bàn giao

Kết quả DỪNG. Identity client thật B3: chưa đo thành công sau deploy; không dùng nhãn synthetic HVU-contract-test làm bằng chứng. LIVE_CROSS_SURFACE_PENDING — chưa gọi thật từ Claude Chat, Claude gateway chưa triển khai B3. Production A/B/A, presence/commit/TTL, async, UI signals, state bounded end-to-end: OPEN, không suy từ test helper.

Rollback/evidence/candidate không chạy giữ tại /opt/incomex/deploys/hvu-b3-20260921/: server.py/workspace_tools.py/workspace_tasks.py, claude-server.py, hai compose, contract.py + agent-before/agent-rollback/claude-before JSON, helper/tests/Dockerfile candidate. Candidate đã đưa ra khỏi thư mục source chạy; chưa tạo runtime commit/push mới. Runtime refs giữ nguyên Agent-data 0384acecc808c8069a1dc718984abeeb602b87a4; repo chứa Claude 0dc937985d7a79bd18eb51febd651f542dd7e0ed. Không ghi secret/header thô vào báo cáo.

Đề xuất để Host duyệt cho RUN sau: warm-up/canary và đợi health + contract trước chuyển cổng live; phân biệt startup chưa ready với regression. Đây là đề xuất, chưa triển khai. OR/luật nền không sửa; ghi KQ DỪNG trong COLLAB bằng gateway đã phục hồi, không tạo progress file mới.

RUN HVU-B3-RERUN-20260921-02 — runtime đã triển khai, chờ nghiệm thu Claude Chat thật

Bước 0–2 · Cổng và thiết kế

Đã đọc AGENTS → COLLAB → PROMPT → README §11–12, đối chiếu P16/P17/P18 và quy tắc VPS SSOT. Commit cuối chạm PROMPT là f24563915abc6be9fc7a58b26596db1a5acefba2, khớp READY trước mutation; không lấy HEAD repo làm PROMPT SHA. Dùng candidate có sẵn; quay Vừa làm về Git author theo P17, không triển khai writers/provenance ledger. Không sửa mục tiêu, P parser, public MCP contract, version, auth/URL, commit message hoặc committer policy.

Bước 3 · Runtime và đường dữ liệu

  • Agent-data code ref 3e33f7fdacb48a1f01563c42e4871df4d5839e9e; backup/test HEAD b0b768e1db617c5a4736e91d2d1b9bbf812596ff. Image agent-data-hvu:b3-rerun-02-final.
  • Claude source ref trong repo /opt/incomex: 12afa84766b5aa886d09d1064ee944ab085bc28e. Image claude-mcp-local:hvu-b3-rerun-02-final; host helper đã restart sau khi queue trống.
  • B2/UI ref c7adcb47d8c14793926ea87da8e5c6960bf9b840. Renderer SHA256 00c2292df07e2aa540460aee7967cc55c45ea4431f68fccba1ac582ee335efab.
  • Agent-data và web-test đã backup VPS → GitHub, branch codex/hvu-b3-rerun-20260921. Repo chứa Claude không có remote; giữ commit VPS và rollback copies tại chỗ, không tự tạo remote/push nguyên /opt/incomex.
  • Ba điểm commit Agent-data và bốn điểm commit host helper Claude lấy author name từ identity nội bộ; email cố định lần lượt ai-workspace@incomexsaigoncorp.vn, claude-mcp@incomexsaigoncorp.vn. Tham số --author không đổi committer. Async request lưu hidden identity ngoài public arguments, worker khôi phục đúng nhãn.
  • Helper dùng chung có bản canonical ở agent-data/agent_data/hvu_signals.py, hai bản copy giống hệt trong Claude app/helper. Unicode printable, bỏ control/angle brackets và chuẩn hóa ký tự biên tương thích Git, tối đa 80 ký tự. Session tối đa 2048, TTL 1 giờ có gia hạn khi hoạt động; presence tối đa 8192 cặp, TTL 600s, throttle 30s.
  • Agent-data: 4 route JSON-RPC và REST /mcp/tools/{tool} đều móc identity. Stdio proxy lấy clientInfo từ SDK Context và chuyển qua header nội bộ, không từ tool args. Bản proxy đã cài trên máy khác cần cập nhật/restart nếu vẫn chạy source cũ; không suy đoán nhãn người đứng sau proxy cũ.
  • Claude container không có Git binary. Host helper lấy task đã chạm từ commit thực, trả metadata nội bộ và gateway tiêu thụ/xóa trước public result; clear đúng surface/task sau push. Không thêm tool/schema/result field.
  • B2 đọc author name/email của commit cuối chạm riêng từng task; email ngoài hai gateway = unknown. Không parse subject/prefix. Tên gateway legacy giữ nguyên như lịch sử, không gán thành GPT/Claude cụ thể.
  • presence.py đọc hai private stores và queue status/heartbeat hiện hữu; xuất atomic presence.json chỉ gồm nhãn/hash/work-id/thời gian. Service/timer 15s, UI poll 15s; hết 600s tự xám ngay cả khi fetch lỗi. Adapter lọc presence cũ cùng actor/task theo thời gian commit làm fallback clear. Không ghi Git, không tạo revision tài liệu, không endpoint ghi public.
  • UI03 giữ bố cục/stages/tabs; bảng dùng union nhãn quan sát được, có đúng ba ghi chú theo PROMPT. Webhook/backstop 15 phút, last-good, 3 revision, hardlink và asset warnings giữ nguyên.

Bước 4–5 · Hai mũ, kiểm thử và production

Mũ thực thi: sửa/build trên VPS, deploy Agent-data trước. Mũ kiểm định: rà diff theo phạm vi, 3+4 đường commit, context/queue isolation, không lộ internal fields, kiểm contract trước/sau và kiểm Git/snapshot/DOM thực. Không dùng MERGE làm bằng chứng DONE.

Rollout đúng §0.7, không gọi MCP khi STARTING, không cancel/chồng compose:

  • Agent-data lần đầu: healthy tại 120s/130s; bản chốt: 130s/140s. Sau đó contract giống baseline và live read/write PASS rồi mới sang Claude.
  • Claude cả hai lần: healthy tại 10s/20s; sau đó contract + HTTP MCP read/write PASS. Không phát sinh trạng thái HỎNG, không rollback trong RUN này.
  • Bản chốt giữ nguyên toàn bộ initialize/listing/error JSON: Agent aggregate SHA256 c3acdca1ed3e0266e176ab221e804429e04fb236e4a5498e6d2f96431fa74e1f; Claude ebefd973cf9ae998e472973fbee66bb25bc34f751a10439f508d76aeba58d27d.
Gateway/route Tools Canonical tools SHA256 trước = sau
Agent /mcp, /mcp-gpt-full 37 8078b8dd153d82b54a07e3ed0966f2cbf2f767b7383a04cb4bc931b7a15938d0
Agent /mcp-gpt 10 702aefd1a2b803b23cf3165f24041fe9c8bf7aee39fcc2346593c93e3fc95f6b
Agent /mcp-readonly 7 5ebee4aba0c8d9a845d5dbd79aa9cbc44895f7bdf9bc684f16cfbdd7e237a04f
Claude /mcp 23 cb44dec4fadb4cbca3afc4b829acde0266ce79cd218d1ef1a4362cac58e9c6ec

Agent serverInfo/version vẫn 1.3.0; connectorSchemaHash dbbfc590a969 (gpt: 1c1c7ea1315d), connectorSchemaVersion từng profile không đổi. Claude serverInfo/version do SDK trả vẫn 1.27.1. Auth/URL/handlers không sửa; response/error regression giữ nguyên.

Output thật:

Agent regression: 60 passed, 1 warning in 154.05s
Shared helper: Ran 3 tests ... OK
Async persisted identity -> real Git worker: 1 passed in 5.17s
Claude helper suites (process riêng theo fixture): 24 + 9 + 5 tests OK
Claude fsroots: Ran 52 tests ... OK
Claude hidden identity A/B/A: Ran 1 test ... OK
B2/B2.1: 11 tests OK
B3 Git -> tasks.json / presence: Ran 2 tests ... OK
Webhook: 7 assertions PASS
CLAUDE_FINAL_CONTRACT=IDENTICAL
CLAUDE_LIVE_READ=PASS; synthetic presence ON
commit=bc71e01 · đã push lên main
CLAUDE_COMMIT_CLEAR=PASS
CLAUDE_NEXT_READ_RELIGHTS=PASS; LIVE_CROSS_SURFACE_PENDING
REST_FORWARDED_CLIENT=PASS; PRESENCE=PASS; HEAD_UNCHANGED=True
PRODUCTION_TASK_AUTHORS_MATCH_GIT 6 revision bc71e01dfacb91f05762b5e7d5c13150490459a9
PUBLISHED_REVISIONS 3
{"result":"ok","revision":"bc71e01dfacb91f05762b5e7d5c13150490459a9","metrics":{"fetch":0,"build":0,"copy":0}}
nginx: configuration file /etc/nginx/nginx.conf test is successful
presence timer / sync timer / sync socket: active / active / active

A/B/A fixture dùng Git và snapshot thật: X→A=[X]; Y→B=[Y], A=[X]; Z→A=[Z], B=[Y]. Unknown email làm A=[] dù subject giả prefix GPT. Presence kiểm sáng → commit clear đúng X/A giữ Y/A → call sau sáng lại → đồng hồ test vượt TTL tự mất; bounded/GC không tạo Git hoặc revision. Async test lưu queue rồi đổi caller trước khi worker chạy: author vẫn Queued client, push tới remote cô lập đúng, terminal request=NULL và presence clear. Không dùng các fixture này thay thế live cross-surface.

Production đã mở /knowledge/modules và kiểm DOM: nhãn client động, Vừa làm/Đang làm sáng độc lập, ba ghi chú đúng, task khác không bị gán chung actor. Static tasks/presence/status HTTP đọc được, snapshot fresh. UI hiển thị nhãn synthetic đúng là nhãn kiểm thử, không giả thành Claude Chat.

Surface/client quan sát Lối vào Nhãn thật thấy / giới hạn
Codex phiên này Agent-data /mcp (đối chiếu cấu hình connector) codex-mcp-client; lúc chưa có initialize sau rollout fallback codex-mcp-client/0.155.0-alpha.9.2. Không tự map hai nhãn.
Client kiểm thử HTTP, không phải Claude Chat Claude /mcp HVU synthetic protocol client; read/write/clear/relight thật trên task HVU
Test chuyển tiếp stdio Header nội bộ → Agent REST /mcp/tools/workspace_read HVU stdio forwarding test; production route PASS. Proxy SDK-context forwarding được kiểm synthetic riêng.
Claude Chat thật trên HVU Claude gateway OPEN — chưa có phép thử từ ứng dụng thật cho RUN này

Các đường ghi ngoài hai gateway và giới hạn

  • Canonical stdio proxy là đường vào Agent-data, không phải gateway thứ ba. Proxy/client cũ không chuyển clientInfo chỉ được hiển thị fallback thật thấy.
  • Claude host helper là phần nội bộ gateway Claude, đã phủ bốn đường Git commit.
  • Cowork MCP → coworkd → cowork-runner dùng workspace cô lập /var/lib/incomex-cowork/workspace, có shell/shell_async/patch_export. Không thấy auto-push incomex-workspace trong mã đã khảo sát. Export/apply hoặc push ngoài gateway không đóng dấu được ở B3.
  • workspace_exec chạy snapshot, không thay Git nguồn; presence scoped có thể có qua hidden queue, nhưng chỉ apply/commit lại qua gateway mới đổi Vừa làm.
  • SSH/local Git, host scripts/automation, GitHub web/API/CLI và clone ngoài VPS nằm ngoài hai gateway: không có presence; email không thuộc gateway thì last actor unknown. Không sửa/chạy các script deploy/finalize cũ. Đây là kiểm kê đường truy cập thấy trên VPS và loại truy cập bên ngoài, không khẳng định biết mọi máy/credential bên ngoài.

Bước 6 · Bàn giao

Core đã chạy production, nhưng kết quả RUN là DỪNG · LIVE_CROSS_SURFACE_PENDING, theo P18. Host/Claude Chat cần gọi đọc + ghi thật qua Claude gateway trên work/hpml-view-for-user, ghi nhãn quan sát; hoàn tất A/B/A bằng các surface thật trên tasks.json rồi Host mới chốt XONG. Không có quyết định nghiệp vụ mới cần Owner duyệt.

Rollback/evidence tại /opt/incomex/deploys/hvu-b3-20260921/rerun-02/: rollback-agent.sh, rollback-claude.sh, rollback-ui.sh, baseline/final JSON + contract-summary.json, health logs, build logs, test logs và source copies. Một lệnh rollback cho gateway HỎNG, sau đó chờ health cùng state machine; không dùng 502 khi STARTING làm lý do rollback. Hướng dẫn vận hành chuẩn cập nhật tại scripts/hvu-b2/README.md và chỉ mục thư mục; không tạo progress file mới, không lưu secret vào báo cáo/repo/log.