跳到正文

Assignment Report 批次与来源历史

已核验的 progress 合并、原生 harvest 与独立来源历史。

本指南记录在 DSH 0.2.0-rc.1 上通过真实模型核验的 #194 窄切片。Assignment Report 是 application-defined 的持久 Source Event,被接收到所属 PersonaBot 的 Bot Inbox;边界见架构。来源策略、ready-set harvest 与 observation 均由 Host 管理。

Human 操作

  1. 请已授权的 PersonaBot 创建一个 Assignment:先报告两条 progress,再等待一个无害工具审批,之后报告完成。
  2. 打开 Channel 侧栏的 Bot 收件箱。两条 progress 各自独立、待处理且可导航。默认 Conditional Assignment Report 策略下,这些信息性进度不会启动另一个 Orchestrator Turn。
  3. 点击 progress 条目,打开所属的原生 DSH Session。查看不等于 Bot 观察,也不会唤醒;之后返回 Bot 模式。
  4. 对准备好的工具允许一次。Assignment 提交 completed Report,Orchestrator 收取待处理批次,并回原 DM。
  5. 在 Bot 收件箱展开 Assignment 分组与已处理历史。两条 progress 和 completed 仍是三个独立的已处理来源。刷新后可再次打开来源。

本验收场景的原生工具只是一个 1 秒 Node timer,不修改文件。单次审批是 QA 操作,不属于 Assignment 自行授予的权限。

已核验行为

阶段 原生执行 持久来源投影
两条 progress、timer 待审批 一个初始 Orchestrator Turn,progress 没有新增唤醒 两个独立、待处理的 progress 来源
单次审批后完成 只新增一个 harvest Turn、一个模型可见 Inbox 投递;含 repeats 3 与最新摘要 三个独立 ID、同一观察时间及处理时间;均已处理且可导航
Human 打开来源 真实认证的原生 session/follow 指向所属 Session 来源状态/观察时间不变,没有新增 Orchestrator Turn

Assignment 的三个 report_to_orchestrator 调用都有成功的原生 Session 结果。全部完成 DM marker 晚于 completed Report 的成功结果。Turn/投递断言来自完整原生 snapshot,而不是回复条数。

真实截图与公开证明记录本次执行。现有生产路径通过,本次增加证据和可复现核验;不关闭 #194,也不声称验证了 Report/Lifecycle Notice 配对、强原因升级、中断或活动回合的重启恢复;普通待处理进度的冷启动场景见下文。并发限制与答复投递结算仍由独立任务负责。

Agent 复现

用 scripts/dev-instance.mjs 启动全新隔离 Profile。将 BH_E2E_ORIGIN 设为 loopback URL、BH_E2E_HOME 设为该 home、BH_E2E_EVIDENCE 设为私有目录,再执行:

node scripts/e2e-assignment-report-harvest.mjs prepare
node scripts/e2e-assignment-report-harvest.mjs complete

prepare 使用真实 Orchestrator/Assignment 模型请求,检查待处理来源并截图实际 UI。complete 通过认证 Human Gateway 做 timer 单次审批,核验原生 Report 与批次,再截图已处理历史。verify 只读重复完成核验和截图;capture 只重复 UI/来源导航核验。两个只读模式都不启动模型请求。

凭据、原始 Session 内容、工具参数/结果、机器路径和登录 URL 留在私有目录。公开记录仅含有界 QA marker、来源 ID、原生结果时间及已核验结果。截图使用真实 Profile 与所选 Assignment 的 Bot 收件箱,工具审批参数位于截图视图之外。

Host 重启后的待处理报告

第二次真实 DSH 0.2.0-rc.1 验证以已结束回合的一个 Assignment 和两条普通进度报告为起点,使用内建 Conditional 来源策略,冷启动同一个隔离 Profile:

