feat(android): 采购页「回填」入口替换为「重购」,逐条重试本设备最后一批失败采购 #367
Open
opened 2026-10-08 10:23:49 +08:00 by ila
·
5 comments
No Branch/Tag Specified
main
fix/370-horizontal-grid
feat/372-export-shop
feat/378-heartbeat-diagnostics
feat/372-export-price
feat/372-list-export
fix/377-rejected-purchase-outbox
fix/376-pre-address-spec-verification
fix/374-final-spec-confirmation
fix/373-navigation-diagnostics
fix/370-color-discovery
feat/367-last-batch-repurchase
fix/368-image-search-partial-link
integration/364-365-366-main
feat/364-purchase-failure-snapshot
integration/365-366-validation
fix/365-order-result-observation
fix/366-address-editor-ready
fix/359-auto-match-resume
feat/363-inner-code-page-size
fix/362-truncated-spec-card
fix/361-spec-probe-click
docs/agents-worktree-rules
fix/358-syb-size-weight
feat/357-syb-cancel-status
feat/356-purchase-order-filter
fix/355-syb-list-timeout
feat/353-syb-shop-multiselect
fix/354-syb-top-pagination
fix/352-syb-source-created
fix/348-reveal-swipe
feat/340-syb-excluded-products
fix/351-inner-code-apply-selection
fix/350-match-layout
fix/350-inner-code-matching
feat/349-batch-return-use
feat/347-batch-return-cancel
feat/345-yeeke-reship
fix/346-root-serves-spa
fix/344-inner-code-stall-match
fix/343-syb-writeback-session
feat/339-syb-page-size
feat/338-return-match
feat/337-yeeke-admin-ui
feat/336-yeeke-return-sync
fix/335-bottom-submit-node
fix/334-spec-probe-top-swipe
fix/333-purchaser-device-owner
fix/331-spec-panel-recognition
fix/330-syb-writeback-session
feat/327-syb-writeback-filter
feat/326-order-information
fix/325-order-result
feat/316-chrome-order-backfill
fix/307-backfill-entry
feat/305-syb-order-writeback
feat/306-order-paid-amount
release/283
fix/283-purchase-mapping-consistency
fix/230-horizontal-spec-selection
feat/263-spec-rematch
fix/262-purchase-handoff
fix/260-261-purchase-readiness
fix/259-partial-collection-link
feat/258-one-click-replace
fix/257-color-normalized-match
fix/256-collection-single-dimension
fix/255-current-page-reidentify
feat/253-one-click-link
fix/254-match-loading
fix/251-syb-spec-candidates
feat/250-continuous-collection
fix/249-local-purchase-diagnostics
fix/248-bottom-submit
fix/247-short-address-panel
fix/246-address-return-panel
fix/245-purchase-failure-diagnostics
fix/244-selected-card-duplicates
fix/243-spec-entry-recovery
feat/242-agent-order-backfill
feat/241-order-backfill-endpoint
fix/239-syb-partial-sync
fix/238-spec-panel-preswipe
feat/237-client-api-keys
feat/236-purchaser-syb-sync
fix/235-syb-pagination-overlap
release/234-integrated
fix/229-address-entry-dedup
fix/228-selection-proof-panel-transition
fix/227-address-panel-return
fix/226-reopen-pdd-on-manual-retry
fix/225-in-place-purchase-retry
fix/224-final-spec-revalidation
fix/223-probed-confirmed-mapping
chore/221-devharness-sync
feat/218-purchase-result-bubble
fix/217-agent-retry-current-spec
fix/216-syb-spec-role-order
feat/215-mandatory-live-spec-probe
feat/214-verified-purchase-actions
fix/212-syb-sync-shop-snapshot
feat/211-spec-entry-ready-wait
feat/210-order-result-payment-transition
feat/209-pdd-bottom-spec-entry
feat/200-ai-match-result-purchase-ready
feat/199-job-execution-logs
feat/198-syb-ai-parse
feat/195-scheduled-spec-auto-match
fix/197-ai-write-timeout
feat/190-syb-inline-correction
fix/193-address-entry-reveal
feat/194-one-click-spec-match
fix/192-order-result-scroll
No results found.
Labels
No items
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: OPC/goauto#367
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
基本信息
已确认的决策
ACTION_BACKFILL_START、执行代码及服务端/order-backfill保留,不重构或删除;原单条「重试采购」「继续采购」行为不改。线上只读核验记录为「未查到backfill:标记」,不能据此断言从未使用过回填。POST /api/agent/v1/purchase-tasks/{taskId}/reset,任务号不变;不调用创建替代任务的/retry,不新增采购任务。createdAt DESC, taskId DESC,从最新一条向前,相邻创建时间相差不超过60秒视为同一批;超过60秒为边界。这是已选方案A的时间推算,不是真实批次ID;不新增服务端批次字段。failed && retryable的任务,按创建时间倒序,每条本轮最多重置一次;前一条本次执行结果确认且本地执行/上传收尾后,才处理下一条。已核验事实与范围
原调查基线为
7622795;2026-10-08 Codex 与 Claude Code 在 maine450ac2复核以下代码,未以本次审核宣称新能力已实现:TaskHistoryFragment.retryPurchaseTask()的普通重试调用resetPurchaseTask;PurchaseRetryPolicy.showsAction使用failed && retryable。purchase/reset.go使用validatePurchaseResetState,与查询侧retryStateEligibility规则对应,但不是直接调用同一函数:限定本设备、最近30天、正式SYB采购失败、同一明细最新任务且没有不可逆下单/订单信息;备货和演练不在范围。specSource != "unresolved"且规格不完整时拒绝;unresolved可以reset后进入规格探测。Android编排不增加“必须已有映射”的额外条件;最终仍以reset接口的当前规则、能力和设备检查为准。requestId映射到确定性的attempt ID,支持幂等;重放响应Replayed=true的status固定为pending,不是当前任务实时状态。purchase/agent_history.go提供本设备最近1~30天、全部状态或状态筛选的记录,按created_at DESC, id DESCoffset分页,每页最多50条,返回retryable与拒绝原因。详情可查询attemptCount及任务状态。AgentForegroundService具有单线程调度executor、单线程taskExecutor及TaskExecutionMutex;原队列领取顺序不保证重购优先,不能靠阻塞执行线程或整轮占住任务锁实现批处理。实施方案(工单分支已实现,真机效果待验收)
1. 找批次并冻结本轮列表
failed && retryable纳入执行队列。再次失败不在本轮重新入队。2. 确认与开始前检查
3. 幂等reset与本次结果确认
4. 编排、互斥和生命周期
5. 展示与数据
子项目影响、依赖与并行
设计证据
v1 轻量交互原型(2026-10-08,用户审核通过)
log=false关闭交互记录。右上角“场景目录”和带“[演示]”的按钮仅用于审核,不进入正式 App。6ac75e93191a826306a8026a。lastUUID=11808,29 个状态画面、636 个组件、142 条交互线。不同画面是同一采购页/确认/通知的状态示意,不是新增29个业务页面。e450ac2的TaskHistoryFragment.buildSearch/renderBackfill/buildFilters与colors.xml;保持深色 Agent 外观、编号搜索、原筛选、任务卡片和四 Tab。原“回填”位置换为“重购”,原单条重试/继续采购不在本原型中重做。v1 覆盖和交互口径
已验证 / 未验证
props.label,无只设置props.text导致不显示的问题;浏览器无 pageerror。验收标准
风险与回退
文档影响及整合记录
实施完成时更新Wiki Business-Rules-and-Glossary的重购范围、生命周期及回填入口变化,排障入口变化时更新Troubleshooting;API契约不变。只在长期事实落地后按规则在线更新/回读revision,运行一次sync和sync --check。本次实现已更新长期业务规则与架构调用路径;在线revision及镜像验证见下方交付记录。
实施与交付证据(2026-10-08,待验收)
e450ac2;分支feat/367-last-batch-repurchase已推送,远端 HEAD136765dbb0c7f558be5981a47b25a39db8ce1483。87192f7批次发现;b5a781b服务端时钟完整性;5430dc1f64fc0a4d8ef124ada7356e21a975151f编排/Service/UI;136765dWiki镜像。验证
assembleDebug成功,git diff --check通过。testDebugUnitTest在既有ImageSearchBackRecoveryTest.stalled backs trigger a clear-top relaunch instead of burning the budget长时间CPU空转,线程栈位于PinduoduoImageSearchAutomation.awaitPage:310;测试pause为空但使用真实墙钟。约4分钟后停止本轮测试worker。完整基线未跑完,不记为通过,未将该相邻问题混入#367修复。harness.py check --strict仍有既有1项基线问题:docs/evidence/pdd-home-35727-summary.md未登记Wiki镜像;本工单未新增该问题,未修改该文件。APK
D:/OPC/goauto-worktrees/issue-367/android/app/build/outputs/apk/debug/app-debug.apk7D55C042CC1D0F69D070128658F9C77D7A244D286C93CA3F90E21B8654A2FA6A。文档与工作区
c4870fd01a4569059fc0afc77179d14fbd286384。bf3ce6efd67fde1fdb6eacd3248f186aea880391。D:/OPC/goauto-worktrees/issue-367,工作区干净,远端提交已回读确认。合并/发布后再按规则清理。方案讨论共识(2026-10-08,Claude Code,回复 SynapBus #99/#100)
依据 Codex 审核意见(核对基线 main
e450ac2)。Claude Code 已独立核对相关代码,7 点全部采纳,以下为最小可落地共识。本评论不修改正文;整合进正文需用户授权。已核实的代码事实
reset.go:90:仅当specSource != "unresolved"且规格不完整时拒绝;unresolved任务允许 reset 并进入规格探测。正文「规格快照不完整时拒绝」表述不准确,应更正,编排侧不得额外阻断 unresolved。reset.go:74-82:同一 requestId 的重放返回Replayed=true,Status固定为pending,不是实时状态。AgentForegroundService.kt:84-88:executor(单线程调度)、taskExecutor(单线程)及TaskExecutionMutex。created_at DESC, id DESC排序,offset 分页,每页最多 50 条(agent_history.go)。共识
status=failed && retryable=true发起 reset,其余显示跳过原因;每条执行前重新读取一次资格;服务端 reset 为最终依据。TaskExecutionMutex;不依赖 Fragment 生命周期。order_result_unknown。检查范围包括采集任务和未提交的结果,不只看采购的 pending/running。UI 只做按钮替换、一次确认和轻量进度。
措辞更正
正文「没有
backfill:标记,说明回填功能从未被使用」证据过强,应改为「线上未查到backfill:标记」。不影响用户已确认的入口替换决定。仍待用户决定
v1 原型待审核(2026-10-08)
已按用户「先做 #367 的原型」授权使用 QuantUX MCP 制作,正文设计证据已更新。
6ac75e93191a826306a8026a,v1,lastUUID11808。原型审核通过(2026-10-08 17:32,Asia/Shanghai)
用户在 Codex 会话明确表示「#367原型通过审核」。已将确认人、时间、范围整合进正文。
确认版本:QuantUX App
6ac75e93191a826306a8026a,v1,lastUUID=11808;覆盖最后一批重购入口、一次确认、进度/停止/摘要及异常状态,单条等待上限固定15分钟,超时只停编排。本轮只记录原型确认,未修改已审阅模型或生产代码。工单保持 open,功能验收项不勾选;仍待用户明确授权生产实施,真机采购、合并与发布须另行确认。
开始实施(2026-10-08)
用户已确认 QuantUX v1,并在随后会话明确授权实施、测试、构建、提交及推送工单分支。范围仅 Android;不执行真机采购、不合并 main、不发布或安装。
基线
e450ac28989de6827328b411e4bdc050dded9ab3,worktreeD:/OPC/goauto-worktrees/issue-367,分支feat/367-last-batch-repurchase。实施顺序:
已实现并推送,待验收
#367 按已确认 v1 完成Android重购入口及最后一批串行原任务重试。分支
feat/367-last-batch-repurchase,HEAD136765d(实现5430dc1);320项受影响回归与Debug APK构建通过,独立规格/质量复审通过,Wiki两页在线回读及镜像同步检查完成。完整测试曾在既有图搜恢复测试长时间空转后中止,不宣称完整全套通过;strict harness既有未登记镜像问题保留。APK、SHA256、测试范围及未验证项已整合进正文。未合并main、未安装/发布、未执行真机采购。工单保持open待验收,worktree保留。