Conversation
Verify that Goal constraints are recoverable from the canonical registry after context loss, instance recreation, and concurrent operations. 7 tests cover: - goal_record fields stored in and readable from registry - goal_record preserved identically after recreation (new instance, same constraints) - constraints recoverable after state_file deletion (context loss) - consistent readback across repeated registry reads - session binding does not alter goal_record - independent Goal constraint isolation across registries - cross-Goal operations (recreation) do not leak into other Goals Design owner: direction-baseline and governed-amendment RFCs (R4). Qualification: goal-immutability-coherence-defense-v0.md. Signed-off-by: Duang777 <duang777@gmail.com> Signed-off-by: duanjialing.777 <duanjialing.777@bytedance.com>
huangruiteng
left a comment
There was a problem hiding this comment.
Reviewed exact head: 4bd9125b446a54d8e464931cbed2ec506126ac63
Comparison base: bb0b2baa81bffbef3d96d3b1cc7ae29f915b1bbb
动机
Agent 丢失上下文后应恢复当前权威约束,而不能继续使用过期材料、验收或权限依据。这一目标来自 continuity design note 的 Constraint continuity 行、direction-baseline RFC 和 governed-amendment RFC。它们区分 Goal 身份、共享 intent、材料 revision 和同 Agent 的 usage receipt;普通 registry 重读不能替代这些关系。
当前 PR 验证的是登记信息 round-trip,而不是宣称的约束恢复。结论是 REQUEST_CHANGES:不是要求提前实现整个尚未交付的 R4,而是要求测试名称、断言和真实 owning contract 一致,并交付有价值的最小覆盖。
改动思路
fixture 将 objective、non-goals、acceptance、stop condition 传给 registration service,却只在 goal_record 填 id/display-name/status/project/quota。真实 service 把前一组内容交给 _ensure_registration_state → render_registration_state 写入状态文件;registry Goal 中只有后一组登记字段、instance 和 execution_authority=false。_read_goal_from_registry 从未读到前一组语义约束,也不经过 Agent resume/rebind、材料 revision 或 acceptance-basis owner。
保留当前行为不会失去这些已存在的 registration/lifetime 测试。更小且诚实的方案是在已有 constraint/material/acceptance consumer 支持的真实入口补一个 stale-basis → 读回 → 合法继续的回归;若当前入口尚未支持,明确保留设计 gap,删除不能证明它的重复 JSON readback,而不是增加另一套“registry 是所有约束 owner”的说明。
具体改动
整包仅增加 tests/control_plane/test_goal_constraint_continuity.py,328 行、7 项测试;没有修改生产代码、schema、CLI 或配置。三项测试检查登记字段、recreation 保持及删除状态文件后 registry 相等;两项检查重复读取和 binding 不改 Goal record;另外两项在分别创建的 registry 中验证两个 Goal 的身份/文件互不影响。
关键代码讲解
_fresh_registration同时构造叙述约束和简单登记字段,但两者属于不同写出位置;不能只读goal_record就说所有前者已恢复。_read_goal_from_registry是本地 list 查找,返回七个登记字段,不是 constraint recovery producer/consumer。test_constraints_recoverable_after_state_file_loss在 172–195 行删除真正含语义内容的文件,然后比较两个不含这些内容的 registry dict。条件性的if exists连初始状态文件缺失都不会失败。test_independent_goal_constraints_do_not_interfere和test_registry_constraints_unchanged_by_other_goal_operations为 A/B 使用不同路径、不同 registry,并未检查传入的不同 objective/acceptance/non-goals;因此不能覆盖同一个权威容器中的串扰或 Agent-scoped re-evaluation。
对主干的风险
[P2,阻塞] 声明的 constraint-recovery oracle 没有读取约束。 独立真实登记读回确认:objective、non-goals、acceptance、stop condition 四组值都出现在状态文件,四个对应 key 在 registry Goal 中均不存在。删除该文件后 registry 完全相等,但四组原值没有从 registry 恢复。这个错误状态恰好符合新增“恢复成功”测试的断言。
再注入一个可控故障:仅令 _ensure_registration_state 不生成状态文件,其他真实登记、typed lifecycle 和磁盘事务照常执行。新增文件仍 7 passed,共 9 次约束状态发布被跳过。现有 test_registration_reuses_reserved_instance_after_interruption 的文件存在断言在相同 fault 下失败,是独立灵敏度对照;这并不证明现有生产服务自己丢约束。请用原始约束及明确 basis/revision 作为独立预期,从实际恢复 consumer 读回它们,覆盖过期 basis 和合法继续;在当前真实可用边界内补测试,不要用未实施 RFC 当作新运行时义务。两 Goal 场景若要证明共享 authority 的约束隔离,必须共享那个容器;若当前 supported profile 没有该入口,就准确声明不同文件的物理隔离,不把它当作 R4 证据。对应主要位置为本文件 172–195 行和 256 行起的多 Goal 测试。
[P2,阻塞] 本 PR 自身引入配置内 lint 失败。 uv run --extra test ruff check tests/control_plane/test_goal_constraint_continuity.py 报 F401(20 行未使用的 EffectRuntimeRejected)及 F841(313 行未使用的 before_b)。文件在 base 不存在,错误就是新增行;.github/workflows/python-tests.yml 的 Lint test suite 会扫描 tests。这不是继承的红 CI。删掉无用 import/赋值,并重跑原命令;不要禁用规则。
正常本地验证:不可变 base 相关 Python suite 32 passed;head 加本文件 39 passed;base/head typed lifetime suite 各 6 passed;diff whitespace 和公开边界扫描通过。上述 fault-control 的预期失败是对测试灵敏度的验证,不是正常 suite failure。Ruff 两项是实际 head-only failure,约束恢复则是已证实的测试证据缺口。本轮不查询/等待远端 CI、不修改 PR 分支、不触碰 active Goal。
我的整体评价
REQUEST_CHANGES。long_horizon 的原始约束、授权 amendment 和 stale acceptance 恢复仍未被这些测试证明;user_experience 的生产行为没变,但“文件删除后成功恢复”的描述会让维护者误判当前能力。Future-facing pass 应收敛到现有 constraint/material/acceptance owner 的少量敏感用例,退掉重复读取和不同文件互不影响的伪验收;不要发明一个新的 Python 决策 owner,也无需为了这个测试 PR 做完整 R4 实现。
已扫描已有 CLI/typed lifetime suite,以及同作者约六分钟内的 #5227/#5228/#5229 批次。相似外形本身不决定 verdict;本次有具体的约束丢失反例和两项新增 lint 错误。请与同 owner 的测试整理成有实质增量的紧凑覆盖,处理 #5227 评审中明确的重复提交警告。本评审不执行账号限制,不将 #5169 已通过的 provider replay 当作 constraint continuity 已完成。
复审需要正常 suite/Ruff 通过,独立原始约束与当前 basis 的真实恢复读回,以及漏写/丢约束 fault 能使修订测试失败。不存在的 broad runtime consumer 可以继续作为明确设计 gap,不能用七个登记字段相等来宣称完成。
English verdict: REQUEST_CHANGES - 4bd9125. Registry equality does not recover the objective, non-goals, acceptance or stop constraints; all 7 new tests survive skipping their state publisher. Native tests pass (39 Python, 6 typed), but the new file introduces F401/F841. Replace the false recovery oracle with bounded real-owner coverage and fix lint; no remote CI or merge action was used.
|
Frame-aligned conclusion at 4bd9125: REQUEST_CHANGES. The Constraint continuity row, direction-baseline, and governed-amendment owner distinguish canonical intent, material revision and Agent acceptance basis. Ordinary registration-record equality is not their recovery evidence; proposed future semantics are not imposed as current runtime gates. Original objective/non-goals/acceptance/stop values exist in narrative, not the tested Goal record. Skipping only their real publisher survives all7 added tests, while an existing registration oracle fails. Rework the test to a supported real owner or truthfully retain the design gap; do not introduce a second authority. 本轮亲自验证:base32/head39 Python、两侧6 typed 通过;新增文件 F401/F841 是 head-only lint 失败,不是继承红 CI。不同文件互不影响也不证明共享 authority 的约束隔离;如当前 profile 不提供该入口,应准确标明物理隔离边界。测试证据 gap 与当前产品 bug、完整 R4、远程 CI、合并资格分开。没有改 PR 分支或合并。 |
|
Closing after review. The tests compare registry registration metadata, but the objective, non-goals, acceptance criteria, and stop condition live in the state document. The branch therefore does not prove R4 constraint recovery, and expanding this PR would create another owner instead of testing a supported recovery consumer. No code from this PR should merge; R4 remains an explicit design gap. |
Goal / Source
Constraint continuity slice (R4) from
goal-immutability-coherence-defense-v0.md: after context loss, an Agent must recover authoritative constraints from the canonical registry rather than relying on stale in-memory state.What Changed
Added
tests/control_plane/test_goal_constraint_continuity.pywith 7 end-to-end tests exercising constraint recovery through the registry read path.Test Matrix
test_registry_stores_goal_record_fieldstest_goal_record_preserved_after_recreationtest_constraints_recoverable_after_state_file_losstest_registry_readback_is_consistenttest_registry_readback_unchanged_after_bindingtest_independent_goal_constraints_do_not_interferetest_registry_constraints_unchanged_by_other_goal_operationsValidation
Existing control plane test suite unchanged.
Design Owner
direction-baseline and governed-amendment RFCs (R4) -- the registry is the canonical constraint owner; constraints survive instance replacement and context loss.