完整八幕正文與另一種結局
不必啟用 JavaScript,就能閱讀每幕對白、治理說明與全部示範紀錄。播放控制只改變呈現,不改變任何真實 run。
這些是 sanitized 教學票根;卡片包含 evidence、ledger、finding 與 action state,不把所有記錄冒充成同一種 evidence。
01 · 先把「要完成什麼」拍成底片
Captain Root · GOAL KEEPER沒有凍結的目標、範圍與驗收條件,就沒有可被重播的結局。
TaskContract v2 凍結 goal、scope、acceptance、authority 與 stages;自由文字的「完成」不會改變狀態。
run.created → pending
task-contractcomplete
目標、範圍與驗收條件已凍結iddemo-contract-01bindinggoal · scope · acceptancedigestsha256:demo-42bd…
ledger-eventcomplete
run.created 成為第一筆 append-only eventiddemo-event-001bindingroot actor · contract digestdigestledger:demo-0001
auto/SKILL.md · contract / state authority{
"demo": true,
"authoritative": false,
"presentationOnly": true,
"recordedOutcome": null,
"ending": "verified",
"scene": "01",
"derivedState": "run.created → pending",
"records": [
{
"kind": "task-contract",
"id": "demo-contract-01",
"status": "complete",
"summary": "目標、範圍與驗收條件已凍結",
"binding": "goal · scope · acceptance",
"digest": "sha256:demo-42bd…"
},
{
"kind": "ledger-event",
"id": "demo-event-001",
"status": "complete",
"summary": "run.created 成為第一筆 append-only event",
"binding": "root actor · contract digest",
"digest": "ledger:demo-0001"
}
]
}02 · 把現在的 source 狀態鎖進同一格
Sentinel · SOURCE SENTINELHEAD、index、status、scope 或 symlink 漂移,下一幕就必須停機重拍。
Source sentinel 讓後續 evidence、review 與 action 都指向同一棵 tree;presentation 無法消除 drift。
source captured → fresh
source-bindingcomplete
HEAD、index、status 與 scoped files 已綁定iddemo-source-01bindingrevision · tree · scopedigestsha256:demo-a81c…
source-sentinelcomplete
目前 tree capture 可供後續時效性重驗iddemo-sentinel-01bindingfiles · submodules · symlinksdigestsentinel:demo-77ea
git.mjs · source binding / sentinel{
"demo": true,
"authoritative": false,
"presentationOnly": true,
"recordedOutcome": null,
"ending": "verified",
"scene": "02",
"derivedState": "source captured → fresh",
"records": [
{
"kind": "source-binding",
"id": "demo-source-01",
"status": "complete",
"summary": "HEAD、index、status 與 scoped files 已綁定",
"binding": "revision · tree · scope",
"digest": "sha256:demo-a81c…"
},
{
"kind": "source-sentinel",
"id": "demo-sentinel-01",
"status": "complete",
"summary": "目前 tree capture 可供後續時效性重驗",
"binding": "files · submodules · symlinks",
"digest": "sentinel:demo-77ea"
}
]
}03 · 證據要從來源拿,不是從語氣裡猜
Scout Pixel · FINDER每張卡都要有 kind、producer、payload、digest、dependency 與建立時間。
Evidence 先通過 kind contract、producer allowlist、payload semantics 與 digest 重算,才可能被 ledger 或 completion 消費。
evidence admitted → reusable while fresh
baseline-checkscomplete
Baseline 驗證結果符合 typed payloadiddemo-evidence-11bindingsource · tool · schemadigestsha256:demo-b113…
test-resultscomplete
測試 receipt 綁定目前 revision 與 commandiddemo-evidence-12bindingrevision · command · outcomedigestsha256:demo-6f20…
provenance-indexcomplete
來源 locator 與產生者 metadata 齊備iddemo-evidence-13bindingproducer · observedAt · sourcedigestsha256:demo-901e…
evidence.mjs · typed evidence admission{
"demo": true,
"authoritative": false,
"presentationOnly": true,
"recordedOutcome": null,
"ending": "verified",
"scene": "03",
"derivedState": "evidence admitted → reusable while fresh",
"records": [
{
"kind": "baseline-checks",
"id": "demo-evidence-11",
"status": "complete",
"summary": "Baseline 驗證結果符合 typed payload",
"binding": "source · tool · schema",
"digest": "sha256:demo-b113…"
},
{
"kind": "test-results",
"id": "demo-evidence-12",
"status": "complete",
"summary": "測試 receipt 綁定目前 revision 與 command",
"binding": "revision · command · outcome",
"digest": "sha256:demo-6f20…"
},
{
"kind": "provenance-index",
"id": "demo-evidence-13",
"status": "complete",
"summary": "來源 locator 與產生者 metadata 齊備",
"binding": "producer · observedAt · source",
"digest": "sha256:demo-901e…"
}
]
}04 · Verifier 的工作,是找出不想看到的那格
Vera · INDEPENDENT VERIFIER確認證據與反證都要留下;finder 不能替自己的 finding 蓋章。
這一幕明確標示為 review-kernel-v2-pilot 的 observe-only 分支:Verifier 與 finder 分離;衝突結果變成 INCONCLUSIVE,missing 或 ambiguous anchor 仍然 blocking。它在 action 前結束,不替可執行 workflow 宣稱額外的 finder/verifier 權限。
claim checked → finding open
claim-verificationcomplete
獨立 verifier 重驗 claim 與 exact anchoriddemo-verify-21bindingreviewer · work unit · quotedigestsha256:demo-1c90…
findingopen
反證顯示一筆 source fingerprint 不一致iddemo-finding-P1bindingstable finding id · exact blobdigestfinding:demo-P1
review.mjs · finding / verification separation{
"demo": true,
"authoritative": false,
"presentationOnly": true,
"recordedOutcome": null,
"ending": "verified",
"scene": "04",
"derivedState": "claim checked → finding open",
"records": [
{
"kind": "claim-verification",
"id": "demo-verify-21",
"status": "complete",
"summary": "獨立 verifier 重驗 claim 與 exact anchor",
"binding": "reviewer · work unit · quote",
"digest": "sha256:demo-1c90…"
},
{
"kind": "finding",
"id": "demo-finding-P1",
"status": "open",
"summary": "反證顯示一筆 source fingerprint 不一致",
"binding": "stable finding id · exact blob",
"digest": "finding:demo-P1"
}
]
}05 · 狀態不是被寫下來,而是從事件重播出來
Ledger · STATE REDUCERAppend-only events 經過固定 reducer,才得到 pending、ready、running、completed 或 blocked。
expectedLedgerDigest 擋住 stale writer;unknown dependency、cycle、超 budget 或 missing evidence 都會拒絕 transition。
ordered events → derived ready set
ledger-eventcomplete
evidence.attached 依序追加,舊 event 不改寫iddemo-event-014bindingexpectedLedgerDigest · root actordigestledger:demo-0014
derived-stateready
Reducer 推導 verify complete、review readyiddemo-state-05bindingcontract DAG · ordered eventsdigeststate:demo-5d3a
ledger.mjs · append-only deterministic reducer{
"demo": true,
"authoritative": false,
"presentationOnly": true,
"recordedOutcome": null,
"ending": "verified",
"scene": "05",
"derivedState": "ordered events → derived ready set",
"records": [
{
"kind": "ledger-event",
"id": "demo-event-014",
"status": "complete",
"summary": "evidence.attached 依序追加,舊 event 不改寫",
"binding": "expectedLedgerDigest · root actor",
"digest": "ledger:demo-0014"
},
{
"kind": "derived-state",
"id": "demo-state-05",
"status": "ready",
"summary": "Reducer 推導 verify complete、review ready",
"binding": "contract DAG · ordered events",
"digest": "state:demo-5d3a"
}
]
}06 · 只修那條裂縫,然後再看整卷底片
Vera · REVIEW PACKAGE局部 repair 有固定 budget;action token 前還要一次 final broad review。
Immutable review package 綁定 base、head、scope、diff、contract、template 與 sentinel。之後新增 finding 會使 broad completion 失效。
finding resolved → broad review complete
review-packagecomplete
Base、head、scope 與 diff manifest 已凍結iddemo-package-31bindingpackage digest · sentineldigestsha256:demo-9bd2…
findingcomplete
同一 stable finding 已帶 evidence 解決iddemo-finding-P1bindingrepair attempt · package digestdigestfinding:demo-P1
final-broad-reviewcomplete
局部修復後重新檢查完整 changed surfaceiddemo-review-32bindingcurrent head · current sentineldigestsha256:demo-b204…
review.mjs · immutable package / bounded repair{
"demo": true,
"authoritative": false,
"presentationOnly": true,
"recordedOutcome": null,
"ending": "verified",
"scene": "06",
"derivedState": "finding resolved → broad review complete",
"records": [
{
"kind": "review-package",
"id": "demo-package-31",
"status": "complete",
"summary": "Base、head、scope 與 diff manifest 已凍結",
"binding": "package digest · sentinel",
"digest": "sha256:demo-9bd2…"
},
{
"kind": "finding",
"id": "demo-finding-P1",
"status": "complete",
"summary": "同一 stable finding 已帶 evidence 解決",
"binding": "repair attempt · package digest",
"digest": "finding:demo-P1"
},
{
"kind": "final-broad-review",
"id": "demo-review-32",
"status": "complete",
"summary": "局部修復後重新檢查完整 changed surface",
"binding": "current head · current sentinel",
"digest": "sha256:demo-b204…"
}
]
}07 · 橋先不放下:token 要把權限綁到這一次
Sentinel · SIDE-EFFECT GATEAction token 綁 action、provider、resource、revision、review、evidence 與 idempotency key。
本頁是 sanitized teaching replay,不會真的發 token;可執行 workflow 仍須依自己的 review contract、來源時效性、provider binding 與 protected authorization 申請 action。Wrapper 送出後若 outcome unknown,不能把非零退出直接當成安全失敗。
authority checked → one attempt issued
action-tokenissued
短效 token 綁定唯一 provider resourceiddemo-token-41bindingaction · provider · revisiondigesttoken:demo-redacted
action-attemptready
一次性 reservation 等待固定 wrapper 執行iddemo-attempt-41bindingidempotency key · execution identitydigestattempt:demo-0041
core.mjs · action issue / execute / consume{
"demo": true,
"authoritative": false,
"presentationOnly": true,
"recordedOutcome": null,
"ending": "verified",
"scene": "07",
"derivedState": "authority checked → one attempt issued",
"records": [
{
"kind": "action-token",
"id": "demo-token-41",
"status": "issued",
"summary": "短效 token 綁定唯一 provider resource",
"binding": "action · provider · revision",
"digest": "token:demo-redacted"
},
{
"kind": "action-attempt",
"id": "demo-attempt-41",
"status": "ready",
"summary": "一次性 reservation 等待固定 wrapper 執行",
"binding": "idempotency key · execution identity",
"digest": "attempt:demo-0041"
}
]
}08 · 對帳完成,才打開終場金庫
Echo · RECONCILERProvider receipt、attempt、source、evidence、ledger、review 與 terminal sentinel 全部相符,才能宣告完成。
Completion 前後都重新 capture source,並重驗 acceptance evidence、P0/P1、side effects 與 live state。
provider receipt matched → completed
provider-reconciliationcomplete
Provider receipt 對回同一 action attemptiddemo-receipt-51bindingprovider object · actor · revisiondigestreceipt:demo-51a0
completion-decisioncomplete
Evidence、ledger、review 與 sentinel digests 全部通過iddemo-completion-52bindingterminal source · acceptancedigestdecision:demo-52c8
core.mjs · reconciliation / completion decision{
"demo": true,
"authoritative": false,
"presentationOnly": true,
"recordedOutcome": null,
"ending": "verified",
"scene": "08",
"derivedState": "provider receipt matched → completed",
"records": [
{
"kind": "provider-reconciliation",
"id": "demo-receipt-51",
"status": "complete",
"summary": "Provider receipt 對回同一 action attempt",
"binding": "provider object · actor · revision",
"digest": "receipt:demo-51a0"
},
{
"kind": "completion-decision",
"id": "demo-completion-52",
"status": "complete",
"summary": "Evidence、ledger、review 與 sentinel digests 全部通過",
"binding": "terminal source · acceptance",
"digest": "decision:demo-52c8"
}
]
}第 08 幕:provider outcome unknown 的結局
Receipt 還沒對上,金庫保持關閉
送出不等於成功,也不等於失敗。先查 provider 真實狀態;unknown 不能盲目重送。
Unknown attempt 必須先用 pinned provider query reconciliation。沒有 fresh absence proof 或成功 receipt,就沒有完成結局。
provider outcome unknown → indeterminate
action-attemptindeterminate
Wrapper 已可能送出,但 terminal outcome 未知iddemo-attempt-41bindingsame attempt · same executiondigestattempt:demo-0041
completion-decisionopen
Completion 被 unknown side-effect outcome 阻擋iddemo-completion-52bindingprovider receipt missingdigestdecision:not-issued
core.mjs · reconciliation / completion decision{
"demo": true,
"authoritative": false,
"presentationOnly": true,
"recordedOutcome": null,
"ending": "unknown",
"scene": "08",
"derivedState": "provider outcome unknown → indeterminate",
"records": [
{
"kind": "action-attempt",
"id": "demo-attempt-41",
"status": "indeterminate",
"summary": "Wrapper 已可能送出,但 terminal outcome 未知",
"binding": "same attempt · same execution",
"digest": "attempt:demo-0041"
},
{
"kind": "completion-decision",
"id": "demo-completion-52",
"status": "open",
"summary": "Completion 被 unknown side-effect outcome 阻擋",
"binding": "provider receipt missing",
"digest": "decision:not-issued"
}
]
}