Repository navigation
feat(research): read the bound original task in source Goal research - #8479
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>
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
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
研究者在原 Goal 的研究页核对原任务、约束和后续策略。 此前需离开研究页查找文件;现在展开「原始任务」即可读完整原文,并可刷新或查看版本。 已验证原文逐字读取、来源隔离和读取失败后的恢复。 本次不改写原 Goal,不运行文档命令或模型,也不升级已安装 App。 installed App 更新和更完整的领域分析仍由原研究交付继续跟进。
这是一个有用的读取增量:原任务、后来保存的策略和分析结论可以各自核对。保留标题或手动打开文件仍会留下原问题;从标题推断任务正文也无法证明原始要求。当前 head 为 fdade14,评审覆盖整个 base-to-head 差异。
改动思路 / Approach
文件选择和完整性归于现有 TypeScript presentation owner,native registry 与有界 IO 留在现有源读取器;没有新增平行 registry decoder 或执行 authority。 当前边界是原来源研究页的按需完整文件读取、版本检查和失败恢复;捕获绑定复用已有 Agent 连接管理权限。
| 触发 | 原有路径 | 当前路径与失败归属 |
|---|---|---|
| 阅读研究历程 | 原生历史读取器 | 保持同一 Goal、namespace 和历史;默认不读取文档 |
| 展开原始任务 | 需要自行找文件 | native registry 定位登记文档,完整读取并复核声明和 SHA |
| 捕获文件变化或来源切换 | 没有文档读入口 | 503/409 或同步清空旧正文;恢复来源后显式重试 |
该表是源码说明,不代替运行证据。捕获绑定属于无法从文件名推导的显式信息;已有权限内由 Agent 准备,用户无需再填路径、复制命令或确认一次。现有源链接写入接口在保存前核验,namespace 不随附件更换而改变,缓存读取器则会替换。最初的反向依赖 helper 已删除,避免为此建立新分层或第二个 registry decoder。
具体改动 / Changes
独立验收依据为 docs/development/frontend-delivery.md,spec_revision 6cd55ce5d069c59712fae23bb7413ac0f9d7ac20 的既有 Native App source Goals 与 Task-first delivery;本 PR 新增说明没有作为独立验收来源。C1-task-journey:按需入口、操作反馈和完整正文回读已实现。C2-source-identity:原 Goal、物理来源和原生历史身份保持,并拒绝错 namespace。C3-unavailable-recovery:缺失/变化的原文显式失败,旧文可保留并重试,切换来源不会沿用其他 Goal 的内容。
关键代码讲解
planGoalSourceDocument(loopx/control_plane/presentation/goal_source_links.ts:8)从原 registry 的唯一 primary_goal_document 选取文档,核对显式捕获绑定;projectGoalSourceDocument复核登记版本和完整文本 SHA。既不取标题作为任务,也不截断长文后假装完整。GoalSourceReader.document(loopx/control_plane/status/goal_source.py:388)沿原 local/SSH/container transport 调用 native registry owner。读取前后核验成员和登记,文件相对路径须有原 repo,128 KiB 超限失败;Python 承担有界 IO,语义判断留在 TypeScript。GoalSourceDocument(apps/presentation/dashboard/src/features/personal-workspace/goal-source-document.tsx:13)只在展开/刷新时请求,核对原 Goal 和 namespace,采用 scope/key/AbortController 隔离异步返回;正文复用 Markdown,版本与原始字节文本在详情中。
14 个文件共 474 增、18 删,其中 193 行验证、26 行说明,其余为一个完整读取路径。App alias 与 prepared API/CLI 共用读取器;没有新增另一套 Goal 状态或并行业务规则。捕获副本在界面明确标注,固定 hash 只证明绑定版本,不独立证明来源谱系。
对主干的风险 / Risks
最强反例是文件已改变或用户切到另一来源,却看到错误正文。真实 SQLite/native CLI/Chat HTTP 测试覆盖 alias、完整 CRLF 文本、错 namespace、改变捕获文件后的 503、恢复,以及同 namespace 附件更新后缓存替换。另一个有意缺陷实验只移除 hash guard、保留捕获标记:公开 HTTP 回读在文件改变后错误成功,独立的 HTTPError 断言按预期失败;当前 head 的同一断言通过。
PASS:42 项 Python 测试,15 项 TypeScript 测试,typecheck、dashboard/Chat 构建,已有 packaged runtime-source 浏览器场景,以及真实原来源的 API/CLI/界面完整读取。相同 native history fixture 在 immutable base 与 head 各 2 项通过,指纹相同,覆盖 23 个原始版本和不可用恢复。日常页面在展开前 document GET 为零;source switches、390px、中英文、Escape、HTML 不执行和读失败保留旧文均已验证。generic goal-showcase 混合状态页面也已检查。
标准本地 premerge PASS,16 项选择中无阻断失败;保留 1 个 advisory_inherited_failure。独立 ratchet 的 FAIL 在 base/head 均为未改动 loopx/chat_agent.py 的 2047 行超过旧 ceiling 2045;具体 finding 完全一致,变更模块 ceiling 通过,没有抬高预算或隐藏原失败。最早新增的反向依赖告警已通过删除该依赖消除。两次从仓库根误调用不存在的 npm build 脚本属于命令入口错误,改从 dashboard 的既有 build 运行后通过,没有把失败记成成功。按配置没有查询或等待 CI。
语义与 CI 对齐
复用 goal_doc/primary_goal_document 与原源读取契约,新增 document operation 是明确的可用性增量。原输入、省略附件、物理 namespace 和历史义务保持;精确 hash/身份检查属于硬读取条件,说明文字不会强制 Agent 工作或触发模型。未修改 continuation、quota、settlement 或自动装载指令。SSH/container 仅命令组合受测,live 连接不在验证结论中。
我的整体评价 / Verdict
没有阻断性 finding。problem_context 为 justified_increment;long_horizon 保持,user_experience 改善。已查看完整来源研究页、展开长文和窄屏错误恢复:默认时间线保留,原文使用 16px 正文与独立阅读宽度,来源版本在详情中,刷新错误紧邻重试并保留正文。 未验证 installed native WebView、真人理解效果或 live SSH/container 连接。
文件选择和完整性归于现有 TypeScript presentation owner,native registry 与有界 IO 留在现有源读取器;没有新增平行 registry decoder 或执行 authority。 当前边界是原来源研究页的按需完整文件读取、版本检查和失败恢复;捕获绑定复用已有 Agent 连接管理权限。 这一边界可以独立使用和回退,新增生产机制与原问题相称。保留原来源身份的兼容性有真实历史/分析消费者支撑;未为兼容性保留第二套请求或 registry 解码。installed App 和领域洞见仍是原交付剩余工作,本 PR 的通过不代表它们已完成,也不证明 Agent 已采用原任务或实验效果提高。评审与本地验证通过后,合并还需当前 head、threads/readiness 和既有维护者授权。
English verdict: APPROVE — fdade14; no blocking findings; local validation and exact-source readback passed, one independently verified inherited advisory remains, installed App adoption unverified.
研究页可以读原 Goal 的历史和分析,但此前无法直接查看该 Goal 登记的原始任务全文。此 PR 增加按需展开的「原始任务」,保留完整正文、来源版本及明确的读取失败与重试。
选择和完整性检查复用 TypeScript presentation.goal_sources owner;现有源读取器负责 native registry、local/SSH/container 传输及有界文件 IO。只接受原 Goal 唯一登记的 primary_goal_document。原路径不可达时,可由已有连接管理入口明确提供捕获文件及固定 SHA-256,界面标明捕获副本。它不推断或改写 goal_objective,不改变物理 namespace、原始状态、历史与分析身份,也不执行文档里的命令。
验证:42 项 Python 测试、15 项 TypeScript 测试、control-plane typecheck、dashboard/Chat 构建通过;现有 packaged browser smoke 覆盖长文、390px、中英文、无 HTML 执行、来源切换、503 后保留旧文及重试、Escape 焦点恢复。真实 native source 的 API、CLI 和打包界面读取完整原文,来源文件保持不变。原生 App 安装与更新未纳入本次验证。
完整 premerge 曾发现新增反向依赖,已将 IO 收回现有读取器消除。其余遗留告警在 base 6cd55ce 与当前 head 相同:未改动的 loopx/chat_agent.py 为 2047 行,既有 ceiling 为 2045。保留失败记录且不提高 ceiling。最终标准 premerge 已通过,现有 checker 将这项相同的未改动主干失败标记为 advisory_inherited_failure;变更文件的 module ceiling 检查通过。合并资格另行核对。按当前配置未查询或等待 CI。
Visual evidence
主问题是「原任务到底要求什么」。正文按需展开,研究时间线保持默认内容;长文用 16px、80ch 阅读宽度,版本和原始文本置于可展开的来源详情。
以下均为 disposable backend 的公开合成数据,使用真实打包 frontend 和现有来源读取器;before 为 01b8871,after 为 fdade14(UI 与重新运行的 c055941 相同)。不是 installed App 截图,也不包含真实任务或轨迹。图片仅保留在 revision-pinned artifact 分支,不进入本 PR 代码树。