@microi.net/cli 6.1.8 → 6.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +43 -43
  4. package/.mcp.json +1 -1
  5. package/.workbuddy-plugin/marketplace.json +2 -2
  6. package/.workbuddy-plugin/plugin.json +1 -1
  7. package/assets/build-meta.json +4 -4
  8. package/cordis.patch.yml +1 -1
  9. package/package.json +82 -82
  10. package/scripts/codex-marketplace.json +20 -20
  11. package/scripts/mcp-codex-stdio-adapter.js +189 -189
  12. package/scripts/mcp-server.js +100 -96
  13. package/scripts/mcp-trae-windows-launcher.cmd +21 -21
  14. package/scripts/microi-cli-mcp.js +7 -7
  15. package/scripts/microi-skills.meta.json +247 -235
  16. package/skills/.microi-skills-version.json +2 -2
  17. package/skills/.progressive-disclosure-manifest.json +72 -66
  18. package/skills/ai-engine/SKILL.md +303 -293
  19. package/skills/app-store/SKILL.md +2 -1
  20. package/skills/microi-client-frontend/SKILL.md +260 -252
  21. package/skills/microi-datasource-mapping/SKILL.md +4 -0
  22. package/skills/microi-deployment/SKILL.md +63 -5
  23. package/skills/microi-deployment/references/deployment-matrix.md +27 -0
  24. package/skills/microi-deployment/references/offline-installer.md +64 -0
  25. package/skills/microi-docs-coverage/references/capability-map.md +3 -3
  26. package/skills/microi-form-engine/SKILL.md +13 -0
  27. package/skills/microi-form-engine/references/component-catalog.md +1 -1
  28. package/skills/microi-microservice/SKILL.md +17 -0
  29. package/skills/microi-system-delivery/SKILL.md +8 -6
  30. package/skills/microi-system-delivery/references/delivery-pitfalls.md +50 -0
  31. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +11 -9
  32. package/skills/microi-uniapp-frontend/SKILL.md +18 -3
  33. package/skills/module-engine/SKILL.md +4 -5
  34. package/skills/page-engine/SKILL.md +233 -215
  35. package/skills/print-engine/SKILL.md +5 -0
  36. package/skills/report-engine/SKILL.md +9 -0
  37. package/skills/report-engine/scripts/check-demo-coverage.mjs +88 -0
  38. package/skills/report-engine/scripts/check-demo-coverage.test.mjs +52 -0
  39. package/skills/scripts/sync-embedded-skills.mjs +4 -1
  40. package/skills/ui-design/SKILL.md +1 -1
  41. package/skills/uniapp-mall-assets/SKILL.md +5 -0
  42. package/skills/v8-file-upload/SKILL.md +18 -4
  43. package/skills/v8-file-upload/references/hotspot-offload-operations.md +16 -1
  44. package/skills/v8-saas-multi-tenant/SKILL.md +17 -4
  45. package/skills/v8-security/SKILL.md +20 -5
  46. package/skills/vision-engine/SKILL.md +114 -3
  47. package/skills/vision-engine/references/architecture-and-acceptance.md +8 -0
  48. package/skills/workspace-conventions/SKILL.md +9 -3
  49. package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +4 -4
  50. package/skills/workspace-conventions/references/progressive-04-/345/267/245/344/275/234/345/214/272/344/270/216/345/271/263/345/217/260/344/270/223/351/241/271/344/277/235/351/232/234.md +22 -1
