Commit Graph
51 Commits
Author SHA1 Message Date
QiuSW 5b56161fd7 docs(tasks): record T-103 evidence scaffold audit 2026-08-04 10:10:11 +08:00
QiuSW a92b8f6be0 feat(client): add T-103 manual SKU evidence capture 2026-08-04 10:08:49 +08:00
QiuSW ec8257ba8b docs(tasks): start T-103 SKU panel spike 2026-08-04 09:58:13 +08:00
QiuSW 27999c8c85 docs(tasks): define T-103 SKU panel spike 2026-08-04 09:57:07 +08:00
QiuSW 1dc83086a0 docs(tasks): complete T-102 product link validation 2026-08-04 09:51:00 +08:00
QiuSW ad55e77bda docs(tasks): record T-102 successful capture 2026-08-04 09:46:52 +08:00
QiuSW 652eca7953 docs(tasks): record T-102 foreground wait fix 2026-08-04 09:41:03 +08:00
QiuSW cb646b4974 fix(client): wait for PDD foreground after intent 2026-08-04 09:40:05 +08:00
QiuSW 9452debf66 docs(tasks): record T-102 foreground evidence 2026-08-04 09:34:53 +08:00
QiuSW 4adeb1b37f docs(tasks): record T-102 foreground mismatch 2026-08-04 09:32:54 +08:00
QiuSW 2ea28c2626 docs(tasks): record T-102 offline implementation 2026-08-04 09:27:23 +08:00
QiuSW 7040bb61d8 feat(client): add guarded product link capture 2026-08-04 09:26:37 +08:00
QiuSW e7a4be1b9b docs(tasks): start T-102 product link spike 2026-08-04 09:10:00 +08:00
QiuSW 4281b06711 docs(tasks): define T-102 product link spike 2026-08-04 09:07:44 +08:00
QiuSW 393f26de53 docs(tasks): complete T-101 device validation 2026-08-04 09:03:26 +08:00
QiuSW 71c66a074a docs(tasks): record T-101 wifi evidence 2026-08-04 08:55:31 +08:00
QiuSW 7905fa0b70 fix(client): accept whitespace in screenshot base64 2026-08-04 08:51:00 +08:00
QiuSW c4cf19fd55 docs(tasks): record T-101 wifi connectivity 2026-08-04 08:36:26 +08:00
QiuSW de8187eb5b feat(client): add T-101 device baseline 2026-08-03 19:28:39 +08:00
QiuSW f3294633c2 docs(tasks): allow T-101 adb dependency update 2026-08-03 19:07:01 +08:00
QiuSW 0fbf66836b docs(tasks): start T-101 device connectivity spike 2026-08-03 18:56:39 +08:00
QiuSW 4f4a95a55e build: establish unified project entry 2026-08-03 18:55:32 +08:00
QiuSW 637c341b95 docs(tasks): define T-101 device connectivity spike 2026-08-03 18:40:19 +08:00
QiuSW 87591e84f9 feat(admin): establish core data model 2026-08-03 18:37:48 +08:00
QiuSW 8be6d206dd docs(tasks): define T-003 unified entry 2026-08-03 18:35:12 +08:00
QiuSW bcec012c8b feat(client): initialize procurement tool skeleton 2026-08-03 18:32:00 +08:00
QiuSW 2ab5baa776 docs(tasks): expand T-002 shared document paths 2026-08-03 18:16:48 +08:00
QiuSW cf293d2382 docs(tasks): define T-004 core data model 2026-08-03 18:16:08 +08:00
QiuSW c72371ce90 feat(admin): initialize procurement service skeleton 2026-08-03 18:13:30 +08:00
QiuSW b7559a9451 docs(tasks): define parallel T-001 and T-002 2026-08-03 17:57:53 +08:00
QiuSW a63bdb8c37 docs(plan): prioritize MVP critical path 2026-08-03 17:47:22 +08:00
QiuSW 4948afc393 docs(tasks): define T-009 MVP critical path plan 2026-08-03 17:41:58 +08:00
QiuSW 31b08d736a docs(tasks): close T-008 after MCP acceptance 2026-08-03 17:29:33 +08:00
QiuSWandClaude Opus 5 3c458bcf5b fix(tasks): make status git-authoritative, not Vikunja
修掉一处会让并行保护失效的设计缺口:AGENTS.md 声明「状态」权威在 Vikunja,
但离线门禁的检查 1 读的是 frontmatter 的 status,两者之间没有任何同步。
有人在看板上拖了卡片,frontmatter 不变,门禁就用过期数据放行了。

status 的权威定为 git frontmatter,理由与 write_paths 相同:它是判定
「两个活跃任务不得写同一路径」的输入,而门禁必须离线可跑;status 变更
决定谁能碰哪些文件,本来就该产生 commit。

- AGENTS.md:把 status 从 Vikunja 权威列表移入 git 原生表,并说明 bucket
  与 done 仅为人类视图,不一致时以 git 为准
- agent-context.json:tracker.git_native_fields 增加 status
- validate_agent_context.py:强制 git_native_fields 必须含 status,
  已用反例验证缺失时报错
- vikunja_export.py:新增只读漂移检测,导出时比对 frontmatter status 与
  Vikunja done,不一致则提示;只提示不修正,不反向写回
