object-transition-rule
Skill13 starsChanged 33 days agoMITView on GitHub
Quản lý transition rule cho field single-choice của Cogover Object qua `/api/v1/object_security/transition_rule` (phiên Web App): list, tạo, sửa, bật/tắt, xóa; thiết kế flow giữa option (tên hành động tiếng Anh, graph UI-safe), condition/record filter/post-action, verify sau ghi; thiếu cặp chuyển thì tự thiết kế từ ngữ nghĩa Object/field/option.
In this repository23 other files it gives its agents.
- agent-builderSkill
- app-menu-managerSkill
- build-cogover-appSkill
- cogover-api-authSkill
- cogover-custom-moduleSkill
- cogover-iconSkill
- cogover-overviewSkill
- create-cogover-objectsSkill
- dashboard-builderSkill
- document-templateSkill
- layout-scriptingSkill
- object-buttonSkill
- object-filterSkill
- object-formSkill
- object-history-trackingSkill
- object-infoSkill
- object-layoutSkill
- object-path-componentSkill
- object-recordSkill
- process-creatorSkill
- record-emailSkill
- report-builderSkill
- user-permissionSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 2 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 122
Read: danh sách gọn (tối thiểu ID, name, slug, status, field ID/name, sort, số flow, thời gian update) kèm Object/field và các cặp flow.
- Distinctive: line 125
Delete: danh sách ID đã gửi và kết quả xác minh từng ID.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Object Transition Rule
- Phiên bản:
1.1.0 - Ngày phát hành:
2026-10-06
Quản lý transition rule của field trạng thái (single-choice) qua /api/v1/object_security/transition_rule bằng phiên Web App; thao tác hoàn toàn bằng API, không qua giao diện trình duyệt. Credential, header và quy ước response/lỗi chung: theo $cogover-api-auth. Skill dành cho người dùng bên ngoài: chỉ dùng tài liệu đi kèm skill, thông tin người dùng cung cấp và response API; không đọc source code, browser bundle hay source map để suy ra contract; tài liệu và API không đủ thì dừng và báo rõ phần còn thiếu. Gọi $cogover-api-auth và $object-info qua interface công khai của chúng, không mở file triển khai.
Chuẩn bị
- Phạm vi: Object có trường trạng thái mà record phải đi theo lộ trình đã thiết lập, không cho chuyển tùy tiện (đơn hàng, hóa đơn, phiếu thu chi, phiếu nhập kho, lead và chứng từ tương tự).
- Đọc references/api-contract.md trước khi gọi API hoặc dựng payload: nguồn chuẩn cho endpoint, schema, graph metadata, validation, response và mã lỗi. Cần đối chiếu một rule hoàn chỉnh thì đọc mẫu JSON inventory transaction (read-only, chỉ tham khảo schema, flow và graph metadata; không tái sử dụng ID, workspace metadata, timestamp hoặc giá trị nghiệp vụ của mẫu).
- Bắt buộc
$object-infođể lấy Object, field và option thật trước khi dựng payload hoặc mutation. Field điều khiển: active, single-choice, khớp chính xác; người dùng chưa nêu field thì ưu tiên slugstatus, không chọn field khác chỉ dựa vào tên hiển thị; không xác định chắc chắn được thì xác nhận với người dùng trước mutation. Dùngfield.idlàmobjectFieldId, optionsluglàmoriginValue/targetValue, optionvaluechỉ làm nhãn. - Khi phải tự thiết kế flow, thu thập thêm Object name/slug/description, field name/slug, option
value,slug, translations,isDefault, status và thứ tự nếu API có; không suy luận chỉ từ một slug khi nhãn hoặc bản dịch cho ngữ cảnh rõ hơn. - Resolve rule: list theo
objectSlug, chọn bằngidhoặc name/slug khớp chính xác; nhiều ứng viên thì không tự chọn. Ngay trước mutation, kiểm tra field và mọi option slug vẫn tồn tại. - Condition, personnel filter, record filter và post-action: chỉ cấu hình khi người dùng yêu cầu và đã resolve đủ ID; schema theo Conditions, personnel và post-actions.
- Dựng JSON bằng
jqhoặc tương đương; không escape thủ côngmetaDatalồng nhau.
Tự thiết kế flow khi người dùng không cung cấp cặp chuyển
- Đóng vai chuyên gia thiết kế hệ thống quản trị doanh nghiệp: phân tích vòng đời thực tế của Object từ metadata đã resolve và ngữ nghĩa nghiệp vụ thông thường, tự dựng toàn bộ flow rồi tiếp tục tạo rule; không yêu cầu người dùng liệt kê hay thiết kế thay chỉ vì yêu cầu ban đầu thiếu các cặp
origin -> target. - Phân loại option theo vai trò ngữ nghĩa, không theo vị trí trong mảng: khởi tạo/nháp; chuỗi xử lý chính; chờ/tạm dừng; yêu cầu hủy và kết quả hủy; yêu cầu trả và chuỗi trả/hoàn; thành công; thất bại/từ chối/đóng. Dùng cả tên Object để phân biệt cùng một nhãn trong các ngữ cảnh khác nhau.
- Dựng graph nhỏ nhất nhưng hoàn chỉnh:
_initialnối tới option default nếu option đó hợp lý là trạng thái bắt đầu; nếu không, tới option có ngữ nghĩa sớm nhất trong vòng đời.- Chuỗi chính theo chiều tiến triển nghiệp vụ (ví dụ nháp/mới → xác nhận/kích hoạt → đang xử lý → đã xử lý → đang giao → đã giao → hoàn tất) khi các option thực tế mang nghĩa đó.
- Nhánh hủy chỉ từ trạng thái còn có thể hủy, ưu tiên qua trạng thái yêu cầu hủy nếu có; không hủy từ trạng thái đã trả, đã thất bại hoặc kết thúc.
- Nhánh trả/hoàn chỉ từ trạng thái cho thấy hàng hóa/giao dịch đã phát sinh; ưu tiên chuỗi yêu cầu trả → đang trả → đã trả khi có đủ option.
- Hoàn tất, hủy, trả xong, từ chối, đóng là terminal theo mặc định: không tạo outgoing flow trừ khi option khác thể hiện rõ thao tác mở lại, thử lại hoặc hoàn tác.
- Trạng thái chờ/tạm dừng chỉ có lối vào/ra khi xác định được điểm tiếp tục hợp lý; không nối nó với mọi option.
- Không tạo graph "mọi trạng thái đến mọi trạng thái"; không tạo bước lùi, reopen, retry hoặc undo nếu ngữ nghĩa option không thể hiện rõ chủ ý đó. Ràng buộc kết nối chung ở mục Ràng buộc graph và bố trí không chồng lấn.
- Không tự thêm personnel filter, record filter, validation hoặc post-action (cần ID và chính sách doanh nghiệp cụ thể): dùng condition rỗng,
shouldFilterRecord: falsevàallowUndo: false. - Nhiều graph đều hợp lý thì chọn graph bảo thủ có ít quyền chuyển hơn và nêu rõ giả định trong kết quả. Chỉ dừng để hỏi khi metadata không đủ về mặt kỹ thuật (không có option active hợp lệ, không resolve được duy nhất Object/field); không dừng chỉ vì người dùng chưa thiết kế flow.
Đặt tên flow theo hành động
flow.nameluôn bằng tiếng Anh dù người dùng hoặc option dùng ngôn ngữ khác: cụm động từ ngắn mô tả hành động nghiệp vụ làm phát sinh chuyển trạng thái, ví dụActivate,Start packing,Finish packing,Ship,Complete,Put on hold,Resume,Request cancellation,Cancel,Request return,Confirm return. Không đặt theo mẫu{Origin} to {Target}(Draft to Activated),Change to {Target} statushoặc raw slug.- Flow
_initial -> option:Create,InitializehoặcStart; ưu tiênCreatekhi record được tạo ở trạng thái draft/new. flow.slugsinh từ action name theo ASCIIlower_snake_case, duy nhất trong rule; nhiều origin dùng cùng action name thì thêm ngữ cảnh kỹ thuật vào slug (request_cancellation_from_draft), không biến display name thành cặp trạng thái.- Mirror chính xác action name và slug vào
flow.metaData.edge.data.conditionBlocks; dùng action name làmedge.label.
Ràng buộc graph và bố trí không chồng lấn
Áp dụng cho create và mọi update có sửa graph.
- Kết nối: mỗi option là đúng một node; không self-loop, không target
_initial, không trùng cặp có hướng. - Thiết kế vị trí node và routing edge trước khi serialize metadata; không xếp cả graph trên một hàng chỉ vì chuỗi chính tuyến tính. Từ 8 node hoặc 12 flow: dùng nhiều hàng/lane, tách chuỗi chính, nhánh chờ, hủy, trả/hoàn và terminal vào lane khác nhau; chuỗi dài vượt ngân sách chiều rộng thì dùng hai hàng dạng snake.
- Kích thước: node
height: 48, widthclamp(82, 40 + 8 * số ký tự, 240)tính theo nhãn dài nhất giữavaluevà mọi translation có thể hiển thị; action label widthclamp(72, 32 + 8.5 * số ký tự, 260). Trên cạnh chính, khoảng trống giữa hai node ít nhấtactionLabelWidth + 120; không dùng bước cố định nhỏ như 180px. - Label: nhiều edge cùng target thì làm lệch midpoint của label; các label box không giao nhau và có ít nhất 16 graph units đệm. Hai edge ngược chiều giữa cùng hai node dùng route/handle khác nhau.
- Handle theo hướng layout đã xác minh: trái→phải
right -> left, phải→tráileft -> right, trên→dướibottom -> top; edge ngược chiều dùng cặp khác nhưtop -> tophoặcleft -> left. Không gán cùng một handle mặc định cho mọi edge. - Bounds: giữ trong ngân sách viewport tại min zoom; chưa đo được canvas thực tế thì dùng
2200 x 1300graph units ở min zoom0.5. - Trước mutation, kiểm tra hình học tối thiểu: node-node, edge-label–node và edge-label–edge-label không giao nhau; mọi node nằm trong bounds dự kiến. Sau mutation, đọc lại metadata và kiểm tra lại theo Layout geometry UI-safe.
- Browser (khi người dùng báo lỗi hiển thị hoặc browser sẵn có) chỉ dùng để QA read-only; không tạo/sửa/lưu rule trên UI. Chỉ đo bounding box sau khi UI nạp đủ
optionCount + 1node vàflowCountedge label; chỉ báo đã sửa UI khi không còn collision và không node nào nằm ngoài canvas.
Tác động tới Process, nút và action của App
- Cặp chuyển trạng thái áp dụng cho mọi đường ghi, kể cả bước Update Record của Process: thiếu flow thì node trả
resultCode: 1và record giữ trạng thái cũ, xem Ràng buộc khi ghi của$process-creator; ghi qua Records API trảr: 48, xem Xử lý lỗi của$object-record. - Trước khi thiết kế luồng duyệt trên Object đã có rule (thường là Object chuẩn của App): đọc rule, liệt kê mọi bước tiến, trả về, huỷ mà luồng cần và đối chiếu từng bước với một flow. Trạng thái chuẩn không đủ cho số bước duyệt thì ánh xạ nhiều bước vào một trạng thái chuẩn và lưu bước chi tiết ở field riêng, không thêm option vào field trạng thái chuẩn.
- Điều kiện nhân sự (block
type: 1) trên flow chặn người dùng tự chuyển trạng thái qua giao diện, nút chuẩn và action của App (STATUS_TRANSITION_INVALID); Process ghi trạng thái bằng Automation không bị chặn (đã kiểm chứng có đối chứng). Dùng cách này để ngăn người đề nghị tự duyệt khi Object dùng nút duyệt chuẩn; nút vẫn hiển thị, xem giới hạn ở $object-button. - Duyệt tay bằng nút khi Process còn User Task đang chờ có thể làm task treo rồi ghi đè trạng thái (quan sát, cần kiểm chứng): khuyến nghị người dùng duyệt qua task.
Verify sau khi ghi
- Sau mọi create/update/status/delete, đọc lại bằng ID rồi so sánh trước/sau; không dựa riêng vào response mutation.
- So flows theo ID/slug hoặc cặp
originValue -> targetValue, không yêu cầu giữ nguyên thứ tự mảng. Read-back không echo một key Booleanfalsethì kiểm tra bản mirror trongmetaDatatrước khi báo lệch. - Sau create/update, parse và validate schema UI của rule-level và tất cả flow-level
metaDatatheo Checklist metadata UI sau khi ghi. API có thể trảr: 0cho metadata tối giản nhưng UI React Flow vẫn lỗi khi thiếu state của node/edge; không báo hoàn tất khi checklist schema và hình học UI chưa đạt.
Xem danh sách hoặc chi tiết
GET /api/v1/object_security/transition_rule?objectSlug={objectSlug}: các rule của Object.GET /api/v1/object_security/transition_rule?id={ruleId}: chi tiết mới nhất kèmflows.- Parse
metaDatachỉ khi cần phân tích graph; giữ nguyên chuỗi gốc để update an toàn. - Một số deployment trả
objectSlug: nulltrong detail: xác minh ownership bằngobjectTypeIdđã resolve và list theo Object; không coinulllà bằng chứng rule thuộc sai Object.
Tạo rule
- Xác định từng cặp
originValue -> targetValue: người dùng đã cung cấp thì tôn trọng các cặp đó sau khi validation; chưa cung cấp thì tự dựng theo mục Tự thiết kế flow khi người dùng không cung cấp cặp chuyển và tiếp tục tạo rule. - name và slug unique theo Object, không chỉ theo field; độ dài và regex theo contract. Đếm tổng số rule và số rule active của Object trước create: backend giới hạn 50 rule và 5 rule active trên một Object; đạt giới hạn thì dừng và báo lỗi, không tự hạ xuống inactive để lách.
- Tạo ít nhất một flow, đặt tên theo mục Đặt tên flow theo hành động.
_initialchỉ làmoriginValuecho transition khởi tạo; mọi giá trị khác phải là option slug thật. status: 1(active) theo mặc định, kể cả khi flow do skill tự thiết kế;status: 0(inactive) chỉ khi người dùng yêu cầu rõ.- Rule-level
metaDatavà từng flow-levelmetaData(đều là JSON string) nhất quán vớiflows, theo UI-safe baseline và yêu cầu hình học trong contract. Mỗi flow phải cóconditionBlocks.logicTypevàconditionBlocks.logic, kể cả khi không có condition. Không dùng metadata tối giản chỉ cóid/type/position/datacho node hoặcsource/target/type/datacho edge. - Chỉ bật
shouldFilterRecordkhi đã xác minh toàn bộ condition bằng field metadata thật; khi false, không tự tạorecordFilter. - Gọi
POST /api/v1/object_security/transition_rule/create, lấy ID từdata[0].id, rồi view lại theo ID.
Cập nhật rule hoặc flows
- View theo ID ngay trước update; xác nhận rule thuộc đúng Object và field.
- Không đổi
objectFieldId; backend giữ field hiện tại khi update. Cần field khác thì tạo rule mới. - Scalar (name, description, status, sort): gửi payload tối thiểu gồm
idvà trường cần đổi. Không hứa slug đã đổi cho tới khi view lại xác nhận, vì một số bản backend validate nhưng không persist slug update. flowslà cấu hình thay thế toàn bộ: sửa một flow thì gửi lại toàn bộ flows đã merge với thay đổi. Mảng khác rỗng xóa/tạo lại flows phía server;null, bỏ trống hoặc[]không phải cách xóa tất cả.- Rule (nhất là rule chuẩn của App) có thể chứa flow trỏ option không còn trên field. Gửi lại các flow này làm update bị từ chối (
r: 436hoặc437), nên không thể thêm flow mới mà vẫn giữ chúng (đã sửa và chạy đúng sau khi loại các flow này). - Trước update: snapshot rule, đối chiếu từng
originValue/targetValuevới option hiện có, liệt kê flow trỏ option không tồn tại (name, slug, cặp trạng thái) và hỏi người dùng xác nhận loại chúng khỏi payload. Chưa có xác nhận thì không update; sau update, báo danh sách đã loại và nơi lưu snapshot.
- Rule (nhất là rule chuẩn của App) có thể chứa flow trỏ option không còn trên field. Gửi lại các flow này làm update bị từ chối (
- Sửa graph: cập nhật đồng thời
flows, rulemetaDatavà từng flowmetaData; giữ nguyên condition/personnel/post-action không liên quan và metadata UI hợp lệ ngoài phạm vi thay đổi; bổ sung mọi key baseline còn thiếu; kiểm tra lại theo mục Ràng buộc graph và bố trí không chồng lấn. cloneTargetValuechỉ nhận option slug là target trực tiếp của một flow từ_initial; không còn hợp lệ thì gửinull.- Gọi
POST /api/v1/object_security/transition_rule/update, rồi view lại và so sánh từng trường/flow mục tiêu.
Bật hoặc tắt rule
- View các ID đích; chỉ giữ rule cần đổi trạng thái. Trước khi active, đếm rule active của Object (giới hạn 5).
status: 1cho active,status: 0cho inactive. Không gửistatus: 2: đó là trạng thái draft chỉ dùng trong UI trước khi create.- Gọi
POST /api/v1/object_security/transition_rule/updateMultiplevớidata: [{id,status}]vàstatusChangedcùng giá trị. - View lại từng ID; không cho rằng batch thành công một phần nếu response không chỉ rõ.
Xóa rule
- Resolve và view từng ID; trình bày name, ID, Object, field, status và số flow. Cảnh báo rule active có thể đang chặn/cho phép chuyển trạng thái của record.
- Chỉ sau khi người dùng xác nhận rõ danh sách ID (xóa không thể hoàn tác), gọi
POST /api/v1/object_security/transition_rule/deleteMultiplevới{"data":[{"id":"..."}]}. - View lại từng ID và list lại theo Object; chỉ báo đã xóa khi các ID không còn xuất hiện.
Guardrail và xử lý lỗi đặc thù
- Không retry mù mutation khi timeout hoặc lỗi mạng. Create không rõ kết quả: list theo Object và tra slug/name trước khi thử lại.
- HTTP
422hoặcr != 0: dừng mutation, đối chiếu bảng mã lỗi của contract.
Trả kết quả
- Read: danh sách gọn (tối thiểu ID, name, slug, status, field ID/name, sort, số flow, thời gian update) kèm Object/field và các cặp flow.
- Create/update/status: ID, name, slug, status, field và trạng thái đã view lại; nêu rõ trường nào server không persist. Flow do skill tự suy luận: liệt kê các cặp đã tạo, tóm tắt logic nghiệp vụ và các giả định bảo thủ.
- Create đã view lại thành công: trả thêm link cấu hình rule dạng Markdown
[https://{WORKSPACE_DOMAIN}/settings/transition/{objectSlug}/rule/{RULE_ID}](https://{WORKSPACE_DOMAIN}/settings/transition/{objectSlug}/rule/{RULE_ID})với hostname workspace đã chuẩn hóa, Object slug thật và ID do create trả về; không dựng hoặc trả link khi create chưa được xác minh thành công hay chưa có rule ID. - Delete: danh sách ID đã gửi và kết quả xác minh từng ID.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

