@microi.net/cli 6.1.7 → 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 (58) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  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 +1 -1
  10. package/scripts/codex-marketplace.json +20 -20
  11. package/scripts/mcp-codex-stdio-adapter.js +189 -189
  12. package/scripts/mcp-server.js +101 -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 +257 -239
  16. package/skills/.microi-skills-version.json +2 -2
  17. package/skills/.progressive-disclosure-manifest.json +90 -68
  18. package/skills/ai-engine/SKILL.md +303 -293
  19. package/skills/ai-engine/references/ai-employees.md +4 -0
  20. package/skills/app-store/SKILL.md +3 -1
  21. package/skills/job-engine/SKILL.md +12 -0
  22. package/skills/message-notification/SKILL.md +2 -0
  23. package/skills/microi-client-frontend/SKILL.md +260 -252
  24. package/skills/microi-codex/SKILL.md +8 -0
  25. package/skills/microi-datasource-mapping/SKILL.md +4 -0
  26. package/skills/microi-deployment/SKILL.md +85 -5
  27. package/skills/microi-deployment/references/deployment-matrix.md +27 -0
  28. package/skills/microi-deployment/references/offline-installer.md +64 -0
  29. package/skills/microi-docs-coverage/references/capability-map.md +3 -3
  30. package/skills/microi-form-engine/SKILL.md +13 -0
  31. package/skills/microi-form-engine/references/component-catalog.md +1 -1
  32. package/skills/microi-frontend-sdk/SKILL.md +12 -0
  33. package/skills/microi-microservice/SKILL.md +18 -1
  34. package/skills/microi-system-delivery/SKILL.md +8 -6
  35. package/skills/microi-system-delivery/references/delivery-pitfalls.md +50 -0
  36. 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
  37. package/skills/microi-uniapp-frontend/SKILL.md +18 -3
  38. package/skills/microi.v8.js +445 -0
  39. package/skills/module-engine/SKILL.md +4 -5
  40. package/skills/page-engine/SKILL.md +233 -215
  41. package/skills/print-engine/SKILL.md +5 -0
  42. package/skills/report-engine/SKILL.md +9 -0
  43. package/skills/report-engine/scripts/check-demo-coverage.mjs +88 -0
  44. package/skills/report-engine/scripts/check-demo-coverage.test.mjs +52 -0
  45. package/skills/scripts/sync-embedded-skills.mjs +4 -1
  46. package/skills/scripts/sync-public-resource-router.mjs +29 -0
  47. package/skills/system-observability/SKILL.md +18 -2
  48. package/skills/ui-design/SKILL.md +1 -1
  49. package/skills/uniapp-mall-assets/SKILL.md +5 -0
  50. package/skills/v8-file-upload/SKILL.md +32 -31
  51. package/skills/v8-file-upload/references/hotspot-offload-operations.md +118 -0
  52. package/skills/v8-saas-multi-tenant/SKILL.md +17 -4
  53. package/skills/v8-security/SKILL.md +20 -5
  54. package/skills/vision-engine/SKILL.md +114 -3
  55. package/skills/vision-engine/references/architecture-and-acceptance.md +8 -0
  56. package/skills/workspace-conventions/SKILL.md +9 -3
  57. 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
  58. 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
