 qiaoqichaoandClaude Code
|
c59fff68d3
|
feat(v2): S1 存储层——材料导入批次与事实冲突检测
T02 第二个子卡。复用 assistant_objects(新 kind),**未新建表**;旧库结构不变。
新增服务:
- services/material_import.py 批次生命周期:create/load/listing/mark_item/
retry/cancel;状态由逐项状态派生(ready/partial/failed/parsing)
- services/fact_conflict.py 冲突检测/阻断/裁定;FactConflictUnresolved(E-17)
解决的**真实缺口**(BR-23 / AC-24):既有 apply_candidate 对 values/facts 是
后写覆盖,sources 虽累积多来源但无人检测分歧、无人阻断。本层在**新路径**前置
检测:冲突时证据仍入 sources(BR-22 留痕)但值不采用(BR-23),已确认值不被覆盖。
增量改动(均为可加性,未改既有语义与调用方行为):
- assistant_store.py:新增 idempotent_lookup / idempotent_remember 共享 helper。
既有 enqueue 与 create_report 的内联实现**未改写**。用 INSERT OR REPLACE 而非
裸 INSERT:重试路径上裸 INSERT 会抛 sqlite3.IntegrityError(非 Conflict,
translate() 无法映射为 409)。
- assistant_materials.apply_candidate 新增 adopt=True 形参。adopt=False 只记证据
不改值;既有调用方不传参,行为完全不变(有回归测试)。
设计决定:
- T00/04 曾提 3 个 kind;实现时发现契约中 ImportItem 无 revision 且内嵌于批次,
items 是值对象,故收敛为 2 个 kind(import_batch / fact_conflict)
- E-17 有两个面:确认动作被拒 = 422;运行级结果 = HTTP 200 且冲突存于
degradations。契约映射与注释均已写明,并有测试锁定
测试:新增 test_prescreen_storage.py(33 项)。全量 196 项 OK(124 → 196)。
scripts/verify.py 9/9 PASS(exit 0)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-29 14:49:03 +08:00 |
|
 qiaoqichaoandClaude Code
|
d8a7d3858c
|
feat(v2): 新增 S1 契约层(材料集合导入与事实确认)
T02 首个子卡 = S1 契约层。新增 backend/contracts/prescreen.py(设计指定的
唯一 owner),定义 SourceLocator / ImportItem / ImportBatch / FactConflict
与共用约束、错误码与错误信封。
落实的规格条目:
- BR-22 逐文件保留来源/定位/解析版本与状态
- BR-23 多来源冲突保留候选并要求显式处理(resolved 需说明+选择+人)
- AC-23 反例:绝对路径(C:/、/、//share)、上级引用(..)、超限、空集合、
failed 缺 error_code、parsed 缺 document_id、parsed 带 error_code
- AC-24 反例:候选值全同不构成冲突;未知用 null 而非 0/空串;
candidates 必须与 candidate_evidence_ids 同序同集合
- 01 §5 错误码与既有 translate() 的 HTTP 语义对齐;E-17 为运行级、HTTP 200
- 03 §9.1 时间必须带时区;禁止未知字段(E-07)
D3 定案(工程限制,非业务阈值):单文件 ≤10 MiB 沿用既有 LIMIT;单批
≤20 文件 / ≤20 MiB。依据 03 §1 末「管理员只能降低初期限制,放宽须重新验证」,
取保守方向即规格许可;放宽需另立验证。
依赖方向:contracts 不导入 services,标准字段白名单校验留在 service 层。
测试:新增 test_prescreen_contracts.py 38 项,全绿;scripts/verify.py 9/9 PASS。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-29 14:20:39 +08:00 |
|
 qiaoqichaoandClaude Code
|
74430a3b4d
|
fix(v2): 隔离 Compose 资源,使 v2 可与旧版同时运行
原抽取件沿用旧版的容器名/宿主端口/卷名,一旦启动会与旧版直接冲突,
故 v2 在改名完成前不可部署。本次仅改 v2,不触碰旧版。
- 项目名/容器名 mini-openclaw-stable → mini-openclaw-v2
- 宿主端口 3200/8002 → 3212/8012(容器内仍为 3000/8002,健康检查与
RISK_AGENT_BACKEND_URL 都在容器内解析,故保持不变)
- 卷 xingbang-data/xingbang-logs → xingbang-v2-data/xingbang-v2-logs
- verify.py 的 docker 冒烟改为探测 3212/8012
backend/test_deployment_release.py 的 5 项断言**未修改**仍全绿:该测试锁定的是
aliyun compose 的回环端口行与 CHAT_THINKING_MODE,本次未改这两处。
验证:scripts/verify.py 9/9 PASS(exit 0)
未验证:docker 运行时冒烟(本机 Docker Desktop 未启动,守护进程不可达)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-29 14:16:51 +08:00 |
|
 qiaoqichaoandClaude Code
|
bf0549a4d3
|
fix(v2): 补齐 backend 单测依赖的两个 cjs 脚本
test_chat_repair.py:92 会调用 scripts/test_chat_stream.cjs,而该脚本不在
verify.py 的 9 个用例里,首轮抽取因此漏掉,导致 backend-unit 失败。
同时补上 test_resetdata_ui.cjs 使 cjs 测试集完整。
验证:scripts/verify.py 全部 9 项 PASS(backend-unit 124 tests OK)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-29 13:12:30 +08:00 |
|
 qiaoqichaoandClaude Code
|
d56c699ce6
|
chore(v2): 从兴邦预审v2白名单抽取独立可运行基座
按 docs/v2/05-implementation-plan.md §1 候选迁移表与 claude_use/T00 白名单,
从 55e2cdb 抽取 224 个文件(2.48 MB)到独立目录 F:/mini-OpenClaw-v2。
- 排除:凭据(.env/server-deploy.conf/旧DELIVERY.md)、运行数据(xingbang_data 等
4 个 SQLite)、依赖(venv/node_modules 符号链接)、归档(_backup*/test-evidence/
ori_file)、Office 临时文件
- 目标目录独立 git 仓库,初始恢复点;Gitea 远程与分支待 OQ-06 Q2 定案
- 未部署、未启动服务、未调用模型
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-29 12:58:26 +08:00 |
|