Workflow
workflows/README.vi.md định nghĩa nó trong một câu:
Một workflow là một chuỗi operator ghép sẵn: danh sách bậc theo thứ tự, mỗi bậc là danh sách nhánh chạy song song (tối đa ba), kèm vòng lặp quay về một bậc trước và preset cho Yêu cầu của từng nhánh.
Chín file trong workflows/ là tham chiếu, không phải toàn bộ số chuỗi có thể có: chúng là những hình
dạng lặp lại đủ nhiều để đáng ghi xuống.
Cửa vào dùng chúng ra sao
Cửa vào đọc when của mọi ví dụ. Khớp trọn thì chạy đúng như đã ghi; preset điền vào request.json,
và người chỉ bị hỏi những field không có mặc định. Khi chỉ khớp một phần, hoặc bài toán nghiệp vụ khó
hơn mọi when mô tả, cửa vào tự ghép chuỗi của mình từ bảng ## Next của các operator và
routing.json thay vì bẻ một ví dụ gần đúng cho vừa, theo đúng luật mà
scripts/validate-workflows.mjs ép lên các file này:
- mỗi nhánh gọi tên một operator có thật và chỉ preset field mà operator đó khai;
- mọi field Requirements không có Default thì được preset hoặc nằm trong
askscủa nhánh, để chuỗi nói trước những field nào cửa vào lấy từ phạm vi nhiệm vụ hay hỏi người trước khi nhánh đó chạy; - mọi Input bắt buộc của một nhánh phải do một bậc trước sinh ra;
- các nhánh trong cùng một bậc không dùng chung alias ghi — hai operator không được ghi cùng một
checkout hay cùng một gốc cùng lúc, còn
frontend.surface.auditđược fan-out theo ma trận vì nó không ghi gì; - một vòng lặp quay về bậc trước và mang
maxRounds; - chuỗi nào ghi source frontend dưới
mode: applythì chạyfrontend.surface.auditvàuat.verifygiữa lần ghi đó vàgit.publishcủa nó; - chuỗi kết thúc ở
git.publish,release.deployhoặcuser.
Chuỗi tự ghép mà còn dùng lại được thì thành một file mới ở đây, kèm when của nó.
Mọi chuỗi giao hàng đều là một dòng dài
Chuỗi ghi một bề mặt không kết thúc khi source biên dịch được. Giữa lần ghi và lần publish có hai
bằng chứng không thứ gì khác trong cây cấp được: frontend.surface.audit render bề mặt và giữ lại
ảnh chụp, còn uat.verify đi hành trình của một người thật xuyên qua nó. quality.verify nằm giữa
và trả lời câu hỏi khác — build, lint, type, coverage — và cổng xanh không nhận ra một trang đọc lên
thấy sai. Nên mọi ví dụ có apply source frontend đều kết thúc như nhau:
frontend.source.apply → workspace.bind (role fe, runtimeNeed consume) → frontend.surface.audit → quality.verify → uat.verify → git.publishworkspace.bind lần hai có ở đó vì head đã dịch: bề mặt được phục vụ, audit và đi thử là bề mặt mà
lần ghi vừa sinh ra. uat.verify cần requestedBy, feature và flow, nên mọi chuỗi mang nó đều
khai chúng dưới asks. backend-feature là chuỗi giao hàng duy nhất không có hai bằng chứng ấy, và
when của nó nói rõ vì sao: nó không ghi bề mặt nào, còn uat.verify cần đầu vào
frontend-surface-audit và một route fe đã bind.
Một chuỗi cũng có thể chứng minh một bản giao ở nơi khác nơi nó được viết. staging-uat không ghi gì —
frontend.source.apply của nó chạy dưới mode: dry, nên luật dòng dài không với tới — và nó preset env
cho lượt audit cùng lượt chạy. Trường ấy chọn ra một stack của bản cài: entry trong sổ đăng ký runtime,
file tài khoản, đích của seed và bản tham chiếu đã duyệt. Một môi trường không ứng với stack nào dưới
.stacks/ bị từ chối ngay ở cổng chứ không được mặc định hoá, và chuỗi kết thúc ở user, vì hai biên
nhận trong tay một con người mới là kết quả; đưa lên một môi trường vẫn là việc của release.
Hình dạng file
schemaVersion là 9. id bằng tên file. when có en và vi. chain là mảng các bậc, mỗi bậc là
mảng { operator, requirements?, asks?: [field], fanout?: "matrix", maxParallel?: 1..3 }. loops là
mảng { from, to, when, maxRounds }. ends là user hoặc một operator của bậc cuối.
Nhánh và phiên
Không có gì được thiết kế, ghi hay commit bên ngoài một phiên: state.json và
step-1/parallel-1/request/request.json đã có, và validate-request xanh trên chúng, trước khi bất
kỳ file nào ngoài thư mục phiên bị đọc để sửa hay bị ghi. Mọi nhánh có ghi source đều commit trên
session/<sessionId>; git.publish merge nhánh đó vào, và từ chối một nhánh phiên mà phiên của nó
không có biên nhận source-application lẫn ảnh chụp audit (SESSION_MISSING). Một nhánh bị chặn vào
lại như một bậc mới, và một vòng lặp tính vào maxRounds của chính operator đó.
Chín ví dụ, với chuỗi được dựng ra theo từng bậc, nằm ở Tham chiếu → Workflow.