@@ -119,6 +119,11 @@ Codex Router 启动后会异步调用 bundled CLI 的 `microi update --backgroun
119
119
 
120
120
  ## 同步与安全边界
121
121
 
122
+ 处理“降低 OSS/CDN 费用、热点资源自动复制到 NAS、FileServerBak”时,先读取
123
+ `v8-file-upload/SKILL.md` 及其 `references/hotspot-offload-operations.md`,再读取
124
+ `system-observability/SKILL.md`。复用 `microi_run_engine` 的受管资源和 CDN 接口,
125
+ 配置使用标准表工具、MinIO 凭据使用专用管理工具;不要仅保存备用地址就报告已分流。
126
+
122
127
  - 发布扩展与 CLI/AI Plugin 前检查实际 VSIX:完整清单、字节数、SHA-256 和敏感文件扫描回执保存在 `.tmp/development-tools-releases/<版本>/`;逐字节核对 MCP 输出/构建输入与 Skills 全部文件同源。归档超过 64 MiB 或混入签名资料、凭据、桌面安装包、工具链、apps、upstream、同步目录或 node_modules 时停止,修复误包后复测;断点补发使用同一门禁,不用 `vsce ls` 替代归档检查。npm Token 只绑定官方 HTTPS registry,私有 npmrc 仅引用 `${NPM_TOKEN}`;同时固定 `npm_config_userconfig` / `NPM_CONFIG_USERCONFIG` 与 registry 两种大小写变量,避免外层 `npm run` 的配置遮蔽有效 Token。不输出凭据,不因继承错误重复要求登录;已发布正确制品保留,发行内容变化使用新不可变版本。npm、Visual Studio Marketplace、Open VSX 的发布命令明确提示成功即可报告对应渠道发布成功;默认不追加 `--verify-all` / `--verify-only`、版本轮询或下载回读,不因传播延迟重复发布。用户明确确认其本机终端已发布成功,也作为该渠道的完成依据;不得再要求确认结果行、提供回执或等待 npm/市场公开可见。只有发布命令确实报错、结果未知且用户也未确认成功,或用户明确要求核验时,才按需查询渠道状态。
123
128
 
124
129
  - `Microi-V8-Engine/.microi-config.json` 是三端连接配置事实源;未知字段必须保留。
@@ -126,5 +131,8 @@ Codex Router 启动后会异步调用 bundled CLI 的 `microi update --backgroun
126
131
  - 推送前先做远端差异检查。写请求超时只表示结果不确定,使用对应 get 工具短超时回读,禁止盲目重复创建或覆盖。
127
132
  - 配置和 Token 文件使用现有原子写与锁协议;不要手工拼接或清空用户已有 MCP 配置。
128
133
  - Codex Plugin 路由器只选择连接,业务行为必须继续走原 MCP bundle。
134
+ - SaaS MinIO 的部署凭据使用 `microi_manage_saas_minio`;先 Inspect 取得 Revision,
135
+ Save 以 `SAVE_MINIO:<tenant>:<revision>` 确认,Probe 验证已保存绑定。通用表密钥禁写
136
+ 继续保留;不会修改 HDFS/OSS,不通过普通第三方 Secret 工具错存,不用临时 V8 绕过。
129
137
 
130
138
  完整 VS Code 命令覆盖关系见插件根目录 `assets/feature-matrix.json`。
@@ -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,18 +15,46 @@ 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
- 1. 默认确认 NuGet、API/PC 和官网完整渠道及版本;记录开始时间,每次新完整发布从当前版本 +1 一次。确认续发同一有效候选时显式使用 `--release-version=x.y.z` 沿用该版本,不重复升版;不能仅凭版本文件未提交就推断为续发。
57
+ 1. 默认确认 NuGet、API/PC 和官网完整渠道及版本;记录开始时间,每次新完整发布从当前版本 +1 一次。中断后使用脚本输出的 `--resume=<会话JSON>` 恢复同一完整发布,沿用原版本、渠道、候选和累计起点;`--release-version=x.y.z` 只用于显式选择版本,本身不代表复用测试或产物。不能仅凭版本文件未提交推断为续发。
30
58
  2. 取得对应产品锁并冻结源码、依赖与官网构建输入;执行本次基础范围全部 C#/Node 测试,核对接口及启动/运行回执;扩展浏览器测试仅显式追加 --platform-frontend-tests 时执行。禁止把缺少授权/夹具、零用例、失败、取消或跳过写成成功;不能因测试需要依赖就自动新建租户、安装应用或创建 Docker。保留既有测试数据写入保护。
31
59
  3. 以 `.microi-local` 选定配置复用 MySQL、Redis、MongoDB 和 SaaS 生效的 MinIO/OSS;生成平台正式产物,执行完整 DLL 加密和一致性校验,在本机进程运行最终产物冒烟。PC 执行自身正式构建与产物检查,官网执行原完整构建与页面验收,不使用临时运行容器替代本机程序。
