mandate 是一份產出物,不是一個設定項。
有界委派是 Execution Authorization 之內的一種能力,不是另起一個類別。Task Contract 為這條鏈定下框架;它不取代其中任何一環。每一步仍然產生自己那份一次性的 Execution Grant 和自己那份 Action Receipt。
設計
TaskContractV1
這份合約在單一的簽章物件中綁定:tenant、可在其之下行事的行為者、它所指向的 Guardian 與 audience、修訂號、步驟及其限制、預算及其單位、有效期間、生效中的政策與 manifest,以及撤銷計數器。
taskId · revision身分與版本。已核准的合約從不就地修改:任何一步的更動都會產生一個需要重新審閱的新修訂。
tenant · guardianId · audience它屬於誰,以及哪一個執行點可以消耗它。一份 mandate 只指向一個 Guardian。
actors[]每個行為者把一個識別碼綁定到一把金鑰及其 thumbprint。認領一個步驟,需要針對一個新鮮的 challenge 證明持有該金鑰,而這個 challenge 是原子消耗的。
authority由協定按作業固定。呼叫方既不能選它,也不能在同一個請求內把它降級,而且已核准的 mandate 從不降低某一步的門檻。
steps[]每一步點名自己的正規作業、供應商、資源清單、其確切參數的摘要,並把 maxUses 固定攜帶為一。
budget按 tenant、任務、修訂與步驟持久且原子。已承諾 = 已消耗,加上所有結果尚未確定或不確定的預留,因此同一份 grant 無法預留兩次。
issuedAt · expiresAt有效期間。過了它就不再送出新的步驟;沒有寬限期,也不能從任務內部續期。
policyVersion · revocationVersion生效中的簽章本機政策與撤銷計數器。若儲存或撤銷不可用,就不再送出新的效果。
交集依然適用
有效權限 = mandate ∩ grant ∩ 簽章的本機政策 ∩ 配接器限制 ∩ 預算 ∩ 身分 ∩ 有效性與撤銷
雲端從不抬高本機上限。mandate 只是交集裡多出的一項,絕不是繞過它的路子,而 Guardian 會在接觸任何供應商之前把它們全部執行到位。
狀態機
一個任務恰好處在一個狀態中,而帳本記錄的是狀態轉移,不是意圖。
- draft
- approved
- running
- paused
- completed
- revoked
- expired
刻意的排除
- 沒有再委派。一份 mandate、一個 Guardian、一份預算;一個任務無法把自己的一部分交給另一個行為者,也無法立起第二個執行點。
- 沒有開放式效果。一個沒有正規作業、沒有參數摘要的東西,不算一個步驟。
- 沒有長期有效的授權。每一份 mandate 都會到期,而且這個到期無法從任務內部續期。
- 行為者讀到的東西——文件、工具輸出、網頁內容、記憶——是輸入,絕不是 authority。它無法擴展這份合約。
- 正規效果與前置狀態由配接器判定。代理程式的摘要、唯讀的結構描述,或從內容裡取來的目的地,都不會被當作事實接受。
讀取器的角色
本機讀取器是用來解釋的。在這個設定檔下,一則孤立的發現、一次棄權、一次未評估或一次部分讀取,都不會阻斷、不會撤銷,也不會對一個已經核准且被允許的確切效果強加額外核准。絕不會為了彌補一則警示而抬高 authority,也絕不會因為沒有出現警示就降低它。身分、簽章、預算、前置條件與撤銷仍然朝著關閉的一側失敗——這不是可以不帶控制就執行的許可。
狀態
設計。結構描述及其不變量已經存在,並有測試涵蓋。還沒有任何被委派的 mandate 對著真實供應商執行過,因此這個設定檔被標為模擬。結果絕不會從一個 mock 或另一個連接器外推而來,而用 MFA 或法定人數測過的舊連接器,也不能為多步委派背書。
尚未定論的問題
正規化的細節、大小與數量上限、時鐘處理,以及對未知欄位的拒絕,都會在動手做任何執行期之前先行固定,並與驗證器一起作為帶版本的測試向量公布。驗證器先於設定檔發布:不會送出任何還無法被獨立驗證的東西。