assistant/docs/开发进度.md

1041 lines
196 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# assistant 开发进度
维护日期:2026-10-26,日期采用 Asia/Shanghai。
本文件记录实际开发、修复进展与工程验证事实。已确定的优化方向、优先级及后续步骤统一维护在 [整体方案第 14 节](整体方案-v0.2.md#14-当前优化与近期实施规划)。单纯概念解释、使用问答和一般澄清不记录;此前工作按阶段补记,不虚构各轮发生时间。
## 当前状态
- 当前主线为学习、固化、轻量召回及变参执行,按维护者要求扩展小红书网页版功能入口与页面层级;“平台路径”首批33项模板中18项有可核对观察。发布者主页导航已通过,评论者主页最终复验在官方安全验证处暂停,尚未固化新导航候选。业务识别扩展暂停,历史保留;最新事实见2026-10-25-11。
- 已有 React/TypeScript 学习后台、FastAPI API、Node.js Playwright 工作进程。
- A2A 学习后台的适用页面与组件已裁剪迁入;原工程保持只读。
- 学习账本已接入独立 PostgreSQL 17。检索库准备 `pg_search 0.26.1`、`pgvector 0.8.6`;SQLite 保留作离线开发和测试适配,原数据及备份保留。
- 管理员在空账号库初始化为 `admin / 123456`,已有账号和密码不随启动重置。
- 已支持可见页面登录检测、人工确认会话、采集证据、七类有界动作、动态目标、有界容器目标定位、集合等待、容器内行读取、有界分批去重、明确空态合同、不可变候选及静态/探索/正式验证。逐批截图绑定摘要,失败保留实际前后及已得批次证据;质量复查有直达入口与待办。
- 首期学习方式为维护者与本地 Codex 协作。旧 8 步候选正式试跑因首张卡片无标题超时,保留为待复核;新 7 步分批候选静态及两组正式执行通过,分别读到 3/4 条首层评论并登记过程复查,原正式阶段为 42 份观察、7 步和 3 条验证。已登记窗口内正常反馈,仍待到期后的实际复查,未提前登记无异常完成。此后单篇衔接的新增验证见最新记录;没有后台内置自主学习 Agent。
- 第一条目标链路为小红书「搜索笔记 → 详情 → 评论读取」。平台自动身份核验、完整独立来源读回、正式发布分发、Electron 商家端、macOS 实机验收及商业 AI/计量仍未完成。
- 装修内容初筛已接入维护后台:独立四步搜索读取有界列表,规则保留少量笔记;可逐篇接入正文/首层评论,点击前后核对笔记编号,独立保存阅读、部分结果、验证与证据。旧离屏、超时及文字必填遇图片的失败保留;新文字/媒体内容合同和阶段耗时已接。限定当前定位检查后,同一新八步候选两篇探索约 46/49 秒完成,各取得正文及 6 条首层评论,其中一篇为 5 条文字和 1 条纯图片,媒体未解释。已接模型独立分析文字,原文依据逐条校验;实际身份与需求、准确率及实付费用仍待核实,地区不作自动过滤。
- 模型采用服务端可配置的官方 `deepseek-flash`,本机已配置两个不同 Key、一个优先一个备用,默认关闭思考。两篇已有阅读各保留 v1/v2/v3 分析;新版增加独立维度,询问他人进展/推荐设计师不再当作自身需求,歧义项仍人工待核。分析不操作平台,原阅读/候选不变;未做已确认客户或模型准确率承诺,未调用真实备用 Key 强制试错。
- “内容初筛”新增商家需求工作台:自然语言逐字段提取、原文依据与缺项、维护者显式确认追加版本、固定首词初筛及阅读衔接;schema 8 保存不可变商家条件。新版分析独立区分角色信号、多选表达、自身需求及相关性,程序按条件派生匹配和展示建议。未知地区不默认全国,不能改传关键词/地区覆盖确认条件;旧记录及原失败保留。已对两条已有真实阅读追加 v3 分析,未重新操作平台。
- 分析历史“查看分析”点击直接打开详情侧栏,同条可关闭重开,原文、维度和依据优先,技术配置及用量折叠。已接人工核对、五轴纠错、逐字依据、追加修订和最新版本统计;查看/预填不自动保存,不调用模型。首批 3 项用户对话核对已注明来源代录:正文确认 1、首条评论表达纠错 1、第二条评论暂不能确定 1;仅 2 项计入已判定,首篇余 4 项及另一篇仍待核,没有扩大到账号真实身份或地域匹配。下一步建议未执行关注/私信/评论。
- 08–09阶段记录:“案例或服务展示内容 → 评论者自身需求”已完成新模式首篇探索回放:`playwright-xhs-native-ui-v1` 实录9步,四步搜索及八步正文/评论候选均静态通过;八步一次完整回放通过,来源绑定正确,取得正文和2条完整首层评论,3批范围截断。原legacy失败保留,新搜索初筛尚未独立回放;正式运行质量、账号延后反馈与更多样本仍待完成,详见 2026-10-25-08。
- 最近一次完整后台仍为上一阶段 **164 passed、无跳过**。2026-10-25-02 阶段观察等价 **20/20**、最终批次截止目标 **12/12**、SQLite/专用 PostgreSQL/RPC 目标单轮 **11 passed**;该阶段完整 worker **69/69** 在最终复合边界补丁前启动,最终差异由 12 项目标另验,不能称为最终冻结后单轮全量。此前分页策略 **650 断言**、整页目标 **3/3**、清洗 **2 passed** 保留,不累加。未重跑迁移、检索扩展、前端构建或 macOS;账号后续反馈、独立读回、真实标注评测与交付仍未完成。
- 最新等待前置目标为 **92 断言**,含 20 个官网元数据纯边界场景,另有 1 次本机 Edge 集合自然出现的等待;不是真实官网端到端,本轮未重跑上述旧阶段全量。详见 2026-10-25-03。
- 本轮范围等待最终本机 Edge **20/20 组、235 断言**,后台 **14 passed、无跳过**(SQLite/专用 PostgreSQL),界面隔离 **7 项通过**,TypeScript 检查及前端生产构建通过。均不替代真实平台复验,不累加前轮计数;详见 2026-10-25-04。
- 请求拒因与失败诊断已加载,旧记录不补造原因。Playwright工程验证保留07阶段完整 worker **69/69**、新配置目标 **16组/809断言**、后台 **13 passed**、隔离界面 **11项**,分别统计不累加;09阶段未重跑这些套件。08阅读、旧模型及2条人工核对保留,正文仍未人工核;09仅分析已保存文字,服务重启后平台窗口已关闭,没有重开或要求账号确认。
- 已实现独立咨询意向、有界笔记背景及保留待核展示,使用 `renovation-demand-v4 / demand-result-v3` 和六轴 `analysis-review-v2`;旧v2分析仍可五轴核对且不补字段。最终后台单轮116项、隔离界面13项及前端检查/构建通过,应用贯通集成在最后失败诊断补丁前通过、补丁由最终后台目标覆盖。新版本首次真实输出合同失败保留,补固定无文本拒因后,后续独立分析将2条短评论判为咨询yes/保留待核,实际自身需求、身份、地区和匹配仍不足。没有重现首次失败,不能确定其具体原因;有限结果不作整体稳定性验收,详见09。
- Git:当前工作已提交并同步至 `origin/main`,本轮主实现提交为 `c4806df`;此前基建 `cd34154` 与进度回写 `e99a860` 保留。最新仓库同步记录见2026-10-26-01;平台能力与验证边界仍见2026-10-25-11。
## 2026-10-22-01:学习后台与浏览器基础(历史回填)
目标:先搭学习与验证基础,首条平台目标选小红书搜索、详情、评论读取。
已完成:
- 建立 `apps/admin/`、`apps/server/`、`tools/learning/` 及本机启动/验证脚本。
- 从原 A2A 后台裁剪导航、学习批次、账本总览、能力实体、参数表、操作链详情、测试列表、历史及证据抽屉,接本项目 API;清单见 [迁入来源](../apps/admin/source-provenance.md)。
- 实现固定账号资料目录、同账号会话互斥、人工确认后观察、动作前后证据和参数绑定。重开后保留资料,但需重新确认当前会话。
- 实现不可变候选与证据摘要绑定、追加验证记录、发布条件预检。未接入完整独立来源读回或正式分发。
- 修复工作进程 EOF/输出管道关闭时的清理,以及测试端口与实例标识隔离。
阶段验证:TypeScript 检查与生产构建通过;该阶段后台套件 19 项通过,浏览器回归后续收敛为 12 项真实 Edge 无头测试。浏览器测试仅使用隔离本机页面,不涉及真实小红书账号;保留 Cookie、会话互斥、正确/错误预期和执行中退出均有覆盖。
证据:[浏览器测试脚本](../tools/learning/test-browser-worker.mjs)、[本机回归报告](../.tmp/worker-regression-S8WGVV/report.json)。报告属于忽略的本机临时资产,不随仓库提交,不能当作其他设备的验证结果。
未完成:真实平台适配、平台身份自动核验、后台自主学习、macOS 实测、发布分发。原 A2A 的多机调度、完整知识合同与恢复系统未整包迁入。
提交/推送:本阶段基建尚未提交或推送。
## 2026-10-22-02:管理员初始化(历史回填)
目标:按用户要求初始化 `admin / 123456`。
已完成:空账号库一次性创建管理员,密码使用随机盐 scrypt 摘要;并发初始化幂等,已有任意维护者或已修改密码保留。登录表单默认账号为 `admin`,README 同步说明。
涉及文件:[认证](../apps/server/auth.py)、[后台入口](../apps/server/main.py)、[登录界面](../apps/admin/src/App.tsx)、[初始化测试](../apps/server/tests/test_bootstrap.py)。
阶段验证:当时后台套件 23 项通过,实际本机登录返回成功,本机端到端也通过。该计数是后续 28 项套件之前的阶段快照。
未完成:本轮没有新增账号管理或改密页面。
提交/推送:未提交、未推送。
## 2026-10-22-03:PostgreSQL 与检索扩展(历史回填)
目标:学习后台使用 Docker PostgreSQL,并核对原项目的 `pg_search` / `pgvector` 与真实学习核心。
已完成:
- 增加 [Compose 配置](../compose.yaml)、[初始化 SQL](../infra/postgres/init.sql) 和 `pnpm db:up/status/stop/check`;建立独立学习库、检索库和测试库。启动时实际健康检查通过,绑定本机 `55432` 端口,不据此推断当前持续在线。
- [存储层](../apps/server/db.py) 支持 PostgreSQL URL 与独立 schema、原生参数绑定、事务互斥、顺序及不可变事实保护;SQLite 适配保留。health 增加 `database_backend`。
- 增加 [迁移脚本](../scripts/migrate_learning.py):从一致备份导入空 PG 命名空间,同一事务核对数量,保留原 SQLite 和备份,非空目标拒绝覆盖。本次实际迁移 1 个维护者、2 条会话,无学习任务/候选/验证需要迁移;不声称已验证所有历史学习资料的迁移。
- 实际后台 health 返回 `postgresql`,迁移后的 `admin` 登录成功。
- 核对原工程:`pg_search` / `pgvector` 服务学习后的知识检索;原初次学习入口是独立 runner + Skills + 受限工具,部分 runner 与对象落盘实现仅适用 macOS,不能直接宣称 Win/Mac 完整迁移。
阶段验证:
- 后台套件 **28 passed,无跳过**,含 4 项真实 PG 用例;测试中的浏览器动作使用 `FakeWorker`,不属于真实平台验收。覆盖鉴权、候选并发、不可变事实、失败断言、密码保留和重启恢复。测试入口为 `pnpm test:server`。
- `pnpm test:learning` 在专用 PG 测试库与随机 schema 中,用真实 Edge 跑本机演示页;保存 23 份观察、5 个步骤、2 组成功参数试跑和总计 4 条验证记录,故意错误预期正确失败,重启保留记录,发布预检未放行。证据见 [本机端到端摘要](../.tmp/learning-acceptance-1792661264665/summary.json)。
- `pnpm db:check` 验证 PG17、`pg_search 0.26.1`、`vector 0.8.6`,中文 BM25、平台过滤、索引计划及固定样本向量排序通过;未调用真实 embedding 服务,未测语义召回质量。
- 方案图解七个标签页检查通过,未发现脚本错误或几何越界。
未完成:业务知识索引、真实 embedding、检索代际/发布资格衔接、自主学习、真实小红书和双端业务验收。完整规划见整体方案第 5.9、14 节。
提交/推送:未提交、未推送。
## 2026-10-22-04:确认本地 Codex 协作学习(历史回填)
目标:明确首期直接由本地 Codex 学习与固化。
已确认并写入方案:维护者登录 → 本地 Codex 观察与开发 → 提交候选 → 后台校验及变参试跑 → 根据证据修订;后台内置无人值守 Agent 后置。商家运行固化链路,内容理解/意图判断按需调用业务模型。
涉及文件:README、整体方案第 5.9 节与方案图解。
验证:文档差异检查通过;本轮为设计澄清,没有新增模型工具循环,也没有进行真实平台学习或重跑功能测试。
提交/推送:未提交、未推送。
## 2026-10-22-05:确认平台登录窗口(历史回填)
目标:明确小红书应在哪个浏览器登录。
已确认:Codex 右侧可以打开学习后台;平台登录在该后台「打开浏览器」启动的专用窗口完成,再回后台记录人工确认。日常 Chrome、Codex 右侧浏览器与该专用资料目录的登录态分别管理;资料持久化不保证平台永久免登录。
验证:此轮为操作说明,没有代码变更;尚未据此确认用户已登录,也没有采集真实小红书页面。
下一步:按 [近期规划](整体方案-v0.2.md#14-当前优化与近期实施规划) 完成首次实际观察与限定链路学习。
提交/推送:未执行。
## 2026-10-22-06:建立逐轮进度与规划维护约定
目标:每轮实际进度写入进度文档,优化与后续方向写入规划方案。
已完成:新增本进度文档并回填上述阶段;新增根 `AGENTS.md` 与持续生效的项目规则;README 增加入口;整体方案新增近期实施规划与维护约定,修正“尚无任何实测”的过时表述。
验证:本轮只修改文档和规则;执行本地链接与文档差异检查,不重复运行应用功能测试。历史 28 项套件及其他验收只作为历史事实引用。
未完成与下一步:真实小红书链路仍待学习,详见整体方案第 14 节。
提交/推送:未执行。
## 2026-10-22-07:提交并同步当前仓库
目标:按用户指令,将当前学习后台基建、数据库配置模板、方案、图解、进度及项目规则同步到 GitHub。
本轮范围:`apps/`、`tools/learning/`、`scripts/`、Compose/初始化 SQL、依赖声明与锁文件,以及已有文档和项目规则;保留用户的 `docs/Skills.md` 内容并一并同步。
验证与检查:核对当前分支 `main`、远程 `zwt-cmd/assistant`、70 个暂存文件及忽略规则,远端无待合并更新;未发现真实凭据或私有连接串,`.env`、数据库、浏览器资料、依赖、构建和临时验收产物不进入提交。修正两处文件末尾多余空行,暂存差异检查通过,无功能变化;复用此前记录的功能验证结果,本轮不重复运行应用功能测试。
实施规划:本轮仅同步仓库,不改变整体方案第 14 节的优化优先级;下一步仍为本地 Codex 协作的小红书实际链路学习。
提交/推送:主实现提交 [`cd34154`](https://github.com/zwt-cmd/assistant/commit/cd341549dd5fd487afac55425a3e7640f21fc8b0) 已成功推送到 `origin/main`,远端从 `f76f166` 前进到 `cd34154`。前两次直连分别遇到连接重置与超时,定位系统本机代理后,以单次命令代理参数重试成功。本条为推送成功后的进度回写,随后续文档提交同步,最终状态以 `origin/main` 核验。
## 2026-10-24-01:恢复本机学习后台访问
目标:排查用户反馈的学习后台无法访问,并恢复本机服务。
排查与处理:检查时前端 `5179`、后台 `8810` 均无监听,Docker 引擎可用;通过现有 `scripts/db.mjs up` 确认 PostgreSQL 就绪,再用 `scripts/dev.mjs` 启动前后端。可以确认服务进程此前未运行,尚无证据确定其退出的具体触发因素;本次没有修改应用代码、依赖或数据库配置。
验证:后台 `/api/health` 返回 `ok` 且使用 PostgreSQL,前端首页返回 HTTP 200 并包含应用根节点,前端代理 `/api/health` 同样返回 `ok`。以上是本轮恢复时的检查,不代表永久在线。浏览器工具获取现有标签页时被 URL 安全策略拒绝,未尝试绕过,因此未完成页面画面确认。未重跑功能测试,也未执行真实平台任务。
规划:本轮恢复现有开发服务,不调整整体方案第 14 节的实施顺序。
提交/推送:未执行;仅追加本次故障处理与检查事实,保留此前未提交的规则及文档调整。
## 2026-10-24-02:复核参考学习端与 V8 召回设计,调整对接规划
目标:按用户给出的两个本机路径,重新检查学习后台、学习逻辑和召回逻辑,当前先对齐学习与召回,桌面工程暂后置。
核对事实:参考总仓仍为 `main / db7b54a9c5ad4216df589e307ba57d180e3911af`,与上次相同;学习目录相对该基线及工作区均无修改。C 当前入口已指向 V8,新增/修改位于未提交的设计资料与交付快照;其 README 明确尚无正式应用、服务、迁移或工程测试。不能据“重新拉取”认定 A 有新实现,也不能将 C 方案当成现成召回服务。
源码核对:A 已有操作链知识、参数目录、端内语义映射、正向检索文档和索引代际等基础;正式生产激活及 reader 仍受 `PRODUCTION_CURRENT_STATE_BRIDGE_REQUIRED` 阻断。新语义生成/展示不代表已进入正式索引,当前投影输出仍只支持标量。C V8 细化了能力实现级双路召回、RRF、规则/缺参/当前状态检查,以及输出集合、分页和效果的消费要求;12 组 212 项是条件适用的需求登记,不是全部已实现字段。
本项目差距:现有候选主要绑定任务、样本参数、步骤、摘要和验证,读取输出仍为文本列表;尚无稳定逻辑能力身份、正式输入输出 Schema、语义修订、业务检索投影或实际召回 API。既有三条合成文档及人工三维向量烟测只能证明扩展和基础查询可用。
文档完成:整体方案新增第 5.10 节,规定最小共同契约、精确版本/语义/代际关联、输入输出和对象分页、合格供给、正向索引、同模型同范围双路查询及独立召回验收;第 14 节将契约与召回前移到首条学习并行推进,保留未来双端验收。README 同步当前重点;图解增加“学习与召回”页并明确待实现状态。没有改动应用代码或参考工程,也未引入其依赖、账号或运行资料。
验证:只读比对 Git 基线、相关源码与规格;CodeGraph 工具和 CLI 不可用,使用 `rg` 和源码补证,未创建索引。现有离线图解检查扩展到 8 页,通过节点/路径、文字边界、连线、搜索、主题、窄屏及导出检查,无脚本错误;本机报告为 `.tmp/plan-qa/checks.json`,属忽略的临时产物,不随提交分发。方案复核、文档差异检查通过,22 处本地链接有效;本轮未运行参考工程或应用功能测试,未执行真实模型召回、真实平台链路或业务联调。
下一步:按整体方案第 14.0–14.3 节实现并验证共同契约与最小学习到召回闭环;当前新增内容是设计,不能记为接口接通或检索质量通过。
提交/推送:未执行;保留此前规则和进度的未提交修改。
## 2026-10-24-03:按社媒获客收敛架构,区分探索与交付验收
目标:根据用户补充的获客场景调整当前方案;学习可接受探索中出现提醒,但用户接收的固定链路必须另行验证运行稳定性。
本轮调整:重写整体方案第 5.10、14 节,将当前范围收敛为信息查询、意向线索发现和关注/私信/评论/回复三类任务;先按平台与任务类型选少量固定链路,内容检索在真实网页完成,AI 负责相关性、需求与摘要。A2A 仅参考目标、证据、参数化、版本、验证和修订机制,完整 A/C 协议、三级语义、重型能力召回、通用调度和桌面工程后置。已有 PostgreSQL 和检索扩展保留,不因简化重建基础。
交付质量设计:每版本区分探索记录和正式运行模式验证;探索出现提醒可保留有效知识,不能直接晋级为用户可用。冻结版本按拟交付方式、正常起始会话、明确范围及变化参数独立验证完整任务、结果和平台状态;出现提醒或未知状态时不开放。已开放版本出现提醒时暂停任务并将版本置为待复核,重新验证后恢复。以上均为待实现规则,有限验证不能保证任意账号或未来平台版本永不提醒,也不能量化账号权重。
事实核对:当前实际驱动为 `tools/learning/browser-worker.mjs` 中的 Playwright 持久会话,没有接入 Python browser-use。核对 browser-use 官方配置与真实浏览器文档,其浏览器控制/会话能力不证明小红书或抖音不会提醒。当前没有平台专属提醒检测、正式运行质量门禁或版本停用/恢复实现;未操作真实账号、尝试规避检测或执行跟进。
涉及文件:整体方案、README、方案图解及本进度。同步纠正旧开发顺序中的桌面启动前置;图解将“学习与召回”改为“任务与检索”,补充评论/回复、轻量路由以及探索与交付验收区别。未修改应用代码或参考工程。
验证:方案复核及文档差异检查通过,22 处本地链接有效;离线图解 8 页的结构、路径、文字边界、连线、搜索、主题、窄屏及导出检查通过,无脚本错误,报告位于忽略的 `.tmp/plan-qa/checks.json`。本轮未运行应用功能测试,未验证真实平台提醒率、模型判断、账号状态或跟进效果。
下一步:以第 14.1 节的小红书限定只读链路及独立正式模式验证为先,不再将完整学习/召回体系作为前置。
提交/推送:未执行;保留此前未提交修改。
## 2026-10-24-04:完成学习端实施方案及首条任务准备清单
目标:在尚未开始真实平台学习时,明确学习端的具体实施、首条任务、操作质量和任务后官方消息反馈验收。
完成:整体方案新增第 5.11 节,规定维护者登录/必要示范、本地 Codex 经受限工具学习固化、现有后台留证的分工;首条限定小红书搜索、详情与有限评论/回复读取。六步流程包含会话确认、正常路径基线、有限探索、固化候选、独立正式模式验证及任务后观察,关注/私信/评论发布继续单独后置。
质量设计:将正常页面路径、动态对象核对、状态等待、输出来源及完整任务纳入验收;后续观察记录官方通知/功能状态基线、预配置复查窗口与时点、检查结果及关联依据。没有弹窗不代表没有事后通知;未检查、等待复查和关联未知不算无异常,延后反馈关联原版本。维护环境的学习验收与未来桌面/双端交付状态分别表达。
实施准备:已有会话、取证、fill/click/read 和候选/基础验证可复用;受限调用入口、有限滚动、条件等待/超时、视口及动态对象核验、结构化映射、只读取数适配、两类验证和后续观察/可用状态仍须补齐。当前已加载 DOM 文本、CSS 可见性及固定短延时不代表已经实现上述操作质量。没有新增通用 Agent 或完整 A2A 系统要求。
涉及文件:整体方案第 5.10–5.11、14 节,README 的实施入口和状态说明,图解的任务后反馈节点及本进度。未修改应用代码、访问真实平台账号或开始链路学习。
验证:只读核对现有 API/worker 与发布预检,方案就绪缺口复核通过;文档差异检查、23 处本地链接检查通过。离线图解 8 页的节点/路径、边界/连线、搜索、主题、窄屏及导出检查通过,无脚本错误;本机报告仍为忽略的 `.tmp/plan-qa/checks.json`。未运行应用功能测试、真实模型、平台操作或账号效果验证。
下一步:先按整体方案第 5.11 节补齐工具和记录状态,以隔离演示样本验证,再启动首条真实小红书有限学习。
提交/推送:未执行;保留此前未提交修改。
## 2026-10-24-05:补齐协作学习工具与维护质量记录
目标:落实整体方案第 5.11 节的通用工具和记录缺口,用隔离样本验证后,再进入首条真实页面学习。
已完成:
- 新增本机受限控制入口,支持任务、会话、观察、动作、候选及质量记录;复用鉴权与 CSRF,限制操作和输入大小,错误不自动重放。维护者凭据从当前进程环境传入。
- 浏览器新增有界滚动、可见/消失/文本等待、结构化提取和参数化精确目标;检查实际视口、容器裁剪及交互遮挡,零/多匹配停止,动态点击绑定实际对象。输出关联来源和本次读取范围,不将 URL 中的关键词视为正文命中。保留敏感信息过滤、写请求阻止及 EOF 清理。
- 新候选 v2 记录字段、预算和动态对象,兼容旧 v1;统一冻结与执行的 30 步预算。前后证据、候选及历史保持不可变。
- 后台和 UI 增加探索/正式模式、基线、服务器起止/到期时间、人工后续观察与候选质量状态。窗口到期不自动通过;晚到提醒/未知关联使同版本待复核,恢复需新的正式试跑与观察。复核发现并修复旧检查延后登记的问题:显式实际检查时间同样须达到观察期限。当前是人工维护核对,没有自动平台提醒识别或商家正式发布。
- SQLite/PG 新增不可变质量观察表;迁移包含新表,并兼容旧 SQLite 缺表、目标非空拒绝和整体事务回滚。同步现有方案、图解、README 和工具说明,保留此前工作区修改。
涉及范围:`apps/server/`、`apps/admin/`、`tools/learning/`、迁移/端到端脚本、根脚本声明及现有文档;未修改参考 A2A 工程。
本轮工程验证:
- 后台全量 **36 passed,无跳过**,含 5 个实际专用 PG 测试分支;其中浏览器行为使用 FakeWorker。最后两行时间门禁修复后,仅对 SQLite/PG 的质量时序用例定向复跑,**2 passed**;正向到期/恢复用受控时间验证,不是实际平台观察。
- 真实 Edge 无头工作进程 **20/20**,使用独立本机页面,覆盖新动作/字段、动态匹配、预算/视口、错误断言、Cookie/互斥及 EOF。证据:[工作进程报告](../.tmp/worker-regression-Ln8CCd/report.json)。
- PG 迁移 **4 项通过**,测试专用库四个随机 schema 均已清理,验证原始 SQLite 与一致备份保留。证据:[迁移报告](../.tmp/migration-regression-j1mfmz2b/report.json)。
- `test:control` 的隔离 HTTP 传输验证通过,覆盖操作/本机地址限制、CSRF 轮换、拒绝重定向、输入预算和失败不重放;不是实际平台验证。
- `test:learning` 在专用 PG 随机 schema + 真实 Edge 上通过 API/UI 联动:旧演示链路、7 步动态目标/结构化候选、变参正式试跑、提前无异常登记拒绝、晚到合成通知回退、摘要不变及重启恢复;UI 实际提交正式参数/基线、追加观察并刷新,执行滚动/等待/参数化提取。最终共 7 条验证,页面无脚本错误,发布未放行。证据:[端到端摘要](../.tmp/learning-acceptance-1792810225250/summary.json)。初次验收脚本遗漏首次采集及两处 Antd 测试定位已修正,最终完整通过;未将这些脚本失败算作平台结果。
- TypeScript 检查、生产构建通过;最后的复查时间标签调整后再次类型检查通过。构建有已有的包体体积提示,FastAPI 测试有 TestClient 弃用提示,均未阻断。
- 离线图解 8 页检查通过,无脚本错误或几何问题;文档链接及差异检查通过。临时报告和截图在忽略目录中,不作为分发资产。
运行状态:更新后的本机维护服务已启动,API 和前端代理 health 均返回 200、后端为 PostgreSQL,前端首页 200;不代表永久在线。未打开真实平台、代收登录信息、执行关注/私信/评论或测量账号权重。
下一步:按整体方案第 5.11、14.1 节,由维护者在专用浏览器登录并确认,与本地 Codex 观察小红书正常路径,依据页面证据补必要只读请求、字段、分页/空结果及异常分支,再固化和正式验证。真实平台表现、独立来源读回、macOS 与商家交付仍未完成。
提交/推送:未执行;保留此前未提交修改。
## 2026-10-24-06:开始真实首页观察,补齐失败代码诊断
目标:维护者点击登录完成后,由本地 Codex 接续限定链路学习;本条记录实际观察与诊断修改,不记录一般角色解释。
实际情况:
- 指定小红书任务处于人工确认的 ready 会话,初始无观察、步骤或候选。经受限入口采集到真实首页,保留文本与截图;人工确认不等于自动身份核验,也没有检查任务后的官方通知。
- 用户选择“装修”。现有任务样本 `keyword` 为空且没有参数编辑 API/UI;通过现有 Store 对指定维护者/任务做一次事务补填,条件包含旧值为空、无步骤/候选、并发比较与参数校验,恰好更新一行。保留原观察与活跃浏览器;临时维护脚本位于忽略目录,不声称参数编辑功能已实现。
- 向已观察到的搜索框执行一次参数化填写,API 返回 409。重新采集后页面出现“装修”搜索联想,证明动作可能已有局部效果;没有将失败录为成功、自动重放填写或假定搜索完成。旧控制入口丢弃服务端错误代码,故该次失败的具体原因尚不能确认,不能直接归因为平台提醒或请求拦截。
- 控制入口现在仅透传严格受限的 ASCII 错误代码 `apiCode/api_code`,仍使用通用错误文字,不复制返回的 message/detail 或凭据。下一步可据安全代码诊断;已请求维护者示范一次普通搜索作为基线,后续按真实页面补适配。
涉及文件:控制入口及其传输测试、README、整体方案、图解及本进度;没有改动浏览器执行器或重启当前会话。页面聚合包含隐藏提示和页脚,不据 DOM 中的文字认定平台已出现可见提醒;捕获上限和交互覆盖缺口已写入整体方案第 14.1 节。
验证:隔离 `test-control` 单次通过,新增安全错误码透传、无效/含敏感片段代码过滤和失败不重放覆盖;文档与差异检查通过。未重跑上一轮后台/浏览器套件,没有成功平台候选、正式试跑或发布;未执行关注、私信、评论及回复。
下一步:按整体方案第 14.1 节取得正常搜索基线,补失败阶段诊断、必要请求及可见交互适配,再固化搜索/详情/评论。当前会话保持,普通页面搜索示范结果尚待确认。
提交/推送:未执行;保留已有工作区修改。
## 2026-10-24-07:接续真实搜索与详情观察,补登录检测及精确请求实验策略
目标:维护者完成普通搜索示范后继续有限学习;按用户要求先检测持久会话是否登录,再决定是否需要登录或账号确认。
实际平台进展:
- 取得维护者正常搜索“装修”的结果基线,并成功结构化读取一条可见结果的标题与同源来源。旧执行器的详情点击返回 `WRITE_REQUEST_BLOCKED`,当时没有请求摘要,不能追溯断定具体请求或将其称为平台提醒。
- 同资料目录重开后,实际页面检测为 `logged_in`。用户明确确认使用当前账号后,恢复 ready 并采集;没有重新扫码。检测只依据可见导航/登录/验证状态,不读取 Cookie、存储或表单值,不替代当前账号身份核验。
- 新执行器保存到普通填写、搜索回车和打开笔记的实际前后证据及精确阻断摘要。一次调用误把模板字面量当作填写值,随后按任务声明的 `parameter:keyword` 更正;失败未计成功,没有自动重放。被工具阻止检索时页面出现的“无结果”不能记成平台真实空结果。
- 实验搜索 v1 放行已观察的检索请求后,实际出现装修笔记,但 APM 请求仍令回车失败;保留旧记录。补搜索 v2 后,实际参数化填写和搜索回车均成功,再采集动态加载结果,成功提取一条标题与来源;不是仅以 URL 或请求放行认定成功。
- 笔记打开 v1 已进入同一结果的详情。实际视口文字及截图确认正文和 **1 条可见评论**,但 `/api/sns/v1/history/report_web` 请求仍被拒绝,点击继续登记失败,未重复点击或改写成功。页面显示的评论总数不作为已读取数量;没有展开回复、翻页或滚动读取更多评论。
- 当前真实任务累计 **37 份观察、6 个分阶段成功步骤、0 候选、0 验证**。这些探索步骤包含先前阶段,不能直接当作从首页回放的完整链路。详情/评论容器尚未作为可读定位返回,未完成结构化评论字段映射。未执行关注、私信、评论发布或回复。
工程完成:
- 增加受限搜索回车,前后台与 v2 校验一致;仅已观察、唯一的普通搜索框按 `Enter`,评论/消息及 POST 表单不接受。后台提供“提交搜索(回车)”。
- 明确点击产生的同源新页可接续,旧页关闭不误关已接续页面;人工确认前同源新页仍保持未就绪。等待确认期间曾发生 `POPUP_BLOCKED`,当时来源未证实;修正其阻断状态及显示,不能只提示登录确认。未知或出域页面仍关闭暂停,最多保存 10 条脱敏页面事件,不伪造请求。
- 捕获优先实际视口、限制离屏候选并排除隐藏文本。失败保留实际 before/after、阶段、安全代码和截图,API 不插入成功步骤、不自动重放;后台刷新失败证据并保留表单,提供安全诊断查看。
- 被动请求观察最多 30 条,失败阻断摘要按四字段去重最多 12 类,同时保留总次数,避免重复流量淹没必要请求。两层清洗不保存查询、正文、头或凭据,敏感路径泛化。
- 增加搜索 v2、笔记打开 v1 实验策略,只让官网当前主框架中已核验的搜索框动作或固定格式笔记链接点击自然发出已观察精确请求。固定方法、来源、路径及资源类型,最长 15 秒、finally 撤销;没有通用 HTTP 调用,未知请求及其他动作仍受保护。策略版本/规则随摘要保存,API 按版本二次校验并兼容历史搜索 v1。
- 登录检测区分已登录、未登录、需要验证和不确定。退出/验证会撤销 ready,恢复登录不自动恢复确认;不确定不等于未登录,也不撤销仍有效的当前确认。后台提示与按钮随状态变化。
涉及范围:`tools/learning/` 的执行器、契约、检测与实验策略及测试,`apps/server/` 的动作边界/失败证据/状态与清洗,`apps/admin/` 的动作和状态界面,API/UI 验收脚本、根脚本及现有方案/图解/README。参考 A2A 工程保持只读。
本轮验证与边界:
- 后台全量 **42 passed,无跳过**,使用实际专用 PostgreSQL 测试库,浏览器行为仍为 FakeWorker;之后的小修定向验证:阻断状态 2 项通过,事件/错误传输/失败证据目标组 3 项通过、1 个 PG 参数分支跳过,最终策略版本清洗目标 1 项通过。阶段数不累加,也不把定向结果当作全量重跑。
- 最终真实 Edge 本机工作进程回归 **26/26**,仅隔离合成页面,覆盖搜索回车、同源/未知窗口、确认前接续、失败留证和去重诊断、原会话/互斥/EOF 等。证据:[最终工作进程报告](../.tmp/worker-regression-uWhHzp/report.json)。
- 合成 DOM 的登录检测 **13 个可见页面场景**及官方域/伪域边界通过;测试禁止读取 Cookie 和输入值。实验平台策略 **119 项纯函数边界断言**通过,包含请求规则、动作范围、唯一性、视口/遮挡、跨规则拒绝、过期及撤销;不发送真实平台请求。这些结果不能代替真实账号或完整业务验收。
- PG + Edge 的完整 API/UI 端到端通过:7 步候选使用搜索回车及同源新页,失败保存 2 份实际证据且无成功步骤;界面实际使用搜索回车表单、登录检测提示及失败诊断。原变参/质量/重启流程仍通过,共 7 条验证,发布不放行,页面无脚本错误。证据:[端到端摘要](../.tmp/learning-acceptance-1792812246545/summary.json)。该次在后续小范围弹窗/平台策略补丁前完成;补丁后使用定向测试、最终 worker 回归及上述真实有限接续验证,没有再全量重跑端到端。
- TypeScript 检查和生产构建通过;最后一处提示映射后再次类型检查通过。既有 TestClient 弃用及构建包体提示未阻断。本轮没有重跑 PG 迁移、检索扩展烟测、真实模型质量或 macOS。
- 图解 8 页检查、文档链接与差异检查通过,报告和视口截图留在忽略目录。它们是本机验证资料,不随版本库分发。
运行与未完成:更新后的服务与专用账号会话已恢复,当前保持实际详情页,API/后台使用 PostgreSQL;不代表永久在线。完整自动链路、评论字段与分页、独立正式模式试跑及任务后官方通知复查均未完成;没有判断账号权重或声称平台不会提醒,也没有正式发布或双端交付。
下一步:按整体方案第 14.1 节处理新发现的辅助请求及详情/评论可读容器,补有限字段/等待/结束条件;再单独录制正常起始链路、冻结候选和变参验证。保留本次探索与所有失败事实。
提交/推送:未执行;保留共享工作区此前所有未提交修改。
## 2026-10-24-08:完成首个有界图文候选与真实变参探索回放
目标:接续维护者确认的账号,补齐搜索、详情和评论读取适配,录制干净链路并用不同关键词与笔记验证。
实际平台进展:
- 原任务继续保留分阶段探索及失败;新建独立录制任务 `learn_df3d819892ac481c838a186a6627a8c1`,输入为 `keyword` 和 `note_title`,没有将旧混合步骤直接冻结。重开同一持久资料实际检测为已登录,沿用用户本会话已明确确认的账号,无需再次扫码。
- 成功录制 8 步:填写关键词、搜索回车、等待结果、按标题唯一选笔记、等待详情、提取标题/正文/作者、右侧有界条件滚动、提取首层完整可见评论。搜索排序变化后仍以标题核对目标;第二组结果带平台 AI 摘要,实际读取的是选中笔记详情。
- 冻结候选 `candidate_b13f6407b722422abb86ddbc4d128f9b`,摘要前缀 `8a3d3984c073`,静态校验通过。“装修”和“一切从简”两组不同关键词/笔记的完整探索回放通过,各返回 1 篇正确正文及 1 条完整可见首层评论,按预先观察到的文本片段固定比较,分别保留 9 份试跑证据。输出明确保留 `truncated=true`、覆盖范围和裁剪行计数;没有把页面评论总数当作已读数量。
- 第一轮变参回放在填写搜索时被工具阻止,实际证据显示同一 APM 路径使用 XHR,而旧搜索策略仅接受 fetch。该失败及空输出保留,未改记成功;仅在搜索 v3 增加精确 XHR 规则后重新验证通过。工具拦截不等于平台官方提醒,未核验账号权重或任务后通知。
- 搜索 v3 加载后两组均重新完成回放:变参约 70.5 秒,原参数约 72.5 秒。最终录制任务有 **50 份观察、8 个步骤、1 个候选、5 条验证**:1 条静态通过,4 条探索试跑中 3 条通过、1 条旧失败保留。候选摘要仍与冻结时一致;不同参数仅作为试跑覆盖值,没有改写候选。证据摘要:[本机试点汇总](../.tmp/xhs-final-pilot-summary.json)。
- 当前试点最多滚动 3 次、每次 320 像素,完整评论行出现即停,最多提取 3 条完整可见行。长正文样本初始没有可见评论,实际滚动 1 次命中;首条已完整可见时可 0 次。未展开回复或读取后续批次,没有执行关注、私信、评论发布或回复。
工程完成:
- 详情打开策略 v2 补实际观察到的浏览历史请求;普通读/提取/等待/滚动采用独立辅助流量策略,不能借用搜索或详情业务请求。搜索 v3、详情 v2、读取辅助 v1 分别限定 7/8/2 个精确方法、来源、路径与资源类型,仍是最长 15 秒的当前主框架动作窗口;历史策略按旧范围清洗。
- 页面观察增加实际可读 ID、语义区域、滚动容器和可追溯集合,返回相对字段提示;集合从真实 DOM 和最多 12 层安全祖先推导。保留输入/按钮配额,避免密集链接挤掉搜索框;固定语义核对允许轮换占位示例,真正的语义变化或当前定位缺失分别停止。先前 `STALE_TARGET` 的具体单一原因没有追溯证据,不直接归因于占位文字。
- 增加 `scroll.until_selector` 与 `extract.complete_only`,贯通 worker、Python 契约/校验和后台表单。完整行模式先校验真实缺失、隐藏、敏感与多匹配错误,再跳过裁剪行;额外保存 `skipped_incomplete_count`,空结果不能通过内容断言。省略新选项保持旧合同,边界/预算结束只作有界条件轮询,不追加滚动或自动重放。
- 后台准确展示弹窗/范围阻断,不再将这些状态当作普通登录待确认。涉及 `tools/learning/` 执行器/契约/策略及测试、`apps/server/` 清洗和动作合同/测试、`apps/admin/` 表单/状态提示、API/UI 验收脚本及现有文档图解。A2A 参考工程保持只读,未新增检索或桌面运行实现。
验证与阶段边界:
- 本机 Edge 工作进程最终 **32/32**,覆盖固定搜索语义及配额、条件滚动 0 次/命中/边界/预算/懒加载、完整行过滤及后置字段错误;仅使用隔离合成页面。报告:[worker 回归](../.tmp/worker-regression-Om8Jr4/report.json)。该报告在最后搜索 v3 的精确类型补丁前完成;补丁后纯策略 **210 项断言**通过,详情/读取策略对新 XHR 类型仍拒绝,未重复全量 worker 回归。
- 新滚动/提取合同定向 **3 passed、47 deselected、无跳过**,搜索 v3 元数据定向 **2 passed、50 deselected、无跳过**;均包含 SQLite 及实际专用 PostgreSQL 测试库,浏览器行为为 FakeWorker。后台全量未在本条重跑,不能将这些目标数累加成全量结果。
- PG + Edge 的完整 API/UI 端到端通过,新增的条件滚动、完整可见行和动作字段隔离表单均实际提交;旧搜索回车、失败留证、变参、质量反馈和重启恢复仍通过,保留 7 条验证、`errors=[]`、发布不放行。报告:[最终端到端摘要](../.tmp/learning-acceptance-1792816035113/summary.json)。该次在搜索 v3 补丁前完成,之后用上述定向验证及真实样本回放验证策略修订。
- 前端类型检查、生产构建通过,已有包体及 TestClient 弃用提示未阻断;离线图解 8 页无脚本错误或几何问题,本地文档 33 个链接及差异检查通过。证据在忽略的本机目录,不随仓库分发。PG 迁移、检索扩展、真实模型质量和 macOS 未执行。
未完成:当前仅探索模式通过;正式模式的通知/功能基线、完整过程复查和任务后反馈尚未采集,独立身份/来源读回未接入,没有正式发布或商家双端交付。后续按整体方案第 14.1 节验证正式质量及补充边界,再推进第 14.2 节的商品条件和需求判断。
结束检查:发布预检明确不放行,已通过结构/两组参数/Windows/证据检查,macOS、独立来源读回及正式质量仍不满足。当前维护服务前端首页、API 及前端代理 health 均返回 200,数据库为 PostgreSQL,专用浏览器保持原样本详情;服务生命周期仍依赖本机开发进程,不代表永久在线。
提交/推送:未执行;保留共享工作区已有修改。当前候选与平台证据保存在本机独立学习账本及忽略的资料目录中。
## 2026-10-24-09:正式执行修订与评论分批、明确空态合同
目标:维护者报告运行前状态正常并授权 Codex 自行执行正式模式、继续开发读取边界;任务后的账号检查仍由维护者提供实际反馈。
真实平台执行:
- 以维护者本轮“正常”回复记录人工运行前通知/功能基线,没有假称执行器独立核验官方消息。旧候选 `candidate_b13f6407b722422abb86ddbc4d128f9b` 首次正式试跑约 49.4 秒后等待超时:真实搜索结果首张卡没有标题,固定首卡标题定位未出现;没有阻止请求。失败验证、5 份证据与过程复查不通过记录保留,旧候选为 `review_required`。
- 新增集合可见数量等待以解除对首张卡标题的依赖。分批准备样本实际按平铺行读到 4 个不同评论 ID,其中含已展示回复;依据实际父容器结构进一步限定首层,核对得到 3 条首层并排除该回复。准备任务保留,不将其混合步骤当作最终候选。
- 在独立任务 `learn_a1ff98e8618c43aeafab61772bcce2f6` 录制 7 步:填写、回车、集合等待、精确标题点击、详情等待、正文提取、首层分批提取。冻结候选 `candidate_d2de3f860c4d48839ff01881d9a62ac3`,摘要前缀 `c7ca1b76f572`;静态校验及两组不同关键词/笔记的正式模式执行通过,约 72.2/83.0 秒,各保留 11 份执行证据。
- 两组各读 3 批,分别输出 3/4 条去重首层评论,去掉 1/2 次重复观察;分别以批数/时间预算结束,保持 `truncated:true`。当前样本每次滚动 320 像素、最多 3 批(含首批)、输出上限 5,不声称读完页面显示的全部评论,也未展开回复。核对搜索、对象/来源、输出、逐批依据及关键截图后,两条正式验证均追加“过程复查通过、等待账号反馈”。
- 最终新任务 **42 份观察、7 步、1 个候选、3 条验证**(静态 1、正式执行 2,均通过),候选摘要未变化。质量仍为 `awaiting_observation`;观察窗口分别到北京时间 **2026-10-24 15:17:30、15:18:56**。告知维护者 15:20 后核对官方消息及搜索/详情/评论功能,再由 Codex 代登记实际结果;没有提前登记 `clear`,没有安排无人值守检查。汇总:[本机正式执行摘要](../.tmp/xhs-runtime-final-summary.json)。
工程实现:
- `wait.min_count` 仅显式可见等待使用,默认保留唯一对象语义;录制/冻结检查实际集合来源,回放允许从零项延迟加载开始,逐次核对安全和范围。搜索、详情和读取请求策略均未扩展。
- `extract.row_selector` 将行限定在已观察的唯一普通容器内;`batch` 先读首批后有界滚动,强制完整行、安全必填业务 ID 去重及同来源/根对象,最多 5 批、每次最多 1600 像素,批次预算 15 秒。每批真实截图保存到 `batch_evidence_ids` 并参与候选摘要;来源替换、同 ID 内容冲突、未知请求等失败保留已有批次、不插成功步骤。少量行无溢出的普通滚动容器可首批读完后报告边界;零新增不等于完整读完。
- 明确空态要求 `allow_empty`、相对行定位及精确空态依据,在普通唯一容器、零行、完整可见、非忙碌和可用会话下再次核对;仅 `{"state":"empty"}` 预期可通过,普通文本预期继续拒绝空内容。字段真实缺失、裁剪、未加载或退出登录不能伪装为空。DTO 归一空态文字首尾空白后冻结,旧候选和原有省略参数的合同保留。
- 后台增加“正式模式试跑”直达入口、观察到期时间/账号复查说明、集合数量等待与批次/空态表单;选项互斥并按动作隔离,原配置测试保留探索默认。回放保存受限 `error_codes`,登录检测发现退出/验证时撤销 ready,批次在下一状态核对停止。
- 涉及 `tools/learning/` 执行器、JS 合同及浏览器测试,`apps/server/` 合同/比较/证据冻结/错误清洗及测试,`apps/admin/` 类型、表单、候选入口和质量提示,隔离验收夹具与现有文档图解。参考 A2A 保持只读,没有开发桌面、模型或召回服务。
验证与边界:
- 后台全量 **61 passed、无跳过**,约 148.7 秒,包含 SQLite/实际专用 PostgreSQL;之后仅空态文本归一小修,受影响目标 **2 passed、59 deselected、无跳过**。不与此前 42 项或中间定向次数相加。
- 最终隔离 Edge worker **40/40**,覆盖逐批证据/去重/边界/同高度懒加载/冲突或来源变化失败、明确空态、从零项加载的集合等待及原会话/EOF 等。报告:[工作进程回归](../.tmp/worker-regression-N1TIsP/report.json)。登录检测单独 **13 个合成 DOM 场景**和官方 URL facade/伪域边界通过,禁止读取 Cookie 和输入值;源码核对批次前后检测失效即停止。没有主动登出真实账号或构造完整官方会话失效测试。
- 完整 PG + Edge API/UI 单轮验收通过:6 项新增界面断言及旧回归通过,实际保留 **9 条验证**,`errors=[]`,发布不放行。报告:[最终端到端摘要](../.tmp/learning-acceptance-1792822016814/summary.json)。首轮新增空态夹具漏做静态校验而正确被拒,补前置后独立完整重跑通过,没有拼接阶段结果。报告使用最终查询计数;随后仅将控制台旧计数也改为同一查询变量并做语法检查,未重复整套。
- TypeScript 检查和生产构建通过;离线图解 8 页无脚本/几何问题,本地文档 36 个链接及差异检查通过。现有 TestClient、组件弃用和包体提示未阻断。报告及平台资料均在忽略的本机目录。真实平台搜索/评论空态、登录失效与验证页尚未学到,不能用合成用例代替;PG 迁移、检索烟测、模型质量、macOS 未执行。
结束状态:维护服务健康,前端首页 200、API 为 PostgreSQL,专用浏览器保留第二组详情。发布预检仍不放行,缺账号后续反馈、独立来源读回和 macOS 验证;没有关注、私信、发布评论、账号权重判断或正式分发。后续按整体方案第 14.1–14.2 节推进。
提交/推送:未执行;保留共享工作区原有改动,所有旧探索、失败、候选及验证历史均保留。
## 2026-10-24-10:登记观察窗口内的人工反馈
目标:将维护者“目前看都正常”的实际反馈追加到对应正式验证,同时保留时间与来源边界。
完成情况:核对 UTC 时钟,登记时为北京时间约 14:35,早于两条正式验证的 15:17:30、15:18:56 到期时间。分别追加 `waiting` 人工反馈,沿用此前过程复查通过;读回新候选仍为 `awaiting_observation`、摘要不变,发布预检及 `published` 均为 false。没有将当前正常视为观察窗口已完成,也未改写原验证或旧候选失败。证据:[中途反馈摘要](../.tmp/xhs-midwindow-feedback.json)。
本轮仅通过本机 API 追加 2 条质量记录并读回状态,没有业务代码修改、真实浏览器操作或重新运行测试套件。维护者另确认下一阶段样例为装修服务寻找有装修需求的业主;确定范围与实施顺序补充到整体方案第 14.2 节,业务能力和模型尚未实现。进度记录仅覆盖实际账本更新与已确认范围,不记录一般问答。
未完成:窗口到期后的官方消息/功能实查反馈;后续按整体方案第 14.2 节推进业务闭环。提交/推送均未执行,保留共享工作区已有修改。
## 2026-10-24-11:装修搜索结果与规则初筛,修复来源脱敏和表情截断保存
目标:接续已确认的“装修服务,寻找有装修需求的业主”,先把真实搜索结果结构化读取并保留少量待读笔记。地区尚未提供,留空;模型、真实需求判断与详情自动衔接分开验收。
工程完成:
- 新增独立四步搜索读取合同:填写 `keyword`、搜索回车、等待至少一个可见标题、提取 `search_results`。根据实际观察选择唯一普通根容器及有标题的卡片行,不读取搜索页 AI 摘要;标题/作者可选、同源链接必填,完整行模式跳过视口裁剪行,保留有界及截断标记。
- 增加严格 `{"state":"nonempty"}` 结构预期,仅合法提取输出、正条数、字段/必填/来源及批次元数据一致才通过;不等于语义或采购意图验证。零结果、仅裁剪行、错误形状或 `read` 输出不通过该断言。
- 后台新增“内容初筛”页面及鉴权 API,按当前装修样例规则保留最多 1–3 篇。保留求助信号和相关案例;地区仅保存,业主身份、真实需求及预算均未核实。接口拒绝不支持的服务/客户条件,不把装修规则套到其他业务。
- 按同站标准笔记 ID 归并,缺标题、脱敏或重复/冲突标题不自动选;合法来源但缺可用标题显示“信息不足”,无效来源另行区分。超过保留上限写明未选理由,直接否定完工/入住等表述不冒称已完成。规则模式、条件、摘要、验证、证据、理由和已识别失败均可回看。
- `discovery_runs` 作为追加事实接入 SQLite/PG schema 5;旧记录不随规则变更重算。迁移脚本兼容旧 SQLite 尚无初筛表,并保留非空目标拒绝、备份、固定插入顺序和事务回滚。受限控制入口增加 `discovery.list/get/create`,沿用本机鉴权、CSRF、ID 限制和失败不重放。
- 修复公开来源编号误脱敏:仅官网无凭据、标准端口、精确标准笔记路径保留公共 24 位十六进制编号;查询、片段、其他 URL 和文本仍按原规则脱敏,没有放宽请求策略或增加通用浏览器接口。
- 修复长页面截断表情导致 PostgreSQL UTF-8 编码异常:浏览器返回入口递归处理无效 UTF-16 片段,观察保存覆盖失败捕获旁路;合法 Unicode、JSON 序列化规则、候选摘要和历史数据不变。
实际平台与失败事实:
- 新任务 `learn_fc248254100b482c9ae2508d9648f29d`,冻结搜索候选 `candidate_64ba8e4187f546c5a228ce9325c16b5c`,摘要前缀 `919454f3bf02`,静态通过。重启后同资料仍检测为已登录,沿用维护者已确认的账号,不再扫码。
- “准备装修”探索约 **27.8 秒**,读取 3 条完整可见结果、跳过 2 次裁剪行,按标题规则保留 2 篇进一步阅读;保存 5 份验证证据。保留原因是准备装修表述,不确认作者为业主或真实客户。
- “装修案例”首次探索约 **29.0 秒**,读取 3 条、跳过 3 次裁剪行,未保留笔记。其中 1 条公共编号被旧通用手机号脱敏误伤,导致业务来源校验不通过;旧结果保留。其余标题缺装修词也未选中,说明标题规则存在漏筛,不能解释为平台没有相关内容或客户。
- 加载来源修复后的首次追加执行出现 **HTTP 500 / UnicodeEncodeError**:长文本的表情代理对被截断,保存观察时数据库拒绝;原 20 份观察增加到 23 份,但没有生成本次完整验证或初筛记录。没有自动重放、伪造完整失败验证或改记成功;工程事实见 [保存异常记录](../.tmp/xhs-discovery-unicode-incident.json)。
- Unicode 修复后另起一次“装修案例”探索,约 **27.7 秒**通过,读取 3 条、3 个有效来源,编号无误掩,仍因标题规则未保留。新记录另存,原两条初筛及候选摘要逐字读回不变;每次均为 `coverage:bounded`、`truncated:true`,没有把上限 10 或页面总数当作实际读取量。
- 最终新任务 **28 份观察、4 步、1 个候选、4 条验证**(静态 1、探索 3),形成 **3 条初筛记录**;另有上述未生成完整记录的持久化失败,未混入通过数。汇总:[本机初筛摘要](../.tmp/xhs-discovery-final-summary.json)。尚未自动进入选中笔记的详情/评论,没有调用模型。
验证与边界:
- Unicode 修复后最终后台完整 **70 passed、无跳过**,约 **186.4 秒**,包含 SQLite 和专用 PostgreSQL。覆盖装修范围、否定表述、未选上限理由、来源/标题区分,以及 30k 截断表情、嵌套文字、成功/失败证据、API 读回及旧摘要不变。修复前 67 项全量及新增 3 项定向均为阶段结果,不与最终 70 项相加;只有既有 TestClient 弃用提示。
- 最终 worker 单轮 **43/43**:新增 1 组纯 URL 正反例与原 42 组隔离 Edge 流程,包含严格非空结构预期。报告:[工作进程回归](../.tmp/worker-regression-fFs9GY/report.json)。恶意/伪域、HTTP、凭据、非标准端口、账号及非标准笔记路径均不享受编号例外;普通手机号和敏感查询仍脱敏。不是 43 个真实平台样本,不与此前 40/42 次相加。
- 新页面完整 PG + Edge 隔离 API/UI 单轮通过:8 条合成结果保留求助及同行各 1 篇,来源/标题不足不选,条件、理由、证据、历史重开、重启保存及缺会话失败通过;2 条初筛历史、`received_writes=0`、`errors=[]`。报告:[内容初筛验收](../.tmp/discovery-acceptance-1792825185336/summary.json)。此前两次因新夹具 schema 名及零高度空链接失败,修夹具后独立完整重跑,没有放宽执行合同。该套在最后来源/Unicode 修复前通过,之后用对应定向、worker 与真实平台重跑验证,没有重复整套 UI。
- 迁移隔离回归 **9/9**,仅专用测试 PG 随机 schema,含初筛数据/Unicode/顺序、旧库缺表兼容、非空目标拒绝及外键失败全表回滚;没有执行开发数据迁移。报告:[迁移回归](../.tmp/migration-regression-n4og18yw/report.json)。
- TypeScript 检查与生产构建通过;受限控制传输测试、43 个本地文档链接及最终差异检查通过。图解 8 页无脚本或几何问题,报告:[离线图解检查](../.tmp/plan-qa/checks.json)。这些测试都不能代替真实需求准确率、账号后续反馈或双端交付;既有组件弃用和包体提示未阻断。
涉及范围:新 `apps/server/discovery.py` 及测试、学习契约/比较与 Unicode 入口、SQLite/PG 存储与迁移、`DiscoveryPage.tsx`/导航/类型、`scripts/test-discovery.mjs`、worker 的非空断言/来源脱敏及测试、控制入口,现有 README、整体方案、图解与本进度。A2A 参考工程保持只读,原共享工作区修改全部保留。
未完成与下一步:按整体方案第 14.2 节把选中笔记接入已学详情/首层评论链路,再接可配置模型、标注样本和带依据线索。标题规则漏判、模型准确率及费用未验收;真实空态、登录失效、独立读回、macOS 和正式发布仍未完成。旧详情候选仍等待维护者窗口到期后的官方消息/功能实查反馈,不以时间经过或本轮搜索通过代替无异常反馈。
结束检查:更新后的服务已加载,API 与前端代理 health 正常,前端首页 200,数据库为 PostgreSQL;专用浏览器保持当前搜索结果。运行依赖本机开发进程,不代表永久在线。
提交/推送:未执行。所有真实账号资料、证据和忽略目录中的报告保存在本机,不随仓库分发。
## 2026-10-24-12:初筛到单篇正文与首层评论衔接,增加对象绑定和阅读历史
目标:把初筛实际保留的笔记接入已学详情链路,逐篇保存来源、正文、有限评论、验证及失败原因;本轮不接模型或判定真实需求。
工程完成:
- 新增单篇阅读 API 与 `reading_runs` 追加事实,SQLite/PG schema 6。客户端仅提供详情候选及该初筛已保留的笔记编号,关键词、标题与来源由后台取不可变初筛记录;非保留对象、额外标题/URL 或跨归属输入不执行。候选须符合已学七步业务字段、同平台/站点及静态验证,使用其已确认会话,不自动开关浏览器或重放失败。
- 复用原七步候选而不改写:正常搜索、唯一标题点击、等待详情、读取 `title/body/author`、有界分批首层评论。验证可选 `note_binding:{note_id}` 仅适用该合同;点击前核对当前真实链接 ID,落页后及后续等待/提取/批次内持续核对页面 ID。对象或标题变化即停,已有实际证据保留。
- 绑定记录含目标 ID、链接检查、页面检查、实际来源及实际正文标题;后台再次比较对象、标题和两提取来源并保存 `note_source_binding` 断言。绑定输出使用实际 origin + pathname,不带 query/hash;旧无绑定语义、请求策略、冻结摘要和历史不变。这是同一浏览器内的对象核对,不等于独立身份的业务读回。
- 阅读分为完成、部分完成与失败。只有对象核对通过的正文才作为本篇内容展示;评论缺字段或未读到完整行时可保留正文,不把 0 条当作平台确认空态。范围以实际条数、批次、去重、结束原因和截断标记展示。
- 内容初筛页面可选同站详情候选、逐篇触发阅读,查看绑定、正文、评论、验证、证据和历史;回看地址为 `#/discovery/{run_id}?reading={reading_id}`,刷新及前后退保留对象,错初筛/过期 ID 不展示错归属结果。目标编号标签明确为“绑定目标笔记标识”,不把前置失败时的预期编号冒称实读编号。
- 受限控制入口增加 `readings.list/get/create`;新增隔离 `test-reading` 脚本。迁移兼容旧 SQLite 没有阅读表,保证新阅读数据在初筛/候选/验证之后复制,保持非空目标拒绝、备份与整体回滚。
真实平台与边界:
- 加载冻结代码后,同资料目录仍检测为已登录;沿用维护者此前明确确认的账号。重新搜索“准备装修”约 **29.6 秒**,读取 3 条完整可见结果并保留 2 篇,新增初筛 `discovery_8dd08f13fc6a47c48c8385e2665540e7`,服务地区继续为空。关闭搜索任务会话,重开同账号的详情任务仍已登录,无需扫码。
- 第一篇阅读 `reading_d887f5884bb1481fa02b5676c3d4dd9e`,探索约 **85.3 秒**通过:实际得到 1 篇正文和 **5 条去重首层评论**,读 3 批、去掉 2 次重复观察,达到本轮条数上限结束,`truncated:true`,保存 **11 份证据**。点击前链接 ID、点击后页面 ID、正文标题及两输出来源均核对通过;不是读取全部评论,也未展开回复。
- 第二篇阅读 `reading_9fa8e3a65ba84596a0acb70658bb8bde`,探索约 **32.4 秒**失败:重新搜索后目标已不在当前视口,`TARGET_NOT_IN_VIEWPORT` 在点击前停止;未完成来源绑定检查,也未读该笔记正文/评论,保存 **6 份实际证据**及失败验证。没有盲目滚动、换一个对象、直跳来源或自动重试,没有把未执行的阅读改记成功。
- 同一初筛下形成 2 条独立阅读记录(完成 1、失败 1)。详情任务当前 **59 份观察、7 步、1 个候选、5 条验证**:原静态 1、正式执行 2,新增探索阅读 2(通过 1、失败 1)。原 3 条验证、原初筛记录及候选摘要逐字读回不变;候选质量仍为 `awaiting_observation`,`published:false`。本轮没有收到到期后的官方消息/功能人工反馈,不以窗口已过或首篇通过自动清除质量待办。
- 汇总:[本机阅读衔接摘要](../.tmp/xhs-reading-final-summary.json)。所有真实资料保存在本机学习账本与忽略目录中,未写入模型;没有关注、私信或发布评论动作。
验证与边界:
- 新后台阅读目标 **5 passed、70 deselected、无跳过**,约 79.7 秒,包含 SQLite 与实际专用 PostgreSQL。覆盖来源/标题/proof、仅保留对象可读、部分正文、会话失败、owner、不可变历史和 public Verify 大写编号归一。
- 75 项全量首轮 **74 passed、1 failed、无跳过**,约 296.5 秒。唯一失败是旧初筛不可变测试使用 `TRUNCATE discovery_runs`:新增阅读外键使 PG 在不可变 trigger 前先拒绝,未命中旧测试预期异常。仅将测试改为 `TRUNCATE discovery_runs CASCADE`,与原事实保护测试一致,产品代码未改;受影响 PG 目标随后 **1 passed、74 deselected、无跳过**,约 11.6 秒。未重跑整套,不能称为单轮 75 项全过,也不与上轮 70 相加。
- 最终隔离 worker **48/48**,为原 43 组与新增 5 组绑定流程的同一轮报告:[worker 回归](../.tmp/worker-regression-Da61Sg/report.json)。覆盖正确对象、同标题错 ID 点击前拒绝、跳转后 ID 变化、正文标题变化、批次内来源漂移、phone 样公共编号和旧无绑定路径。随后仅补含敏感 query/hash 的合成夹具,真实 Edge 完整七步目标 **1 项通过**:[来源边界目标](../.tmp/binding-query-hash-eSInmP/report.json)。产品未再变化,未重跑旧 43 组;不是 49 项全量或平台样本。
- 新 PG + Edge 完整 API/UI 隔离验收单轮通过,保留 **4 条阅读记录**(完成 1、部分完成 1、失败 2)。两篇对象、正文保留、首层 3 条/2 批、绑定、证据、hash 刷新与前后退、错归属/过期 ID、历史、重启及未就绪不自动登录均通过;同标题错来源的实际 DOM 点击 **0**、错页正文请求 **0**,`received_writes=0`、`errors=[]`。报告:[阅读页面验收](../.tmp/reading-acceptance-1792827229128/summary.json)。之后只修改上述目标编号标签并再次类型检查,没有重复完整 UI 验收。
- 迁移隔离回归 **13/13**,仅专用测试 PG、13 个随机 schema 均清理;新阅读数据、Unicode/顺序/可空引用、旧库缺表、非空目标、外键失败回滚和原核心表缺失拒绝均通过。报告:[迁移回归](../.tmp/migration-regression-4ef9osr1/report.json)。没有执行开发数据迁移。
- TypeScript 检查与生产构建通过,最后纯标签修改后类型检查通过;受限控制传输、语法、49 个本地文档链接与差异检查通过。离线图解 8 页无脚本或几何问题,报告:[图解检查](../.tmp/plan-qa/checks.json)。既有 TestClient/组件弃用及包体提示未阻断。未重跑检索扩展、macOS、模型判断/费用或旧详情的正式模式;只读探索不代替正式发布与商家交付。
涉及文件:新增 `apps/server/reading.py`、阅读测试及 `scripts/test-reading.mjs`;学习验证/DTO/SQLite/PG、worker 与测试、内容初筛页/路由/类型、迁移脚本与测试、受限控制入口和现有 README/整体方案/图解/本进度。原 A2A 工程未改,保留共享工作区全部原有修改。
未完成与下一步:真实第二篇暴露重新搜索后的视口缺口,已将“选定对象重排后的有界定位与进入视口”列为整体方案第 14.2 节当前优先项;修订候选和变参验证通过后再扩大逐篇范围及接模型。当前入口和安全中断已实现,不能宣称所有保留笔记均可稳定阅读。真实空态、登录失效、回复层级、独立读回、后续账号反馈、模型与双端发布仍未完成。
结束检查:已加载更新代码,API/前端代理 health 正常、前端首页 200,使用 PostgreSQL;专用浏览器保留第二次失败后的实际搜索页,没有自动续跑。服务仍依赖本机开发进程,不代表永久在线。
提交/推送:未执行。测试报告及平台证据属于忽略的本机资料,不随版本库分发。
## 2026-10-24-13:有界目标定位八步修订、硬截止与部分结果留存
目标:补原第二篇在搜索结果重排后离屏的定位缺口,保留旧七步及失败,另录修订版并实际变参验证。
工程完成:
- `scroll.until_target` 限定最新观察的唯一普通纵向容器,目标匹配使用固定容器后代、明确参数与同一点击 CSS;方向、距离、次数和时间有界,目标已完整可操作时零滚动。重复、遮挡、编号/来源/根变化或预算用尽即停,互斥旧 `until_selector`。录制留参数与真实证据,旧 body 滚动及七步合同不改。
- 新八步为填写、回车、集合等待、容器目标定位、点击、详情等待、正文、首层评论。来源绑定在定位、点击及读取中核验;`seek_results` 保存步位、实际次数/逐次位置高度、是否找到及原因,只表示定位阶段,不替代来源或整次阅读成功。后台表单、候选筛选和阅读回看已接,修复候选选择框在嵌套 grid 中持续撑宽页面的问题。
- 首次回放暴露原总预算只在步骤之间检查,单步和失败取证可能跨过 120 秒 RPC。已补整段硬截止,旧总额 90 秒、新八步绑定为 90 秒加已声明定位预算(最多 105 秒),总额内预留 2 秒关闭与返回,不增加 RPC 上限。到期撤销执行状态、关闭本次上下文,返回已完成输出、真实步骤/批次图及定位记录;活动定位记时间到期,已完成定位保持成功。确认关闭才返回 `session_closed:true`,后台据此清缓存并暂停,部分验证正常保存,资料目录保留,不自动重开或重放。
- 返回定位数组及逐次数字对象作值复制,避免迟到回调改写已返回事实;没有改冻结步骤或摘要。没有新增数据库表或迁移。
实际平台与历史:
- 重开同资料仍检测为已登录,沿用维护者已确认账号。首个新录制任务 `learn_5cf43a7e7e774342a454826df7a8d0b8` 在实际结果容器滚动 **1 次 / 320 像素**,进入原第二篇正确编号并取得正文;评论遇纯图片而触发 `REQUIRED_FIELD_MISSING`。保留 **7 个成功步骤、20 份观察及失败批次证据,未生成完整候选**。首次集合等待还因最新观察尚无结果定位被 422 拒绝,采集就绪页面后才继续,没有把前置拒绝记为成功。证据:[不完整录制及真实失败](../.tmp/xhs-seek-recording-failure.json)。
- 图片评论没有可读文字,现有 `required body` 合同不做 OCR;完整行模式只跳过裁剪,不能跳过真实缺文字。未改作者/整行充正文,也未放宽必填来通过。另起文本样本任务 `learn_1134872f004e45f0b9c5307aa7df948a` 录完 8 步,定位 **0 次**,录制得到 3 条评论、2 批、时间预算结束;冻结 `candidate_f4c5b121840b426a89cbb72522412817`,摘要前缀 `bd0d349bb1f5`,静态通过。
- 硬截止修复前,首次新候选回放第二篇触发 `worker_timeout`;阅读 `reading_ec87f0663dc546eaac04a119ee164b8c` 保存失败,**没有完整验证、输出或返回证据**。上下文关闭,未自动重试;不能据无记录断言页面无动作。原事实保留:[RPC 超时阅读](../.tmp/xhs-seek-rpc-timeout-reading.json)。
- 硬截止修复后、最后纯返回深拷贝前,首篇探索 `reading_7a382eeb82e7495798ecb86fdf35a8f1` / `validation_b3b0f1e817394a838e06befaf1951af4` 约 **80.6 秒完成**:定位 0 次,1 篇正文、**5 条去重首层评论**,3 批、去重 3 次、条数上限结束,12 份证据;链接、页面编号、正文标题与输出来源通过,仍为截断的有限范围。
- 加载最后深拷贝修订后,第二篇探索 `reading_58d5fe09137c4bab8c939e9c86e323b0` / `validation_5e51b75e0854403e8a7d1411918deacd` 约 **100.3 秒(含后台保存)部分完成**:实际 1 次滚动,从 0 到 320;来源核对及 41 字正文已得,评论阶段 `VERIFY_BUDGET`,无可用评论输出。保留 8 份真实证据和失败验证,定位摘要仍为已找到,确认浏览器关闭,任务 paused / ready false。不能将此回放说成评论已成功,纯图片缺口依据上项录制另报。
- 同初筛现在共 **5 条阅读历史**:原完成/离屏失败、新无完整结果超时、新完成及新部分完成均保留。读回原初筛、原两条阅读、旧七步清单/摘要及新八步冻结清单/摘要不变。新任务 42 份观察、8 步、1 候选、3 验证(静态及两次有完整结果的探索);另有上述无完整验证超时。汇总:[实际平台最终摘要](../.tmp/xhs-seek-final-summary.json)。新候选为 experimental、未发布,旧正式候选仍等待窗口后的真实账号反馈,没有据时间经过代填无异常。
验证及边界:
- 最终后台完整 **82 passed、无跳过**,约 **340.8 秒**,覆盖 SQLite 和实际专用测试 PostgreSQL。包含有界合同/证据/7–8 步兼容、摘要预算核对、部分内容与实际关闭、清就绪、下次不续跑及历史不变。前 80 项为闭会话修复前阶段,不与定向次数累加。日志:[82 项最终输出](../.tmp/test-server-session-closed-82.log),只有既有 TestClient 弃用提示。
- 硬截止版完整隔离 Edge **57/57**,含旧 48、有界定位 6 及预算 3 组;报告:[完整浏览器回归](../.tmp/worker-regression-tdVx6A/report.json)。最后仅返回深拷贝修订后,受影响预算 **3/3**,含不可变断言和 4 个实际 Edge 中断场景(等待、字体截图、DOM 阻塞、正文/首批后评论截图),已有真实 PNG/正文保留、无迟到成功、资料可重开。报告:[最后预算目标](../.tmp/worker-regression-tk3yd6/report.json)。没有称最后修订后又完整跑 57 项,也不相加成 60。
- 硬截止修复后的完整 **PG + Edge API/UI** 通过:表单零滚动录制、重排后 3 次实际滚动并完成正文与有限首层评论;滚动预算/目标消失/重复均停止,失败点击和正文请求为 0;旧七步可选且不暗加定位、摘要/105 秒预算、历史/hash/刷新/重启通过。最终保存 4 条合成阅读(完成 1、失败 3),`received_writes=0`、`errors=[]`。候选框连续 5 次宽度稳定、页面无横向溢出。报告:[最终界面验收](../.tmp/reading-seek-acceptance-1792831062508/summary.json)。此前两轮布局失败与修复前通过报告保留;最后深拷贝后未重复完整 UI,使用上述受影响目标验证。
- 最终 UI 类型检查及生产构建通过,只有既有包体提示;随后仅验收脚本加几何断言与 worker/API 修复,UI 无再变更。语法、本地文档链接及差异检查通过;图解 8 页无脚本或几何问题,报告:[图解检查](../.tmp/plan-qa/checks.json)。本轮未改 schema,未重跑迁移或检索扩展;没有 macOS、模型、正式模式新样本、商家发布或写操作验收。
涉及范围:worker/动作合同与回归、后端学习/阅读契约及测试(含 `test_budget_closed.py`)、动作表单/内容初筛/类型、新 `scripts/test-reading-seek.mjs` 及命令入口,现有 README、整体方案、图解和本进度。原 A2A 工程未改,共享工作区已有改动保留。
未完成与下一步:按整体方案第 14.2 节补阶段耗时与读取/取证成本、媒体评论类型和新候选验证,再接模型需求判断。定位已能到达该对象,不代表第二篇评论已完成;真实空态、登录失效、更多范围、独立读回、账号后续反馈、双端与正式交付仍未完成。
结束检查:API/前端代理 health 正常,前端首页 200,PostgreSQL;最后专用浏览器已按预算关闭,任务保持暂停,未自动继续。服务依赖本机开发进程,不代表永久在线。提交/推送均未执行;报告、平台证据和资料目录属于忽略的本机资产,不随版本库分发。
## 2026-10-24-14:显式媒体评论、阶段耗时与限定目标检查,真实两篇完成
目标:补纯图片评论的显式内容合同,定位读取/取证成本,并在已有预算和对象核对下验证新的有限范围;不改写旧文字候选或失败。
工程完成:
- 新字段 `source:"content"` 保持 `required:true`,配置内容根及其相对文字、媒体 CSS,媒体上限 1–4。输出 `body:{kind,text,media,media_truncated}`,明确区分 `text / media / mixed`;无文字为 `null`,媒体只保存类型及相对定位。只认实际加载、可见的正文图像/视频,排除头像和链接媒体,不返回原媒体 URL、替代文字、文件或 OCR 结果。无真实内容、加载失败、敏感或歧义仍失败;原文字必填、完整行和来源绑定语义不变。
- 安全 `read_hints` 提供实际媒体定位、类型和加载状态,不提供媒体地址。媒体证据复用真实批次截图,页面明确标为未解释;不能把媒体存在推断成无需求,也不能用媒体类型或 CSS 满足文字断言。七/八步阅读合同、动作表单、内容初筛与验证回看接通新类型。
- 新回放保存 `step_timings` 与 `verify_timing`,分别记录真实步骤状态、独占阶段、入口、总额及关闭耗时。未进入阶段及旧记录不补零;超时只保留实际前缀,返回值复制,迟到回调不能补成成功。后端严格校验步位/动作/状态、阶段前缀及耗时和,非法轨迹拒绝;阅读和验证界面可回看。
- 实测发现动作前重复整页候选发现成本高,改为在同一个 `describePage` 固定函数内,只查已观察定位或批次滚动根,复用原元信息、敏感判断和定位语义。普通定位须保持 canonical CSS,集合仍核对数量、类型及代表对象;最新观察、动态唯一匹配、固定对象、来源和请求检查保留。每步后及每批仍完整观察、遮罩并生成 PNG;清单、请求策略、单步/总额及 RPC 预算均未增加。无数据库 schema 或迁移变化。
真实平台事实:
- 重开同资料仍为可见页面检测 `logged_in`,沿用维护者此前明确确认的账号。独立探查任务 `learn_b16ed35d86524e1a929ff8b5c191f4d2` 正常搜索并进入原第二篇后,评论容器明确滚动 **480 像素一次**,实际观察并提取到 1 条纯图片评论。探查保留 **9 步、21 份观察、无候选**:[图片结构探查](../.tmp/xhs-media-probe-content.json)。没有从接口或媒体文件推断内容。
- 首次干净录制 `learn_1e35c8cb0f824d45ac45e0d34a1218f5` 的评论阶段先得到一批 3 条,随后 `STALE_TARGET`;实际截图出现详情关闭过渡,最终回到搜索页。同次有 1 条 collect POST 被阻止,但证据不足以确定关闭原因,未据此扩大网络策略或归因给平台/人工。保留 **7 个成功步骤、19 份观察和失败批次,无候选**:[不完整录制](../.tmp/xhs-media-candidate-failure.json)。另建任务录制,原失败未覆盖。
- 新任务 `learn_b24e405266144037b506d63cb97a1ce8` 录完八步,冻结 **`candidate_9d11e4266ec24f3e89b0b82e49b9ff9d`**,摘要前缀 **`558555f4d3f2`**,静态通过。依据实际图片位置,新范围为 **首层最多 6 条、每批 480 像素、含首批最多 3 批、15 秒批次预算**;搜索定位仍每次 320 像素、最多 5 次、10 秒,总预算 100 秒。录制得到 5 条文字和 1 条图片、2 批;原 5 条/320 像素文字版本保持不变。
- 性能修订前,第二篇 `reading_6289d97eca864db8ad50ca4d1a782330` / `validation_6a62dbba43f54d6e8e79291365bc8cbf` 约 **100.6 秒(含后台保存)失败**,工作进程 100.012 秒,实际定位滚动 **2 次、0→320→640**。链接/页面 ID 和标题已正确,但第 7 步后置取证被硬截止中断,正文输出未返回,评论未执行;保留 7 份证据,关闭并暂停会话。`NOTE_BINDING_MISMATCH` 在此表示可用输出不足,不能解释为已点错编号。阶段显示当前检查合计 **41.437 秒**、后置取证 **42.927 秒**:[优化前阅读](../.tmp/xhs-media-before-target-check-reading.json)。同次关闭后的另一次阅读请求 `reading_92688f496b01428fb02af951904cdad4` 被 `browser_session_required` 拒绝,无验证、输出或证据,也保留为失败。
- 性能修订加载后,重开并确认同账号,**同一冻结候选**追加第二篇 `reading_b1f787aaa4334a5eabeb8b56bb95ecbf` / `validation_b3b21364e084402dbd46cf6d4169d5a3` 探索通过:工作进程 **46.039 秒**,含保存约 **47.1 秒**;1 篇正文、**6 条首层评论(5 文字、1 纯图片)**,2 批、重复 0、条数上限结束,11 份证据。当前检查合计 **0.199 秒**;后置取证 27.186 秒、批次取证 8.553 秒。实际批次 PNG 已人工查看,图片存在且完整;内容未解释。
- 同候选变参首篇 `reading_379e073f152648caae18b3daa2b610ea` / `validation_65f114ad964b4fb3b3f34710f46f1abc` 探索通过:工作进程 **48.761 秒**,含保存约 **50.0 秒**;1 篇正文、**6 条文字首层评论**,3 批、重复观察去掉 1 次、条数上限结束,12 份证据。两次追加探索的目标在当前结果中均为零滚动;此前同候选 2 次实际移动属于失败历史,不能据此称性能修订后已完成更多结果位置验收。两篇均核对链接、页面 ID、标题与两输出来源,`truncated:true`,未展开回复或读完全部评论。
- 最终该初筛 **9 条阅读历史**:本轮新增 2 完成、1 有完整验证的预算失败、1 未就绪拒绝,原 5 条逐字读回不变。新任务 **51 份观察、8 步、1 候选、4 验证**(静态、优化前探索失败及优化后两次探索通过)。原搜索/文字八步清单摘要、原初筛、5 条阅读及 3 条旧文字八步验证、新候选冻结清单摘要均不变:[实际最终摘要](../.tmp/xhs-media-final-summary.json)。新版本仍为 **experimental、published:false**;旧正式候选仍 `awaiting_observation`:[旧质量与真实截图索引](../.tmp/xhs-media-evidence-status.json)。没有根据时间经过或本轮成功自动补无异常反馈。
工程验证与边界:
- 后台完整 **87 passed、无跳过**,约 **384.3 秒**,包含 SQLite 和实际专用测试 PostgreSQL;覆盖新内容字段/轨迹清洗、旧合同、持久化及不可变记录:[87 项输出](../.tmp/test-server-content-timing-87.log)。之后仅增加入口、步骤和关闭的独占耗时总和校验,受影响 **3 passed、84 deselected、无跳过**,约 **45.0 秒**:[最终耗时目标](../.tmp/test-server-timing-exclusive-target.log)。未在该校验后重复全量,不相加为 90。只有既有 TestClient 弃用提示。
- 性能修订前 worker 单轮 **62/62**:[媒体与耗时阶段回归](../.tmp/worker-regression-IcEMUS/report.json)。限定检查后先 **9/9** 定向:[元信息与门禁目标](../.tmp/worker-regression-8nTVUB/report.json),随后最终单轮 **65/65**:[最终完整回归](../.tmp/worker-regression-xQ93Pe/report.json)。包含真实隔离 Edge 的元信息等价及禁止全页枚举夹具、canonical/敏感/固定根变化、零项等待、有界定位、媒体、原合同与硬截止;不是 65 个真实平台样本,也不与 62 或定向次数相加。
- 媒体 PG + Edge 完整 API/UI 验收先在耗时校验后通过:[前阶段验收](../.tmp/reading-media-acceptance-1792833328561/summary.json);性能修订后独立完整重跑通过:[最终界面验收](../.tmp/reading-media-acceptance-1792835480551/summary.json)。覆盖 `data-testid`/集合定位、7/8 步内容候选、文字/图片/混合和截断、实际 PNG、来源绑定、首层 3 条/2 批、阅读/验证耗时 UI、hash、历史及重启。旧 text 遇纯图片、真正空 content 仍部分失败并保留正文;4 条合成阅读为 2 完成/2 部分,`received_writes=0`、`errors=[]`。最早脚本因未切“验证记录”标签失败的报告保留,修脚本后才有上述完整结果,未放宽产品合同。
- 本轮 UI 类型检查与生产构建通过,之后仅脚本修正和 worker/API 受影响修订,UI 未再改动;没有重复构建。语法、文档链接及差异检查通过;更新图解 8 页无脚本/几何问题:[离线图解检查](../.tmp/plan-qa/checks.json)。迁移、检索扩展、macOS、模型准确率/费用、新候选正式模式、商家发布和写操作未执行。
涉及范围:worker/动作合同及媒体/元信息回归、后端学习/阅读契约与 `test_content_timing.py`、表单/类型/内容初筛/验证回看、新 `ExecutionTimings.tsx` 与 `scripts/test-reading-media.mjs`、命令入口,以及现有 README、工具说明、整体方案、图解和本进度。A2A 原工程保持只读,共享工作区原有改动保留。
未完成与下一步:按整体方案第 14.2 节接可配置模型,先用真实可用文字区分需求与信息不足,媒体不解释;结合人工样本核对误判漏判及成本。真实混合/视频评论、更多位置和异常分支仍未学习,有限两篇通过不代表所有任务稳定或账号不会收到后续提醒;原正式候选仍待到期后的实际反馈,独立读回、双端与发布未完成。
结束检查:更新服务已加载,API 与前端代理 health 正常、前端首页 200,数据库为 PostgreSQL;当前专用会话为 ready / logged_in,停留最后首篇阅读,没有自动继续任务。服务依赖本机开发进程,不代表永久在线。
提交/推送:本轮均未执行。测试报告、平台证据和账号资料保留在本机忽略目录,不随仓库分发。
## 2026-10-24-15:可配置 DeepSeek、主备 Key 与独立装修需求分析
目标:按用户授权只读参考 `browser_use` 模型配置,先以最新 Flash 建立文字需求判断和用量基线,接入已有阅读,不重新操作平台;型号可配置,主备与模型选择分别管理。
配置核对与选择:
- 参考工程 `.env` 使用官方 DeepSeek、`deepseek-flash`,主 Key 与备用 Key 均存在且值不同,另一个 Hub 配置重复主 Key,并非第三个独立备用。只核对环境与源码,未查参考数据库,不能声称其运行配置未被后台覆盖,也未验证账户是否独立。原工程不修改。
- 原工程主要在余额不足时切备用。本项目实现同提供商/型号的有限 Key 切换,不引入其完整 Browser Use 模型恢复架构,不因为模型失败重放浏览器。两个 Key 已按授权导入本项目忽略的本机配置,未写入源码、前端或文档,未打印密钥值;真实 Key 不随仓库分发。
- 按本日核对的 [官方型号与价格说明](https://api-docs.deepseek.com/quick_start/pricing/),`deepseek-flash` 对应 V4.1-Flash-1017,旧 V4 Flash 已转新版,不能凭填旧名称认定调用旧模型。首轮选 Flash、关闭思考,按实际文字判断质量/每任务用量决定后续型号;没有执行 4.0 与新版对比,也不认定版本旧就更便宜。真实响应只返回 `deepseek-flash` 别名,未取得独立修订号,不将官网映射冒充逐次响应的精确版本。
工程完成:
- 新增服务端 `ModelConfig / ModelClient` 和需求分析服务,配置仅由 `ASSISTANT_MODEL_*` 环境读取,界面只展示安全状态、型号、去重后的主备槽位及限值。`model_configured` 与“真实调用成功”分别表示,旧 health/readings/discovery 的 `model_connected:false` 不被改写为历史调用过。
- 复用 OpenAI-compatible Chat Completions 的 JSON 输出,默认非思考、最多 4096 输出 Token,可配置且上限 8192。单请求最多 30 秒、合计最多 60 秒;最多两个不同 Key。仅 401/402/429、5xx、网络及超时可转备用;400/重定向、响应过大、截断、结构或业务依据失败不切换。禁跟重定向,响应上限 262,144 字节,不保存原始提供商错误或思考内容。
- 模型输入只取已绑定阅读的文字与临时 `source_ref`,不发作者、真实笔记/评论 ID、来源 URL、媒体 CSS/图像或凭据。最多 21 个来源、16,000 字,超限 422 且不调用,不自动截断。有正文的有效 partial 可分析,failed/无正文/来源核对未通过拒绝。纯媒体不发模型,由程序补信息不足、媒体未解释。
- 结果固定为明确需求、疑似需求、普通讨论、信息不足;逐源核对覆盖、唯一引用、逐字证据,装修阶段/地区/预算的值须包含在本源证据中。额外联系人等字段、跨来源引用、编造证据或不合法分类失败。身份始终未确认,缺失项由程序枚举,不让模型补人群画像。
- `analysis_runs` 为独立不可变事实,SQLite/PG schema 7,关联阅读摘要、配置摘要、提示/结果版本、来源、主备尝试、用量、失败及未知费用。只追加,不改原初筛/阅读/候选;迁移兼容旧库无分析表,按依赖在阅读后复制,保持整体回滚及非空目标拒绝。开发数据库仅启动时增表,未执行 SQLite 数据迁移。
- 新增安全状态、分析创建/列表/详情四类 API,沿用鉴权和 CSRF。相同阅读/配置/提示与结果版本的完成记录直接复用;Key 轮换不改变结果缓存,进行中 409,失败不自动再调用。后台阅读详情展示逐项原文/依据/缺失、媒体未解释、主备、已返回 Token、失败和历史;修复新卡片 grid 被表格持续撑宽导致按钮不稳定的问题。
- 边界复审发现深层 JSON 可抛 `RecursionError` 而不留失败,已转为安全格式错误,wire 与内容两层均覆盖;最终又收窄密钥配置为可见 ASCII,中文/emoji 坏配置返回未配置、零调用,避免请求头编码异常。未修改正常 ASCII Key 的调用语义。
真实模型与质量观察:
- 未搜索或重新读平台,直接分析上一轮两条 completed 阅读,原初筛及全部 **9 条阅读**、冻结候选清单/摘要逐字读回不变。v1 两条分析结构和依据校验通过、主 Key 各一次 HTTP 200,约 1.6–1.7 秒,分别 696/880 Token;人工抽查发现把询问他人地区/装修进展和推荐设计师误判为疑似需求,不能因接口成功就认定模型质量通过。
- 保留 v1,提示修订为 **`renovation-demand-v2`**:明确判断发言者自身需求、评论不能继承笔记作者需求,并补询问/推荐反例。独立开发者标注合成集 **9 项与标签一致**:模型判断 8 段文字,另 1 条纯媒体由程序标信息不足;含自身需求、询问他人、推荐、建议、已完工与短文字不足。仅 1 次官方模型请求、1178 Token;不是 9 次 API 或真实客户准确率:[小样例核对](../.tmp/demand-eval-renovation-demand-v2.json)。
- v2 对原两条阅读各追加一次,未覆盖 v1。`analysis_360ac874ace0422189c288e79efd412b` 约 **1.703 秒**,输入 725、输出 221、总 **946 Token**,缓存命中 384;`analysis_1bb7d85b373040759a1b0e6df6ccb6a7` 约 **1.625 秒**,输入 818、输出 284、总 **1102 Token**,缓存命中 384。两次均主 Key 成功,响应别名 `deepseek-flash`,未实际触发备用。
- v2 两篇共 **14 项**:2 个笔记需求信号、1 条疑似评论、8 条普通讨论、3 条信息不足(含 1 条纯图片);13 段文字送模型,媒体不解释。此前“询问对方进展/推荐设计师”的误报已改为讨论;“半包”相关评论仍有建议或自身需求歧义,留待人工核对,不计为确认客户。地区/预算/阶段未据条件补值。真实业主、商机转化、漏判/误判率均未验收。
- 本轮真实模型调用共 **5 次**:v1 两次、v2 两次及合成样例一次,全部使用主 Key;4 条真实内容分析记录与旧事实均保留。同配置再次 POST 返回同一 v2 记录且逐字不变,未新增分析:[复用核对](../.tmp/demand-live-reuse.json)。汇总:[真实调用与历史核对](../.tmp/demand-live-summary.json)。Token 仅为已返回用量,未核对提供商实付账单,费用为 unknown;没有把备用 Key 配好等同于其额度/容灾已实测。
工程验证与阶段:
- 初期模型目标 **22 passed、87 deselected、无跳过**,SQLite 与实际专用 PostgreSQL,覆盖输入/归属/不可变/复用/坏依据/主备/超时/深层 JSON。schema 7 迁移隔离 **17/17**,17 个随机 schema 清理,含新分析数据顺序、旧库缺表、非空目标和失败回滚:[迁移回归](../.tmp/migration-regression-objtqyh7/report.json)。没有向开发库迁入测试数据。
- 首轮完整后台 **108 passed、1 failed、无跳过**,约 **387.4 秒**,仅旧 PG `TRUNCATE reading_runs` 因新外键在不可变触发器之前拒绝;数据未修改。按已有同类测试处理,只改断言用 `TRUNCATE reading_runs CASCADE` 使原事实保护触发,不扩大 Store 的数据库错误映射。原失败日志保留:[前阶段完整输出](../.tmp/test-server-model-full.log)。随后 v2 与旧/新不可变目标 **24 passed、85 deselected、无跳过**,约 32.2 秒:[最终受影响目标](../.tmp/test-server-model-target-fk-cascade.log)。
- v2 提示及 CASCADE 测试修正后的单轮完整后台 **109 passed、无跳过**,约 **432.3 秒**,包含 SQLite 与实际专用 PostgreSQL:[完整后台输出](../.tmp/test-server-model-full-final.log)。该轮在最后可见 ASCII Key 校验修改前启动;随后该输入校验的受影响目标 **1 passed、108 deselected、无跳过**,约 2.3 秒:[输入校验目标](../.tmp/test-server-model-ascii-env.log)。没有在该修改后重复全量,不相加为 110;仅既有 TestClient 弃用提示。
- 最终完整 **PG + Edge + 本机假模型** API/UI 单轮通过,保存 4 条分析(完成 2/失败 2)、6 次仅本机模型请求;覆盖正常、主失败/备成功、双失败、坏依据拒绝、纯/混合媒体、用量未知不补 0、同 ID 复用零新增、历史/hash/刷新及重启。分析阶段平台请求新增 **0**、写操作 **0**、`errors=[]`,原始提供商错误及假密钥未进入页面/记录/日志:[最终界面验收](../.tmp/demand-analysis-acceptance-1792844588112/summary.json)。此前脚本 schema 前缀和 grid 不稳定失败保留,修复后的前一通过轮与最后补用量/截图断言轮分别留存,不累计次数。
- 最终前端类型检查、生产构建、受限控制传输、语法与差异检查通过,构建仅既有 chunk 提示。现有图解 8 页无脚本/几何问题;实际 Key 对修改/新增源码与产物的精确匹配扫描为 0,`.env` 被 Git 忽略:[本机交付检查](../.tmp/demand-final-qa.json)。没有重跑未变的 worker 全套或检索扩展,未做 macOS、完整商家计量、模型对照、独立读回、新正式候选发布或任何外联写操作。
涉及范围:新增 `apps/server/model_client.py`、`analysis.py` 与 `tests/test_analysis.py`,后端 API/SQLite/PG/迁移及其测试、`ReadingDemandAnalysis.tsx`/阅读页/类型、新 `scripts/test-demand-analysis.mjs` 与命令、控制入口、`.env.example`、现有 README/工具说明/整体方案/图解/本进度。参考工程只读,共享工作区原有改动保留。
未完成与下一步:按整体方案第 14.2 节扩大人工标注,核对发言主体、商家推荐/建议与自身需求的歧义,比较候选型号的准确性、耗时与实际每任务成本,再形成带依据的线索;本轮两篇及 9 条基础样例不能替代业务评测。媒体语义、真实备用 Key 故障切换、完整费用、账号后续反馈、双端与正式发布仍未完成。
结束检查:最后 ASCII 校验修订已加载,本机前端 200、API/代理 health 正常,PostgreSQL,模型安全状态已配置;服务重启已关闭原平台浏览器,会话未自动恢复。重启后相同 v2 分析仍返回原 ID 和原记录,4 条分析、原 9 条阅读及候选摘要不变。内容分析和历史回看可在无平台浏览器时使用。提交/推送:本轮未执行,所有模型凭据、真实记录和临时报告保留本机忽略目录。
## 2026-10-24-16:“查看分析”显式打开详情侧栏
目标:修复用户截图中“查看分析”点击缺少反馈、无法找到逐项原文依据的问题。
实际完成:
- 核对原实现:历史加载默认选第一条,按钮只更新选中 ID;同条再次点击没有状态变化,其他条也只在长页面表格下方静默替换内容,且原文排在配置/用量/主备信息之后。此前指导继续向下寻找,未解决入口反馈问题。
- 在 `ReadingDemandAnalysis.tsx` 增加独立详情打开状态。历史按钮每次选定记录并打开页面级侧栏,同条关闭后可重开;创建或复用分析完成也直接打开。保留阅读/初筛归属过滤、请求代次及换阅读卸载逻辑,查看/关闭不请求新分析或修改历史。
- 侧栏优先显示状态、提示版本、时间和逐项需求/原文/依据;模型配置、Token、主备请求及摘要改为默认折叠。宽度取 `min(880px,100vw)`,保留可访问关闭名称和弹窗语义,关闭销毁内容后重开恢复首屏。
- 核对时本机 8810/5179 均无监听,已重新启动现有开发服务;未据此断言服务停止原因或将它当作原点击行为的唯一原因。更新模块实际由本机前端提供,API/代理 health 正常。
验证与证据:
- TypeScript 检查与生产构建通过,构建仅既有 chunk 提示;产品冻结后未再改代码。差异及脚本语法检查通过。
- 适配 `scripts/test-demand-analysis.mjs` 并完成单轮隔离 **PostgreSQL + Edge + 本机假模型** 验收:[最终报告](../.tmp/demand-analysis-acceptance-1792846679071/summary.json)。实际点击历史行按钮,确认正确记录的侧栏及原文进入视口;覆盖同条关闭重开、另一条/失败详情、创建/复用自动打开、刷新及重启后再从历史打开。关闭前后历史逐字相同,查看阶段模型请求不增加。
- 980×760 视口的侧栏边界为 x=100..980、y=0..760,原文与依据首屏可见,无横向溢出;已查看实际视口截图:[小窗口详情](../.tmp/demand-analysis-acceptance-1792846679071/demand-analysis-small-screen-visible-original.png)。整轮保留 4 条合成分析(完成 2/失败 2)、6 次仅本机模型请求;分析阶段平台请求新增 0、写操作 0、`errors=[]`,不代表真实模型或平台重新验证。
- 首轮脚本误将笔记原文按单独正文精确匹配,而服务既有原文为标题加正文,造成定位超时;产品当时已展示侧栏。失败证据保留在 `.tmp/demand-analysis-acceptance-1792846580423`,仅修脚本使用实际 source.text 后才有上述最终通过,未放宽产品或改写失败。
- 实际账本只读核对:原初筛、9 条阅读、4 条分析及候选清单/摘要不变,v1 分析仍逐字保留:[账本核对](../.tmp/demand-click-ledger.json)。本轮未调用真实模型、未操作平台浏览器,后端/schema/worker 均未变,未重复 109 项后台、worker 或迁移回归。
- README、整体方案第 14.2 节与现有图解已同步查看方式及人工标注未实现的边界;离线图解 8 页无脚本/几何问题,文档链接检查通过。
涉及文件:`apps/admin/src/components/ReadingDemandAnalysis.tsx`、`scripts/test-demand-analysis.mjs`,现有 README、整体方案、图解与本进度。保护共享工作区原有改动,参考工程、模型配置及真实资料未改。
未完成与下一步:仍按整体方案第 14.2 节推进人工标注、纠错与业务质量评测。侧栏用于查看已有分析,不等于已保存人工核验,也未新增确认客户或发布能力。
结束检查:本机前端可提供侧栏修订,API/前端代理 health 正常、前端首页 200、PostgreSQL;服务仍依赖本机开发进程。提交/推送:本轮未执行,截图和报告保存在忽略的本机目录。
## 2026-10-24-17:商家需求工作台与多维内容判断
目标:在学习后台验证“当前商家要找谁 → 已学链路取得内容 → 谁在表达什么需求 → 是否匹配及下一步建议”,形成未来桌面可接的轻量业务合同,不前置完整 A2A 调度或桌面工程。
实际完成:
- 新增 `BusinessBriefService` 及后台“商家需求 · 业务验证”入口,接解析、缺项、范围不支持与失败状态。平台、装修服务、目标业主、最多 3 个搜索词、地区和是否排除服务推广逐字段核对原文,不猜条件。维护者确认须显式提交全部字段,可保留地区未知;追加确认记录、父摘要和 `maintainer_edit`,不改草稿或伪造模型依据。
- SQLite/PG schema 8 新增不可变 `business_briefs`、父引用及复用索引;实际开发库仅启动增表,没有迁入测试数据。确认本身不调用模型;有效解析同输入/配置/版本复用,失败不自动重试。沿用已有服务端主备、超时与用量合同,不向前端暴露真实 Key。
- 新增 5 类商家需求 API 与 `briefs.list/get/create/confirm/discover` 受限维护入口,沿用鉴权、CSRF、归属核对。确认后的初筛只接候选和条数,由服务端取条件并执行第一个搜索词,不自动调度其余词、登录或切换账号。新初筛和阅读保存确认编号/摘要;原结构化入口和旧记录保留。
- 内容提示升为 `renovation-demand-v3`、结果 `demand-result-v2`。独立保存当前发言角色信号、多选表达、自身需求与业务相关性;“自己准备装修”可同时提问/求建议,服务方也可有自身需求,短问句不确认服务方。逐源引用校验,阶段、地区、预算仅取该发言者自身项目;媒体未解释。
- 分析支持同维护者确认条件,默认继承阅读绑定;旧阅读可显式选择条件,旧 `POST {}` 沿用原初筛条件并注明来源。上下文摘要参与复用,改条件不误用旧结果。匹配及建议由程序固定派生,地区未知/缺项目地/不同地名均保留待核;排除纯服务推广不屏蔽服务方自身需求或同行笔记下面的需求评论。建议只展示,不执行互动。
- 原详情侧栏新增条件快照、角色/表达依据、相关性、匹配理由及建议,兼容旧 v1/v2 历史,不补造旧维度。README、整体方案第 14.2 节和现有图解同步共享业务层与实施顺序。
真实模型与有限业务观察:
- 本机服务重启后,维护入口核对原初筛、**9 条阅读、4 条旧分析**及冻结候选,作为新增前基线。输入已讨论的装修找业主样例,实际解析一次主 Key HTTP 200,约 **0.985 秒、487 Token**,准确保留地区未知与推广排除待确认,状态 `needs_clarification`,未默认全国。
- 由本轮开发维护者执行测试确认:装修服务、目标业主、搜索装修、地区未知、不额外排除推广。保存独立确认版本;这是维护者测试条件,不能记作用户亲自操作确认或正式商业配置。确认未调用模型,未启动搜索/阅读浏览器。
- 在确认条件下对两条已有 completed 阅读各新增 v3 分析,主 Key 均 HTTP 200,约 **2.235 秒/1599 Token**、**4.250 秒/2399 Token**。首篇作者为自身明确需求并同时提问/求建议;短评论角色保留未知,半包相关句按建议/参与者处理,不能据此确认账号身份。第二篇推荐设计师为服务推荐信号而非评论者自身装修需求,其地区不当作本人项目地。地区未设,因此作者有需求也不判定地域匹配。分类仍需人工标注,不能凭两篇证明业务准确率。
- 本轮真实模型调用 **3 次**(解析 1、已有阅读分析 2),均主 Key,合计已返回 **4485 Token**,费用仍 unknown,未强制触发真实备用。重复分析返回同一记录且逐字不变;原初筛、9 条阅读、候选及 4 条旧分析全部不变,现在共 6 条分析。平台浏览器保持关闭,本轮真实平台动作与互动执行均为 0:[真实调用与不可变核对](../.tmp/business-live-summary.json)。
工程验证与证据:
- 分析模块纯函数/SQLite 定向 **46 passed、4 deselected**,商家需求定向 **8 passed**(含专用 PG),新增 API 桥接 SQLite 定向 **1 passed、1 deselected**;这些是阶段目标,不能与完整套件累加。
- 产品冻结后的单轮完整后台 **147 passed、无跳过**,约 **427.53 秒**,含 SQLite 与实际专用 PostgreSQL,覆盖新旧分析、商家条件、API 桥接、归属和不可变事实:[完整后台输出](../.tmp/test-server-business-full.log)。仅既有 TestClient 弃用提示;本轮未重复 worker 全量或旧需求分析独立端到端,不将之前次数相加。
- schema 8 独立 PG 迁移 **21/21**,21 个随机 schema 清理,覆盖草稿/确认自引用、精确 payload/顺序、旧库缺表、非空目标拒绝及父引用坏时整体回滚:[迁移报告](../.tmp/migration-regression-smupvvic/report.json)。未向开发库复制测试数据。
- 最终独立 **PostgreSQL + Edge + 本机假模型** 端到端通过:[业务验收](../.tmp/business-workbench-acceptance-1792849528526/summary.json)。实际 UI 覆盖解析/复用、原文缺项、显式补条件追加、桥接搜索及单篇阅读、条件引用传递、多轴分析、相同条件复用/不同条件新增、范围不支持/双 Key 失败、旧 v1/v2 查看、同条重开与重启不变。保存 5 条合成需求、2 条新分析及 2 条合成旧历史,6 次仅本机模型请求;解析/分析期间平台请求新增 0、写操作 0、`errors=[]`。
- 980×760 分析侧栏 x=100..980、y=0..760,横向溢出 0;已查看实际确认与小视口截图:[小窗口多轴详情](../.tmp/business-workbench-acceptance-1792849528526/analysis-small-screen.png)。确认截图显示维护者新增地区和原始输入分开,不将补充条件当作原文。
- 两次前序端到端脚本失败证据保留:`.tmp/business-workbench-acceptance-1792849373736` 使用 AntD 隐藏辅助 option 定位;`.tmp/business-workbench-acceptance-1792849428644` 未等待历史刷新结束就关闭 busy 侧栏。仅修脚本可见定位与就绪等待,未放宽产品。旧 `test-demand-analysis.mjs` 的假模型同步新合同并通过语法检查,本轮没有完整重跑该旧脚本。
- TypeScript 检查、生产构建及两个相关脚本语法通过;构建仅既有 chunk 提示。维护入口映射、路径校验、CSRF、无自动重试目标测试通过。离线图解 8 页无脚本/几何问题,链接检查通过。真实 Key 精确扫描工作区修改/新增文件与生产包无命中,`.env` 仍忽略;本机 API/前端代理 health 正常,首页 200。
涉及文件:新增 `apps/server/business_briefs.py`、`apps/admin/src/components/BusinessBriefPanel.tsx`、`scripts/test-business-workbench.mjs` 及目标测试;修改分析、主 API、初筛/阅读、存储/迁移、后台类型/页面/详情、维护控制入口及现有文档。保护共享工作区原改动,参考项目和真实模型配置未改。
未完成与下一步:按整体方案第 14.2 节保存人工核对/纠错及建立有限真实业务样本集,补地区和歧义例,再扩同行内容评论路径。当前查看不等于人工标注保存;未知地区、身份与内容质量不自动晋级。未新增真实平台搜索/阅读、正式发布、独立读回、桌面、macOS 或商业额度结算验收,原正式候选观察状态不因本轮模型分析而改为通过。
提交/推送:本轮未执行;模型凭据、真实账本、截图及临时报告保存在本机忽略目录。
## 2026-10-24-18:人工核对、纠错修订与样本统计
目标:完成上一阶段确定的人工核对保存,让维护者对少量真实样本显式判断;需要用户参与时给出具体入口和操作步骤,不由程序或 Codex 代写真实人工结论。
实际完成:
- 在分析详情新增醒目“人工核对”统计和每来源“核对此条”入口。核对侧栏保留本条原文、原模型五轴和人工历史,首次预填但不预选决策、也不自动保存。维护者可选择判断正确、需要修正、暂不能确定或当前文字不可核对;修正须改变至少一轴、填写说明和 1–3 条本来源逐字依据。无文字媒体只允许未判定状态,旧结果结构保持只读。
- 新增 `AnalysisReviewService`、四类核对/详情/统计 API 及 `reviews.list/create/summary/get` 受限维护操作。鉴权、CSRF、分析/来源归属、逐字引用、五轴一致性及既有地区条件由服务端核对。不能给缺少自身需求或地域不足的来源标成匹配,不接受联系方式、凭据或控制字符备注;无模型或浏览器调用。
- schema 9 的 `analysis_reviews` 保存 `analysis-review-v1`、原分析和来源摘要、原模型标签、维护者、人工标签、依据、说明和前版引用。SQLite/PG 阻止更新、删除及 PG 截断,首版/后继唯一约束配合事务最新版本比较;旧表单及并发失败返回 `409 REVIEW_STALE`,不覆盖前一版或自动重发。
- 核对结果与原分析分开,纠错或后续改为不确定均追加版本。统计每源最新版本的待核对、已确认、已纠错、有争议、文字不可核对,另计五轴差异。一致率分母只含已确认/已纠错,无已判定样本为 null;未核对、暂不能确定和媒体不算正确或错误。当前界面是可见模型建议的辅助核对,不能当作独立评测准确率、精确率或召回率。
- 前端防连续点击、卸载和来源切换错写;409 或网络结果未知时先刷新并要求关闭重开,不自动重试。明确 422 校验拒绝则显示安全校验原因,保留表单供修正后显式保存。保存成功、422 及 409 反馈通过独立状态容器和滚动进入当前侧栏视野,保留无障碍状态提示,避免长表单只看到禁用按钮而找不到原因。README、整体方案第 14.2 节和现有图解同步入口、记录语义及后续样本顺序。
工程验证与阶段证据:
- 核对服务 SQLite 定向 **6 passed、6 deselected**,PG 参数留给统一全套;覆盖修订链、归属、逐源依据、媒体/地区/标签限制、并发首版/后继单一成功、状态统计、原分析/阅读不变及实际重新打开存储:[定向输出](../.tmp/test-analysis-reviews-sqlite.log)。这些是阶段目标,不与完整套件累加。
- 后台产品及测试冻结后的单轮完整 **159 passed、无跳过**,约 **458.32 秒**,包含 SQLite 与实际专用 PostgreSQL;仅既有 TestClient 弃用提示:[完整后台输出](../.tmp/test-server-reviews-full.log)。没有重复 worker 全量或旧商家工作台完整浏览器套件,旧测试次数不累加为本轮结果。
- schema 9 独立迁移 **27/27**,清理 **25 个随机 PG schema**;包含修订自引用/精确 payload/顺序、旧库缺表、非空拒绝、坏前版整体回滚,以及 SQLite/PG 并发首版及后继唯一约束:[迁移报告](../.tmp/migration-regression-v_9twrcl/report.json)。开发库仅启动增表,没有迁入合成数据。
- 首轮迁移验证的旧 `TRUNCATE analysis_runs` 因新增外键在事实触发器前被 PG 关系依赖拒绝,数据未变;只将该迁移断言及后台同类测试改为 `TRUNCATE analysis_runs CASCADE` 以到达原不可变保护,未扩大数据库错误映射。原失败保留在 `.tmp/test-migration-reviews.log`。
- 最终单轮独立 **PostgreSQL + Edge + 本机假模型** 浏览器验收通过:[人工核对报告](../.tmp/analysis-review-acceptance-1792851620367/summary.json)。合成四来源与一条新版分析,实际 UI 完成四种决策、逐字纠错、防双击单 POST、422 展示安全原因且保留可编辑表单、追加修订、409 拒绝旧版本且须重开、旧结构只读与重启历史保存。成功追加 **7 条核对**,最终每源最新为确认 1、不确定 2、文字不可核对 1,已判定 1;历史修订不累加统计。原模型分析、阅读、初筛逐字不变,核对期间模型调用新增 0、平台请求新增 0、写操作 0、`errors=[]`。准备样本的模型为仅本机假服务,不是本轮真实提供商调用。
- 已查看纠错保存和 980×760 小视口实际截图,核对侧栏 x=220..980、y=0..760,原文和历史可见、横向溢出 0:[小视口核对](../.tmp/analysis-review-acceptance-1792851620367/review-small-screen-original.png)。测量仅取当前核对侧栏自身 wrapper,并等待动画结束及连续稳定帧,未用被推移的父分析侧栏冒充当前几何。成功、422 及 409 提示均另经实际视口裁剪断言,已查看最终校验和冲突反馈截图。
- 前两轮浏览器脚本失败证据保留:`.tmp/analysis-review-acceptance-1792850862545` 在纯媒体下拉渲染前读取全部选项,补可见就绪等待;`.tmp/analysis-review-acceptance-1792851118936` 小视口误取嵌套的父侧栏/未稳定几何,补自身对象及稳定帧测量。均未放宽最终边界断言。两轮之间另完成上述 422 可继续纠错的产品改进,最终验收包含该行为;未用前轮局部成功代替最终通过。
- 第三轮完整浏览器阶段在 `.tmp/analysis-review-acceptance-1792851302009` 已通过;之后只读复核发现长表单的 409 提示在上方屏外,阶段断言只验证 DOM,不能证明用户能看到反馈。补上述前端反馈滚动后才执行最终一轮;后台服务与测试未再改,159 项结果适用于该后台版本,没有为纯前端交互修订重复全量。
- TypeScript 检查、生产构建和脚本语法通过,构建仅既有 chunk 提示;维护控制入口目标回归通过。离线图解 8 页无脚本/几何问题,文档链接有效。代码、备注输入与统计语义经过交叉只读复核,代码审查不代替实际验收。
真实数据核对与待人工状态:
- 通过受限维护入口保存新增前基线,重启并加载新 API 后逐字读回:原初筛、**9 条阅读、6 条分析、2 条商家需求**、冻结候选均不变。两个新版分析各有 **7 项待核对、0 项已判定**,一致率为 null;旧结构不制造可编辑样本或待办:[只读账本核对](../.tmp/review-live-summary.json)。
- 本轮真实模型调用、真实平台动作和真实人工标注写入均为 **0**;没有把之前对话里的业务直觉或合成验收结果自动登记为人工结论,也没有写入账号观察/发布状态。
- 结束时本机 API/前端代理 health 正常、前端首页 200、PostgreSQL;真实模型 Key 对修改/新增文件和生产包精确扫描无命中,`.env` 仍忽略。服务依赖当前本机开发进程,不据本次在线承诺永久可访问。
- 当前由用户先核对第一篇的正文、首层评论 1 和 2。入口为当前阅读页面“装修需求判断”中最新分析的“查看分析”,逐条点“核对此条”;同意全部五轴选判断正确,不同意选需要修正并填依据,不能确定选暂不能确定并说明原因,再显式保存。用户实际保存后再根据记录继续质量改进,不能把入口已做好记作业务标注已完成。
涉及文件:新增 `apps/server/analysis_reviews.py`、`apps/server/tests/test_analysis_reviews.py`、`apps/admin/src/components/AnalysisReviewPanel.tsx`、`scripts/test-analysis-review.mjs`;修改 API、存储/迁移、旧不可变测试、后台类型/分析详情、维护控制入口、package 和既有文档。共享工作区原改动及参考项目保留,真实模型配置未改。
未完成与下一步:按整体方案第 14.2 节等待实际少量人工核对,再补地区、歧义和同行评论需求样本,建立独立标注集后评估误判漏判。当前没有自动重训、批量纠错、完整评测看板、真实媒体理解或正式客户确认;未新增平台链路、独立读回、桌面/macOS、商业费用或发布验收。
提交/推送:本轮未执行;真实账本、配置、截图与报告保留本机忽略目录。
## 2026-10-24-19:首批真实样本逐条人工核对
目标:将用户在对话中明确确认的具体样本判断,通过既有核对入口代录;逐条推进,不将一般业务讨论当作其他来源的人工结论。
实际完成:用户确认首篇正文为作者自身准备装修、同时提问/求建议、疑似需求方且与装修服务相关;地区未知,匹配仍待核。通过 `reviews.create` 保存 1 条 `confirmed`,备注明确“用户在对话中同意,由 Codex 代录”,附本篇逐字原文依据。仅对应首篇 `note`,未保存评论 1/2 或其他样本,不确认账号身份、地域或实际客户。
验证:实际 API 新增后按编号读回一致;原分析与既有核对保持不变。首篇统计为 7 个来源、已核对/已判定 1、待核对 6;该单条标注与模型一致,不能推断整体准确率。原文和下一条评论由既有分析读取,没有重新调用模型、读取平台或执行互动:[代录与读回核对](../.tmp/user-note-review-summary.json)。本轮无应用代码变更,未重复后台、浏览器或迁移回归。
后续实际核对:用户同意首条评论为询问地区、角色及自身需求不明、暂不能列为意向客户。追加 1 条 `corrected`,仅将原模型的表达不明改为询问;角色、自身需求、相关性与匹配继续保留未知/不足,不继承笔记作者需求。备注保留用户对话确认及 Codex 代录来源,原正文核对与模型分析逐字不变:[评论 1 代录核对](../.tmp/user-comment1-review-summary.json)。首篇当前为已核对/已判定 2(确认 1、纠错 1)、待核对 5;该纠错仅为表达标签,不是确认客户或整体模型准确率。没有调用模型或操作平台,无应用代码变更及新增回归。
首批核对完成:用户对第二条评论选择 C(看不出来,需要更多上下文),追加 `uncertain`、`labels:null`,注明用户选择及 Codex 代录。没有把它强分为建议、服务招揽或自身需求,也不计为模型对错。按编号读回与历史对照通过,前两条核对和原分析不变;首篇 7 个来源中已核对 3、已判定 2(确认 1、纠错 1)、不确定 1、待核对 4:[首批三项汇总](../.tmp/user-first-batch-review-summary.json)。本次无模型/平台调用、无应用代码变更或回归重跑。
按整体方案第 14.2 节保留这三项为有限质量对照,随后再补地区、歧义及更多独立样本。不根据两项已判定样本直接修改默认模型或宣称准确率,未改变模型提示或旧结果。涉及文档:本进度与整体方案的样本状态;实际记录仍在本机 PostgreSQL。
提交/推送:未执行;私有记录及核对报告仍在本机忽略目录。
## 2026-10-24-20:案例评论分支的真实验证准备
目标:按整体方案第 14.2 节,继续验证“案例或服务展示内容 → 评论者自身需求”,补足目前只有业主自身发文的样本范围。
实际完成:通过受限维护入口核对现有搜索四步候选、正文/首层评论八步候选、任务及初筛历史;两候选仍为本机维护者探索、未发布,清单和摘要未改。旧 4 条初筛中,两轮“装修案例”均未保留笔记;两条已有有效阅读属于业主表达自身需求,不能替代案例评论分支。只读复核发现旧案例搜索有标题缺少装修词的候选被规则排除;其中历史来源不符项仍保持无效,不改为可读对象。没有根据标题推断作者是商家或评论者是客户:[本轮准备核对](../.tmp/peer-branch-inspection.json)。
已重新打开既有搜索任务的专用小红书窗口,可见页面检测为 `logged_in`,登录态仍在,无需重新扫码。当前状态为 `awaiting_user / confirmation_required`;已请用户确认当前窗口账号,尚未代填人工确认,也未运行新搜索、读取正文评论或调用模型:[窗口检测状态](../.tmp/peer-branch-current-session.json)。搜索与详情任务使用同一本地账号资料,后续仍按既有会话互斥和当前账号确认执行。
涉及文件:本进度与整体方案第 14.2 节,细化本分支样本范围和通过依据;没有应用代码变更、候选修订、真实人工核对新增或互动写操作。后台 health 实际正常、PostgreSQL;既有回归未因本次准备重复运行,不将此前 159 项计为本轮新验证。
未完成与下一步:等待当前窗口账号确认后,继续有限搜索;优先使用更明确的案例搜索词,若标题规则仍没有保留可读对象,先保留真实失败及漏候选事实,再决定最小筛选修订,不绕过来源绑定。正文须有案例或服务展示依据,评论须各自表达自身需求;未找到符合条件的评论则如实记录,不能因执行完成宣布业务质量通过。详情读取、模型分析和本分支人工核对尚未执行。
提交/推送:本轮未执行;临时工具、真实记录和报告仍保留在本机忽略目录。
## 2026-10-24-21:案例内容搜索通过,等待详情窗口确认
目标:接用户对当前专用账号的明确确认,继续整体方案第 14.2 节的案例评论分支真实样本验证。
实际完成:根据用户本轮对话确认,通过 `browser.ready` 确认既有搜索任务,再由冻结四步候选执行一次“装修公司案例”搜索。新增 `discovery_40adbe10d64f4542b801562e4afb73bc`,关联 `validation_e3877802b61b42f59a4b1b4c1ddc5bd7`,探索验证通过,约 24.075 秒,读到 5 个来源合格的结果,规则保留其中 2 篇 `related_content`。未将标题推定为已确认商家、案例或客户,也没有把未入选的三条等同于真实无关内容:[搜索与断言汇总](../.tmp/peer-branch-search-summary.json)。
验证与会话状态:原 4 条初筛逐字读回不变,搜索候选摘要仍为原冻结值。搜索和详情任务确为同一本地账号资料;当前实现按 task 固定会话和候选执行,不支持跨 task 借用 ready 或交接。因此按既有入口关闭搜索窗口、打开详情任务,检测为 `logged_in`、`confirmation_required`,已请用户确认该窗口账号;没有替用户确认新会话,也未绕过 `ACCOUNT_BUSY` 或 ready 守卫:[详情窗口检测](../.tmp/peer-branch-current-session.json)。
涉及文件:仅本进度及忽略目录中的本轮受限控制工具和证据;没有应用代码、候选、模型配置或提示变更。模型调用新增 0,正文/评论阅读新增 0,人工核对新增 0,无关注、私信或评论写入。临时工具语法和本进度差异检查通过;没有重跑未修改的应用、worker、迁移或浏览器回归,不以既有测试次数冒充本轮结果。
未完成与下一步:详情窗口账号确认后,使用同一冻结八步候选分别读取所保留的两篇笔记,按实际正文及评论判断是否覆盖案例/服务展示与评论者自身需求;随后仅分析已核对来源的已有文字。当前仅完成搜索,不是案例评论分支业务质量通过、客户确认、账号后续观察或正式发布。
提交/推送:本轮未执行;私有记录和临时证据仍在本机忽略目录。
## 2026-10-24-22:新搜索页读取失败及整页有界定位修订
目标:接用户对详情窗口账号的明确确认,继续案例评论分支;对真实页面变化修订学习能力,保留旧候选、失败与验收边界。
真实平台结果:详情会话按本轮用户确认进入 ready,对首篇追加 `reading_64546cf8ec61415192a9668e57600e8f`,关联 `validation_d652ab58cb2248adbb8b1e2504308f1f`。约 **24.140 秒**,填写、回车、集合等待通过,第 4 步旧滚动根未观察到而失败,错误码 `UNOBSERVED_SELECTOR / NOTE_BINDING_MISMATCH`。未进入点击、正文或评论提取,来源绑定未建立,不能将后一码解释成已点开错误笔记。当前为新搜索页结构,已观察普通内容根不再是旧内部滚动容器;当前截图及新观察保留。第二篇未因同一已知缺口重复尝试,模型调用新增 0、人工标注新增 0,无关注、私信或评论写操作:[失败及实际执行前缀](../.tmp/peer-branch-reading-validation-1.json)。原冻结候选摘要读回不变。
实际修订:
- 新增可选 `scroll_scope:"viewport"`,仅用于 `scroll + until_target`;目标范围仍是已观察、唯一、非敏感的普通容器,body/html 不能作根。固定普通根及页面来源,同时固定实际文档滚动对象;按原次数、距离、时间预算记录真实整页位移,目标在根后代中精确匹配。来源/根/文档滚动对象变化、歧义、编号不符、遮挡、未知写请求及边界/预算失败仍停止。缺省容器模式不自动切换。
- `candidates.create` 新增可选有序 `step_ids`,只冻结本任务已有的 1–30 个唯一真实成功步骤及完整证据;显式路径保存 `source_step_ids`,完整性检查按相同任务原步骤内容核对。未知、异任务、空或重复编号 422 且不创建候选;原全步骤默认行为兼容保留。没有客户端原始清单或步骤覆盖,也未修改旧步骤、候选或数据库 schema。
- 录制表单新增整页定位选项,历史摘要显示“整页”;动作切换时不向读取泄漏滚动字段。选步组合须独立静态检查、阅读合同核对与真实回放,不继承旧成功。当前证据证明单步来源闭合,不证明重新组合后的时序已通过。
- 同步 README、维护入口、整体方案第 14.2 节及现有图解。新事实改变原直接读取两篇的顺序:先完成该页面模式修订与新动作取证,再按原有范围复验,不能通过修改旧清单或增大预算记作成功。
工程验证:
- 最终冻结后的单轮完整后台 **164 passed、无跳过**,约 **489.51 秒**,包含 SQLite 与实际专用 PostgreSQL,只有既有 TestClient 弃用提示:[完整后台回归](../.tmp/test-server-viewport-full.log)。此前 SQLite 目标 9 项和数值边界目标 1 项为前阶段,不与完整结果累加。
- 最终完整工作进程 **69/69**,隔离本机 Edge 页面;包含整页实际移动/零移动、根外同名、消失、边界/超时、歧义/遮挡、来源及根/滚动对象替换、未知写请求、八步来源绑定和错 ID 零移动/零打开,以及整页 DOM 阻塞后的硬截止、真实前缀/PNG、关闭和迟到结果不变。旧容器、媒体、元信息和 EOF 继续覆盖:[完整 worker 回归](../.tmp/worker-regression-tA2yJ5/report.json)。前阶段 7/7、3/3 和预算 3/3 不累加为本轮总数。
- 前端类型检查及生产构建通过,构建仅既有 chunk 提示。现有离线图解 8 页无脚本错误或节点文字溢出,已查看更新的学习发布页截图;当时文档本地链接 105 项有效:[图解检查](../.tmp/viewport-doc-check.json)。
- 最终单轮隔离 **PostgreSQL + Edge + 本机演示页面 API/UI** 验收通过:[最终界面验收](../.tmp/learning-acceptance-1792855829497/summary.json)。实际 UI 录制整页模式,真实位移 **0→320→640**,随后读取目标;切换读取不携带滚动字段。按两条真实步骤编号冻结新候选、静态通过,再从入口独立回放定位与读取通过;原搜索、动态对象、批次、明确空态、正式模式入口及历史/重启检查继续覆盖,`errors=[]`。这些是本机合成样本,不是本轮小红书正文或评论读取成功。
- 前两轮界面验收失败保留:`.tmp/learning-acceptance-1792855305036` 的演示页首屏没有建立目标集合观察,校验 422 拒绝,补首屏同集合成员并改用实际观察返回的 CSS;`.tmp/learning-acceptance-1792855586045` 仅选择滚动一步,固定校验因没有读取输出拒绝,补实际读取后选两步并独立回放。均为夹具/验收准备不足,没有放宽产品校验;不将前轮局部通过替代最终通过。
涉及范围:后端动作/候选输入、学习与阅读合同及新目标测试;worker 契约、执行和本机回归;后台动作类型、表单和摘要;本机界面验收夹具及既有文档。参考工程与共享工作区原有改动保留。模型配置、提示、真实原文和人工核对结论未改。
加载与当前状态:已通过既有入口关闭旧详情窗口,再重启本任务持有的开发服务加载修订。实际 API/前端代理 health 正常、首页 200,PostgreSQL;修改/新增源码 82 份及构建产物 3 份对实际模型 Key 精确扫描 0 命中,`.env` 仍被忽略,最终本地文档链接 112 项有效:[本机交付核对](../.tmp/viewport-final-qa.json)。未重复迁移、检索扩展、模型评测或 macOS 验收。
为新页面另建干净的 `learn_dc9059a8f4fb4ab5ba8e985da98b034c`(整页定位与案例评论读取),沿用原维护者、平台及本地账号资料,样本参数取本次已保留笔记,不修改原任务参数或步骤。新窗口检测为已登录、`confirmation_required`,已请用户确认更新后打开的窗口,尚未代填新会话确认、录制新真实动作或创建真实修订候选:[新学习会话状态](../.tmp/peer-branch-relearn-session.json)。
未完成与下一步:按整体方案第 14.2 节,在该会话确认后重新观察和记录页面模式,冻结新候选并独立校验/有限回放;然后继续两篇来源核对和已有文字分析。新页面若目标重排、消失或预算内未找到仍停止并保留失败;当前没有真实案例正文/评论需求样本或业务质量通过结论。新候选真实平台复验、账号延后反馈、独立业务读回、双端交付与正式发布均未完成。
提交/推送:本轮未执行;真实记录、账号资料及测试报告仍保留本机忽略目录。
## 2026-10-25-01:整页链路录制、分页阶段策略与新八步候选
目标:接用户“账号正确,继续学习”的确认,在整体方案第 14.2 节继续案例评论分支,重新取证并验证搜索到正文/首层评论。
真实录制:当前学习任务按本轮对话确认进入 ready。填写、回车和集合等待后,首次整页定位实际移动 **0→320**,页面自然产生搜索分页请求,被本地通用只读策略拒绝,错误 `WRITE_REQUEST_BLOCKED`;失败尝试及前后截图保留,不计成功步骤,不据此认定平台异常提醒或账号降权。核对失败后实际页面及新增观察,目标已完整可见,再记录零移动定位。随后唯一链接核对来源编号、点击、等待及正文提取成功;正文是服务提供表达,不能据此认定作者真实身份。
本任务共录制 11 条成功步骤,其中包含额外来源核对与两次用于观察的评论容器滚动。末次评论提取取得 **2 条完整文字、2 批**,`coverage:bounded / truncated:true / stop_reason:time_budget`;不完整行跳过计数为 5,属于累计观察次数,不等于另有 5 条唯一漏读。只处理首层文字,作者子回复未混入,本新合同没有媒体覆盖:[评论提取及批次证据](../.tmp/peer-relearn-action-11.json)。询问联系方式不足以确认评论者自身装修需求或项目地区,未将页面全量文本补入该输出。
新版本:从真实步骤 **1、2、3、4、6、7、8、11** 有序冻结 `candidate_1500902c9a0e4a2090c9a3e524ccfe72`,摘要 `7bf35005d0f9c5a169d210c7053696e0e3b0eb05e40557f6f8518f08ca30008b`,独立静态验证 `validation_74dc312ff4d2414281f0317b10ae3ee4` 通过:[冻结候选](../.tmp/peer-relearn-candidate.json)、[静态检查](../.tmp/peer-relearn-candidate-check.json)。没有修改旧候选。新组合不含录制中的两次额外评论滚动,须从入口独立验证其前置状态;零移动录制及静态通过不能证明真实分页或完整重放通过。
实际修复:新增 `xhs-search-scroll-experimental-v1`,仅对官网精确搜索页、已观察唯一普通根、显式整页文字目标定位生效;私有绑定当前完整页面地址与签发时间、15 秒内、当前主框架,只允许原有 collect、APM fetch 和精确搜索分页 xhr 三条规则,动作结束即撤销。没有放宽其他搜索/笔记/通用读取阶段,不主动请求接口,不涉及绕过验证。后端清洗只保留该版本对应的三个规则标签,不落盘原始请求头、正文或完整查询。涉及 `tools/learning/platform-policy.mjs`、worker 接线、后端 `worker.py` 及目标测试;同步整体方案、维护入口和原图解说明。共享工作区其他改动保留。
本轮工程验证:纯策略 **650 断言通过、真实请求 0**;隔离本机 Edge 整页目标 **3/3**:[目标报告](../.tmp/worker-regression-533s9y/report.json);后端安全元信息纯清洗 **2 passed、12 deselected**,约 2.19 秒,仅既有 TestClient 提示:[输出](../.tmp/test-search-scroll-metadata.log)。Python 语法与局部差异检查通过。上一阶段 164 项后台、69 项 worker、迁移、前端构建及双端未在本轮重跑,不累加为本轮计数。
加载状态:通过维护入口关闭旧会话,再停止并重启本任务持有的服务加载修复;同一学习任务和账号资料重新打开,仍检测为 `logged_in / confirmation_required`,无需重新扫码。当时等待用户明确确认,未沿用旧窗口的 ready:[重开会话](../.tmp/peer-relearn-session-after-policy-update.json)。随后用户明确回复“账号正确,继续验证”,经维护入口确认后执行下述独立回放。没有关注、私信、评论写入。
独立回放结果:新增 `reading_c1a5a8401dd7426ea6f7316a8dd10587`,关联 `validation_9e7e55cd315441b7b164a6bdd3fcb098`。约 85.404 秒(工作进程内),搜索至正文前七步通过,整页目标已可见、实际零移动;链接编号、当前编号、标题与来源核对通过,保留正文 1 条。第八步评论提取失败,阅读为 **partial**、`comments:null`,不是确认空评论;没有把录制时两条评论补进业务阅读:[独立回放与断言](../.tmp/peer-relearn-reading-validation.json)、[读回汇总](../.tmp/peer-relearn-final-summary.json)。原候选摘要和本初筛此前 1 条失败阅读读回不变,真实分析新增 0、人工标注新增 0。
失败定位:本次仅一条已知 collect 遥测 POST/XHR 被阻止,发生于评论步骤开始约 22.5 秒后;此前同类型已有 `xhs-readonly-ui-experimental-v1` 允许标记。该步批次取证约 **20.397 秒**、实际执行约 2.479 秒、失败取证约 15.768 秒,整体 38.779 秒。与既有策略/批次 15 秒边界被截图跨越高度吻合,但日志未直接保存签发/到期及拒因,不能断言是唯一原因。不是新增分页请求规则缺失,也没有本次关注/私信/评论写证据;不扩规则、不延长 15 秒,不自动重试或继续第二篇。当前窗口仍已登录且 ready,原失败、实际批次截图及部分正文保留。
最终本机核对:API、前端代理及首页 200,PostgreSQL;修改/新增源码 82 份、既有构建产物 3 份对真实模型 Key 精确扫描 0 命中,`.env` 仍忽略:[核对报告](../.tmp/search-scroll-final-qa.json)。图解 8 页无脚本错误及节点溢出、本地链接 122 项有效,已查看当前真实失败截图和图解截图:[文档检查](../.tmp/search-scroll-doc-check.json)。构建产物扫描不等于本轮重建前端。
未完成与下一步:按整体方案第 14.2 节,优先核对并优化批次取证的实际成本,补齐 15 秒批次截止与请求策略的生命周期及真实部分结果回传,再对新修订有限复验;保持规则、来源、次数和总预算限制。尚未取得本分支可用业务评论,不调用模型冒充已分析评论,也不将服务正文当作客户需求。第二篇、本分支质量、真实分页移动、账号延后反馈、独立业务读回、桌面及 macOS 交付仍未完成。
提交/推送:本轮未执行;账号资料、真实原文、截图及临时报告仅在本机忽略目录。
## 2026-10-25-02:评论取证优化、批次硬截止与完成前缀保存
目标:按整体方案第 14.2 节修复上轮评论取证与 15 秒窗口的交叉问题,再复验同一候选;不延长窗口、扩大请求规则或修改旧失败。
实际完成:
- `describePage` 的单次同步 DOM 求值内增加节点样式、几何、敏感判断、可见性、定位辅助和两种原始文本遍历缓存;每次观察重新创建,不跨页面、滚动或调用。完整观察、全文/视口文字、筛选排序、上限、脱敏及截图掩码保持原语义,没有缩为只拍评论区域。
- 批次读取、滚动及取证纳入硬截止,不晚于已签发策略到期,最多 15 秒内预留最多 2 秒关闭。截止撤销策略/ready、关闭该浏览器上下文,返回 `BATCH_BUDGET`;总截止先到保留 `VERIFY_BUDGET`。截图完成前后均检查会话,阻止迟到描述/截图追加为成功。
- 每批字段、业务 ID 去重及计数先暂存;实际截图完成、来源/固定根/登录/请求复查及时间核验都通过后才提交。截止时仅保留已提交批次的深复制前缀及对应 PNG,标记截断与 `time_budget`,验证仍失败、业务阅读仍为部分完成;首批未完成不补评论。实际失败截图可保留,但其未核对字段不冒充完成结果。
- 截图等待期间若未知请求已被拦截再到截止,同步保留 `WRITE_REQUEST_BLOCKED + BATCH_BUDGET`,不提供评论前缀,避免预算错误掩盖请求失败。录制和试跑都只对真实 `session_closed:true` 承认关闭并撤销后台 ready,字符串或其他伪值不能关闭;不自动重试或恢复会话。
- 新增观察等价、批次截止和后台关闭/部分保存目标测试,同步维护入口、整体方案及原图解。数据库 schema、模型配置、提示及真实原文/人工结论未改;共享工作区其他改动保留。
工程验证:
- 本机 Edge **20/20 深等价比较**,包含完整观察、限定定位、遮挡、敏感祖先、样式/滚动/删除重建跨调用刷新、媒体事实、文字截断和输出上限:[等价报告](../.tmp/observation-cache-1792901272594/report.json)。合成大页观察首轮约 258→54 毫秒,仅为合成样本,不能据此承诺真实小红书耗时。一次扩测断言未归一化空格的前序失败保留,未因该失败修改产品比较结果。
- 最终复合边界修复后,单轮本机 Edge 批次目标 **12/12**:[截止报告](../.tmp/batch-deadline-JvRmJa/report.json)。实际挂起字体截图证明首批截止无评论、后批截止仅保留首批 2 条及真实 PNG,关闭后迟到回调不改变结果;总截止优先、来源/根变化、未知请求、未知请求与截图截止并发、资料重开及内部预算不超上限均覆盖。平台/模型调用 0、未知写请求到本机夹具 0。前序 11 项结果不累加;初轮夹具误用敏感 ID 的失败证据 `.tmp/batch-deadline-Q20GGy` 保留。
- 后台最终新文件单轮 **11 passed**、约 72.21 秒,SQLite、专用 PostgreSQL 和 RPC:[后台目标输出](../.tmp/test-server-batch-budget-closed-v3.log)。验证合法批次前缀、正文、来源、证据和计时保存为 partial;仅真实布尔关闭撤 ready;下次请求不自动调用 worker;原候选/初筛/阅读/验证逐字不变。前两轮扩展测试因夹具缺少搜索语义、额外要求候选状态暂停而失败的报告保留,只修测试准备/多余断言,未放宽产品。
- 本轮既有完整 worker **69/69**:[既有完整回归](../.tmp/worker-regression-ZDqvP2/report.json)。该轮在最终“未知请求与截止并发”补丁前启动;最终新增差异由上述 12 项另验,不冒称最终冻结后的一次全量,也不与各阶段计数累加。没有重跑未变的后台全量、数据库迁移、前端构建、检索扩展或 macOS 验收。
涉及文件:`tools/learning/browser-worker.mjs`、`apps/server/worker.py`、`apps/server/learning.py`,新增三个目标测试文件 `test-observation-cache.mjs`、`test-batch-deadline.mjs`、`test_batch_budget_closed.py`,及既有文档。Python/JS 语法和差异检查通过;无提交或推送。
加载与真实状态:经维护入口关闭原会话,重启本任务持有的服务加载修复;同一学习任务、同一账号资料重开,检测仍为 `logged_in / confirmation_required`,无需扫码,等待新窗口账号确认:[重开会话](../.tmp/peer-budget-session-after-budget-update.json)。尚未执行修复后的真实搜索/评论回放,新增业务阅读/模型分析/人工标注均为 0;上一轮部分阅读及其候选不变,没有关注、私信、回复或评论写入。
最终本机核对:API/前端代理正常、首页 200、PostgreSQL;修改/新增源码 85 份及既有构建产物 3 份对真实模型 Key 精确扫描 0 命中,`.env` 保持忽略:[核对报告](../.tmp/batch-budget-final-qa.json)。现有图解 8 页无脚本错误及节点溢出,文档本地链接检查通过:[图解检查](../.tmp/batch-budget-doc-check.json)。本轮没有重建前端;产物扫描不代表重新构建。新语法、差异与报告路径检查通过。
未完成与下一步:按整体方案第 14.2 节,在当前窗口确认后用同一冻结候选执行一次来源绑定阅读,比较真实批次与取证耗时,按实际完整/部分/失败保存;成功取得业务评论后才分析其文字,再决定第二篇。真实页面性能、案例评论分支业务质量、真实分页移动、账号延后反馈、独立读回、桌面及正式发布仍未通过。
提交/推送:未执行;真实账本、浏览器资料、原文、截图和报告继续留在本机忽略目录。
## 2026-10-25-03:修复后真实复验停在搜索等待,补前置诊断
目标:接用户“账号正确,继续复验”,按整体方案第 14.2 节对同一首篇、同一冻结八步候选执行一次来源绑定阅读,不改变已保留来源或旧失败。
真实结果:经维护入口确认当前窗口后,新增 `reading_a4ae225f4f9843319f3f5f9629bd56a1`,关联 `validation_8b468d05fda04eda846a02547101df7e`。工作进程约 **8.141 秒**、入口约 4.769 秒;填写和回车通过,第 3 步搜索结果集合等待失败。错误为 `WRITE_REQUEST_BLOCKED / NOTE_BINDING_MISMATCH`,后一码表示尚未建立来源绑定,不是已点开错误对象。实际未进入整页定位、点击、正文或评论,两个内容均为 null,不能调用模型:[本轮验证](../.tmp/peer-budget-reading-validation.json)、[读回汇总](../.tmp/peer-budget-final-summary.json)。
观察与边界:已完成两步的后置取证分别约 **304 / 250 毫秒**;这只是本样本已完成步骤,不把 8.141 秒与此前执行到正文后的 85.404 秒当作同范围性能比较。回车后观察尚无 `#global a.title` 集合,后来失败截图已有正常结果卡;截图可见结果不追溯改写失败,也不确认账号延后状态。当前失败有 collect、另一 APM 发送类型及安全状态请求被阻,只有安全请求摘要,无请求头/正文/凭据;不能据请求名字认定平台发出非真人提醒或账号降权,更不新增放行规则。
离线定位:等待步骤的 `observed` 固定取自该步前的最新观察。若该观察没有目标集合,`selectorObserved` 始终不满足,集合后来出现也不能建立现有只读策略;若旧观察已有集合而当前暂空,则后续非空才可能建立,二者不混同。此前先进入 automating 再尝试建策略,会在尚无可用策略时阻断页面自身辅助通信。新取证更快时暴露了原录制未覆盖的加载前置状态,不能用固定延迟或借用上一搜索权限掩盖。
本轮最小修复:新增 `preflightReadonlyWait`,仅官网 wait 在进入自动化前按原观察、实际普通根和原规则预检;无法建立现有策略时明确 `READONLY_WAIT_NOT_READY` 并保存失败证据,不执行自动化等待。敏感对象保持 `SENSITIVE_OUTPUT`,非官网示例和原 body 例外不扩展,策略版本、规则、窗口与安全请求限制不改。涉及 `tools/learning/browser-worker.mjs` 及独立目标测试;同步维护入口、整体方案与原图解,没有数据库或 UI 协议变更。
目标验证:独立 `test-wait-preflight.mjs` 单轮 **92 断言**通过,含 20 个官网元数据纯 helper 场景;仅原 collect xhr / APM fetch 允许,APM xhr、安全状态、搜索及未知请求继续拒绝,撤销/伪造及调用者状态不变。另一次真实本机 Edge 循环地址夹具从未观察到的零项集合等到自然出现 2 项,通过并保存实际 PNG;官网浏览器导航、真实平台/模型/API 调用均为 0,夹具只有 2 次 GET、写入 0:[目标报告](../.tmp/wait-preflight-DZvvCp/summary.json)。这是纯策略边界及本机等待兼容验证,不是官网等待前置的端到端或真实加载过渡已学会。语法和差异检查通过,未重跑前阶段完整 worker、后台、迁移或前端构建。
历史与当前状态:原候选摘要及本初筛此前两条失败/部分阅读读回不变,没有新增候选、录制步骤、模型分析或人工标注;第二篇未运行,无关注、私信、评论写入。当前专用窗口仍已登录且 ready。本轮前置修复尚未重启加载,避免为未完成的新加载过渡反复关闭窗口和要求账号确认;源码已修改不冒称当前进程已使用新检查。
本机收尾:API/前端代理正常、首页 200、PostgreSQL;修改/新增源码 86 份与既有产物 3 份对实际模型 Key 精确扫描 0 命中,`.env` 仍忽略:[核对报告](../.tmp/wait-preflight-final-qa.json)。图解 8 页无脚本错误及节点溢出、本地链接检查通过,已查看当前真实失败截图及更新图解:[文档检查](../.tmp/wait-preflight-doc-check.json)。旧构建产物仅扫描,未重复构建。
未完成与下一步:按整体方案第 14.2 节先依据实际回车后观察和结果出现后的证据,学习普通容器内加载过渡的前置及结束条件;需要新字段或范围时先定义来源、集合归属、根变更/超时中断及用例,再实现、冻结独立修订和有限回放。当前没有取得本分支可分析业务评论,不自动重试、跳过等待或扩大请求规则。真实评论修复效果、业务质量、真实分页移动、账号延后反馈、独立读回与交付仍未通过。
提交/推送:未执行;真实记录、原文和截图保留本机忽略目录。
## 2026-10-25-04:显式普通根范围等待、证据合同与隔离验证
目标:继续整体方案第 14.2 节,解决搜索回车后最新观察只有普通容器、结果集合尚未出现时的加载过渡;不改变旧候选、失败或请求规则。
实际完成:新增可选 `wait_scope`,限定可见且显式数量的集合等待。根须是最新观察的唯一、可见、非敏感普通读取容器;固定实际根对象及完整页面地址,只在根内查询后代,范围外同名对象不计数。目标可暂为零;根替换、来源变化、敏感/交互区域、超过100项及条件消失均停止。冻结引用实际根的观察证据,不补造缺失集合。旧未声明范围步骤及七/八步阅读合同保持兼容,无数据库 schema 变更。
执行层轮询、根/集合与登录检查纳入等待截止,最长15秒且不晚于原策略到期,在内部预留最多2秒关闭;到期撤销策略及 ready,返回 `WAIT_TIMEOUT`,实际关闭确认才报 `session_closed:true`。后置完整观察/PNG 在撤销自动化和策略后执行,保留原截图限制与外层总预算;总截止先到仍为 `VERIFY_BUDGET`。后置再次核对同一根及可见、视口内、非忙碌数量,变化不记成功。官网仍只用原 collect xhr / APM fetch 两条辅助规则,不允许 APM xhr、安全或搜索请求借用权限。
后台表单仅在可见集合等待显示可选范围,维护者显式选择,不默认代选;切换动作/状态/数量或最新观察根失效时清空,历史显示范围。服务端重新核对最新及实际动作前根,冻结根证据。涉及 `browser-worker.mjs`、`action-contract.mjs`、`learning_contracts.py`、`learning.py`、四个后台类型/表单/页面/摘要文件及两份新目标测试;同步整体方案、README、维护入口及既有图解。共享工作区原有改动保留。
最终单轮验证:
- 本机隔离 Edge **20/20 组、235 断言**:[执行层报告](../.tmp/scoped-wait-nOnfuj/report.json)。覆盖零项到集合、前缀/相对 CSS、后续读取、根外忽略、根/来源变化、敏感与数量、未知 POST、旧等待。实际挂起 DOM 返回 `WAIT_TIMEOUT` 并确认关闭;实际字体截图挂起由外层 `VERIFY_BUDGET` 中断,已得 PNG 和迟到不变性通过。官网仅纯元数据边界,平台导航/模型/应用 API 调用均为0,未知写请求到夹具0;不是真实小红书验收。
- 后台新目标 **14 passed、无跳过,91.64秒**:[后台输出](../.tmp/test-server-scoped-wait.log),包含 SQLite 和真实专用 PostgreSQL 随机隔离 schema,验证根证据、冻结、旧记录不变及七/八步兼容;未操作开发库或平台。前阶段8项不累加。
- TypeScript 检查及前端生产构建通过,构建约37.36秒,仅既有 chunk 提示;本机隔离界面 **7项通过、页面错误0**:[界面报告](../.tmp/scoped-wait-ui-1792903347781/summary.json),未访问真实平台或调用模型。
前序夹具失败报告保留:根替换竞态已补同步固定根检查;未知 POST 改以实际集合轮询信号触发,避免在动作前取证阶段提前发送;旧等待夹具不再要求新范围查询;本机短等待的关闭预留过短,测试预算改为仍低于产品上限的1200/2000毫秒。未将前轮局部结果累加,也未因夹具不稳定放宽生产规则。独立只读集成复核未发现新增实质问题;语法及局部差异检查通过,旧阶段全量、迁移、检索扩展和 macOS 未重跑。
加载与真实状态:通过受限维护入口关闭原窗口,停止本任务持有的开发服务并确认端口释放,再重启加载前置和范围等待修复。同一任务/账号资料重开,检测仍为 `logged_in / confirmation_required`,无需扫码;已请求确认当前新窗口账号,尚未代填确认、记录新搜索/范围等待或创建新候选/阅读:[重开状态](../.tmp/peer-scoped-open.json)。实际仍为11条旧成功步骤和1个旧候选,新增真实业务阅读/模型分析/人工核对均0,第二篇未运行,无关注、私信或评论写入。旧初筛、候选和三条失败/部分阅读已保存当前基线,不覆盖历史:[本轮基线](../.tmp/peer-scoped-baseline.json)。
本机服务核对:API/前端代理正常、首页200、PostgreSQL;修改/新增源码88份及本轮构建产物3份对实际模型 Key 精确扫描0命中,`.env`仍忽略:[交付核对](../.tmp/scoped-wait-final-qa.json)。图解8页无脚本错误或节点溢出,本地链接140项有效,并已查看更新图解截图:[文档核对](../.tmp/scoped-wait-doc-check.json)。
未完成与下一步:依整体方案第 14.2 节,新窗口确认后以一次新的实际搜索录制范围等待,冻结独立八步修订并静态检查,再对首篇执行一次来源绑定完整回放。只对真实取得且来源核对通过的正文/评论分析;第二篇、业务质量、真实分页、账号延后反馈、独立读回及桌面交付仍未完成。不自动重试或扩请求规则。
提交/推送:本轮未执行;真实账本、浏览器资料、原文、截图及报告保留本机忽略目录。
## 2026-10-25-05:范围等待实录、新八步冻结及一次真实回放
目标:接用户“账号正确,继续”,确认新窗口后按第14.2节录制新搜索等待,冻结修订并执行一次完整来源绑定阅读。
实际录制:通过受限维护入口确认当前会话,重新观察首页。以任务参数 `keyword` 完成填写、回车及显式 `wait_scope:#global` 集合等待,新增成功步骤12、13、14,未修改旧11步。回车后观察有普通根、无结果集合,随后等待动作前已出现20个标题,等待成功并完成前后取证;不能称本次实际轮询从零项等到了20项:[回车记录](../.tmp/peer-scoped-action-13.json)、[范围等待](../.tmp/peer-scoped-action-14.json)。准备时首次填写请求同时传值和参数名,被422输入校验拒绝、未执行浏览器动作;改为仅引用已有任务参数后成功,没有调整产品校验。
新版本:按真实步骤12、13、14、4、6、7、8、11冻结 `candidate_52d71f3e4b244830a5e328b24bab8796`,摘要 `89871dd9538b2cadee7f9de5c6e58584de9b8e62a82dfcd3a094e8023da2f320`。新 `validation_8b115276eee246879e2d798857eafdf6` 静态通过:[新候选](../.tmp/peer-scoped-candidate.json)、[静态检查](../.tmp/peer-scoped-check.json)。离线独立复核步骤顺序、阅读合同、摘要和18项冻结证据一致。仍包含旧录制的零移动定位和评论合同,不能借静态通过继承运行成功。
一次独立真实回放:新增 `reading_0375f7b467fc4c0da2037cca099b7fa8`,关联 `validation_f05756c9ce61401a8b1d1fcc5aa76961`。工作进程约8.174秒,填写/回车通过,第3步范围等待失败,错误 `WRITE_REQUEST_BLOCKED / NOTE_BINDING_MISMATCH`。未执行定位或点击,来源绑定尚未建立,后一码不表示已打开错误笔记;正文/评论均无可用结果,阅读为 **failed**,不能分析:[真实验证](../.tmp/peer-scoped-validation.json)、[阅读](../.tmp/peer-scoped-reading.json)、[读回汇总](../.tmp/peer-scoped-summary.json)。未自动重试或执行第二篇。
失败已分清:最新观察有普通根但无结果集合,执行时已成功建立 `xhs-readonly-ui-experimental-v1`,collect xhr 与 APM fetch 具有实际允许标记,说明新等待前置已生效。该阶段另有安全状态请求及 APM xhr 被本地规则拦截;失败取证时已有20个结果标题。不是等待超时、根缺失或取证跨15秒窗口,也不能仅据请求摘要认定平台已发非真人提醒、账号降权或这些接口无副作用。只保存既有安全元数据,没有请求头/正文/凭据,未放行安全请求或扩大规则:[加载及请求证据](../.tmp/peer-scoped-loading-evidence.json)。已查看等待成功与回放失败的实际截图。
历史与边界:当前任务共14条成功步骤、2个候选;旧候选完整内容及此前三条失败/部分阅读逐字读回不变。当前窗口仍已登录且ready,新增模型分析及人工核对0;没有关注、私信、评论或回复写入。已同步当前进度、整体方案、README及图解;本轮没有修改产品代码或重跑前轮工程套件,不累加前轮测试数。当前的可见搜索页面不替代账号延后反馈。
收尾核对:API/前端代理正常、首页200,数据库为PostgreSQL;修改/新增源码88份及构建产物3份对实际配置Key精确扫描0命中,`.env`仍忽略:[本机检查](../.tmp/scoped-replay-final-qa.json)。图解8页无脚本错误或节点溢出,文档本地链接149项有效:[图解与链接检查](../.tmp/scoped-replay-doc-check.json)。这些不是重跑前端构建或真实平台通过。
未完成与下一步:按整体方案第14.2节,先核对实际请求边界与适用范围,区分本地阻断、页面提醒、加载和来源条件,再确定兼容设计与独立验证;保留安全/未知请求中断及实验状态。当前完整阅读仍未通过,案例评论分支需求质量、真实分页、账号后续反馈、独立读回与双端交付未完成。尚无本分支有效评论可供人工核对,不要求用户重复登录或标注不存在的内容。
提交/推送:本轮未执行;新真实记录、浏览器资料、原文及截图继续仅留本机忽略目录。
## 2026-10-25-06:请求拒因、失败诊断贯通与兼容边界核对
目标:接用户“继续”,按第14.2节核对上轮本地请求阻断。先补可追溯的拒因及显示,不通过重复运行账号或放开安全请求来掩盖兼容问题。
实际完成:
- `platform-policy.mjs` 新增同源的纯决策结果,原 matcher 复用同一判断。记录15种固定本地拒因,包括无策略、失效/过期、范围不符、地址变化、发送类型不符等;四类策略7/8/2/3条原规则和既有到期差异保留,不增加放行。安全状态路径只说明不在当前规则,不据路径确认业务副作用或平台提醒。
- 动作失败及实际 blocked 请求摘要可带 `policy_reason`、已签发的 `active_policy_version`;仅资源类型不符时可带受限 `expected_resource_types`。摘要最多12类、观察最多30条,总数另留,仍不记录查询、头、正文或凭据。允许请求的原版本/规则标记不变。
- 工作进程按真实失败位置追加 `failure_diagnostics`,包括步位、动作、实际错误码及受限诊断;正常失败深复制,整轮截止同步快照并关闭,不额外等待诊断或接受迟到变化,成功不返回该字段。服务端二次核对失败布尔值、位置/动作及实际错误码,清洗后存入新验证及关联阅读;非法诊断丢弃但不改变原失败,旧记录不补造,无schema变更。
- 后台验证、阅读与动作失败复用请求详情:概要显示失败步位、动作、阶段及阻止总数,详情默认折叠,展示固定中文拒因、策略及接受类型。缺失原因或旧记录显示未记录,不从通用错误码推断平台封号、真实写入或等待超时;无放开规则/自动重试入口,窄屏可用。
涉及文件:`tools/learning/platform-policy.mjs`、`browser-worker.mjs`,后端 `worker.py/learning.py/reading.py`,后台类型、动作失败组件、新验证诊断组件及验证/阅读页面;新增两份目标测试,既有 worker 隐私白名单断言只新增固定拒因字段并验证其值,继续排除私密字段。共享工作区已有改动、原候选/失败阅读、模型配置及人工结论保留。
最终目标验证:
- 单轮 **8组、7567断言**:[执行层目标](../.tmp/request-diagnostics-aDDUCX/report.json)。独立旧matcher对照3648种组合,四策略允许集合、规则数及到期边界一致;只用官网元数据纯判断,不导航官网。真实本机Edge验证动作及回放诊断、16次拒绝/12类摘要上限、真实PNG及私密哨兵排除,未知POST到夹具0。挂起DOM与真实字体截图分别约3303/3296毫秒由3500毫秒总截止取消,实际关闭、阶段准确且迟到结果不变。平台、应用API、模型调用均0;前阶段纯目标不累加。
- 后台目标单轮 **12 passed、无跳过,52.97秒**:[后台目标](../.tmp/test-server-request-diagnostics.log),含新10项与既有允许元数据纯回归2项,覆盖SQLite和真实专用PostgreSQL随机隔离schema;使用FakeWorker,不访问真实平台。合法failed/partial阅读复制、成功拒带、缺失兼容及原候选/初筛/阅读/验证逐字不变均通过,首阶段7项不累加。
- 实际Node工作进程输出再经Python清洗边界核对 **4项通过**:[跨语言读回](../.tmp/request-diagnostic-worker-bridge.json),含请求失败、DOM/截图总截止及成功无失败字段;无数据库、平台或模型请求,不冒称完整应用API端到端。
- TypeScript检查、生产构建通过,仅既有chunk提示。本机隔离Edge界面 **10项通过**:[界面目标](../.tmp/request-diagnostic-ui-1792905535311/summary.json),覆盖新旧验证/阅读/动作、15类拒因、秘密字段排除、无隐式重试、零阻止不造阻断以及390px布局;页面错误/真实后台/平台/模型请求0,已查看桌面诊断截图。前序夹具路径笔误及检查范围过宽的失败保留,只修临时测试,不放宽产品。
- 产品冻结后,既有完整worker单轮 **69/69通过**:[完整回归](../.tmp/worker-regression-rMYZDP/report.json),使用Edge和本机隔离页面,覆盖更新后的严格五字段隐私断言、正常/未知请求、来源/根变化、七八步阅读、容器/整页定位、批次、空态、媒体、总截止与实际截图/DOM中断、资料目录及EOF生命周期。没有真实平台、应用API或模型调用,不与新8组或旧阶段计数累加。
收尾核对:API/前端代理正常、首页200、PostgreSQL,实例与上轮一致,未重启生产服务;修改/新增源码91份及本轮构建产物3份对实际模型Key精确扫描0命中,`.env`仍忽略:[本机核对](../.tmp/request-diagnostic-final-qa.json)。图解8页无脚本错误或节点溢出,本地文档链接通过:[图解检查](../.tmp/request-diagnostic-doc-check.json)。已查看桌面及390px诊断截图,语法和局部差异检查通过。
边界与加载:当前保护仅在动作自动化窗口生效;动作结束或失败后,网页恢复普通通信,不能把一次阻断说成后续同类流量仍持续被拦。未借改变标志/延迟/旁路来获得运行通过,也未新增审批或反复确认账号流程。本轮没有关闭或重开现有窗口,后端及工作进程尚未重启加载新诊断。受限入口只读核对仍为已登录/ready、14步/2候选:[当前会话](../.tmp/request-diagnostic-session-status.json)。新增真实录制、阅读、模型分析、人工核对均0,第二篇未运行;上轮真实失败仍是原失败,不能补写新的拒因到旧记录。
未完成与下一步:依整体方案第14.2节,继续明确平台正常网页通信与任务主动业务动作的兼容边界,再确定适用范围和独立验证;本轮完善的是诊断,尚未解决真实请求兼容或通过完整阅读。新诊断待下次受控重启后参与真实记录,当前不反复拿账号试错。案例评论业务质量、账号后续反馈、真实分页、独立读回、桌面与正式发布仍未完成。
提交/推送:本轮未执行;账号资料、真实原文、账本和报告继续保留本机忽略目录。
## 2026-10-25-07:统一 Playwright 执行配置、原生页面通信与全新实录准备
目标:接用户确认“沿用 Playwright 固定执行,学习端和桌面共用”。解决旧模式将部分官网正常通信按请求规则阻断的兼容问题;新模式须全新学习、冻结和验证,不将旧步骤改名后宣称通过。
实际实现:
- 新增显式 `playwright-xhs-native-ui-v1`,固定三字段执行合同为 `engine:playwright / action_policy:xhs-bounded-readonly-v1 / network_policy:xhs-page-native-v1`。任务声明、实际会话、观察、动作、冻结候选及实际验证分别记录来源;后台核对有效实际回显后才接纳。验证开始导航前核对配置,禁止跨配置回放、额外合同字段及调用者覆盖。静态校验不冒称实际执行,阅读和初筛只沿用实际验证环境,不改写旧来源。
- 原生模式将主动动作限制在官网已观察且唯一可用的搜索输入/Enter、固定实际笔记链接,以及普通、不可编辑、非交互根内的有界读取、等待和滚动;拒绝表单提交目标、未知/下载链接、交互祖先和错误角色。搜索完成核对对应关键词结果页,笔记点击核对固定编号,其余动作核对完整来源。没有开放直接 API、任意 JavaScript 或自主 Agent 执行。
- `xhs-page-native-v1` 允许上述动作自然产生的第一方 HTTPS 主框架 `xhr/fetch POST` 通信,包括网页自身安全状态通信;并不按接口名称伪称无业务副作用。策略在进入自动化前签发,绑定当前页面及明确允许的搜索/笔记过渡,最长15秒,不续签。非第一方、子框架、其他写方法或来源变化仍拒绝,原批次/总截止、取证和对象绑定继续生效。legacy 四类精确请求策略保持原规则,不自动迁入新模式。
- 该边界约束维护工具可执行的页面动作,不是完整网络沙箱,也不保证网页通信无状态变化或平台永不提示异常。普通页面通信在动作结束后恢复,Service Worker 等覆盖仍有实际限制;没有新增指纹伪装、检测绕过或失败自动重试。
- PostgreSQL/SQLite schema 10 为任务追加可空执行配置,旧任务 DTO 省略空值,原候选/证据不回填;原 SQLite 备份迁入 PostgreSQL 路径兼容。后台小红书新任务默认新配置,可显式保留 legacy;切换平台清空配置。界面分别展示任务声明、实际会话、冻结合同、实际验证与业务阅读/初筛,不推断缺失值。
涉及文件:`tools/learning/execution-profile.mjs`、`platform-policy.mjs`、`browser-worker.mjs`;服务端 `main.py/learning_contracts.py/learning.py/worker.py/db.py/postgres.sql/reading.py/discovery.py`;后台类型、两份新配置组件及任务/候选/验证/初筛页面;新增执行层与后台目标测试。同步 README、维护入口、整体方案及原图解,原共享改动保留。
冻结后验证,分别统计不累加:
- 新配置目标 **16组、809断言通过**:[执行层报告](../.tmp/native-ui-profile-7RbFQ7/report.json)。含36个真实本机 Edge DOM样本、纯官网元数据策略矩阵、最终来源核对及实际 legacy worker 字段省略/跨配置导航前拒绝。实际 DOM夹具只有1次GET、外域尝试0;使用真实PNG,已查看。不导航真实平台、不调用应用API或模型;这是合同与隔离浏览器边界验证,尚非新模式整条真实链路通过。
- 既有完整 worker **69/69通过**:[回归报告](../.tmp/worker-regression-r6Khjn/report.json)。在本轮生产代码冻结后单轮执行,Edge与本机隔离页面,包含旧七/八步、批次、来源/根变化、总截止、实际取证和会话生命周期;平台/应用API/模型调用0。前阶段69项不累加。
- 后台 **13 passed、无跳过,88.09秒**:[后台目标](../.tmp/test-execution-profile-final.log)。使用 FakeWorker,覆盖SQLite和真实专用 PostgreSQL 随机隔离schema、schema10幂等升级、旧SQLite备份迁入空PostgreSQL后原摘要/manifest保持不变、实际回显与候选证据拒绝、旧初筛/新阅读分别保留来源。未操作开发库或平台;共享旧SQLite只读核对未升级:[核对记录](../.tmp/profile-shared-sqlite-readonly-check.json)。
- TypeScript检查和生产构建通过,构建约1.43秒,仅既有chunk提示。隔离 Edge 界面 **11项通过**:[界面报告](../.tmp/execution-profile-ui-1792908594379/summary.json)。23次内存模拟请求/4次模拟创建,真实后台/平台/模型请求0,页面错误和意外请求0,已查看桌面与390px截图。前序夹具定位问题只修临时测试,未因此放宽产品规则。
加载与真实状态:通过受限维护入口关闭旧窗口,停止本任务持有服务并确认8810/5179释放,再重启加载新代码及schema10。新增 `learn_cbf78367730748b59da7cc0c2ec6f4f3`,同一账号资料目录重开后实际回显上述执行合同,检测为 `logged_in / confirmation_required`,无需扫码:[新窗口](../.tmp/native-profile-open.json)。已请求维护者确认新窗口账号,未代填确认;当前新任务0步/0候选,尚无新模式真实阅读或模型分析。临时创建脚本曾在201成功后误读未展开字段;通过唯一任务只读恢复同一编号,没有重复创建或改动产品。
历史核对:旧任务14条成功步骤、2份候选完整读回、原初筛及4条既有失败/部分阅读保持不变,legacy配置未补写,新服务健康且数据库为PostgreSQL:[重启与历史核对](../.tmp/native-profile-history-check.json)。旧候选实际能力和失败仍按原证据报告,第二篇未运行;没有关注、私信、评论或回复写入。
收尾核对:API及前端代理正常、首页200、PostgreSQL,新服务实例与重启记录一致;修改/新增源码97份及构建产物3份对实际配置Key精确扫描0命中,`.env`仍忽略:[本机检查](../.tmp/native-profile-final-qa.json)。图解8页无脚本错误或节点溢出,本地文档链接通过,已查看更新后的学习页截图:[图解与链接检查](../.tmp/native-profile-doc-check.json)。源码语法和局部差异检查通过;未重跑旧阶段全后台、检索扩展或macOS验收。
未完成与下一步:按整体方案第14.2节,新窗口账号确认后以新配置全新录制搜索及案例正文/首层评论,冻结独立版本并静态检查,再执行一次来源绑定完整回放。遇新失败留证停止,不自动重试或改写旧记录;只对实际来源核对通过的可用正文/评论分析。账号延后反馈、真实分页移动、业务质量、独立读回、未来桌面共用内核接入、macOS与正式发布仍待完成。
提交/推送:本轮未执行;账号资料、原文、截图及报告继续仅保留本机忽略目录。
## 2026-10-25-08:新模式全新实录、首篇完整探索通过及文字需求分析
目标:接维护者“账号正确,继续学习”,在已加载的新配置下重新学习并验证搜索到正文/首层评论,不复用旧模式成功步骤冒充新证据。
真实实录:通过受限维护入口确认当前新窗口账号,`logged_in / ready`,没有重开或重复扫码。新任务 `learn_cbf78367730748b59da7cc0c2ec6f4f3` 新增9条成功步骤:搜索输入、回车、显式范围等待、结构化搜索提取、整页有界定位、固定标题点击、详情等待、正文、评论。搜索等待前后均已出现18个标题,不能称实际轮询从零等到结果;四步搜索提取5条完整卡片、跳过4条不完整、明确截断。定位实录实际从0滚到320像素并找到目标,不据随后标题数量变化认定分页因果。正文1条,评论3批新增0/0/1、去重后1条完整首层评论、跳过3条不完整,结束为批次数上限 `batch_budget`,不是时间预算失败。
新候选分别冻结并静态通过:四步 `candidate_6c67fdac11624f53b8ebb07451a5fe45`,摘要 `4515eab84b3902ab4a9a63dfa86aa6898716efece48bda3802fb6c14afb7f20e`;八步 `candidate_6c5f1066ff6d42e68c0a7e889e6061e4`,摘要 `e435f1973e6c6f828744e01b92dc446496b5fe6b959741d57ba0d780a30641e0`,仅取本轮1/2/3/5/6/7/8/9步:[搜索清单](../.tmp/native-profile-search-candidate.json)、[八步清单](../.tmp/native-profile-detail-candidate.json)。离线逐项审计9步、18份前后观察及3份批次观察均实际回显同一profile和精确三字段合同,步骤、冻结引用及摘要一致。保存窗口中按序号/时间去重有60条 `native_page_traffic` 允许标记、阻止0;仅指保存窗口,不代表完整网络日志或账号延后状态:[实录审计](../.tmp/native-profile-recording-audit.json)。
一次完整真实回放:对原初筛首篇执行 `reading_d529b7e1a6db46b7801922acab373964`,关联 `validation_ff910a5ee1d74e8db51e103cdfb07d58`,**exploration / passed**,阅读 **completed**。从入口重新搜索到笔记、正文和评论全部8步通过,固定笔记编号/标题/来源核对通过;实际回显新配置合同。取得正文1条和去重后2条完整首层评论,3批、`truncated:true / stop_reason:batch_budget`,仅表示冻结的有限范围完成。工作进程总耗时 **14.297秒,已包含入口4.488秒**;后台整次请求16.453秒。回放定位零次移动,实录320像素与回放零移动分别报告,不冒称分页完整验收:[实际验证](../.tmp/native-profile-reading-validation.json)、[业务阅读](../.tmp/native-profile-reading.json)。已查看实录及回放的实际末批PNG;验证12份观察的profile再次核对一致。
来源与旧历史:本轮沿用已保存的 `discovery_40adbe10d64f4542b801562e4afb73bc` 提供可信关键词/目标来源,新详情回放重新从入口搜索;原初筛不是新profile验证,不能称整个新搜索初筛闭环已通过。旧初筛、4条失败/部分阅读、2份旧候选及14条旧成功步骤逐字读回不变,新八步manifest及摘要读回一致;当前初筛下只新增本条阅读,新会话仍登录/ready:[最终读回](../.tmp/native-profile-final-check.json)。四步新搜索候选目前只有实录和静态检查,未另建搜索初筛回放,没有自动运行第二篇。
模型验证:仅向模型发送本次来源核对通过的正文/2条评论文字,3个来源、657字符。新增 `analysis_aae778abf4c5410aae59a9089c016ec4`,`renovation-demand-v3 / demand-result-v2`,**completed**;主槽 `deepseek-flash` 一次成功请求,2.250秒,供应商实际返回1822 Tokens,费用未知。正文被识别为提供装修服务、建议看评论;两条联系咨询短句被保守判为 `insufficient / role:unknown`,地区、预算、阶段不推断。模型结构/引用通过不作真实业务准确率:[分析记录](../.tmp/native-profile-analysis.json)。
人工核对:维护者随后明确确认两条均“有咨询意向,可保留为线索,实际装修需求待核实”。据此通过受限入口各追加一条 `corrected`,注明维护者对话确认、Codex代录;仅将表达改为 `question`、业务相关性改为 `relevant`,保留 `role:unknown / demand:insufficient / match:insufficient`,不补造自身需求、身份、地区、预算或阶段。核对备注保留“待核实咨询线索”业务意见,现有五维没有独立线索状态,不能据备注宣称已建线索库。两条分别为 `review_3edb0c3a1ca54a468e30870174150e86`、`review_ade9c9f4b0f649d6844019eb6a8d4e98`:[评论1核对](../.tmp/native-profile-review-comment_1.json)、[评论2核对](../.tmp/native-profile-review-comment_2.json)。统计为3来源/已核2/待核1,正文未人工核;只计两项表达和相关性纠错,不报模型准确率。原分析完整读回不变,人工保存新增模型与平台调用均0:[核对统计](../.tmp/native-profile-reviews-summary.json)。
涉及变更与边界:本轮没有修改产品代码、数据库结构、请求策略或模型提示词,只补忽略目录内的受限维护脚本和同步方案/进度/入口/图解状态。没有重跑07阶段工程套件、迁移、检索扩展或macOS。当前只取得一个新模式真实探索样本;正式模式基线、过程复查、官方消息等延后反馈、独立身份来源读回与发布均未完成。没有关注、私信、评论或回复写入,模型建议未执行。
收尾核对:人工追加后再次读回,2条核对、原分析、当前阅读及4条旧阅读和旧初筛保持一致,只有1次模型调用、1822 Tokens,正文仍待人工核;当前会话仍 `logged_in / ready`:[核对后读回](../.tmp/native-profile-review-final-check.json)。API和前端代理正常、首页200、PostgreSQL实例不变;修改/新增源码97份及产物3份对实际配置Key精确扫描0命中,`.env`仍忽略:[本机检查](../.tmp/native-replay-final-qa.json)。图解8页无脚本错误或节点溢出、本地文档链接检查通过,已查看更新图解及真实回放末批PNG:[文档核对](../.tmp/native-replay-doc-check.json)。文档差异及临时维护脚本语法检查通过,本轮无产品构建或工程套件重跑。
未完成与下一步:按整体方案第14.2节,依据已确认判断,先明确咨询意向与自身需求/业务匹配分开的合同,以及可追溯、有界的笔记背景上下文,再实现独立分析修订;该优化当前只更新方案,未修改现有提示词或结果结构。新搜索初筛独立验证及新来源衔接、正式运行质量与任务后反馈分别验收。当前不因一次成功自动扩读、重放或发布。
提交/推送:本轮未执行;真实内容、账号资料、截图及报告继续保留本机忽略目录。
## 2026-10-25-09:有界笔记背景、独立咨询意向与新版分析实样
目标:接用户“继续”,实现第14.2节已确定的咨询合同,让联系咨询可保留待核,同时不补评论者的自身装修需求、身份或地区;在原阅读上追加新版本,保留旧分析及人工意见。
实际实现:
- 新增 `apps/server/consultation.py`,服务端生成固定来源图:笔记无背景引用,评论只引用同一来源绑定阅读的笔记。原文只发一次,保持21来源/16,000字,不把每条评论拼成重复正文;作者、真实评论编号、链接、图片和凭据不进入模型负载。背景资料仍按不可信数据处理,不产生工具动作。
- 新提示 `renovation-demand-v4`、结果 `demand-result-v3`。每条结果独立保存咨询 `yes/no/unclear`、本条逐字依据及关联笔记背景依据;引用分别核对,禁止其他评论/外部来源、缺失字段或模型自填动作。yes/no须本源依据,评论yes另须真实笔记引用及相关的询问/求建议/自身需求表达;无文字媒体由程序保留未知。程序派生 `lead_disposition` 与有限展示建议,咨询yes或相关自身需求可保留待核,不提升原 `match` 或补身份/地区/预算/阶段。
- 新六轴人工核对采用 `analysis-review-v2`,本条和背景证据分别保存;旧 `demand-result-v2` 继续原五轴 `analysis-review-v1`,禁止混入新字段,更早结果保持只读。版本、阅读、模型配置及商家条件参与复用,不将旧分析或人工标签升级到新版本;无数据库schema变更或独立线索库。
- 后台分开展示咨询意向、保留待核、自身需求与匹配,标明本条/笔记背景依据及来源。旧结果明确历史未记录;新旧核对表单分别提交,打开或预填不保存,纯媒体不确定、版本冲突和地区不足的保护保留。
- 首次真实输出失败后,新增固定无文本合同诊断:仅 `MODEL_OUTPUT_INVALID` 且16种允许检查枚举才可保存 `output_diagnostics:{check}`。旧五轴与新咨询检查的允许范围、原错误码不改;不存原始模型输出、来源编号、URL或供应商错误,成功不带诊断、旧失败不回填,不自动重试或升级模型。
涉及文件:服务端 `analysis.py / analysis_reviews.py / consultation.py`;后台类型、`ReadingDemandAnalysis / AnalysisReviewPanel / ConsultationDetails`;新增 `test_consultation.py / test_analysis_diagnostics.py`,旧 `test_analysis.py` 的服务模型夹具按版本调整。三份已有需求分析/人工核对/业务工作台验收脚本同步新负载及模拟结果,旧纯合同和伪历史不补新字段;共享已有改动保留。同步README、维护入口、整体方案及原图解。
最终后台验证:诊断补丁冻结后,7份目标/相关回归单轮 **116 passed、无跳过,83.21秒**:[最终后台报告](../.tmp/test-consultation-diagnostics-current-final.log)。覆盖咨询、分析、五/六轴核对、固定诊断及商家条件衔接,使用隔离SQLite、真实专用PostgreSQL随机schema、MockTransport/FakeWorker;真实平台、模型及开发库调用0。前阶段41/72/3项及单目标不累加为当前计数。
前轮115通过/1失败保留:[前轮报告](../.tmp/test-consultation-diagnostics-final.log)。唯一失败为既有现实计时夹具在80ms总截止内假设必进入两个密钥槽,本机先到总截止、只记录一个尝试;未改变产品超时。仅将夹具改为500ms总预算/300ms单次,仍短于两个完整单次窗口,并要求主备顺序、两次超时、实际墙钟与尝试耗时合计均小于900ms;先该目标通过,再完成上述116项最终单轮。没有因此放宽来源、分类、网络或生产截止。
界面与应用贯通:TypeScript检查、生产构建通过,最终构建约1.30秒,仅既有chunk提示。隔离Edge界面单轮 **13项通过**:[界面报告](../.tmp/consultation-ui-1792912666653/summary.json),48次内存请求/6次模拟核对,真实API/平台/模型调用0、页面错误及意外请求0,390px无横向溢出,已查看桌面和窄屏截图。媒体下拉夹具的嵌套抽屉动画/聚焦时序失败保留,最终仅修测试等待实际内容和目标选项,不改产品边界。
现有 `test-analysis-review.mjs` 一次真实本机Edge + 临时API/Vite + 专用PostgreSQL随机schema + loopback模拟模型集成通过:[应用集成](../.tmp/analysis-review-acceptance-1792912632849/summary.json)。新v3分析、六轴核对、7条追加记录、双击单POST、422修正反馈、409显式重开、媒体未判定、旧只读历史、980px及重启读回通过,核对阶段模型/夹具网页请求及写入0、页面错误0。该完整集成在最后诊断补丁前完成;诊断只追加失败元数据,随后由最终后台目标覆盖,不冒称补丁后整条重跑。另两份验收脚本仅维护及语法检查,未运行全量。
已标注样本离线合同:用原阅读3个来源/657字符及维护者对两条短评论的判断,构造严格分源证据验证咨询yes可保留、需求/角色/匹配和地区不继承:[离线报告](../.tmp/consultation-labelled-offline.json)。模型、平台、数据库调用0,不是对模型语义质量的评测。
真实模型与加载:经受限入口关闭旧学习窗口,停止本任务持有服务并确认端口释放,受控重启加载新代码;本轮只分析已保存文字,没有重开小红书或要求账号确认。首轮新增 `analysis_924580d95542475499b750f69c41e005` 为 **failed / MODEL_OUTPUT_INVALID**,主槽一次约2.657秒、2547 Tokens,未返回可用结果。原设计不保存raw,该失败没有具体合同拒因;后加诊断不回填:[首轮失败](../.tmp/consultation-live-analysis.json)。
加载固定诊断后,明确执行一次后续独立验证,新增 `analysis_238192eb0b8144c9a7af7fcc6aae92fd` 为 **completed**,主槽 `deepseek-flash` 一次约3.563秒、2620 Tokens:[后续分析](../.tmp/consultation-live-analysis-diagnostic.json)。正文服务推广为咨询no/不保留本人线索、建议看评论;两条短评论均咨询yes/保留待核,本条原话与笔记服务背景分别引用,自身需求insufficient、角色unknown、地区/阶段/预算null、业务匹配insufficient。后续成功未重现首次失败,不能据此确认首次具体原因或声称修复了它;两次新调用合计5167 Tokens、金额未知,未走备用或改变模型,未自动重试。
历史与范围:原阅读、原v3提示/v2结果分析、2条旧五轴人工纠错及9条学习步骤逐字读回不变;本轮新增两条模型记录(1失败/1完成),新分析人工核对0,不自动迁入旧人工意见。当前服务健康、PostgreSQL,浏览器为closed:[读回核对](../.tmp/consultation-live-history-check.json)。没有新的平台读取、第二篇、关注、私信、评论或回复操作,没有商家桌面或正式发布。两个同向短句来自同一笔记,不能作整体准确率、召回率或稳定性结论。
收尾核对:API及前端代理正常、首页200、PostgreSQL,新服务已加载且与实际新分析实例一致;修改/新增源码101份及产物3份对实际配置Key精确扫描0命中,`.env`仍忽略:[本机检查](../.tmp/consultation-final-qa.json)。图解8页无脚本错误或节点溢出、文档本地链接通过,已查看更新图解及隔离咨询详情截图:[文档核对](../.tmp/consultation-doc-check.json)。语法及文档差异检查通过;未重跑旧Playwright完整worker、迁移、检索扩展或macOS验收。
未完成与下一步:按整体方案第14.2节,补固定评测集的正反例和更多真实标注,分别核对咨询意向与自身需求,保留无效输出;随后验证新搜索候选的独立初筛及新来源衔接、正式运行基线与任务后反馈。平台独立身份读回、Windows/macOS桌面和交付仍未完成。
提交/推送:本轮未执行;真实文字、账号资料、截图和报告继续仅留本机忽略目录。
## 2026-10-25-10:收回平台链路主线与独立复用验证
目标:按维护者确认,暂停扩展装修需求/咨询分类与标注,完成“学习操作→固化版本→轻量召回→换参执行→结果核对”;现有业务代码与历史保留,桌面端继续后置。
实际实现:
- 新增 routes 服务及后台“学习→链路复用”入口。目录从已有冻结候选识别 search_notes/read_note_comments,结构化平台/任务类型召回;显式固定候选ID与摘要,歧义不静默选最新。目录不全量哈希历史截图,明确只展示最近静态记录;召回与执行完整重验来源和摘要。
- 首版要求同任务、同站、同profile/执行合同,并复用同一学习会话。搜索按本次实际结果的合法来源、唯一标题/编号衔接一篇详情,不套装修规则,不调用商家条件或业务模型。现有详情能力仍含入口搜索前缀,组合会搜索两次;尚未学到独立“当前结果页→详情”能力,不能称原子拆分或最省动作。
- 两阶段沿用原exploration浏览器验证;组合追加kind=route汇总,独立保存route_status、固定版本、参数、阶段验证引用及证据,不新增表/迁移。actual_outputs保留阶段取证;usable_outputs仅保留结构/来源/绑定通过的结果。失败不自动重试,正文可部分保留,零评论不伪装已学空态。route不参与候选维护状态或发布资格;旧脚本测试列表排除组合记录,通用详情定向专属链路页,避免填写浏览器质量。
- 增加共享任务占用及内部上下文:组合期间外部浏览器变更、单候选验证及第二组合返回ROUTE_BUSY;入口和RPC边界两次检查,内部两阶段允许,finally释放。GET状态可读,不新增自动登录或发布。
- 维护者明确要求保留登录态时不再逐次询问账号。后续本地Codex沿用已授权固定学习账号,先检查已登录再完成ready;登录失效、需验证或异常才提示。该会话操作沿用现有API,未实现新的自动身份核验或登录凭据处理。
涉及文件:apps/server/routes.py、main.py、learning.py;后台RoutesPage、主壳/侧栏/类型和验证展示;control入口与测试;新增test_routes.py、test-routes.mjs、test-routes-ui.mjs及package命令。README、整体方案第10/14节、会话说明和现有图解同步;共享已有改动保留。
最终工程验证:
- 路由目标单轮 **23 passed**,405.26秒,SQLite与真实专用PG随机schema,FakeWorker,无真实平台/模型/开发库调用:[最终路由报告](../.tmp/test-routes-final.log)。覆盖非装修参数、版本歧义、摘要/来源篡改、绑定失败、部分结果、归属/CSRF、不可变历史和异上下文占用。此前18项和单目标不累加。
- 最终既有learning/discovery/reading的SQLite回归 **26 passed、4 deselected**,44.60秒;4项专用PG参数未在此单轮执行,PG由上述路由目标另验:[既有链路回归](../.tmp/test-routes-legacy-final.log)。
- 最终真实本机Edge合成站组合贯通(专用PG隔离schema)通过:露营清单、咖啡设备两组新词完整输出;摄影器材保留部分正文;无会话零新增网页请求;重启读回历史及候选不变。模型/真实平台/网页写入均0:[浏览器贯通报告](../.tmp/route-acceptance-1792917198998/summary.json)。
- 隔离Edge界面单轮 **10项通过**,16次内存模拟请求,真实API/平台/模型0,页面错误/意外请求0,390px无横向越界,已查看截图:[界面报告](../.tmp/routes-ui-1792917227566/summary.json)。初轮确有本页grid自动列撑大,已修;动画/定位夹具失败保留。此单轮后仅补旧验证详情的组合分流与列表过滤,由最终TypeScript检查/生产构建覆盖,不冒称界面全量又重跑。
- 控制入口目标通过;最终TypeScript检查、生产构建通过,构建1.41秒,仅既有chunk提示:[前端报告](../.tmp/test-routes-admin-final.log)。未重跑商业模型、迁移、检索扩展或macOS。
真实平台验证:维护者确认当前账号后,使用同一新模式冻结搜索与八步详情候选执行新词“装修顺序”。组合 validation_024ccd66f016430d899f297d804eb111 **failed**;搜索阶段通过,取得3条有界结果;详情第4步滚动根未在当前采集中定位,UNOBSERVED_SELECTOR及未完成的NOTE_BINDING_MISMATCH保留,blocked_request_count=0。失败没有正文可用输出,未原样重试:[首轮组合](../.tmp/route-live-run.json)、[阶段诊断](../.tmp/route-live-stages.json)。
修订与复验:从同任务已成功实录步骤选取新七步版本,去掉当前不必要的滚动,只声明当前可见搜索结果范围,未修改旧步骤/候选/失败。首个七步组合 validation_d6239a52a1d54b228657fd92e4112fa6 为 partial:正文及来源绑定通过,评论三批已到预算但还未越过长正文;没有当作平台无评论。核对真实截图后,用同一已观察根补录每次640px、最多5批、最多6条的有界读取,实际取得6条;仅追加1条真实步骤,再冻结新七步候选,重新完整复验。新七步候选 candidate_9d79ad9f21084c5097c039fd2002d3f3 静态通过后,使用同一新词重新验证,组合 validation_35d567240bca4416930f0098c7d79be5 为 completed;本次搜索取得3条,正文1条,首层评论6条,首层评论共5批、去重1条、范围截断,不代表全部评论。 详情版本与来源均独立核验,不继承旧成功;模型调用0、未发布:[最终修订组合](../.tmp/route-live-range-run.json)、[长正文前部分结果](../.tmp/route-live-revision-run.json)。仅为一个关键词/一个对象的真实探索证据,不代表更多页面、正式运行或双端交付。
未完成与下一步:按整体方案第14.0–14.1节补声明范围的新参数/对象、独立结果页入口和缺失分支,再补正式基线及任务后反馈;客户意图、分类质量、桌面及跟进写操作均不前置。没有关注、私信、发布评论或回复。
提交/推送:本轮未执行,真实文字、截图、浏览器资料和本机报告仍位于忽略目录。
收尾读回:原2个候选清单、原9条步骤、原阅读/模型和2条旧人工意见逐字未变;实际仅追加1条评论范围学习步骤,失败/部分/完成3条组合记录均完整读回。当前API与前端代理使用PostgreSQL且正常,平台会话仍已登录/ready:[最终读回](../.tmp/route-live-final-readback.json)。图解8页无脚本错误或节点溢出,本地文档链接已核对:[文档检查](../.tmp/route-doc-check.json)。没有提交/推送。
## 2026-10-25-11:功能入口分层盘点、公开主页导航及实际安全验证暂停
目标:根据维护者要求,把作者/评论者主页、关注/私信及下级入口纳入学习,逐层盘点当前账号网页版功能;动态内容取样,业务分类继续后置。
已实现:后台新增“学习 → 平台路径”,五组33个初始功能模板及父子层级,支持筛选、搜索和实际任务证据直达。不新增数据库/API或业务模型;只读取盘点任务,以分类标记、官方页面、实际可见非敏感元素与已登记截图引用共同核对。当前18项已观察、15项待探索;作者入口仅匹配实际固定布局及唯一可见锚点,不使用昵称推断。它是入口观察目录,不把观察、真实动作、固化、验证和发布混为完成;旧组合探索记录单独核对固定候选/实际阶段引用。
新增显式 `playwright-xhs-navigation-ui-v1` 及精确三字段合同,支持已观察且固定实际对象的发现/搜索/笔记/公开主页/通知链接;旧v1、legacy、候选及失败不改。普通读取继续限定根/字段/预算。真实笔记跳转标准别名按同编号核对;主页仅兼容实际取证的 `channel_type`、`parent_page_channel_type` 省略,各最多一个,必须实际省略至少一项,其余有序query、xsec值、路径/对象/hash不变。新窗口必须是本步明确目标及opener的实际主框架,仅沿用原动作策略及截止时间,不续签。没有放行任意按钮、div或消息发送。
真实取证:盘点任务 `learn_cc0a31cb28284c7daca116c82efe4304` 保存25条成功步骤、86份观察,无候选;进入搜索、笔记、首层评论、通知、自己的主页,并保留发布者/评论者主页实际打开的观察。复验任务 `learn_43196c6fb80e449ba4e3679d52b8989d` 保存23条成功步骤、58份观察,无候选。最终加载修订后,发布者主页点击 `step_dc951617dd0743cda553d7eccee21e05` 通过,来源与实际执行合同一致;评论者主页尚未完成最终复验,不能继承发布者或旧只读链路成功。全程模型调用0,未关注/取关、发送私信、发布评论或回复。
失败与修订依据:宽泛导航链接读取因包含不允许输出而停止;笔记别名曾触发本地来源误判并阻止21条通信;首次评论者弹窗打开后,3条主框架通信因归属校验误判被阻止。修订后的弹窗阻止为0,但完整地址末校验仍失败;新增只含11个固定无文本字段的诊断,绑定实际新profile及 `NAVIGATION_BINDING_MISMATCH`,对成功/旧记录不补。受限普通根进一步读取唯一主页链接,确认站点去掉两个入口上下文参数、对象和两项xsec未变,随后最小修订并实测发布者通过。第一次链接字段不唯一的失败保留,改为精确相对容器后取得1条链接。所有失败原样留档,不反写成功。
实际暂停:最终发布者主页通过后,返回首页的截图出现官方“安全验证”,可见页面检测为 `verification_required`,后台 ready已撤销,后续搜索未执行;截图已查看。已停止平台操作并请维护者在官方窗口手动验证,保留当前窗口。不能把此次安全验证归因于某一工具或某一动作,也不能报告全程无提醒、正式运行通过或账号权重无影响。原弹窗/地址误判与这次真实平台验证分别记录。
工程验证(分别报告,不累加):
- 新导航最终单轮 **19组/888断言通过**:[报告](../.tmp/navigation-profile-6J5z4m/report.json)。含纯边界、实际本机Edge DOM及popup;popup的真实Page/Frame/opener配合明确合成的官网URL投影验证合同,不是真实官网或完整worker端到端。
- 旧v1最终单轮 **16组/809断言通过**:[报告](../.tmp/native-ui-profile-ZLasDu/report.json)。legacy策略650断言在较早弹窗补丁后通过,后续仅新导航比较/诊断修改,未将其当作最终再次重跑。
- 后台初轮导航/旧profile/动作失败目标 **30 passed**:[报告](../.tmp/test-navigation-server-final.log),在最后诊断补丁前完成;最终诊断目标单轮 **12 passed、无跳过**:[报告](../.tmp/test-navigation-comparison-final.log),覆盖SQLite、专用PostgreSQL随机schema及FakeWorker实际API失败/验证保存,旧模式隔离、成功不补和历史不变。两轮不是最终全后台。
- 最终隔离Edge界面 **10项通过**,TypeScript及生产构建通过:[报告](../.tmp/platform-paths-ui-1792920829357/summary.json)。没有真实API/平台/模型调用;作者入口反例及390px无溢出通过。最初夹具误拦任务页合法延迟截图的失败报告保留,修正夹具后重跑。
- 本机实际后台的目录读取和桌面/390px几何检查单独执行,页面刷新不操作平台:[界面读回](../.tmp/xhs-paths-live-ui.json)。旧任务10条步骤及4份候选完整读回未变,API/前端代理和PostgreSQL正常:[最终核对](../.tmp/xhs-paths-final-audit.json)。真实会话仍等待官方验证。
涉及文件:后台平台路径页面/证据规则与入口接线、执行配置表单/显示及类型、服务端执行合同与诊断清洗、Playwright配置/策略/工作进程、对应Python与Node/UI目标测试,以及README、工具说明、整体方案和现有图解。图解8页无脚本错误或节点越界,210个本地文档引用存在,已查看学习页截图:[文档检查](../.tmp/path-doc-check.json)。
未完成与下一步:以整体方案第14.0.1节为唯一当前顺序;先由维护者完成官方验证,再检测当前状态并复验评论者主页。随后补非语义菜单/标签/回复开关的固定识别与真实状态断言、安全关闭/返回、通知分类和消息窗口,再按模块参数化、冻结和独立变参验证。未捕获或被元素上限遗漏不等于不存在;本轮没有完成全站、写能力、正式发布或双端交付。
提交/推送:本轮未执行。平台资料、原文、截图及本机报告仍仅保留于忽略目录。
## 2026-10-26-01:提交当前代码并同步仓库
目标:按维护者要求,将当前代码直接提交并推送Git。
实际完成:主实现提交 `c4806df` 已成功推送至 `origin/main`,共111个改动文件,包含此前学习工具、需求分析与核对、链路复用、功能路径盘点、测试及方案/进度记录。保留共享工作区现有改动,没有改写历史或强制推送;本条随独立进度回写提交同步。
提交检查:远端获取成功,提交前本地与 `origin/main` 一致;差异格式检查通过。提交范围全部为文本,真实 `.env`、浏览器资料、数据库、截图、日志及临时报告均未纳入;两个本机实际模型Key精确扫描0命中,示例配置仅空值/占位。源码提交前后的业务实现未额外修改。
验证边界:本轮未重新执行业务测试、构建、浏览器或真实平台操作,沿用此前各阶段已记录的结果,不将Git同步视为正式发布。实施规划未调整,下一步仍按整体方案第14.0.1节;官方验证、评论者主页复验及缺失控件未因提交完成而改变状态。
提交/推送:主实现已成功推送;本条进度回写一并提交同步,最终分支与工作区状态由本轮Git回执核对。