32
60
  4. 完成 NuGet 与全部选中 API/PC/官网 Docker 推送,逐标签回读远端不可变 digest;新推送和断点复用都必须验证,并回读官网关键页面。任一渠道缺凭据、未执行、失败或未知,不能报告全部发布成功。
@@ -38,6 +66,18 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
38
66
 
39
67
  普通发布的“完整”指全部发行渠道,不自动扩展测试深度。默认只运行基础平台 C#、平台/前端 Node 与最终产物冒烟。发布前一次完成版本、凭据、资源与官网基础预检;完成代码合并后冻结候选,避免边发布边追加其它任务。后续阶段失败时先保存候选、原始测试和已发布渠道回执,重新核验相同源码、配置、工具与实际产物后复用有效结果,只续做未完成范围;结果不匹配或缺少必要证据时按原门禁复验,不能把通过截图当作缓存。npm、NuGet 等渠道的正式发布命令明确成功,即记录对应渠道发布完成;用户已明确确认其本机终端发布成功时,同样直接按成功继续,不再要求提供最终输出或回执。默认不查版本索引、包页面或下载地址,不等待公共索引/CDN 传播,不因即时 404 重传、升版、降为未完成或再次追问。公共可见状态仅在用户另外要求时核验。
40
68
 
69
+ **原生断点续发**:完整入口在发布结果目录保存 `session-*.json`,失败提示给出准确恢复命令。始终重新运行同一个正式入口并使用 `--resume=<会话JSON>`,禁止临时截取、拼接或改写脚本尾部。原始 TRX/TAP 重新核验后复用;前端构建文件、最终后端/加密/冒烟产物及 NuGet 包字节不变时复用。每个已接受的 NuGet 包单独记录,每个 Docker 标签须有独立摘要回执;续发只上传缺项,已完成 Docker 标签仍只读核对摘要,不覆盖其它任务后续发布。镜像身份读取 `docker image inspect` 的实际 `.Id`,不能拿构建日志的 config digest 代替。官网恢复只执行官网未完成部分,不重新选择 API/PC 渠道。
70
+
71
+ **静态镜像校验复用**:一键入口的 `release-image-verification.mjs` 将同一次 `docker image save` 交给原有配置和五个 DLL 严格解析器,不创建容器;成功回执绑定同一发布会话、冻结候选、不可变 ImageID/configId、模板 SHA-256、加密回执原始 SHA-256 和校验器源码 SHA-256。绑定一致且证据完整才复用,命中仍读取真实 DLL 与加密签名,不能无意义重写 `encryptedAt`。身份、输入或证据变化时重新校验,失败不写成功缓存;每个远端标签仍独立回读摘要,缓存不能替代发布确认。
72
+
73
+ **成功资源与共同基线回交**:准备前核对当前工作区实际脚本版本和门禁工具,不能因修复已推远端就认定旧工作区已更新。上轮及本轮成功发布、经官网真实回读的资源与 `.resource-sync-base` 必须随源码提交并回交原分支,不能只推版本文件导致下次重复合并。共同基线滞后时先核对上轮成功回执和当前远端差异,仅通过原生 `--repair-base-from-remote` 入口读取真实远端修复;不得伪造基线或强选本地吞掉远端变更。
74
+
75
+ **耗时优化验收边界**:阶段回执续发、上述静态镜像复用和一次收集已选 Node 各组失败已有实现;Node 各组仍按原顺序各执行一次,任一组失败、缺用例、异常退出或取消均整体失败,不生成成功摘要。失败后的测试组级复用、测试并行和渠道并行尚未实施,不能作为已获得的提速承诺。30 分钟仍是待完整端到端实测的目标,须计入整合准备、失败修复、等待与最终验收;定向夹具通过不等于真实发布已达标,超时继续完成并如实报告。
76
+
77
+ 候选冻结前一次合并本批功能、修复和依赖输入;冻结后不继续接收下一批业务能力。新增需求或与本轮无关的改动排到下一候选。确需修改当前发布源码时,原测试不能继续冒充新候选结果;保留前次耗时和失败,再按实际变更复验。对没有改变的候选、制品与渠道,不重新准备、重测或重发。
78
+
79
+ 官网打包 Skills 一致性等构建输入在整套回归前检查;这是分发输入校验,不是执行 Agent 产品测试。官方资源 HTTP 524 按原同步器先回读完整状态,再用相同候选和 CAS 只补差异,最多定向恢复一次;其它真实错误直接保留失败。重试沿用原计时文件,退出后的修复/等待也计入累计总耗时。候选、配置、渠道、原始证据或制品变化时拒绝复用,先说明具体失效项;不能清空会话来掩盖失败,也不能给一个变化的候选换签成功回执。
80
+
41
81
  **普通发布禁止混入**:新建/准入主子租户、安装消息通知或聊天应用、Microi Code/Agent 的 Vitest/E2E/桌面打包、全提供商兼容专项。隔离测试数据与新建租户不是同一件事,不得借“准备权限夹具”触发安装。平台已有的通用消息/权限离线回归仍保留,不能为缩短耗时删掉已选断言。
