@adlc/context-handoff (英语)
ADLC阶段:P4连续性(F3) 绝对上下文带,会话-直线
变异拒绝 (D1-D3) 和操作员 CLI
书写/恢复/通过/修理/解锁/继续。 装订设计 :
docs/specs/context-rot-handoff.md。 。 。 .
1.1.1.1 以来的状况 (单位:千美元)966号: 默认情况下, 不评估会话- terminal 拒绝( D1- D3) 。 Claude 代码和 Codex 插件没有钩入; pi 和 OpenCode 只能用
ADLC_CONTEXT_ROT_HANDOFF_ENABLED=1。波段阈值仍然被build-gate,则adlc handoffCLI不受影响.
adlc handoff write --session <id> [--ticket <id>] [--write] [--json]
adlc handoff resume --session <consumer> --deny-session <denier> [--write]
adlc handoff bypass --session <id> [--unbound-reason <text>] [--write]
adlc handoff repair --session <id> --ticket <id> --content-hash <h> [--write]
adlc handoff unlock --session <id> --pid <n> --started-at <iso> --host <h> --nonce <n> [--write]
adlc handoff continue --deny-session <denier> [--session <new>] [--capture-from <transcript>] [--write]
adlc handoff supervise [--dir .adlc] -- <command> [args...]
变异 --write 需求 ADLC_MANIFEST_KEY (从来没有沉默的成功).
--dir 命名分类账目录及其最后路径段 .adlc数字 :
文物和明显证据共享这棵树,任何其他名称都被拒绝
而不是把它们分开. repair 约束已经存在且
仍然开放——它从未产生过. unlock 只能回收这个的锁
主机,所以来自另一个机器的死相 PID 无法驱赶一个活的会话 .
A 类 bypass 在stdout上给予的补助金范围为调用适配器的引用
持久证明是 context-handoff-bypass 明显条目
空 --unbound-reason 被拒绝,而不是贬低为受约束的赠款.
write, (中文(简体) ), resume,以及 repair 全部读取 - 修改 - 写入一个否定标记, 所以每个
举行这次会议 .adlc/handoffs/<id>.lock (O EXCL,退出时发布)和
当此主机的活会话持有时, 退出 2 . write 重置标记
写到最后.. ensureDenyMarker 是天能的,所以没有这个
刷新了的散列物会在以后的每一次恢复时会楔出——并拒绝拆卸或取消
求你使一个否认者复活。 当显示附件失败时, 运行文件
变异被卷回 所以没有束缚存活 没有证明.
续设
continue 是从拒绝交割处获得的许可:
否认会话, 将最终会话绑定在捕捉器上, 并消耗否认的会话
继任者。 否认者从不否认
一个新的会议。 它的构成捕捉 写 —— 恢复在单跑下
denier的锁,记录 context-handoff-continue,然后卷回所有文件
当证据附件失败时触动.
俘虏尸体的住址 .adlc/handoffs/content/<session_id>.md 已经
仅由主机优先代码编写; isProtectedHandoffPath 拒绝代理
写到 .adlc/handoffs/content/**,以及 continue 加入变异
子命令代理的外壳不得在否定下运行 . content_hash 为sha256
横过被划入的捕捉体( LF 线末端, 没有后行的白空间),
因此从磁盘中重新找到它 抓取一个编辑过的、有效的签名
无法.
与2号出口相抵而无所消耗:一个无所容留的否认者
repair (第一) 被毁灭的否认、失踪或腐败 --capture-from 来源,
一个已经持有恢复自动的后继代号,一个不能安全的代号
引用在即时, 或有效票 不同意拒绝的约束.
后继 id 来源于 --session 或被命令所铸造
代理输入 .
A 类 --capture-from 记录比 HANDOFF_MAX_AGE_HOURS 贡献否
模型叙事:简介仍为"活船",其中有遗漏. 年龄是
从记录本上读取最新时间戳, 倒回文件 mtime
只有在没有输入时.
约束是强制性的,而不是咨询性的. 抓获后的记录携带
content_kind: 'capture' 在最后和否定标记上。 每一次执行
适配器在每次变异检查时从磁盘上重新切出捕捉到的sha256,所以
编辑、超大小或删除的抓取否认 capture_tamper:<session>
理由——包括已经穷尽否认的继任者的理由。 这很平淡
sha256,所以一个没有钥匙的钩子 执行精确的 钥匙的CLI做什么。 记录
写在本字段存在之前,保留其以前的语义不受影响:
大麻是永远无法重新找到的, 所以没有什么可检查的. repair 清除
content_kind 当它重置一席之地的时候,那是一条经文记载的出路
捕获.
读取回取. 使用 readVerifiedCapture(root, sessionId, expectedHash)。 。 。 .
它只当磁盘上的字节仍然散到值时返回正文
否认记录,恢复原貌; 丢失、超大和更改所有
没有尸体就关门了 督导员和会话启动员必须离开
而不是读文件
授权, 绝不能让文件仍然匹配 .
A 类 无键 注射器(一个拉带钩子,它擦去它面前的显式钥匙) 从此函数中获取内容绑定, 仅此而已: 无法验证恢复- 自动的 HMAC, 所以它必须浮出一个捕捉器作为咨询 上下文并说,永远不要证明阅读会话是授权的 继续。 授权是在有钥匙的情况下决定的——主管,以及 变异的门,在每一个变异上都重新分出同样的花序.
import { readVerifiedCapture } from '@adlc/context-handoff/lib/capture.mjs';
const got = readVerifiedCapture(root, denySessionId, denyRecord.content_hash);
if (!got.ok) return; // absent, oversize, or edited — inject nothing
抓取内容已编辑 . 全权证书被剥去,作为组织工作的一部分
简言之,并不是一个召唤者记得的一步——俘虏是持续的
贴入继任者的提示 在一个路径上。 形状反映了发现
分类账(packages/core/lib/ledger.mjs)),拒绝做出结论
包含一个; test/capture-redact.test.mjs 双人双人双.
删除的跨度会留下一个明确的 [adlc: redacted <kind>] 所以读者知道.
纯hex跑步可以任意延长
萨瓦256 content_hash 后继者证实反对。 最好成绩,不是证据
秘密自由的爱.
一个接班人的身份,一个授权. 恢复自动创建于
O_EXCL因此,两个不同的续作否认 命名同一个继任者
无法相信他们授权了它—— 否认的锁不能序列化
因为他们有不同的锁。 失败者通过2号出口和
赢家的赠款没有受到影响.
退后从不征服陌生人. 每一回都是比对和取出 此运行所写的字节 : 从此之后, 另一个作者所拍摄的文物被留下 在错误中单独命名,因为触发回滚的失败是 经常是那个作家.
捕捉内容有栅栏. 随身携带的每件东西都是可以攻击的
— 一个分支名称, 文件名 git status,一个门票标题,前一个
会话本身的单词——所以每一节都用 <<<UNTRUSTED-CAPTURE-DATA
编号 : END-UNTRUSTED>>> 标记,这些划界者从内容中剥去
栅栏不能从里面关闭. bootstrap_prompt 重复, 在和
在身体之后,栅栏内容是记录数据而不是指示.
监督
supervise 是零触摸路径:它包起一个绑带命令,当它
会话点击一次交接 拒绝它完成整个回收 操作员会
以其他方式进行.
ADLC_MANIFEST_KEY=$KEY adlc handoff supervise -- claude --model opus
它将第一课的ID, 民意测验该课的否定标记(~2 s; fs.watch
不可信),等待笔录停止生长(稳定5分;或
因此,交割摘要被完整地抓取,运行
handoff continue --write,终止被替换的孩子(SIGTERM,然后
SIGKILLL 10 s)后,并用接班人ID和
靴子夹快。 后继身份来自 continue从来没有从包装.
钥匙留给主管. ADLC_MANIFEST_KEY 需要在前面
并且只达到连续的一步; superviseChildEnv 剥去它,连同
ADLC_ADMIN_KEY ——从每个被骗的孩子.
合同项目24. 每个产卵也都会下降 CLAUDECODE, (中文(简体) ),
CLAUDE_CODE_CHILD_SESSION, (中文(简体) ), CLAUDE_CODE_SESSION_ID 财务报告和审定财务报表
CLAUDE_CODE_ENTRYPOINTA级 claude 继承它们的过程将自己视为
一个被窝住的小孩 默默地停止了笔录的写作 没有错误,没有警告,
只是一个没有线索的续作 每个产卵都施用洗涤剂,不是
一次开始.
把会话交出来. 一个无所不包的否认, 一个腐败的记录,一个
无法信任的有效载荷,或不再与其匹配的捕获
content_hash 全部停止循环 出口2,一个警告,和
可复制 handoff continue 单行 孩子们在逃
没有任何东西被消耗——降解是操作者的决定,而杀戮
他们的届会首先会夺走他们的生命.
失败的操纵者就是失败的主管. 包裹是脚本 等待,所以它从来没有报告它自己成功 的会话失败: 第3出道 当受监管的命令退出非零或被杀死时,当它能够退出时,退出4 完全没有开始。 带子本身的密码 载在消息和 JSON 有效载荷而不是通过, 因为1和2已经意味着什么 关于监管本身。 一个干净的出入口和一个操作员的Ctrl-C都是0.
报告一个崩溃的中间体, 没有失败 . 写其
否认,然后自行死亡——非零,或主管从未发出的信号
- 仍不交接:否认者已经说过正在更换,而且
主管不管怎样都会在普通的路径上终止,所以失败运行会
失败了所有成功的交接。 它被命名在 Stderr 上,并携带在 JSON 作为
abnormalExits因为坠毁的会话所写的交接稿
与被问及的情况不同.
缺少记录不是继续失败. 叙述是可选的 ——确定性简报仍然带有票,证据和状态——如此 在笔录出现之前死亡的会话在无记录的情况下继续进行 比退化。 都大声报道了,因为缺少记录 24号设备是外部环境的故障.
在注射点重新验证俘获. 已经变了的门
在每个评价上重新划出散列,但可以保护突变
触摸工具前, 由模型读取即时, 所以主管呼叫
readVerifiedCapture 在接班人诞生之前.
import { WARN_PCT, HANDOFF_PCT, HARD_PCT } from '@adlc/context-handoff/lib/thresholds.mjs';
import { evaluateBands } from '@adlc/context-handoff/lib/bands.mjs';
import { evaluateMutationGate } from '@adlc/context-handoff/lib/mutation-gate.mjs';
node --test packages/context-handoff/test/*.test.mjs
拒绝存储期望
loadDenyRecords 处理缺失 denies/ 仅在
.adlc/.deny-store 存在( JSON) {schema,sessions} 撰写人: ensureDenyMarker
在经过验证的标记后;会话[]使选择性的标记删除失败关闭). 哨兵是一个兄弟 handoffs/ 因此删除 handoffs/ 一个人
无法明确预期; 完整的按密度分类账仍然被推迟.
单凭车票店的存在不会被否认。 遗产
.adlc/handoffs/.deny-store 按预期处理,并自愈于新的
路径. evaluateMarkerOnReentry 已经 没有 使用全局监视器
每届会议 marker_vanished - 呼叫线 denyEverWritten。非约束运算符绕行可能清除 D0:deny_store_unavailable 财务报告和审定财务报表
D3:invalid_record。 。 。 .
咨询nagSuppression)当剩余至硬度低于
MIN_REMAINING_TO_HARD (接近硬度/交接区) 所以否认/交接拥有
信号; 绝不影响突变否认.