边界 已核验结果
重启前 两个独立且未观察的进度来源;Assignment 空闲;Orchestrator 一个已结束回合
新 Host 进程、同一隔离 Profile Assignment 与 Orchestrator Session ID、报告来源 ID/内容/创建时间保持一致;两条仍待处理且可导航,没有重放回合或 Inbox 投递
下一条 Human 私聊 一个新回合收割两个原始来源一次,显示最新摘要和 repeats 2;两个来源同批处理
Human 打开来源 经过认证的原生 Session 导航,不改变观察状态或新增回合

这个结论仅涵盖已结束 Assignment 的普通待处理进度;不代表活动/已观察回合的崩溃恢复、失败/升级或终态 Report 与 Lifecycle Notice 的因果配对已验收。真实重启截图和证明。

Agent 复现使用新的隔离 Profile 及上文三个环境变量:

node scripts/e2e-assignment-report-restart.mjs prepare
# 只停止已核实的该启动器 Host PID,再用相同 home/port 启动。
node scripts/e2e-assignment-report-restart.mjs after-restart
node scripts/e2e-assignment-report-restart.mjs harvest
node scripts/e2e-assignment-report-restart.mjs verify

重启是验证脚本之外的明确操作。两份启动记录保持私有,继续前核对替换后的 PID 和认证 API;不要停止共享进程。after-restart 和 verify 不发模型或工具请求;harvest 只提交一条真实 Human 私聊,不创建 Assignment,也不操作 Shell/文件。capture 仅读取当前状态并验证来源导航。可选 BH_E2E_STATE 指向私有场景文件,允许复核先前场景而不覆盖待 Human 验收的场景。

Human QA 时打开已准备好的重启后 Bot,检查两条待处理进度并打开一个来源;回到 Bot 私聊发送 RESTART_HARVEST。Bot 应回复 RESTART_REVIEWED,刷新后两个原条目仍留在已处理历史。真实 QA 模型请求消耗的 token 正常计入用量。

完成报告与原生执行完成配对

completed Report 表达 Assignment 的语义结果;Host 通知则独立确认其原生 DSH Turn 成功结束。报告保留 Bot 来源,通知保留系统来源,两者都有独立、可跳转的 Source Event ID。既有 Bot Inbox 查询额外返回可信 Turn 编号与通知关联的确切报告 ID。

同一因果唤醒由报告负责:及时到达的通知搭乘该次收割,迟到的通知则保持待处理,直到下一次真实 Turn。通知不会单独产生新的自动 Turn,也不会继承报告的观察/处理时间;冷重启保留此规则。仅有 progress 报告的 Turn 不生成完成配对通知。

在全新隔离 Profile 中设置前述三个环境变量,再执行:

node scripts/e2e-assignment-terminal-notice.mjs prepare
node scripts/e2e-assignment-terminal-notice.mjs complete
# 只停止已核实的隔离 Host PID,再启动同一 home/端口。
node scripts/e2e-assignment-terminal-notice.mjs after-restart
node scripts/e2e-assignment-terminal-notice.mjs review

真实 Assignment 先提交一条 completed 报告,再请求一个需 Human 批准的无害一秒 Shell 计时器。prepare 等待报告收割完成;complete 仅批准该计时器,验证真实成功 Turn 与新待处理 Host 通知,Orchestrator 不增加 Turn。after-restart 只读验证来源身份不变和历史两个 Turn。review 发送真实 Human DM,验证只增加一个 Turn、通知只曝光一次,两条来源都保留在已处理历史。各阶段捕获真实明暗主题截图,并验证认证原生来源导航不会观察或唤醒。

截图与有界证据 仅证明成功完成的配对边界;失败、中断、升级和活动执行中的崩溃恢复仍由 #194 后续切片验收。

Human QA:查看准备好的 Bot 中待处理系统通知和已处理完成报告,打开任一来源后返回私聊,发送 REVIEW_NATIVE_COMPLETION。Bot 回复 NATIVE_COMPLETION_REVIEWED,通知进入已处理历史;原报告刷新后保持不变。

导航

输入以搜索…

↑↓ 导航↵ 选择Esc 关闭