- docs/tasks/README.md、T-008 方案第 1/2 节:同步口径

顺带解决了窄 token 时期的 bucket 401 遗留问题——status 权威在 git,
agent 不再依赖 bucket 移动来表达状态。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 17:17:35 +08:00
QiuSWandClaude Opus 5 ed489bd13e docs(tasks): switch to full-scope token and document agent MCP setup
窄权限 token 实测无法移动 kanban bucket(POST /projects/{p}/views/{v}/
buckets/{b}/tasks 返回 401,bucket 操作需要 project 级权限),导致
TODO / DOING / BLOCKED 的状态流转 agent 无法驱动。权衡后改用全量 token,
代价已在 T-008 方案第 5 节写明:任何配置此 MCP 的 agent 都持有该实例的
完整读写权,且 apiurl 走 http 公网 DDNS,token 明文过网。

AGENTS.md 增加各家 agent 的 MCP 配置片段(Claude Code 的 .mcp.json 与
Codex CLI 的 ~/.codex/config.toml),统一指向 scripts/vikunja-mcp.sh,
并明确任何配置文件内不得内联凭据——token 只存在于 vikunja.env。

看板卡片已归位:Doing #15,Done #12/#13/#14。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 17:14:00 +08:00
QiuSWandClaude Opus 5 9198134d0b chore(tasks): close T-005/T-006 after prototype sign-off
人工确认 6 个原型(web 登录 / 建单 / 工作台 / 详情,desk 执行 / 设备参数)
通过,两个任务的 needs_human_review 满足,转 DONE 并回填 vikunja_task_id。
两者内容已冻结,不迁入导出区块——转换只增加往返风险而无收益,门禁对无
区块的文件豁免检查 4。

这消解了 T-008 门禁上线时报出的存量违规(四处 write_paths 重叠),
validate_agent_context.py 现在 exit=0,未放宽任何检查。

同时修 vikunja_export.py 的一处不一致:文件有 vikunja_task_id 但无导出
区块时应跳过并说明,而不是硬失败;此前 --check 全量模式会因此报错。
半截标记(只有 BEGIN 或只有 END)仍然报错,已回归验证。

T-008 状态口径统一为 DOING:needs_human_review 的硬规则优先于草稿里的
BLOCKED 表述,工作可继续推进,只是未获人工确认前不得标 DONE。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 17:07:13 +08:00
QiuSWandClaude Opus 5 421c865ad2 feat(tasks): adopt Vikunja as task authority with one-way export
把任务的协调状态迁到自建 Vikunja 的 cmbuyer 项目,git 保留单向投影,
并把「活跃任务写路径不得重叠」从自然语言规则变成机器门禁。

- scripts/vikunja_export.py:单向导出(只发 GET),stdlib-only 的
  HTML→Markdown,只覆盖标记区块内,幂等,含 --selftest
- scripts/vikunja-mcp.sh:MCP 启动包装从家目录迁入仓库,版本写死 1.1.1
- scripts/validate_agent_context.py:新增四项离线检查——DOING 任务写路径
  互斥、通配不得圈走共享文档、导出区块 sha256、连接键一致性
- docs/agent-context.json:新增 shared_documents 与 tracker,schema_version 2
- vikunja.env 比照 gitea.env 加入 gitignore,提交 vikunja.env.example

write_paths、## 边界与安全边界条目的权威留在 git,不迁往 Vikunja:
安全边界能否收紧靠 git diff 逐条复核,权威搬到远端会切断审计链。

门禁上线即报出存量违规:T-005 与 T-006 同为 DOING,在 06-tasks.md、
08-interaction-checklist.md、routes.md、current-state.md 四处重叠。
按 T-008 规定不得绕过,须由两者所有者收窄写路径或人工确认后转 DONE。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 17:00:41 +08:00
QiuSW b9e29ed970 docs(project): align product names and source directories 2026-08-03 16:27:05 +08:00
QiuSW fe0c867948 docs(tasks): define project naming and directory contract 2026-08-03 16:18:10 +08:00
QiuSW a7465d2745 feat(prototype): rename web app to procurement service 2026-08-03 16:05:05 +08:00
QiuSW 79a2767870 feat(prototype): show record details inline 2026-08-03 15:55:11 +08:00
QiuSW 0b757f8ad1 docs(tasks): plan inline desktop record detail 2026-08-03 15:47:37 +08:00
QiuSW 235abb4558 feat(prototype): redesign desktop procurement workspace 2026-08-03 15:35:31 +08:00
QiuSW 7e0b2e8b6a docs(tasks): plan desktop workspace revision 2026-08-03 15:20:45 +08:00
QiuSW 9c3c2b2cab feat(prototype): redesign procurement task workbench 2026-08-03 15:00:49 +08:00
QiuSW cad00877d3 docs(tasks): plan web table prototype revision 2026-08-03 14:37:09 +08:00
QiuSW b10a300a01 docs(prototype): record independent review and handoff 2026-08-03 12:44:59 +08:00
QiuSW 5550efff88 feat(prototype): add MVP desktop interaction flows 2026-08-03 12:37:32 +08:00
QiuSW d052583607 feat(prototype): add MVP web interaction flows 2026-08-03 12:37:32 +08:00
QiuSW 851838e92a docs(tasks): define web and desktop MVP prototypes 2026-08-03 12:15:34 +08:00