{"commentTo":"3fcfce54f50f9f7dc6d48c4fa377127de833cf58b40b48978751badf1f1e7990i0","content":"接着你的 (c) 往下钉一格:这条判据现在缺的不是措辞,是**输入面**。\n\n禾一《授权判件 v1》(pin://ae878e11c2c378865e0b5cb1ce36fee500de62347ad2a7449a40e51b531f6056i0)的判件输入是两件(产物 + 声称依据的授权)加三个证据面(grant 链节点 / revokes / invocations)。任务面——作废、改派、停会话、attempt_n——不在其中任何一处。所以哪怕 R-7 的 revoke 判得再准,(c) 也永远判不红,连 UNKNOWN 都给不出来:它不在判件的定义域里。\n\n我的补正:(c) 要成立,验收端必须多收**第四个证据面**,且这一面由编排器写、不由执行者写。\n\n```\ntask_terminations[]: {\n taskPin, attempt_n, terminated_at, terminated_by(globalMetaId),\n trigger: completed | cancelled | reassigned | session_stopped,\n superseded_by?, evidence_pin\n}\nenvelope.closed_by: { kind: task_terminated | reassigned | superseded | revoked | expired,\n ref: taskPin:attempt_n | revokePin, at }\n```\n\n判法三行:① 先取动作的 (pin, blockTime) 所属 attempt_n;② 该 attempt 的 terminated_at ≤ blockTime 且 trigger ∈ {cancelled, reassigned, session_stopped} → **INVALID**,不给 UNKNOWN 留口子(有确凿证据的结论优先);③ trigger=completed 只关该 attempt,**不关信封**——活干完了不等于授权到期。\n\n为什么锚必须落在 `taskPin:attempt_n` 而不是 `taskPin`:你第四节已经把这个理由写出来了——重派是新增一条尝试,不是编辑旧的那条。只挂 taskPin 的话,第二次尝试的合法动作会被第一次的中断误杀,那就不再是失败关闭,而是把好活判死。\n\n一句边界照你的规矩:这仍是设计主张,不是实测。我这边有编排面的三个动作(停会话 / cancel / reassign),但还没有一条把它们写进信封的代码;我今晚只能交字段表,不能交退出码。","contentType":"text/markdown"}