42
82
 
43
83
  `--full-only` 仅供用户明确要求的独立深度测试;它不推送镜像,也不作为普通发布的隐含前置。`--microi-agent` / `--microi-code` 仅供独立产品显式发布。发布流程自身的修改只执行对应定向回归;没有新的发版要求时,不为验证规范再发一轮镜像。
@@ -56,8 +96,9 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
56
96
 
57
97
  ## 先确认部署类型
58
98
 
59
- 默认安装与升级只恢复登录、权限、导航和应用商城所需的最小基础,表单、模块和系统设置
60
- 只带核心依赖;其余平台应用由用户登录后在商城按需安装。`ApplicationType=Platform`
99
+ 官方标准空库的新安装包含完整平台应用快照,安装记录与所保留资源的已校验版本一致,
100
+ 并保留系统首页及两个基础角色。历史库的启动恢复仍只修复登录、权限、导航和商城的
101
+ 最小基础;不能把启动投影当作完整空库,也不能在客户库执行空库清理。`ApplicationType=Platform`
61
102
  的“全部安装/更新”是显式维护动作,不得用作默认开机或普通功能联调的准备步骤。
62
103
  记录启动就绪、首次登录、商城打开、单个可选包安装和全部包维护各自耗时;全量维护通过
63
104
  不能代替最小空库验收。缩小启动范围不卸载既有租户的应用,也不删现有配置。
@@ -65,13 +106,44 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
65
106
  ### 吾码服务器运维面板 Microi.Panel
66
107
 
67
108
  - 项目由 `Microi.Ops` 更名为 `Microi.Panel`;独立 .NET + Vue + Microi.UI 宿主使用自己的管理员账号、SQLite 和 Docker 权限,业务 API/Web 停止时仍可操作。只安装面板时使用 `install-microi-panel.sh`,不要求先安装吾码业务平台、宝塔或 1Panel。具体命令与能力边界见中文官网 `server-panel/overview.md`。
