Repository navigation
feat: receive peer requests in original project conversations - #7419
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
There was a problem hiding this comment.
Reviewer: model_agent | gpt-6.1-sol | OpenAI | reasoning_effort=max | runtime_reported
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
本次只修订语言表述;评审仍绑定原 head c6d367914f1ec86a4869fee74a05b565262bcde0,结论、发现与验证范围不变。
动机
已注册的请求方需要从既有项目私聊中取得独立帮助。
此前无法直接把请求发到原对话,只能虚构 Goal recipient 或手工转发材料;本提案按显式 source grant 把请求送入原队列,并将结论返回原请求方。
隔离 File 和 SQLite 集成已跑通首次授权请求、接收方独立判断及原请求方读回。
安装态 provider 交付、自然模型质量、请求方实际采用,以及 Goal delegation-summary 的自动投影仍未验收。
此 head 在首个答案返回后接受的新修订,没有可达的执行路径。
改动思路
版本化地址和显式 grant 归既有 collaboration owner;Python 负责 Chat/provider IO,原 FIFO 与 result store 继续拥有各自生命周期。
此 PR 的边界是一条显式授权的原对话请求及恢复;已接受的修订也必须沿同一纵向路径完成,才算此切片完整。
Discovery 校验原 App/operator/project/native-thread 身份,本身不授予访问。准确 source-to-recipient grant 允许已注册请求方发布请求并固定 return route。接收方独立 adopt、defer、reject 或报告 no_change;原 workspace/tool 权限不变。
| 触发条件 | 既有 owner 应提供的结果 | 此 head 的观察 |
|---|---|---|
| 首次授权请求 | 共享 request store → 原 Session FIFO → 接收方 → 请求方 inbox | File/SQLite 通过 |
| 结论写入丢失 | 保存实际答案,重试 result IO,不新增模型调用 | File/SQLite 通过 |
| 模型输入前撤销 | 重新检查 source/binding,拒绝 dispatch | 通过 |
| 首次结论后再修订 | 当前 revision 产生当前工作/结果;旧结果仅作历史 | revision 2 已接受,但重试仍取 revision 1 答案并失败 |
表格说明源码,执行证据来自隔离原生 owner 测试及下述 packaged browser 读回。扩展共享 typed recipient profile 比虚构 Goal 或另建项目 inbox 更合适;真正新增的持久意图是 scoped grant,binding 身份和 view state 均从原 canonical 观察派生。
具体改动
原评审 exact head:c6d367914f1ec86a4869fee74a05b565262bcde0。独立规格为 docs/architecture/rfcs/app-conversation-and-async-inbox-v0.md,revision 为 bd03d0802d26643e71a1cb78f4a8d62188428e70(接受前的原文)。新 RFC 文字是实现/状态披露,不是自身验收证据。以下名称对应原章节的编号步骤和身份/grant 条款:
recipient_identity:implemented。版本化 binding/Session/native-thread 身份保留 null Goal;拒绝模糊归属和 provider/operator 改变。explicit_source_grant:implemented。workspace grant 和all_registered不自动纳入该 recipient;owner 就地授权准确 source,不可用时仍能撤销原 grant。publication_fifo:首次操作 implemented。enqueue 前持久保存原 route/request/stable operation,并发重试或 publication/enqueue 丢失仍只有一个原 Turn。receiver_revision_control:答案返回后 not_met。新修订虽持久接受,却无法完成新的有效 assessment/result;须接入原 FIFO continuation 和按 revision 返回结果的 owner。original_requester_return:初始 revision 及结论写入丢失恢复 implemented,当前 revision 的缺口如上;不授予面向其他外部受众的发送权限。packaged_management:discovery/grant/readback/revoke 控件 implemented,但下述当前结果摘要仍要修正;安装态 provider 资格另验。
关键代码讲解
resolveOriginalConversationRecipient从当前 binding 和 canonical Session 派生版本化地址,校验 native-thread 唯一归属;路径或 Session ID 单独不足以证明身份。planOriginalConversationRequest复用 source grant、共享 publication/revision owner,保留 parent lineage 和准确 requester route;指令明确区分 peer 数据与人类权限。OriginalConversationRequests.publish执行 fenced IO,并向原 Session enqueuepeer-<request_id>;existing-answer recovery 分支导致下述修订失败。OriginalConversationRequests.execute在原生输入前重读 revision/grant,先保存真实结构化答案再写 result IO,使结论丢失恢复不必再调用模型;旧答案不能充当新 revision 的执行路径。
对主干的风险
[P1] Make accepted post-answer corrections executable. conversation_bindings.py:835–844 的 queue key 只包含 request ID。revision 1 完成后,control(revise) 能提交 revision 2,却不创建 continuation。重试原 operation 会取回已完成 Turn,并把保存的 revision 1 答案交给 _complete_answer,随后报 original conversation answer belongs to a stale or cancelled request,terminal Turn 不会恢复。
独立 production-owner 复现在 File/SQLite 都失败:current revision=2、assessment=null、queue status=completed,只有 revision 1 结论。原有回归只测执行前修订,覆盖不到此边界。
Packaged frontend 同样暴露后果:行内已显示修正后的 purpose,却写“结论待请求方读取”/“Conclusion awaiting requester”;展开后只有“修订 1 的结论”。当前 revision 既无 assessment,也无排队 continuation。
最小修复是在既有 FIFO/result owner 中为已接受新 revision 建立按 revision 绑定的 continuation,不重播旧答案,同 revision 重试也不重复模型调用。当前结果尚未生成时,旧结论标为历史,新修订显示待执行;取消、grant、原 Session/thread/Goal 身份均须保留。回归应先完成并读取 revision 1,再接受 revision 2,跨 retry/restart 后只观察到一次 revision 2 assessment/conclusion;保留首轮结果,并验证重试不重复调用。若本切片确实无法执行修订,应在提交成功前明确拒绝并给出受支持恢复路径,不能把已接受工作静默搁置。
语义与 CI 对齐
新 recipient 扩展既有 collaboration 词汇,保留旧 Goal 地址、request hash 和 receipt;不创建 durable Agent 生命周期,也不扩大 filesystem、tool、cost 或外部消息权限。typed schema 区分 profile,没有新增 prose/substr 分类器。问题是 revision→execution 的真实缺口,不是否定新 profile。source 模块 ceiling 上调只是围绕既有 host adapter 的有界预算记账,不豁免语义验收。
原评审 138 项 Python 通过、3 项 Win32-only 跳过;19 项选定 TS 通过。base 的未改 legacy cohort 为 109 通过、同 3 项平台跳过,候选中这些旧用例也通过;packaged build 通过。Premerge 6 direct+19 catalog/risk/public-boundary 自动检查通过,整体仍因四张 PNG 的隐私/视觉检查保持 manual_review_required。已检查四张合成图片和 PNG metadata,未发现私有运行上下文;这不是 readiness 或安装证明。
独立 future-Session probe 在两个后端通过:旧 grant 不自动覆盖新 Session,原授权请求仍完成。新的 post-answer correction 复现在两个后端均失败。
最终 head 仅比已检查的 769419acd335bb684c006365acfa7bee080e64b0 多四项 browser-fixture 修正,+25/−9;产品、UI、tests、docs 字节一致,按该记录版本复用 source 与 packaged capture。已在最终 head 重跑 correction(两个后端仍失败)并检查四个 fixture 语法,未重跑全部无关 browser 场景。未查询或等待 GitHub CI。
我的整体评价
REQUEST_CHANGES。首次交付有用,复用现有 owner 的架构也合比例;但成功请求被修订后,新接受的工作会卡在不可变旧答案后,长程接续出现回归。用户也容易把当前 brief 与历史结论误认为同一个待读结果。最小修复是上述 revision continuation/result 区分,不需要新队列或整个父级路线图。
面板已分开 received work 与 source grant,展开的 brief 可读;但 current-revision summary 仍可能把历史结论展示为当前待读结果。原评审实际打开 packaged desktop 的修订状态、展开 brief,再用 Escape 关闭,焦点回到 collaboration trigger。复用的桌面/窄屏/不可用图片包含混合状态和长中文正文,grant 用 hairline 分组,正文保持 body 字号;安装态 App/provider、自然接收采用及 portfolio sidebar 状态仍未资格化。窄屏/不可用 capture 的复用以 UI source 未变为依据。
只有确实缺少准确 source grant 才需要新 consent;Agent 可先完成 discovery、ID 与格式准备。已有 consent 直接复用,不要求每次 retry 再授权。合成结果没有证明安装态/自然模型有效性或成本改善。复评须在新 exact head 执行首答后修订,以及同 revision 的 lost-return retry,保留撤销、取消及普通 human/registered-recipient 控制。
English verdict: REQUEST_CHANGES
…nt-20261026 Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
|
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max Post-merge audit — Request changes conclusion (author-owned PR; GitHub blocks formal self-review)Reviewed head: [P1] Preserve the accepted peer brief before native dispatchProblem: Evidence: On this exact head, isolated real Codex app-server runs against File and SQLite both reached a completed Turn, yet the inference request's parsed brief differed from the accepted brief. Four spaces before a Python statement became one. The native process and owning request/FIFO/backend were real; inference was synthetic loopback data. This is input corruption before inference, not evidence of model reasoning quality. The durable assertion added in #7445 also fails twice against immutable main Impact: The receiver can answer a different program or document while returning the original revision/digest. Existing successful completion and return assertions do not detect this divergence. Fix: Preserve serialized text on the existing project-collaboration branch and compare the full brief at native input with the accepted request. Keep ordinary conversation normalization and blank-input rejection. The bounded repair is proposed in #7445 at 动机 / Motivation原项目会话的使用者需要把同一个请求交给已经在工作的接收方,并收到基于该请求的结论。此前必须使用 Goal/Agent 接收地址,这个提案扩展到已有项目会话,同时保留原线程、权限和返回地址。本次检查发现:带有代码缩进的简报虽然显示成功完成,实际交给接收方的代码却已改变,后续结论可能建立在错误内容上。修复需要保证接收方读到获准的原简报;本次审计不证明已安装 App 的采用或真实模型的任务效果。 改动思路 / Approach整个提案沿用 TypeScript 的来源授权、请求修订和结论 owner,由 Python 执行原 Chat 会话的入队和宿主 IO,再由已有界面显示授权、当前修订及历史结论。接收方没有获得新的 Goal,也不应因收到上下文而获得额外工具权限。 这次反例位于最后的原生输入适配器:授权和修订检查通过之后,文本仍被普通聊天的空白归一化规则改变。最小修复应留在这个已有 IO 边界;重新增加请求协议、状态或第二套执行器都不能消除该问题。这个边界判断只针对已复现的输入缺陷,整项提案的状态设计、默认关闭隔离和成本比例仍未完成新的独立验收。 具体改动 / Changes本次完整变更清单包含 44 个文件:23 个生产文件(+1083/-63)、12 个文档及图片文件(+202/-2)、9 个测试或浏览器夹具(+562/-11)。界面部分包括会话协作面板、时间线入口和当前修订展示;运行时部分包括 Chat 入队、来源授权、请求修订、结果返回及 inbox/MCP 入口;文档部分更新双语 RFC 并提供八张展示图片。这里的清单分类不是对每个实现和图片的验证结论。 关键代码讲解
审阅依据是变更前的 对主干的风险 / RisksFAIL: File 和 SQLite 的两次真实宿主反例均在完成状态下发现简报变化。该错误影响所有走新增项目接收路径、且正文依赖连续空格或不换行空格的请求;请求记录仍保留原内容,观察普通完成状态难以察觉,只有比较实际模型输入才暴露。重试同一修订会重复提供错误内容,不能作为修复。回归应执行完整的公开接收方集成测试,并对原生输入解码后的 brief 做等值断言。 PASS, repair proposal only: #7445 的最终提交通过两个输入保真回归和十个隔离原生宿主案例,覆盖原线程恢复、修订后的入队/回传恢复及撤权后的零模型请求;相邻 538 项源测试也通过,最后等价条件表达式整理后复跑了受影响案例。该修复 PR 的 premerge 和质量回执通过,不代表本审计 head 的整套验收通过。 UNVERIFIED: 没有重新独立检查本 PR 八张图片的整页可读性/公开边界,也没有重新执行完整前端、TypeScript owner、普通 Goal 接收地址的配对兼容性或真实模型采用。原 PR 正文记录的浏览器失败、旧质量回执失败和人工 hold 保留为其各自版本的历史证据;本次不替其归因或宣布解除。按当前 review policy,本次没有获取或等待远端 CI。 语义与 CI 对齐 / Contract alignment当前义务是让接收方消费已接受的简报。新增调用路径触发既有文本归一化,造成可观察语义偏移;这不是词汇表命名或测试数量问题。公开回归命令为 我的整体评价 / Verdict对这个合入 head 给出 REQUEST_CHANGES,通过合入后审计评论记录新发现并关联修复,不追认合并或整项交付。长程影响是未解决的内容失真可能进入后续结论;用户体验上,成功状态没有暴露实际输入差异。此次可确认的是具体缺陷及其最小修复,不是整个项目协作旅程已经达标。 整项 PR 的代码量与兼容性成本判断、共享契约复用、默认关闭隔离、权限命名以及前端整页效果仍为 UNVERIFIED。已安装 App、自然接收采用、真实模型质量和完整成本效果仍待原验收完成;这些缺口不应因修复 PR 的局部通过而被抹去。没有新增词汇或状态是修复这一输入错误的前提。 English verdict: REQUEST_CHANGES for |
Original bound project conversations were discoverable, but peer delivery required a Goal/Agent receiver. This proposal adds an explicit original-conversation recipient while preserving its Goal=null Session, native thread and FIFO.
请求方显式选择已核验的原项目会话,本人在原会话中授权具体来源。请求由接收方独立判断,修订绑定的结论沿原请求方地址返回。
Behavior
all_registereddo not enroll this profile.Validation and remaining holds
Candidate:
ba0ea2a645451878a720c535e694bbcf95f52348. Integrated immutable main22196e81db063cbfabb4ca5591fbb83c7bc987c0; the PR base remainsmain.turn/startcalls. A separate correction-at-native-write case verifies only revision 2 starts (one call).chat_runtime.py: main 2308 lines, previous PR 2313, integrated candidate 2319. Retain the peer admission/dispatch checks and main's six quota-recovery lines; update the reviewed line ceiling from 2313 to exactly 2319, without extra headroom. Actual Any count stays 34 (ceiling 37), dict[Any] count 0. No frozen experiment threshold changes.manual_review_required(exit 1) for independent visual/privacy review of eight PNGs; it does not grant merge readiness.typed-actionsandresearch-finding-readerfail on both independently built immutable main and this candidate with identical header-geometry and research-label assertions. The three fixture files are unchanged between those scopes. Completesteward-group-triggerpasses locally on both, so its remote failure remains unexplained. These observations do not waive required CI or establish a passing baseline.cqr_33503a65f8f228bc4f1crecords fail; verification rejects it as a passing receipt. It retains the required browser failures and manual premerge hold as blockers, rather than using baseline attribution to waive them.The semantic advisory's four-value
RECEIVER_DECISIONScarrier reuses existing decision meaning. The continuation reference extends the same typed request owner; Python performs fenced host IO. The bounded refactor shares enqueue/resume between publication and correction and avoids a second scheduler or policy owner.支持范围为精确
source_session_v1请求方和私有 Codex 项目接收方。旧请求方地址、群组及其他执行器继续不可用。当前验收覆盖显式 inbox/MCP 回传;自动 Goal 摘要投影、已安装 App/真实 provider、自然接收与采用、模型质量和长程成本收益仍未验收。此提案不构成合并、安装或发布授权。Visual evidence
Primary question: which source may enter this original conversation, and what happened to the current request? Received work and explicit source grants are separate; expanding reveals complete briefs and historical conclusions. Long repeated content, mixed queue states, desktop and 390px reading were inspected. Escape returns focus to the original collaboration button.
All views use synthetic content, the actual owning HTTP/store/FIFO backend and scripted model transport. The unrelated portfolio/proposal read failures remain fixture limitations. These are packaged source views; there is no installed/live-provider qualification or hosted preview.
Original entry and mixed-state views, tested at
639dd6aa152ee806bc6ffc49e3912df261bbf931:Post-answer correction: same backend fixture with the previous frontend (1440px) and updated frontend (1200px). New assets and corrected source are recorded at
ba0ea2a645451878a720c535e694bbcf95f52348: