Repository navigation
fix(goal): retain objective adoption for later registered peers - #7216
Conversation
Signed-off-by: aihop <4408344+hhyykk@users.noreply.github.com>
c1f7176 to
ddde4ff
Compare
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | reasoning_effort=max
动机
后来加入协作目标的 Agent,需要先看到负责人已修订的目标,再检查自己的现有工作并确认当前版本。 以前,修订之后才登记的成员已被执行门阻止,却不出现在目标的待确认列表;带 @ 的合法登记名还会在确认时被旧记录校验器拒绝。现在检查会列出该成员,确认成功后可读回自己的当前版本。 后来登记的成员能够发现并完成既有确认流程;读取本身不写入成员、修订或确认记录,其他成员仍可独立推进。 本 PR 不改变目标、任务、预算或权限的所有权,不自动采纳目标,也不证明已安装宿主、真实模型遵从或整个目标修订功能的长期收益。 本次交付当前登记成员的发现与确认闭环;更广的打包前端、安装部署、真实模型遵从和完整成本验收仍由原有任务分别承担。
不处理这两个问题,执行门仍要求该成员自行确认,而常用检查入口无法完整告诉它该做什么,合法登记名甚至无法完成操作。此次验收以实际来源的检查、显式确认和结果读回为准,新增一行列表或通过结构测试本身不算闭环。
改动思路
当前登记名单是读取时的事实,交给既有 TypeScript 目标投影与登记名规范化所有者处理即可;Python 只传递已解析来源目标的名单,不新增持久状态或第二套执行判断。 本次九个文件修复来源适配、同一投影和原记录字符校验,并补齐两种本地后端与全局 HTTP 入口的验证;执行门、确认写入、CAS 和历史修订所有者保持原位。 原修订时的成员和已有确认记录继续保留;当前名单只补上后来登记的人。待确认状态仍由既有“是否确认最新修订摘要”规则计算,读取不会写任何确认。确认时仍检查精确修订、摘要及自己的工作摘要,其他成员无需等待它。
下表来自相同基线/当前源码上的实测,范围是隔离的真实 File、SQLite 和原生入口:
| 条件 | 原基线 | 当前 head |
|---|---|---|
| 修订后登记普通或 @ 成员 | 本地检查缺少自己的待确认项 | 显示待确认;自行确认后读回当前版本 |
| 全局 App 可用,但存在不同的来源登记 | 来源 CLI/HTTP 缺少后来成员 | 使用真正来源目标,排除全局诱饵 |
| @ 成员实际执行确认及原操作重放 | 两种后端均返回输入错误 | 确认成功;重放不产生第二次写入 |
| 未传当前名单、空名单或没有修订目标 | 原有完整投影和执行门 | 全部字段保持一致 |
具体改动
规范依据为 原目标成果修订 RFC,不可变 revision 659c1fd441abf5bd9171f22d9a84981497856a63。Current operating objective 对应后来成员必须自行确认、保留原目标和权限;Goal context before work selection 对应检查入口可见自己的待确认状态,读取不等于确认;Decisive acceptance 对应精确来源、自己的工作摘要、CAS、重放和保留结算/释放。本次实现这三个条件在后来成员路径上的修复;整个功能的打包、安装和模型效果验收仍保留原边界。中英文 RFC 同步说明当前名单是观察事实、历史成员不能被抹掉,以及 @ 记录的回退读取要求。
关键代码讲解
inspect_goal_acceptance先走原_routing,再从解析出的来源 Goal 取得登记名单,随原检查请求传给 TypeScript。没有从全局 App 随手取一份名单;真实全局 CLI 与 HTTP 用可用的不同登记源验证了这个区别。inspectGoalAcceptance保留精确 Goal 身份、当前工作摘要和原执行门,新增的可选参数只传给现有接受契约投影。现有GoalAcceptanceRead.contract/projectGoalAcceptance继续拥有组合逻辑,未添加另一套 Python 判定。projectGoalObjective用既有登记名规范化规则验证新事实,再按原成员、已确认成员、当前成员做稳定去重。新成员的current仍由原摘要规则计算,因此显示出来时是待确认,不会自动放行。未提供或提供空名单时完整旧投影保持。agents/readGoalObjective保留原历史姓名形式、唯一性、128 个持久成员/确认项及总容量限制,只补上登记系统已支持的@。历史1Legacy、Legacy.Owner原样保留,没有把存量身份重新规范化。新名单可观察到 130 个成员,也不意味着能绕过持久写入容量。
对主干的风险
最强风险是“全局入口读错来源”,以及“名单刷新变成自动确认或改写历史身份”。本次 66 项 Python、11 项 TypeScript 测试及类型检查通过,覆盖真实 File/SQLite、独立成员、旧历史、非法名单、过期摘要和原写入语义。另在不可变基线与当前 head 执行完全相同的四个后来成员、两个来源 HTTP 和两个独立编写的 @ 确认/重放用例:基线八个预期失败,当前八个通过。HTTP 使用实际 App 与真实隔离后端,数据是合成目标和任务,未修改活动目标。
完整投影探针覆盖无目标、待确认、已确认、新修订、历史身份五种状态。没有只比较状态码:未传名单、空名单、原执行门和无目标输出全部字段一致;传入两个后来成员时,只移除这两个明确新增的名单行和对应差距后,其余完整输出与基线一致,输入也未变化。130 个当前观察与非法名单是反例,既不删除历史行,也不写入修订、成员或确认记录。
补充的两个真实 CLI 恢复用例还验证:自己的任务变化后,旧工作摘要不能用于确认,失败不写入;重新审阅并使用新摘要确认后,实际执行原有导出文件校验,再从独立检查读回已接受的准则,其他成员仍待确认。这证明恢复后能继续有用的既有工作,没有把确认回执或执行门清除本身当成果。首次补充探针误把内部诊断文案当作公开 CLI 返回,原失败保留;纠正为公开错误码与无写入反证后两项通过。
必要 source-checkout premerge 的六个直接检查、四个选择检查及九文件公开边界扫描通过,含双语 RFC、语义所有者和实际租约运行时检查。初始聚合因旧范围质量凭据过期而红,已写入当前精确范围凭据并冷读回,再执行原生聚合得到通过;没有把失败改成可忽略项。未查询、轮询或等待 GitHub CI。
语义与 CI 对齐
复用原有注册名单、目标修订和确认词汇,没有新共享枚举或演员生命周期协议;唯一输入语言变化是接受原登记系统支持的 @。包含该字符的新持久记录需要兼容读取器才能回退,不能在回退时擅自重命名身份。其他来源身份、CAS、旧结算/释放以及任务、预算、权限边界均未放宽。
我的整体评价
当前登记名单是读取时的事实,交给既有 TypeScript 目标投影与登记名规范化所有者处理即可;Python 只传递已解析来源目标的名单,不新增持久状态或第二套执行判断。 本次九个文件修复来源适配、同一投影和原记录字符校验,并补齐两种本地后端与全局 HTTP 入口的验证;执行门、确认写入、CAS 和历史修订所有者保持原位。 已检查未变化的 goal-objective-settings.tsx:55,它直接渲染当前 peer_adoption 列表;本次未改布局、控件、样式或呈现结构,因此 visual_review 为 not_applicable。 本次真实 HTTP 返回与既有渲染消费者已核对,未运行打包浏览器或已安装宿主,不声称完成视觉或安装验收。
本次是有用且边界明确的增量:后来成员可以发现、完成并读回自己的既有确认流程,改动量与确定的阻断相称。采用直接事实传递与原投影复用,不需要持久刷新标记、新页面或通用框架。用户体验在当前源码路径上改善,长程价值是恢复该协作路径的可用性;真实模型是否理解并有效重规划、完整成本及下游成果仍未证明,本结论不替这些目标结案,也不授予合入权限。当前精确 head ddde4ff6d43a88419ef4b977b85f451d4a2801e8 未发现可复现阻塞问题。
English verdict: APPROVE — ddde4ff6d43a88419ef4b977b85f451d4a2801e8 repairs later-peer objective discovery and supported @ identity adoption through the real source CLI/HTTP path. All 66 Python tests, 11 typed tests, typecheck and exact-scope native premerge/quality checks pass; eight matched baseline failures pass at head. Complete projection comparisons preserve existing fields except the intended pending-peer rows. Packaged/installed-host, live-model and long-horizon qualification remain separate.
Goal And Delivered Outcome
After a shared objective revision, a newly registered peer could receive
goal_objective_review_requiredwhile remaining absent from the adoption inspector and Goal settings readback. The inspector only projected the revision's saved cohort and previous adopters. A registered@alias could also be inspected but its explicit adoption was rejected by the objective record's older identifier check.Carry the current member list from the resolved source registry into the existing TypeScript objective projector. It joins current observations with retained revision peers and adopter evidence. Keep the historical ID forms and accept the
@aliases already supported by Agent registration. A newly visible peer remains pending until its own work review and explicit adoption succeed.Source:
docs/architecture/rfcs/goal-outcome-refinement-v0.md, Current operating objective, at mainc37ab4df9b00f86cd502f0d355b4d1a52bc97760. This closes a bounded R4 inspection/adoption gap. Intended base:main.Author Declaration
Written by: model_agent — OpenAI Codex, GPT-6 family.
@IDs; the objective guard stays blocked before adoptionSelf-check: reuse the existing Agent-ID normalizer and objective owner; no new module, operation, cache or dependency. Current registration is a read observation. It cannot register a peer, record adoption, revise an objective or grant execution. Provider-only callers without current registration retain their existing projection.
Scope And Continuation
Complete for source-aware inspection and supported later-peer adoption. The original cohort, old adopter evidence, admission/CAS and capacity limits remain. The paired RFC checkpoint records the boundary. Broader installed/model, cross-host and whole-Goal acceptance remain separate.
No state conversion runs. An objective record containing an
@alias needs a compatible ID reader during code rollback; preserve revision/adoption history. This restores a registered-ID case that the earlier objective codec rejected.Checked 42 open PRs and their changed paths; none intersects this patch. The 176-file #6838 inventory was checked beyond the first page at its verified unchanged head. Existing #7202/#7213 caller-dispatch and #7196/#7197 context delivery work remain separate.
Validation
c1f7176fb; after rebasing onto main659c1fd44, all nine patch files are byte-identical. Six critical public-entrypoint cases, all 11 native cases, typecheck and bilingual checks were rerun on the reviewed head.later@hostadoption until the codec repair. Failure evidence retained privately.@late-peer full read → adopt → read on File/SQLite; real global-App HTTP and no implicit provider write.No live Goal, model invocation, Lark send, deployment or provider promotion. Full repository CI, installed packages and real-model adherence have not been qualified locally. Passing these read/write fixtures does not establish the complete R4/R5 journey.
Frontend / Visual Evidence
Data-only repair in the existing Current objective and revisions disclosure. Its existing
peer_adoptionlist renders pending/adopted rows from the same HTTP response; no page, control, layout or frontend code is added. The real HTTP/Core path is tested. Packaged-browser screenshots and installed UI execution were not run for this backend/readback change.Boundary Checklist
mainbase.