Gaima POS 项目控制台 / 2026-05-22

Local DB + SQLite 主线进入 QR 部分接收命令

当前完成点:local-service 新增 `order.append_qr_batch_to_table`,QR 客人购物车可以把有效行写入当前桌台订单,同时把售罄、缺失或校验失败的行作为 rejected 明细返回。严格的员工/POS `order.append_lines_to_table` 仍保持整批成功或失败。

本轮基线 cdcae60 feat: add async line facts flow
开发分支 codex/qr-partial-acceptance-batch
最新模块 QR Partial-acceptance Batch Command Slice
下一建议 docs-only 历史中文编码清理

最新完成

QR 部分接收批量命令

只做命令边界,不做 QR UI
Service

部分接收结果

  • 有效行逐行 append 到当前桌台订单。
  • 失败行返回 index、lineId、itemId 和错误文本。
  • 全失败时 `order: null`,不保留空订单。
Command Log

幂等重试

  • 新增 durable `runAppendQrBatchToTableCommand()`。
  • 重复提交同一 idempotency key 返回已存结果。
  • 不会重复写入已经 accepted 的订单行。
Transport

浏览器安全协议

  • 新增 `{ type: "order.append_qr_batch_to_table" }`。
  • runtime 入口为 `LocalServiceRuntime.appendQrBatchToTable()`。
  • POS UI 仍不导入 SQLite 或 Node-only runtime。

已确认约束

后续 agent 不需要重新提问

这些是产品和架构约束,不属于当前阻塞项。

本地 DB

local-service 唯一写入

  • 每家店有自己的本地 DB。
  • POS/iPad/QR 只提交 command,不直接打开 SQLite。
  • 平台订单未来也走 adapter/inbox,不直写 DB。
锁与付款

Close 才是截点

  • 查看旧订单不拿锁。
  • 同桌 append-only 加菜不需要长编辑锁。
  • 正余额阻止 Close,付款记录不会自动清桌。
暂缓范围

不要混入本模块

  • 硬件打印、支付 provider、平台 adapter。
  • split bill、WebSocket push、outbox replay。
  • 生产 SQLite packaging/linking。

模块进度估计

当前核心闭环

百分比用于排优先级,不是发布承诺。

Local Runtime / DB

SQLite repository、command log、session/lock、transport、QR partial batch 稳定。

POS Order Entry

plain item、line facts、payment/Close、confirm/print 可 async opt-in;modifier/combo 见交接说明。

QR / Customer

命令边界支持部分接收;客人 UI 与提交体验仍是独立模块。

Printing Queue

队列事实、路由、retry/admin 基础稳定;真实硬件 transport 未开始。

Platform Orders

Uber/DoorDash/Fantuan 仍是 P2 adapter/inbox 边界。

模块地图

下一步仍然只选一个主模块

保持小切片:每轮只迁移一个明确边界,并更新 handoff。

模块 状态 完成事实 下一步 风险边界
Local Runtime / DB本地可靠性 94% SQLite schema/repository、command log、session/lock、transport、HTTP harness、QR partial command。 保持 command/API 边界,不让客户端直写 DB。 生产 SQLite packaging 继续推迟。
QR / Customer Cart客人扫码 32% 部分接收批量命令已完成:有效项接收、失败项返回。 未来可单独做 QR UI 或客户提交 lifecycle。 不要混入支付、平台订单或 WebSocket push。
POS Order Entry前台点单 86% 多个 visible POS 写路径已可 async opt-in,并保留 snapshot fallback。 按最新 handoff 检查 modifier/combo 分支是否需要稳定化。 POS UI 仍不得导入 SQLite 或 Node-only modules。
Docs / Handoff项目记忆 需要清理 本页已恢复中文主界面和无 sticky 布局。 建议下一轮 docs-only 历史中文编码清理。 docs-only 不能混入业务代码。

验证记录

本轮验证已完成

通过

local-service tests

`orderService`、`localOrderCommandRuntime`、`localServiceRuntime`、`localServiceTransport` 定向测试通过。

通过

local-service typecheck

`npm run typecheck -w @gaima-pos/local-service` 通过。

通过

workspace matrix

`npm test`、`npm run typecheck`、`npm run build`、`npm run db:validate` 均通过。

通过

dashboard

本地桌面/移动端滚动验证通过,线上 dashboard 已部署并完成内容检查。

新 session 复制 prompt

每轮结束都要提供这一类交接 prompt

继续 POS Local DB + SQLite repository adapter 主线。请用中文回复。先从根目录 `D:\AI_Projects\POS System` 开始,按顺序读取 `NEXT_AGENT.md`、`docs/STATUS.md`、`docs/MEMORY.md`、`docs/CHANGELOG.md`、`docs/project-overview-infographic.html`,不要用旧 worktree 或根目录之外的 git status 判断当前开发状态。最新完成模块是 QR Partial-acceptance Batch Command Slice:local-service 新增 `appendPartiallyValidatedOrderLinesToTable()`、durable `order.append_qr_batch_to_table`、runtime/transport 支持,QR 批量提交会接收有效行、返回 rejected 行明细,重复 idempotency key 不重复写入,全失败批次不留下空订单。线上 dashboard:`https://gaima-pos-dashboard.pages.dev/`。dashboard 必须保持中文主界面并验证桌面/移动端滚动渲染。下一建议模块是 docs-only 历史中文编码清理;也可以另选 QR customer UI,但请新建 fresh ignored worktree。不要把硬件打印、支付 provider、平台 adapter、split bill、WebSocket push、outbox replay、生产 SQLite packaging 混进下一模块,除非我明确改优先级。