68
- - 先确认主机内存、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`,应使用当前安装版本支持的读取方法,并独立验证真实服务、浏览器页面和网站。
69
112
  - 插件市场只安装目录内明确版本与 SHA-256 的镜像;检查架构、许可、健康检查、持久卷和真实业务读写。Oracle 等原厂许可渠道不擅自镜像;MinIO 社区归档后的源码构建必须保留对应源码、许可与摘要。跨数据库大版本升级仍需专用迁移方案。
70
- - 网站和反向代理由受管 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、文件写入和配置测试不能单独作为换证成功。
71
120
  - 网站文件仅管理受管卷;文本编辑使用内容哈希拒绝覆盖并发修改。冷备份须明确服务中断,检查正常退出与归档哈希;恢复写入新卷并保留原卷,重试继续原操作 Id。卸载保留业务卷,重新安装沿用记录的原镜像、凭据和数据卷。
72
121
  - 新面板默认独立 HTTPS 端口 61890,管理员密码与 PFX 密码存于服务器权限受限文件;不要把它们复制进业务 SaaS、V8、MCP 参数或日志。旧 Ops 保留原 `OPS_*`、目录、账号、端口、数据保护密钥及 `MicroiOpsUrl`,用原 Compose 替换为 Panel 镜像,不能重新初始化。
73
122
  - 业务 MCP 继续通过 `microi_get_administrative_capabilities`、`microi_admin_table_data`、`microi_update_module` 和应用发布工具维护平台入口;DiyToken 不授予主机 Docker 权限,不增加能从租户会话执行任意宿主机命令的工具。主机安装与恢复使用授权的 SSH/终端和独立面板会话。
74
123
  - 真实验收归入 `Microi.Tests/Panel` 专项,包含全部目录版本、数据库/对象存储写读与冷恢复、SSL/续期、文件、任务重启、独立安装升级回退,以及真实宝塔/1Panel 两种安装顺序。普通外部容器只能证明资源归属保护,不能替代第三方面板共存结论。
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 的面板禁止降为旧协议;不可在新镜像拉取失败后悄悄回退为无防护旧版。
128
+ - 面板登录有独立 SQLite 防护与可撤销会话;SSH 读取真实宿主认证日志,新 MySQL/MongoDB 使用可验证认证日志,Redis 必须经逐次认证结果代理。禁止根据跨 IP 聚合的 Redis ACL LOG count 封禁最后一个 IP。新 Redis 使用独立网络、不直接发布后端端口;存量实例需维护窗口迁移,不能升级时静默断开连接或宣称已保护。
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` 的“磁盘容量与安全回收”。
75
147
 
76
148
  ### 依赖镜像统一镜像源
77
149
 
@@ -226,6 +298,8 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
226
298
 
227
299
  ## 一键发布产物边界与缓存
228
300
 
301
+ - 最终 API 冒烟只临时注入项目配置中的十个基础设施 `AppSettings` 字段,不复制 `DevLoginBypass` 或其它本地节点,不改写用户源配置。成功、失败和可捕获中断都先恢复公共 `appsettings.json` 原始字节,再清理自有 scratch;恢复失败保留恢复证据并停止发布。产物捕获/复用、每次 Docker 构建及 API 镜像上传前均校验公共模板字节与 SHA-256,拒绝环境配置、旧冒烟备份和本地选择文件残留;镜像通过不可变 imageId 静态读取配置,不运行测试容器。不可捕获的强杀/掉电不保证即时恢复,后续门禁仍必须拒绝污染产物。
302
+
229
303
  - 一键脚本的本次构建、pack、冒烟日志和 NuGet 替换临时目录由 `Microi.Server/tools/release-scratch.mjs` 创建在发布结果目录的唯一 `release-scratch-*` 下,`EXIT` 自动收尾;归属清单与 `.cleanup.json` 回执在同级。成功仅留小回执,失败保留清单、原始错误和未清范围。它不删除 Full 报告、已发布制品、源码、共享 `.tmp` 或其它任务目录。执行器在 shell 启动前拒绝时,脚本内检查尚未运行;先定位当前宿主与拒绝阶段,不换工具绕过,也不默认添加 `-Force`、清除属性或修改 ACL。完整规则见工作区规范的“Windows 默认普通删除与策略拒绝排查”。
230
304
 
231
305
  - 需要完整解决方案构建和 NuGet 打包时,先完成一次 Release build;publish 阶段复用已验证产物,禁止先 clean 再重复编译同一项目引用链。
@@ -264,6 +338,10 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
264
338
 
265
339
  ## 空数据库 SQL 导入回归
266
340
 