@@ -60,6 +60,10 @@ export function createOptionLabel(options = []) {
60
60
  - 异步回填前核对表单实例、记录Id、依赖值和当前选择;换记录、换部门、改选后的迟到响应丢弃。失败不得伪造名称或清空已有业务关联。
61
61
  - 验收覆盖新增检索、编辑、只读详情、首屏外已有值、停用/越权关联和迟到响应;必须实际截图核对可读名称,不能仅看控件类型或接口返回成功。
62
62
 
63
+ ### 生成 SQL 配置的字面量安全
64
+
65
+ - SQL 含平台占位符(如 $CurrentUser.Id$、$Keyword$)时,生成器使用字符串拼接或 replace 的函数回调,避免替换串中的美元符号被解释为 JavaScript 的匹配/前后缀替换标记。保存后逐字符回读,并通过普通字段数据接口执行空关键字、搜索与已选值补查;不能只校验 JSON 或 SQL 文本非空。
66
+
63
67
  ### 平台统一已选值补查
64
68
 
65
69
  - 标准 Select/MultipleSelect/Radio/Checkbox/Autocomplete 在列表、编辑、只读详情统一按已保存键补查,更新显示选项而不改表单值、不触发变更事件;树形控件沿用专用节点/祖先解析。仅旧客户端未具备此能力时才考虑上节项目级静默显示对象兼容,不把该兼容写回业务 Id。
@@ -15,15 +15,43 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
15
15
 
16
16
  ## 必读参考
17
17
 
18
+ - 完全断网核心 ZIP、宿主工具和验收:`references/offline-installer.md`
19
+
18
20
  - 部署方式、依赖、配置和验收矩阵:`references/deployment-matrix.md`
21
+ - 完全断网核心 ZIP、宿主工具和验收:`references/offline-installer.md`
19
22
  - 系统级交付与 MCP:`../microi-system-delivery/SKILL.md`
20
23
  - 文件/对象存储:`../v8-file-upload/SKILL.md`
21
24
  - 数据库模型:`../microi-db-schema/SKILL.md`
22
25
 
26
+ ## 完全断网的新装入口
27
+
28
+ 核心 ZIP 由 `数据库、案例、文档、资料/offline/prepare.py` 制作;以 root 执行
29
+ `sh microi-offline-linux-x86_64.zip` 自解压,目标机不要求预装 Docker、Compose、
30
+ unzip、Python 或 curl。镜像和 SQL 与冻结的在线安装器同源,包和镜像身份均须验证;
31
+ 不允许联网补下载,也不覆盖已有吾码数据库。主机仍须满足 x86_64、systemd、内核
32
+ 4.18+、AVX 和 cgroup 控制器条件,CentOS 7 旧内核不属于该核心包范围。
33
+
34
+ 离线入口的 umask 077 不得让 MySQL 忽略配置:不含秘密的 `my_microi.cnf` 显式设为
35
+ 0644。子进程安装面板必须继承本次实际 API/Web 镜像仓库;宿主监测用只读方式访问
36
+ `/home` 数据目录,并由 systemd 创建权限 0700、重启服务保留 inode 的运行目录。
37
+ 真实断网验收覆盖核心就绪、登录、存储公私权限、面板就绪以及服务器重启恢复。
38
+ MySQL 就绪和后续 SQL 使用最终 TCP 服务,不能把镜像初始化时的临时 Unix socket
39
+ 当作就绪;新建容器的密码只在容器内读取环境,不拼入 Docker 命令参数。
40
+ 源码/单元测试、CDN 上传、NAS 校验和消费者回退分别记证据;细节读取上述离线参考。
41
+
23
42
  ## 发布测试范围
24
43
 
25
44
  ### 普通吾码发布固定流程(30 分钟)
26
45
 
46
+ `PlatformRelease` 在同一原入口先执行 C# 编译及组件测试,再执行原有四组 Node 回归;
47
+ 编译或组件失败立即停止该候选,所有已选 Node 组、断言与最终证据门禁继续保留。
48
+
49
+ 测试失败后修复源码,且原会话尚无任何成功阶段/渠道时,可显式使用同一入口
50
+ `--resume=<原会话绝对路径> --refreeze-unaccepted-candidate`。原生检查确认旧候选证据
51
+ 未改动、没有已封存测试/构建或已接受上传后,保留旧候选和原始 TRX/TAP,归档候选
52
+ 指纹到同一会话历史,再以原版本、渠道和累计起点重新冻结并执行完整门禁。
53
+ 此开关不能复用失败测试,也不能重写已有成功阶段;默认续发仍严格拒绝源码漂移。
54
+
27
55
  收到“发布吾码”“完整正式发布”“一键发布”时,默认执行根目录 `Microi一键编译发布.sh --platform-release`(默认完整选项):新版本号按原规则 +1 一次,NuGet、API Docker、PC Docker、官方网站文档及其 Docker 全部发布。官网不再是可选追加项;只有用户明确要求“仅前端/仅后端/仅官网”等局部发布时才缩小范围。完整入口使用 `PlatformRelease` 执行常规 Microi.Tests(平台单元/组件,不自动追加 Full 专项)、吾码前端通用 Node 测试、真实接口检查与最终加密产物启动/运行冒烟;扩展浏览器验收仅在显式传入 `--platform-frontend-tests` 时追加。真实付费 AI、鸿地/JUNCHI、XJY 等指定客户数据专项和 SQL Server 等独立提供商专项默认不纳入,不再逐次询问;只有用户另行明确要求专项时才执行,回执逐项列为“不适用/未执行”,不能冒充通过。独立商城应用、OpenClaw 等应用源码专项由各自入口执行,不作为平台发布前置;平台 SDK、商城协议、安装器、SaaS 与工作流通用回归继续保留。Microi Code/Agent 是独立产品,不混入吾码平台测试与发行。
28
56
 
29
57
  1. 默认确认 NuGet、API/PC 和官网完整渠道及版本;记录开始时间,每次新完整发布从当前版本 +1 一次。中断后使用脚本输出的 `--resume=<会话JSON>` 恢复同一完整发布,沿用原版本、渠道、候选和累计起点;`--release-version=x.y.z` 只用于显式选择版本,本身不代表复用测试或产物。不能仅凭版本文件未提交推断为续发。
@@ -68,8 +96,9 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
68
96
 
69
97
  ## 先确认部署类型
70
98
 
71
- 默认安装与升级只恢复登录、权限、导航和应用商城所需的最小基础,表单、模块和系统设置
72
- 只带核心依赖;其余平台应用由用户登录后在商城按需安装。`ApplicationType=Platform`
99
+ 官方标准空库的新安装包含完整平台应用快照,安装记录与所保留资源的已校验版本一致,
100
+ 并保留系统首页及两个基础角色。历史库的启动恢复仍只修复登录、权限、导航和商城的
101
+ 最小基础;不能把启动投影当作完整空库,也不能在客户库执行空库清理。`ApplicationType=Platform`
73
102
  的“全部安装/更新”是显式维护动作,不得用作默认开机或普通功能联调的准备步骤。
74
103
  记录启动就绪、首次登录、商城打开、单个可选包安装和全部包维护各自耗时;全量维护通过
75
104
  不能代替最小空库验收。缩小启动范围不卸载既有租户的应用,也不删现有配置。
@@ -77,16 +106,44 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
77
106
  ### 吾码服务器运维面板 Microi.Panel
78
107
 
79
108
  - 项目由 `Microi.Ops` 更名为 `Microi.Panel`;独立 .NET + Vue + Microi.UI 宿主使用自己的管理员账号、SQLite 和 Docker 权限,业务 API/Web 停止时仍可操作。只安装面板时使用 `install-microi-panel.sh`,不要求先安装吾码业务平台、宝塔或 1Panel。具体命令与能力边界见中文官网 `server-panel/overview.md`。
80
- - 先确认主机内存、Docker Engine 身份、活动任务、已有 Ops/Panel 控制器、端口、编排和数据目录。每台 Docker 主机只运行一个吾码控制器。与宝塔/1Panel 共存时使用独立安装目录、容器名、卷、网络和端口;80/443 等监听端口不能被两个入口同时占用,不得重置 Docker 或接管第三方面板资源。
109
+ - 先确认主机内存、Docker Engine 身份、活动任务、已有 Ops/Panel 控制器、端口、编排和数据目录。每台 Docker 主机只运行一个吾码控制器。与宝塔/1Panel 共存时使用独立安装目录、容器名、卷、网络和端口;80/443 等监听端口不能被两个入口同时占用,不得重置 Docker 或自动接管第三方面板资源。
110
+ - 宝塔原厂进程检查可能识别 Docker 内的 Nginx,后装时即使端口独立也会提示已有 Web 环境。按已授权范围处理原厂确认:隔离机验收保存确认记录与安装前基线,客户机不自动确认未授权的覆盖或迁移。非交互执行要显式处理已识别的提示并设置超时,不能把挂起、安装器退出或仅出现目录当作安装成功;完成后回读原 Docker 身份、面板凭据/证书哈希及真实网站内容。
111
+ - 1Panel 版本检查使用原厂支持的 `1pctl version` 或 `1panel-core version`,再核对 core/agent 的真实 systemd ExecStart 和官方包 ELF 哈希。不要猜测执行 `1panel-agent version`:已验收的 v2.4.1 会启动另一个 agent 并争用 Unix socket。宝塔新版本不一定保留旧 `data/version.pl`,应使用当前安装版本支持的读取方法,并独立验证真实服务、浏览器页面和网站。
81
112
  - 插件市场只安装目录内明确版本与 SHA-256 的镜像;检查架构、许可、健康检查、持久卷和真实业务读写。Oracle 等原厂许可渠道不擅自镜像;MinIO 社区归档后的源码构建必须保留对应源码、许可与摘要。跨数据库大版本升级仍需专用迁移方案。
82
- - 网站和反向代理由受管 Docker Nginx 执行;配置先 `nginx -t`,再原子发布与回读。HTTP-01 需真实 DNS 和公网 80 端口的挑战路由,不能用跳过验证冒充签发成功;通配符使用外部 DNS 验证后导入证书。证书续期必须验证新的序列号/指纹、服务重启后的调度和暂停行为。
113
+ - 吾码新建网站和反向代理由受管 Docker Nginx 执行;配置先 `nginx -t`,再原子发布与回读。`2.0.2` 稳定版提供已有宝塔 Nginx / 1Panel OpenResty 网站直接管理:默认只读发现,用户明确接入实例后才允许修改其已识别站点。宿主适配器通过固定 root Unix socket 核对真实实例、站点配置和容器挂载,不复制第三方面板资源为假受管实例,不暴露任意文件或 Shell 入口。
114
+ - 外部站点修改必须绑定实例指纹、站点标识、配置 SHA-256 和稳定请求号;CAS 不匹配停止覆盖。发布前备份原配置,校验、切换与重载失败保留恢复现场;历史回滚同样检查当前版本。原面板仍可管理自身资源,跨面板并发修改需重新回读,不能自动选择吾码版本覆盖。
115
+ - 宝塔原生进程身份核验读取固定 PID 的 `/proc/PID/exe`,宿主 systemd 的能力集合需包含 `CAP_SYS_PTRACE`;同时用 `SystemCallFilter=~ptrace process_vm_readv process_vm_writev` 禁止实际调试和跨进程内存系统调用,保留 `NoNewPrivileges`、`ProtectSystem=strict` 和固定可写目录。必须在等效 systemd 限制下验证真实 Nginx 发现与禁止调用,不能用普通 root 成功或吞掉权限异常冒充接入通过,不新增任意 PID/Shell 接口。
116
+ - HTTP-01 需真实 DNS 和公网 80 挑战路由,不能用跳过验证冒充签发成功。外部站点在已核验根目录及现有挂载内创建独立挑战子目录,helper 仅挂该目录;不得挂整个第三方站点根目录、重建原容器或异步镜像 token 冒充可靠挑战。已有验证 location/include 或重写冲突按实际适配结果处理,不盲目覆盖其它 CA 工具。通配符继续使用外部 DNS 验证后导入证书。
117
+ - 自动续期默认启用,保留 lego v5 `run` 的 ARI 和动态有效期判断,不使用强制续签;正常检查不超过 12 小时,短周期证书缩短间隔。SQLite 持久化下一次检查、失败退避、操作编号和执行轮次;预检失败、重启与重复投递按同一轮次幂等补偿,已签发待发布时继续原检查点。暂停阻止后续排程及尚未开始的旧自动任务,不承诺终止已经发出的 CA 请求。
118
+ - 区分普通 HTTP、TCP TLS 与 QUIC / HTTP/3 监听,不能因 `listen 443 quic` 没有 `ssl` 关键字就对其执行明文 HTTP-01 探测。持久旧计划按冻结配置正文重算传输类型,保留原请求、CAS、路由和隔离目录。初次网络失败留下本地 ACME 账号时,托管与外部站点共用恢复逻辑:只有 CA 明确 `accountDoesNotExist` 且本地没有注册回执才归档,保留原私钥,以无网络、独占状态卷的固定帮助容器完成可恢复步骤;不能清空状态卷或换任务掩盖失败。
119
+ - 证书须验证私钥、有效期和 SAN,发布在 `nginx -t`、重载及真实 SNI 叶证书 SHA-256 回读成功后才提交;失败保留旧证书,回退也验证旧 TLS。外部网站重载后发布与恢复分别共享 10 秒回读预算,每轮全部域名/端口须同时通过精确叶证书与 HTTPS 响应检查;TCP、TLS、HTTP 和 Docker 读取都计入预算,身份/CAS 与非法重定向立即失败,不累计各轮局部成功。通用动态主页不强制正文恒等,真实验收的静态测试正文则须精确匹配。未换证书仅检查实际服务,不记作新签发。验收覆盖原任务重试、服务重启、暂停、配置冲突、新旧指纹及恢复失败;HTTP 200、文件写入和配置测试不能单独作为换证成功。
83
120
  - 网站文件仅管理受管卷;文本编辑使用内容哈希拒绝覆盖并发修改。冷备份须明确服务中断,检查正常退出与归档哈希;恢复写入新卷并保留原卷,重试继续原操作 Id。卸载保留业务卷,重新安装沿用记录的原镜像、凭据和数据卷。
84
121
  - 新面板默认独立 HTTPS 端口 61890,管理员密码与 PFX 密码存于服务器权限受限文件;不要把它们复制进业务 SaaS、V8、MCP 参数或日志。旧 Ops 保留原 `OPS_*`、目录、账号、端口、数据保护密钥及 `MicroiOpsUrl`,用原 Compose 替换为 Panel 镜像,不能重新初始化。
85
122
  - 业务 MCP 继续通过 `microi_get_administrative_capabilities`、`microi_admin_table_data`、`microi_update_module` 和应用发布工具维护平台入口;DiyToken 不授予主机 Docker 权限,不增加能从租户会话执行任意宿主机命令的工具。主机安装与恢复使用授权的 SSH/终端和独立面板会话。
86
123
  - 真实验收归入 `Microi.Tests/Panel` 专项,包含全部目录版本、数据库/对象存储写读与冷恢复、SSL/续期、文件、任务重启、独立安装升级回退,以及真实宝塔/1Panel 两种安装顺序。普通外部容器只能证明资源归属保护,不能替代第三方面板共存结论。
87
- - 主机密码防爆破必须同时核对镜像 `io.microi.panel.authguard.protocol=1`、root 专用 Unix socket 和 `microi-auth-guard` 的真实回执。默认开启,同 IP 跨已接入服务累计 3 次封禁 86400 秒,窗口 0 表示累计至解封;成功登录不清零。配置与实际保护分别回读,来源日志/代理或防火墙异常不能标为已生效。当前 `2.0.1` 为源码候选,未完成正式发行;新版必须显式选定 `--image`。默认安装入口仍保持已发布 `v2.0.0` 并明确标注旧版范围,显式选择历史镜像需 `--legacy-panel-only`;两者都不能称为新主机防护已交付,也不能把新镜像失败后回退成旧镜像。
124
+ - 上述外部网站管理与续期增强从 `2.0.1` 引入,现纳入含磁盘治理的 `2.0.2` 交付版本。源码安装器默认镜像准备为 `v2.0.2`;版本号不代表已经发布,必须核对同一冻结源码、实际镜像和最终门禁回执。完整门禁通过后先发布并回读镜像,再发布默认安装脚本,不可提前破坏仍使用历史镜像的公开入口。文档、单元测试或本地 CA 协议成功不代表新镜像正式发行、真实宝塔/1Panel VM 验收、公网 Let's Encrypt 签发或客户上线,必须分别保存并说明各层证据。
125
+ - Let's Encrypt IPv4 免费证书的签发与续期均显式选择 `shortlived`,HTTP-01 仍要求公网 80;自定义面板管理端口不能代替验证入口。公网 CA 成功必须回读实际签发、在线证书和自动续期,本地测试 CA 只证明协议、部署和调度链路。共享工作区冻结验收时保留并发安装器改动,编译配置和测试依赖一并固定;原始失败记录不能改写成通过。
126
+ - 集成夹具也必须挂载真实的磁盘维护 socket,让镜像拉取经过生产容量与回滚保护。原生 Linux 使用宿主服务;Docker Desktop 使用明确登记、核对所有权的独立服务与 socket 卷,控制器只读挂载。不能为了跑通旧用例关闭磁盘保护、伪造 Unix socket 成功或降低空间阈值。
127
+ - 主机密码防爆破必须同时核对镜像 `io.microi.panel.authguard.protocol=1`、root 专用 Unix socket 和 `microi-auth-guard` 的真实回执。默认开启,同 IP 跨已接入服务累计 3 次封禁 86400 秒,窗口 0 表示累计至解封;成功登录不清零。配置与实际保护分别回读,来源日志/代理或防火墙异常不能标为已生效。稳定版无参数安装默认 `v2.0.2`,必须满足协议 1,不保留隐式旧版豁免。两种安装顺序、原厂网站管理及重启后自动续期已在 Ubuntu 24.04、宝塔 13.1.0、1Panel 2.4.1 上通过;证书测试 CA 与公网 CA 验收分别记录。显式选择历史镜像必须带 `--legacy-panel-only` 并说明不含新防护,已经安装协议 1 的面板禁止降为旧协议;不可在新镜像拉取失败后悄悄回退为无防护旧版。
88
128
  - 面板登录有独立 SQLite 防护与可撤销会话;SSH 读取真实宿主认证日志,新 MySQL/MongoDB 使用可验证认证日志,Redis 必须经逐次认证结果代理。禁止根据跨 IP 聚合的 Redis ACL LOG count 封禁最后一个 IP。新 Redis 使用独立网络、不直接发布后端端口;存量实例需维护窗口迁移,不能升级时静默断开连接或宣称已保护。
89
129
  - 主机防护使用最小 systemd 服务,面板只挂载其 root Unix socket,不给业务 V8/MCP 泛化 Shell/防火墙能力。nftables 使用内核超时;iptables 兼容模式的自动解封依赖运行中的守护进程。IPv4/IPv6、INPUT/转发、两个来源 IP、真实失败/成功、手动/自动解封、去重、重启、白名单与规则故障分别验收;Docker Desktop 的专有网络空间测试不能替代原生 Linux 安装/重启或客户生产验收。独立安全专项入口在 `Microi.Panel/Tests/Security` 和 `Microi.Panel/AuthGuard/tests`。
130
+ - 宿主 Python 至少 3.9,检查 SSL、SQLite 和 `asyncio.to_thread`;旧系统用 `--guard-python /opt/microi-python/python/bin/python3` 选择独立运行时,解释器及真实祖先必须由 root 控制且不可组/全局写。不能替换系统 Python 或仅因宝塔自带解释器可运行就忽略版本要求;升级时保留并明确使用同一路径。`--check` 同样核验实际运行时,但不启动服务。
131
+ - systemd 219–231 的安装兼容路径使用 `ReadOnlyDirectories=/` 加原固定目录的 `ReadWriteDirectories`,保留 `NoNewPrivileges`、能力集合、系统调用过滤及兼容内存限制;新版继续使用 `ProtectSystem=strict`。必须用当前 `systemd-analyze verify` 拒绝未知/忽略的关键指令,再做实际进程能力、挂载和网络验收。旧版使用 `systemctl show <unit> --all --no-pager` 读取完整属性,严格解析唯一 `Key=value`;未知单属性会返回错误,空属性在缺少 `--all` 时会被省略。缺少 InvocationID 时以稳定 PID/单调启动时间识别运行实例,读取错误或并发变化仍停止;不能改成无身份回读的覆盖。候选增强不等于所有旧发行版均已通过交付验收。
132
+ - 旧版 `journalctl` 使用受限批次的 JSON 输出,不依赖 `--output-fields`;仍逐条检查可信 root UID、真实 sshd 可执行文件、时间戳与游标。旧 `iproute2` 不支持 `ip -j` 时,仅解析 `ip -o address show` 的固定地址字段;格式异常保留上次可信地址并明确告警,不能把广播地址或接口名加入白名单。
133
+ - Docker 创建网络可能调整 FORWARD 顺序。iptables 只能重新定位带自有链归属证明的跳转:先插入带唯一注释的新首条,回读确认,再按旧规则的完整匹配条件移除旧跳转;禁止按规则序号删除、清空链或覆盖宝塔/Docker 规则。并发变化、封禁/解封内核回读或 TCP 实测失败时不能报告成功。
134
+ - 生成 Compose 时 `cpus` 必须是 JSON/YAML 数值,不能用数字字符串假定旧 Compose 会转换。现场中断已生成账号、证书或编排时保留原文件,不重新初始化凭据;修复需保存原字节、限定修改字段并验证实际容器健康及就绪。
135
+
136
+ ### 宿主磁盘容量与历史镜像
137
+
138
+ - 遇到频繁更新后满盘,先按 Docker 数据根、数据库/备份真实挂载盘分别核对空间与 inode;镜像、容器写层、标准输出、数据库数据/日志、备份、模型与构建缓存分别归因。`docker system df` 的可回收估算不能冒充实际腾出的磁盘空间。
139
+ - `docker image prune -a -f` 只处理未被任何容器引用的镜像,重复执行不会变成卷或构建缓存清理;带标签回滚镜像也可能被清除。不要将其直接写入客户定时任务。数据卷未引用不等于可删除,默认不自动执行 volume/system prune。
140
+ - 安装器部署、宿主独立执行、面板管理同一策略;业务 API 不新增 Docker socket 或另一份主机清理调度。源码安装候选默认开启安全回收,仅限已登记的吾码 API/Web 历史镜像,保护停止容器引用、当前版本、至少两个不同历史版本及最近验证通过的回滚版本、预拉取目标、活动更新及恢复计划,默认连续未使用 7 天。删除前核对精确镜像 ID、引用、策略版本及共享维护锁,状态变化跳过,不强制删。
141
+ - 容量不足先暂停新增拉取/更新并告警,不关闭数据库;拉取预检预算包含展开峰值、回滚、备份与安全余量,监测还须覆盖 inode。日志通过原编排轮转,不能直接删除 Docker 内部日志或数据库文件。默认不自动清理卷、停止容器、备份与其它项目资源;构建机缓存另行配置。
142
+ - 实现事实源为 `Microi.Server/Microi.Panel/HostMaintenance`;`tools/sync-disk-guard-installer.mjs --check` 检查平台/独立面板安装器嵌入字节与原件一致。平台旧安装独立补装入口是 `install-microi.sh --disk-guard-install`,不进入数据库初始化。root 服务为 `microi-disk-guard.service`,账本在 `/var/lib/microi-disk-guard`;固定 root Unix socket 只向独立面板开放类型化维护动作,业务 API 不读取它。
143
+ - 新装默认开启、15 分钟监测、UTC+08:00 每天 03:00 清理、空间/inode 85% 预警与 90% 暂停下载、另留 5 GiB、闲置满 7 天。原策略与停止状态升级时保留。预检先尝试原规则内最多 8 个候选,再独立回读容量;仍不足保持原容器并阻止本次新增下载。外部 Watchtower/手工 Docker 不受本入口仲裁,不宣称能拦截所有宿主写入。
144
+ - `data` 登记只监测实际可写绑定盘,不授予数据库镜像或卷删除权;API/Web 登记核对部署清单仓库和实际容器身份。首次历史候选只标为未验证,不冒充业务回滚验收。预拉取每服务只固定最新目标,失败/恢复中的操作保护不超时删除;处理原任务后使用固定 complete 入口释放。
145
+ - systemd 的只读沙箱不能作为宿主只读盘证据:容量读取 statvfs,真实挂载标志从 PID 1 的 mountinfo 核对,不关闭隔离或进入宿主命名空间。控制 socket、FIFO 和设备节点不作为数据盘检查;普通绑定文件和目录继续监测,避免小型 /run tmpfs 触发数据盘 5 GiB 余量误报。真实 Linux 验收同时覆盖服务重启、面板停止后的自动任务、跨进程 flock、数据卷校验和非强制删除回读。
146
+ - 仅当实际安装并回读服务、策略、候选和删除回执后才称客户已启用。源码、Linux/浏览器专项、客户现场、候选分发、正式商业门禁分别记录;参数及排查命令原位维护在官网 `getting-started/docker-run.md` 的“磁盘容量与安全回收”。
90
147
 
91
148
  ### 依赖镜像统一镜像源
92
149
 
@@ -283,6 +340,7 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
283
340
 
284
341
  - 官方七种空库发布后逐一记录 ZIP SHA-256/大小并纳入原生公开副本。安装器通过固定 Database 枚举的只读选择器解析当前 NAS 地址,正文先 hub.microi.net、失败再 CDN;NAS 及仍带当前证明的 CDN 必须校验 SHA/大小,不将过期缓存导入为最新版。自定义 ZIP 不改下载来源。
285
342
  - 空库初始登录密码只用宿主 CSPRNG 派生的六位随机数字,登录页提示和加密存储使用同一值;AuthSecret 独立保持高熵。不得缩短数据库/Redis/MinIO 凭据或改变恢复库密码。制作任务成功、CDN/NAS 回读和各数据库实际导入分别记录。
343
+ - 空库应用清理必须以平台基础表为保护边界:历史业务包误声明 diy_lang、组件、角色等核心字典表时,V8 与原生清理均不得将其作为应用表删除。脱敏发生失败并清理临时库后,新的生成请求须从 Prepare 开始;不得把原 Sanitize 检查点当成已有临时库继续。
286
344
 
287
345
  - PostgreSQL 导出中的 V8、默认值和注释使用显式 `E'…'` 字符串,同时转义反斜杠、引号、
288
346
  物理换行及控制字符。分别在 `standard_conforming_strings=on/off` 中完整导入,回读代码
@@ -25,6 +25,19 @@
25
25
  可选依赖如翻译服务、Ollama、Qdrant 只在相应能力启用时部署,不把演示编排无条件
26
26
  带入生产。
27
27
 
28
+ 视觉引擎使用一个独立编排,默认运行 `vision/media` 两个容器;`behavior` 通过同名
29
+ profile 显式选装,默认不下载 Qwen、不启动 Ollama。复用吾码API、Web和数据库。
30
+ 服务器准备工具为 `Microi.Server/tools/vision-deployment/deploy.py`,详细操作原位维护在
31
+ `docker-run.html#vision-engine-compose`。CPU/CUDA分别锁定已发布镜像digest;模型下载
32
+ 校验大小/SHA,配置私有挂载,手机走平台HTTPS中继。行为模型默认不启用,独立准确率
33
+ 验收与基础部署就绪分别记录。Ollama设置 `OLLAMA_NOPRUNE=true`,模型导入期间临时RW,
34
+ 结束恢复RO;备份整个模型目录及注册清单。更多模型/许可边界读取 `vision-engine`。
35
+ 官网各组件的独立Compose必须完整保留,按用户要求将代码默认折叠,栏目标题保留在页面大纲中;
36
+ 不能因简化一键入口而删除;恢复时查询Gitee历史,
37
+ 保留参数与注释,同时修正固定密码、租户配置和网络边界。群晖等未配置共享资源组的宿主默认
38
+ 不启用cgroup_parent。视觉NAS辅助脚本位于官网public/downloads/vision,使用容器内Python,
39
+ 无Docker socket、拒绝覆盖既有目录;完整YAML和准备步骤须同时提供,不能只给下载器链接。
40
+
28
41
  ## 配置归类
29
42
 
30
43
  | 配置 | 原则 |
@@ -39,6 +52,20 @@
39
52
 
40
53
  ## Docker/Compose
41
54
 
55
+ ### 安装器的 API 容器 DNS 验收
56
+
57
+ MySQL 已还原、临时客户端权限检查通过,但 API 报 `DatabaseHostInvalid` /
58
+ `The host name or IP address is invalid` 时,不能归因为密码错误或重复导库。
59
+ 先从实际 API 容器验证解析,临时客户端与 API 的网络命名空间不是同一份证据。
60
+ 一键安装及 `--repair-app` 共用实际容器解析门禁;失败才对安装器管理的数据库、
61
+ Redis、MongoDB 按 Docker 实时回读的 `microi` IPv4 写 `extra_hosts` 兜底,
62
+ 校验及备份编排后仅重建 API,并回读解析结果,失败恢复原编排。
63
+ 外部数据库连接不参与地址固定,不改 Docker daemon、全局 DNS、防火墙或数据卷。
64
+ 缺少解析工具不能视为 DNS 故障;缺少共享网络、非法地址、配置并发变化均失败关闭。
65
+ 依赖重建导致 IP 变化后需重新运行修复刷新映射;解析通过不代替 HTTP、登录和业务验收。
66
+
67
+ ### 部署与升级检查
68
+
42
69
  恢复库在 API/Worker 启动前必须暂停业务任务与 Quartz 触发器并强回读。MySQL 5.7 的无表 `SELECT` 带 `WHERE` 时显式使用 `FROM DUAL`,兼容 8.0 和空任务表;校验命令非零退出、无标记或仅错误文本包含标记时均停止,区分 SQL 执行失败与状态不一致。中断的新安装先备份编排和数据库,保留原数据目录后恢复,不通过跳过任务暂停门禁续装。
43
70
 
44
71
  小规格宿主部署翻译与 OCR 时必须实际执行推理并同时检查 SSH/API 响应、线程数和可用内存。LibreTranslate 1.9.6 的容器入口使用 `LT_THREADS` 作为 Gunicorn worker 数,`LT_WORKERS` 不生效;使用 `LT_THREADS=1`、`ARGOS_INTER_THREADS=1`、`ARGOS_INTRA_THREADS=1` 并约束 OMP/OpenBLAS/MKL/NumExpr 原生线程。OCR 同样约束原生数学库线程。容器 Running、模型列表和健康 GET 不能代替首次真实推理验收;这些是附加服务配置,不进入吾码 API 十项启动环境变量。
@@ -0,0 +1,64 @@
1
+ # 完全断网的一键安装
2
+
3
+ ## 入口与范围
4
+
5
+ 平台安装器源码位于 `数据库、案例、文档、资料/`:
6
+
7
+ - `microi-offline-prepare.sh` 调用 `offline/prepare.py`,在联网机器用 Python 3.11+
8
+ 标准库制作 Linux x86_64 核心 ZIP,不要求制包机安装 Docker。
9
+ - `install-microi-offline.sh` 验证清单、准备 Docker、导入并核对镜像,再执行同包的
10
+ `install-microi.sh`;禁止再维护一份独立、落后于在线安装器的业务编排。
11
+ - ZIP 带 shell 自解压前导、静态 BusyBox 和独立 musl 工具运行时;root 使用
12
+ `sha256sum -c microi-offline-linux-x86_64.zip.sha256 && sh microi-offline-linux-x86_64.zip`。
13
+ 目标机无需预装 Docker、Compose、unzip、Python、curl 或 OpenSSL。
14
+
15
+ Linux 内核、systemd、cgroup 控制器、CPU 指令与必要内核模块不是用户态包可以补齐的
16
+ 依赖。当前核心包要求 x86_64、内核 4.18+、systemd 与 CPU AVX;CentOS 7 旧内核应
17
+ 早期拒绝,不能沿用在线脚本的发行版清单冒充所有版本通过。发行时记录实际 Ubuntu、
18
+ CentOS 等版本的断网安装结果;WSL/chroot 工具验证不等于完整服务器验收。
19
+
20
+ 核心镜像从冻结的在线脚本提取:MySQL 5.7、Redis、MongoDB、MinIO、MinIO mc、
21
+ MySQL 管理客户端、API/Web、Microi.Panel。在线脚本已停用的向量组件不恢复默认安装;
22
+ OCR 和翻译的模型必须另行离线交付并实测后才能启用,不能在断网环境启动下载任务。
23
+
24
+ ## 制品与宿主边界
25
+
26
+ 1. 制包前盘点输出盘与 Docker VHD 所在宿主盘。Registry 清单、压缩层 digest 与解压后
27
+ diff_id 逐个核对,导出到指定输出目录,不向容量不足的本机 Docker 拉取。
28
+ 2. 固定脚本输入快照和镜像 config/digest;续做复用同一快照。明确采用新输入时使用
29
+ `--refresh-inputs`,随后重新制作候选并验收,不能混搭并发发布中的面板版本。
30
+ 3. ZIP64 支持由包内 Python 处理,路径、普通文件类型、去重清单、大小和 SHA-256 全部
31
+ 校验后才部署。工具运行时在 `/opt/microi-offline/runtime` 独立安装,不替换系统 libc
32
+ 或 Python;对应服务运行期间该目录是长期依赖,不能作为临时目录删除。
33
+ 4. Docker classic store 的 `.Id` 是 config ID;Docker 29 containerd store 可能返回
34
+ manifest digest。只接受清单中的这两种身份;legacy archive 导入产生新 manifest 时,
35
+ 用 `docker image save` 流式回读原 config 字节 SHA-256、架构和实际 RootFS diff_ids。
36
+ 不能只按 tag、架构或 Running 状态认定镜像相同。
37
+ 5. 已有 Docker 只复用,不覆盖 daemon、数据或启动失败的服务;缺少 Compose 且目标
38
+ 插件路径不存在时可安装包内插件。离线 Compose 持久使用 `pull_policy: never`,
39
+ 安装入口同时禁止联网 pull/build、包管理器和外网 curl。镜像缺失或身份冲突失败关闭。
40
+ 6. 新装入口发现已有吾码编排、面板或 Ops 即停止,保留数据。宿主锁防并发;工具运行时
41
+ 使用临时目录解压、成功后原子替换。成功/失败和可捕获信号均清理自有临时目录,
42
+ 硬中断残留须先按 PID/归属核验,不能删除活动任务锁或用户原 ZIP。
43
+
44
+ ## 验收与公开下载
45
+
46
+ - 真实断网 VM 使用独占虚拟交换机、没有默认网关,记录内核/系统、预装工具与空 Docker
47
+ 状态。使用实际 ZIP 自解压并完成数据库导入、核心升级与 readiness、Web 登录和
48
+ MinIO 公私桶操作、面板 HTTPS 健康;重启后复核持久化及服务自动启动。
49
+ - 离线入口 umask 077 下,MySQL 无秘密配置必须显式 0644,避免容器忽略大小写设置。
50
+ 面板登记继承本次 API/Web 仓库,宿主监测只读暴露 `/home`;运行目录由 systemd
51
+ 以 0700 创建并保留 inode,防止 Docker 重启时先创建 0755 导致严格校验失败。
52
+ - MySQL 使用 `--protocol=TCP --host=127.0.0.1` 执行就绪查询和后续 SQL,拒绝镜像
53
+ 初始化期间尚未开放 TCP 的临时 socket;不要用固定延时接受随机成功。
54
+ CentOS sudo secure_path 缺少 /usr/local/bin 时由离线入口补齐,校验文本使用 LF。
55
+ - 单元回归覆盖损坏/缺失/越界归档、工具引导、镜像两种 ID 与重打包验证;保留既有端口、
56
+ 十项 API 配置白名单与先装面板保护的回归。测试自有 VM、目录、进程和临时产物须收尾。
57
+ - 官方 ZIP 通过已核验的 iTdos MCP v3 原始字节流上传,源码仓只存代码、下载 URL、大小、
58
+ SHA-256 与验收回执。不得把 ZIP、镜像层、截图或测试 VHD 提交 Git。
59
+ - 当前 NAS 历史安装包原生协议上限是 2 GiB,先从 Capabilities 实测;小于上限的公开
60
+ ZIP 可用 `PinHistoricalAsset` 精确选择已完成 V3 版本,等待原生复制和匿名校验 Ready。
61
+ 禁止直写 Ready、伪造下载流量、泄露 MinIO 密钥或绕过当前源/版本绑定。
62
+ - 官网下载使用受管 `mci-file-resource-archive-download` 的精确 SourceTenant/AppKey/
63
+ VersionId/AssetPath 入口,NAS 未就绪或健康失败时回到同版本 CDN。分别验证上传、
64
+ NAS 原始字节/Range/MIME、入口选址与回退;不要用桶 Probe 或云上传成功替代复制验收。
@@ -16,7 +16,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
16
16
  | `form-engine/form-engine-info.md` | microi-form-engine, v8-crud-api | 表单模型和运行时能力 |
17
17
  | `form-engine/form-field-info.md` | microi-form-engine, v8-table-event | 表单/字段属性与事件 |
18
18
  | `form-engine/model-engine.md` | v8-template-engine | 表格/表单模板 |
19
- | `getting-started/docker-run.md` | microi-deployment | Docker 部署与验收 |
19
+ | `getting-started/docker-run.md` | microi-deployment, vision-engine | Docker 部署、历史独立编排、群晖CPU视觉双服务及可选行为模型与验收 |
20
20
  | `server-panel/overview.md` | microi-deployment, microi-ui | 独立服务器面板、Docker 插件版本、Nginx/SSL、冷备份恢复、共存与 Ops 迁移 |
21
21
  | `getting-started/local-run.md` | microi-deployment, microi-client-frontend, playwright-e2e | 源码本地运行、URL 切换 ApiBase/OsClient 与并行浏览器隔离 |
22
22
  | `getting-started/source-code-architecture.md` | workspace-conventions, microi-system-delivery | 多仓源码边界、模块地图和修改路由 |
@@ -29,7 +29,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
29
29
  | `more/dos-orm.md` | dos-orm, v8-sql-query | ORM 查询、参数和事务 |
30
30
  | `more/dos-result.md` | v8-utilities, v8-crud-api | DosResult/DosResultList 返回协议 |
31
31
  | `more/enterprise-ai-development-series.md` | microi-system-delivery, microi-form-engine, module-engine, v8-api-config | 信息型页面;企业 AI 开发课程与平台引擎实践索引 |
32
- | `more/hdfs.md` | v8-file-upload | 分布式文件存储和 URL |
32
+ | `more/hdfs.md` | v8-file-upload | 分布式文件存储、URL、本机原始流断点续传、固定 Primary/BackupPrivate 私有备份及显式 BackupPublic 最终文件公开、共享日额、原字节与匿名有界回读 |
33
33
  | `more/identity-verification.md` | v8-security, v8-utilities, microi-microservice, app-store, v8-saas-multi-tenant | DiyToken、登录方式气泡、Passkey、Authenticator TOTP、Gitee/微信/GitHub、动态租户设置、严格人脸、一次性步进票据、个人中心和自动升级包 |
34
34
  | `more/office.md` | v8-export-import, microi-microservice | Office 导入导出与在线编辑集成 |
35
35
  | `more/security.md` | v8-security | 平台安全和兼容基线 |
@@ -66,7 +66,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
66
66
  | `system-engine/email-engine.md` | email-engine | 邮箱系统、源码商城安装、账号维护、收发同步和邮箱 MCP |
67
67
  | `system-engine/spider-engine.md` | spider-engine | 浏览器采集和 Worker |
68
68
  | `system-engine/ocr-engine.md` | ocr-engine, v8-file-upload, v8-saas-multi-tenant, v8-security | 图片/PDF 文字识别、独立模型服务、租户配置、V8/HTTP/MCP 调用、安全边界与生产验收 |
69
- | `system-engine/vision-engine.md` | vision-engine, ai-engine, microi-microservice, app-store, v8-security | ONNX 视觉特征、租户样本匹配、异步 AI 回退、摄像头帧、人脸治理、微服务与商城交付 |
69
+ | `system-engine/vision-engine.md` | vision-engine, ai-engine, microi-microservice, app-store, v8-security | ONNX 视觉特征、样本匹配、视频脸框与有界跟随、授权图库与私有示例、异步候选复核、微服务与商城交付 |
70
70
  | `system-engine/translate-engine.md` | translate-engine | 多语言与翻译供应商 |
71
71
  | `system-engine/unity-integration.md` | unity-integration, v8-api-config, microi-client-frontend | Unity UPM、WebGL/Windows、多人租约、公屏、DiyToken 与 V8 通讯边界 |
72
72
  | `system-engine/visualization-engine.md` | page-engine, microi-ui, microi-microservice | 3D、LIS 型材库、CAD、goView 与数据大屏能力边界及微服务交付 |
@@ -73,6 +73,19 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
73
73
 
74
74
  ## 上传字段配置(AI 生成时强制)
75
75
 
76
+ - `Config.FileUpload.MediaType` 明确指定 `file/image/video`,缺省为 `file`。设计器【媒体类型】
77
+ 控制 PC 的媒体筛选及 UniApp 的普通文件/图片/视频选择与回显;小程序视频走相册/拍摄,
78
+ 不得退回聊天文件。`ImgUpload` 仍固定为图片,不按业务字段名推断媒体类型。首次启用先更新
79
+ PC 和小程序源码/产物;旧客户端不识别该配置。保留原权限、上传上下文、大小、数量和存储格式。
80
+ 复用 `microi_get_field_list` + `microi_update_field` 合并完整 Config 并回读;
81
+ `microi_build_field_config(sourceType:"FileUpload")` 校验媒体枚举。前端筛选不替代后端安全校验。
82
+ - `ImgUpload`、`FileUpload` 的物理字段与 `diy_field.Type` 必须使用 `mediumtext`,已有 `longtext`
83
+ 保持原类型。单图、单文件也保存附件描述 JSON,文件名、路径、大小与权限信息可能超过
84
+ `varchar(255)`,不能按数量推断短字段长度。遇到 `Data too long for column`,先回读真实列、
85
+ 控件元数据和索引,通过 `microi_update_field` 扩容,再导出/回读物理列;禁止截断 JSON、
86
+ 只改元数据或缩小已有大文本列。报表/虚拟字段没有物理表时保留其边界,不为修长度重建旧表。
87
+ 官方字段同时同步责任应用和基础空库包的字段、PhysicalColumns 与建表 DDL,保留租户值。
88
+
76
89
  - 需要逐附件角色权限时,在 `Config.FileUpload` 设置 `EnableRolePermission:true` 和 `Limit:true`;
77
90
  `HideUnauthorizedFiles`(隐藏无权行)、`ShowUnauthorizedFileName`(显示无权名称)、
78
91
  `DisableRoleInheritance`(关闭角色继承)均为 boolean,默认 false。未启用的旧字段保持兼容。
@@ -144,7 +144,7 @@ if (V8.LoadMode !== 'Design') {
144
144
  | JoinForm | `JoinForm.TableId`、`JoinForm.TableName`、`JoinForm.JoinFieldName`、`JoinForm.FormMode`、`JoinForm.Id`、`JoinForm._SearchEqual` |
145
145
  | TableChild | Config 根节点的 `TableChildTableId`、`TableChildSysMenuId`、`TableChildFkFieldName`;`TableChild.PrimaryTableFieldName`(默认 `Id`)及分页/导入选项 |
146
146
  | ImgUpload | `ImgUpload.Limit/Multiple/MaxCount/Tips/Preview/MaxSize/SaveFullPath`;`ImgUpload.Crop.Enabled` 仅表示默认开启,另有 `Mode=free/fixed/select`、`Ratio`、`CustomWidth/CustomHeight`、`AllowZoom/AllowRotate/AllowFlip`;运行时在上传面板内提供裁剪开关,裁剪弹层提供“不裁剪直接上传”;导出时会按最大图片数展开列 |
147
- | FileUpload | `FileUpload.Limit/Multiple/MaxCount/Tips/MaxSize/SaveFullPath`,Office 预览/编辑/版本,以及 `EnableRolePermission/HideUnauthorizedFiles/ShowUnauthorizedFileName/DisableRoleInheritance`(boolean,默认 false);开启角色权限强制私有存储,附件 `VisibleRoleIds` 多选真实角色 Id;文件不使用 `ImgUpload.Preview/Crop` |
147
+ | FileUpload | `FileUpload.MediaType` 为 `file/image/video`(缺省 `file`),控制媒体选择与回显,不改变字段存储格式;`FileUpload.Limit/Multiple/MaxCount/Tips/MaxSize/SaveFullPath`,Office 预览/编辑/版本,以及 `EnableRolePermission/HideUnauthorizedFiles/ShowUnauthorizedFileName/DisableRoleInheritance`(boolean,默认 false);开启角色权限强制私有存储,附件 `VisibleRoleIds` 多选真实角色 Id;文件不使用 `ImgUpload.Preview/Crop` |
148
148
  | RichText | `RichText.Limit`;`Image.Enabled/MaxSize/MaxCount/Preview/CompressMaxSize/CompressMaxWidth`;`Video.Enabled/MaxSize/MaxCount`;`File.Enabled/MaxSize/MaxCount/Accept`;私有正文存稳定标识而不是临时 URL |
149
149
  | Qrcode | `Qrcode.DisplayWidth`、`Qrcode.ShowDownload`、`Qrcode.DownloadText`;扫码内容使用运行态 `DataAppend.Code` |
150
150
 
@@ -17,6 +17,16 @@ description: Microi 前端微服务 MicroService 开发与交付指南。用于
17
17
 
18
18
  ## 何时使用
19
19
 
20
+ ### 看板与复杂页面的三种实现方式
21
+
22
+ | 方式 | 推荐场景与顺序 | 必须验收 |
23
+ |---|---|---|
24
+ | 前端微服务 | 高度定制、需要精细复刻、渐变材质/多层图形、鼠标交互或复杂状态的页面默认优先;Vue 3 + TypeScript 组件持续维护 | 私有源码、公有产物、路由和菜单绑定;宿主主题/密度/生命周期;真实接口与同视口截图 |
25
+ | 界面引擎 | 当前原生组件和声明式场景可完整表达目标布局与交互时优先用于可视化配置、统计/报表;先验证组件能力再选择 | 原生节点、动态数据、设计器可编辑、目标客户端版本、响应式、空/失败状态与截图 |
26
+ | 接口引擎返回 HTML | 外部嵌入、极小独立文档、既有兼容页面等明确需要时使用;前两种无法满足时再选 | 输出转义/访问权限/响应类型、iframe内外路由与滚动;说明后续维护与迁移方式 |
27
+
28
+ 三种方式的数据统计、事务与权限仍由接口引擎或可信后端承担;选择微服务并不意味着重写业务后端。不能因为缺少原生组件就把整个HTML放入界面引擎的iframe后声称已完成原生开发,也不能用Vue的 `v-html` 包裹整页冒充迁移。与参考页比较前固定同一视口、主题、密度和数据,分别核对布局、图形、动效和真实操作;未截图或仍有差异时如实报告,不宣布“一模一样”。已有可用页面迁移时保留原版,新增可对比入口,验收通过后再切换。
29
+
20
30
  | 需求 | 选择 |
21
31
  |---|---|
22
32
  | 简单确认 | `V8.ConfirmTips` |
@@ -176,6 +186,13 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
176
186
  弹窗回调不受影响,后端源码读取及 MCP 操作继续单独鉴权。升级 Microi.Client
177
187
  前端后生效,无需修改应用包、页面或菜单资源。
178
188
 
189
+ 菜单宿主的来源胶囊支持从图标/文字区拖动,关闭按钮不得启动拖动。超过 4px 阈值后
190
+ 按拖动处理并抑制松开点击,限制在内容区与可见视口交集,resize/密度变化重约束,
191
+ 取消和卸载释放指针捕获;位置仅留当前实例,不写用户偏好。管理员顶部 Tab 右键
192
+ 【微服务详情】复用同一详情组件,即使胶囊已关闭仍可打开;完整坐标必须来自右击的
193
+ Tab,不能借当前路由、激活当前页或重挂业务页来读取。异步结果按目标世代与登录身份
194
+ 核验,普通菜单、普通用户和受限访问密钥不展示该入口,源码/MCP 后端鉴权不变。
195
+
179
196
  菜单 `OpenType=MicroService` 时一次绑定 `MicroServiceId`、
180
197
  `MicroServicePageId`、`MicroServiceRoutePath`、`MicroServiceKey`。
181
198
  完整系统 Manifest 不得固化不同租户会变化的两个 Id;模块声明 `openType=MicroService`、`microServiceKey` 和 `microServiceRoutePath` 即可,由 `microi_generate_system` 在任何写入前回读 `sys_microiservice/sys_microiservice_page`,解析并校验当前租户的 `MicroServiceId/MicroServicePageId`。微服务或页面不存在时必须在首个写操作前失败,不能留下半套系统。
@@ -24,6 +24,8 @@ description: 已初始化吾码工作区的默认 AI 开发总控入口,用户
24
24
 
25
25
  先读取 [质量优先的上下文与增量开发](references/context-quality.md)。完整系统在写入前必须读取 [安全与跨端验收](references/progressive-03-安全与跨端验收.md);局部涉及 FormEngine、菜单、权限、文件、登录或前端交互时读取对应安全/跨端章节。未知影响必须扩大检索,不能用少读资料换取不准确的修改。
26
26
 
27
+ 完整系统及用户反馈后的交付复测,还须读取 [交付易错项与证据门禁](references/delivery-pitfalls.md),逐项记录适用、通过、失败或不适用及理由。此表适用于所有模型与宿主;连接成功、模型自述“已完成”或引用规则不能替代实际回执。涉及报表/模拟数据时必须执行 `report-engine` 的默认周期覆盖检查。
28
+
27
29
  按本次实际能力读取相关 Skill,不能只读总控入口后凭记忆实现:
28
30
 
29
31
  | 工作内容 | 相关 Skill |
@@ -40,12 +42,12 @@ description: 已初始化吾码工作区的默认 AI 开发总控入口,用户
40
42
  | 真实业务、截图、账号和跨端验收 | `playwright-e2e`;有独立前端时再读相应前端 Skill |
41
43
 
42
44
  完整开发按“需求与现状分析 → 菜单和报表规划 → 独立骨架 Manifest 检查与 dry-run →
43
- 授权落地菜单骨架 → 分阶段实现最终资源并独立预验收 → 保持菜单身份切换 → 原入口最终验收”推进。
45
+ 授权落地菜单骨架 → 分阶段实现资源 → 可运行即绑定原菜单预览 → 原入口持续验收”推进。
44
46
  仅用户可见的新业务/报表叶菜单先指向共享 AI 开发中组件(`IsMicroiService=0`),
45
47
  保留独立业务 URL、标题和菜单身份;隐藏数据/授权载体维持原绑定,骨架不预绑定不存在资源。
46
- 候选预验收不依赖仍占位的原 URL,切换失败精确恢复本菜单原绑定并列为未完成;
47
- 详情按增补要求及 `module-engine` 执行。经营、领导和业务统计看板默认基于界面引擎,
48
- 不能以列表角标或占位页替代。局部改动只处理范围内菜单/报表,只读分析不创建占位资源。
48
+ 不得仅候选 URL 可看而原菜单仍占位;可预览与验收通过分别记录,失败优先恢复最近可运行的正确绑定;
49
+ 详情按增补要求及 `module-engine` 执行。经营、领导和业务统计看板必须提供完整页面,
50
+ 按 `microi-microservice` 的三种方式决策:高度定制优先微服务,原生组件能完整表达时使用界面引擎,最后才考虑接口返回HTML;不能以列表角标或占位页替代。局部改动只处理范围内菜单/报表,只读分析不创建占位资源。
49
51
 
50
52
  每张由 AI/MCP 创建的业务表都必须同时设计默认表单 Banner,不能只建字段和菜单。完整
51
53
  Manifest 使用 `tables[].formBanner`;未显式配置时仍按字段类型选择业务编号/名称标题、
@@ -88,7 +90,7 @@ Manifest 使用 `tables[].formBanner`;未显式配置时仍按字段类型选
88
90
  - 每条结论明确区分源码已改、运行验收通过、渠道已发布;发现回归或用户再次指出问题时,将对应旧项重新标为待修复/部分完成,修复后再更新结论。最后逐项核对编号总数,禁止漏项、跳号或把未取得回执的发布写成完成。
89
91
 
90
92
  <!-- /microi-progressive:chunk -->
91
- <!-- microi-progressive:chunk id=microi-system-delivery-004 sha256=cc8ef54619f2f7a1dc3ba4268d02cbe678c855ba17e2d9e9ed3251ac0dc35e18 -->
93
+ <!-- microi-progressive:chunk id=microi-system-delivery-004 sha256=9bf41cb6c71c729c548402563fe83d52b3ce1ed2dd82d395dc14c835235a1435 -->
92
94
  ## 交付完成定义
93
95
 
94
96
  一次 Microi 全系统交付只有同时满足以下条件才算完成:
@@ -102,7 +104,7 @@ Manifest 使用 `tables[].formBanner`;未显式配置时仍按字段类型选
102
104
  7. Playwright 账号登录、接口契约、网络守卫、业务闭环、截图复核均通过。
103
105
  8. 生成或修改的通用经验已写回 microi.skills,且不能包含项目专属措辞;不能只写本地 memory、聊天记录或项目临时文档。
104
106
  9. 菜单树包含范围内全部业务与报表入口;每个本次新增可见业务/报表叶菜单已从开发中占位切换到验收通过的真实页面,菜单 Id、业务 URL、层级、排序与权限关联保持正确。仍有占位或阻塞的菜单逐项标为未完成。
105
- 10. 基于界面引擎的业务统计、老板经营与领导管理报表已接通当前租户真实业务数据;指标口径、筛选/时间、权限、穿透、空/失败状态与明细对账均有证据。
107
+ 10. 按三种实现方式决策交付的业务统计、老板经营与领导管理报表已接通当前租户真实业务数据;指标口径、筛选/时间、权限、穿透、空/失败状态与明细对账均有证据。原生界面与微服务分别验证自身运行产物。
106
108
 
107
109
  <!-- /microi-progressive:chunk -->
108
110
  ## 详细参考路由(渐进披露)
@@ -0,0 +1,50 @@
1
+ # 交付易错项与证据门禁
2
+
3
+ 适用于所有 AI 模型与宿主。完整开发或用户反馈后的复测必须读取;局部任务只执行影响范围。
4
+ 每项在项目验收表记录 `适用 / 检查方法 / 证据位置 / 结果 / 未完成原因`,失败不得记通过。
5
+ 规则不能保证模型一定服从;使用确定性检查、真实身份和原菜单结果约束交付结论。
6
+
7
+ ## 执行顺序
8
+
9
+ 1. 固定租户、源码/运行版本、用户要求编号、目标菜单和已授权写入范围;完整读取基础规范及实际专项正文。输出截断须补读,不能称“已加载”。
10
+ 2. 先验证一个正确的原生 CRUD/业务命令合同,再扩展批量、权限和压力测试。测试工具自己的参数错误单列,不能误报产品缺陷。
11
+ 3. 保留失败证据,按下表修复并复测;写结果未知先独立回读。每个已可运行页面立即出现在同一原菜单,开发预览和最终通过分别记录。
12
+ 4. 完成默认日期、所有页面、实际角色和核心业务闭环;相同筛选独立对账。验收数据不足只在授权范围内补。
13
+ 5. 更新项目事实文档与对应通用 Skill;分别报告源码、远端资源、分发包/渠道、线上页面、截图及未覆盖项。完成任务自身清理并回读。
14
+
15
+ ## 逐项检查表
16
+
17
+ | # | 触发问题与根因 | 必须执行的预防与验收 | 规范位置 |
18
+ |---|---|---|---|
19
+ | 1 | 连到错误租户、臆造工具或字段 | 先 profiles/status,再读实时 Schema 与工具参数;固定 ApiBase/OsClient/环境三元组;多连接显式 profile。不能凭文件夹名猜目标 | `workspace-conventions`、`microi-codex`、`microi-db-schema` |
20
+ | 2 | 凭摘要或截断输出声称已读 | 完整读取入口/必读参考及目标配置;缺段补读。记录实际文件与 1–10 适用计划,不能把路由摘要当正文 | `microi-system-delivery`、`context-quality.md` |
21
+ | 3 | 关联下拉出现 SQL 语法错误 | SQL 中替换占位符不能把含 `$'`、`$&` 等业务字符串作为 replace 的替换模板;用函数替换或明确字面拼接,动态值参数化。逐字段测试空搜索、中文、引号与关键符号,并走普通角色 HTTP/真实表单 | `datasource-engine`、`microi-datasource-mapping`、`v8-sql-query` |
22
+ | 4 | 修数据源后破坏 Tabs/列配置或关联只显示 Id | 写前完整读取并合并 Config,不覆盖无关键;确认 SelectLabel/SaveField/Key/Value,保存后独立读取并重新打开,列表、详情、查询都显示名称 | `microi-form-engine`、`microi-datasource-mapping` |
23
+ | 5 | SDK 写调用错误、列表只取默认页 | 按当前实际 SDK 重载/HTTP 合同构造 Add/Upt,不混用前端 V8、SDK client 与后端 V8。先单笔保存→独立回读→重开;分页显式传页码与页大小并检查总数/终止条件 | `microi-frontend-sdk`、`v8-formengine-http` |
24
+ | 6 | Jint/CLR 集合或枚举导致运行失败 | 边界按实际 DTO 显式转普通 JSON/字段,不能假定 Array.isArray 对 CLR 集合有效。先读枚举合法 Key,不用未经定义的状态值;保留缺失与零的区别 | `v8-crud-api`、`v8-table-event` |
25
+ | 7 | 日期合法却违反业务先后关系 | 声明时区、日期与时间粒度;同日承诺时间不得因 YYYY-MM-DD 被解释成午夜而早于下单。模拟履约时间与状态一致,日期边界由业务命令校验 | `report-engine`、`v8-crud-api` |
26
+ | 8 | 有大量模拟数据但本月报表全零 | 种子以本次业务日期为锚点,统计 min/max 与默认周期/维度/状态覆盖;跨月跨年再检查。只补缺口,禁止重写历史日期、硬编码统计或静默查询全历史 | `report-engine` 的覆盖检查脚本 |
27
+ | 9 | 顶部指标有数,图表/明细仍空 | 每个组件独立核对日期控件→请求 DTO→服务端区间→绑定结构;同筛选重算指标、分组、趋势、排行和分页。月初单点趋势正确,切周验证多点;空与失败分开 | `page-engine`、`report-engine`、`datasource-engine` |
28
+ | 10 | 候选页面正常,实际菜单仍开发中 | 可运行即回读资源并绑定原菜单,保持 Id/URL/层级/排序/权限,刷新旧占位缓存后从原入口验收;故障恢复最近可运行正确版本,不一律退回占位 | `module-engine`、`page-engine`、`progressive-01-标准工作流.md` |
29
+ | 11 | 列表有行级过滤,按 Id 详情仍泄露 | 不能假定 GetFormData 自动继承列表查询范围。以真实普通身份覆盖每张受保护主子表:自己的记录允许、别人的拒绝、缺权限字段/投影失败关闭;管理员正向单独验证 | `v8-security`、`v8-table-event`、`playwright-e2e` |
30
+ | 12 | 只用 MCP 管理员就称角色权限通过 | 用独立普通角色会话走正常 HTTP 与真实 UI;覆盖菜单、按钮、写入、详情、附件、打印、报表和越权直访。不能只查权限 JSON、隐藏按钮或冒用管理员 Token | `v8-security`、`playwright-e2e` |
31
+ | 13 | 新增/修改/详情页面仍报错 | 列出全部原菜单及列表、搜索、打开、新增、编辑、详情、子表、按钮;检查控制台和失败请求,保存→读库→重开。页面标题/HTTP200/截图单张均不足以证明全页面通过 | `playwright-e2e`、`microi-form-engine` |
32
+ | 14 | 打开打印即弹系统窗口、无法验收 | 先真实单据预览,点击后才系统打印;模板/数据接口按当前角色授权,宿主桥只传规范打印上下文,不能用字符串 null 或匿名模板绕过。失败保留明确错误 | `print-engine`、`microi-microservice` |
33
+ | 15 | 打印表头正常而单元格/长表错误 | 按真实 formatter/formatter2 签名渲染;HTML 编码、金额精度、100行连续序号、分页/重复/遗漏/溢出都验。浏览器/PDF 与实体打印机出纸分别报告 | `print-engine` |
34
+ | 16 | 微服务仅有元数据却不能打开 | 先列在线应用并读完整源码,CAS 合并;核对实际 Application 与 MicroService/页面记录、私有源码逐文件哈希、公有编译入口、菜单路由及运行回执,不把源码同步当部署成功 | `microi-microservice`、`app-store` |
35
+ | 17 | 用 CRUD 改状态造成库存/金额不一致 | 状态迁移使用业务命令,服务端重验角色、行范围、当前状态、版本和幂等;事务内维护主子表、库存和审计。模拟数据也走同一流程 | `v8-crud-api`、`v8-table-event` |
36
+ | 18 | 网络超时后盲重放导致重复 | 变更前记录意图与稳定业务键,结果未知先读唯一键/目标字段/版本,确认已生效则不重发。不能把同一幂等键换新 ExpectedVersion,不能重开维护助手或改走旁路强写 | `workspace-conventions`、`v8-crud-api` |
37
+ | 19 | 异步按钮成功但列表缓存使验收误判 | 等待明确业务回执,刷新当前列表再独立读库、重开;按钮可点击、提交已发出不等于业务完成。恢复浏览器仅用当前选定宿主的新鲜状态/定位,不循环盲点 | `playwright-e2e` |
38
+ | 20 | 压测写并发16,实际只有1 | 报告配置并发与实际最大 in-flight、请求总数、成功/失败、吞吐和 P95/P99。真实业务合同先通过;保留最初失败。长稳中断后完整重跑所需时长,不能拼接剩余分钟称连续通过 | `performance-testing` |
39
+ | 21 | 环境升级后复用旧验收,或掩盖重启失败 | 记录运行 API/Web 版本与测试时段;版本/候选变化评估失效证据,只重测受影响范围。定位外部重启窗口时保留原失败与复测,单节点通过不等于多节点/故障转移通过 | `performance-testing`、`microi-deployment` |
40
+ | 22 | 临时账号弱密码/遗留可登录,或账号创建改变管理员 | 读实际密码规则后创建本任务最小角色账号,秘密只在安全内存/加密存储;不输出密码/Token。结束禁用并用新登录验证拒绝,不改用户既有管理员凭据 | `v8-security`、`playwright-e2e` |
41
+ | 23 | 上传/哈希回执与实际产物不一致 | 明确原始字节 SHA-256 与 Base64 文本摘要区别;源码私有、产物按发布协议,证据私有上传后独立下载核对字节数/MIME/哈希,短期 URL/Token 不落日志或截图 | `v8-file-upload`、`microi-microservice` |
42
+ | 24 | 为同步干净覆盖他人修改、清理误伤共享目录 | 保存本任务文件/进程清单,冲突先三方合并;只收尾可证归属的临时路径,不删共享依赖或其它任务变更。分别列出本任务差异与外部差异,不为零计数覆盖远端 | `workspace-conventions`、`context-quality.md` |
43
+ | 25 | 本地更新 Skills 就称所有用户已获得 | 规范正文单源维护,同步已注册内嵌知识和插件/CLI资源,验证宿主默认路由及包内文件/哈希;源码、构建包、发布渠道和新工作区实际初始化分别记回执。未实际跑过的模型不称已实测 | `microi-docs-coverage`、`microi-codex-installer` |
44
+
45
+ ## 失败时的交付规则
46
+
47
+ - 修复清单必须保留用户原编号及默认交付 1–10 的映射,不用“优化完成”代替位置、证据与未完成项。
48
+ - 通用问题更新所属 Skill;本表是跨专题索引,具体 API/字段协议仍以该 Skill 和实时源码/Schema 为准,禁止复制一份冲突 API 手册。
49
+ - 新增检查应验证实际行为及失败边界。文本包含某句话、模型承诺遵守、截图看似有数据,都不能单独作为门禁通过。
50
+ - 未授权生产写入、实体硬件、外部模型逐一运行、多节点故障演练或渠道发布时,明确范围;不能通过扩张用户任务来补造成功结论。
@@ -7,7 +7,7 @@
7
7
  统计都应来自真实字段或真实接口引擎;配置写 `diy_table`,禁止写入 `sys_menu`。即使用户
8
8
  没有逐项指定,也必须写入类型感知的合理默认值,不能交付空 Banner。
9
9
 
10
- <!-- microi-progressive:chunk id=microi-system-delivery-005 sha256=32039bfdbd18bb97f3f93974ace75169c9d90df4c0702ff76134f1c9a9282912 -->
10
+ <!-- microi-progressive:chunk id=microi-system-delivery-005 sha256=c85ae239b7d277bc100e083c31b0846b832f786b9734e9dbb21634c653c915be -->
11
11
  ## 完整系统开发默认交付清单(原推荐提示词 1–8)
12
12
 
13
13
  以下八项来自官网最后编号版推荐提示词,是完整系统新建/开发的默认交付要求。
@@ -26,6 +26,7 @@
26
26
  - 在已授权生成验收数据的开发/验收租户,每张业务表准备至少 100 条左右可复现数据,已有足量数据优先复用、缺量才补齐;主子表关联、流程操作、状态流转、金额/库存等业务关系必须合理。字典/系统配置不为凑数量伪造无效选项;逐表报告数量及确有业务基数限制的例外。
27
27
  - 业务界面和记录名称使用正常业务语义,不显示“测试001”等测试字眼,呈现完整运行环境;数据来源和可清理种子标识保留在验收记录中。不得把验收数据灌入未授权的生产库或声称其为真实交易。
28
28
  - 补齐全部选项/关联字段的数据源,需要多个账号、角色和权限路径时一并创建并验收。
29
+ - 数据数量与时间覆盖分开验收:以目标业务时区的当前日期作为本次模拟数据锚点,覆盖报表默认的本日/本周/本月及关键状态、部门/仓库等维度;固定历史日期的百条数据不能证明当前报表可用。跨月/跨年后先盘点缺口,只补已授权的模拟数据,不迁移真实历史交易或修改统计值。日期与时间精度一致,承诺时间不得早于下单时间;状态、金额、库存通过正常业务事件/命令产生。执行 `report-engine/scripts/check-demo-coverage.mjs` 并保存实际服务端与原菜单对账证据。
29
30
 
30
31
  ### 3. 自主推进与 MCP 生成闭环
31
32
 
@@ -74,28 +75,29 @@
74
75
  2. 菜单骨架使用独立 Manifest,只包含 `SecondMenu` 父菜单、用户可见业务/报表的 `Component` 占位叶菜单及必要菜单权限,不预绑定尚不存在的业务表、页面或微服务。独立执行 `microi_plan_system` 和 `dryRun`,在已授权的开发租户范围内优先落地,让用户立即看见功能结构。占位叶菜单使用 `OpenType=Component`、`ComponentPath=/ai-engine/developing`、`IsMicroiService=0`,并保存各自独立、稳定的业务 `Url`。一个共享 Vue 组件服务多个菜单,不能共用业务 URL 或复制多份源码。隐藏 `TableChild` 等数据/授权载体不使用占位组件,仍按原规范保留 `Diy`、真实表绑定及 `Display=0/AppDisplay=0`。
75
76
  3. 共享页面在路由内容区按可用宽高 100% 展示“AI 正在开发中…”及当前菜单标题。菜单身份与名称来自平台生成的 `route.meta.Id/title`,不能从任意 URL 参数拼接 HTML。持续轻量动画必须支持平台明暗主题、窄屏和减少动态效果偏好;动画只表达等待,不模拟真实开发进度。没有可回读任务状态时不展示虚构百分比、完成数、倒计时或预计完成时间。
76
77
  4. 菜单写入后回读 `Id/ParentId/Url/OpenType/ComponentPath/IsMicroiService/Sort` 与角色权限,逐个点击检查身份、标题、访问标签、刷新及切换。随后用分阶段最终资源 Manifest 开发业务表、接口和页面;先回读真实资源 Id,再更新已有菜单绑定,不用尚不存在的资源约束阻塞菜单骨架生成。蓝图记录每个菜单的实际状态、最终绑定及证据;占位不计作已开发页面或已交付功能。
77
- 5. 先在已授权且可访问的候选运行入口独立预验收该菜单的真实页面,覆盖业务、权限、数据及截图,不要求尚指向占位的原业务 URL 提前显示新页面。通过后记录本菜单切换前绑定,更新同一条 `sys_menu` 的 `OpenType`、`ComponentPath` 或真实 MicroService/界面引擎/报表绑定,并按最终打开方式设置 `IsMicroiService`。保持 `Id/ParentId/Url/Sort`、角色/按钮权限及关联,不删除重建或改变无关配置。刷新菜单并移除该菜单旧占位缓存,回读配置,再从原菜单及原 URL 做最终验收;微服务预验收前先发布并验证产物和页面绑定,不能只保存源码就切换。
78
- 6. 切换或原入口最终验收失败时,仅恢复该菜单记录的占位绑定或原正确绑定,刷新并回读,保留失败证据与待完成记录。中断、失败或未完成均保持诚实状态,存量已完成页面继续可用;最终交付逐菜单核对,不能靠改文案、隐藏未完成菜单或把占位视为成功来清零。
78
+ 5. 真实资源可运行后立即回读资源 Id,并更新同一条 `sys_menu` 的 `OpenType/ComponentPath/IsMicroiService` 或真实 MicroService/界面引擎/报表绑定,让用户从原菜单直接查看开发预览;不等待全部业务、权限和截图验收结束才切换,也不能只提供候选 URL、让原菜单继续显示“AI 开发中”。保持 `Id/ParentId/Url/Sort`、角色/按钮权限及关联;刷新菜单、移除旧占位缓存并回读,再从原菜单和原 URL 持续验收。MicroService 先发布并验证运行产物及页面绑定;仅有源码或资源尚不可运行时才保留占位。蓝图区分“可预览/待验收”和“验收通过”,展示预览不能冒充最终完成。
79
+ 6. 预览中的局部缺陷保留为待修复项;若新绑定导致白屏、资源不可达或越权,精确恢复该菜单最近可运行且授权正确的绑定,确无可运行版本时才恢复占位。中断、失败或未完成保持诚实记录,存量正常功能继续可用;最终逐菜单验收,不能隐藏未完成菜单或把占位、预览可见视为通过。
79
80
 
80
81
  占位组件是吾码框架前端能力,目标前端版本必须实际包含 `/ai-engine/developing`。
81
82
  旧前端先按用户授权完成框架升级;未升级时先交付菜单规划并准确记录版本依赖,保留原可用路由,不能创建指向不存在组件的白屏菜单或把任意外部 URL 当作等价交付。检查版本不授权自动升级客户容器。具体配置读取 `module-engine`。
82
83
 
83
84
  ### 默认交付业务统计、老板经营与领导管理报表
84
85
 
85
- - 完整系统蓝图必须主动设计基于界面引擎(Page Engine)的统计报表,覆盖需求相关的业务运营统计、老板经营决策和领导管理分析,不等用户逐条要求。按业务域、角色和决策任务组织报表菜单;允许复用同一真实指标源并按角色提供视图,避免为了凑数量重复页面。逐项列出各类报表及适用指标;不适用指标说明业务依据,不伪造不存在的利润、成本、业绩或风险数据。
86
+ - 完整系统蓝图必须主动设计统计报表,覆盖需求相关的业务运营统计、老板经营决策和领导管理分析,不等用户逐条要求。展示技术按 `microi-microservice` 的三方式决策:精细定制优先微服务,原生组件完整覆盖目标时使用界面引擎(Page Engine),接口返回HTML用于明确的独立嵌入或兼容需要。按业务域、角色和决策任务组织报表菜单;允许复用同一真实指标源并按角色提供视图,避免为了凑数量重复页面。逐项列出各类报表及适用指标;不适用指标说明业务依据,不伪造不存在的利润、成本、业绩或风险数据。
86
87
  - 业务统计关注数量、金额、状态、趋势、分布、效率和异常;老板经营视角关注经营规模、收入/成本/利润(存在可核对来源时)、回款/现金与经营风险;领导管理视角关注部门/人员绩效、任务进展、待办/逾期、资源利用及达成情况。最终指标由需求与实际业务模型决定,不能机械套用无关行业指标,也不能只交一张无意义总数卡。
87
88
  - 每项指标在蓝图中定义名称、数据源、计算公式、单位/精度、业务状态、时间字段、时区、区间边界、维度和可见角色;比较类指标明确同比/环比基期。前端筛选与后端查询口径一致,日期、部门/人员/项目等条件在服务端生效;统计接口继续按当前租户和真实用户数据范围授权,不能因老板/领导菜单名称就授予跨租户或全库读取。
88
- - 使用真实业务表、数据源和接口引擎批量聚合,不下载全量明细在前端拼统计,不用随机数、模板演示数或本页合计冒充全量指标。界面引擎负责看板、图表、趋势与分析;需要分页明细、汇总表、查询和导出时配合 `report-engine` 的虚拟报表。列表 `StatisticsFields`、模块 Hero、菜单/按钮角标只是局部提示,不能替代这三类决策报表。
89
+ - 使用真实业务表、数据源和接口引擎批量聚合,不下载全量明细在前端拼统计,不用随机数、模板演示数或本页合计冒充全量指标。界面引擎或微服务负责完整看板、图表、趋势与分析;需要分页明细、汇总表、查询和导出时配合 `report-engine` 的虚拟报表。列表 `StatisticsFields`、模块 Hero、菜单/按钮角标只是局部提示,不能替代这三类决策报表。
89
90
  - 报表必须有合理的周期/维度筛选、加载、空数据、无权限和失败状态。真实零值显示为零;未配置、缺数据源或请求失败不能伪装为零。支持从指标/图表穿透到授权业务明细,带上同一筛选条件,并校验明细合计与统计一致;确无可穿透明细的汇总明确说明来源与限制。
90
- - 先把报表入口纳入菜单骨架,再开发真实指标与界面引擎页面。通过管理员、老板/领导业务角色、普通及无权限角色测试,覆盖时间边界、筛选组合、零/空/失败、跨部门/跨租户拒绝、明细对账、电脑/移动与明暗主题截图;保存并回读 `mic_page`、绑定菜单、数据源及统计接口。示例 JSON 只证明排版,不能证明真实报表已交付。细节读取 `page-engine`、`report-engine` 和 `datasource-engine`。
91
+ - 默认周期必须在实际验收日期复测。每个独立组件都核对日期请求、指标、状态分布、趋势、排行和分页明细,而非仅核对顶部卡片;跨月后不能静默改成全历史、复制旧月份数值或把查询失败转成零。月初只有一天趋势是正常结果,可切本周验证多日趋势;确无业务的去年/未来区间保留真实空态。
92
+ - 先把报表入口纳入菜单骨架,再开发真实指标与页面。通过管理员、老板/领导业务角色、普通及无权限角色测试,覆盖时间边界、筛选组合、零/空/失败、跨部门/跨租户拒绝、明细对账、电脑/移动与明暗主题截图;界面引擎回读 `mic_page`,微服务回读私有源码、公有运行产物和页面路由,两者都回读绑定菜单、数据源及统计接口。示例 JSON 或独立预览只证明局部排版,不能证明真实报表已交付。细节读取 `page-engine`、`microi-microservice`、`report-engine` 和 `datasource-engine`。
91
93
 
92
94
  ### 新增验收清单
93
95
 
94
96
  - [ ] 原 1–8 项逐条仍有实现与验收记录,没有被两项增补取代。
95
97
  - [ ] 菜单骨架独立 Manifest 通过 plan/dryRun 并在授权范围落地,没有预绑定不存在的资源;仅可见业务/报表叶菜单使用占位及 `IsMicroiService=0`,URL 各自独立,隐藏数据载体和存量已完成功能保持正确绑定。
96
98
  - [ ] 开发中页填满可用内容区,当前菜单身份/标题正确;持续动画、明暗/窄屏和减少动态效果可用,无假进度。
97
- - [ ] 候选真实页面先独立预验收,再以真实资源 Id 更新同一菜单及正确打开方式标记;保留 Id、URL、层级、排序、权限和关联,刷新菜单/旧缓存后通过原入口最终验收;失败精确恢复本菜单原绑定,仍在占位的菜单列为未完成。
98
- - [ ] 三类界面引擎统计报表已按需求覆盖,指标口径与数据来源完整,筛选和权限在服务端生效。
99
+ - [ ] 可运行页面已立即绑定同一原菜单供预览,保留菜单身份、URL、层级、权限及关联;刷新菜单/旧缓存后从原入口持续验收。可预览与验收通过分别记录,不存在候选地址可看而原菜单仍占位的遗留项;失败优先恢复最近可运行的正确绑定。
100
+ - [ ] 三类统计报表已按需求覆盖并记录微服务/界面引擎的选择依据,指标口径与数据来源完整,筛选和权限在服务端生效。
99
101
  - [ ] 统计与同口径明细对账,穿透、时间边界、零/空/失败、角色隔离及跨端截图通过;局部/只读任务没有超范围创建资源。
100
102
 
101
103
  ## 标准工作流
@@ -106,7 +108,7 @@
106
108
  - 用 `business-blueprint` 或同等文档固定:角色、菜单、状态机、关键表、接口引擎、按钮、任务调度、业务时间窗口、费率和权限边界。
107
109
  - 用户新增或纠正规则后,立即同步到蓝图/方案文档,避免后续实现忘记业务口径。
108
110
  - 生成系统前,用 MCP 读取现有 `diy_table`、`diy_field`、`sys_menu`、`sys_apiengine`,不要重复造表或编造字段。
109
- - 按上方增补要求形成完整菜单树、逐菜单最终页面计划,以及业务/老板/领导三类界面引擎统计报表和指标口径。
111
+ - 按上方增补要求形成完整菜单树、逐菜单最终页面计划,以及业务/老板/领导三类统计报表、展示方式选择与指标口径。
110
112
 
111
113
  ### 2. MCP 建模阶段
112
114