Repository navigation
fix(status): restore review material links from canonical Todo text - #7474
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>
… HTTP 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>
loopx-agent
left a comment
There was a problem hiding this comment.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max
动机 / Motivation
从待办进入评审材料的维护者,以及消费状态投影的CLI、dashboard和Agent。 canonical切换后状态读取不再走Markdown Todo parser,原先随parser派生的review_materials丢失,已有评审材料入口没有链接。 链接由canonical任务正文重新派生,当前文件存在性可回读;陈旧展示任务不接管链接,本地绝对定位符不进入公开链接元数据。 不增加能力、配置、持久字段、任务权限、配额、启动、结算或新的UI流程。 审阅绑定 f3cf74f5f134f850fc6db9ec282aeb4c2226d344。这里解决的是现有评审输入路径的缺口;没有据此推断模型任务效果、长程成本或完整发布质量。
改动思路 / Approach
复用现有material resolver和public-safety owner,在已有status IO投影层补齐派生;TS仍持有Todo状态与决策。 现有canonical状态和material resolver足够,派生链接留在本地IO投影层。 四个既有文件只修复链接派生、公开元数据边界及其真实验证。 原parser仍归显式源读取和迁移使用,普通status继续先读取canonical provider。把旧parser重新插回status会让展示文件成为另一个任务来源;把链接保存到authority又会重复状态并冻结文件存在性。这两种方案都不合适。现在只从当前任务的正文派生已有字段,沿用已有路径解析、限定根目录和公开边界。不存在材料引用的任务不增加元数据,不添加配置或新的前端操作。
我还核对了现有dashboard的reviewMaterialSchema、状态Markdown消费者和HTTP材料读取入口。它们已经认识review_materials,不需要新页面或前端私有决策。用户仍从原有待办进入材料;文件内容读取继续走原有HTTP权限与路径检查。此PR没有布局、渲染器、首屏组成或文案变化,所以不以截图代替真实后端资格;最终整版Workspace浏览器验证仍是独立发布门。
具体改动 / Changes
规范是 docs/status-data-contract.md,spec_revision=17b2a0f9b818dc6e6fe77ccc567b20ff91b3bc40:固定合同。STATUS-READ-ONLY implemented:读取不变更state和provider;CANONICAL-SOURCE implemented:真实File/SQLite和legacy/native记录格式都从canonical正文派生,陈旧、丢失、非法UTF-8展示不接管任务;PUBLIC-MATERIAL implemented:链接元数据剔除resolved_path与不安全本地定位符,真实HTTP继续拒绝越界和绝对路径请求。三项均由当前head的实际测试支持。
关键代码讲解
- active_state_todo_fields:Current canonical text gains local material metadata; no display Todo parsing.
- _redacted_status_todo_fields:Drop resolved_path and reject unsafe public locator metadata through the existing safety owner.
- observe_todo_acceptance:Type the existing adapter seam; returned values and branches unchanged.
- canonical material regression:Real File/SQLite plus both record formats retain authority and source bytes.
- public review fixture:Explicit canonical import before real status and HTTP entrypoints.
active_state_todo_fields先取得现有canonical快照及acceptance,再对已选择的user/agent summary行调用现有extract_review_materials。这是本地IO投影,TS仍负责Todo状态、筛选、分页和权限。缺失材料保留exists=false,而不是把材料缺失当成任务不存在。链接由当前canonical文本产生,展示文件中的旧链接不能覆盖它。
公开redactor仍复制summary/item/material后返回,保留canonical记录本身。它移除resolved_path,并使用已有public_safe_compact_text检查完整字符串;检查长度等于原字符串长度,避免截断后才漏检后部路径。原Todo正文与owner读取权限不由链接元数据过滤器重写。HTTP resolver依旧负责实际内容读取;一条链接不是额外的读取或写入授权。
现有observe_todo_acceptance只补类型签名,其分支和返回值没改,避免在适配层引入第二个决策owner。测试夹具显式完成canonical导入后才调用普通status;普通读取不会自动导入。没有新模块、协议、闭集词汇、重试、网络请求、持久链接索引或额外确认。
对主干的风险 / Risks
169项真实File/SQLite与legacy/native格式状态测试通过,四项新反例在修复前失败;最终真实HTTP smoke、Ruff、配置mypy、受影响调用方类型检查、6项direct及19项selected premerge、边界扫描和严格CQR通过。 原四项测试在补派生之前全部失败;补充绝对定位符的四项反例又暴露了元数据边界,修复后最终169项全过。不能拿最初happy path通过来证明隐私反例正确。文件删除后的exists=false、陈旧展示链接、原生record格式、provider不可用和文件/authority不变断言均保留。公开smoke通过真实status collector、Markdown和HTTP材料读取,并继续断言目录越界、绝对路径及本地路径泄漏拒绝。
配置的mypy范围和受影响status调用方类型检查通过;不声明未纳入配置的历史模块已完成全树strict类型清理。初次premerge因新worktree缺typescript开发依赖失败,安装锁定依赖后重新执行;最终6项direct与19项selected全部通过,未把环境失败记成历史通过。没有查询、轮询或等待PR CI。公开边界扫描和当前diff CQR通过。
最强风险是把展示文本重新引入权威路径,或把绝对路径放进新增链接字段;两个反例都直接覆盖这一点。运行成本只增加被选中任务上的既有引用解析与本地存在性检查,不引入网络、authority写入或深层材料内容读取;没有做延迟改进声明。回滚只需撤回派生与过滤,无数据迁移。本切片不是完整发布资格;原生Windows、最终整版页面和全树非配置strict类型检查未由此声明通过。
我的整体评价 / Verdict
APPROVE,goal_achieved,只指这个已有评审输入旅程的修复。long_horizon improved的范围是恢复了可实际读取的评审材料路径;user_experience improved的范围是不再要求用户另行手工定位同一材料。实际模型收益与完整整版资格仍未由此证明。bounded refactor applied:为现有acceptance适配器补类型边界,保留原有值和分支;没有新增框架。当前没有独立阻塞发现。作者自审用COMMENTED记录结论,合并仍必须由当前head readiness和维护者授权共同满足。
English verdict: APPROVE — f3cf74f5f134f850fc6db9ec282aeb4c2226d344. Restores existing review links from canonical Todo text, preserves authority and stale-display isolation, and removes private locators from public link metadata. All169 provider/record status cases, the real HTTP smoke, configured type checks, Ruff,6direct+19selected premerge,boundary and CQR pass. Whole-release, native Windows and packaged UI qualification remain separate.
|
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max Request changes conclusion (author-owned PR; GitHub blocks formal self-review) Post-merge audit — exact head 动机 / Motivation在任务状态中打开评审材料的用户会遇到此问题。原 canonical 状态没有材料入口;本次恢复了短正文中的链接,但普通长正文末尾的同一链接仍消失。材料入口缺失会迫使用户重新寻找原文,任务本身仍然存在。真实 File、SQLite 的 status CLI 均恢复了 36 字符正文中的锚点链接;755 字符正文被压成 500 字符后,材料列表仍为空。本审计只判断状态材料入口和公共边界,不把单元测试通过视为完整产品验收,也不授予合并、安装或模型执行权限。PR 在独立审阅期间已合并,因此这里发布新反例的 post-merge audit,保留既有作者评审与讨论。 改动思路 / Approach修复沿用已有 local Markdown resolver 和 public-safety owner,让状态读取从 canonical Todo 派生材料可用性,避免陈旧 Markdown 覆盖权威任务。这个 owner 选择合理,无需增加材料索引或第二份可写状态。但当前把展示摘要当成完整输入:先按默认 500 字符截短,再提取路径。更小且正确的修复应在同次已读的 canonical records 上派生材料,然后保留有界摘要与原过滤器。 架构判断为 retain:provider IO、材料解析和公共过滤分别沿用原 owner。当前 PR 边界是恢复既有状态材料入口,不修改 Todo 写入、调度、权限或持久化 schema;本反例仍需要在这个边界内修复。下表来自实际 CLI 结果,字符长度按 Python 字符计数:
具体改动 / Changes完整 diff 为 base 规范 关键代码讲解
对主干的风险 / Risks[P2] 从完整 canonical 正文提取材料,避免摘要截断吞掉入口触发条件是合法材料链接位于较长任务正文末尾。独立合成任务为 定位为 该问题在 base 没有材料入口时同样存在,结论是本次恢复不完整,不声称它新破坏了一个原本可用的长正文入口。遍历越界路径返回 我的整体评价 / VerdictREQUEST_CHANGES 为代码质量结论,发布动作为 POST_MERGE_AUDIT_COMMENT;保留一个可操作 P2。此为合并后评论,不是 GitHub 正式阻塞 review。problem_context=not_yet_proven:短正文已有可验证改善,完整恢复目标仍被长正文反例否定。long_horizon=preserved 指任务身份、原事实和后续生命周期没有被改写;user_experience=not_yet_proven 指材料入口的普通长正文路径仍未完成,需上述最小修复后复评。 visual_review=not_applicable:逐文件检查没有 JSX、布局或样式改动,本次验证的是 CLI/Markdown/HTTP 材料数据,不声称渲染页面、安装态或真实模型行为合格;这些范围仍未验证。代码量和 owner 放置适当;同域简化应直接利用已读 records,避免新增索引、第二次 provider 读取或放宽摘要预算。公共材料字段沿用既有 vocabulary,没有新的生命周期/authority 协议,也没有将观察性信息当成强制义务。未查询、等待或轮询 CI,未撤回他人评审,也未执行合并。 English verdict: REQUEST_CHANGES f3cf74f; fix the P2 loss of late material links before claiming complete canonical-text restoration. |
Canonical Todo status lost review-material links after the authority cutover, leaving the existing owner-review route unavailable. Derive material availability from canonical task text through the existing bounded resolver, remove private locator metadata through the existing public-safety owner, and retain stale-display isolation. The existing acceptance adapter gains type annotations only; no new capability, settings, schema, write authority or UI layout is introduced.
Validation at
f3cf74f5f134f850fc6db9ec282aeb4c2226d344: 169 real File/SQLite and legacy/native canonical-status cases pass; the four new cases failed before the derivation/privacy corrections. The public smoke passes through actual status/Markdown and HTTP material reading, including missing-file, stale-display, traversal and absolute-path rejection. Configured mypy, affected status-caller typecheck, Ruff, 6 direct plus 19 selected premerge checks, public boundary scan and exact-scope CQR pass. Initial missing-development-dependency and exploratory broader strict-typing attempts are not full-tree qualification; the final repository-required checks above are independently rerun. Native Windows, final packaged Workspace and whole-release qualification remain separate.