Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e2883bb67b | ||
|
|
e1b5ee0f7c | ||
|
|
9d2399feed |
@@ -77,3 +77,8 @@ nul
|
||||
deploy/*.env
|
||||
server-deploy.conf
|
||||
ori_file/
|
||||
|
||||
# Superdesign temporary exports and generation logs
|
||||
.superdesign/tmp/
|
||||
# Regenerable local UI discovery cache (contains source copies)
|
||||
.superdesign/init/
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# 兴邦智审 v2 · 独立概念原型视觉说明
|
||||
|
||||
这是为用户本次原型请求新写的设计说明,不包含现有源码、真实客户资料或内部部署信息。用户希望高端大气、直观、科技感,并已选择深色导航+浅色工作区。
|
||||
|
||||
## 设计系统(全部为本原型拟定值)
|
||||
深绿导航 #102B27;导航选中 #244D41;导航浅色文字 #F3F7F5,次级 #B1C6BE。主工作区 #F3F5F4;卡片 #FFFFFF;浅面板 #F8FAF9;边线 #DCE4DF。主要正文 #182D26;次级 #52675C;注释 #64766C。主按钮 #17634C,悬停 #124F3D,白色文字。警示文字 #805418 配 #FBF2DF;风险 #A33C38 配 #FBEFEC;技术关系线 #226A7A 配 #EDF5F7;正常状态 #17634C 配 #EAF3EC。仅使用这些颜色与其透明度变体。
|
||||
中文系统无衬线 Microsoft YaHei/PingFang SC,正文16px,标签14px,元信息12px最低,栏目20px,主标题28px,结论24px。间距4/8/12/16/20/24/32/40/48px。面板圆角12px,按钮8px,标签胶囊;细边线,阴影0 4px 20px rgba(16,43,39,.04)。按钮高44px。
|
||||
1440x1000桌面画布;导航216px,正文边距32px,内容左右主栏与320px动作侧栏,间隔24px;1100px以下侧栏折叠为纵向,768px以下导航变菜单。克制、留白、清晰金融研究台。用可点击证据关系图体现科技感;不做营销首页,不放炫光大脑或装饰大图,不放虚构概率仪表盘。
|
||||
正文判断优先于数字;颜色同时有文字/图标。focus2px outline;动效160–200ms,支持reduced-motion。抽屉关闭键/Escape/焦点返回。品牌只写 兴邦金租 / 智审工作台,没有官方图片标识,不发明logo。
|
||||
|
||||
## 产品内容(虚构演示)
|
||||
单项目预审工作台:主审Agent综合证据和历史经验,专项模块可选择本地模型/Jev/关闭,正式审批属于人工流程。
|
||||
示例企业 恒远精密设备有限公司(虚构);项目DEMO-026,设备直租,融资3,000万元,36个月,装备制造。主审意见 补充材料后再判断;解释 经营现金流与回款说明存在待核实差异,建议先补齐两项关键证据,再推进评审。引用6份材料、参考3条经验、2项待补充均为演示数量,不显示任何百分比。
|
||||
持久提示 原型演示 · 未连接真实数据与模型。所有材料、判断、数值为虚构演示。综合意见不是正式审批意见。
|
||||
|
||||
## 页面层级和交互
|
||||
侧栏:项目预审、历史经验、推进沙盘、验证看板;底部演示评审员。
|
||||
顶部项目编号和演示提示,项目标题及融资事实一行。主按钮生成补件清单,次按钮模拟补件。首屏大结论模块,然后证据关系图:回款说明→账期变化解释→专项支持不足→主审补件建议;线条和节点克制精确,每个节点可点开依据。
|
||||
正文页签 综合预审 / 历史经验 / 推进沙盘;右侧 下一步行动 列补充银行流水、核实设备权属。下方两条问题 回款依据尚不完整 / 设备权属证明待核实,每项可看证据和历史依据。
|
||||
证据抽屉:回款说明.pdf第3页,虚构原文 主要客户账期延长,预计下一季度集中回款;缺证 未提供对应银行流水。抽屉切换原文片段/判断依据。
|
||||
历史经验页签:初审关注现金流→问询账期原因→补齐银行流水/应收账龄→历史意见由待核实转为附条件推进。经验适用条件 客户结构稳定且回款可逐笔匹配;例外 收入集中或关联回款未穿透。提示 条件相似不等于结论相同。
|
||||
推进沙盘页签:勾选补充近六个月银行流水、补充设备权属证明→运行模拟→对比原本2项待核实与假设完成后变化。明确 假设证据真实且完成核验;仍需人工复核;模拟结果,不改变真实项目。有返回真实预审,禁止写通过率提升。
|
||||
专项模型选择:本地开源模型(演示)默认;Jev官方服务(未配置)禁用且说明;关闭可选,选后显示专项核查已关闭,主审仍可基于证据与经验给出有限意见。禁止输入密钥/地址,无真实模型请求。
|
||||
生成补件清单打开含两项具体补件的弹窗,可复制文本。不做假的下载。验证看板入口打开待开展脱敏盲测说明,列基线/本地专项/Jev可选对照,不能编准确率。
|
||||
按钮、页签、导航、菜单均须有行为或清楚禁用。只生成一个连通的高保真原型,所有状态本地模拟。
|
||||
@@ -0,0 +1,5 @@
|
||||
# Superdesign 设计上下文入口
|
||||
|
||||
当前兴邦 v2 原型的完整视觉系统是 [concept-design-system.md](concept-design-system.md)。用户已选深色导航+浅色工作区。
|
||||
|
||||
继续设计以 resume.json 中保存的 contextFiles 和 designSystemPath 为准,只使用独立编写的概念说明。不得自动加入现有源码;此前源码上传被自动审批拒绝。
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"targets": {
|
||||
"xingbang-v2-prescreen": {
|
||||
"targetKind": "new-ui",
|
||||
"projectId": "88a8388d-b079-4118-833b-c8b396bf346f",
|
||||
"activeDraftId": "7484f5c4-0415-4a87-a772-c42339680737",
|
||||
"designSystemPath": ".superdesign/concept-design-system.md",
|
||||
"referenceIds": [],
|
||||
"contextFiles": [
|
||||
".superdesign/concept-design-system.md"
|
||||
],
|
||||
"fingerprints": {
|
||||
".superdesign/concept-design-system.md": "ce41609cd6186253f129b9ae6c90e465c4303b260ef88aeb431c9363c2a5f623"
|
||||
},
|
||||
"components": [],
|
||||
"drafts": {
|
||||
"7484f5c4-0415-4a87-a772-c42339680737": {
|
||||
"title": "兴邦金租智审工作台",
|
||||
"visualDirection": "深色导航+浅色工作区;深绿金融评审风格",
|
||||
"currentVersion": 2
|
||||
}
|
||||
},
|
||||
"updatedAt": "2026-09-28T09:46:39.856342+00:00"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,18 @@
|
||||
# AGENTS.md — mini-OpenClaw 兴邦金租 AI 评审平台
|
||||
|
||||
> 本文件是仓库唯一事实来源,供 Codex / Claude / 其他 AI 编码代理读取。
|
||||
> 本文件是仓库开发规则的统一入口,供 Codex / Claude / 其他 AI 编码代理读取;运行事实以代码、测试和已核验记录为准。
|
||||
> **先读本文件,再动手;开发全程遵守「改动纪律」,尤其是有序验证命令。**
|
||||
|
||||
## 项目开发流程(强制)
|
||||
|
||||
1. 所有需求、修复、重构、UI、接口与交付工作,先读 [项目流程](docs/project-process/README.md) 和 [兴邦适配说明](docs/project-process/XINGBANG-ADAPTATION.md),进入阶段前再读对应的 `01` 至 `08` 章节。
|
||||
2. 按「需求与规格 → 架构 → 详细设计 → UI Spec → 实现 → 验证 → 交付 → 沉淀」执行。阶段完成条件没有证据时标记未完成;可以记录后续阶段的候选设计,但不得把草案当成已过门禁并开始业务实现。
|
||||
3. 需求须有稳定的 `BR-*` / `E-*` / `AC-*` 编号;异常绑定错误码和用户文案,验收使用 Given/When/Then。编号只追加,废弃保留编号并标记 withdrawn。小改动可走流程中的轻量路径并记录理由。
|
||||
4. `docs/project-process` 正文已适配兴邦 Next.js + FastAPI 项目,按各章实际目录、契约、测试和部署要求执行;适配记录说明来源和未建设的机制。不得引用不存在的命令或把规划当实现。本文件的兴邦硬约束继续有效。
|
||||
5. 新版需求与设计入口是 [docs/v2/README.md](docs/v2/README.md)。该目录保存入库评审草案及后续基线;必须区分已实现、规划、模拟演示和真实验证,不能用文件存在证明功能已完成。
|
||||
6. 行为改动沿用本文件的测试与 `backend/venv` 要求,必须运行 `python scripts/verify.py` 并保存 `test-evidence/`。文档改动至少检查链接、编号覆盖、事实来源及 `git diff --check`;不得声称未接入的 CI、Jev 或概率模型已生效。
|
||||
7. 提交使用 Conventional Commits 类型前缀加中文一句话说明;默认分支从 Gitea 实际读取,不照搬来源项目的 `build`。备份分支只代表恢复点,不等于评审通过、合并或发布。
|
||||
|
||||
## ▶️ 接手当前进度(每次新对话/会话开始时先做,别当新项目从零写)
|
||||
|
||||
> 本文件写的是**规则,不是进度**。你的进度在**代码 + git 工作区 + 会话历史**里,不在本文件里。
|
||||
@@ -22,28 +32,28 @@
|
||||
|
||||
- `src/` — **Next.js 前端**(默认端口 **3000**),页面/组件在 `src/app/`、`src/components/`
|
||||
- `backend/` — **FastAPI 后端**(默认端口 **8002**),Python + LangChain,工具在 `backend/tools/`、Agent 调度在 `backend/graph/`、API 路由在 `backend/api/`
|
||||
- 关键业务模块:`review_assist.py`(评审提效)、`risk_*`(风控)、`coordination_agent.py`(协调)、`report_agent.py`(报告)、`graph/risk_task.py`,数据在 `backend/backend/xingbang_data/`
|
||||
- 关键业务模块:`review_assist.py`(评审提效)、`risk_*`(风控)、`coordination_agent.py`(协调)、`report_agent.py`(报告)、`graph/risk_task.py`,当前项目助手数据在 `backend/xingbang_data/project_assistant.sqlite3`(见 `backend/services/project_assistant.py`);旧目录需按实际调用确认,不能作为默认迁移源
|
||||
|
||||
## 启动与验证命令(改动后必跑)
|
||||
## 启动与验证命令(项目实际入口)
|
||||
|
||||
```bash
|
||||
# 后端(必须用项目虚拟环境,下同)
|
||||
cd /f/mini-OpenClaw/backend
|
||||
source venv/Scripts/activate # git-bash; Windows CMD 用 venv\Scripts\activate.bat
|
||||
./start_backend.sh # 或 start_backend.bat ; 后端 http://localhost:8002 (docs 在 /docs)
|
||||
# 或直接: uvicorn backend.backend.main:app --port 8002
|
||||
以下为当前旧版工作区的 PowerShell 命令;v2迁移后改用其独立路径和已确认端口。
|
||||
|
||||
# 前端(另开终端)
|
||||
cd /f/mini-OpenClaw
|
||||
npm run dev # 前端 http://localhost:3000
|
||||
```powershell
|
||||
# 后端:start_backend.bat 使用 backend/venv 并禁用进程内代理
|
||||
Set-Location F:\mini-OpenClaw-local-stable\backend
|
||||
.\start_backend.bat
|
||||
# 实际应用是 app.py;需要指定隔离端口时使用项目venv的 uvicorn app:app
|
||||
|
||||
# 自测(改动相关模块后至少跑相关测试)
|
||||
cd /f/mini-OpenClaw/backend && source venv/Scripts/activate
|
||||
python test_risk_agent_completion.py
|
||||
python test_review_assist.py 2>/dev/null || echo "无该测试,视改动定"
|
||||
# API 自检: curl http://localhost:8002/docs / 或 /api/… 看路由响应
|
||||
# 前端:另开终端
|
||||
Set-Location F:\mini-OpenClaw-local-stable
|
||||
npm run dev
|
||||
|
||||
# 行为改动后的统一验证,包含后端测试、前端构建和Compose配置
|
||||
.\backend\venv\Scripts\python.exe scripts/verify.py
|
||||
```
|
||||
|
||||
后端默认8002,前端开发默认3000;API健康检查为 `/api/xingbang/health`。验证日志在 `test-evidence/`;失败不得发布镜像。端口占用先核对进程归属,不能为启动v2停止旧版或其他任务。
|
||||
|
||||
## 🛑 变更纪律(核心。防止把已跑通的逻辑改坏)
|
||||
|
||||
1. **最小改动**:只改本次任务直接相关的范围。禁止顺手重构、重排、重命名、改格式;看到能优化的代码**先不动**,除非它挡事。
|
||||
@@ -55,7 +65,7 @@ python test_review_assist.py 2>/dev/null || echo "无该测试,视改动定"
|
||||
## 已知坑(务必遵守)
|
||||
|
||||
- **系统代理 127.0.0.1:7890**:后端 `llm`/网络调用会被全局代理干扰,`Connection error / 代理错误` 时用项目自带启动脚本(已自动禁用代理)或 `no_proxy`。别手动留代理变量。
|
||||
- **端口占用**:8002 被占 → `netstat -ano | findstr :8002` + `taskkill /F /PID <PID>`;前端 3000 冲突同理。
|
||||
- **端口占用**:先用 `netstat -ano | findstr :8002` 确认占用与进程归属;仅停止本任务明确可停止的进程,否则为v2选择隔离端口并同步代理与测试配置。前端3000同理。
|
||||
- **必须用 `backend/venv` 虚拟环境**,别用系统 Python。LlamaIndex/依赖都在这个 venv 里。
|
||||
- **节点 3000 前端是 Next.js**:改页面后不如鉴是 Node build;SSR/客户端组件区别,别引入后端跑不动的代码。
|
||||
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
### 1.1 进入条件
|
||||
- 需求来源明确(谁提的、要解决什么问题、对哪些角色生效)。
|
||||
- 明确本轮范围 vs 明确不在本轮范围(out-of-scope 与 in-scope 同等重要)。
|
||||
- 单一交付面还是多交付面已确认(web / Electron 主进程 / 硬件网关 / 设置面板……每个交付面都会让规格多一段)。
|
||||
- 单一交付面还是多交付面已确认(客户经理工作台 / 评审工作台 / 管理配置 / 后端 API……每个交付面都会让规格多一段)。
|
||||
|
||||
### 1.2 完成条件(DoD)
|
||||
- [ ] 七段结构齐全(多交付面则第 3 段重复),每个领域术语都进术语表
|
||||
- [ ] 七段结构齐全(多交付面则第 3 段重复),每个领域术语都进术语表(预审/正式审批、经验适用、缺证、模拟/真实、概率校准必须分清)
|
||||
- [ ] 每条业务规则 `BR-xx` 可测试(能说清"什么输入让它过、什么输入让它挂")
|
||||
- [ ] 每条规则隐含的失败路径都有 `E-xx`,异常"用户可见消息 ↔ 后端错误码"绑定
|
||||
- [ ] 每条 `BR-xx` / `E-xx` 至少被一条 `AC-xx` 引用;验收含正常/异常/边界三类用例
|
||||
@@ -55,7 +55,7 @@
|
||||
Decision Record
|
||||
```
|
||||
|
||||
> 参考模板:`vendor/better-harness/references/bootstrap/examples/frontend-web-spec.md`(前端表面)、`backend-service-spec.md`(多交付面)、`mobile-app-spec.md`(离线/权限/版本)。**复用结构,不复用表名/端点/阈值/角色名。**
|
||||
> 产品级模板见 [URD模板](templates/URD-Template.md),兴邦规格示例见 [v2需求](../v2/01-requirements.md)。复用结构,不复制其他项目的表名、端点、阈值和角色。模拟数据、真实数据及正式审批边界必须明确。
|
||||
|
||||
### 3.2 六道完备性门(任一不过,禁止进入实现)
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
| **Decision gate 决策门** | 本轮范围内没有未决问题阻塞规则;要么移出范围,要么解决 |
|
||||
|
||||
### 3.3 交付物清单
|
||||
- 规格文档(本地草稿放 `docs/plans/`,**不入库**,见 `.gitignore`;需入库的规格随 PR 放 `docs/` 对应目录,命名 `<日期>-<主题>-spec.md`)
|
||||
- 规格文档放 `docs/v2/` 或对应业务文档目录并入库,标明草稿/已确认;临时试验可放 `test-evidence/`,不假设其他目录已被Git忽略。
|
||||
- (可选)给 UI 需求的面:指向 [04-ui-spec.md](04-ui-spec.md) 的表面规格拆分
|
||||
|
||||
---
|
||||
@@ -85,3 +85,5 @@
|
||||
|
||||
- 阶段 ② [02-architecture.md](02-architecture.md)、阶段 ④ [04-ui-spec.md](04-ui-spec.md)
|
||||
- 规格→实现→验证的流程闭环定义见 [README.md](README.md) 全景
|
||||
|
||||
变更:XB-1.0 / 2026-09-28,按兴邦 Next.js + FastAPI 项目事实适配;稳定规则编号保留。
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
- [ ] 分层与依赖方向明确:数据只能往哪个方向流、禁止哪些反向依赖
|
||||
- [ ] 每个模块有唯一 owner 与清晰职责;没有"第二份 owner"(同一概念不复制两处实现)
|
||||
- [ ] 关键决策以 ADR 形式记录(结论 + 被否方案 + 理由),决策号稳定(如 D1/D2)
|
||||
- [ ] 数据流/主链路(含失败路径)有图或文字描述,与现有架构基线(`docs/architecture/architecture-overview.md` 分层图)能对上
|
||||
- [ ] 风险与副作用边界已标注:哪些是高危操作(生产数据、硬件写、外发请求)、默认拒绝还是需审批
|
||||
- [ ] 数据流/主链路(含失败路径)有图或文字描述,与现有架构基线(`docs/兴邦金租对公智能评审平台技术路径与AgentLoop说明-v1.0.md` 及已检查代码)能对上
|
||||
- [ ] 风险与副作用边界已标注:哪些是高危操作(生产数据、经验发布、外发请求)、默认拒绝还是需审批
|
||||
- [ ] 架构不变量可被机器验证的部分列出(对应 lint/architecture test/契约测试)
|
||||
|
||||
---
|
||||
@@ -27,12 +27,12 @@
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R-2.1 | **依赖单向**:renderer → preload → IPC handler → domain service → state / Pi runtime;service 不依赖 UI 层与宿主;禁止跨层绕行。本仓现状:`src/main/`(Electron 宿主:index/preload/app-menu/macos/update/host)· `packages/agent-sdk/`(服务主体,零 electron 导入)· `packages/web-ui/`(renderer SPA)· `packages/api/`(dk-api 契约)。 |
|
||||
| R-2.2 | **唯一 owner**:跨进程/跨模块的类型只在共享层定义一次,其余侧只 `import type`;禁止本地镜像同一契约。 |
|
||||
| R-2.1 | **依赖单向**:src页面/组件 → Next同源代理 → backend/api → backend/services → 受控工具/存储/模型;service不依赖UI。业务模型通过冻结快照和工具白名单访问事实,不能绕过授权直连数据库。 |
|
||||
| R-2.2 | **唯一owner**:既有业务模型以backend/contracts/project_assistant.py及实际请求模型为基线;新契约明确唯一Pydantic定义和前端同步方式,不在多处手工维护冲突语义。自动生成链未实现前不能宣称已防漂移。 |
|
||||
| R-2.3 | **架构不变量写入文档且可验证**:能用测试/静态检查强制的(模块边界、依赖方向、迁移追加、白名单),不许只写文档;验证不了的规则不写进"不可违背"清单。 |
|
||||
| R-2.4 | **决策要留痕**:架构层面的每个取舍写成 ADR(背景/决策/被否方案/影响),不搞口头决定。被否方案是决策记录的一部分。 |
|
||||
| R-2.5 | **分层不做多余抽象**:无第二调用方的接口不抽象;不为想象中的灵活性提前配置化(Karpathy 准则:最小代码解决当前问题)。 |
|
||||
| R-2.6 | **边界即安全**:跨进程 IPC、硬件写、外发请求、文件写入都有明确边界与校验点;高危路径默认拒绝或显式审批(见 [07-delivery.md](07-delivery.md) 高风险审批)。 |
|
||||
| R-2.6 | **边界即安全**:API、SQL数据卡、文件、模型出口、经验发布和部署都有校验/权限/审计;生产数据和外发依任务授权或已批准策略执行。 |
|
||||
| R-2.7 | **架构图遵守作者契约**:用图时按下方 §3.2 的五类图规则(架构/工作流/时序/数据流/生命周期)绘制,只画验证过的事实,不画"可能"的关系。 |
|
||||
|
||||
---
|
||||
@@ -45,14 +45,14 @@
|
||||
1. 概览(一屏) 一句话定位 + 分层图 + 本改动在哪个层
|
||||
2. 分层与模块边界 模块清单:职责 / owner / 依赖方向 / 禁止的反向依赖
|
||||
3. 数据模型与持久化 表/文件/状态的归属与迁移策略(追加式迁移,禁改历史)
|
||||
4. 关键流程 主链路 + 失败/恢复路径(任务运行、硬件发现、网关、升级等)
|
||||
5. 接口与集成点 跨进程契约、外部依赖(硬件协议、网关、云服务)、版本约束
|
||||
4. 关键流程 主链路 + 失败/恢复路径(任务运行、材料确认、经验发布、模型调用、补件重跑等)
|
||||
5. 接口与集成点 跨进程契约、外部依赖(业务数据库、模型端点、数据出口和云服务)、版本约束
|
||||
6. 风险与副作用边界 高危操作清单:触发条件 / 审批点 / 审计点 / 回滚
|
||||
7. 决策记录(ADR) D1/D2…:决策 + 被否方案 + 影响
|
||||
8. 验证方式 架构不变量对应的测试/门禁
|
||||
```
|
||||
|
||||
> 本仓已有基线:`docs/architecture/architecture-overview.md`(分层总览)+ `docs/architecture/codemap.md`(模块地图,头部统计由 `scripts/repo-stats.mjs` 生成)。新架构文档放在 `docs/architecture/`(入库基线)或 `docs/plans/`(本地草稿,不入库,见 `.gitignore`),并保持与基线一致;基线变更要同步。
|
||||
> 当前基线见 [既有技术路径](../兴邦金租对公智能评审平台技术路径与AgentLoop说明-v1.0.md),新版提案见 [v2架构](../v2/02-architecture.md)。架构草案入库并标状态;模块统计和调用关系要实际检查,不引用不存在的生成脚本。
|
||||
|
||||
### 3.2 架构图规范(五类,摘要)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
| Dataflow | 阶段=转换/保管;行=并行流;只标注数据契约与跨边界移动 |
|
||||
| Lifecycle | 主相位列 0..4;可恢复失败必须有真实回迁转换 |
|
||||
|
||||
> 构图约定:图以 Mermaid / 文本图为主(见 `docs/architecture/flows.md`、`docs/release-process.md` 既有图例),只画代码检查证实的事实,不画"可能"的关系,并保证 lint/渲染校验可通过。
|
||||
> 构图以 Mermaid / 文本图为主。现状图只画代码证实的事实;目标图单独标“候选/未实现”,不能混画。验证结构和可读性,未实际渲染时如实说明。
|
||||
|
||||
### 3.3 交付物清单
|
||||
- 架构文档(含分层/边界/数据流/风险)
|
||||
@@ -77,7 +77,7 @@
|
||||
## 4. 轻量路径(小改动)
|
||||
|
||||
- 单模块内、无跨进程/持久化/外部的改动:架构要求并入详细设计开头一小节(边界 + owner + 依赖方向),不单独成文。
|
||||
- 改动触碰 `packages/api/src/contracts.ts`(跨进程契约)、IPC、迁移、安全边界时,**必须**走完整架构设计。
|
||||
- 触碰 `backend/contracts/`、公开API/事件、数据迁移、权限或模型数据出口时,必须走完整架构设计。
|
||||
|
||||
---
|
||||
|
||||
@@ -86,3 +86,5 @@
|
||||
- 输入:阶段 ① [01-requirement.md](01-requirement.md)
|
||||
- 输出到:阶段 ③ [03-detailed-design.md](03-detailed-design.md)
|
||||
- 变更矩阵(架构文档随代码同步):[05-implementation.md](05-implementation.md) §3.3
|
||||
|
||||
变更:XB-1.0 / 2026-09-28,按兴邦 Next.js + FastAPI 项目事实适配;稳定规则编号保留。
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
- 规格的 `BR-*`/`E-*`/`AC-*` 全部可映射到具体接口/数据/状态。
|
||||
|
||||
### 1.2 完成条件(DoD)
|
||||
- [ ] 每个公开接口(函数/方法/事件/IPC 通道/硬件协议命令)有签名、入参校验规则、返回与错误语义
|
||||
- [ ] 每个公开接口(HTTP/SSE端点、函数、模型工具及业务事件)有签名、入参校验规则、返回与错误语义
|
||||
- [ ] 每个数据结构(表/文件/状态对象)有字段、类型、可空性、owner;变更走追加式迁移且有守卫
|
||||
- [ ] 每个有状态视图/流程有状态机(状态全集 + 合法转换 + 每个状态的禁用手势)
|
||||
- [ ] 规格中每条 `E-*` 都能落到具体错误码 + 处理路径(重试/降级/回滚)
|
||||
@@ -28,7 +28,7 @@
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R-3.1 | **契约先行且单一**:接口与数据契约在详细设计中定案,实现只落契约不发明契约;跨进程契约只放共享层一处(G-1)。 |
|
||||
| R-3.2 | **入参显式校验**:每个对外接口(IPC、命令、硬件写入、外部请求)的入参都有校验(类型/枚举/边界),禁止裸用;"无入参"是唯一例外。通用校验器不得被滥用成"非空字符串检查"。 |
|
||||
| R-3.2 | **入参显式校验**:每个对外接口(HTTP、文件上传、SQL数据卡参数、模型请求和服务命令)的入参都有校验(类型/枚举/边界),禁止裸用;"无入参"是唯一例外。通用校验器不得被滥用成"非空字符串检查"。 |
|
||||
| R-3.3 | **状态机完备**:状态全集含加载/空/错误/提交中等"非 happy path"状态;每个状态定义允许的动作与禁用手势。折叠状态机(如把 Loading 与 Submitting 合并成一个布尔)会丢失关键行为,禁止。 |
|
||||
| R-3.4 | **异常必有归属**:每条失败路径有明确处理语义(重试上限、降级、回滚、幂等)与错误码;静默失败是设计缺陷。 |
|
||||
| R-3.5 | **迁移只追加**:持久化结构变更只能追加带守卫的迁移(版本号递增 + 幂等守卫),禁止修改历史迁移;迁移只跑一次。 |
|
||||
@@ -54,12 +54,12 @@
|
||||
```
|
||||
|
||||
### 3.2 契约声明(可落地的部分)
|
||||
- 类型定义:跨进程契约先写在 `packages/api/src/contracts.ts`(唯一事实源),宿主与各包只 `import type`;包内契约就近在包内共享层声明。
|
||||
- 类型定义:新增共享业务契约优先位于 `backend/contracts/`,由FastAPI请求/响应模型引用;前端同步以已验证的生成物或契约测试为准。当前不存在完整OpenAPI生成流水线,建设前标为待实现。不要顺手重排旧API的所有请求模型。
|
||||
- 数据结构草案:DDL/迁移骨架,标注幂等守卫。
|
||||
- 状态机表:Markdown 表格即可,复杂流程可配 sequence 图(见 [02-architecture.md](02-architecture.md) §3.2)。
|
||||
|
||||
### 3.3 交付物清单
|
||||
- 详细设计文档(本地草稿 `docs/plans/`(不入库,见 `.gitignore`),需入库随 PR 放 `docs/` 对应目录)
|
||||
- 详细设计文档入 `docs/v2/` 或相应业务目录,注明草案/定案和所覆盖需求编号。
|
||||
- 契约草案(类型/迁移/错误码表)
|
||||
- 测试映射表(为 ⑥ 验证做准备)
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
## 4. 轻量路径(小改动)
|
||||
|
||||
- 单接口小改:契约 + 边界 + 测试映射合并为设计文档中的 2-3 小节。
|
||||
- 触碰共享契约、迁移、状态机、硬件协议:必须完整走详细设计。
|
||||
- 触碰共享契约、迁移、状态机、模型工具与数据出口:必须完整走详细设计。
|
||||
|
||||
---
|
||||
|
||||
@@ -77,3 +77,5 @@
|
||||
- 输入:阶段 ① [01-requirement.md](01-requirement.md)、阶段 ② [02-architecture.md](02-architecture.md)
|
||||
- UI 相关设计拆到:阶段 ④ [04-ui-spec.md](04-ui-spec.md)
|
||||
- 实现时按此设计编码:阶段 ⑤ [05-implementation.md](05-implementation.md)
|
||||
|
||||
变更:XB-1.0 / 2026-09-28,按兴邦 Next.js + FastAPI 项目事实适配;稳定规则编号保留。
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
> **输出**:表面规格 + DESIGN.md(含 token)+ i18n 约束。
|
||||
> **进入下一阶段(⑤ 实现)**:状态机、动作权限、设计 token、i18n 全部定案。
|
||||
|
||||
> 适用判定:本阶段仅当改动拥有用户可见 UI(web 界面、Electron 窗口、设置面板、硬件设备界面)时强制;纯后端/网关/CLI 改动标记 `not applicable`。
|
||||
> 适用判定:本阶段仅当改动拥有用户可见 UI(项目工作台、评审页面、材料与配置界面、证据/模拟面板)时强制;纯后端/网关/CLI 改动标记 `not applicable`。
|
||||
|
||||
---
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
- [ ] 每个交付面有:页面骨架 + 组件粒度边界 + 完整状态机 + 动作×权限表
|
||||
- [ ] 每个 UI 提交/展示的字段能在规格 §2 找到(契约门)
|
||||
- [ ] 视觉 token(颜色/字号/间距/圆角/组件)有语义化来源,不出现临时发明的 `blue500` 类裸色
|
||||
- [ ] 全部 UI 文案走 i18n(本仓:`packages/web-ui/src/i18n/messages.ts`,zh-CN/en-US 双语),无硬编码用户可见字符串
|
||||
- [ ] 新版文案有统一维护方式、错误码映射和语言范围;当前主要中文组件内文案,统一key化方案待建设,不声称已有双语语言包
|
||||
- [ ] 可访问性约束写明:对比度(WCAG AA)、focus-visible、颜色不单独承载状态、reduced-motion
|
||||
- [ ] 异常态(加载/空/错误/禁用/提交中)有明确视觉与文案定义(对应规格 `E-*`)
|
||||
|
||||
@@ -42,9 +42,9 @@
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R-4.7 | **视觉事实源唯一**:有 UI 的项目维护唯一的视觉 token 事实源(本仓现状:`packages/web-ui/src/theme/tokens.css`,语义 token + CSS 变量,经 `styles.css` `@import` 消费;若将来建根级 `DESIGN.md` 则与之对齐);禁止在组件里临时发明颜色/间距/字号。 |
|
||||
| R-4.7 | **视觉来源明确**:先检查src/app/globals.css、src/components/xingbang/navigation.css和当前页面CSS;v2视觉契约在docs/v2/DESIGN.md,统一token实现待建设。避免新增互相冲突的裸色/间距,不顺手重构无关旧页。 |
|
||||
| R-4.8 | **语义 token 优先**:token 用语义角色(`primary`/`surface`/`danger`),不用调色板名(`teal-500`);组件 token 带状态(如 `button-primary-hover`、`text-input-focused`)。 |
|
||||
| R-4.9 | **token 可导出可防漂移**:token 能导出为 CSS 变量/主题,并用 lint/diff/单测检查漂移(本仓:`tokens.css` 变量 + `styles.test.ts` 等单测守卫;`useAppearance.ts` 归一化主题 id);"文件存在"不等于"被使用"(G-3)。 |
|
||||
| R-4.9 | **防漂移须执行**:新token统一来源需有实际消费和可运行检查。当前scripts/test_ui_readability.cjs是源码守卫,不是完整token导出检查;缺少机制列待办。 |
|
||||
| R-4.10 | **可访问性硬约束**:正文与 focus 态满足 WCAG AA 对比度;错误/成功/选中状态不得只靠颜色表达;支持 reduced-motion;表单与错误态有明确指引。 |
|
||||
| R-4.11 | **不强推框架外规范**:后端/CLI/纯数据项目标记 `not applicable`,不套用视觉契约。 |
|
||||
|
||||
@@ -52,9 +52,9 @@
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R-4.12 | 所有用户可见文案走 key 化翻译(本仓:`packages/web-ui/src/i18n/messages.ts`,扁平 key + `t(key, params?)`,key 按命名空间组织:`common.*`/`task.*`/`settings.*`/`shell.*`/`inspector.*`/`mode.*`);禁止硬编码中文/英文串。 |
|
||||
| R-4.13 | 多语言文案与 UI 状态同步维护;新增文案必须同时补齐既有语言包。 |
|
||||
| R-4.14 | 设备端/子窗口界面不做 i18n 决策,文案由宿主统一注入(避免每窗口维护语言状态)。 |
|
||||
| R-4.12 | 新版文案按业务域规划key并绑定错误码;实际文件位置和调用方法在UI设计阶段明确。当前仅有中文文案,不能凭空引用语言包;旧页面修复遵循最小范围。 |
|
||||
| R-4.13 | 已支持的语言与UI状态同步维护;增加语言需明确范围和验收,不因来源模板写有双语就扩充产品需求。 |
|
||||
| R-4.14 | API返回稳定错误码,前端统一映射业务文案;同源代理转发错误语义,不自行生成另一套判断或吞错。 |
|
||||
|
||||
---
|
||||
|
||||
@@ -72,7 +72,7 @@ Interaction 交互约束:URL 状态、选择集规则、确认对话
|
||||
Constraints
|
||||
```
|
||||
|
||||
> 模板参考:`vendor/better-harness/references/bootstrap/examples/frontend-web-spec.md` 的 §3(复用结构,内容必须基于本仓事实)。
|
||||
> 兴邦表面规格示例见 [v2 UI Spec](../v2/04-ui-spec.md),需求编号仍回链至对应规格。
|
||||
|
||||
### 3.2 DESIGN.md 结构
|
||||
|
||||
@@ -85,11 +85,11 @@ Markdown(人读) Overview / Colors / Typography / Layout / Elevat
|
||||
+ 每个 token 的"何时用 / 何时不用 / 防止什么 agent 错误"
|
||||
```
|
||||
|
||||
> 完整示例:`vendor/better-harness/case-studies/project-harness/design-md-complete-example.md`(结构性回退模板,数值必须替换为本仓已核实的来源)。若项目尚无 DESIGN.md:从现有代码/主题推断并标注"推断",未决品牌决策标记 `needs-design-decision`,禁止编造。
|
||||
> 参考 [v2 DESIGN.md](../v2/DESIGN.md)。已观察值注明CSS来源,推断标“推断”,未定品牌决策标needs-design-decision;候选契约未被CSS消费不能宣称视觉系统已统一。
|
||||
|
||||
### 3.3 交付物清单
|
||||
- 每个交付面的表面规格
|
||||
- `DESIGN.md`(若建)或其缺失项清单;本仓现状:视觉 token 事实源为 `packages/web-ui/src/theme/tokens.css`(含证据分级:Present / Structured / Token-ready / Agent-ready / Aligned / Backstopped)
|
||||
- `DESIGN.md`或缺失清单;现有来源为src/app/globals.css和业务CSS。记录Present/Structured/Token-ready/Aligned/Backstopped证据等级,不能跳级。
|
||||
- i18n key 清单(新增/变更)
|
||||
- UI 验收映射:表面规格的每条交互约束 ↔ 规格 `AC-xx` ↔ [06-validation.md](06-validation.md) 的测试点(组件/E2E)
|
||||
|
||||
@@ -114,3 +114,5 @@ Markdown(人读) Overview / Colors / Typography / Layout / Elevat
|
||||
|
||||
- 输入:阶段 ① [01-requirement.md](01-requirement.md) §3、阶段 ③ [03-detailed-design.md](03-detailed-design.md)
|
||||
- 验证:阶段 ⑥ [06-validation.md](06-validation.md)(UI 驱动平面与裁判分离约束)
|
||||
|
||||
变更:XB-1.0 / 2026-09-28,按兴邦 Next.js + FastAPI 项目事实适配;稳定规则编号保留。
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
### 1.2 完成条件(DoD)
|
||||
- [ ] 每个提交只做一件事(Conventional Commits),变更可逐行追溯到请求范围
|
||||
- [ ] 新行为有 colocated 测试(与源码同目录 `*.test.ts`,vitest;E2E 在 `e2e/`,playwright。本仓测试体系见 `docs/architecture/testing-architecture.md`)
|
||||
- [ ] 行为新增/修改有对应backend/test_*.py或适用前端行为测试;保留现有scripts/test_*.cjs守卫并明确其覆盖边界;不虚构已存在的E2E套件
|
||||
- [ ] 无未使用 import/变量/函数(由本次改动产生的孤儿已清理;存量死代码只提不改,G-4)
|
||||
- [ ] 变更矩阵已同步(见 §3.3):契约、文档、i18n、迁移、架构图
|
||||
- [ ] 本阶段自测(lint/typecheck/相关单测)全绿
|
||||
@@ -33,15 +33,15 @@
|
||||
| R-5.3 | **外科手术式改动**:只碰必须碰的;不顺手"改进"相邻代码/注释/格式;不重构没坏的东西;风格跟随现有代码。 |
|
||||
| R-5.4 | **规模红线**:新文件 ≤500 行;既有大文件只减不增;新增依赖必须先评估体积与必要性(依赖红线见仓库约定)。 |
|
||||
| R-5.5 | **状态持久化白名单**:新增受管写入路径须进白名单并说明;禁止绕过既有持久化/校验路径自行写文件。 |
|
||||
| R-5.6 | **小步提交**:一个提交一个意图;变更混杂时先拆分再提交(见 `skills/builtin/dk-commit` 的提交规范)。 |
|
||||
| R-5.6 | **小步提交**:一个提交一个意图;变更混杂时先拆分再提交(类型前缀+中文一句话,提交前自查diff)。 |
|
||||
|
||||
### 2.2 安全与副作用(实现期强制)
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R-5.7 | 所有副作用入口(文件写、命令执行、外发请求、硬件写、IPC)走统一受控路径,禁止平行执行路径。 |
|
||||
| R-5.7 | 所有副作用入口(文件写、命令执行、外发请求、数据导出、API)走统一受控路径,禁止平行执行路径。 |
|
||||
| R-5.8 | 项目目录写入/命令必须有归属校验 + 审计;凭据/配置保护区一律拒绝。 |
|
||||
| R-5.9 | 日志/输出禁止出现凭据任何片段(脱敏);禁止 `nodeIntegration: true`、禁止绕过 preload/安全边界暴露主机能力。 |
|
||||
| R-5.9 | 日志/输出不得含凭据;浏览器不能持有模型Key或数据库口令,业务预审不得继承通用聊天的终端/任意文件权限;材料指令不得扩大工具集合。 |
|
||||
| R-5.10 | 高危动作(删除、生产数据、外发、发布)默认拒绝或显式审批,先于副作用发生,且留审计(详见 [07-delivery.md](07-delivery.md))。 |
|
||||
|
||||
### 2.3 契约与同步
|
||||
@@ -61,11 +61,11 @@
|
||||
- colocated 测试(新行为 + 修复回归)
|
||||
- 变更同步产物(契约/迁移/文档/i18n)
|
||||
|
||||
### 3.2 提交规范(本仓沿用 `AGENTS.md` 规则 6 + Conventional Commits;生成建议见 `skills/builtin/dk-commit`)
|
||||
### 3.2 提交规范(根AGENTS.md + Conventional Commits)
|
||||
```text
|
||||
<type>(<scope>): <subject> # subject 简洁中文,≤50 字
|
||||
# 正文:英文完整内容 + `---` 分隔 + 中文完整内容
|
||||
# (不复述 diff;主分支是 build)
|
||||
# 必要正文说明验证与限制,不要求双语
|
||||
# 默认分支目前为Gitea main,操作前核对
|
||||
type: feat | fix | docs | refactor | test | chore | build
|
||||
```
|
||||
|
||||
@@ -73,13 +73,13 @@ type: feat | fix | docs | refactor | test | chore | build
|
||||
|
||||
| 变更 | 必须同步 |
|
||||
|---|---|
|
||||
| 跨进程契约 / IPC 通道 / 接口 | `packages/api/src/contracts.ts`(唯一入口)+ `docs/api/ipc-api-reference.md` + preload/handler 对齐(`src/main/ipc-alignment.test.ts` 拦截) |
|
||||
| 模块增删 / 职责变化 | `docs/architecture/codemap.md`(头部统计跑 `node scripts/repo-stats.mjs`,`docs-baseline.test.ts` 拦截)+ 架构文档 |
|
||||
| 数据结构 / 迁移 | 迁移文件(只追加,`packages/agent-sdk/src/state/migrations.ts`)+ `docs/architecture/data-model.md` |
|
||||
| UI 文案 / 状态机 / 组件 | i18n key(`packages/web-ui/src/i18n/messages.ts`)+ 视觉 token(`packages/web-ui/src/theme/tokens.css`)+ 表面规格 |
|
||||
| 主链路 / 安全边界 | `docs/architecture/flows.md` + 相关安全测试(tool-policy/tool-gate/redact) |
|
||||
| E2E 行为 / 运行方式 | E2E 测试与自动化文档(`docs/e2e/e2e-architecture-and-automation.md`)+ playwright |
|
||||
| 宿主形态 / 接入方式 | `docs/architecture/host-modes.md` |
|
||||
| API / SSE / 共享契约 | backend/contracts或明确的API模型owner + 前端调用方/同源代理 + 接口设计 + 契约测试 |
|
||||
| 模块增删 / 职责变化 | 实际调用关系 + docs/v2/02-architecture.md或对应架构文档,已实现与提案分开 |
|
||||
| 数据结构 / 迁移 | 追加带守卫的迁移 + 数据契约 + 幂等/版本兼容测试,旧表和生产数据保留 |
|
||||
| UI 文案 / 状态机 / 组件 | 文案与错误映射 + 实际CSS来源/视觉契约 + 表面规格 + UI测试 |
|
||||
| 主链路 / 安全边界 | 运行/经验/模型出口设计 + 权限、注入、跨域、证据与模拟隔离测试 |
|
||||
| E2E 行为 / 运行方式 | 实际浏览器测试入口和前后端启动说明;静态正则检查不能替代E2E |
|
||||
| 部署 / 数据源接入 | Compose与环境模板 + 部署文档 + config验证;真实数据出口另验 |
|
||||
|
||||
---
|
||||
|
||||
@@ -104,4 +104,6 @@ type: feat | fix | docs | refactor | test | chore | build
|
||||
|
||||
- 编码前确认设计:阶段 ③ [03-detailed-design.md](03-detailed-design.md)、阶段 ④ [04-ui-spec.md](04-ui-spec.md)
|
||||
- 自测通过后进入:阶段 ⑥ [06-validation.md](06-validation.md)
|
||||
- 提交与审查技能:`skills/builtin/dk-commit`、`skills/builtin/dk-review`
|
||||
- 提交与审查按根AGENTS和阶段⑥执行;本仓不依赖未安装的提交/评审技能。
|
||||
|
||||
变更:XB-1.0 / 2026-09-28,按兴邦 Next.js + FastAPI 项目事实适配;稳定规则编号保留。
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
- [ ] 每个实质改动映射到最小且覆盖它的项目检查(单测/契约/集成/E2E/视觉/迁移/打包之一),并在最后一次编辑后运行
|
||||
- [ ] 验证失败按"复现 → 定位(可归因的诊断)→ 因果假设 → 最小 owner 修复"链处理;重试不加诊断 ≠ 修复证据
|
||||
- [ ] 修复后在最终状态上**重跑同一检查**(或记录等价性理由)
|
||||
- [ ] 评审(dk-review 四维)完成:正确性/一致性/安全/测试,无未解决的阻塞项
|
||||
- [ ] 评审(正确性/一致性/安全/测试四维)完成:正确性/一致性/安全/测试,无未解决的阻塞项
|
||||
- [ ] 门禁结果与最终修订绑定(不是"跑过"而是"这个 revision 过了")
|
||||
|
||||
---
|
||||
@@ -62,22 +62,22 @@
|
||||
残余风险: 未覆盖范围、跳过守卫的用例、需人工确认项
|
||||
```
|
||||
|
||||
### 3.2 验证分层建议(本仓)
|
||||
### 3.2 验证分层与实际入口
|
||||
|
||||
| 层 | 内容 | 触发 |
|
||||
|---|---|---|
|
||||
| L0 静态 | typecheck(`npm run typecheck`:tsc --noEmit + 双 tsconfig) | 每次提交 |
|
||||
| L1 单测 | 组件/工具/逻辑(vitest,colocated `*.test.ts`,`npm test`) | 每次提交 |
|
||||
| L2 契约/守卫 | 跨进程契约对齐(`src/main/ipc-alignment.test.ts`)、迁移守卫(`migrations.test.ts`)、架构守卫(`architecture-guardrails.test.ts`)、docs 基线 | 触碰共享层/迁移 |
|
||||
| L3 集成 | 主进程+渲染、宿主装配 | 主链路 |
|
||||
| L4 E2E | `npm run test:e2e`(playwright,需先构建) | 关键用户流/发布前 |
|
||||
| L5 打包冒烟 | `build/ci-local.ps1`(Windows)/ `build/ci-local.sh`(macOS/Linux):干净安装+全量门禁+安装包+启动冒烟 | 发布前 |
|
||||
| L0 静态 | git diff --check;npm run build包含类型检查;文档链接/编号/事实检查 | 对应改动后 |
|
||||
| L1 单测 | 在backend工作目录用其venv执行python -m unittest discover -s . -p test_*.py -v;建议由verify统一执行 | 后端行为修改 |
|
||||
| L2 契约/守卫 | backend/test_assistant_components.py等已有测试与scripts/test_*.cjs;按新契约增加反例 | 契约/权限/页面规则修改 |
|
||||
| L3 集成 | API + services + 临时测试数据库/fixtures,禁依赖真实客户库 | 主链路 |
|
||||
| L4 E2E | 真实浏览器按本批用例操作并断言,记录实际入口/环境;当前未确认统一E2E套件 | 关键用户流 |
|
||||
| L5 打包冒烟 | Docker Compose config;获授权后独立资源上运行verify.py --docker,另做目标环境验收 | 发布前 |
|
||||
|
||||
> 本仓测试体系单一事实源:`docs/architecture/testing-architecture.md`;E2E 执行线见 `docs/e2e/e2e-architecture-and-automation.md`。验证要求按此落地,发现矩阵缺口在阶段 ⑧ 反馈。
|
||||
> 实际总入口为 `scripts/verify.py`:项目backend/venv执行,日志在test-evidence。当前没有package.json中的typecheck、test或test:e2e脚本,不得写成已执行。新版测试规划见 [v2验证](../v2/06-validation.md)。行为修改必须跑总入口,纯文档可用相关链接/编号/路径/diff检查。
|
||||
|
||||
### 3.3 交付物清单
|
||||
- 验证记录(含失败→修复→复验链)
|
||||
- 审查结论(dk-review 输出,阻塞项清零)
|
||||
- 审查结论(四维逐项记录;独立评审未完成须说明,不能自称已获他人批准)
|
||||
- 测试覆盖增量说明(新增测试对应的 AC/BR/E)
|
||||
|
||||
---
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
## 5. 轻量路径(小改动)
|
||||
|
||||
- 一行修复:对应单测 + 全量 typecheck + 该模块相关测试,记录即可。
|
||||
- 小行为修复:对应测试 + scripts/verify.py,保留完整日志;纯文档:链接、编号、事实与diff检查。
|
||||
- 任何改动都不得跳过 R-6.3/R-6.4(诊断与复验)与 R-6.7(门禁)。
|
||||
|
||||
---
|
||||
@@ -104,3 +104,5 @@
|
||||
- 输入:阶段 ⑤ [05-implementation.md](05-implementation.md)、规格 [01-requirement.md](01-requirement.md) 的 AC
|
||||
- UI 验证细则:阶段 ④ [04-ui-spec.md](04-ui-spec.md) §4
|
||||
- 通过后进入:阶段 ⑦ [07-delivery.md](07-delivery.md)
|
||||
|
||||
变更:XB-1.0 / 2026-09-28,按兴邦 Next.js + FastAPI 项目事实适配;稳定规则编号保留。
|
||||
|
||||
@@ -1,143 +1,69 @@
|
||||
# 阶段 ⑦ 交付与发布(Delivery & Release)
|
||||
# 阶段 ⑦ 交付与发布
|
||||
|
||||
> **定义**:让当前结果在**真实交付边界**被接受——真实的评审、必需的 CI、合并、发布——且高风险动作有风险匹配的审批、副作用有可用的回滚/恢复路径。本地测试与 agent 一句"done"属于阶段 ⑥,不属于交付。
|
||||
> **输入**:⑥ 已通过的实现(验证记录 + 门禁结果 + 审查结论)。
|
||||
> **输出**:已接受的修订 + 构建/安装包 + 发布记录 + 审计。
|
||||
> **进入下一阶段(⑧ 学习与沉淀)**:交付边界接受完成、发布记录落档。
|
||||
输入:验证通过的修订及证据。输出:实际目标分支/环境接受记录、产物和回滚路径。备份、合并、镜像推送、云端部署是四个不同边界。
|
||||
|
||||
---
|
||||
## 1. 要求与DoD
|
||||
|
||||
## 1. 要求(Requirements)
|
||||
- [ ] 明确本次是源码备份、文档交付、代码合并还是部署,不能混称上线。
|
||||
- [ ] 验证绑定最终源码修订;未通过时不发布镜像。
|
||||
- [ ] 外部/生产/共享状态变更有任务授权及可核验记录;已有授权无需重复确认。
|
||||
- [ ] 分支/镜像/数据资源有明确恢复路径和owner。
|
||||
- [ ] 目标环境实际观测成功;未观测项标Unobserved。
|
||||
|
||||
### 1.1 进入条件
|
||||
- 阶段 ⑥ 全部质量门通过,无未解决阻塞项。
|
||||
## 2. 规则
|
||||
|
||||
### 1.2 完成条件(DoD)
|
||||
- [ ] 真实接受边界(合并/发布/部署)绑定到**当前修订**,有修订级决策证据(不是"跑过 CI"而是"这个 revision 合并了/发布了")
|
||||
- [ ] 每个高风险动作(发布、删除、生产数据、外发、签名)在副作用**之前**获得所需审批并留审计
|
||||
- [ ] 实际副作用有风险匹配的回滚/恢复路径(回滚、恢复、重试、补偿、幂等重放、安全中止之一)且含 owner 与后置条件
|
||||
- [ ] 发布记录(版本、变更、产物、验证)落档
|
||||
|
||||
---
|
||||
|
||||
## 2. 规则(Rules)
|
||||
|
||||
### 2.1 接受边界
|
||||
|
||||
| 编号 | 规则 |
|
||||
| ID | 规则 |
|
||||
|---|---|
|
||||
| R-7.1 | **真实边界证据**:把真实接受决策绑定到当前修订与目标分支/环境。本地测试、自测、agent 完成声明均不是交付证据;外部边界打不开时记 `Unobserved`,不编造缺失的 PR/部署。 |
|
||||
| R-7.2 | **合并路径**:改动经默认分支可比较的 diff 进入(分支/PR 或等价受控路径);直接在默认分支开发、无可评审 base diff 属交付缺陷。 |
|
||||
| R-7.3 | **必需检查绑定**:合并前必需检查对最终修订全绿,且与本地命令一致或有明确差异说明。 |
|
||||
| R-7.1 | 真实边界证据绑定revision:远程分支SHA、合并记录、镜像摘要、目标健康检查分别记录;本地通过不能冒充部署 |
|
||||
| R-7.2 | 改动通过可比较的分支/PR进入默认分支;本项目当前main,操作前核对;不直接覆盖main |
|
||||
| R-7.3 | 必需检查绑定最终源码修订;验证之后有行为变化须重验相关检查 |
|
||||
| R-7.4 | 删除、生产数据、模型外发、镜像发布和部署须在副作用前具有相应用户/策略授权;不足时明确具体阻塞点 |
|
||||
| R-7.5 | 审计记录谁、何时、何操作、作用资源、授权来源和结果;日志不含凭据 |
|
||||
| R-7.6 | 无高风险操作的项标N/A并说明;纯文档不能被误当成必须部署 |
|
||||
| R-7.7 | 恢复方式绑定具体提交、镜像和数据资源,owner与恢复后检查明确 |
|
||||
| R-7.8 | 可用性以安全验证支持,不能为证明回滚去破坏当前运行;未演练标未演练 |
|
||||
| R-7.9 | 失败/超时也须可恢复;代码回退不等于数据恢复,迁移不得依靠删库回退 |
|
||||
|
||||
### 2.2 高风险审批
|
||||
## 3. 本项目执行路径
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R-7.4 | 破坏性/特权/外部/不可逆/共享状态/凭据/发布/生产动作,在效果发生**前**取得所需的人或策略 owner 决策;安全拒绝 + 可用升级路径是正确的控制行为,不是失败。 |
|
||||
| R-7.5 | 高风险动作留审计:谁、何时、什么、批准人/策略、审计引用。 |
|
||||
| R-7.6 | 确认无高风险动作时记 `N/A`(须经检查证明),不允许无理由的 N/A 阻塞结果。 |
|
||||
### 3.1 源码备份
|
||||
|
||||
### 2.3 回滚与恢复
|
||||
先git status/log确认用户改动→检查新增凭据/运行数据→显式暂存选定文件→在codex/备份分支提交→推送已确认origin→git ls-remote比对SHA。备份可保存未完成状态,必须注明测试状态,不充当发布候选。
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R-7.7 | 每个实际副作用有风险比例匹配的回滚/恢复路径,且绑定到受影响资源/入口/owner/后置条件。 |
|
||||
| R-7.8 | 回滚/恢复须可验证(安全模拟、演练、可比的保留任务或实际恢复结果);禁止仅为提高证据强度而执行破坏性回滚。 |
|
||||
| R-7.9 | 恢复路径对失败与超时也要可运行(清理不得只在成功路径执行)。 |
|
||||
不提交.env、server-deploy.conf、.docker-codex、会话/数据库/日志、Office锁文件;代码内样例须标演示。已跟踪文件不因.gitignore自动移出历史,迁移时另外检查。恢复用新目录克隆指定分支,不重置用户现有目录。
|
||||
|
||||
---
|
||||
### 3.2 合并前验证
|
||||
|
||||
## 3. 输出规范
|
||||
仓库根目录使用项目虚拟环境:
|
||||
|
||||
### 3.1 发布流程(本仓)
|
||||
|
||||
> 发布链唯一权威:`docs/release-process.md`(ci-local 门禁 / release.mjs / 四包发布 / pack-audit / install-acceptance / 签名 / OTA);签名细节 `docs/release-signing.md`;本地最短路径 `docs/local-build-quickstart.md`。以下为阶段 ⑦ 在本仓的落地步骤,任一步非零即中止。
|
||||
|
||||
```text
|
||||
Step 0 离线门禁(提交/合并/发布前必过)
|
||||
Windows: build\ci-local.ps1 · macOS/Linux: build/ci-local.sh → run-local-ci.mjs 八步:
|
||||
① 删 release/ → ② npm ci 离线干净安装 → ③ npm run ci:check
|
||||
(build:verify:runtime → vitest 全量 → build)→ ④ playwright E2E(不重构建)
|
||||
→ ⑤ electron-builder --publish never 打安装包 → ⑥ package:audit
|
||||
(asar 禁 dist/mac-*、release/、.map/.d.ts/.ts;体积预算 140 MiB)
|
||||
→ ⑦ verify-packaged-app(extraResources 五件断言 + 真启动 5s 冒烟)
|
||||
→ ⑧ write-build-report(逐产物 SHA-256 → build-report + SHA256SUMS)
|
||||
|
||||
Step 1 版本与变更(SDK 四包发布时)
|
||||
node scripts/release.mjs --registry <内网源URL> [--bump patch|minor|major]
|
||||
[--skip-publish] [--dry-run]
|
||||
九步编排:install → build(拓扑序 api→agent-sdk→account→web-ui)
|
||||
→ sync-web-ui-dist(dist/renderer → packages/web-ui/dist,断言 index.html 字节一致)
|
||||
→ test → pack-audit → bump(四包+根 lockstep,dk-* 互引钉新版,再生 lockfile)
|
||||
→ publish-sdks.mjs 逐包 npm publish 内网源 → install-acceptance
|
||||
→ npm run package
|
||||
日常验证用 --dry-run --skip-publish(shouldPublish 独立纯函数,零副作用有测试断言)
|
||||
|
||||
Step 2 构建安装包 + 产物审计
|
||||
npm run package = build + electron-builder --publish never + package:audit + pack:sdks
|
||||
审计(scripts/pack-audit.mjs):tarball 顶层 ⊆ {dist, bin, README, LICENSE, package.json};
|
||||
零测试产物;dk-account 防误发(registry 锁内网 GitLab);公开三包无 /account/ 路径泄漏
|
||||
安装验收(scripts/install-acceptance.mjs):spawn dk-web → listening banner →
|
||||
GET /health 200 + GET / 200 含 <div id="root"> + 入口 JS 200
|
||||
|
||||
Step 3 签名与公证(对外发布 / CI 打 Git tag 触发)
|
||||
build/sign-local.sh(mac/Linux)/ build/sign-local.ps1(Windows)→ run-signing-build.mjs
|
||||
(仅 darwin/win32;保留 APPLE_*/CSC_* 变量且不设断网)
|
||||
npm ci → build → electron-builder --config.forceCodeSigning=true → package:audit
|
||||
→ 验签:mac codesign --verify --deep --strict;win Get-AuthenticodeSignature 双件 Valid
|
||||
→ 有 APPLE_APP_SPECIFIC_PASSWORD 时 DMG 公证 + stapler 装订 → 冒烟 + 构建报告
|
||||
|
||||
Step 4 OTA 更新(走 OTA 通道时)
|
||||
npm run ota:manifest(scripts/ota/generate-manifest.mjs):扫 release/ 安装包算 SHA-256
|
||||
→ scripts/ota/latest.json;强制单一版本、单平台唯一;缺平台填全 0(运行侧 A6 守卫拒绝)
|
||||
|
||||
Step 5 发布记录落档
|
||||
build-report + SHA256SUMS(产物校验值)· 版本与变更(release.mjs bump)·
|
||||
验证摘要(⑥ 门禁结果绑定修订)· 审批人/审计引用(高风险动作)
|
||||
```powershell
|
||||
.\backend\venv\Scripts\python.exe scripts/verify.py
|
||||
```
|
||||
|
||||
> 合并/发布边界绑定:改动经默认分支(`build`)可比较的 diff 进入;必需检查(ci-local 全链)对最终修订全绿。本仓无 CHANGELOG/RELEASE_NOTES 文件,版本与变更由 `scripts/release.mjs` 编排。
|
||||
报告位于test-evidence/<run-id>/REPORT.md。PR至少一人评审,目标分支和最终SHA明确。Gitea runner和必需检查未核验时如实说明,不借GitHub YAML宣称已有Gitea门禁。
|
||||
|
||||
### 3.2 交付记录模板
|
||||
### 3.3 镜像与部署
|
||||
|
||||
```text
|
||||
目标边界: 分支 / 环境 / 发布通道
|
||||
修订绑定: 合并/发布的 revision 与决策证据(PR 号 / 发布记录)
|
||||
高风险动作: 动作 | 审批人/策略 | 时间 | 审计引用
|
||||
回滚路径: 受影响资源 | 路径 | owner | 后置条件 | 验证方式
|
||||
验证摘要: ⑥ 的门禁结果绑定
|
||||
残余风险: 未覆盖边界、需人工确认项
|
||||
```
|
||||
现有入口:Dockerfile、docker-entrypoint.sh、docker-compose.yml、deploy/docker-compose.aliyun.yml;发布脚本scripts/publish-acr.ps1和scripts/publish-acr.sh;部署脚本scripts/deploy-aliyun.sh。
|
||||
|
||||
### 3.3 交付物清单
|
||||
- 合并/发布证据(绑定修订)
|
||||
- 构建产物 + 审计记录(build-report / SHA256SUMS / package:audit 结果)
|
||||
- 发布记录(版本/变更/验证/审批)
|
||||
- 回滚路径文档(高风险动作必填)
|
||||
只有授权发布时才运行。发布前复查脚本参数与目标,因为当前配置是旧版资源。先verify→构建→使用不可变Git标签和镜像摘要→推ACR→目标拉取→Compose up→检查前端、/api/xingbang/health和关键业务操作→保存服务器结果。实际脚本若不足以执行某门禁,应补齐并测试后再宣称机制成立。
|
||||
|
||||
---
|
||||
当前云端Compose仅绑定127.0.0.1;保持授权访问边界,公网开放需要另行定义身份、TLS和访问控制。使用示例环境文件准备实际配置,密钥经受控渠道配置;文档不存真实值。
|
||||
|
||||
## 4. 反模式
|
||||
### 3.4 v2隔离
|
||||
|
||||
- **本地验证冒充交付**:只有本地测试支持交付声明。
|
||||
- **先斩后奏的审批**:效果发生了才补审批,或自查自批。
|
||||
- **回滚路径悬空**:有"看起来像回滚"的文件/命令,但连不上实际资源/修订/权限/后置条件(文件名匹配不算证据)。
|
||||
- **只走发布后自动化**:仅在推到默认分支/发布时跑的检查不算接受时验证。
|
||||
- **无边界的高危可达性**:默认路径能触达生产/凭据/破坏性命令而无边界。
|
||||
v2必须独立目录、Compose项目、容器名、卷、镜像和宿主端口。未完成隔离时不得直接用旧版Compose部署新版。数据库迁移先备份并演练;不运行down -v或清理脚本删除旧业务数据。配置和脚本存在不代表隔离已验证。
|
||||
|
||||
---
|
||||
## 4. 交付记录模板
|
||||
|
||||
## 5. 轻量路径(小改动)
|
||||
目标边界;源码SHA/分支;验证命令与日志;镜像标签/摘要(如适用);环境与数据资源;授权来源;接受证据;回滚方式与owner;尚未验证的范围。通过率/模型效果须有业务评估,不能写成部署成功的附带结论。
|
||||
|
||||
- 内部改动:合并路径 + 必需检查即可,无发布/回滚部分(记 N/A 需检查证明)。
|
||||
- 任何触达发布/生产/凭据的动作:审批与审计条款不可省略。
|
||||
## 5. 轻量路径
|
||||
|
||||
---
|
||||
纯文档:链接/编号/格式/事实检查、独立提交、所需远程备份核验;镜像/部署N/A。源码恢复快照记录原样保留的检查失败,但不能因此发布。行为变更仍执行阶段⑥和AGENTS规定的verify。
|
||||
|
||||
## 6. 相关文档
|
||||
|
||||
- 输入:阶段 ⑥ [06-validation.md](06-validation.md)
|
||||
- 发布链唯一权威与签名:`docs/release-process.md`、`docs/release-signing.md`(本仓无 CHANGELOG/RELEASE_NOTES 文件,版本与变更由 `scripts/release.mjs` 编排)
|
||||
- 本地/CI 补充:`docs/local-build-quickstart.md`、`docs/ci-runner-setup.md`、`docs/architecture/reproducible-build-baseline.md`
|
||||
- 完成后进入:阶段 ⑧ [08-learning.md](08-learning.md)
|
||||
[验证](06-validation.md) · [学习](08-learning.md) · [当前部署和Gitea](../v2/07-deployment-and-gitea.md) · [本次交付](../v2/10-delivery-record.md)。
|
||||
|
||||
变更:XB-1.0 / 2026-09-28,改为Gitea+Docker+ACR/ECS流程,未执行云端部署。
|
||||
|
||||
@@ -53,10 +53,10 @@
|
||||
| 捕获类型 | 落点(本仓) |
|
||||
|---|---|
|
||||
| 流程/阶段缺陷 | 本目录对应阶段文档(带版本变更记录) |
|
||||
| 代码事实/架构决策 | `docs/architecture/`(architecture-overview / codemap / flows / data-model 等基线)、ADR |
|
||||
| 代码事实/架构决策 | docs/v2/02-architecture.md与09-decisions.md,或对应已存在业务文档 |
|
||||
| 重复过程/命令 | 脚本、`scripts/`、技能(`skills/`) |
|
||||
| 测试缺口 | `docs/architecture/testing-architecture.md`(测试体系单一事实源) |
|
||||
| 长期记忆 | agent 记忆系统 / 项目 memory(本仓:`docs/memory/` 本地工作文档与记忆架构,不入库) |
|
||||
| 测试缺口 | docs/v2/06-validation.md、backend/test_*.py与相关scripts检查;待实现不标通过 |
|
||||
| 长期记忆 | 工程决策入库docs;业务经验通过assistant_experiences治理;会话/真实案例/凭据不因沉淀而提交Git |
|
||||
|
||||
### 3.3 交付物清单
|
||||
- 学习捕获记录(模板一份,可并入交付总结)
|
||||
@@ -86,3 +86,5 @@
|
||||
|
||||
- 输入:阶段 ⑦ [07-delivery.md](07-delivery.md) 及全程证据
|
||||
- 流程总览与变更记录:[README.md](README.md)
|
||||
|
||||
变更:XB-1.0 / 2026-09-28,按兴邦 Next.js + FastAPI 项目事实适配;稳定规则编号保留。
|
||||
|
||||
@@ -1,84 +1,63 @@
|
||||
# Project Process — DK Forge(pi-desktop)开发流程规范
|
||||
# Project Process — 兴邦金租 AI 评审平台开发流程
|
||||
|
||||
> **本文档是本仓库项目开发的强制流程**。做任何项目需求(新功能、修复、重构、UI 改动、IPC/契约变更、发布)时,都必须按本流程的阶段执行:进入每个阶段先读对应章节,满足**要求**、遵守**规则(Rule)**、按**输出规范**产出交付物,检查清单全过才算完成本阶段。
|
||||
> 本目录是 mini-OpenClaw / 兴邦 AI 预审 v2 的强制开发流程。进入每个阶段先读对应章节,以代码、测试和真实环境证据判断完成状态。
|
||||
|
||||
- 版本:v1.2 · 2026-09-04
|
||||
- 适用范围:本仓库(`pi-desktop`,发布名 **DK Forge**)全部功能开发,包括 Electron 宿主(`src/main/`)、renderer SPA(`packages/web-ui/`)、服务主体与 SDK 包(`packages/agent-sdk` 等)、E2E 与发布。仓库硬约束以 `AGENTS.md` 为准,本文档是执行流程(不与其冲突)
|
||||
- 来源:本规范由既有工程规则体系沉淀提炼(spec-structure / Agent Work Loop / Software Fluency / DESIGN.md Contract / Harness Engineering,规则参考 `vendor/better-harness/`),并按本仓技术栈(Electron + Node.js + React + TypeScript strict ESM monorepo)与 `AGENTS.md` 既有约定适配(v1.1:清除上游仓库残留引用,对齐本仓目录/契约/测试/发布事实)
|
||||
- 语言约定:流程文档正文用中文;标识符、类型、API、命令、文件路径一律用英文
|
||||
版本:XB-1.0 · 2026-09-28。适用技术:Next.js / React / TypeScript 前端,FastAPI / Python 后端,Agent 与工具、业务数据和 Docker 部署。根 [AGENTS.md](../../AGENTS.md) 是规则统一入口;[适配记录](XINGBANG-ADAPTATION.md)说明本项目实际落点及尚未建设的机制。
|
||||
|
||||
---
|
||||
来源规范已备份在 Gitea 提交 4d5a420,本目录正文已按用户要求直接适配兴邦。中文用于正文,类型、API、路径、命令使用英文。旧系统运行事实和新版设计草案必须区分。
|
||||
|
||||
## 1. 流程全景(八个阶段)
|
||||
## 1. 八阶段流程
|
||||
|
||||
```text
|
||||
① 需求与规格 ─→ ② 架构设计 ─→ ③ 详细设计 ─→ ④ UI Spec ─→ ⑤ 实现
|
||||
│
|
||||
⑥ 验证与质量门 ←─────────────────────────────────────┘
|
||||
│
|
||||
⑦ 交付与发布 ─→ ⑧ 学习与沉淀
|
||||
① 需求与规格 → ② 架构设计 → ③ 详细设计 → ④ UI Spec → ⑤ 实现
|
||||
↓
|
||||
⑧ 学习与沉淀 ← ⑦ 交付与发布 ← ⑥ 验证与质量门
|
||||
```
|
||||
|
||||
| 阶段 | 文档 | 一句话定义 | 核心输出 |
|
||||
|---|---|---|---|
|
||||
| ① 需求与规格 | [01-requirement.md](01-requirement.md) | 把意图变成一份"实现者无需猜"的规格(scope + 规则 id + 验收标准) | 规格文档(BR/E/AC 编号) |
|
||||
| ② 架构设计 | [02-architecture.md](02-architecture.md) | 定分层、模块边界、数据流与关键技术决策 | 架构文档 + ADR + 架构图 |
|
||||
| ③ 详细设计 | [03-detailed-design.md](03-detailed-design.md) | 把架构落到可实现的接口、数据结构、状态机与异常处理 | 详细设计文档 + 接口/数据契约 |
|
||||
| ④ UI Spec | [04-ui-spec.md](04-ui-spec.md) | 定义每个交付面的 UI 规则与约束(骨架/状态机/动作权限 + 设计系统 token) | DESIGN.md / 表面规格 / i18n 约束 |
|
||||
| ⑤ 实现 | [05-implementation.md](05-implementation.md) | 小步、可验证、范围受控地把设计变成代码 | 代码 + colocated 测试 + 变更同步 |
|
||||
| ⑥ 验证与质量门 | [06-validation.md](06-validation.md) | 用最小且相关的检查验证最终改动,失败可诊断、修复后复验 | 测试/门禁/审查记录 |
|
||||
| ⑦ 交付与发布 | [07-delivery.md](07-delivery.md) | 在真实交付边界被接受,高风险有审批,可回滚 | 构建产物 + 发布记录 + 审计 |
|
||||
| ⑧ 学习与沉淀 | [08-learning.md](08-learning.md) | 识别重复工作与熵增,沉淀可复用改进并长期验证 | 学习捕获(docs/skills/memory) |
|
||||
| 阶段 | 章节 | 兴邦产物 |
|
||||
|---|---|---|
|
||||
| ① | [需求规格](01-requirement.md) | URD、BR/E/AC规格、范围与未决项 |
|
||||
| ② | [架构](02-architecture.md) | 页面/API/service/工具/存储边界,主审与经验架构,ADR |
|
||||
| ③ | [详细设计](03-detailed-design.md) | Pydantic/API/事件契约、状态机、权限、迁移和异常 |
|
||||
| ④ | [UI Spec](04-ui-spec.md) | workbench表面规格、状态和动作权限、视觉与文案约束 |
|
||||
| ⑤ | [实现](05-implementation.md) | 最小代码、对应测试、契约与文档同步 |
|
||||
| ⑥ | [验证](06-validation.md) | 项目虚拟环境测试、前端构建、Compose校验和完整证据 |
|
||||
| ⑦ | [交付](07-delivery.md) | Gitea修订核验、评审、镜像/部署记录及可恢复路径 |
|
||||
| ⑧ | [沉淀](08-learning.md) | 决策、缺口与可复用改进,长期效果单独验证 |
|
||||
|
||||
> **规模适配**:小改动(一行修复、文案调整)不必产出全部文档——规格/设计可合并为短说明(见各阶段"轻量路径")。但**要求与规则始终有效**,越级必须有理由并记录。
|
||||
小改动可以走各章轻量路径,合并规格/设计但不省略验收。阶段DoD没有证据时保持未完成;可以记录后续候选方案,不得把草案当作门禁已通过而开始业务实现。
|
||||
|
||||
---
|
||||
## 2. 全局规则
|
||||
|
||||
## 2. 全局规则(所有阶段适用)
|
||||
- **G-1 唯一事实源**:契约定义归其明确owner。现有项目业务模型在 backend/contracts/project_assistant.py,部分请求模型仍在 backend/api;新增/变更契约必须明确归属并同步消费者。v2拟建立统一Pydantic→OpenAPI→前端类型链,当前未实现。不能把拟议路径写成既成事实。
|
||||
- **G-2 可追溯**:BR/E/AC编号稳定,只追加不重排;每个行为、异常都有验收,撤销标withdrawn。
|
||||
- **G-3 配置不等于机制**:文件、技能、流水线配置存在不代表实际使用;结论须有调用/测试/环境证据。
|
||||
- **G-4 范围受控**:改前读调用方,前后端字段联动检查,保留用户已有改动和已合并页面;无关问题只记录。
|
||||
- **G-5 小步可恢复**:大改前保留恢复点;每批可验证;不删除工作区、真实数据或旧生产资源来图方便。
|
||||
- **G-6 机械约束优先**:权限、证据、域隔离、模型出口、模拟隔离和契约等可验证规则须有测试,文档不能替代。
|
||||
- **G-7 文档同步**:改接口/状态/数据/部署同步对应设计、用例和运行说明;事实来源与规划分开。
|
||||
- **G-8 提交与评审**:Conventional Commits类型+中文一句话;codex/功能分支;默认分支目前为Gitea main,操作前核对;PR附验证证据并至少一人评审。备份不是合并或发布。
|
||||
|
||||
以下规则跨阶段生效,任何阶段不得违反:
|
||||
## 3. 兴邦业务约束
|
||||
|
||||
- **G-1 唯一事实源**:跨进程/跨模块的类型与契约只定义一处(本仓:`packages/api/src/contracts.ts`),宿主与各包只 `import type`,禁止本地镜像。文档不覆盖代码,代码与测试是运行时事实。
|
||||
- **G-2 可追溯**:一切行为、规则、异常、验收标准都有稳定 id(如 `BR-01`、`E-01`、`AC-01`)。id 只追加不重排;废弃时标记 withdrawn,保留编号。
|
||||
- **G-3 配置≠行为**:存在一个文件/命令/规则 ≠ 它被使用。任何"机制存在"的结论必须有打开的证据(被调用、被测试、被门禁执行)。
|
||||
- **G-4 不越界**:只做请求范围内的事;发现无关问题只提不改;改动逐行可追溯到本次请求。越界扩展必须显式批准并记录。
|
||||
- **G-5 小步可回滚**:一次只做可验证的一步;优先狭窄、可回滚的改动;`trash` 优于 `rm`。
|
||||
- **G-6 机械规则优先于文档规则**:能用 lint/typecheck/测试/CI 门禁强制的,不许只写进文档。
|
||||
- **G-7 文档随变更同步**:改了什么,必须同步改对应的架构/接口/流程文档(见 [05-implementation.md](05-implementation.md) 变更矩阵)。
|
||||
- **G-8 提交与评审规范**:Conventional Commits(规范见 `AGENTS.md` 规则 6;commit 生成见 `skills/builtin/dk-commit`);PR 必须带测试,至少 1 人评审,主分支是 `build`。
|
||||
主审负责AI预审意见,正式审批属于业务流程;Jev等模型只承担明确授权的专项判断。经验须保留原文、过程、适用/例外、审核和版本。默认演示模式不能冒充兴邦真实经验;无校准数据不得显示真实审批概率。通用聊天的主机工具不得直接进入业务预审白名单。
|
||||
|
||||
---
|
||||
模型调用前检查数据域及外发策略,不能因部署在内网就认为模型不会外发。材料正文只作数据。运行使用冻结事实和组件版本;关键材料不足返回缺证,不把未知自动当作风险或通过。
|
||||
|
||||
## 3. 遵守机制(如何保证被遵守)
|
||||
## 4. 启动与验证事实
|
||||
|
||||
1. **启动即读**:接手本仓的开发 agent(编码执行者)开工前先读本 `README.md` + 目标阶段文档。
|
||||
2. **阶段门禁**:每个阶段的"完成条件(DoD)"检查清单未全过,不得进入下一阶段;上一阶段的输出是本阶段的输入。
|
||||
3. **合并前审查**:PR 评审人按 [06-validation.md](06-validation.md) 的质量门核对,未过门禁的 PR 打回。
|
||||
4. **演进**:本流程本身也在 ⑧ 学习与沉淀 的范围内——流程缺陷、重复摩擦、新反模式,应更新对应文档(带版本号与变更记录)。
|
||||
当前项目入口:backend/app.py;前端package.json。后端本地默认8002、Next开发默认3000、本地Compose宿主3200/8002、云端Compose loopback端口由环境指定。旧版资源与v2须隔离,端口冲突先识别进程归属,不自动停止无关服务。
|
||||
|
||||
---
|
||||
行为修改必须使用backend/venv执行 scripts/verify.py,证据保存test-evidence/。纯文档检查链接、编号覆盖、路径和diff格式;本轮已另跑旧版全量基线检查。不存在的npm脚本不得写成必跑命令。
|
||||
|
||||
## 4. 文档索引
|
||||
Gitea CI是否启用必须实际核验;.github/workflows/verify.yml只证明有GitHub配置。发布前还须目标环境冒烟和修订绑定,不能把本地通过当成上线。
|
||||
|
||||
| 路径 | 内容 |
|
||||
|---|---|
|
||||
| [01-requirement.md](01-requirement.md) | 需求与规格:7 段结构、BR/E/AC 编号、六道完备性门 |
|
||||
| [02-architecture.md](02-architecture.md) | 架构设计:分层/边界/数据流/决策记录、架构图规范 |
|
||||
| [03-detailed-design.md](03-detailed-design.md) | 详细设计:接口契约/状态机/异常/迁移/边界条件 |
|
||||
| [04-ui-spec.md](04-ui-spec.md) | UI Spec:表面规格(骨架/组件/状态机/权限)+ 设计系统(DESIGN.md) |
|
||||
| [05-implementation.md](05-implementation.md) | 实现:编码规则、规模红线、变更矩阵、自测 |
|
||||
| [06-validation.md](06-validation.md) | 验证与质量门:分层验证、失败诊断与复验、评审 |
|
||||
| [07-delivery.md](07-delivery.md) | 交付与发布:构建/签名/发布记录/回滚 |
|
||||
| [08-learning.md](08-learning.md) | 学习与沉淀:循环工程、知识捕获、长期验证 |
|
||||
| **templates/**(模板库) | 产品/文档模板:**[URD-Template.md](templates/URD-Template.md)**(用户需求文档模板,产品级需求描述,软件项目通用;[HTML 看板](templates/URD-Template.html)) |
|
||||
## 5. 模板与新版入口
|
||||
|
||||
**快速开始**:新需求 → 读 [01-requirement.md](01-requirement.md);涉及 UI → 同时读 [04-ui-spec.md](04-ui-spec.md);改动进入实现前 → 过 [01-requirement.md](01-requirement.md) 的完备性门 + [03-detailed-design.md](03-detailed-design.md) 的契约检查;提交前 → 过 [06-validation.md](06-validation.md) 门禁。
|
||||
|
||||
---
|
||||
- [URD Markdown模板](templates/URD-Template.md) / [HTML阅读版](templates/URD-Template.html)。
|
||||
- [兴邦v2文档入口](../v2/README.md)、[规格](../v2/01-requirements.md)、[验证](../v2/06-validation.md)、[部署/Gitea](../v2/07-deployment-and-gitea.md)。
|
||||
- 日常规则以本目录为准,不能为了适配文档顺手升级框架、修改业务阈值或重构全仓。
|
||||
|
||||
## 变更记录
|
||||
|
||||
- v1.3(2026-09-05):新增 §4 模板库索引——`templates/URD-Template.md`(URD 模板,含使用说明/编号规则/章节结构)及其 HTML 看板;模板为软件项目产品级需求文档的通用起点(输入到阶段 ①)。
|
||||
- v1.2(2026-09-04):阶段 ⑦ 发布流程按本仓真实编译打包链路重写——离线门禁(ci-local 八步)→ release.mjs 九步编排 → pack-audit/install-acceptance → sign-local 签名公证 → OTA manifest,全部对齐 `docs/release-process.md`。
|
||||
- v1.1(2026-09-04):适配本仓(pi-desktop / DK Forge)事实——清除上游仓库残留(decokee-deck / Vue2 / `src/shared` / CONTRIBUTING 等引用),目录、契约、测试、发布与文档引用对齐 `AGENTS.md`。
|
||||
- v1.0(2026-08-16):初始版本,基于既有工程规则体系建立八阶段流程。
|
||||
XB-1.0(2026-09-28):按用户要求直接改为兴邦项目规范;保留八阶段及稳定规则编号,替换不适用的目录、测试、契约和发布要求。来源原文可从备份提交恢复,不再要求开发者自行映射。
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
# 兴邦流程适配记录与当前事实
|
||||
|
||||
版本:XB-1.0 · 2026-09-28。
|
||||
|
||||
## 1. 本次处理
|
||||
|
||||
用户要求直接将流程改成适用于兴邦的版本。当前README、01–08正文和URD模板已适配,开发人员按正文执行即可,不必自行翻译来源项目特例。原始规范保存在Gitea提交4d5a420,可按路径比对和恢复。
|
||||
|
||||
根AGENTS是统一入口。本记录说明映射依据和仍待建设的机制,不另立第二套规则。用户明确指令优先;本仓硬约束与流程通用要求同时遵守。
|
||||
|
||||
## 2. 已核对的落点
|
||||
|
||||
| 内容 | 当前事实 | 新版拟议 / 限制 |
|
||||
|---|---|---|
|
||||
| 页面与代理 | src/app、src/components/xingbang、src/app/api/core、src/app/api/risk-agent | 先查workbench合并现状,不恢复旧独立页 |
|
||||
| API与业务 | backend/app.py、backend/api、backend/services | 业务service不能反向依赖UI;新领域不堆巨大service |
|
||||
| 契约 | backend/contracts/project_assistant.py及部分API请求模型 | prescreen.py与OpenAPI类型生成待实现;不能宣称当前全量统一 |
|
||||
| Agent与工具 | backend/graph、backend/tools、assistant_model.py | 专业预审不继承通用终端和任意SQL权限 |
|
||||
| 数据与经验 | assistant_store.py、assistant_experiences.py、fixtures | 已有经验治理,不代表拥有真实客户经验 |
|
||||
| 测试 | backend/test_*.py、scripts/test_*.cjs、scripts/verify.py | UI源码断言不是浏览器端到端测试 |
|
||||
| 视觉与文案 | globals.css、业务CSS和组件内中文文案 | 统一token和key化文案链待建立,不凭空引用文件 |
|
||||
| Git | origin为内网Gitea,默认main,另有github-backup | 当前只备份origin;Gitea Actions未核验 |
|
||||
| 部署 | Dockerfile、Compose、ACR/ECS脚本 | v2资源需独立;本轮未部署 |
|
||||
|
||||
## 3. 保留与调整
|
||||
|
||||
保留:八阶段、G-1–8、BR/E/AC追溯、R规则编号、阶段门、最小改动、验证失败诊断、修订绑定和回滚要求。
|
||||
|
||||
调整:将来源项目的桌面进程、特定目录、包发布和自动更新命令替换为兴邦Web/API/Agent和容器部署;不要求不存在的技能或npm脚本。URD评审草案入docs/v2并随Git保存,不假设docs/plans已被忽略。
|
||||
|
||||
## 4. 机制状态
|
||||
|
||||
当前可以实际执行:Git状态/差异检查、backend/venv内unittest、现有JS守卫、Next build、Compose config、Gitea远程SHA核验。
|
||||
|
||||
待建设/确认:前端契约自动生成、统一i18n/token、v2浏览器E2E、Gitea CI、真实数据权限/出口、Jev适配及概率校准。这些列入新版计划,不因写入规范就视为完成。
|
||||
|
||||
本轮规范与设计文档属于文档交付;v2业务实现仍须各阶段门禁确认。既有规则使用其稳定ID,新增要求必须新增ID或关联原规则,不悄悄修改业务口径。
|
||||
@@ -61,7 +61,7 @@ strong{color:#16233c}
|
||||
<main class="content">
|
||||
<h1 id="sec-1-urd-模板-user-requirements-document-" class="doc-h1">URD 模板(User Requirements Document)</h1>
|
||||
<blockquote><strong>定位</strong>:URD(用户需求文档,与 PRD 等价)是<strong>产品级</strong>需求描述——定义"产品是什么、为谁服务、用户要完成哪些任务、每个功能如何被用户感知和使用"。它是软件项目<strong>一切后续文档的输入</strong>:阶段 ① 需求规格(BR/E/AC)、② 架构、③ 详细设计、④ UI Spec、测试用例,都必须能追溯到本文档的功能条目。</blockquote>
|
||||
<blockquote><strong>适用</strong>:本模板用于 DK Forge 及后续所有软件项目的产品需求文档撰写。</blockquote>
|
||||
<blockquote><strong>适用</strong>:本模板用于兴邦金租 AI 评审平台及新版 AI 预审的用户需求撰写;正文按业务人员语言描述,区分演示、真实数据试点与正式审批。</blockquote>
|
||||
<blockquote><strong>用法</strong>:复制本文件为 <code><产品名>-URD-<版本>-<日期>.md</code>,按占位符 <code><...></code> 填写;删除不适用章节并记录删除理由;编号规则见第 0 节,不得破坏。</blockquote>
|
||||
<hr>
|
||||
<h2 id="sec-2-0-使用说明与编号规则-写文档前先读-成稿后可删-" class="doc-h2">0. 使用说明与编号规则(写文档前先读;成稿后可删)</h2>
|
||||
@@ -79,7 +79,7 @@ strong{color:#16233c}
|
||||
</li>
|
||||
<li>阶段 ① 规格回答 <strong>"这一版改动具体怎么实现、怎么验收"</strong>;
|
||||
</li>
|
||||
<li>URD 讲用户语言,不写内部实现(不写表结构、类名、IPC 通道);确有底层约束须写"约束与假设"。
|
||||
<li>URD 讲用户语言,不写内部实现(不写表结构、类名、内部工具调用);确有底层约束须写"约束与假设"。
|
||||
</li>
|
||||
<h3 id="sec-3-0-2-编号规则-只追加-不重排-弃用标记-withdrawn-" class="doc-h3">0.2 编号规则(只追加、不重排、弃用标记 withdrawn)</h3>
|
||||
<div class="tbl-wrap"><table><thead><tr><th data-c="前缀">前缀</th><th data-c="含义">含义</th><th data-c="示例">示例</th></tr></thead><tr><td><code>MOD-xx</code></td><td>模块编号</td><td><code>MOD-03</code></td></tr><tr><td><code>FR-<模块简码>-<nn></code></td><td>功能点编号(模块简码见 6.1 清单)</td><td><code>FR-STU-04</code></td></tr><tr><td><code>EX-<模块简码>-<nn></code></td><td>功能点的异常/边界场景</td><td><code>EX-DASH-02</code></td></tr><tr><td><code>NFR-xx</code></td><td>非功能需求</td><td><code>NFR-07</code></td></tr><tr><td><code>SEC-xx</code></td><td>安全/权限需求</td><td><code>SEC-03</code></td></tr><tr><td><code>AC-xx</code></td><td>端到端验收标准</td><td><code>AC-10</code></td></tr><tr><td><code>OQ-xx</code></td><td>待决策/开放问题</td><td><code>OQ-04</code></td></tr></table></div>
|
||||
@@ -117,7 +117,7 @@ strong{color:#16233c}
|
||||
<h3 id="sec-3-2-4-非目标-out-of-scope-与范围同等重要-逐条写明排除理由" class="doc-h3">2.4 非目标(Out of Scope)——与范围同等重要,逐条写明排除理由</h3>
|
||||
<div class="tbl-wrap"><table><thead><tr><th data-c="排除项">排除项</th><th data-c="理由">理由</th><th data-c="可能时机">可能时机</th></tr></thead><tr><td><code><明确不做的事></code></td><td><code><为什么本期不做></code></td><td>后续版本 / 永不</td></tr><tr><td><code><例如:开放第三方市场></code></td><td><code><例如:首版只支持受控模板></code></td><td>V2+</td></tr></table></div>
|
||||
<h3 id="sec-3-2-5-成功标准-产品级-一句话可判-" class="doc-h3">2.5 成功标准(产品级,一句话可判)</h3>
|
||||
<li><code><首个版本成功的硬性标志,如:不写代码的业务人员可在 60 分钟内发布一个可用 Agent></code>
|
||||
<li><code><首个版本成功的硬性标志,如:客户经理可完成一次带证据引用和补件清单的项目预审></code>
|
||||
</li>
|
||||
<hr>
|
||||
<h2 id="sec-2-3-参考文献" class="doc-h2">3. 参考文献</h2>
|
||||
@@ -127,7 +127,7 @@ strong{color:#16233c}
|
||||
<h3 id="sec-3-4-1-术语表" class="doc-h3">4.1 术语表</h3>
|
||||
<div class="tbl-wrap"><table><thead><tr><th data-c="术语">术语</th><th data-c="定义(用户语言,可配图)">定义(用户语言,可配图)</th></tr></thead><tr><td><code><领域词,如 Agent / 面板 / Scope></code></td><td><code><一句话说清></code></td></tr></table></div>
|
||||
<h3 id="sec-3-4-2-用户角色" class="doc-h3">4.2 用户角色</h3>
|
||||
<div class="tbl-wrap"><table><thead><tr><th data-c="角色">角色</th><th data-c="画像">画像</th><th data-c="主要任务">主要任务</th><th data-c="成功标准">成功标准</th><th data-c="常用模块">常用模块</th></tr></thead><tr><td><code><角色></code></td><td><code><谁,技术背景></code></td><td><code><日常要完成什么></code></td><td><code><做到什么算好></code></td><td>MOD-xx</td></tr><tr><td>例:培训者</td><td>懂业务不写代码</td><td>制作并发布一个 Agent</td><td>不改代码完成首版</td><td>MOD-02/05</td></tr></table></div>
|
||||
<div class="tbl-wrap"><table><thead><tr><th data-c="角色">角色</th><th data-c="画像">画像</th><th data-c="主要任务">主要任务</th><th data-c="成功标准">成功标准</th><th data-c="常用模块">常用模块</th></tr></thead><tr><td><code><角色></code></td><td><code><谁,技术背景></code></td><td><code><日常要完成什么></code></td><td><code><做到什么算好></code></td><td>MOD-xx</td></tr><tr><td>例:客户经理</td><td>熟悉融资租赁业务</td><td>提交材料并理解预审意见</td><td>明确项目障碍与下一步</td><td>MOD-02/05</td></tr></table></div>
|
||||
<h3 id="sec-3-4-3-角色-模块-关注矩阵-可选-" class="doc-h3">4.3 角色 × 模块 关注矩阵(可选)</h3>
|
||||
<div class="tbl-wrap"><table><thead><tr><th data-c=""></th><th data-c="MOD-01">MOD-01</th><th data-c="MOD-02">MOD-02</th><th data-c="MOD-03">MOD-03</th><th data-c="…">…</th></tr></thead><tr><td>角色 A</td><td>使用</td><td>使用</td><td>–</td><td></td></tr><tr><td>角色 B</td><td>–</td><td>审核</td><td>使用</td><td></td></tr></table></div>
|
||||
<hr>
|
||||
@@ -143,7 +143,7 @@ strong{color:#16233c}
|
||||
</code></pre>
|
||||
<p><code><模块之间的依赖与数据走向一句话说明。></code></p>
|
||||
<h3 id="sec-3-5-3-核心用户流程-端到端-" class="doc-h3">5.3 核心用户流程(端到端)</h3>
|
||||
<p><code><步骤表:用户从进入到完成一次价值闭环的全过程></code>(例:安装 → 授权 → 首次运行 → 理解 → 协作)</p>
|
||||
<p><code><步骤表:用户从进入到完成一次价值闭环的全过程></code>(例:选择项目 → 确认材料 → 发起预审 → 查看证据 → 补件复核)</p>
|
||||
<h3 id="sec-3-5-4-体验原则" class="doc-h3">5.4 体验原则</h3>
|
||||
<li><code><先给结果,再邀请对话></code>(示例原则,按产品改写)
|
||||
</li>
|
||||
@@ -156,7 +156,7 @@ strong{color:#16233c}
|
||||
<li>...
|
||||
</li>
|
||||
<h3 id="sec-3-5-5-交付面与平台约束" class="doc-h3">5.5 交付面与平台约束</h3>
|
||||
<div class="tbl-wrap"><table><thead><tr><th data-c="交付面">交付面</th><th data-c="说明">说明</th><th data-c="优先级">优先级</th></tr></thead><tr><td><code><桌面 Electron / Web / 移动 / 硬件></code></td><td><code><能力边界、离线、多端同步></code></td><td>P0/P1</td></tr></table></div>
|
||||
<div class="tbl-wrap"><table><thead><tr><th data-c="交付面">交付面</th><th data-c="说明">说明</th><th data-c="优先级">优先级</th></tr></thead><tr><td><code><客户经理工作台 / 评审工作台 / 管理配置></code></td><td><code><项目权限、材料来源、运行状态、异常恢复></code></td><td>P0/P1</td></tr></table></div>
|
||||
<hr>
|
||||
<h2 id="sec-2-6-功能模块需求-本文档主体-" class="doc-h2">6. 功能模块需求(本文档主体)</h2>
|
||||
<h3 id="sec-3-6-1-模块清单与划分说明" class="doc-h3">6.1 模块清单与划分说明</h3>
|
||||
@@ -249,4 +249,5 @@ strong{color:#16233c}
|
||||
<h3 id="sec-3-c-变更对照-本版相对上一版的增删-" class="doc-h3">C. 变更对照(本版相对上一版的增删)</h3>
|
||||
<hr>
|
||||
<blockquote><strong>模板维护</strong>:本模板本身受仓库 ⑧ 学习与沉淀 约束——使用中发现结构缺陷,更新本文档并记入"变更记录"(放文末)。</blockquote>
|
||||
<section><h2>兴邦填写约束(XB-1.0 · 2026-09-28)</h2><ul><li>明确主审 Agent、专项判断模型和正式审批职责;Jev 单题不能直接审批。</li><li>历史经验包含争议、核查、证据和判断变化;过程缺失须标未知。</li><li>定义项目权限、数据域、模拟与正式结果、失败与人工复核路径。</li><li>无真实校准时不承诺通过率、准确率或改善幅度;未决项标 owner 与阶段。</li><li>本文为阅读模板,正式编辑与编号以同目录 URD-Template.md 为准。</li></ul></section>
|
||||
</main></div></body></html>
|
||||
@@ -1,7 +1,7 @@
|
||||
# URD 模板(User Requirements Document)
|
||||
|
||||
> **定位**:URD(用户需求文档,与 PRD 等价)是**产品级**需求描述——定义"产品是什么、为谁服务、用户要完成哪些任务、每个功能如何被用户感知和使用"。它是软件项目**一切后续文档的输入**:阶段 ① 需求规格(BR/E/AC)、② 架构、③ 详细设计、④ UI Spec、测试用例,都必须能追溯到本文档的功能条目。
|
||||
> **适用**:本模板用于 DK Forge 及后续所有软件项目的产品需求文档撰写。
|
||||
> **适用**:本模板用于兴邦金租 AI 评审平台及新版 AI 预审的用户需求撰写;正文按业务人员语言描述,区分演示、真实数据试点与正式审批。
|
||||
> **用法**:复制本文件为 `<产品名>-URD-<版本>-<日期>.md`,按占位符 `<...>` 填写;删除不适用章节并记录删除理由;编号规则见第 0 节,不得破坏。
|
||||
|
||||
---
|
||||
@@ -20,7 +20,7 @@
|
||||
```
|
||||
- URD 回答 **"用户要什么、为什么、长什么样、做到什么程度算好"**;
|
||||
- 阶段 ① 规格回答 **"这一版改动具体怎么实现、怎么验收"**;
|
||||
- URD 讲用户语言,不写内部实现(不写表结构、类名、IPC 通道);确有底层约束须写"约束与假设"。
|
||||
- URD 讲用户语言,不写内部实现(不写表结构、类名、内部工具调用);确有底层约束须写"约束与假设"。
|
||||
|
||||
### 0.2 编号规则(只追加、不重排、弃用标记 withdrawn)
|
||||
| 前缀 | 含义 | 示例 |
|
||||
@@ -95,7 +95,7 @@
|
||||
| `<例如:开放第三方市场>` | `<例如:首版只支持受控模板>` | V2+ |
|
||||
|
||||
### 2.5 成功标准(产品级,一句话可判)
|
||||
- `<首个版本成功的硬性标志,如:不写代码的业务人员可在 60 分钟内发布一个可用 Agent>`
|
||||
- `<首个版本成功的硬性标志,如:客户经理可完成一次带证据引用和补件清单的项目预审>`
|
||||
|
||||
---
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
| 角色 | 画像 | 主要任务 | 成功标准 | 常用模块 |
|
||||
|---|---|---|---|---|
|
||||
| `<角色>` | `<谁,技术背景>` | `<日常要完成什么>` | `<做到什么算好>` | MOD-xx |
|
||||
| 例:培训者 | 懂业务不写代码 | 制作并发布一个 Agent | 不改代码完成首版 | MOD-02/05 |
|
||||
| 例:客户经理 | 熟悉融资租赁业务 | 提交材料并理解预审意见 | 明确项目障碍与下一步 | MOD-02/05 |
|
||||
|
||||
### 4.3 角色 × 模块 关注矩阵(可选)
|
||||
| | MOD-01 | MOD-02 | MOD-03 | … |
|
||||
@@ -145,7 +145,7 @@
|
||||
`<模块之间的依赖与数据走向一句话说明。>`
|
||||
|
||||
### 5.3 核心用户流程(端到端)
|
||||
`<步骤表:用户从进入到完成一次价值闭环的全过程>`(例:安装 → 授权 → 首次运行 → 理解 → 协作)
|
||||
`<步骤表:用户从进入到完成一次价值闭环的全过程>`(例:选择项目 → 确认材料 → 发起预审 → 查看证据 → 补件复核)
|
||||
|
||||
### 5.4 体验原则
|
||||
1. `<先给结果,再邀请对话>`(示例原则,按产品改写)
|
||||
@@ -157,7 +157,7 @@
|
||||
### 5.5 交付面与平台约束
|
||||
| 交付面 | 说明 | 优先级 |
|
||||
|---|---|---|
|
||||
| `<桌面 Electron / Web / 移动 / 硬件>` | `<能力边界、离线、多端同步>` | P0/P1 |
|
||||
| `<客户经理工作台 / 评审工作台 / 管理配置>` | `<项目权限、材料来源、运行状态、异常恢复>` | P0/P1 |
|
||||
|
||||
---
|
||||
|
||||
@@ -194,8 +194,8 @@
|
||||
**功能点详述**
|
||||
|
||||
##### FR-XXX-01 `<功能名称>`(P0)
|
||||
- **功能描述**:`<该功能是什么;用户可用它完成什么;关键行为逐条列出,如:>`
|
||||
1. `<行为一>`
|
||||
- **功能描述**:`<该功能是什么;用户可用它完成什么;关键行为逐条列出,如:>`
|
||||
1. `<行为一>`
|
||||
2. `<行为二>`
|
||||
- **前置条件**:`<进入该功能前必须满足的条件,如已登录、已有数据源授权>`(无则写"无")
|
||||
- **主流程**:
|
||||
@@ -303,3 +303,11 @@
|
||||
---
|
||||
|
||||
> **模板维护**:本模板本身受仓库 ⑧ 学习与沉淀 约束——使用中发现结构缺陷,更新本文档并记入"变更记录"(放文末)。
|
||||
|
||||
## 兴邦填写约束(XB-1.0 · 2026-09-28)
|
||||
|
||||
- 写清主审 Agent、专项判断模型和正式审批的职责;不把 Jev 单题输出当作审批决定。
|
||||
- 历史经验须描述争议、核查、证据和判断变化;仅有最终结果时标过程缺失。
|
||||
- 每项功能明确材料来源、项目/数据域权限、模拟与正式结果边界、失败与人工复核路径。
|
||||
- 没有真实校准数据时不承诺通过率、准确率或改善幅度;未决项有 owner 和进入阶段。
|
||||
- 规格、架构、UI 和测试均回链到功能编号。可参考 [兴邦v2 URD](../../v2/URD.md)。
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
# 兴邦预审 v2 需求规格
|
||||
|
||||
状态:0.1 评审草案,尚未通过六道完备性门;后续设计为候选方案。规则编号作用域为本文。
|
||||
|
||||
## 1. Requirement Overview
|
||||
|
||||
来源:[URD](URD.md) 的 FR-FACT/HIST/EXP/REV/JEV/JUD/SIM/EVAL/PILOT-01。目标是把历史项目的争议、调查、证据和判断变化用于新项目预审。P0 使用模拟或经授权的脱敏数据,不连接未知生产库,不执行正式审批,不展示未经校准的通过概率。
|
||||
|
||||
角色沿用 URD。补充术语:快照=不可变输入版本;来源域=data_domain,演示或生产;证据引用=可定位材料片段的 ID;有效经验=已发布、未过期且适用条件成立的版本;硬性规则=经业务确认且由程序执行的约束;幂等键=同一用户请求去重标识;版本冲突=客户端依据旧 revision 更新;专项判断=边界明确的局部判断;降级=保留可用结果并标识未完成检查;运行预算=限制轮数、调用量和耗时;保留集=开发时不可使用的验收样本;提供方(provider)=具体执行专项问题的模型后端;判断配置(profile)=已批准的提供方、模型、端点、数据范围与版本组合;能力声明=该配置已验证支持的题型;原生指标=提供方返回且带原语义的指标,不代表跨模型可比。
|
||||
|
||||
“证据支持”不等于材料真实可信:材料真实性核验是单独的核查结果。风险严重程度、数据完整性、模型确定性、审批概率互不替代。
|
||||
|
||||
## 2. Data Model & Interface Contract
|
||||
|
||||
契约候选以 [详细设计](03-detailed-design.md) 为单一说明,实施时唯一代码定义拟在 backend/contracts/prescreen.py。现有 ProjectSnapshot/Evidence 不复制,版本适配后复用。
|
||||
|
||||
| 对象 | 本期字段摘要 | 使用面 |
|
||||
|---|---|---|
|
||||
| CaseTimeline | id、project_id、data_domain、revision、events[] | 历史过程 |
|
||||
| DecisionEvent | id、event_type、occurred_at?、recorded_at、question、evidence_ids[]、judgment_before?、judgment_after?、conditions[] | 争议时间线 |
|
||||
| ExperienceCard | id、version、status、title、source_event_ids[]、conditions、exceptions、scope、expires_at、reviewer_id?、revision | 经验审核 |
|
||||
| ScreeningRun | id、snapshot_id、status、recommendation?、findings[]、missing_inputs[]、applied_experiences[]、probability、degradations[]、judgment_config、versions、revision | 预审总览 |
|
||||
| Judgment | id、question_id、question_version、type、status、answer?、evidence_ids[]、provider、model_version?、profile_id?、profile_revision?、native_metrics[] | 专项复核 |
|
||||
| Simulation | id、base_run_id、assumptions[]、changed_findings[]、unresolved_findings[]、formal_result=false | 推进沙盘 |
|
||||
| Evaluation | id、dataset_version、split_id、run_versions、locked_at?、status、metrics | 验证看板 |
|
||||
|
||||
API 候选命名空间 `/api/prescreen`,通过同源 `/api/core/prescreen` 代理访问;下列端点尚未实现。请求/响应、错误、界限及 owner 见详细设计。P0 `probability` 必须为 null,并附原因 `not_calibrated`。
|
||||
|
||||
## 3. Surface Specification
|
||||
|
||||
项目预审总览:结论和信息基础在顶部;中间是核查问题与经验比较;右侧动作模拟;详情抽屉展示来源。历史经验页:时间线、原文与经验卡并排。验证页:样本锁定、结果对照和分歧复盘。
|
||||
|
||||
统一视图状态:idle/loading/ready/empty/error/submitting;运行另有 queued/running/awaiting_input/completed/partial/failed/cancelled。动作权限由后端判定,前端隐藏无权动作不能代替后端授权。详见 [UI Spec](04-ui-spec.md)。
|
||||
|
||||
## 4. Business Rules
|
||||
|
||||
| ID | 可测试规则(唯一职责 owner) |
|
||||
|---|---|
|
||||
| BR-01 | 材料提取候选须经授权用户确认后才能进入项目事实;保留原件与来源。owner:材料确认服务 |
|
||||
| BR-02 | 历史事件缺少时间或原文时保留未知值和缺证标识,不生成虚构经过。owner:历史过程服务 |
|
||||
| BR-03 | 经验仅能通过草稿→待审核→发布的受控状态转换生效;无发布资格者不得发布。owner:经验治理 |
|
||||
| BR-04 | 检索有效经验时先按数据域、权限、状态、有效期和适用条件过滤,再做相关性比较。owner:经验检索 |
|
||||
| BR-05 | 主审形成综合预审意见;任一专项模型的单题结果不得直接写入 recommendation。owner:预审编排 |
|
||||
| BR-06 | 已确认的硬性阻断不能被模型或其他维度高分覆盖。owner:结果校验 |
|
||||
| BR-07 | 缺数据记 unknown;全部关键核查不可完成时 recommendation=insufficient_information。owner:结论完整性校验 |
|
||||
| BR-08 | 未通过来源校验的引用不能进入有效结论;相关判断退回缺证/复核。owner:证据校验 |
|
||||
| BR-09 | 专项关闭或运行期间所选服务失效时记录 skipped/failed 及降级原因;不能伪造判断。owner:专项模型适配 |
|
||||
| BR-10 | 材料中的指令不能扩展主审工具集合;金额与日期运算只能由确定性工具执行。owner:工具策略 |
|
||||
| BR-11 | 情景模拟只写独立假设结果,不能修改项目事实、正式运行或审批状态。owner:模拟服务 |
|
||||
| BR-12 | 未校准时 probability=null;Score、Noul、相似案例通过占比均不能直接映射为通过概率。owner:结果序列化 |
|
||||
| BR-13 | 每次运行冻结输入和规则/Skill/经验/模型/问题版本,过程修订不覆盖旧结果。owner:运行存储 |
|
||||
| BR-14 | 相同 actor+project+operation+幂等键和相同载荷返回同一对象;载荷不同返回冲突。owner:命令入口 |
|
||||
| BR-15 | 盲测在预测锁定之前不向推理输入提供目标项目的标签、最终意见或后续表现。owner:评测服务 |
|
||||
| BR-16 | 真实数据外发前按数据域与接收端策略核验;未批准出口不可调用。owner:模型出口策略 |
|
||||
| BR-17 | 专项问题经统一入口路由到所选的 Jev 或本地提供方;local 路径不读取 Jev 凭据,不调用 Jev。owner:判断路由 |
|
||||
| BR-18 | 统一输出只接受题目规定的答案或 unknown;提供方原生指标保留语义且不得互换阈值或补造缺失概率。owner:判断结果归一化 |
|
||||
| BR-19 | 选择仅限当前用户/数据域获准的已验证配置;不支持所需题型的配置拒绝执行该题。owner:判断配置校验 |
|
||||
| BR-20 | 运行创建时冻结专项配置修订;切换仅影响新运行,故障不得自动切换提供方。owner:运行配置解析 |
|
||||
|
||||
## 5. Exception Scenarios
|
||||
|
||||
| ID | 触发 / HTTP与错误码 | 用户可见消息 / 恢复 |
|
||||
|---|---|---|
|
||||
| E-01 | 解析失败,422 MATERIAL_PARSE_FAILED | 材料未能完整解析,请核对原件或手工录入;保留原件 |
|
||||
| E-02 | 关键证据缺失,运行结果 MISSING_EVIDENCE | 关键证据尚未取得,暂不能确认;补件后新运行 |
|
||||
| E-03 | 无权限,403 ACCESS_DENIED | 无权执行此操作;不泄露其他项目对象是否存在 |
|
||||
| E-04 | 引用无效/跨项目,422 INVALID_EVIDENCE | 结论引用未通过核验,请复核来源;拒绝有效化 |
|
||||
| E-05 | 乐观锁不符,409 REVISION_CONFLICT | 内容已有更新,请刷新后重试;保留本地草稿 |
|
||||
| E-06 | 专项模型不可用,运行结果 JUDGMENT_UNAVAILABLE | 专项核查未完成,已保留其他结果;允许明确重试 |
|
||||
| E-07 | 非法枚举/载荷/版本,422 INVALID_REQUEST | 请求内容不符合当前版本,请检查后重试 |
|
||||
| E-08 | 预算耗尽,运行结果 RUN_BUDGET_EXCEEDED | 本次核查已达到执行上限,请复核未完成项 |
|
||||
| E-09 | 幂等键载荷冲突,409 IDEMPOTENCY_CONFLICT | 此请求编号已用于不同内容,请重新提交 |
|
||||
| E-10 | 未批准出口,403 EGRESS_NOT_APPROVED | 当前数据不允许发送至该模型服务 |
|
||||
| E-11 | 评测标签提前暴露,409 EVALUATION_CONTAMINATED | 当前样本不再满足盲测条件,已排除 |
|
||||
| E-12 | 经验已失效/不适用,运行结果 EXPERIENCE_EXCLUDED | 该经验不适用于本次核查;展示可见范围内的排除原因 |
|
||||
| E-13 | 配置不存在、不可用或未获准,422 JUDGMENT_CONFIG_INVALID | 当前专项模型配置不可用,请选择可用配置或关闭专项核查;不暴露无权限配置详情 |
|
||||
| E-14 | 不支持题型/映射未验证,运行结果 JUDGMENT_CAPABILITY_UNSUPPORTED | 当前模型尚不支持此项核查,已标记未完成;不改题、不猜测结果 |
|
||||
| E-15 | 非法答案/非有限数值/指标来源不明,运行结果 JUDGMENT_OUTPUT_INVALID | 专项结果未通过格式与语义校验,请复核或重试;不作为有效判断 |
|
||||
|
||||
运行级错误保存在 degradations/finding 中,HTTP 200 仅表示结果可读取,不表示核查通过。禁止把 failed 状态当作 completed。
|
||||
|
||||
## 6. Acceptance Criteria
|
||||
|
||||
| ID | Given / When / Then | 覆盖 |
|
||||
|---|---|---|
|
||||
| AC-01 | Given 已解析候选,When 未确认/确认,Then 分别不进入/进入事实且能定位原文;解析失败可人工补录 | BR-01, E-01 |
|
||||
| AC-02 | Given 缺少事件日期的历史材料,When 提炼时间线,Then occurred_at=null 且显示缺证,不编日期 | BR-02, E-02 |
|
||||
| AC-03 | Given 草稿经验与无权发布人,When 请求发布,Then 拒绝且无有效版本;合资格审核走合法状态后生效 | BR-03, E-03, E-07 |
|
||||
| AC-04 | Given 过期/异域/例外触发/有效经验,When 新运行检索,Then 仅有效且授权的版本可应用 | BR-04, E-12 |
|
||||
| AC-05 | Given 任一专项模型返回正面单题判断但整体证据冲突,When 汇总,Then 主审记录冲突与理由,单题不能覆盖综合意见 | BR-05, E-02 |
|
||||
| AC-06 | Given 确认硬性阻断与模型建议推进,When 校验,Then 拒绝推进并指出规则版本;边界值由程序计算 | BR-06, E-07 |
|
||||
| AC-07 | Given 全部关键资料缺失,When 预审,Then 信息不足并列补件,不判企业高风险 | BR-07, E-02 |
|
||||
| AC-08 | Given 无效或跨项目引用,When 结论校验,Then 拒绝引用并标缺证,不暴露无权原文 | BR-08, E-04, E-03 |
|
||||
| AC-09 | Given 专项已关闭或运行时所选服务失效/超时/畸形输出,When 执行,Then 保留 skipped/failed 与降级,不生成默认高分 | BR-09, E-06, E-15 |
|
||||
| AC-10 | Given 材料包含终端调用指令,When 模型读材料,Then 工具权限不变;耗尽预算停止并列未完成项 | BR-10, E-08 |
|
||||
| AC-11 | Given 基线运行与假设动作,When 模拟,Then 原快照哈希不变;冲突假设被拒绝 | BR-11, E-07 |
|
||||
| AC-12 | Given 未校准模型,When 查看/导出结果,Then probability=null 且注明原因,即使 Noul 接近 1 也不改写 | BR-12, E-07 |
|
||||
| AC-13 | Given 同一项目产生新证据版本,When 重跑或旧 revision 更新,Then 新旧运行分别留存或返回版本冲突 | BR-13, E-05 |
|
||||
| AC-14 | Given 相同/不同载荷复用幂等键,When 并发提交,Then 分别返回同一运行/409,不重复写入 | BR-14, E-09 |
|
||||
| AC-15 | Given 客户保留集,When 锁定预测前尝试读取目标标签,Then 拒绝;发生泄露则样本作废 | BR-15, E-11, E-03 |
|
||||
| AC-16 | Given 未批准的真实数据出口,When 请求 Jev 或其他外部模型,Then 无网络发送并记录策略拒绝 | BR-16, E-10 |
|
||||
| AC-17 | Given 没有 Jev Key 和可用本地配置,When 本地实际运行并用厂商 fixture 验证 Jev 适配契约,Then 契约一致、local 不访问 Jev,主审不依赖厂商字段 | BR-17, E-06 |
|
||||
| AC-18 | Given local 自报 confidence 或 Jev 原生指标,When 归一化/展示,Then 不生成缺失概率、不跨提供方套阈值;畸形/NaN/未知选项返回失败 | BR-18, E-15 |
|
||||
| AC-19 | Given 未授权/不存在配置或缺题型能力,When 发起运行/执行题目,Then 分别返回配置错误/未完成,不发送该题,也不静默替代 | BR-19, E-13, E-14 |
|
||||
| AC-20 | Given 排队或执行中的旧运行,When 修改默认配置或所选服务故障,Then 旧运行保留已冻结版本;新选择创建新运行;不得自动外发或替换 | BR-20, E-06 |
|
||||
| AC-21 | Given 专项开关关闭且两种模型都无凭据,When 主审预审,Then 无专项模型调用,已计划题目 Judgment=skipped、运行明确关闭原因,主审仍受证据和硬规则约束 | BR-09, BR-17, E-06 |
|
||||
|
||||
## 7. Open Questions & Decision Record
|
||||
|
||||
OQ-01 至 OQ-06 见 [决策记录](09-decisions.md)。本轮规格是待评审草案;P0 演示可用模拟材料,真实数据出口、正式权限和概率校准不得用临时假设替代确认。
|
||||
|
||||
已定方向:主审综合研判、历史过程优先、可切换专项模型局部判断、模拟与正式分离、先验证再谈概率。被否方案:单题判断直接审批、经验未经审核自动生效、复制整库后再定义用途、用模拟提升冒充因果效果。
|
||||
@@ -0,0 +1,99 @@
|
||||
# 兴邦预审 v2 架构设计
|
||||
|
||||
状态:候选设计 0.1,等待阶段①评审;本文件严格区分当前事实与拟议架构。
|
||||
|
||||
## 1. 概览与已核验基线
|
||||
|
||||
代码快照 4d5a420 已保存在 Gitea。当前架构从代码确认如下,图中不包含尚未实现的新模块:
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
U[业务用户] --> W[Next.js 项目工作台]
|
||||
W --> P[同源 Route Handler]
|
||||
P --> A[FastAPI 路由与权限]
|
||||
A --> S[ProjectAssistantService]
|
||||
S --> Q[DurableWorker]
|
||||
Q --> X[Skill 与规则执行]
|
||||
X --> M[受限模型 Agent Loop]
|
||||
S --> DB[SQLite 对象与审计]
|
||||
```
|
||||
|
||||
| 已有能力 | 已检查代码 | 复用限制 |
|
||||
|---|---|---|
|
||||
| 项目快照/证据/问题契约 | backend/contracts/project_assistant.py | 本期复用,不另造同名概念 |
|
||||
| 项目/任务/事务对象 | backend/services/project_assistant.py、assistant_store.py、assistant_worker.py | 巨大 service 不继续堆新领域,新增模块通过现有入口调用 |
|
||||
| 数据卡/材料 | backend/services/assistant_data.py、assistant_materials.py | 继续冻结来源与人工确认候选 |
|
||||
| 受限模型核查 | backend/services/assistant_model.py | 目前提示词禁止作审批决定;新增预审意见要单独设计并测试,不放宽旧版完整核查的权限 |
|
||||
| 可审核经验 | backend/services/assistant_experiences.py | 已有范围、有效期、条件、审核发布;不能等同已学到客户历史经验 |
|
||||
| 历史案例 | backend/data_layer/history_store.py | 实际是 JSONL + 行业/金额等简化筛选;文件注释不证明已建向量库 |
|
||||
| 默认团队模式 | backend/data_layer/team_experience.py | 内置频次/阈值为代码默认样例,不是真实兴邦统计 |
|
||||
| 模型与组件治理 | backend/services/component_registry.py、component_evaluation.py | 复用版本和验证机制 |
|
||||
|
||||
## 2. v2 拟议模块边界
|
||||
|
||||
以下是设计目标,尚未生成对应文件或调用链。owner 指代码唯一职责,人员待项目负责人分配。
|
||||
|
||||
| 模块 / 拟议落点 | 职责 | 依赖 / 禁止 |
|
||||
|---|---|---|
|
||||
| history_cases / backend/services/history_cases.py | 提炼历史事件、来源及未知项 | 依赖材料与存储;不直接批准经验 |
|
||||
| experience_catalog / backend/services/experience_catalog.py | 关联案例与经验版本、先授权过滤再相关性比较 | 复用既有经验生命周期,不建立平行发布路径 |
|
||||
| prescreen / backend/services/prescreen.py | 主审制定核查、调用专业能力、综合意见 | 只访问冻结授权上下文;不直接操作通用 terminal/SQL |
|
||||
| judgment_provider / backend/services/judgment_provider.py | 统一窄问题契约、Jev/本地适配、schema 校验、预算、失败状态 | 通过出口策略;不写审批或综合结论 |
|
||||
| prescreen_policy / backend/services/prescreen_policy.py | 硬规则、证据、缺证及概率输出约束 | 不依赖页面,不以模型高分绕过硬约束 |
|
||||
| scenario_service / backend/services/prescreen_scenarios.py | 保存独立情景与差异 | 引用不可变基线;不覆盖真实事实 |
|
||||
| prescreen_evaluation / backend/services/prescreen_evaluation.py | 冻结样本、版本、预测及专家对照 | 标签与推理侧隔离 |
|
||||
| prescreen contracts / backend/contracts/prescreen.py | 新对象与错误契约 | 后端单一定义,前端由 OpenAPI 生成;生成器待建设 |
|
||||
|
||||
拟议数据流:材料/授权数据 → 标准事实和来源 → 冻结快照 → 硬规则和计算 → 检索有效经验 → 主审提出具体核查问题 → 专业 Skills/可切换专项判断 → 验证证据与规则 → 主审综合预审 → 独立复核/正式审批入口。
|
||||
|
||||
历史经验用于选择核查动作和比较适用条件,不能用“相似案例通过”直接推出当前项目通过。专项模型的判断置信与主审解释都不是独立的真实性认证。
|
||||
|
||||
## 3. 数据模型与持久化
|
||||
|
||||
P0 候选使用现有 SQLite 事务存储承载新增对象类型。历史事件、经验版本、运行、判断、模拟和评测各有唯一 owner。schema 变更追加迁移,保留旧表;完整 DDL 与兼容策略在详细设计阶段定案。
|
||||
|
||||
本轮“v2”指产品代际。既有 xingbang_v2.py 和 schema_v2 是历史实现命名,不应重命名或删除。
|
||||
|
||||
材料保存原件哈希、段落/页码、发生时间和录入时间。经验同时记录来源事件、制度版本、专家确认及有效期。只持有最终批复的案例应标“过程不完整”。
|
||||
|
||||
演示和真实数据域分别存储或通过受测权限边界隔离;生产隔离架构未确认前只运行演示数据。版本冻结后撤回经验不删除历史记录,但新运行不得再应用;旧结果需标记失效经验并提示复核。
|
||||
|
||||
## 4. 关键流程与恢复
|
||||
|
||||
- 历史导入失败:保留原件和失败事件,允许补充/重新提炼,不伪造缺失过程。
|
||||
- 主审识别矛盾:记录待核查事项,使用授权证据工具验证,达到预算停止为 partial/awaiting_input。
|
||||
- 所选专项模型不可用或关闭:缺失项进入 degradations;主审只能依据已完成检查给出有限意见。
|
||||
- 硬规则冲突:结果校验阻断建议推进,保留模型原始结构化提案供审计。
|
||||
- 新证据进入:产生新快照、新运行,旧结果保留;模拟不进入这条正式更新路径。
|
||||
- Worker 恢复:复用持久任务机制;幂等范围包含 actor/project/operation/key,禁止重复生成运行。
|
||||
|
||||
## 5. 接口与集成
|
||||
|
||||
内部 API 以 /api/prescreen 为候选命名空间;沿用当前项目鉴权和同源代理。前端不能直接访问模型厂商。现有 assistant_model 的受信端点规则不自动适用于 Jev,专项模块需独立出口与域策略;local 也只能使用管理员批准的端点,不能从浏览器传入任意 URL。
|
||||
|
||||
Jev 接口概念参考 TypeSafe 官方文档:https://docs.typesafe.ai/introduction 、https://docs.typesafe.ai/confidence 。当前没有 SDK 安装、Key、版本或延迟实测;实施前重核版本与中文金租样本效果。Jev 是可选提供方,本地开源模型通过独立适配器执行同一业务任务;拿不到 Jev Key 不阻塞本地路径。统一契约和差异处理见 [专项判断模型切换](11-judgment-providers.md)。
|
||||
|
||||
概率预测为后续独立模型,输入仅使用预测时可得事实和判断特征。主审解释模型输出但不能改写原始概率;审批阶段、样本偏差和校准结果未明确前 probability=null。
|
||||
|
||||
## 6. 副作用边界
|
||||
|
||||
真实数据外发、经验发布、正式审批是不同权限。模型只能读冻结事实和生成候选意见;发布经验由授权人操作,正式审批不在 v2 自动化范围。普通聊天的终端/文件工具不能进入预审工具白名单。
|
||||
|
||||
本轮只进行本地文档写入与用户授权的 Gitea 分支备份;没有模型数据外发、云端部署、数据库迁移或镜像发布。
|
||||
|
||||
## 7. ADR
|
||||
|
||||
ADR-01 保留现有技术基线,按模块增量扩展,否决全面换框架。
|
||||
ADR-02 主审综合判断+确定性约束+可切换专项复核,否决单模型 yes/no 审批。
|
||||
ADR-03 经验以过程和来源为核心,否决只按最终结果记忆。
|
||||
ADR-04 经验发布复用现有治理,否决自动从反馈直接生效。
|
||||
ADR-05 先做验证和数据合作,再建设概率校准,否决专家分数转百分比。
|
||||
ADR-06 v2 独立目录与资源,旧版保留;本轮先文档后迁移,目录尚未创建。
|
||||
|
||||
状态、影响和未决项统一维护在 [决策记录](09-decisions.md)。
|
||||
|
||||
## 8. 拟建立的架构验证
|
||||
|
||||
业务 service 不导入 src;预审工具集合不含 terminal/任意 SQL;跨域经验不可检索;引用必须属于授权快照;模拟不修改真实快照;无校准时概率为 null;经验发布只能经过一个治理入口。专项模型只能通过统一接口接入;local 不依赖 Jev 凭据;配置冻结且故障不自动切换。映射 AC-04/06/08/10/11/12/16/17/18/19/20/21。
|
||||
|
||||
这些是待实施的机器检查;现有测试覆盖另列,不能标成 v2 已通过。
|
||||
@@ -0,0 +1,84 @@
|
||||
# 兴邦预审 v2 详细设计候选
|
||||
|
||||
状态:0.1 草案,阶段①/②未定案;以下端点和新类型尚未实现。覆盖 BR-01–20 / E-01–15 / AC-01–21,先形成可评审的契约,再编写代码。
|
||||
|
||||
## 1. 约定与契约归属
|
||||
|
||||
唯一代码 owner 拟为 backend/contracts/prescreen.py,复用既有 Evidence / ProjectSnapshot,通过适配器处理版本差异;前端类型生成链在 M1 实现。API 路由仅授权和校验,业务决策在 service。
|
||||
|
||||
共同字段:id/project_id/snapshot_id 等为非空字符串(1–128 字符),revision 为正整数,时间为带时区 ISO-8601;未知发生时间允许 null,记录时间必填;data_domain 为 demo/production;所有输入禁止未知字段。列表分页候选 limit 默认 20,范围 1–100,cursor 可空。
|
||||
|
||||
P0 初始工程限制提案(非业务阈值):沿用单材料 10 MB;单次最多 10 个专项判断问题、每题最多 20 条证据、每次最多 10 个模拟动作;工具最多 20 次、总运行 120 秒、单次模型请求 30 秒、可重试故障最多重试 1 次且计入总预算。管理员只能在部署配置中降低初期限制;放宽须重新验证并更新规格。这些值在 OQ-04 定案前不得当作性能承诺。
|
||||
|
||||
## 2. 接口草案
|
||||
|
||||
路径前缀 /api/prescreen,写请求须身份、项目权限和 Idempotency-Key;更新已有对象需 expected_revision。Error 响应统一为 `{error:{code,message,retryable,request_id}}`,不得带密钥或无权限原文。
|
||||
|
||||
| 方法 / 路径 | 入参 | 成功响应 | owner / 主要异常 |
|
||||
|---|---|---|---|
|
||||
| POST /projects/{project_id}/case-timelines | document_ids:string[1..100] | 202 {timeline:CaseTimeline},状态 processing | history_cases;E-01/03/07/09 |
|
||||
| GET /case-timelines/{id} | 无 body | 200 CaseTimeline | history_cases;E-03;不存在统一 404 NOT_FOUND |
|
||||
| POST /case-timelines/{id}/experiences | title:string[1..200], source_event_ids:string[1..50], conditions:Condition[], exceptions:Condition[], scope:project/team, expires_at:datetime | 201 ExperienceCard draft | 经验治理;E-03/04/07/09 |
|
||||
| POST /experiences/{id}/transitions | action:submit/approve/reject/withdraw, expected_revision:int, note:string[1..2000] | 200 ExperienceCard | 复用经验治理;E-03/05/07 |
|
||||
| GET /projects/{project_id}/judgment-profiles | 无 body | 200 {profiles:[{id,revision,display_name,provider,capabilities}],default_profile_id:string?};仅授权可用项 | 判断配置;不存在/无权项目404;详见专项设计 |
|
||||
| POST /projects/{project_id}/runs | snapshot_id:string, enable_judgment:boolean=false, judgment_profile_id:string? | 202 ScreeningRun queued | prescreen;E-03/07/09/10/13 |
|
||||
| GET /runs/{id} | 无 body | 200 ScreeningRun | prescreen;E-03;不存在 404 NOT_FOUND |
|
||||
| POST /runs/{id}/cancel | expected_revision:int | 200 ScreeningRun | prescreen;E-03/05/07 |
|
||||
| POST /runs/{id}/simulations | assumptions:Assumption[1..10] | 201 Simulation | scenario_service;E-03/05/07/09 |
|
||||
|
||||
材料上传/候选确认沿用已存在的项目助手接口,开发前核对调用方。此处不新增平行上传入口。
|
||||
|
||||
不存在与无访问权的对象统一对外为 404 NOT_FOUND,页面文案“对象不可访问或不存在”;E-03 用于已授权对象上的无权动作。评测先做离线内部入口,不开放目标标签 API 给主审。
|
||||
|
||||
## 3. 数据字段候选
|
||||
|
||||
| 对象 | 字段 / 类型 / 空值 | owner |
|
||||
|---|---|---|
|
||||
| CaseTimeline | id, project_id, data_domain, revision;status:processing/ready/partial/failed;events:DecisionEvent[];warnings:string[] | history_cases |
|
||||
| DecisionEvent | id;event_type:question/evidence/action/opinion/decision;occurred_at:datetime?;recorded_at:datetime;question:string;evidence_ids:string[];judgment_before:string?;judgment_after:string?;conditions:string[] | history_cases |
|
||||
| Condition | field:string(标准字段白名单);operator:eq/in/present/absent;value:string/bool/string[]/null;数据类型按 operator 校验,不执行表达式 | 经验治理 |
|
||||
| ExperienceCard | id, project_id, data_domain, revision;version:string;title;status:draft/in_review/published/rejected/withdrawn;source_event_ids:string[];conditions/ exceptions:Condition[];scope:project/team;team_id:string?;expires_at;reviewer_id:string?;policy_version:string? | 经验治理 |
|
||||
| Finding | 复用既有 Finding;展示 title/result/evidence_ids/basis_ids/suggested_action/status;无依据只能 unknown,已有枚举不改名 | 预审编排 |
|
||||
| ScreeningRun | id, project_id, data_domain, revision, snapshot_id;status 见第4节;recommendation:advance/supplement/stop/insufficient_information/null;findings:Finding[];missing_inputs:string[];applied_experiences:{id,version,reason,evidence_ids}[];probability:null;probability_reason:not_calibrated;degradations:{code,message}[];judgment_config:{enabled,profile_id?,profile_revision?,provider,model_version?,adapter_version?,prompt_version?,mapping_version?};versions:{schema,policy,skills,experiences,model,questions};created_at;finished_at:datetime? | 运行存储 |
|
||||
| Judgment | id, run_id, question_id, question_version;type:choice/score/binary;status:completed/skipped/failed;answer:JudgmentAnswer?;evidence_ids:string[];provider:jev/local/disabled;profile_id:string?;profile_revision:int?;model_version:string?;native_metrics:NativeMetric[];error_code:string?;skip_reason:string? | judgment_provider |
|
||||
| Assumption | action_id:string;description:string[1..1000];field_changes:{field,value}[];required_evidence_ids:string[] | scenario_service |
|
||||
| Simulation | id, project_id, base_run_id;assumptions:Assumption[];changed_findings:{code,before,after,basis_ids}[];unresolved_findings:string[];formal_result:false;created_at | scenario_service |
|
||||
| Evaluation | id, dataset_version, split_id;run_versions:object;locked_at:datetime?;status:prepared/running/locked/revealed/invalidated;metrics:{name,numerator,denominator,value?,scope}[] | prescreen_evaluation |
|
||||
|
||||
JudgmentAnswer、NativeMetric、JudgmentProfile 及配置选择规则统一详见 [专项判断模型切换](11-judgment-providers.md) 第3–5节。题型统一为 choice/score/binary;原草案中的 noul 是厂商语义,改由 Jev 适配器处理,不再进入业务题型。该草案从未实现,无已上线 API 迁移。未知可作为显式答案;completed 只表示完成该题处理与校验(允许缺证直接返回 unknown),不表示支持结论或项目通过。
|
||||
|
||||
Evidence 来源可定位不代表真实性已核验,真实性结果须单列 Finding。conditions 非空,team 范围必有 team_id;例外命中即排除;首次发布缺失 reviewer_id 不合法。撤回不删除历史引用。
|
||||
|
||||
迁移拟新增有版本守卫的历史事件/预审对象存储,具体 DDL 在 M1 定案;禁止覆写旧 schema_v2 初始化或复用旧生产库测试。
|
||||
|
||||
## 4. 状态机与权限
|
||||
|
||||
| 对象 | 合法转换 | 守卫与失败 |
|
||||
|---|---|---|
|
||||
| 历史过程 | processing→ready/partial/failed | 部分缺日期为 partial;重新提炼生成新 revision |
|
||||
| 经验 | draft→in_review→published/rejected;rejected→draft;published→withdrawn | submit 由编辑者;approve/reject/withdraw 由发布角色;审核不能自批,编辑后重提审;过期在读取时排除 |
|
||||
| 运行 | queued→running→completed/partial/awaiting_input/failed;queued/running→cancelled | awaiting_input 补件后创建新运行,旧运行保留;completed 不允许原地覆写 |
|
||||
| 模拟 | 创建→独立结果 | 不存在“应用到真实项目”捷径;真实材料按原确认流程进入新快照 |
|
||||
| 评测 | prepared→running→locked→revealed;任一未完状态→invalidated | locked 前标签不可进入推理;发现泄漏保留作废理由 |
|
||||
|
||||
recommendation 在 queued/running 时为 null,终态仍可能为 insufficient_information;partial 不是通过。过时结果允许查看但显示版本差异,不能静默升级到新版本。
|
||||
|
||||
## 5. 错误与恢复
|
||||
|
||||
错误码与文案统一引用规格第5节,防止维护两份。补充 NOT_FOUND 的语义见第2节。403/422 不自动重试;408/429/5xx/连接错误可按预算重试一次,使用同一幂等键。无可恢复工作时终止并保留日志;不自动切换未批准厂商。
|
||||
|
||||
硬规则冲突保留原模型提案但有效 recommendation=stop;来源无法验证的判断为 unknown。若综合意见失去关键依据,降为 insufficient_information 或 supplement,必须记录缺失事项;具体业务“关键项”列表依方案版本管理,需 OQ-01 确认。
|
||||
|
||||
## 6. 边界清单
|
||||
|
||||
空材料/空经验集:展示 empty,允许现有规则核查,明确无历史经验支持。版本不支持:422;对象过时:409;跨项目和跨域:过滤+授权拒绝。不能将 lack of evidence 当成 yes/no 否定事实。
|
||||
|
||||
幂等键唯一范围 actor_id+project_id+operation+key,记录请求哈希;相同请求返回原对象,冲突 E-09。并发更新通过 revision 和事务;先写运行记录再入队,取消后禁止写成功结果。实施阶段须覆盖 Worker 崩溃后恢复。
|
||||
|
||||
## 7. 测试映射
|
||||
|
||||
history_cases→AC-01/02;经验治理与检索→AC-03/04/13;prescreen+policy→AC-05/06/07/08/12;judgment_provider→AC-09/16/17/18/19/20/21;工具策略→AC-10;scenario_service→AC-11;命令入口→AC-14;evaluation→AC-15。具体测试提案见验证方案,当前均不是已执行的新功能测试。
|
||||
|
||||
## 8. 未决项
|
||||
|
||||
OQ-01 业务类型和关键项;OQ-02 审核权限;OQ-03 模型出口;OQ-04 性能/预算与验收阈值;OQ-05 概率事件;OQ-06 独立仓库和部署资源。全部在决策记录中有 owner 和进入条件。本文件不可直接作为已批准实现合同。
|
||||
@@ -0,0 +1,76 @@
|
||||
# 兴邦预审 v2 UI Spec
|
||||
|
||||
状态:候选表面规格,生产UI尚未开发;Superdesign 原型单独见 [交互原型记录](12-prototype.md),不以原型替代生产验收。输入:需求规格与详细设计草案。
|
||||
|
||||
## 1. 交付面与骨架
|
||||
|
||||
| 表面 | 区域 / 信息层级 | 消费契约 |
|
||||
|---|---|---|
|
||||
| 预审总览 | 项目与数据域→意见及缺证状态→主要问题→经验对照→证据抽屉 | ScreeningRun、Finding、Evidence |
|
||||
| 历史过程 | 左:来源材料;中:争议/补件时间线;右:经验卡草稿与审核记录 | CaseTimeline、DecisionEvent、ExperienceCard |
|
||||
| 推进沙盘 | 左:证据→动作→问题变化图;右:假设动作;底:真实与模拟差异 | Simulation、ScreeningRun |
|
||||
| 验证看板 | 数据集版本/保留状态→对照指标→分歧案例→人工复盘 | Evaluation |
|
||||
|
||||
拟集成至 xingbang-workbench / review-workbench 的项目上下文,实际路由与组件拆分在 UI 实现前定案,不恢复已合并的旧页面。
|
||||
|
||||
## 2. 组件所有权
|
||||
|
||||
ProjectContext 拥有 project_id、data_domain 和当前 run_id;RunSummary 只展示运行结果;CaseTimelinePanel 拥有选中事件;EvidenceDrawer 拥有证据展开状态;ExperienceEditor 拥有草稿和 expected_revision;ScenarioPanel 拥有 assumptions,不能写真实项目事实;EvaluationPanel 拥有数据集选择,不能提前获得保留标签。
|
||||
|
||||
组件名为提案,尚未创建。URL 仅保存 project_id/run_id/tab 等非敏感可分享状态;身份令牌、材料文本和假设正文不放 URL。切换项目清空选中证据与模拟动作。
|
||||
|
||||
## 3. 状态机
|
||||
|
||||
| 状态 | 可见内容 | 允许动作 / 禁用动作 |
|
||||
|---|---|---|
|
||||
| idle | 项目说明与启动入口 | 有权限可发起;无项目不发请求 |
|
||||
| loading | 对应区域骨架与加载文案 | 可退出;禁重复提交 |
|
||||
| ready | 已获数据与版本信息 | 按权限操作 |
|
||||
| empty | “尚无历史经验”或“尚无运行”及下一步 | 可导入/发起;不能绘制虚构节点 |
|
||||
| error | 错误码映射的文案、请求编号和恢复入口 | 仅可恢复错误显示重试 |
|
||||
| submitting | 保留原内容,显示提交中 | 禁二次提交;不清除草稿 |
|
||||
| stale(ready 附加标识) | “项目已有新版本,当前为历史结果” | 可查看/新运行;禁止覆写旧结果 |
|
||||
|
||||
业务运行 queued/running/awaiting_input/completed/partial/failed/cancelled 单独展示;partial 必须突出未完成项。更新失败时回 ready/error 且保留草稿,版本冲突提示刷新后合并。
|
||||
|
||||
## 4. 动作与权限
|
||||
|
||||
| 动作 | 客户经理 | 评审员/发布人 | 管理员 | 只读访客 |
|
||||
|---|---|---|---|---|
|
||||
| 查看项目结果和证据 | 授权项目 | 授权范围 | 授权范围,非默认全量 | 仅指定演示项目 |
|
||||
| 确认材料、发起预审 | 项目授权 | 项目授权 | 不自动继承业务权限 | 隐藏 |
|
||||
| 模拟动作 | 项目授权 | 项目授权 | 项目授权 | 仅演示授权 |
|
||||
| 编辑经验候选 | 提议权限 | 编辑权限 | 不自动继承 | 隐藏 |
|
||||
| 审核发布/撤回 | 隐藏 | 独立发布资格且不可自批 | 治理授权后 | 隐藏 |
|
||||
| 修改模型出口与数据域 | 隐藏 | 隐藏 | 策略管理资格 | 隐藏 |
|
||||
| 揭示保留集结果 | 隐藏 | 指定验证负责人且预测已锁定 | 不因管理员身份自动开放 | 隐藏 |
|
||||
|
||||
后端始终重验权限。无权限动作不显示控件;有权限但条件未满足显示禁用原因。经验发布前展示范围、例外、有效期和变更差异;撤回说明新运行不再使用、历史引用保留。
|
||||
|
||||
## 5. 沙盘视觉规则
|
||||
|
||||
证据→动作→受影响问题→预审意见;线宽最多三档,对应已定义影响等级,不能直接代表概率提升。未验证假设使用虚线和“模拟”文字;真实核验使用实线及来源。通过点击/键盘打开依据,颜色不单独传意。
|
||||
|
||||
一次只突出当前选中问题的关联路径,其他弱化;未知项不伪装为否定。补件可能发现新风险,允许意见变得更谨慎。图旁提供等价列表,缩小窗口时改纵向排列,不依赖复杂图才能理解结果。
|
||||
|
||||
P0 顶部不显示百分比“通过率”。展示 recommendation、missing_inputs、degradations 和数据域/版本;不凭空生成完整度或置信度数字。评分若后续加入,须另有明确算法和契约。
|
||||
|
||||
## 6. 文案与视觉
|
||||
|
||||
[DESIGN.md](DESIGN.md) 管理语义 token 候选。新增文案拟 key 化:prescreen.result.*, prescreen.error.*, experience.status.*, simulation.*, evaluation.*;每个错误 key 对应规格 E-*,中英文范围在 UI 门禁前确定。当前无对应 i18n 实现,不伪称可用。
|
||||
|
||||
正文按现有 16px 基线,主动作可键盘访问;可见 focus、表单 label、错误定位、减少动效、文本与图的等价表达。长标题换行,证据抽屉不截断关键原文。产品页面默认不暴露 question_version 等实现细节,只在“依据与版本”展开。
|
||||
|
||||
## 7. 验收映射与未决
|
||||
|
||||
来源点击与权限 AC-01/08;未知时间 AC-02;经验审核 AC-03/04;降级 AC-07/09;模拟隔离 AC-11;无伪概率 AC-12;盲测标签 AC-15。
|
||||
|
||||
UI 门禁尚未通过:路由位置、统一 token 实现、i18n 文件、视觉稿、键盘和对比度验收待完成。截图自评不能单独算通过,应有可复现的 DOM/行为断言及独立评审记录。
|
||||
|
||||
## 8. 专项判断选项(候选)
|
||||
|
||||
预审发起表单增加“专项核查”:关闭 / 本地模型 / Jev 官方服务;实际选项来自后端授权配置(JudgmentProfile),不能只按品牌静态显示可用。用户看到模型名称、提供方和可用状态;配置 ID/修订和供应商指标放“依据与版本”。管理员在部署配置中管理端点和凭据,P0 不新增在线编辑密钥页面。
|
||||
|
||||
无 Jev Key 时 Jev 配置不进入可选列表;本地可用则可选择本地。没有可用配置时仅保留关闭并说明未配置。业务请求只传 judgment_profile_id,不传 URL 或 Key;后端重新校验,失败按 E-13 显示。提交中禁改本次选择,运行结束或排队后修改选择均需发起新运行。
|
||||
|
||||
结果展示本次实际提供方、未完成题目和拒答/unknown;关闭显示“专项核查已关闭”。失效/超时不把选中项悄悄变为另一个模型,不展示占位高分。对应 AC-17/18/19/20/21;页面路由及真实交互待 UI 阶段实施。
|
||||
@@ -0,0 +1,53 @@
|
||||
# 兴邦 v2 实施与迁移计划
|
||||
|
||||
状态:计划,未执行 v2 代码迁移。当前用户最新指令优先:接入流程、备份现状、编写新版文档。
|
||||
|
||||
## 1. 迁移边界
|
||||
|
||||
拟目标目录 F:/mini-OpenClaw-v2,当前尚不存在。先保护旧版,再从已备份提交白名单迁移,禁止把整个工作区连同数据/密钥/依赖一起复制。新仓库远程和独立部署资源见 OQ-06。
|
||||
|
||||
| 候选迁移内容 | 依赖理由 | 验证 |
|
||||
|---|---|---|
|
||||
| src/ 当前页面、组件、代理与 lib | workbench 和鉴权相互依赖,先保留可运行闭环 | 生产构建及既有 UI 脚本 |
|
||||
| backend/api、services、contracts、graph、tools、data_layer | app.py 注册路由与服务调用链 | unittest + 导入/启动冒烟 |
|
||||
| backend/skills、fixtures、requirements.txt | 固定方法和演示种子是运行/测试依赖 | fixtures 标为 demo,运行不读取旧数据目录 |
|
||||
| backend/app.py、config.py 与必要无密钥默认配置 | 真正入口是 app.py,不照抄旧文档的 backend.backend.main | 独立进程和健康检查 |
|
||||
| package*.json、Next/TS/CSS 配置、Dockerfile、入口脚本 | 构建完整性 | npm ci/build、Compose config |
|
||||
| backend/test_*.py、相关 scripts 测试与 verify.py | 保留既有回归能力 | 同一验证入口在 v2 运行 |
|
||||
| docs/project-process、docs/v2、根 AGENTS.md | 新流程与设计基线 | 链接/规则覆盖检查 |
|
||||
|
||||
排除:.env、server-deploy.conf、.docker-codex、node_modules、venv、.next*、日志、sessions/storage/raw_logs、实际 xingbang_data、原始客户材料、_backup*、office 临时文件。旧 DELIVERY.md 含凭据,不能原样进入新仓库;部署文档采用重写后的不含密钥说明。代码内默认演示数据需标注来源,不把默认频次当成客户经验。
|
||||
|
||||
抽取前按 import 与路由调用图确认必要依赖。先建立可运行基座,再根据测试逐项裁剪,不能按文件名猜核心。原版始终保留,禁止恢复用户此前主动合并删除的旧页。
|
||||
|
||||
## 2. 分批交付
|
||||
|
||||
| 里程碑 | 产出 | 进入条件 / 完成证据 |
|
||||
|---|---|---|
|
||||
| M0 文档与恢复点(本轮) | Gitea 快照、流程适配、URD/规格草案 | 远程 SHA 一致;文档检查;不是新版功能交付 |
|
||||
| M1 独立基座 | v2 源码、环境模板、契约生成与追加迁移骨架 | 阶段①–③相应门禁通过;独立路径、完整构建、回归通过 |
|
||||
| M2 历史过程与经验 | 时间线、原文定位、审核发布和检索 | AC-01/02/03/04/08/13,模拟与真实域隔离 |
|
||||
| M3 主审与专项判断 | 有界 Agent Loop、统一 JudgmentProvider、本地开源模型适配、可选 Jev 适配、证据和硬规则约束 | AC-05/06/07/09/10/12/14/16/17/18/19/20/21;先契约 mock,再验证本地路径;有 Key 后单独启用 Jev 实测,缺 Key 不阻塞 local 交付 |
|
||||
| M4 沙盘与展示 | UI 状态、假设动作、正式/模拟对照 | UI门禁通过,AC-11;源快照哈希不变 |
|
||||
| M5 脱敏试点 | 数据授权清单、保留集盲测和复盘 | AC-15/16,专家评审、指标事先锁定 |
|
||||
| M6 概率校准(后续) | 事件口径、训练/校准/测试、漂移监测 | OQ-05 关闭且样本支持;审批概率与违约风险分开 |
|
||||
|
||||
一次只交付一个可验证业务切片。新增文件按流程 ≤500 行;既有巨大 service 只接薄入口,不继续堆独立领域逻辑。新依赖先评估必要性和大小。
|
||||
|
||||
## 3. 每批标准动作
|
||||
|
||||
读 AGENTS 和对应流程 → 检查 status/log/调用方 → 更新需求规则与接口 → 增加行为测试 → 最小实现 → 相关测试 → 项目 verify.py → diff 自查 → 文档同步 → 独立提交和评审。
|
||||
|
||||
行为涉及权限、证据、模拟、外发时必须有反例;不以静态页面或模型的一句解释替代行为断言。失败先定位,不能反复重跑直到偶然通过。
|
||||
|
||||
## 4. 配置、迁移与回滚
|
||||
|
||||
代码通过可回滚提交/镜像标签恢复。数据迁移追加并有幂等守卫;旧库先快照,升级/回退边界经测试后才部署。回退代码不等于撤销已写入数据。v2 使用独立工作目录、Compose 项目、容器名、数据卷及端口,具体值在 OQ-06 定案。
|
||||
|
||||
本轮不实施剪裁、不改业务行为、不创建远程 v2 仓库、不部署。先把评审文档写清,避免规范到位后返工。
|
||||
|
||||
## 5. M3 专项模块实施顺序
|
||||
|
||||
按 [专项判断设计](11-judgment-providers.md) 先落统一题库/请求/答案契约与配置冻结,再接本地推理服务并完成真实本地集成测试。Jev 适配独立实现;无 Key 时只验证厂商响应 fixture,live 用例标 skipped,不宣称原版已接通。mock 仅用于测试,不能冒充业务推理结果。
|
||||
|
||||
两条路径都读取同一版历史经验和证据,主审不写提供方分支。上线某个配置之前,该提供方/模型/提示/题库组合必须独立完成相同业务验收;合同测试通过不能证明模型效果合格。
|
||||
@@ -0,0 +1,62 @@
|
||||
# 兴邦 v2 验证与质量门
|
||||
|
||||
状态:新版验证计划;以下 AC 测试为待实现,不能以旧版测试通过替代。
|
||||
|
||||
## 1. 可追溯测试矩阵
|
||||
|
||||
| 用例组 | 规格 AC | 层级 / 断言 |
|
||||
|---|---|---|
|
||||
| 材料确认与历史时间线 | AC-01/02 | 单测/集成:未确认不入事实;未知时间不补造;解析失败保留原件 |
|
||||
| 经验审核、检索与版本 | AC-03/04/13 | 权限/集成:无资格、不适用、过期、撤回、异域不可应用;旧版本可追溯 |
|
||||
| 主审与硬约束 | AC-05/06/07 | 有冲突和缺证的固定样例:单题正面不覆盖硬规则,缺数据不判高风险 |
|
||||
| 证据真实性边界 | AC-08 | 伪造 ID、跨项目、无权片段被拒;有引用不等于真实性已证实 |
|
||||
| 专项模型降级 | AC-09/16 | mock:未配置、超时、畸形响应、未批准出口;零伪造判断、零未授权发送 |
|
||||
| 提供方切换与契约 | AC-17/18/19/20/21 | 单测/集成:无 Jev Key 的 local、disabled、畸形答案、题型缺失、配置冻结、无自动跨提供方回退;调用 spy 核验实际发送目标 |
|
||||
| Agent 工具与预算 | AC-10 | 注入材料无法调用 terminal/任意SQL;预算耗尽确实停止 |
|
||||
| 模拟隔离 | AC-11 | 真实快照哈希/数据库记录前后不变;关联改进不可简单相加 |
|
||||
| 概率门禁 | AC-12 | UI/API/导出均无未经校准概率;Noul、Score不转审批率 |
|
||||
| 幂等与并发 | AC-14 | 同键同载荷只一条运行;同键异载荷409;Worker重启不重复落库 |
|
||||
| 盲测 | AC-15 | 预测先锁定,标签后揭示;同项目不跨开发/验收集;泄漏样本作废 |
|
||||
|
||||
## 2. 工程验证顺序
|
||||
|
||||
使用 backend/venv,先运行本批相关 unittest 与 UI 检查,再运行根目录的 `backend/venv/Scripts/python.exe scripts/verify.py`。Linux 对应 backend/venv/bin/python。命令、cwd、revision、fixture 和完整日志保存在 test-evidence。
|
||||
|
||||
现有 verify.py 实际包含:git diff、全部 backend unittest、四项 UI 源码守卫、Next.js build、本地/云端 Compose config;这些 UI 脚本不等于真实浏览器 E2E。--docker 会构建并启动本地 Compose,有端口与停止副作用,不能在与旧版冲突的资源上随意运行。
|
||||
|
||||
文档任务运行链接、编号覆盖、文件来源、格式检查。GitHub workflow 文件存在不代表 Gitea CI 已执行;远程检查未观测记 Unobserved。
|
||||
|
||||
## 3. 业务验证设计
|
||||
|
||||
同一批材料按版本冻结比较:A=现有助手;B=主审+历史经验;C-local=B+本地专项模型;有 Key 且获准时加入 C-Jev=B+Jev。对照回答“经验有没有帮助”和“所选专项模型有没有额外收益”,不把两项改进混成一个原因。先用合成反例暴露故障,再用客户持有的脱敏保留集检验。
|
||||
|
||||
样本包含通过、退回、否决、附条件通过、资料不全及意见分歧。按项目分组、按预测时间截断,只使用当时已取得的材料;区分首次提交通过和补件后最终通过。开发集不能看到保留集答案,也不能通过完整历史报告间接泄漏目标答案。
|
||||
|
||||
| 指标 | 计算口径 | 限制 |
|
||||
|---|---|---|
|
||||
| 重大问题漏检 | 专家标注重大问题中未识别数 / 专家标注总数 | 先定义重大问题;无标注不计算 |
|
||||
| 无依据结论 | 复核为无依据的实质判断 / 被复核判断 | 引用存在但不支持也算无依据 |
|
||||
| 误报 | 被专家认定不成立的问题 / 系统提出问题 | 专家分歧单列 |
|
||||
| 有效补件 | 解决预定争议的补件 / 已完成补件 | 不把补件数量当质量 |
|
||||
| 一致性 | 与参考意见一致的项目 / 可比较项目 | 不等于正确率;分歧要复核 |
|
||||
| 效率与成本 | 相同边界下的人工耗时、端到端耗时、调用成本 | 同时检查重大问题漏检,不能只追求快 |
|
||||
|
||||
分母为0返回 not_applicable,不填0%。指标验收阈值在盲测前与兴邦锁定(OQ-04),不能看结果后调线。少量案例用于可行性和故障发现,不支持总体准确率宣传。
|
||||
|
||||
## 4. 概率后续门禁
|
||||
|
||||
定义审批事件、预测时点、样本纳入范围和制度时期;只观察已送审项目会有选择偏差。独立保留时间段测试校准情况,记录 Brier/校准曲线等指标并说明不确定性;通过概率不代表投放后无违约。具体样本量、模型选择和阈值另立规格,不在无数据时承诺。
|
||||
|
||||
动作模拟的分数变化属于模型条件判断,不能直接当作措施造成通过率提升的因果结论。
|
||||
|
||||
## 5. 失败和发布门
|
||||
|
||||
失败→复现→定位→最小修复→同一检查复验,完整记录。未解决故障不得发布镜像。仅保存源码恢复快照不等同发布,快照注明验证状态。
|
||||
|
||||
人工评审按正确性、一致性、安全、测试四维;未经独立评审不标通过。线上效果须在真实交付环境观测,本地测试不能替代。
|
||||
|
||||
## 6. 提供方效果与可用性分别验收
|
||||
|
||||
同一冻结题库、证据和专家标签验证 Jev/local 的业务含义与结构契约,不要求逐题答案或数值相同。分别统计错误、漏检、拒答/unknown、耗时及成本;模型不支持的题型也计入未完成项,不能从分母偷偷排除。阈值和映射按提供方/模型/题型独立登记,先定再测。
|
||||
|
||||
local 集成须在没有 Jev 凭据的环境实际执行,并验证未发送 Jev 请求;本地模型服务本身的授权配置另行处理。Jev live 无凭据则明确跳过,fixture 通过仅证明适配代码结构。两者未真实执行前,当前文档一律不宣称切换功能可用。
|
||||
@@ -0,0 +1,101 @@
|
||||
# 部署与 Gitea 使用说明
|
||||
|
||||
日期:2026-09-28。本文区分已核验、本地配置、历史记录和未来提案;不包含密钥。本轮没有实际部署。
|
||||
|
||||
## 1. Git 远程事实
|
||||
|
||||
| 项 | 已核验值 |
|
||||
|---|---|
|
||||
| 当前 Gitea 远程 | origin |
|
||||
| SSH 仓库 | ssh://git@192.168.10.111:2222/qiaoqichao/mini-openclaw.git |
|
||||
| Web 地址线索 | http://8.163.107.248:13000/qiaoqichao/mini-openclaw (Gitea push 回执提供,网页本轮未单独测试) |
|
||||
| 默认分支 | main,git ls-remote --symref origin HEAD 已核对 |
|
||||
| 另一个远程 | github-backup → git@github.com:NathanAlex7/mini_openclaw.git;本轮未推送 |
|
||||
| 源码恢复点 | codex/backup-before-ai-prescreen-v2-20260928 / 4d5a420671cb073a56335bd617e7d0812b8179a9 |
|
||||
| 文档工作分支 | codex/xingbang-v2-docs-20260928 |
|
||||
|
||||
备份分支包含此次会话之前的 9 个已修改文件和选定的未跟踪源码、文档、流程原文,共37个变更文件;未改默认分支。其父提交为 b10093f。快照保存当时源码状态,不等同所有功能已验收。
|
||||
|
||||
## 2. 常用命令
|
||||
|
||||
先确认身份、网络和现有 SSH host key;不要为连接便利关闭主机指纹校验,不把口令放 URL。
|
||||
|
||||
```powershell
|
||||
git status --short
|
||||
git remote -v
|
||||
git ls-remote --symref origin HEAD
|
||||
git fetch origin
|
||||
git switch -c codex/<task-name>
|
||||
# 只暂存本次已检查文件,避免 git add . 带入临时凭据
|
||||
git add -- <file1> <file2>
|
||||
git diff --cached --check
|
||||
git commit -m "docs(v2): 说明改动与结果"
|
||||
git push -u origin HEAD
|
||||
git rev-parse HEAD
|
||||
git ls-remote --heads origin <branch-name>
|
||||
```
|
||||
|
||||
本地 HEAD 与指定远程分支 SHA 相同才可说“已备份”。只 commit、只 push 输出、网页旧分支都不能替代核验。需合并时在 Gitea 创建面向 main 的 PR,按流程至少一人评审并绑定最终修订验证;本轮不自动合并。
|
||||
|
||||
## 3. 无损恢复
|
||||
|
||||
恢复到全新目录检查,不在有工作成果的目录执行 reset --hard/clean。
|
||||
|
||||
```powershell
|
||||
git clone --branch codex/backup-before-ai-prescreen-v2-20260928 --single-branch ssh://git@192.168.10.111:2222/qiaoqichao/mini-openclaw.git F:\mini-OpenClaw-restore-20260928
|
||||
git -C F:\mini-OpenClaw-restore-20260928 rev-parse HEAD
|
||||
```
|
||||
|
||||
预期提交:4d5a420671cb073a56335bd617e7d0812b8179a9。目标须不存在。当前仅验证远程可提供该提交,未执行恢复目录创建或破坏性恢复演练。
|
||||
|
||||
这是源码备份:不包括实际业务数据库、上传文件、运行日志、会话、密钥或 Docker 数据卷;这些资产需要另行按部署环境建立备份。现有 Git 历史中的旧交付文档含遗留凭据,未重写既有历史;新文档和未来新仓库不得继续复制这些值。
|
||||
|
||||
## 4. 当前运行与部署事实
|
||||
|
||||
| 项 | 来源 / 状态 |
|
||||
|---|---|
|
||||
| 后端 | backend/app.py,python app.py 固定监听8002;或在 backend 工作目录用 uvicorn app:app --port 明确指定 |
|
||||
| 前端 | package.json 的 next dev/start,默认3000;Next代理默认后端127.0.0.1:8002 |
|
||||
| 本地 Compose | docker-compose.yml,容器 mini-openclaw-stable,宿主3200/8002 |
|
||||
| 云端 Compose | deploy/docker-compose.aliyun.yml,容器 mini-openclaw,loopback FRONTEND_PORT默认80/BACKEND_PORT默认8002 |
|
||||
| ECS 本机配置 | server-deploy.conf 指向 8.163.107.248:22,用户 qykj_qqc;不复制此含密钥文件 |
|
||||
| 旧项目远程目录 | /home/qykj_qqc/mini-OpenClaw,来自此前会话只读检查;本轮未复查服务器 |
|
||||
| 云端实时健康 | Unobserved,本轮未发起 SSH、重启或模型调用 |
|
||||
|
||||
当前 Dockerfile 在一个镜像中运行 Next 和 FastAPI,容器内部端口3000/8002;卷保存 xingbang_data 与日志。云端浏览器通过同源代理访问后端。受信模型 endpoint、密钥和 ERP 连接由环境提供,不提交到 Git。
|
||||
|
||||
## 5. 现有验证与发布链
|
||||
|
||||
```powershell
|
||||
.\backend\venv\Scripts\python.exe scripts/verify.py
|
||||
```
|
||||
|
||||
先安装项目依赖;必须使用项目虚拟环境。测试报告在 test-evidence,配置示例 deploy/aliyun.env.example 只有占位值。当前脚本 publish-acr.ps1/.sh 会验证、构建、推送;deploy-aliyun.sh 会 pull/up 并健康检查,这些是有副作用的发布脚本,不在本轮执行。
|
||||
|
||||
发布要求:验证通过、不可变镜像标签、部署配置单独保管、既有数据卷有备份、目标端口和容器隔离已确认。回滚用已验证的旧镜像标签;数据库变更的回退另行设计,不能把换镜像等同数据恢复。
|
||||
|
||||
## 6. v2 部署隔离提案
|
||||
|
||||
目标独立目录 F:/mini-OpenClaw-v2;独立 Git 项目、Compose 项目名、镜像名、容器、数据卷和宿主端口须在实施前确定。当前没有创建 v2 远程、部署文件或分配实际端口。不要执行原版 Compose 去部署 v2,否则会复用旧容器名和数据。
|
||||
|
||||
前端代理可通过 CORE_BACKEND_URL / RISK_AGENT_BACKEND_URL 指向隔离后端;启动命令和测试 smoke URL 必须随端口同步。将代码从旧版复制出来不自动完成资源隔离。
|
||||
|
||||
真实材料是否可发往 DeepSeek/Jev,取决于客户数据策略及实际部署方式;不能用“部署在客户服务器”推断“数据不会外发”。模型出口需要独立核对。
|
||||
|
||||
## 7. Gitea CI 状态
|
||||
|
||||
当前仓库只有 .github/workflows/verify.yml,未发现 .gitea/workflows。Gitea Actions 开关、runner、required checks 均未核验。不能声称 Gitea 已自动测试。
|
||||
|
||||
后续接入 CI 时:先核对服务器能力和 runner→使用同一本地验证入口→上传 test-evidence→验证失败阻断发布→确认对最终 SHA 真正执行。只新增 YAML 不算 CI 接入完成。
|
||||
|
||||
## 8. 专项判断提供方配置提案(尚未实现)
|
||||
|
||||
配置结构以 [专项判断模型切换](11-judgment-providers.md) 为准,不向现有 .env / Compose 写入尚未被代码消费的变量。拟新增后端专用配置 `judgment.default_profile_id`(可空)及 `judgment.profiles`;默认关闭,管理员验证本地配置后才选为默认或显式选择。
|
||||
|
||||
- Jev:按将来核实的官方接口配置端点与后端凭据引用;缺 Key 不影响主审或 local 配置启动。没有凭据不能标记 Jev 已就绪。
|
||||
- local:指定经许可的本地/内网推理服务、模型版本和提示版本;不需要 Jev Key。本地服务是否需要自己的访问令牌取决于其部署认证;开源模型权重许可、硬件资源、结构化输出能力和中文评审效果在接入前核实。
|
||||
- disabled:零专项请求,保留规则、历史经验和主审预审;结果显示缺失专项核查。不能把 disabled 当作 local 的成功结果。
|
||||
|
||||
模型服务与业务后端分开配置端口/资源。容器内 localhost 指容器自身,实际地址须从后端容器连通性验证,不能照抄宿主机地址。配置只接受已批准端点,校验重定向/解析目标和数据范围;名称叫 local 不证明全系统数据不外发,主审等其他模型出口也须核对。
|
||||
|
||||
每个配置有不可变修订,运行引用其版本;敏感值通过后端密钥引用解析,不写前端、Git或日志。变更默认配置只作用于新运行,回滚选择已验证旧配置并新建运行,不篡改旧记录。
|
||||
@@ -0,0 +1,58 @@
|
||||
# 历史经验数据试点与客户展示方案
|
||||
|
||||
状态:产品方案草案,演示数据与真实验证必须分开。
|
||||
|
||||
## 1. 客户沟通目标
|
||||
|
||||
争取客户开放一批用途明确、范围可控的历史评审过程数据,通过盲测判断是否继续扩大。核心表达:让每个新项目调用兴邦历史上处理类似争议的核查方法。没有真实数据时不能证明真实判断准确,也不以模型品牌代替效果证据。
|
||||
|
||||
## 2. 四幕展示脚本
|
||||
|
||||
| 场景 | 屏幕内容 | 现场操作 | 能证明什么 / 不能证明什么 |
|
||||
|---|---|---|---|
|
||||
| 历史经验提炼 | 原始材料→问询→补件→判断变化→经验候选 | 点击争议展开原文;删掉发生日期 | 能展示来源和未知处理;模拟案例不能证明懂兴邦历史 |
|
||||
| 经验用于新项目 | 当前争议与正反历史案例并排 | 切换无经验/有经验两次实际运行 | 展示查什么、为什么查;不能预设“有经验必然更好” |
|
||||
| 项目推进沙盘 | 证据→动作→问题→建议变化 | 加保证、补回款证据、调融资额 | 展示条件推演;不能把模拟差值称为因果提升 |
|
||||
| 客户保留集验证 | 锁定预测→揭示参考→人工复盘 | 客户现场出题或持有未见案例 | 给出可核对的验证过程;小样本不宣传总体准确率 |
|
||||
|
||||
示例故事:利润增长但现金流偏弱,最初要求回款核查;部分证据支持正常账期,部分显示恶化;主审比较差异后形成补件或附条件推进意见。明确标“虚构演示案例”,不使用真实客户名称作背书。
|
||||
|
||||
技术展开层展示:冻结快照、命中经验版本、工具调用结果、专项模型具体问题及实际提供方、缺失项和硬规则。主页面显示业务含义,避免用技术图掩盖未验证结论。
|
||||
|
||||
## 3. 首批数据清单
|
||||
|
||||
| 数据 | 最小字段/材料 | 用途 | 缺失处理 |
|
||||
|---|---|---|---|
|
||||
| 项目索引 | 匿名project_id、业务类型、行业、阶段时间 | 同项目关联与分组 | 无稳定ID不用于跨版本比较 |
|
||||
| 初始送审材料 | 当时版本、取得时间、来源 | 恢复初始信息条件 | 不拿最终报告冒充初稿 |
|
||||
| 问询/评审意见 | 问题、提出时间、角色 | 识别争议和核查策略 | 角色用岗位或假名 |
|
||||
| 补件与答复 | 对应问题、材料版本、取得时间 | 看证据是否回应问题 | 无对应关系人工确认 |
|
||||
| 方案调整 | 金额/期限/增信等前后版本 | 区分补信息与改业务条件 | 不推断变化原因 |
|
||||
| 批复及附带条件 | 审批阶段、结果、日期、条件 | 决策标签与条件 | 与审批通过预测输入隔离 |
|
||||
| 当时制度 | 版本、适用时间和范围 | 判断旧经验是否适用 | 未知制度版本限制迁移 |
|
||||
| 后续表现(可后续) | 条件落实、回款/风险事件时间 | 另行检验经验有效性 | 不作为早期预测时可得输入 |
|
||||
|
||||
优先完整的少量案例链,数量和行业由双方确认。客户保留“原始身份→匿名ID”的映射;同项目全流程保持同一假名。不要求首先开放整库、全量个人信息或生产写权限。
|
||||
|
||||
## 4. 经验访谈提纲
|
||||
|
||||
1. 当时首先担心哪一件事,为什么?
|
||||
2. 哪条信息改变了你的判断;没有它还会同意吗?
|
||||
3. 哪项补件只是增加信息,哪项措施真正改变了项目条件?
|
||||
4. 这条经验有哪些例外,在哪类项目中会失效?
|
||||
5. 当时是否有分歧、例外授权或资料之外的背景?
|
||||
6. 后续结果是否支持当时判断,哪些结论仍不确定?
|
||||
|
||||
访谈是待确认意见,必须与原文和事件关联;不能把个人偏好直接发布成公司规则。
|
||||
|
||||
## 5. 数据流与边界
|
||||
|
||||
客户选择范围/匿名处理→授权导入→材料来源与时间核验→经验草稿→专家确认→开发样本验证→冻结保留集→独立预测→揭示结果→共同复盘。
|
||||
|
||||
部署前明确:原文保存位置、读取角色、模型出口、是否保留供应商日志、保留期限和删除责任。供应商条款及私有化能力尚未核验,不承诺 Jev 可本地部署。默认不把真实材料发送外部服务。
|
||||
|
||||
## 6. 试点验收与扩展条件
|
||||
|
||||
使用验证文档的重大问题漏检、无依据结论、误报、有效补件、专家分歧与效率指标。阈值先约定,结果差也如实展示;基线/经验增强/本地专项增强/Jev增强(可选)分开测。客户数据从开发样本到保留样本逐步开放,不以模型推荐代替专家复盘。
|
||||
|
||||
通过试点后再扩大业务范围;失败则给出问题归因(提取、检索、经验适用、主审推理、数据缺失),不靠调漂亮分数掩盖。数据接入后的价值应通过相同边界的对照证明。
|
||||
@@ -0,0 +1,50 @@
|
||||
# 决策、未决项与学习记录
|
||||
|
||||
日期:2026-09-28。状态区分“用户已明确的方向”和“工程候选待评审”。
|
||||
|
||||
## 1. ADR
|
||||
|
||||
| ID | 决策 / 状态 | 被否方案 / 理由 | 影响 |
|
||||
|---|---|---|---|
|
||||
| ADR-01 | 复用 Next.js+FastAPI 与现有组件,工程候选 | 全面换框架;无法复用已验证链路 | 先迁移可运行基座,再逐步拆模块 |
|
||||
| ADR-02 | 主审综合意见、专项模型局部判断(Jev或本地),用户已明确 | Jev单题直接决定通过;缺乏整体研判 | 证据与硬规则约束最终有效输出 |
|
||||
| ADR-03 | 历史评审过程是核心资产,用户已明确 | 只存通过/不通过标签;丢失核查和判断变化 | 优先收集问询、补件、修改和批复条件 |
|
||||
| ADR-04 | 经验经审核、有适用范围,工程候选 | 自动把任意反馈变成规则;会固化错误 | 复用现有经验治理,建立历史过程关联 |
|
||||
| ADR-05 | 无真实校准前不宣称审批概率,已讨论方向 | 分数/Noul直接转通过率;没有业务验证 | P0概率字段为空;先做可追溯预审和试点 |
|
||||
| ADR-06 | 独立v2代码目录待迁移,当前先备份与文档,用户最新顺序 | 直接覆盖现有部署;难回退 | 旧版Gitea恢复点先核验;v2目录尚未建立 |
|
||||
| ADR-07 | 按用户最新要求直接适配流程正文,原文保留在Gitea恢复点 | 照搬Electron路径/发布命令;无法执行 | AGENTS统一入口,正文按兴邦事实执行 |
|
||||
| ADR-08 | 专项判断支持 Jev 官方服务、本地开源模型和关闭;可切换方向用户已明确,契约细节为工程候选 | 把 Jev Key 作为产品依赖或用通用模型自评分伪装等效概率;供应依赖和指标口径不可控 | 统一业务题库/接口,独立适配/验收;本地路径先交付,Jev 接入不阻塞 |
|
||||
|
||||
## 2. Open Questions
|
||||
|
||||
needed-by 是明确阶段门,不虚构双方尚未约定的日历时间。
|
||||
|
||||
| ID | 待定内容 | 当前处理 | owner | needed-by |
|
||||
|---|---|---|---|---|
|
||||
| OQ-01 | 首批业务类型、关键核查项、正式硬规则 | 只使用标注演示规则;不宣称兴邦制度 | 项目负责人+兴邦评审专家 | M2真实经验建模前 |
|
||||
| OQ-02 | 经验发布资格、独立复核、真实身份体系 | 演示角色明确标示;生产数据入口不开启 | 兴邦业务负责人+系统管理员 | M2生产权限实现前 |
|
||||
| OQ-03 | 专项/主审模型端点、本地模型与硬件、客户数据出口、保留策略 | mock/合成样本;先验证本地路径,缺 Jev Key 不阻塞;不发送真实材料 | 兴邦数据负责人+技术负责人 | 任何真实材料模型调用前 |
|
||||
| OQ-04 | 验收阈值、时延预算、资源/费用上限 | 文档工程限制仅提案,报告耗时不承诺效果 | 产品+测试+实施负责人 | M3配置定案及M5盲测前 |
|
||||
| OQ-05 | “通过”阶段、预测时点、样本量与选择偏差 | probability=null | 兴邦审批负责人+建模负责人 | M6概率需求进入架构前 |
|
||||
| OQ-06 | v2新仓库、云端目录、端口、容器/卷 | 暂用当前独立文档分支;不复用旧生产资源 | 项目负责人+运维 | M1迁移及任何v2部署前 |
|
||||
|
||||
以上待定不阻止当前文档交付;阻止相应业务实现/真实数据阶段越过门禁。用户新指令可直接关闭或调整范围,不重复请求已授权事项。
|
||||
|
||||
## 3. 当前阶段门检查
|
||||
|
||||
| 门 | 状态 / 证据缺口 |
|
||||
|---|---|
|
||||
| Term | 草案已列术语,待业务评审 |
|
||||
| Contract | 已有候选字段/状态/错误;未生成类型或确认DDL |
|
||||
| Rule | BR-01–20已拆分并标职责,待评审 |
|
||||
| Exception | E-01–15有错误和文案,契约校验仍待实现 |
|
||||
| Coverage | 文档AC覆盖机械检查本轮执行;新功能行为测试未实现 |
|
||||
| Decision | OQ项按里程碑阻断,未宣告需求阶段全过 |
|
||||
|
||||
## 4. 学习与持久缺口
|
||||
|
||||
- 流程适配:来源文档含项目特例,最小owner是 XINGBANG-ADAPTATION.md 和根AGENTS入口;以后每次新增规范检查失效路径。当前完成文件与链接核验,不等同长期遵守效果。
|
||||
- 经验数据:默认团队模式和简化案例检索容易被误认为真实学习;owner为架构/产品说明,后续演示必须标来源。
|
||||
- Gitea CI:仅有GitHub YAML,runner与门禁未核验;owner运维,在首次v2合并前确认。
|
||||
- 历史文档密钥:旧DELIVERY.md有遗留凭据,当前恢复快照不改历史;新仓库迁移禁止携带;凭据有效性与轮换由凭据owner另行处理,本轮未访问验证。
|
||||
- 本地工具:沙箱进程初始化失败,已通过受审的升权命令完成工作;不将该环境问题误判为代码故障。
|
||||
@@ -0,0 +1,60 @@
|
||||
# 本次交付记录:流程接入、版本备份和新版文档
|
||||
|
||||
日期:2026-09-28。业务实现未启动;文档仍为评审草案。
|
||||
|
||||
## 1. 用户授权与边界
|
||||
|
||||
用户要求:把 docs/project-process 接入 agent 开发规则;确保当前版本在 Gitea 备份;随后编写兴邦新版开发文档。沿用仓库唯一入口 AGENTS.md,不再建平行的 agent.md。
|
||||
|
||||
实际副作用:本地文档写入、创建Git分支/提交、向已配置origin推送独立分支。未部署、未调用真实模型、未更改数据库、未推送github-backup、未修改main。
|
||||
|
||||
## 2. 原版备份
|
||||
|
||||
- 原分支:codex/deploy-stable-20260909;上游origin/main。
|
||||
- 原HEAD:b10093f9d8a949c6a6f8f8ed6d5b9c1bb044b569。
|
||||
- 备份分支:codex/backup-before-ai-prescreen-v2-20260928。
|
||||
- 备份SHA:4d5a420671cb073a56335bd617e7d0812b8179a9。
|
||||
- 远程:ssh://git@192.168.10.111:2222/qiaoqichao/mini-openclaw.git。
|
||||
- 证据:git push成功后,git ls-remote返回完全相同SHA。
|
||||
- 内容:37个变更文件,包含用户已有未提交代码、测试、部署配置、脚本、resetdata页面、业务文档及新流程原文。
|
||||
- 排除:.docker-codex、本地Office锁文件、重复的project-process.zip;本来忽略的.env、server-deploy.conf、运行数据等均未加入。
|
||||
|
||||
备份扫描检查了新变更的常见凭据模式,包括docx XML,未发现匹配项;这不是完整历史密钥审计。已有旧文档凭据问题未扩散到新文档。
|
||||
|
||||
原始新增文档有11处行尾空格(部分为Markdown换行),备份原样保留并记录在baseline-whitespace.log;恢复快照不声称达到发布门禁。本轮新写文档另做diff检查。
|
||||
|
||||
## 3. 本次文档范围
|
||||
|
||||
根AGENTS流程入口、项目流程兴邦适配、docs/v2目录中的URD、七段规格、架构、详细设计、UI、视觉约束、迁移、验证、部署/Gitea、数据试点、决策和本记录。
|
||||
|
||||
按用户后续要求,project-process的README、01–08及两份URD模板已直接适配兴邦;保留八阶段与原规则编号,原始内容可从4d5a420恢复。根AGENTS同时修正为真实后端app.py和项目工作目录。
|
||||
|
||||
文档分支:codex/xingbang-v2-docs-20260928。最终提交与远程状态使用git rev-parse HEAD及git ls-remote核验;不把文档提交等同正式需求评审或新版发布。
|
||||
|
||||
## 4. 本轮验证
|
||||
|
||||
状态:旧版代码全量验证通过;规范和新版文档的机械检查通过。证据目录:test-evidence/20260928-v2-planning/。
|
||||
|
||||
2026-09-28 执行 backend/venv/Scripts/python.exe scripts/verify.py,工作目录为仓库根;报告在 test-evidence/20260928-164935-4d5a420/REPORT.md。124个后端测试、4项UI源码守卫、Next生产构建、本地与云端Compose配置及diff检查全部通过(9项检查)。未执行--docker,未启动/发布容器。后续仅修改规范文档,业务源码保持备份哈希不变;最终文档检查单独绑定最终文件摘要。
|
||||
|
||||
测试环境使用占位模型Key和测试开关,不复制真实密钥。Gitea CI、真实浏览器E2E和云端实时健康均未在本次验证。
|
||||
|
||||
本轮文档检查:25份Markdown、87个本地链接、16条BR/12条E/16条AC的唯一性与覆盖通过;原流程各R-*编号集合保持一致,来源项目无效命令/路径残留清除。26个非流程备份文件的字节哈希未变,确认未修改既有业务代码。新增文档摘要保存在final-document-hashes.json;git diff格式检查通过。HTML模板仅调整项目说明和例子,未变更脚本/样式,未做浏览器视觉验收。
|
||||
|
||||
审阅:已检查正确性(当前入口/路径)、一致性(前后端及草案状态)、安全(密钥与数据范围)、测试(检查覆盖与未完成项)。这是本轮作者自查;独立业务/技术评审尚未发生,不宣称需求阶段获批。旧版通过也不代表v2功能通过。
|
||||
|
||||
## 5. 回滚与剩余工作
|
||||
|
||||
源码恢复可从已核验分支克隆到新目录,不重置当前工作区。文档修改保留独立提交,可通过后续revert撤销,不删除原始规范。远程资源仅新增分支,无main改写;无需进行破坏性恢复演练。
|
||||
|
||||
剩余:需求与方案评审、独立v2代码抽取、真实权限/模型出口确认、历史过程提炼、Jev适配、沙盘实现、脱敏盲测与后续概率校准。全部列入实施计划和OQ,当前未宣称完成。
|
||||
|
||||
## 6. 追加:专项模型可选设计(2026-09-28)
|
||||
|
||||
用户补充可能无法取得 Jev Key,要求官方服务与本地开源模型可选且承担相同任务。新增 [专项判断设计](11-judgment-providers.md),同步 URD、规格、架构、详细接口、UI约束、实施/验证计划、部署、数据试点和 ADR-08。原有需求编号保留,追加 BR-17–20 / E-13–15 / AC-17–21。
|
||||
|
||||
统一题库和答案契约,提供 jev/local/disabled;local 不读取 Jev 凭据,故障不自动改用外部服务。主审形成综合意见,专项模型不能决定整体通过;模型原生指标分别验证,不将本地自报置信度转为审批概率。先实现本地路径,Jev live 缺 Key 可明确跳过。
|
||||
|
||||
检查:26份Markdown、94个本地链接、20条BR/15条E/21条AC的编号和覆盖、GWT、表格连续性、URD验收引用、文档范围与git diff格式均通过。命令/计划/文件哈希见 test-evidence/20260928-judgment-providers/。仅修改docs/v2,按纯文档轻量路径验证,本次未重跑旧版全量测试。新适配代码、真实模型调用和业务效果均未验证;未更改部署或旧版业务代码。
|
||||
|
||||
沿用 codex/xingbang-v2-docs-20260928 独立提交并备份;最终提交/远程SHA以该证据目录中的 delivery.json 为准。不修改原始备份分支或 main;独立评审及实现阶段仍待完成。
|
||||
@@ -0,0 +1,104 @@
|
||||
# 可切换专项判断模块:Jev / 本地开源模型
|
||||
|
||||
日期:2026-09-28。状态:用户已明确可切换方向;本文件为工程设计候选,代码、配置加载和真实模型接入均未实现。对应 FR-JUD-01、BR-17–20、AC-17–21,并沿用 BR-05/09/12/13/16。
|
||||
|
||||
## 1. 产品职责与选择
|
||||
|
||||
模块负责回答“现有证据是否支持某个具体判断”,例如“提供的回款材料是否足以支持账期延长的解释”。输入同一套问题、经验适用条件、评价标准和证据;输出可被主审消费的结构化专项判断。历史经验归平台管理,不存成某一家模型的专有资产。
|
||||
|
||||
| 模式 | 实际执行方 | 凭据要求 | 对主审的作用 |
|
||||
|---|---|---|---|
|
||||
| jev | Jev 官方服务,通过专用适配器 | 有效 Jev 凭据及数据出口授权 | 提供局部判断,按统一契约返回 |
|
||||
| local | 客户/开发环境部署的开源模型推理服务,通过本地适配器 | 无需 Jev Key;本地服务自己的认证按部署设置 | 执行同一业务任务,按统一契约返回 |
|
||||
| disabled | 不执行专项模型调用 | 无需专项模型凭据 | 主审继续使用规则、工具和经验,标明专项核查未完成 |
|
||||
|
||||
默认关闭;有已验证的本地配置后,可显式选择或将其设为默认。不得因为缺少 Jev Key 阻止整个服务启动。此处关闭只关闭专项模块,主审自身仍需独立的可用模型配置。
|
||||
|
||||
本地方案替代的是专项模块的业务职责,不是复制 Jev 权重、训练方法或原生概率能力。不承诺两者逐题同答、评分相等或准确率相等;这些必须通过相同样本上的独立测评证明。Jev 是否支持私有化不在本设计假设内。
|
||||
|
||||
## 2. 架构与唯一职责
|
||||
|
||||
目标调用链(未实现):主审提出具体问题 → 统一判断入口 → 配置/题型/数据出口检查 → 所选适配器 → 输出归一化与证据校验 → 主审综合意见 → 硬规则与完整性校验。
|
||||
|
||||
- `backend/contracts/prescreen.py` 拟定义共享题目、请求和结果;前端不得依赖厂商响应。
|
||||
- `backend/services/judgment_provider.py` 拟负责路由、预算与归一化;Jev/local 各有专用适配实现,落点在 M3 按模块大小拆分,避免再造通用插件平台。
|
||||
- 主审拥有整体研判;适配器没有写 recommendation 或审批状态的权限。
|
||||
- 经验检索、证据来源、确定性计算和硬规则沿用平台能力,不因更换专项模型更换一套。
|
||||
- 输出解释由主审结合经核验的证据形成,不假设供应商必定返回理由或可靠引用。本地模型生成的文字也不自动当作证据。
|
||||
|
||||
问题示例:题型 choice;选项 supported / contradicted / insufficient;要求只判断“材料是否支持所述解释”。这三个选项不是项目的通过/否决/补件状态。同一题目可由所选 Jev 或 local 执行,日常运行只调用选中的提供方;综合结论仍由主审形成。
|
||||
|
||||
## 3. 配置契约与运行选择
|
||||
|
||||
`JudgmentProfile` 由管理员在后端部署配置维护:
|
||||
|
||||
| 字段 | 类型 / 约束 |
|
||||
|---|---|
|
||||
| id / revision | 非空字符串1–128字符 / 正整数;修改生成新修订 |
|
||||
| display_name | 非空字符串1–100字符 |
|
||||
| provider | jev / local;disabled 不需要配置对象 |
|
||||
| endpoint_ref | 后端已批准端点引用,不能由业务请求指定 URL |
|
||||
| credential_ref | 可空密钥引用;jev 必需,local 按服务认证要求;不保存密钥值 |
|
||||
| model_version / adapter_version / prompt_version / mapping_version | 非空版本标识;无自定义提示的适配填 not_applicable;若厂商无不可变模型修订则标 unresolved,不宣称可精确回放,生产启用前解决 |
|
||||
| capabilities | choice / score / binary 的非空子集,表示已通过该配置验收的题型 |
|
||||
| allowed_data_domains | demo / production 的非空子集,另叠加项目和调用者权限 |
|
||||
| readiness | ready / unavailable;仅验证通过且配置完整者可为 ready |
|
||||
|
||||
P0 不提供在线修改配置接口。候选只读接口 `GET /api/prescreen/projects/{project_id}/judgment-profiles` 返回 `{profiles:[{id,revision,display_name,provider,capabilities}],default_profile_id:string?}`;只列对当前项目、调用者和数据域已获准且 ready 的配置,返回默认值也须通过相同过滤。无可用配置返回空列表和 null;不返回端点或凭据。项目无访问权限沿用 404 NOT_FOUND。
|
||||
|
||||
运行请求沿用 `enable_judgment:boolean=false`,新增 `judgment_profile_id:string?`:
|
||||
|
||||
1. 开关 false 且 ID 为空:冻结 provider=disabled,其余配置版本为空;不访问任一专项服务。开关 false 同时传 ID 属于 E-07 INVALID_REQUEST,避免静默忽略选择。
|
||||
2. 开关 true:有 ID 使用指定的当前修订;无 ID 则解析后台默认。不存在/未获准/不可用/没有默认均返回 E-13,不静默关闭。服务启动不校验未选中的 Jev 密钥。
|
||||
3. 入队前冻结配置修订和模型/适配/提示/映射版本,返回 ScreeningRun.judgment_config。幂等重放返回原运行,即使默认配置已变化也不重新解析。
|
||||
4. 队列执行与每次发送前仍校验当前授权和撤销状态。冻结版本不赋予永久外发权限;版本被禁用/凭据被撤销则记 E-06,出口被撤销记 E-10;不改用新版本或其他提供方。
|
||||
5. 配置切换须创建新运行;旧运行保持原记录。预算耗尽、限流或故障按详细设计重试上限处理,不做自动跨提供方回退。
|
||||
|
||||
## 4. 统一问题与请求
|
||||
|
||||
拟内部接口 `judge(request: JudgmentRequest, frozen_profile: JudgmentProfile) -> Judgment`;异常由统一入口转为约定错误,厂商原始异常不能直接返回浏览器。
|
||||
|
||||
`JudgmentRequest`:run_id、snapshot_id、question_id、question_version(共同 ID 约束),type:choice/score/binary,question:string[1..2000],criteria:string[1..4000],evidence_ids:string[0..20],options:string[],score_range:{min:number,max:number}?。调用者提交引用,后端从冻结授权快照提取对应证据文本,用户不能用 ID 夹带其他项目片段。
|
||||
|
||||
choice 要求 options 为2–20个唯一非空选项(各1–100字符);score 要求有限 min<max、options为空;binary 要求两者为空。题目版本一经冻结不变;适配器可以转格式,但不能更换业务问题、证据、等级定义或增减事实。证据为空按缺证处理,不请求模型,返回 completed+unknown,并保留缺证原因;不把材料缺失解释为不支持。
|
||||
|
||||
本地适配器采用所选服务已经验证支持的结构化输出方法,随后进行服务端严格校验;不能依赖“请返回 JSON”的提示就宣称有结构保证。不能支持所需题型时 E-14,畸形输出 E-15;不让主审悄悄猜一个分数补齐。
|
||||
|
||||
## 5. 统一答案与供应商差异
|
||||
|
||||
`JudgmentAnswer` 使用可辨识联合:
|
||||
|
||||
| kind | 字段 | 校验 |
|
||||
|---|---|---|
|
||||
| choice | value:string | 必须属于该题冻结 options |
|
||||
| score | value:number | 有限数值,且在该题 score_range 内 |
|
||||
| binary | value:boolean | 仅表达该题命题是否得到支持,不表示审批通过 |
|
||||
| unknown | reason_code:missing_evidence/inconclusive | 明确无法判断,不强制选择肯定或否定 |
|
||||
|
||||
正常答案 kind 与题型一致,unknown 对所有题型有效。结果字段见 [详细设计](03-detailed-design.md):completed 必须有合法 answer;failed/skipped 的 answer 必须为 null;failed 必须有 error_code,skipped 必须有 skip_reason(disabled/not_configured/not_authorized/unsupported)。例如能力缺失为 skipped+unsupported,并附 E-14;传输/输出错误为 failed,分别 E-06/E-15。关闭时已计划的题目可记 skipped+disabled;无计划题目时运行级保留关闭标识及降级说明,不制造题目。状态成功不等于业务通过。
|
||||
|
||||
`evidence_ids` 保存进入该判断的授权证据范围;它不证明模型真的使用或正确理解了证据。新增引用需再校验,主审仍逐项检查是否支持意见。
|
||||
|
||||
`NativeMetric`:`name:string`、`value:number`(有限值)、`semantics:string`(非空)、`source:provider_native/self_reported`。`native_metrics` 可为空;范围校验根据版本化适配规范,禁止把缺失值填0或1。它只用于审计/独立评测,不成为通用置信阈值或审批概率。
|
||||
|
||||
Jev 专有 Choice/Score/Noul 等响应只在适配器内部处理,具体厂商 schema 在真实接入前依据官方版本确认。若某题由原生连续输出转为 binary,须有该模型/题型独立验证过的映射和拒答区间;未验证就不声明 binary 能力,不默认套用0.5阈值。原始供应商指标仅保留原语义,不为 local 捏造同名概率。
|
||||
|
||||
本地模型可返回 choice/score/binary/unknown;没有原生概率就返回空指标。模型自己写的“置信度90%”即使记录也只能标 self_reported,不作为已校准概率。两类模型的原生指标都不能改写 ScreeningRun.probability;P0 仍为 null。
|
||||
|
||||
## 6. 失败边界与回滚
|
||||
|
||||
配置拒绝 E-13 发生在创建运行之前;运行中能力不支持 E-14、输出非法 E-15、调用故障 E-06、外发禁止 E-10、预算耗尽 E-08 均有可见记录。相关题目未完成时保留其他结果;关键依据缺失则依主审完整性规则给补件/信息不足,不能默认推进。
|
||||
|
||||
默认配置切回旧修订只影响未来新运行;持久化的运行配置与判断字段通过追加迁移引入。DDL 在 M1 定案,不覆盖旧对象或当前生产库。外部模型权重、密钥、原始材料不作为 Git 备份内容。
|
||||
|
||||
## 7. 验收与交付范围
|
||||
|
||||
AC-17:同题/同证据,两适配器输出可被同一主审契约消费;local 在无 Jev Key 的环境实际运行,调用记录无 Jev 请求。
|
||||
AC-18:畸形值拒绝;指标保留原语义;local 自评分不成为审批概率;无证据与合理拒答返回 unknown。
|
||||
AC-19:配置权限、禁用状态、能力缺失和出口撤销均有反例测试;不外发未批准材料。
|
||||
AC-20:排队后切换默认不会改变该运行;重试不改提供方,幂等重放不改配置。
|
||||
AC-21:两种服务均不可用时仍可关闭专项模块运行主审,结果明确限制。
|
||||
|
||||
业务效果验收使用同一冻结样本集和专家标准,分别统计两种模式的漏检、误报、无依据结论、拒答率、时延和成本。契约兼容不代表模型能力等价;验收合格才能将对应配置标为 ready。Jev 没有 Key 时其 live 测试标未验证,不阻塞已经通过验证的 local 模式。
|
||||
|
||||
本地具体模型、硬件和服务协议仍属于 OQ-03/04,接入前选择并验证;没有真实历史数据时只报告演示和合成用例结果。当前交付仅为设计,后续按 M3 落代码、测试与配置模板。
|
||||
@@ -0,0 +1,56 @@
|
||||
# 兴邦智审 v2 · Superdesign 交互原型
|
||||
|
||||
日期:2026-09-28。目标:验证视觉风格、信息层级与核心操作,不代表新版业务功能已实现。
|
||||
|
||||
## 用户已选方向
|
||||
|
||||
深色导航+浅色工作区;高端大气、直观易用、有科技感。以深绿导航、白色证据面板和精确的关系图呈现金融评审工作台。首屏先回答“当前建议是什么、依据是什么、下一步做什么”。
|
||||
|
||||
## 原型范围
|
||||
|
||||
一个连通的项目工作台:综合预审、历史经验、推进沙盘通过页签切换。证据抽屉展示原文与缺证,补件清单弹窗说明具体材料。模型选项展示本地开源模型(演示)、Jev(未配置)和关闭。正式审批不纳入原型操作。
|
||||
|
||||
虚构企业与项目:恒远精密设备有限公司 / DEMO-026;3,000万元、36个月及全部材料数量均为演示数据。主审意见为“补充材料后再判断”,不展示未经校准的通过概率。
|
||||
|
||||
## 状态与交互约束
|
||||
|
||||
- 综合页:结论、两项重点问题、证据关系和下一步;来源节点可展开,关闭抽屉返回原位置。
|
||||
- 历史经验:问询→补件→证据变化→历史意见,显示适用条件与例外;相似不直接导出相同结论。
|
||||
- 推进沙盘:选择假设补件→运行模拟→比较变化;持续标记假设条件,返回真实预审后原意见不变。
|
||||
- 模型选择:本地仅演示,Jev未配置不可调用,关闭保留主审意见及缺失专项提示;切换不能伪称已连接模型。
|
||||
- 补件清单:打开/关闭、可复制内容;不提供伪造的报告下载。
|
||||
- 验证入口:只展示待开展的对照方案,不展示虚构准确率。
|
||||
|
||||
## 原型验收(与生产验收分开)
|
||||
|
||||
| ID | Given / When / Then | 需求关联 |
|
||||
|---|---|---|
|
||||
| P-01 | Given 演示项目,When 打开首页,Then 首屏显示预审意见、关键依据、下一步及演示标识 | AC-05/07/12 |
|
||||
| P-02 | Given 一条问题,When 点击证据,Then 可读原文、定位和缺失项,关闭后回到原页面 | AC-08 |
|
||||
| P-03 | Given 历史案例,When 切换历史经验,Then 看到问询/补件/判断变化与适用例外 | AC-02/04 |
|
||||
| P-04 | Given 模拟补件,When 运行并返回真实预审,Then 原意见未变,模拟结果有持续标识 | AC-11 |
|
||||
| P-05 | Given 模型选项,When 选择关闭,Then 显示未执行专项核查;Jev未配置不可调用 | AC-17/21 |
|
||||
| P-06 | Given 补件需求,When 生成清单,Then 可查看具体材料要求,无虚假的后端完成状态 | AC-07 |
|
||||
| P-07 | Given 桌面/窄屏和键盘操作,When 阅读及展开界面,Then 正文无裁切、可见焦点、可退出弹层 | NFR-04 |
|
||||
|
||||
## 设计工具与数据边界
|
||||
|
||||
使用用户指定的 Superdesign,设计模型 Gemini 3.1 Pro。仅上传本轮独立编写的概念说明与虚构内容;上传现有前端源码的操作被自动审批拒绝,随后改用不含源码的概念设计。原项目源码不作为本次生成载荷。六份源码分析文件仅留本地供设计人员理解,不声称外部设计已与现有组件逐像素一致。
|
||||
|
||||
持久设计上下文及原型标识放 .superdesign/resume.json;临时生成日志/HTML在 .superdesign/tmp/,验证证据在 test-evidence/20260928-superdesign-prototype/。不修改现有应用路由、业务逻辑或部署。
|
||||
|
||||
## 实施边界
|
||||
|
||||
原型页面上的交互使用演示状态。源代码实现仍按 M3/M4 和项目流程落地;设计稿存在不证明接口、模型调用、权限或效果成立。视觉审阅与实际业务验收分别记录,不将作者目测称为独立验收。
|
||||
|
||||
## 已交付原型与检查
|
||||
|
||||
- [可点击预览](https://p.superdesign.dev/draft/7484f5c4-0415-4a87-a772-c42339680737)。
|
||||
- [Superdesign 画布](https://superdesign.dev/teams/657ee591-1f83-46ec-8917-918dec0f0d4b/projects/88a8388d-b079-4118-833b-c8b396bf346f)。
|
||||
- [本地 HTML](prototypes/prescreen-workbench.html) / [首页截图](prototypes/prescreen-overview.png)。HTML使用公开CDN样式和图标,首次打开需要网络。
|
||||
|
||||
草稿 7484f5c4-0415-4a87-a772-c42339680737,保存版本2。初稿由 Superdesign Gemini 3.1 Pro 生成,随后在同稿内直接补齐确定的交互、响应式和文案缺口;未额外生成视觉变体。云端回读HTML与本地已验文件一致;入库HTML仅清理3处行尾空白,内容与行为保持一致。
|
||||
|
||||
导出原型的20项行为检查通过:证据抽屉/关闭焦点、历史经验、空模拟守卫、假设结果与真实基线隔离、Jev禁用、本地/关闭切换、补件与验证弹窗、1440/1024/390三种宽度无文档横向溢出、移动导航及无运行脚本错误。首轮移动导航关闭失败,原因与修复留在fix-record.md,复验保留独立截图。同样20项检查在Superdesign线上预览再次通过,证据在remote-check-03/interaction-checks.json。
|
||||
|
||||
检查边界:使用独立无头浏览器验证演示状态;内置浏览器连接因本机环境故障未成功。作者截图自查不等于独立视觉评审;未完成全量无障碍审计,未连接业务接口或真实模型。现有生产源码不变,不重跑与此次原型无关的旧版应用套件。
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
status: candidate-not-implemented
|
||||
colors:
|
||||
primary: "#17634c"
|
||||
surface: "#ffffff"
|
||||
text: "#1d1d1f"
|
||||
typography:
|
||||
bodySize: "16px"
|
||||
bodyLineHeight: 1.6
|
||||
family: '"Microsoft YaHei", "PingFang SC", sans-serif'
|
||||
rounded:
|
||||
navigationItem: "9px"
|
||||
spacing:
|
||||
navigationHorizontal: "24px"
|
||||
components:
|
||||
primaryAction:
|
||||
background: "{colors.primary}"
|
||||
foreground: "{colors.surface}"
|
||||
surfacePanel:
|
||||
background: "{colors.surface}"
|
||||
color: "{colors.text}"
|
||||
---
|
||||
|
||||
# 兴邦 v2 视觉契约草案
|
||||
|
||||
## Overview
|
||||
|
||||
当前是基于已观察代码整理的候选契约。此文件尚未被 CSS 或构建消费,状态为 Present,不能声称 Token-ready/Aligned/Backstopped。正式 token 文件路径、导出与防漂移测试在 M1/M4 决定并实现。
|
||||
|
||||
## Colors
|
||||
|
||||
primary #17634c 来自 src/components/xingbang/navigation.css 的 xb-brand-mark 及 src/app/globals.css 的 xingbang-mark;surface 白色取自现有业务面板;text #1d1d1f 来自 globals.css。当前全局 accent 是蓝色 #002fa7,与业务导航绿色并存,不能声称已经统一品牌主题。
|
||||
|
||||
提案:业务预审延续深绿和白色证据面板,减少装饰色。primary 用于主动作和品牌,不代表风险结论;成功/警告/阻断必须文字标识。辅助状态色和对比度尚待审查,未擅自编造正式 token。
|
||||
|
||||
## Typography
|
||||
|
||||
正文 16px、行高 1.6 来自 globals.css;中文字体延续现有字体栈。预审结果、问题、证据三层信息明确,不把大量技术标签放在首页。数字不得比证据更突出,尤其不放未验证的通过概率。
|
||||
|
||||
## Layout
|
||||
|
||||
项目与版本头部 → 判断摘要 → 核查/经验主区 → 证据抽屉/动作侧栏。小窗口切换为纵向,路径图始终有文字列表。导航水平 padding 24px 与导航项圆角 9px 来自 navigation.css 的后置业务可读性规则;不意味着其他组件强制使用这些值。
|
||||
|
||||
## Elevation & Depth / Shapes
|
||||
|
||||
只对抽屉与浮层建立必要层次。面板阴影、圆角、间距完整尺度待视觉评审,禁止各组件自行新增任意裸值。已观察导航值不等于全站设计系统。
|
||||
|
||||
## Components
|
||||
|
||||
RunSummary、EvidenceDrawer、CaseTimelinePanel、ExperienceEditor、ScenarioPanel、EvaluationPanel 均为提案,状态和权限以 UI Spec 为准。动作 hover/disabled/focus token 待补齐并验证;原型与正式实现必须使用同一来源。
|
||||
|
||||
## Do / Don't
|
||||
|
||||
- 用“依据、差异、尚未验证”帮助业务人员理解;不要用黑盒发光大脑代替证据链。
|
||||
- 线宽代表定义明确的等级;不要把模拟路径长度、线宽或模型确信度当作概率。
|
||||
- 减少动效可关闭动画;焦点、错误、成功必须有文字和可见形状。
|
||||
- 实施时验证正文/焦点对比度达到流程要求;当前尚未执行,不能标已通过。
|
||||
|
||||
## 缺口与门禁
|
||||
|
||||
needs-design-decision:完整状态色、间距尺度、响应断点、组件状态 token;owner 前端负责人;needed-by UI 实现前。需要 token 导出检查、对比度测试、键盘测试及文案 key 检查,结果纳入 test-evidence。
|
||||
|
||||
## 2026-09-28 原型方向补充
|
||||
|
||||
用户已选“深色导航+浅色工作区”。Superdesign 原型采用深绿导航、浅灰工作背景和白色证据面板,通过关系图与克制动效体现科技感。具体候选颜色、间距及交互在 .superdesign/concept-design-system.md;记录与验收见 [交互原型](12-prototype.md)。这些为原型设计决策,尚未写入生产CSS,以上已观察值的事实状态不变。
|
||||
@@ -0,0 +1,42 @@
|
||||
# 兴邦智审 v2:开发文档入口
|
||||
|
||||
版本:0.1 · 2026-09-28 · 状态:评审草案。
|
||||
|
||||
产品方向:评审经验驱动的 AI 预审。主审 Agent 综合判断,可切换专项判断模块(Jev 官方服务 / 本地开源模型)承担局部判断,确定性程序执行计算和规则;历史评审过程是核心经验来源。当前没有兴邦真实历史数据,演示不能宣称真实审批通过概率。
|
||||
|
||||
## 当前工作边界
|
||||
|
||||
本轮已先保存原版源码恢复点,再编写流程与新版文档。未创建独立 v2 代码目录、未实施新版 API / Jev / 历史过程提炼、未部署或覆盖现有服务。迁移仍是后续任务,见实施计划;不能把现有名字含 v2 的旧模块误认为本轮新版已完成。
|
||||
|
||||
备份基线:`4d5a420671cb073a56335bd617e7d0812b8179a9`,Gitea `codex/backup-before-ai-prescreen-v2-20260928`;已通过远程 SHA 比对。此前主线:`b10093f9d8a949c6a6f8f8ed6d5b9c1bb044b569`。详情见交付记录。
|
||||
|
||||
## 阅读顺序
|
||||
|
||||
| 文档 | 用途 |
|
||||
|---|---|
|
||||
| [流程适配](../project-process/XINGBANG-ADAPTATION.md) | 如何执行同事提供的八阶段规范 |
|
||||
| [URD](URD.md) | 用户、产品目标、功能、分期与产品验收 |
|
||||
| [需求规格](01-requirements.md) | 七段规格、BR/E/AC 可追溯规则 |
|
||||
| [架构](02-architecture.md) | 已有能力、目标边界、职责与 ADR |
|
||||
| [详细设计](03-detailed-design.md) | 候选接口、数据契约、状态、失败处理 |
|
||||
| [专项判断模型切换](11-judgment-providers.md) | 无 Jev Key 的本地路径、统一契约、能力差异与切换验收 |
|
||||
| [交互原型](12-prototype.md) | Superdesign 视觉方向、演示范围与原型验收 |
|
||||
| [UI Spec](04-ui-spec.md) | 页面骨架、状态、权限和演示交互 |
|
||||
| [设计契约](DESIGN.md) | 已观察视觉来源、语义 token 提案及缺口 |
|
||||
| [实施计划](05-implementation-plan.md) | 核心代码迁移与分批交付 |
|
||||
| [验证方案](06-validation.md) | 自动化、专家盲测和概率验证边界 |
|
||||
| [部署与 Gitea](07-deployment-and-gitea.md) | 当前真实入口、备份恢复和 v2 隔离要求 |
|
||||
| [数据试点与展示](08-data-pilot-and-demo.md) | 争取历史数据开放的演示脚本与试点方案 |
|
||||
| [决策与未决项](09-decisions.md) | 已接受方向、候选决策、owner 与到期阶段 |
|
||||
| [本次交付记录](10-delivery-record.md) | 备份证据、检查结果和未完成事项 |
|
||||
|
||||
## 阶段状态
|
||||
|
||||
- ① 产品目标来自本次会话;需求规格为草案,尚待产品及兴邦评审人员确认。
|
||||
- ②–④ 为支持需求评审提前记录的候选设计,不视为阶段门禁完成。
|
||||
- ⑤–⑧ 文档描述未来实施、验证、交付和经验沉淀方式;本轮只实际执行文档检查和源码备份。
|
||||
- 现有基线测试结果仅证明旧版状态,不证明 v2 功能已经实现。
|
||||
|
||||
## 下一步
|
||||
|
||||
先评审 URD 和需求规格,优先确定首批业务类型、经验审核角色、数据使用边界。确认后按实施计划建立独立 v2 目录,逐批迁移与验证;真实数据试点和概率校准分别设门禁。
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
# 兴邦智审 v2 用户需求文档
|
||||
|
||||
## 1. 文档控制
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| 编号 | URD-XB-V2-0.1 |
|
||||
| 日期 / 状态 | 2026-09-28 / 草稿待评审 |
|
||||
| 需求来源 | 用户本次会话:聚焦 AI 预审、历史评审经验、可切换专项模型(Jev / 本地开源模型)和数据开放展示 |
|
||||
| 产品 owner | 项目负责人;业务评审 owner 为兴邦指定评审专家,待指派 |
|
||||
| 维护位置 | docs/v2/URD.md |
|
||||
|
||||
变更记录:0.1 首次整理;本文为后续规格输入,不代表客户已确认。
|
||||
|
||||
## 2. 目的与范围
|
||||
|
||||
帮助客户经理在项目早期获得有依据的推进建议、主要障碍、最小补件路径;帮助评审人员将历史项目中的调查方法沉淀为可审核、可复用、可撤回的经验。
|
||||
|
||||
P0 范围:受控演示、项目事实与证据、历史案例过程与经验卡、主审综合预审、可选专项核查(Jev 官方服务 / 本地开源模型 / 关闭)、情景模拟、对照验证。先演示并验证经验链,再争取一批脱敏历史案例。
|
||||
|
||||
不在 P0:自动正式审批、自动放款、未经校准的通过概率、默认访问兴邦生产库、个人评审员通过倾向预测、用真实材料直接训练外部模型。这些能力或不属于本产品职责,或依赖另行确认的数据和验证条件。
|
||||
|
||||
成功条件:在明确标注的演示材料上,用户能追溯判断依据,理解新增材料为何改变或没有改变结论;脱敏试点效果经客户持有的保留样本验证后单独报告。
|
||||
|
||||
## 3. 参考
|
||||
|
||||
- [项目流程](../project-process/README.md)及 [URD 模板](../project-process/templates/URD-Template.md)。
|
||||
- [当前技术路径](../兴邦金租对公智能评审平台技术路径与AgentLoop说明-v1.0.md)。
|
||||
- [新版需求规格](01-requirements.md)、[架构](02-architecture.md)、[决策记录](09-decisions.md)。
|
||||
|
||||
## 4. 术语与角色
|
||||
|
||||
| 术语 | 用户语言定义 |
|
||||
|---|---|
|
||||
| 主审 Agent | 组织核查、比较证据并形成 AI 预审意见的助手 |
|
||||
| 预审意见 | 建议推进、补充后再判断、暂不建议推进、信息不足;均非正式审批 |
|
||||
| 经验卡 | 某类争议如何调查、哪些证据改变判断、适用与例外条件的记录 |
|
||||
| 判断节点 | 一项具体争议及其核查、证据和当时意见 |
|
||||
| 情景模拟 | 在假设动作完成的条件下重新评估,尚未改变真实项目事实 |
|
||||
| 审批概率 | 指定审批阶段和时间口径下的获批估计,须独立历史校准 |
|
||||
| 盲测 | 系统先锁定结果,再与保留的专家意见和结果对照 |
|
||||
|
||||
| 角色 | 任务 | 成功表现 |
|
||||
|---|---|---|
|
||||
| 客户经理 | 提供材料、理解障碍、补件 | 知道下一步优先做什么及依据 |
|
||||
| 评审员 | 核实经验、复核争议 | 看得懂证据链,能纠正和说明分歧 |
|
||||
| 经验发布人 | 审核适用范围、发布和撤回经验 | 候选经验不会未经审核直接生效 |
|
||||
| 数据/系统管理员 | 管理数据范围、模型出口和版本 | 每次运行有明确数据范围和访问记录 |
|
||||
| 项目负责人/只读访客 | 观看演示、比较效果 | 分清模拟能力和实测效果 |
|
||||
|
||||
发布人独立资格与真实身份接入方式见 OQ-02;P0 演示用明示的模拟角色,不当作生产鉴权。
|
||||
|
||||
## 5. 核心体验
|
||||
|
||||
历史档案 → 争议时间线 → 专家确认经验 → 新项目核查 → 补充证据与模拟 → 复核与对照验证。
|
||||
|
||||
页面入口拟整合到项目工作台:预审总览、历史经验、证据详情、推进沙盘、验证看板。保持当前项目上下文;不新增一批与现有工作台重叠的孤立旧页面。
|
||||
|
||||
交付面为中文 Web;保留现有 Next.js + FastAPI 技术基线。桌面应用、移动专用端暂不纳入。
|
||||
|
||||
## 6. 功能模块需求
|
||||
|
||||
| 模块 | 功能编号 | 用户任务 / 主流程 | 异常与用户行为 | 验收 |
|
||||
|---|---|---|---|---|
|
||||
| MOD-01 项目事实 | FR-FACT-01 | 上传材料→查看提取候选→确认事实与来源 | EX-FACT-01 解析失败:保留原件,允许人工录入并标注来源 | AC-U01 |
|
||||
| MOD-02 历史过程 | FR-HIST-01 | 导入案例→整理争议、补件、证据、决定的时间线 | EX-HIST-01 时间或来源缺失:显示未知,禁止补造 | AC-U02 |
|
||||
| MOD-03 经验治理 | FR-EXP-01 | 提炼候选→专家修改→审核发布→必要时撤回 | EX-EXP-01 无审核资格/过期:不进入有效经验集 | AC-U03 |
|
||||
| MOD-04 主审预审 | FR-REV-01 | 发起预审→查看核查过程→获得意见与补件清单 | EX-REV-01 关键材料不足/工具失败:显示信息不足或部分结果 | AC-U04 |
|
||||
| MOD-05 专项核查 | FR-JEV-01 | 查看具体材料是否支持结论及核查状态 | EX-JEV-01 未配置/超时:显示未执行,不伪造返回值 | AC-U05 |
|
||||
| MOD-05 专项核查 | FR-JUD-01 | 管理员配置可用模型,用户在授权配置中选择后发起新预审;同一套业务问题可由 Jev 或本地开源模型执行 | EX-JUD-01 配置/能力不满足:显示原因,不自动改用外部服务 | AC-U09 |
|
||||
| MOD-06 推进沙盘 | FR-SIM-01 | 选择假设动作→比较问题变化→返回真实结果 | EX-SIM-01 假设冲突/无证据:提示限制,禁止当作正式改善 | AC-U06 |
|
||||
| MOD-07 效果验证 | FR-EVAL-01 | 锁定样本与版本→运行→揭示参考结果→专家复盘 | EX-EVAL-01 参考答案提前泄露:样本作废,不计盲测 | AC-U07 |
|
||||
| MOD-08 数据试点 | FR-PILOT-01 | 查看数据用途→选择受控案例范围→审核导入 | EX-PILOT-01 数据出口未批准:阻止外部发送 | AC-U08 |
|
||||
|
||||
各功能前置条件均为项目/案例访问范围有效;真实数据须有授权范围。详见规格的权限、错误和状态定义。上述 8 个模块均为 P0 范围;FR-JEV-01 保留历史编号,专项模块的实现不绑定 Jev 品牌。各模块按实施计划分批实现,不能一批全上。
|
||||
|
||||
## 7. 数据与内容
|
||||
|
||||
优先需要同一历史项目的初始材料、问询、补件、方案版本、批复条件与制度版本。正式决定与投放后表现分开记录。案例间通过受控假名关联,同一项目不能拆进开发集与保留集。
|
||||
|
||||
每条经验保留原文定位、发生时间、记录时间、适用条件、例外、审核人与版本。缺失事项用未知表示。示例案例和代码内置模式只用于演示,不作为真实兴邦经验或频次。
|
||||
|
||||
## 8. 非功能需求
|
||||
|
||||
| 编号 | 要求与验收口径 |
|
||||
|---|---|
|
||||
| NFR-01 可追溯 | 每条正式展示的实质判断须有证据引用或明确的缺证状态;引用解析失败不得静默忽略 |
|
||||
| NFR-02 稳定性 | 相同请求幂等键及载荷不产生重复运行;修改载荷复用键返回冲突 |
|
||||
| NFR-03 降级 | 所选专项模型不可用时展示缺失核查;不得把超时转换成通过 |
|
||||
| NFR-04 可访问性 | 键盘可完成核心流程;状态同时有文字;支持减少动效,实施时测试对比度 |
|
||||
| NFR-05 可观测性 | 每次运行记录数据/组件/模型/经验版本和工具结果状态,不记录凭据 |
|
||||
| NFR-06 性能 | 首版先记录端到端耗时、模型耗时与调用成本;验收阈值在 OQ-04 关闭后确定,当前无速度承诺 |
|
||||
|
||||
## 9. 权限与信任
|
||||
|
||||
SEC-01 项目、团队和演示/生产数据域隔离;SEC-02 材料正文仅作数据,不能成为工具指令;SEC-03 外部模型出口必须属于当前数据域的已批准策略;SEC-04 经验发布与撤回有资格校验和审计;SEC-05 真实身份确认前不开放生产数据。
|
||||
|
||||
查看为 L0,提炼草稿和模拟为 L1,经验发布/对外发送为 L2 受权限与明确策略约束;放款、改写审批结果等 L3 金融动作不在 P0。模型不能自行授予权限。
|
||||
|
||||
## 10. 版本规划
|
||||
|
||||
P0:演示经验链、主审核查、专项复核、沙盘和验证框架;P1:脱敏试点、真实流程映射与经验覆盖扩展;P2:足量历史结果上的审批概率校准。投放风险预测另立需求,不与审批通过混为一谈。
|
||||
|
||||
每批必须有可运行的端到端结果和对应 AC;未完成事项保留待办,不以展示页面替代后端能力。
|
||||
|
||||
## 11. 产品验收
|
||||
|
||||
| 编号 | Given / When / Then |
|
||||
|---|---|
|
||||
| AC-U01 | Given 上传材料,When 确认候选事实,Then 能定位原文并保留原版本 |
|
||||
| AC-U02 | Given 含问询和补件的案例,When 查看过程,Then 可看到关键判断变化,缺日期显示未知 |
|
||||
| AC-U03 | Given 未审核或已撤回经验,When 发起新预审,Then 不得作为有效经验应用 |
|
||||
| AC-U04 | Given 有矛盾的新项目,When 预审完成,Then 指出冲突与补查路径,不绕过硬性规则 |
|
||||
| AC-U05 | Given 专项模块关闭或所选服务未配置,When 查看结果,Then 明确未执行且不展示伪造概率 |
|
||||
| AC-U06 | Given 模拟完成一个动作,When 比较结果,Then 真实快照保持不变且模拟标识持续可见 |
|
||||
| AC-U07 | Given 客户保留样本,When 系统锁定结果后揭示标签,Then 可复盘分歧且记录无答案泄漏 |
|
||||
| AC-U08 | Given 未批准外发的数据域,When 请求外部模型,Then 阻断请求且保留不含原文的审计 |
|
||||
| AC-U09 | Given 没有 Jev Key 但已配置可用本地模型,When 选择本地并预审,Then 相同问题与证据完成专项核查且不访问 Jev;切换后留新运行,不覆盖旧结果 |
|
||||
|
||||
核心效果指标:重大问题漏检、无依据结论、误报、有效补件、专家分歧、耗时与成本。目标值由试点双方在开测前确定;不预先承诺准确率。
|
||||
|
||||
## 12. 假设与未决项
|
||||
|
||||
当前假设:中文 Web、无真实历史库、先用标注演示数据、主审负责综合意见。首批行业、专家发布权限、模型数据出口、验收阈值和“通过”的阶段定义均见 [OQ 清单](09-decisions.md),有 owner 与 needed-by。真实试点前必须关闭对应阻塞项。
|
||||
|
||||
附录:全部 FR/EX 索引在第 6 节;演示脚本见 [数据试点与展示](08-data-pilot-and-demo.md)。本版从既有综合平台聚焦经验驱动预审,保留旧能力供迁移,不声称重写完成。
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 121 KiB |
@@ -0,0 +1,431 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="zh-CN"><head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
||||
<title>兴邦金租 - 智审工作台</title>
|
||||
<meta content="same-origin" name="view-transition"/>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script src="https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
// Navigation
|
||||
nav: {
|
||||
bg: '#102B27',
|
||||
active: '#244D41',
|
||||
text: '#F3F7F5',
|
||||
muted: '#B1C6BE'
|
||||
},
|
||||
// Workspace
|
||||
canvas: '#F3F5F4',
|
||||
card: '#FFFFFF',
|
||||
panel: '#F8FAF9',
|
||||
border: '#DCE4DF',
|
||||
// Typography
|
||||
ink: {
|
||||
main: '#182D26',
|
||||
sub: '#52675C',
|
||||
mute: '#64766C'
|
||||
},
|
||||
// Interactive
|
||||
primary: {
|
||||
DEFAULT: '#17634C',
|
||||
hover: '#124F3D',
|
||||
text: '#FFFFFF'
|
||||
},
|
||||
// Semantics
|
||||
warning: {
|
||||
text: '#805418',
|
||||
bg: '#FBF2DF'
|
||||
},
|
||||
risk: {
|
||||
text: '#A33C38',
|
||||
bg: '#FBEFEC'
|
||||
},
|
||||
tech: {
|
||||
line: '#226A7A',
|
||||
bg: '#EDF5F7'
|
||||
},
|
||||
normal: {
|
||||
text: '#17634C',
|
||||
bg: '#EAF3EC'
|
||||
}
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Microsoft YaHei', 'PingFang SC', 'sans-serif']
|
||||
},
|
||||
spacing: {
|
||||
4: '4px',
|
||||
8: '8px',
|
||||
12: '12px',
|
||||
16: '16px',
|
||||
20: '20px',
|
||||
24: '24px',
|
||||
32: '32px',
|
||||
40: '40px',
|
||||
48: '48px'
|
||||
},
|
||||
borderRadius: {
|
||||
button: '8px',
|
||||
panel: '12px'
|
||||
},
|
||||
boxShadow: {
|
||||
card: '0 4px 20px rgba(16,43,39,.04)'
|
||||
},
|
||||
transitionDuration: {
|
||||
160: '160ms',
|
||||
200: '200ms'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Microsoft YaHei', 'PingFang SC', sans-serif;
|
||||
background-color: #F3F5F4;
|
||||
color: #182D26;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Focus rings */
|
||||
*:focus-visible {
|
||||
outline: 2px solid #17634C;
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
/* Reduced motion */
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
* {
|
||||
animation-duration: 0.01ms !important;
|
||||
animation-iteration-count: 1 !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
scroll-behavior: auto !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Scrollbars */
|
||||
::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
}
|
||||
::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: #DCE4DF;
|
||||
border-radius: 3px;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: #B1C6BE;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
[hidden]{display:none!important}main,body [data-sd-id="9"]{min-width:0}button,a,input{touch-action:manipulation}button{cursor:pointer}button:disabled,input:disabled{cursor:not-allowed}
|
||||
#prototype-navigation{flex-shrink:0}#prototype-navigation a:hover,#prototype-navigation a.is-active{background:#244D41;border-radius:8px}#prototype-navigation a:first-child:hover{background:transparent}
|
||||
body [data-sd-id="3"]{gap:16px}body [data-sd-id="5"]{font-size:12px}body [data-sd-id="6"]{white-space:nowrap}body [data-sd-id="11"],body [data-sd-id="14"],body [data-sd-id="20"]{flex-wrap:wrap;gap:16px}body [data-sd-id="22"]{font-size:24px}body [data-sd-id="12"]{font-weight:600}
|
||||
body [data-sd-id="46"]{padding-left:0;padding-right:0;gap:12px}body [data-sd-id="46"] button{padding:12px;min-width:0}body [data-sd-id="60"]{padding:16px 12px;font-size:14px;max-width:104px}body [data-sd-id="42"]{min-height:280px}
|
||||
#panel-overview body [data-sd-id="70"],#panel-overview body [data-sd-id="79"]{font-size:15px}.mobile-menu{display:none}
|
||||
.proto-panel{background:#fff;border:1px solid #DCE4DF;border-radius:12px;padding:24px}.proto-panel h2,.center-dialog h2,.evidence-dialog h2{font-size:22px;font-weight:600;margin:8px 0 16px}.proto-panel h3,.evidence-dialog h3{font-size:16px;font-weight:600;margin:8px 0}.proto-panel p,.evidence-dialog p,.center-dialog p{font-size:15px;line-height:1.75;margin:8px 0 16px}.muted{color:#64766C}.section-eyebrow{font-size:12px;letter-spacing:1.5px;color:#52675C}.notice{padding:16px;border-radius:8px;background:#FBF2DF;color:#805418;font-size:14px;line-height:1.7;margin:16px 0}
|
||||
.experience-timeline{list-style:none;padding:16px 0;margin:0}.experience-timeline li{display:flex;gap:16px;position:relative;padding-bottom:24px}.experience-timeline li:not(:last-child):before{content:'';position:absolute;left:19px;top:40px;bottom:0;width:1px;background:#DCE4DF}.step-num{width:40px;height:40px;display:grid;place-items:center;border:1px solid #DCE4DF;border-radius:50%;background:#F8FAF9;color:#17634C;font-size:14px;flex-shrink:0}.experience-timeline small{font-size:12px;color:#64766C}.condition-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:16px 0}.condition-grid>div{background:#F8FAF9;border:1px solid #DCE4DF;border-radius:8px;padding:16px}.condition-grid strong{color:#17634C;font-size:15px}.condition-grid small{font-size:12px;color:#64766C}
|
||||
.primary-button{background:#17634C;color:#fff;border:0;border-radius:8px;min-height:44px;padding:12px 24px;font-size:14px;font-weight:600;margin-top:16px}.primary-button:hover{background:#124F3D}.text-action{color:#17634C;font-size:14px;min-height:44px;text-align:left}.scenario-choice{display:flex;gap:12px;align-items:flex-start;padding:16px;border:1px solid #DCE4DF;border-radius:8px;margin:12px 0;cursor:pointer}.scenario-choice input{margin-top:5px;accent-color:#17634C;width:16px;height:16px}.scenario-choice small{display:block;color:#64766C;font-size:13px;margin-top:8px}
|
||||
dialog{color:#182D26;border:1px solid #DCE4DF;box-shadow:0 16px 48px rgba(16,43,39,.16);padding:24px;background:#fff}dialog::backdrop{background:rgba(16,43,39,.32)}.center-dialog{width:min(560px,calc(100% - 32px));border-radius:12px;max-height:90vh}.evidence-dialog{height:100dvh;max-height:100dvh;width:min(520px,100%);max-width:100%;margin:0 0 0 auto;border-radius:12px 0 0 12px;border-right:0}.dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;border-bottom:1px solid #DCE4DF;margin-bottom:20px}.close-button{width:44px;height:44px;font-size:28px;color:#52675C;flex-shrink:0}.drawer-tabs{display:flex;gap:24px;border-bottom:1px solid #DCE4DF;margin-bottom:24px}.drawer-tabs button{min-height:44px;font-size:14px}.drawer-tabs [aria-selected=true]{border-bottom:2px solid #17634C;color:#17634C}blockquote{font-size:18px;line-height:1.9;border-left:3px solid #17634C;padding:24px;background:#F8FAF9;margin:24px 0}.checklist{list-style:decimal;padding-left:24px;font-size:15px;line-height:1.8}.checklist li{padding:8px 0}.checklist p{color:#52675C}
|
||||
@media(max-width:1100px){body [data-sd-id="8"]{flex-direction:column}body [data-sd-id="82"]{width:100%;display:grid;grid-template-columns:1fr 1fr}body [data-sd-id="5"]{line-height:1.6}body [data-sd-id="6"]{display:none}}
|
||||
@media(max-width:768px){.mobile-menu{display:flex;font-size:22px;min-width:44px;height:44px;align-items:center;justify-content:center}#prototype-navigation{display:none!important;position:fixed;top:68px;bottom:0;left:0;z-index:30;min-height:0!important;box-shadow:0 16px 48px rgba(16,43,39,.16)}#prototype-navigation.mobile-open{display:flex!important}body [data-sd-id="8"]{padding:20px}body [data-sd-id="3"]{padding:8px 12px}body [data-sd-id="12"]{font-size:24px}body [data-sd-id="19"]{padding:20px}body [data-sd-id="82"]{display:flex}body [data-sd-id="46"]{display:grid;grid-template-columns:1fr 1fr}body [data-sd-id="53"]{gap:12px}body [data-sd-id="60"]{max-width:none;text-align:center}body [data-sd-id="44"]{display:none}.condition-grid{grid-template-columns:1fr}body [data-sd-id="37"]{gap:24px}body [data-sd-id="26"]{gap:32px}body [data-sd-id="14"]{font-size:14px}.proto-panel{padding:20px}}
|
||||
|
||||
body [data-sd-id="60"]{min-width:112px;max-width:none;white-space:nowrap;text-align:center}input[type=radio]{accent-color:#17634C}#prototype-navigation>a.is-active{background:transparent}
|
||||
</style></head>
|
||||
<body>
|
||||
<div class="min-h-screen flex w-full max-w-[1440px] mx-auto bg-canvas overflow-hidden" data-sd-id="1">
|
||||
<!-- Sidebar Navigation -->
|
||||
<aside id="prototype-navigation" style="width:216px;min-height:100vh;background:#102B27;color:#F3F7F5;display:flex;flex-direction:column;padding:32px 16px;font-family:'Microsoft YaHei','PingFang SC',sans-serif;box-sizing:border-box">
|
||||
<a href="#overview" id="nav-link-0" style="display:block;padding:0 12px 32px;text-decoration:none;color:inherit"><strong style="font-size:22px;letter-spacing:2px">兴邦金租</strong><span style="display:block;font-size:12px;letter-spacing:3px;color:#B1C6BE;margin-top:8px">智审工作台</span></a>
|
||||
<div style="padding:0 12px 12px;color:#B1C6BE;font-size:12px">业务工作区</div>
|
||||
<nav aria-label="兴邦预审导航" style="display:flex;flex-direction:column;gap:8px">
|
||||
<a class="flex items-center gap-3 rounded-lg px-3 py-3 text-sm" data-nav="overview" href="#overview" id="nav-link-1" style="text-decoration:none;color:inherit"><iconify-icon icon="lucide:layout-dashboard" style="width:18px;height:18px;font-size:18px"></iconify-icon>项目预审</a>
|
||||
<a class="flex items-center gap-3 rounded-lg px-3 py-3 text-sm" data-nav="experience" href="#experience" id="nav-link-2" style="text-decoration:none;color:inherit"><iconify-icon icon="lucide:history" style="width:18px;height:18px;font-size:18px"></iconify-icon>历史经验</a>
|
||||
<a class="flex items-center gap-3 rounded-lg px-3 py-3 text-sm" data-nav="simulation" href="#simulation" id="nav-link-3" style="text-decoration:none;color:inherit"><iconify-icon icon="lucide:git-branch" style="width:18px;height:18px;font-size:18px"></iconify-icon>推进沙盘</a>
|
||||
<a class="flex items-center gap-3 rounded-lg px-3 py-3 text-sm" data-nav="validation" href="#validation" id="nav-link-4" style="text-decoration:none;color:inherit"><iconify-icon icon="lucide:chart-no-axes-combined" style="width:18px;height:18px;font-size:18px"></iconify-icon>验证看板</a>
|
||||
</nav>
|
||||
<div style="margin-top:auto;padding:32px 12px 0"><div style="border-top:1px solid #244D41;padding-top:24px"><span style="font-size:14px">演示评审员</span><p style="font-size:12px;line-height:1.6;color:#B1C6BE;margin:8px 0 0">历史经验驱动<br/>每一步判断都有依据</p></div></div>
|
||||
</aside>
|
||||
<!-- Main Workspace -->
|
||||
<main class="flex-1 flex flex-col h-screen overflow-hidden" data-sd-id="2">
|
||||
<!-- Persistent Notice Bar -->
|
||||
<div class="bg-warning-bg text-warning-text px-32 py-12 text-[14px] flex items-center justify-between border-b border-warning-text/10 shrink-0" data-sd-id="3"><button aria-expanded="false" aria-label="打开导航" class="mobile-menu" id="mobile-menu"><iconify-icon icon="lucide:menu"></iconify-icon></button>
|
||||
<div class="flex items-center gap-8" data-sd-id="4">
|
||||
<iconify-icon icon="lucide:alert-circle"></iconify-icon>
|
||||
<span data-sd-id="5">原型演示 · 未连接真实数据与模型。所有材料、判断、数值为虚构演示。综合意见不是正式审批意见。</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-16" data-sd-id="6">
|
||||
<span class="flex items-center gap-4" data-sd-id="7">
|
||||
<iconify-icon icon="lucide:user"></iconify-icon>
|
||||
演示评审员
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Scrollable Content Area -->
|
||||
<div class="flex-1 overflow-y-auto p-32 flex gap-24 relative" data-sd-id="8">
|
||||
<!-- Left Main Column -->
|
||||
<div class="flex-1 flex flex-col gap-24" data-sd-id="9">
|
||||
<!-- Header / Title -->
|
||||
<header class="flex flex-col gap-12" data-sd-id="10">
|
||||
<div class="flex items-center gap-16" data-sd-id="11">
|
||||
<h1 class="text-[28px] font-bold leading-tight" data-sd-id="12">恒远精密设备有限公司</h1>
|
||||
<span class="bg-normal-bg text-normal-text px-12 py-4 rounded-full text-[12px] font-medium border border-normal-text/20" data-sd-id="13">项目 DEMO-026</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-24 text-[16px] text-ink-sub" data-sd-id="14">
|
||||
<span class="flex items-center gap-8" data-sd-id="15">
|
||||
<iconify-icon icon="lucide:briefcase"></iconify-icon>
|
||||
设备直租
|
||||
</span>
|
||||
<span class="flex items-center gap-8" data-sd-id="16">
|
||||
<iconify-icon icon="lucide:coins"></iconify-icon>
|
||||
融资 3,000 万元
|
||||
</span>
|
||||
<span class="flex items-center gap-8" data-sd-id="17">
|
||||
<iconify-icon icon="lucide:calendar"></iconify-icon>
|
||||
36 个月
|
||||
</span>
|
||||
<span class="flex items-center gap-8" data-sd-id="18">
|
||||
<iconify-icon icon="lucide:settings"></iconify-icon>
|
||||
装备制造
|
||||
</span>
|
||||
</div>
|
||||
</header>
|
||||
<!-- Main Judgement Hero -->
|
||||
<section class="bg-card rounded-panel p-32 shadow-card border border-border flex flex-col gap-24" data-sd-id="19">
|
||||
<div class="flex justify-between items-start" data-sd-id="20">
|
||||
<div class="flex flex-col gap-8" data-sd-id="21">
|
||||
<h2 class="text-[24px] font-bold text-ink-main" data-sd-id="22" id="real-recommendation">主审意见:补充材料后再判断</h2>
|
||||
<p class="text-[16px] text-ink-sub max-w-2xl leading-relaxed" data-sd-id="23">
|
||||
经营现金流与回款说明存在待核实差异,建议先补齐两项关键证据,再推进评审。
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex gap-16 items-start shrink-0" data-sd-id="24">
|
||||
<button class="h-[44px] px-24 bg-primary text-primary-text rounded-button text-[14px] font-medium transition-colors duration-160 hover:bg-primary-hover flex items-center gap-8 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-primary" data-sd-id="25" id="btn-generate-list">
|
||||
<iconify-icon icon="lucide:list-checks"></iconify-icon>
|
||||
生成补件清单
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-40 pt-24 border-t border-border mt-8" data-sd-id="26">
|
||||
<div class="flex flex-col gap-4" data-sd-id="27">
|
||||
<span class="text-[12px] text-ink-mute uppercase tracking-wider" data-sd-id="28">引用材料</span>
|
||||
<span class="text-[20px] font-medium" data-sd-id="29">6 份</span>
|
||||
</div>
|
||||
<div class="flex flex-col gap-4" data-sd-id="30">
|
||||
<span class="text-[12px] text-ink-mute uppercase tracking-wider" data-sd-id="31">参考经验</span>
|
||||
<span class="text-[20px] font-medium" data-sd-id="32">3 条</span>
|
||||
</div>
|
||||
<div class="flex flex-col gap-4" data-sd-id="33">
|
||||
<span class="text-[12px] text-warning-text uppercase tracking-wider font-medium" data-sd-id="34">待补充项</span>
|
||||
<span class="text-[20px] font-medium text-warning-text" data-sd-id="35">2 项</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Main Content Tabs -->
|
||||
<section class="flex flex-col gap-24 flex-1" data-sd-id="36">
|
||||
<div aria-label="预审内容" class="flex items-center gap-32 border-b border-border" data-sd-id="37" role="tablist">
|
||||
<button aria-controls="panel-overview" aria-selected="true" class="pb-12 text-[16px] font-medium text-primary border-b-2 border-primary" data-sd-id="38" data-tab="overview" id="tab-overview" role="tab">综合预审</button>
|
||||
<button aria-controls="panel-experience" aria-selected="false" class="pb-12 text-[16px] font-medium text-ink-sub hover:text-ink-main transition-colors duration-160 border-b-2 border-transparent" data-sd-id="39" data-tab="experience" id="tab-experience" role="tab">历史经验</button>
|
||||
<button aria-controls="panel-simulation" aria-selected="false" class="pb-12 text-[16px] font-medium text-ink-sub hover:text-ink-main transition-colors duration-160 border-b-2 border-transparent" data-sd-id="40" data-tab="simulation" id="tab-simulation" role="tab">推进沙盘</button>
|
||||
</div>
|
||||
<!-- Tab Panel: 综合预审 -->
|
||||
<div aria-labelledby="tab-overview" class="flex flex-col gap-24" data-sd-id="41" id="panel-overview" role="tabpanel">
|
||||
<!-- Evidence Graph Placeholder -->
|
||||
<div class="bg-panel rounded-panel p-24 border border-border flex flex-col gap-16 min-h-[300px] relative overflow-hidden" data-sd-id="42">
|
||||
<h3 class="text-[14px] font-medium text-ink-main flex items-center gap-8" data-sd-id="43">
|
||||
<iconify-icon icon="lucide:git-merge"></iconify-icon>
|
||||
证据关系图
|
||||
</h3>
|
||||
<!-- Simulated Graph SVG -->
|
||||
<div class="absolute inset-0 top-[60px] flex items-center justify-center pointer-events-none opacity-50" data-sd-id="44">
|
||||
<svg data-sd-id="45" height="100%" preserveaspectratio="xMidYMid meet" viewbox="0 0 800 200" width="100%">
|
||||
<path d="M 100 100 L 250 100 L 400 50 L 600 100" fill="none" stroke="#226A7A" stroke-dasharray="4 4" stroke-width="2"></path>
|
||||
<path d="M 250 100 L 400 150 L 600 100" fill="none" stroke="#805418" stroke-width="3"></path>
|
||||
<circle cx="100" cy="100" fill="#17634C" r="6"></circle>
|
||||
<circle cx="250" cy="100" fill="#17634C" r="6"></circle>
|
||||
<circle cx="400" cy="50" fill="#226A7A" r="6"></circle>
|
||||
<circle cx="400" cy="150" fill="#805418" r="6"></circle>
|
||||
<circle cx="600" cy="100" fill="#182D26" r="8"></circle>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="flex-1 flex items-center justify-between px-48 z-10" data-sd-id="46">
|
||||
<button class="bg-card border border-border px-16 py-12 rounded-panel shadow-sm hover:border-primary transition-colors text-[14px] text-ink-main flex flex-col gap-4 focus-visible:ring-2 focus-visible:ring-primary outline-none" data-sd-id="47" id="node-1">
|
||||
<span class="font-medium" data-sd-id="48">回款说明</span>
|
||||
<span class="text-[12px] text-ink-mute" data-sd-id="49">已提供</span>
|
||||
</button>
|
||||
<button class="bg-card border border-border px-16 py-12 rounded-panel shadow-sm hover:border-primary transition-colors text-[14px] text-ink-main flex flex-col gap-4 focus-visible:ring-2 focus-visible:ring-primary outline-none" data-sd-id="50" id="node-2">
|
||||
<span class="font-medium" data-sd-id="51">账期变化解释</span>
|
||||
<span class="text-[12px] text-ink-mute" data-sd-id="52">待核实</span>
|
||||
</button>
|
||||
<div class="flex flex-col gap-40" data-sd-id="53">
|
||||
<button class="bg-tech-bg border border-tech-line px-16 py-12 rounded-panel shadow-sm hover:bg-tech-bg/80 transition-colors text-[14px] text-ink-main flex flex-col gap-4 focus-visible:ring-2 focus-visible:ring-tech-line outline-none" data-sd-id="54" id="node-3">
|
||||
<span class="font-medium" data-sd-id="55">专项支持</span>
|
||||
<span class="text-[12px] text-tech-line" data-sd-id="56">不足</span>
|
||||
</button>
|
||||
<button class="bg-warning-bg border border-warning-text/30 px-16 py-12 rounded-panel shadow-sm hover:bg-warning-bg/80 transition-colors text-[14px] text-ink-main flex flex-col gap-4 focus-visible:ring-2 focus-visible:ring-warning-text outline-none" data-sd-id="57" id="node-4">
|
||||
<span class="font-medium" data-sd-id="58">银行流水匹配</span>
|
||||
<span class="text-[12px] text-warning-text font-medium" data-sd-id="59">待补充</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="bg-card border-2 border-ink-main px-24 py-16 rounded-panel shadow-sm text-[16px] font-bold text-ink-main" data-sd-id="60">
|
||||
主审补件建议
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Issues List -->
|
||||
<div class="flex flex-col gap-16" data-sd-id="61">
|
||||
<h3 class="text-[20px] font-bold text-ink-main" data-sd-id="62">关键问题核实</h3>
|
||||
<div class="bg-card rounded-panel border border-border overflow-hidden" data-sd-id="63">
|
||||
<div class="p-20 border-b border-border hover:bg-panel transition-colors flex items-start gap-16" data-sd-id="64">
|
||||
<div class="mt-4 w-8 h-8 rounded-full bg-warning-text shrink-0" data-sd-id="65"></div>
|
||||
<div class="flex-1 flex flex-col gap-8" data-sd-id="66">
|
||||
<div class="flex justify-between items-center" data-sd-id="67">
|
||||
<h4 class="text-[16px] font-medium text-ink-main" data-sd-id="68">回款依据尚不完整</h4>
|
||||
<span class="text-[12px] text-warning-text bg-warning-bg px-8 py-2 rounded-full border border-warning-text/20" data-sd-id="69">待核实</span>
|
||||
</div>
|
||||
<p class="text-[14px] text-ink-sub leading-relaxed" data-sd-id="70">主要客户账期延长,需通过近六个月银行流水穿透核实实际回款情况,当前证据链断裂。</p>
|
||||
<div class="flex gap-12 mt-8" data-sd-id="71">
|
||||
<button class="text-[12px] text-primary hover:text-primary-hover font-medium flex items-center gap-4" data-sd-id="72" id="btn-open-drawer-1">
|
||||
<iconify-icon icon="lucide:file-text"></iconify-icon> 查看原文与依据
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-20 hover:bg-panel transition-colors flex items-start gap-16" data-sd-id="73">
|
||||
<div class="mt-4 w-8 h-8 rounded-full bg-warning-text shrink-0" data-sd-id="74"></div>
|
||||
<div class="flex-1 flex flex-col gap-8" data-sd-id="75">
|
||||
<div class="flex justify-between items-center" data-sd-id="76">
|
||||
<h4 class="text-[16px] font-medium text-ink-main" data-sd-id="77">设备权属证明待核实</h4>
|
||||
<span class="text-[12px] text-warning-text bg-warning-bg px-8 py-2 rounded-full border border-warning-text/20" data-sd-id="78">待核实</span>
|
||||
</div>
|
||||
<p class="text-[14px] text-ink-sub leading-relaxed" data-sd-id="79">拟租赁设备发票与实际采购清单存在部分品名不符,需核实底层资产真实权属。</p>
|
||||
<div class="flex gap-12 mt-8" data-sd-id="80">
|
||||
<button class="text-[12px] text-primary hover:text-primary-hover font-medium flex items-center gap-4" data-sd-id="81">
|
||||
<iconify-icon icon="lucide:history"></iconify-icon> 查看历史依据
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<section aria-labelledby="tab-experience" class="proto-panel" hidden="" id="panel-experience" role="tabpanel">
|
||||
<div class="section-eyebrow">EXPERIENCE / 历史示例</div><h2>一条经验,如何改变判断</h2>
|
||||
<p class="muted">案例 H-018 · 制造业设备直租 · 虚构演示案例</p>
|
||||
<ol class="experience-timeline">
|
||||
<li><span class="step-num">01</span><div><small>初审关注</small><h3>利润增长,经营现金流偏弱</h3><p>最初意见:暂不能确认还款来源,要求说明回款变化。</p></div></li>
|
||||
<li><span class="step-num">02</span><div><small>评审问询</small><h3>账期延长,还是回款能力下降?</h3><p>要求提供客户合同、应收账龄与逐笔回款记录,验证解释。</p></div></li>
|
||||
<li><span class="step-num">03</span><div><small>证据补充</small><h3>银行流水与应收明细逐笔匹配</h3><p>历史示例中,补充材料支持主要客户正常结算周期变化。</p><button class="text-action" data-open-evidence="history">查看历史证据示例 ↗</button></div></li>
|
||||
<li><span class="step-num">04</span><div><small>判断变化</small><h3>待核实 → 附条件推进(历史示例)</h3><p>约定持续跟踪回款。此历史意见不能直接用于当前项目。</p></div></li>
|
||||
</ol>
|
||||
<div class="condition-grid"><div><strong>适用条件</strong><p>客户结构稳定,回款与应收记录可逐笔匹配。</p></div><div><strong>例外边界</strong><p>收入集中、关联回款未穿透或材料真实性未核实。</p></div></div>
|
||||
<div class="notice">条件相似不等于结论相同。当前项目仍缺银行流水与权属核验。</div>
|
||||
</section>
|
||||
<section aria-labelledby="tab-simulation" class="proto-panel" hidden="" id="panel-simulation" role="tabpanel">
|
||||
<div class="section-eyebrow">SCENARIO / 条件推演</div><h2>补齐证据之后,会发生什么?</h2>
|
||||
<div class="notice">模拟结果,不改变真实项目。以下仅假设证据真实且完成核验。</div>
|
||||
<p class="muted">选择准备补充的材料,比较哪些争议可能得到回应。</p>
|
||||
<label class="scenario-choice"><input id="assume-bank" type="checkbox"/> <span><strong>补充近六个月银行流水</strong><small>假设逐笔匹配后支持账期变化解释</small></span></label>
|
||||
<label class="scenario-choice"><input id="assume-title" type="checkbox"/> <span><strong>补充设备权属证明</strong><small>假设合同、发票与设备清单一致且经核验</small></span></label>
|
||||
<button class="primary-button" id="run-simulation">运行模拟</button><p aria-live="polite" class="muted" id="simulation-feedback"></p>
|
||||
<div class="condition-grid" hidden="" id="simulation-comparison"><div><small>真实预审 · 保持不变</small><h3>2 项待核实</h3><p>补充材料后再判断</p></div><div><small>模拟情景 · 假设成立时</small><h3 id="sim-remaining"></h3><p id="sim-explanation"></p><strong>仍需人工复核</strong></div></div>
|
||||
<button class="text-action" data-tab="overview">← 返回真实预审</button>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<!-- Right Sidebar (Action Panel) -->
|
||||
<aside class="w-[320px] shrink-0 flex flex-col gap-24" data-sd-id="82">
|
||||
<!-- Next Steps Action Card -->
|
||||
<div class="bg-card rounded-panel p-24 border border-border shadow-card flex flex-col gap-16" data-sd-id="83">
|
||||
<h3 class="text-[16px] font-bold text-ink-main flex items-center gap-8" data-sd-id="84">
|
||||
<iconify-icon icon="lucide:arrow-right-circle"></iconify-icon>
|
||||
下一步行动
|
||||
</h3>
|
||||
<div class="flex flex-col gap-12" data-sd-id="85">
|
||||
<label class="flex items-start gap-12 p-12 bg-panel rounded-button border border-border cursor-pointer hover:border-primary transition-colors" data-sd-id="86">
|
||||
<span class="text-primary text-[14px] font-bold shrink-0">1</span>
|
||||
<div class="flex flex-col gap-4" data-sd-id="88">
|
||||
<span class="text-[14px] font-medium text-ink-main" data-sd-id="89">补充近六个月银行流水</span>
|
||||
<span class="text-[12px] text-ink-mute" data-sd-id="90">用于核实账期延长后的实际回款节奏</span>
|
||||
</div>
|
||||
</label>
|
||||
<label class="flex items-start gap-12 p-12 bg-panel rounded-button border border-border cursor-pointer hover:border-primary transition-colors" data-sd-id="91">
|
||||
<span class="text-primary text-[14px] font-bold shrink-0">2</span>
|
||||
<div class="flex flex-col gap-4" data-sd-id="93">
|
||||
<span class="text-[14px] font-medium text-ink-main" data-sd-id="94">核实设备权属</span>
|
||||
<span class="text-[12px] text-ink-mute" data-sd-id="95">提供品名不符的补充说明及采购合同附件</span>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
<button class="w-full h-[44px] mt-8 bg-card border border-primary text-primary rounded-button text-[14px] font-medium transition-colors duration-160 hover:bg-primary/5 flex items-center justify-center gap-8 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-primary" data-sd-id="96">
|
||||
<iconify-icon icon="lucide:play"></iconify-icon>
|
||||
模拟补件 (沙盘)
|
||||
</button>
|
||||
</div>
|
||||
<!-- Model Config Card -->
|
||||
<div class="bg-panel rounded-panel p-24 border border-border flex flex-col gap-16" data-sd-id="97">
|
||||
<div class="flex justify-between items-center" data-sd-id="98">
|
||||
<h3 class="text-[14px] font-medium text-ink-main" data-sd-id="99">专项核查模型</h3>
|
||||
<button class="text-ink-mute hover:text-primary transition-colors" data-sd-id="100" title="验证看板">
|
||||
<iconify-icon icon="lucide:bar-chart-2"></iconify-icon>
|
||||
</button>
|
||||
</div>
|
||||
<div class="flex flex-col gap-8" data-sd-id="101">
|
||||
<label class="flex justify-between items-center p-8 -mx-8 rounded-button hover:bg-black/5 cursor-pointer" data-sd-id="102">
|
||||
<span class="text-[14px] text-ink-main" data-sd-id="103">本地开源模型 (演示)</span>
|
||||
<input aria-label="本地开源模型(演示)" checked="" class="text-primary focus:ring-primary" data-sd-id="104" name="model" type="radio" value="local"/>
|
||||
</label>
|
||||
<label class="flex justify-between items-center p-8 -mx-8 rounded-button hover:bg-black/5 cursor-pointer opacity-50" data-sd-id="105" title="未配置官方服务">
|
||||
<span class="text-[14px] text-ink-main" data-sd-id="106">Jev官方服务(未配置)</span>
|
||||
<input aria-label="Jev官方服务(未配置)" class="text-primary focus:ring-primary" data-sd-id="107" disabled="" name="model" type="radio" value="jev"/>
|
||||
</label>
|
||||
<label class="flex justify-between items-center p-8 -mx-8 rounded-button hover:bg-black/5 cursor-pointer" data-sd-id="108">
|
||||
<span class="text-[14px] text-ink-main" data-sd-id="109">关闭专项核查</span>
|
||||
<input aria-label="关闭专项核查" class="text-primary focus:ring-primary" data-sd-id="110" name="model" type="radio" value="off"/>
|
||||
</label>
|
||||
</div>
|
||||
<p aria-live="polite" class="text-[12px] text-ink-mute mt-4 border-t border-border pt-12" data-sd-id="111" id="model-status">
|
||||
仅演示。无真实模型请求。主审仍可基于证据给出有限意见。
|
||||
</p>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</main>
|
||||
<dialog aria-labelledby="evidence-title" class="evidence-dialog" id="evidence-dialog">
|
||||
<header class="dialog-header"><div><div class="section-eyebrow">EVIDENCE / 演示材料</div><h2 id="evidence-title">回款说明与判断依据</h2></div><button aria-label="关闭证据抽屉" class="close-button" data-close="evidence-dialog">×</button></header>
|
||||
<div aria-label="证据视图" class="drawer-tabs" role="tablist"><button aria-controls="evidence-source" aria-selected="true" data-evidence-tab="source" id="evidence-source-tab" role="tab">原文片段</button><button aria-controls="evidence-basis" aria-selected="false" data-evidence-tab="basis" id="evidence-basis-tab" role="tab">判断依据</button></div>
|
||||
<section aria-labelledby="evidence-source-tab" id="evidence-source" role="tabpanel"><p class="muted" id="source-location">回款说明.pdf · 第3页 · 虚构演示</p><blockquote id="source-quote">主要客户账期延长,预计下一季度集中回款。</blockquote><div class="notice" id="source-gap">尚未提供对应银行流水,不能仅凭解释确认回款。</div><p class="muted">来源可定位不代表材料真实性已经核验。</p></section>
|
||||
<section aria-labelledby="evidence-basis-tab" hidden="" id="evidence-basis" role="tabpanel"><h3>从解释到判断,仍缺一环</h3><p id="basis-copy">现有说明提出了账期变化的解释,但需要银行流水与应收账龄交叉核验。专项判断不能替代主审综合意见。</p><h3>建议下一步</h3><p id="basis-next">补充近六个月银行流水,逐笔匹配主要客户回款。</p></section>
|
||||
</dialog>
|
||||
<dialog aria-labelledby="checklist-title" class="center-dialog" id="checklist-dialog"><header class="dialog-header"><div><div class="section-eyebrow">NEXT ACTION / 演示清单</div><h2 id="checklist-title">项目补件清单</h2></div><button aria-label="关闭补件清单" class="close-button" data-close="checklist-dialog">×</button></header><ol class="checklist"><li><strong>近六个月银行流水与应收账龄</strong><p>标注主要客户逐笔回款,说明与合同账期的对应关系。</p></li><li><strong>设备权属材料</strong><p>提供采购合同、发票和设备清单,并解释品名差异。</p></li></ol><div class="notice">DEMO-026 · 虚构演示,未发送至任何业务系统。</div><button class="primary-button" id="copy-checklist">复制清单</button><p aria-live="polite" id="copy-status"></p></dialog>
|
||||
<dialog aria-labelledby="validation-title" class="center-dialog" id="validation-dialog"><header class="dialog-header"><div><div class="section-eyebrow">VALIDATION / 验证计划</div><h2 id="validation-title">待开展脱敏盲测</h2></div><button aria-label="关闭验证计划" class="close-button" data-close="validation-dialog">×</button></header><p>先冻结样本和预测,再揭示专家参考意见。当前没有真实验证结果。</p><ol class="checklist"><li>基础预审:不使用历史经验</li><li>经验增强:主审结合已审核经验</li><li>专项增强:分别验证本地模型与 Jev(可选)</li></ol><div class="notice">关注重大问题漏检、无依据结论、有效补件与耗时。阈值在试点前约定。</div></dialog>
|
||||
<script>
|
||||
(()=>{
|
||||
const $=s=>document.querySelector(s),all=s=>[...document.querySelectorAll(s)],sd=n=>$('[data-sd-id="'+n+'"]');
|
||||
let active='overview'; const openers=new WeakMap();
|
||||
function showDialog(id){const d=$('#'+id);openers.set(d,document.activeElement);d.showModal();d.querySelector('button').focus();}
|
||||
all('dialog').forEach(d=>{d.addEventListener('close',()=>openers.get(d)?.focus());d.addEventListener('click',e=>{if(e.target===d){const b=d.getBoundingClientRect();if(e.clientX<b.left||e.clientX>b.right||e.clientY<b.top||e.clientY>b.bottom)d.close();}})});
|
||||
all('[data-close]').forEach(b=>b.onclick=()=>$('#'+b.dataset.close).close());
|
||||
function tab(name){if(name==='validation'){showDialog('validation-dialog');return;}if(!['overview','experience','simulation'].includes(name))return;active=name;all('[role=tabpanel][id^="panel-"]').forEach(p=>p.hidden=p.id!=='panel-'+name);all('[role=tab][data-tab]').forEach(b=>{const selected=b.dataset.tab===name;b.setAttribute('aria-selected',selected);b.tabIndex=selected?0:-1;b.classList.toggle('text-primary',selected);b.classList.toggle('border-primary',selected);b.classList.toggle('border-transparent',!selected)});all('[data-nav]').forEach(a=>a.classList.toggle('is-active',a.dataset.nav===name));$('#prototype-navigation').classList.remove('mobile-open');$('#mobile-menu').setAttribute('aria-expanded','false');}
|
||||
all('[data-tab]').forEach(b=>b.onclick=()=>tab(b.dataset.tab));all('[data-nav]').forEach(a=>a.onclick=e=>{e.preventDefault();tab(a.dataset.nav)});
|
||||
all('[role=tab][data-tab]').forEach((b,i)=>b.addEventListener('keydown',e=>{if(!['ArrowLeft','ArrowRight','Home','End'].includes(e.key))return;e.preventDefault();const tabs=all('[role=tab][data-tab]');const j=e.key==='Home'?0:e.key==='End'?2:(i+(e.key==='ArrowRight'?1:2))%3;tabs[j].click();tabs[j].focus()}));
|
||||
$('#mobile-menu').onclick=()=>{const on=$('#prototype-navigation').classList.toggle('mobile-open');$('#mobile-menu').setAttribute('aria-expanded',on)};
|
||||
function evidence(kind='current'){const history=kind==='history';$('#evidence-title').textContent=history?'历史回款证据示例':'回款说明与判断依据';$('#source-location').textContent=history?'历史案例 H-018 · 补件记录 · 虚构演示':'回款说明.pdf · 第3页 · 虚构演示';$('#source-quote').textContent=history?'历史示例中,主要客户实际回款与应收明细逐笔匹配。':'主要客户账期延长,预计下一季度集中回款。';$('#source-gap').textContent=history?'仅为说明经验形成过程的虚构材料,不能替代当前项目核查。':'尚未提供对应银行流水,不能仅凭解释确认回款。';$('#basis-copy').textContent=history?'历史案例补充证据支持当时的解释,适用前提是客户结构稳定且回款可逐笔匹配。当前项目尚未满足同样的证据条件。':'现有说明提出了账期变化的解释,但需要银行流水与应收账龄交叉核验。专项判断不能替代主审综合意见。';$('#evidence-source-tab').click();showDialog('evidence-dialog');}
|
||||
['node-1','node-2','node-3','node-4','btn-open-drawer-1'].forEach(id=>$('#'+id).onclick=()=>evidence());all('[data-open-evidence]').forEach(b=>b.onclick=()=>evidence(b.dataset.openEvidence));
|
||||
all('[data-evidence-tab]').forEach(b=>b.onclick=()=>{all('[data-evidence-tab]').forEach(x=>x.setAttribute('aria-selected',x===b));$('#evidence-source').hidden=b.dataset.evidenceTab!=='source';$('#evidence-basis').hidden=b.dataset.evidenceTab!=='basis'});
|
||||
$('#btn-generate-list').onclick=()=>showDialog('checklist-dialog');sd(81).onclick=()=>tab('experience');sd(96).onclick=()=>{tab('simulation');$('#assume-bank').focus()};sd(100).onclick=()=>showDialog('validation-dialog');
|
||||
all('input[name=model]').forEach(r=>r.onchange=()=>{const off=r.value==='off';$('#model-status').textContent=off?'专项核查已关闭。主审仍可基于证据与经验给出有限意见。':'本地开源模型(演示)。无真实模型请求;主审负责综合预审意见。';sd(56).textContent=off?'未执行':'不足';sd(55).textContent=off?'专项核查':'专项支持'});
|
||||
$('#run-simulation').onclick=()=>{const count=Number($('#assume-bank').checked)+Number($('#assume-title').checked);if(!count){$('#simulation-feedback').textContent='请至少选择一项假设补件。';$('#simulation-comparison').hidden=true;return;}$('#simulation-feedback').textContent='模拟完成 · 假设证据真实且完成核验,未修改真实项目。';$('#sim-remaining').textContent=(2-count)+' 项仍待核实(模拟)';$('#sim-explanation').textContent=count===2?'两项争议在假设下得到回应,不代表已获批准。':'仅所选事项在假设下得到回应,其余证据仍需补充。';$('#simulation-comparison').hidden=false;};
|
||||
all('#panel-simulation input').forEach(x=>x.onchange=()=>{$('#simulation-comparison').hidden=true;$('#simulation-feedback').textContent='假设已修改,请重新运行模拟。'});
|
||||
$('#copy-checklist').onclick=async()=>{const text='DEMO-026 演示补件清单\n1.近六个月银行流水及应收账龄,逐笔匹配主要客户回款。\n2.设备采购合同、发票和清单,解释品名差异。';try{await navigator.clipboard.writeText(text);$('#copy-status').textContent='演示清单已复制。';}catch{$('#copy-status').textContent='浏览器未允许复制,请选择上方清单文字手动复制。'}};
|
||||
tab('overview');
|
||||
})();
|
||||
</script></div>
|
||||
</body></html>
|
||||
Reference in New Issue
Block a user