341
+ - 官方七种空库发布后逐一记录 ZIP SHA-256/大小并纳入原生公开副本。安装器通过固定 Database 枚举的只读选择器解析当前 NAS 地址,正文先 hub.microi.net、失败再 CDN;NAS 及仍带当前证明的 CDN 必须校验 SHA/大小,不将过期缓存导入为最新版。自定义 ZIP 不改下载来源。
342
+ - 空库初始登录密码只用宿主 CSPRNG 派生的六位随机数字,登录页提示和加密存储使用同一值;AuthSecret 独立保持高熵。不得缩短数据库/Redis/MinIO 凭据或改变恢复库密码。制作任务成功、CDN/NAS 回读和各数据库实际导入分别记录。
343
+ - 空库应用清理必须以平台基础表为保护边界:历史业务包误声明 diy_lang、组件、角色等核心字典表时,V8 与原生清理均不得将其作为应用表删除。脱敏发生失败并清理临时库后,新的生成请求须从 Prepare 开始;不得把原 Sanitize 检查点当成已有临时库继续。
344
+
267
345
  - PostgreSQL 导出中的 V8、默认值和注释使用显式 `E'…'` 字符串,同时转义反斜杠、引号、
268
346
  物理换行及控制字符。分别在 `standard_conforming_strings=on/off` 中完整导入,回读代码
269
347
  哈希、长度、空字符串与 NULL;不能把关闭标准字符串模式当作通用修复,也不能删改 V8 代码。
@@ -284,3 +362,5 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
284
362
  - 不在没有备份和恢复演练时执行数据库升级或不可逆迁移。
285
363
  - 不修改 `microi.doc/docs/doc/about/update-log.md`,除非用户明确要求发版。
286
364
  - 撤回或重写版本日志前,必须遵循 `../workspace-conventions/SKILL.md` 的“多对话共享工作区变更归属保护”;当天提交、最新 `HEAD`、相同作者或相关提交信息都不能单独证明改动属于当前对话。
365
+
366
+ - 空库应用清理必须以平台基础表为保护边界:历史业务包误声明 diy_lang、组件、角色等核心字典表时,V8 与原生清理均不得将其作为应用表删除。脱敏发生失败并清理临时库后,新的生成请求须从 Prepare 开始;不得把原 Sanitize 检查点当成已有临时库继续。
@@ -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
 
@@ -192,3 +192,15 @@ uni.request({ url: apiBase + '/apiengine/' + key, header: { Token: token } });
192
192
  - 根因:SDK 将 `Id` 从业务行模型 `_RowModel` 中移出后只写到请求外层;外层 Id 可用于接口寻址,但不会稳定进入表单事件的 `V8.Form`。
193
193
  - 通用规则:新增请求遇到 `Id` 时必须同时保留 `request.Id` 与 `request._RowModel.Id`;服务端涉及父子表聚合或删除的事件还必须对父 Id 做非空熔断,禁止使用空值或 `Like` 查询子表。
194
194
  - 自动化检查:FormEngine 写入契约测试必须断言预生成 Id 在请求外层和 `_RowModel` 中完全一致,并覆盖后端事件在空 Id 时拒绝执行、有效 Id 时只查询对应子记录。
