docs(prototype): record independent review and handoff

This commit is contained in:
QiuSW
2026-08-03 12:44:59 +08:00
parent 5550efff88
commit b10a300a01
10 changed files with 54 additions and 15 deletions
+4
View File
@@ -5,6 +5,10 @@ gitea.env.*
!gitea.env.example
*.stderr.log
# Local browser-prototype verification artifacts
.playwright-mcp/
*-wide.png
# Python 本地校验缓存
__pycache__/
*.py[cod]
+2 -2
View File
@@ -46,8 +46,8 @@ MVP 只做**任务自带商品链接**的情形,分两趟跑完:
**Phase 0 · 地基。仓库目前只有文档,尚未开始编码。**
下一步:先并行完成 T-005(网页端 MVP 原型)与 T-006(桌面端 MVP 原型)并由人确认,
再进入 T-001 / T-002 骨架和生产实现。
下一步:T-005(网页端 MVP 原型)与 T-006(桌面端 MVP 原型)的文件和自动检查已完成,
请先人工确认 6 个 HTML 原型,再进入 T-001 / T-002 骨架和生产实现。
详见 [`docs/current-state.md`](docs/current-state.md)。
**生死线是 M2**:真机能按链接打开商品、精确勾选颜色分类和尺码、**读到该 SKU 单价**。
+10 -8
View File
@@ -22,15 +22,16 @@
- 标准启动路径:`./init.ps1`(Windows)/ `./init.sh`。已存在但会因两端目录未初始化而以
退出码 3 结束并列出待办任务——这是预期行为
- 标准验证路径:目前只有 `python scripts/validate_agent_context.py` 可跑通
- 当前 blocker:生产 UI 实现需先完成人工确认原型;下一步先落成并并行执行 T-005 / T-006。
- 当前 blocker:T-005 / T-006 原型已实现并通过自动检查,正在等待人工确认;确认前不开始
对应生产 UI。
## 当前目录要点
| 路径 | 状态 | 说明 |
| --- | --- | --- |
| `docs/` | 已有 | 项目规范化文档,本次已完整生成 |
| `docs/tasks/` | 已有(空) | 任务文件目录,含 `README.md` 与 `_template.md` |
| `docs/design/` | 已有(仅约定) | 原型目录;下一步生成 `web-*.html` 与 `desk-*.html` |
| `docs/tasks/` | 已有(2 个活动任务) | T-005 / T-006 均为 `DOING`,含 `README.md` 与 `_template.md` |
| `docs/design/` | 已有(6 个原型) | web 登录 / 建单 / 工作台 / 详情,desk 执行 / 设备参数;待人工确认 |
| `scripts/` | 已有 | `validate_agent_context.py` |
| `web/` | **待建** | Go 后端与管理页面(T-001) |
| `desk/` | **待建** | Python 桌面端(T-002) |
@@ -41,11 +42,12 @@
任务状态以 `docs/tasks/` 各任务文件 frontmatter 的 `status` 为准。本节只写项目级摘要:
- 已完成:无。
- 正在进行:无。
- **下一个可领取任务:T-005(网页端 MVP 交互原型)与 T-006(桌面端 MVP 交互原型)。**
两者无相互依赖、使用 `web-*` / `desk-*` 文件名前缀且 `write_paths` 不重叠,可并行。
- 原型使用假数据、不调用真实接口、不驱动真机;经人工确认前任务保持 `DOING`。
- T-001 / T-002 骨架仍可在原型确认后并行,Phase 2 生产页面必须等待相关真机结论。
- 正在进行:T-005(网页端 MVP 交互原型)、T-006(桌面端 MVP 交互原型)。两个任务的
HTML 与自动验证均已完成,因 `needs_human_review: true` 保持 `DOING`。
- **下一步:人工浏览 6 个原型,确认布局、信息密度、唯一主动作和安全文案。** 明确确认后
才能把 T-005 / T-006 改为 `DONE`。
- 原型使用假数据、不调用真实接口、不驱动真机;T-001 / T-002 骨架可在确认后并行,
Phase 2 生产页面还必须等待相关真机结论。
## 当前可运行内容
+1
View File
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<title>登录 · cmbuyer 原型</title>
<style>
:root {
+1
View File
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<title>新建采购任务 · cmbuyer 原型</title>
<style>
:root {
+2 -1
View File
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<title>任务详情 · cmbuyer 原型</title>
<style>
:root {
@@ -238,7 +239,7 @@
</article>
<article class="state-panel" data-state-panel="succeeded" hidden><header class="panel-head"><div><h2>任务已完成</h2><p>人工付款并核对后才进入此状态。</p></div></header><div class="panel-body terminal"><div class="terminal-mark" aria-hidden="true">完成</div><p><strong>已由采购管理员于 2026-08-03 11:20 标记完成。</strong></p><p>付款由人在拼多多完成,系统未读取或保存任何付款凭据。</p><div class="actions"><a class="button button-primary" href="web-task-workbench.html">返回任务工作台</a></div></div></article>
<article class="state-panel" data-state-panel="failed" hidden><header class="panel-head"><div><h2>任务失败</h2><p>失败原因可区分,并保留当时证据。</p></div></header><div class="panel-body"><div class="notice danger"><strong>设备连接中断</strong>发生在第一趟打开商品前,没有进行规格选择或下单动作。</div><dl class="summary-grid"><div class="summary-item"><dt>原因码</dt><dd class="mono">DEVICE_DISCONNECTED</dd></div><div class="summary-item"><dt>下一步</dt><dd>检查设备连接后新建重试任务</dd></div></dl><div class="actions"><a class="button button-primary" href="web-task-workbench.html">返回工作台</a></div></div></article>
<article class="state-panel" data-state-panel="failed" hidden><header class="panel-head"><div><h2>任务失败</h2><p>失败原因可区分,并保留当时证据。</p></div></header><div class="panel-body"><div class="notice danger"><strong>设备连接中断</strong>发生在第一趟打开商品前,没有进行规格选择或下单动作。</div><dl class="summary-grid"><div class="summary-item"><dt>原因码</dt><dd class="mono">DEVICE_DISCONNECTED</dd></div><div class="summary-item"><dt>下一步</dt><dd>检查设备连接后,由人工决定重新试选或结束任务</dd></div></dl><div class="actions"><a class="button button-primary" href="web-task-workbench.html">返回工作台</a></div></div></article>
<article class="state-panel" data-state-panel="canceled" hidden><header class="panel-head"><div><h2>任务已取消</h2><p>管理员选择“退回,不买”,不会再自动执行。</p></div></header><div class="panel-body terminal"><div class="terminal-mark" style="color:var(--danger)" aria-hidden="true">停</div><p>没有签发下单授权,没有创建订单,也没有发生付款。</p><div class="actions"><a class="button button-primary" href="web-task-workbench.html">返回任务工作台</a></div></div></article>
</section>
+1
View File
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<title>任务工作台 · cmbuyer 原型</title>
<style>
:root {
+6 -4
View File
@@ -23,8 +23,8 @@
| 领域 | 评级 | 验证状态 | Agent 可读性 | 测试稳定性 | 关键缺口 | 上次更新 |
|------|------|---------|-------------|-----------|---------|---------|
| web 建单与人工决策 | C | 仅文档 | 高 | 无代码 | 原型与生产实现均未开始 | 2026-08-03 |
| desk 真机试选与下单 | D | 未取证 | 高 | 无代码 | T-103 单价节点与页面判据未取证 | 2026-08-03 |
| web 建单与人工决策 | C | HTML 原型自动检查通过 | 高 | 无生产代码 | 原型待人工确认,SSR 未实现 | 2026-08-03 |
| desk 真机试选与下单 | D | HTML 原型自动检查通过;真机未取证 | 高 | 无生产代码 | T-103 单价节点与页面判据未取证 | 2026-08-03 |
| 提交围栏与结果调和 | C | 协议已定义 | 高 | 无代码 | T-208 / T-401 未实现 | 2026-08-03 |
| 任务数据与持久化 | C | 模型已定义 | 高 | 无代码 | schema / migration / 状态测试未实现 | 2026-08-03 |
| 身份与鉴权 | C | 合约已定义 | 高 | 无代码 | 管理会话与设备凭据未实现 | 2026-08-03 |
@@ -33,8 +33,8 @@
| 层级 | 评级 | 边界执行 | Agent 可读性 | 关键缺口 | 上次更新 |
|------|------|---------|-------------|---------|---------|
| web SSR 页面 | C | 文档明确 | 高 | 原型与 Go 实现未开始 | 2026-08-03 |
| desk PySide6 / 执行器 | D | 红线明确 | 高 | 原型、骨架、真机取证未开始 | 2026-08-03 |
| web SSR 页面 | C | 原型已实现待人审 | 高 | Go 实现未开始 | 2026-08-03 |
| desk PySide6 / 执行器 | D | 原型已实现待人审;红线明确 | 高 | 骨架与真机取证未开始 | 2026-08-03 |
| web API / 状态机 | C | 围栏协议已补齐 | 高 | 未实现、未测试 | 2026-08-03 |
| SQLite 数据层 | C | 核心实体已定义 | 高 | 迁移、约束和并发测试未实现 | 2026-08-03 |
| 拼多多 / ADB 适配 | D | 必须先取证 | 高 | 无本项目真机事实 | 2026-08-03 |
@@ -49,6 +49,8 @@
- 下降:无。
- 新发现的缺口:尚无生产代码和真机证据;网页与桌面原型待生成。
- 已关闭的缺口:移除不存在的治理脚本 / `progress.md` 引用,替换质量文档占位领域。
- 后续进展:T-005 / T-006 已并行产出 6 个自包含 HTML;独立复核通过脚本、自包含、
375 / 768 / 1024 / 1440 响应式、控制台 / 网络与高风险状态检查,现等待人工设计确认。
---
+13
View File
@@ -128,3 +128,16 @@ web 端尚无生产代码。若直接实现 SSR 页面,登录、建单、三
T-103 真机取证后仍需复核实际可读字段,不能把占位图当成页面判据。
- 待人确认:四页整体布局与信息密度、三泳道命名和默认展开、详情页各状态的唯一主动作、
「确认下单(不付款)」与围栏 / 调和文案、375 px 窄屏阅读体验。确认前任务不得标 `DONE`。
### 2026-08-03 · 任务所有者独立复核
- 在 main 合入子任务提交后重新检查全部四页,而不是以子 agent 自报结果作为完成证据。
- 独立 Node 检查确认:四页 id 无重复、内联脚本可编译、相对 HTML 链接均存在、无外部资源,
固定原型横幅齐全。
- 独立 Playwright 检查 375 / 768 / 1024 / 1440 px:无页面级水平溢出、无外部资源请求;
关闭旧会话后四页控制台 0 error / 0 warning。逐项切换详情页 11 个业务状态,确认围栏后只有
人工核查 / 保存核查记录,未出现重试、再次提交或放弃授权动作。
- 目视复核详情页 1440 px 与 375 px 全页截图,主信息、试选证据占位和主 / 次动作未截断。
- 复核时补上四页 `data:,` favicon,消除 HTTP 打开时浏览器自动请求 `/favicon.ico` 的 404;
同时把失败态的「新建重试任务」改为「由人工决定重新试选或结束任务」,避免发明 API。
- 自动验证已完成,仍未获得人工设计确认,任务继续保持 `DOING`。
+14
View File
@@ -170,3 +170,17 @@ View 只渲染;I/O 离开 GUI 线程,通过 PySide6 `Signal` / `Slot` 回到
由 HTML 证明,需在 T-002 及后续原生实现任务中重新验收。
- 本轮没有真机证据,也没有真实 web / ADB / API / 文件保存。人工确认前任务继续保持
`DOING`,不得自动改为 `DONE`。
### 2026-08-03 · 任务所有者独立复核
- 在 main 合入子任务提交后重新检查两个页面和任务记录,确认提交只触及 T-006 的
`write_paths`,未把浏览器截图或日志纳入 Git。
- 独立 Node 检查确认:两页 id 无重复、内联脚本可编译、相对 HTML 链接均存在、无外部资源,
固定原型横幅齐全。
- 独立 Playwright 检查 375 / 768 / 1024 / 1440 px:无页面级水平溢出、无外部资源请求,
控制台 0 error / 0 warning。逐项切换执行页 18 个状态,确认 dry-run / 围栏申请中没有提交
动作,围栏失败、围栏后、结果不明、外部支付与安全校验都只提供安全核查 / 说明动作。
- 目视复核 1440 px 空闲态与 `RECONCILIATION_REQUIRED`:三项就绪状态、唯一提交编号、
「订单可能已创建」和禁止再次点击的层级清楚。
- HTML → PySide6 映射覆盖壳、页签、状态、表单、日志、对话框、焦点与线程边界;未把 DOM / CSS
当成 Qt 实现。仍需人工设计确认及后续原生 Qt / Narrator / DPI / 真机验收,任务保持 `DOING`。