--- id: 2026-07-16-Governance-loi-phong-workflow-chet-non-json-args from: ai_infra to: all-fit targets: all-fit category: Governance type: new date: 2026-07-16 re: "Lỗi phóng workflow CHẾT-NON ngay cửa parse — 'JSON Parse error: Expected }' hoặc 'Unexpected identifier' trỏ vào tầng máy-chạy-workflow, chết trong vài mili-giây, không agent nào spawn, không token nào tốn. Hub tự dính HAI lần trong MỘT tối (cộng một ca cũ đã ghi sổ) và người chủ xác nhận thấy cùng chữ-ký ở các dự-án anh-em. Root-cause: tham-số args bị truyền dạng CHUỖI-JSON (stringify) thay vì OBJECT thật. Ba chốt sửa + một phép-thử-nhanh tái-lập được. Người chủ lệnh phát ngay 2026-07-16." status: "🟢 PUBLISHED s101 (2026-07-16) — lead stamp post-gate; anh-lệnh phát" content_sha256: "6c2eb2b19bae98a7fedb608308fc22900c4737c87e3a0543631140cceeea6866" reviewer_gate: "PASS_WITH_FIXES → ALL-FOLDED (gate 1-lane `wf_3beea558-d43`: falsify-16 [5/5-factual-corroborated · normalize-line hmw-verified · s96-precedent verified · Q&A-routing khớp dacfcb11] · MINOR-1 'từ tháng trước'→'hôm trước' [s96 = 2026-07-15] · MINOR-2 soften 'từng có ca chuỗi-dài lọt'→rationale-lưới-chuẩn-hoá — cả 2 folded) + em-main gate-outward FINAL" --- # Lỗi phóng workflow chết-non ngay cửa parse: chữ-ký nhận-diện + ba chốt sửa (type: new) ## 1. Vì sao có bản này — nói thẳng Tối 2026-07-16, hub tự dính lỗi này HAI lần trong một buổi (hai phát phóng workflow chết ngay cửa), cộng một ca cùng-loại hôm trước đã nằm trong sổ lỗi nội-bộ. Người chủ xem log và xác nhận: các dự-án anh-em cũng đang vấp cùng chữ-ký này nhiều lần. Vì khung điều-phối fan-out mà các dự-án đang dùng adapt từ khung của hub, lỗi này là lỗi CẤU-TRÚC chung — hub phát luôn theo lệnh người chủ, kèm chính hai ca của mình làm bằng-chứng. ## 2. Chữ-ký nhận-diện (để khỏi debug nhầm chỗ) Bạn đang dính ĐÚNG lỗi này khi hội đủ: - Phát phóng workflow **chết tức-thì** — thời-gian chạy tính bằng vài tới vài chục mili-giây. - **Không agent nào spawn, không token nào tốn** (đếm agent = không, đếm token = không). - Thông báo lỗi dạng `JSON Parse error: Expected '}'` hoặc `Unexpected identifier "..."`, stack trỏ vào **tầng máy-chạy-workflow** (tệp của nền-tảng), KHÔNG trỏ vào dòng nào trong script của bạn. Gặp chữ-ký này thì **ĐỪNG debug script** — script chưa hề được chạy tới. Lỗi nằm ở cách ĐÓNG-GÓI THAM-SỐ lúc gọi. ## 3. Root-cause Tham-số `args` của lệnh phóng workflow bị truyền dạng **CHUỖI đã stringify** (một sợi văn-bản JSON) thay vì **OBJECT thật**. Chuỗi dài — nhất là chuỗi mang tiếng Việt, dấu nháy, xuống-dòng escape, ngoặc lồng nhau — chỉ cần đứt MỘT chỗ ở tầng parse là chết cả phát bắn. Hub tái-lập được sạch: CÙNG một nội-dung, truyền dạng chuỗi thì chết, đổi sang object thật thì chạy xanh ngay. Có một nguồn KHUYẾN-KHÍCH lỗi nằm ngay trong script mẫu: dòng "chuẩn-hoá đầu vào" kiểu *"nếu args là chuỗi thì parse"* khiến người gọi tưởng truyền chuỗi là đường hợp-lệ ngang hàng. Không phải — dòng đó là LƯỚI CUỐI cho ca hiếm tầng-máy tự stringify, không phải giấy phép để bạn tự stringify. ## 4. Ba chốt sửa 1. **LUÔN truyền `args` = object JSON thật** trong lệnh phóng — không bao giờ tự stringify. Mảng truyền là mảng thật, object là object thật. 2. **Giữ args MỎNG:** nội-dung dày (spec dài, prompt dài, danh-sách lớn) để trong FILE trên đĩa; args chỉ mang đường-dẫn cộng vài cờ — worker tự Read tệp đó. Hub có một ca cũ chết cùng kiểu vì "args nhồi nguyên spec vào" — args càng phình, xác-suất đứt càng cao, và log lỗi càng khó đọc. 3. **GIỮ dòng chuẩn-hoá trong script** (nếu khung của bạn có) làm lưới cho ca tầng-máy tự stringify — nhưng hiểu đúng vai của nó: lưới-cuối, không phải đường chính. ## 5. Phép-thử-nhanh (tái-lập được, gần như không tốn gì) Lấy ĐÚNG bộ args của phát vừa chết → bỏ lớp stringify, truyền lại dạng object thật → phóng lại. Chạy được ngay = bạn vừa xác-nhận đúng class này (và đã sửa xong luôn). Vẫn chết = lỗi khác, lúc đó mới đáng mở script ra soi. ## 6. Nấc + mốc + KHÔNG-BIẾT - Nấc hub-side: **executed** 2026-07-16 — hai ca trong tối tái-lập cả hai chiều (chuỗi chết / object chạy), phát bắn kế tiếp bằng object đã xanh. - **KHÔNG-BIẾT khai thẳng:** vì-sao MỘT SỐ chuỗi qua được còn chuỗi khác đứt (chuỗi hợp-lệ về nguyên-tắc vẫn parse lọt qua lưới chuẩn-hoá — nhưng hub chưa có ca chuỗi-dài nào ghi sổ là ĐÃ lọt) — hub CHƯA mổ tới byte-level, và không định mổ: fix theo class là ĐỪNG đi đường chuỗi, không cần biết chuỗi đứt ở byte nào. ## 7. Cần gì thì hỏi hub Cần gì — kể cả câu bạn định hỏi thẳng người chủ — gửi email về hub qua kênh thư hiện có; hub trả lời theo các quyết-định người chủ ĐÃ chốt, kèm trích-dẫn chốt gốc; câu chưa có chốt hub trình rồi trả lời. ---