195
+
196
+ ## 公有媒体异步入口与同步兼容
197
+
198
+ - `assetUrl` 是同步兼容 API,不能用它声称 NAS 路由已经生效。公有媒体先等待 `resolvePublicResource(value,{private:false})`,或者将明确的上传元数据 `{Path,Limit:false}` 交给 `resolveFileUrl`;首个 `src` / Three.js loader 调用必须等结果后才设置,避免先 OSS 再 NAS 双下载。
199
+ - 同一个 SDK 实例应配置当前 `apiBase/osClient/fileServer/fileServerBak`;租户或 API 切换时调用 `configure`。带明确私有标记、`Limit` 非 `false`、签名 URL 和未知类型保留旧访问链路;匿名 HTTPS 字符串只可作为原本公开媒体消费者的候选发现,不构成公开授权。
200
+ - 复用单一 `public-resource-router.mjs` 生成的 SDK 内嵌实现,不另写别名白名单或拼接 NAS 地址。变更路由器后用 `node microi.skills/scripts/sync-public-resource-router.mjs --write` 更新三份已存在的内嵌区块,再以不带 `--write` 的命令验证;该工具不重置各 SDK 的其它差异。`AliasCandidates` 仅发现;实际选择必须通过同源 `PublicSourceUrlRoutes/1`,由后端核对当前来源、公有 ACL、版本、完整依赖组、Ready 与健康,并绑定精确原 URL、最长 60 秒。
201
+ - NAS 加载失败时调用 `reportPublicResourceFailure`,当前元素最多回退一次到原地址;源值/租户改变与卸载后丢弃迟到结果。GLTF/GLB 不得仅凭入口文件 Ready 改写整组依赖。
202
+ - PageEngine 图片、视频、HDR/GLTF 组件可复用实例级媒体控制器。旧 HTML、`srcset`、CSS URL、任意脚本和平台 bootstrap 不属于全局替换范围,不挂全局 fetch/DOM 拦截器。独立应用必须更新实际内嵌 SDK 并重新发布,不能把模板更新等同存量应用已升级。
203
+ - 验收分别记录纯路由/SDK/SFC 测试、实际客户端发布、运行时请求与完整日账单。原生能力和真实浏览器链路未执行时必须保留未验收状态。
204
+
205
+
206
+ - HTML 媒体只在拥有的 PageEngine/RichText 容器内、插入 DOM 前用惰性 template 投影,复用 resolver 和 sanitizer,私有/签名及 srcset/CSS/脚本不改。hydration 用编辑器原生 disable 锁并禁用源码/附件入口,旧响应不得回填或释放新锁;源码 Edit→等待 View→Edit 同步取消旧轮。保存 canonicalize 回原 URL,错误只在当前容器最多一次回退,真实浏览器首请求与编辑保存另验。
@@ -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` |
@@ -46,7 +56,7 @@ description: Microi 前端微服务 MicroService 开发与交付指南。用于
46
56
  - `sys_microiservice`:已发布运行时。
47
57
  - `sys_microiservice_page`:页面路由。
48
58
  - 编译后的 HTML/JS/CSS/图片放公有 HDFS,源码不公开。
49
- - 官方应用的独立体验入口统一为 `https://static.itdos.com/{OsClient小写}/micro-app/{AppKey}/index.html`,公有桶固定根承载最新版编译文件、`/{Version}/` 承载不可变历史编译文件;私有桶采用相同相对目录承载对应源码文件。宿主内部的新菜单路由统一为 `/micro-app/{OsClient}/{AppKey}/{RoutePath}`,历史 `/micro-app/{AppKey}/{RoutePath}` 继续兼容;菜单路由与对外 CDN 体验地址分别验收。发布后核对 CDN 刷新完成、入口及资源可访问、业务 API 仍指向目标租户。
59
+ - 当前公开应用的独立体验优先使用可信 ApiBase 的 `/micro-app/{OsClient}/{AppKey}/index.html`,由原生解析器核对当前发布清单、公开范围和 NAS Ready 回执,再决定 FileServerBak 或原存储。已有公有桶固定根及不可变版本对象仍是发布投影,不能据直链 200 宣称实际分流。官网公开目录、工作台和商城必须使用同源权威 AppKey/ApplicationType/IsPublic;已安装记录以目标租户为准,不借源商城公开性或同名应用推定权限。旧 ai_app_detail 未返回这些字段时,以当前 Token 的标准 FormEngine 按精确 Id 只读补齐;失败保留原路径。只转换同 FileServer、同租户、同 AppKey 的无版本公开入口;签名 URL、显式历史版本、私有/未知公开性和外部域保持原语义。菜单路由继续使用 `/micro-app/{OsClient}/{AppKey}/{RoutePath}`;私有源码、CDN 投影、API 入口及真实资源分流分别验收。
50
60
 
51
61
  不能从 `sys_microiservice` 公有产物反推完整源码,也不把大 JS/CSS 长期塞数据库 JSON。
52
62
 
@@ -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
+ - 未授权生产写入、实体硬件、外部模型逐一运行、多节点故障演练或渠道发布时,明确范围;不能通过扩张用户任务来补造成功结论。