@microi.net/cli 6.1.6 → 6.1.8

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 (47) 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/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/assets/build-meta.json +4 -4
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +82 -82
  9. package/scripts/mcp-server.js +199 -164
  10. package/scripts/microi-skills.meta.json +243 -237
  11. package/skills/.microi-skills-version.json +2 -2
  12. package/skills/.progressive-disclosure-manifest.json +67 -51
  13. package/skills/ai-engine/SKILL.md +18 -5
  14. package/skills/ai-engine/references/ai-employees.md +4 -0
  15. package/skills/app-store/SKILL.md +10 -1
  16. package/skills/business-blueprint/SKILL.md +1 -1
  17. package/skills/job-engine/SKILL.md +15 -0
  18. package/skills/message-notification/SKILL.md +2 -0
  19. package/skills/microi-codex/SKILL.md +6 -1
  20. package/skills/microi-deployment/SKILL.md +64 -18
  21. package/skills/microi-deployment/references/deployment-matrix.md +7 -1
  22. package/skills/microi-docs-coverage/SKILL.md +11 -1
  23. package/skills/microi-frontend-sdk/SKILL.md +12 -0
  24. package/skills/microi-microservice/SKILL.md +12 -1
  25. package/skills/microi-mobile-app-quality/references/mobile-first-delivery.md +2 -1
  26. package/skills/microi-system-delivery/SKILL.md +1 -0
  27. package/skills/microi-system-delivery/references/context-quality.md +56 -54
  28. package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +9 -5
  29. package/skills/microi-system-delivery/references/progressive-03-/345/256/211/345/205/250/344/270/216/350/267/250/347/253/257/351/252/214/346/224/266.md +65 -65
  30. package/skills/microi.v8.js +445 -0
  31. package/skills/module-engine/SKILL.md +13 -0
  32. package/skills/module-engine/references/module-config.md +17 -0
  33. package/skills/ocr-engine/SKILL.md +1 -0
  34. package/skills/playwright-e2e/SKILL.md +2 -0
  35. package/skills/scripts/sync-public-resource-router.mjs +29 -0
  36. package/skills/system-observability/SKILL.md +29 -6
  37. package/skills/translate-engine/SKILL.md +2 -0
  38. package/skills/v8-api-config/SKILL.md +1 -1
  39. package/skills/v8-file-upload/SKILL.md +17 -32
  40. package/skills/v8-file-upload/references/hotspot-offload-operations.md +103 -0
  41. package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +2 -2
  42. package/skills/v8-security/SKILL.md +5 -8
  43. package/skills/v8-sql-query/SKILL.md +2 -2
  44. package/skills/workspace-conventions/SKILL.md +154 -136
  45. package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +8 -5
  46. package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +2 -2
  47. 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 +4 -4
@@ -22,14 +22,50 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
22
22
 
23
23
  ## 发布测试范围
24
24
 
25
- 常规发布按用户指定 MCP 的实际 MySQL、MongoDB 版本、Redis 和生效 MinIO 或 OSS/HDFS 选择测试矩阵;SQL Server 真实服务与兼容专项仅在用户明确指定解决 SQL Server 问题时执行,不作为每轮发布的默认前置条件,也无需反复申请免测。本文中的“Full/重新 Full”均指当前选定矩阵,已选必测项仍须全部通过。
25
+ ### 普通吾码发布固定流程(30 分钟)
26
26
 
27
- 搜索标签真实浏览器门禁默认使用 1366px 和 1920px 常规桌面;测试进程显式设置 `MICROI_TEST_BROWSER_4K=1` 时追加 3840px 专项。所选宽度随 Full 矩阵冻结,回读必须包含全部所选用例且零失败、零跳过;该变量不进入生产 API 配置。正式发布与同版本 Docker 热修复均拒绝历史 `--skip-tests` / `SmokeOnly` 入口,候选始终包含完整测试输入。
27
+ 收到“发布吾码”“完整正式发布”“一键发布”时,默认执行根目录 `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
28
 
29
- 发布测试默认复用上述 MCP 服务。固定夹具库名、端口或归属冲突先修正测试入口的可配置隔离,采用本任务唯一名称并核验所有者;不能因此新建本地数据库、Redis、MongoDB 或存储容器,也不能删除他人的夹具或放宽测试断言。不可复用的例外及清理要求统一见 [本地测试程序与依赖生命周期](../workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md#本地测试程序与依赖生命周期强制)。
29
+ 1. 默认确认 NuGet、API/PC 和官网完整渠道及版本;记录开始时间,每次新完整发布从当前版本 +1 一次。中断后使用脚本输出的 `--resume=<会话JSON>` 恢复同一完整发布,沿用原版本、渠道、候选和累计起点;`--release-version=x.y.z` 只用于显式选择版本,本身不代表复用测试或产物。不能仅凭版本文件未提交推断为续发。
30
+ 2. 取得对应产品锁并冻结源码、依赖与官网构建输入;执行本次基础范围全部 C#/Node 测试,核对接口及启动/运行回执;扩展浏览器测试仅显式追加 --platform-frontend-tests 时执行。禁止把缺少授权/夹具、零用例、失败、取消或跳过写成成功;不能因测试需要依赖就自动新建租户、安装应用或创建 Docker。保留既有测试数据写入保护。
31
+ 3. 以 `.microi-local` 选定配置复用 MySQL、Redis、MongoDB 和 SaaS 生效的 MinIO/OSS;生成平台正式产物,执行完整 DLL 加密和一致性校验,在本机进程运行最终产物冒烟。PC 执行自身正式构建与产物检查,官网执行原完整构建与页面验收,不使用临时运行容器替代本机程序。
32
+ 4. 完成 NuGet 与全部选中 API/PC/官网 Docker 推送,逐标签回读远端不可变 digest;新推送和断点复用都必须验证,并回读官网关键页面。任一渠道缺凭据、未执行、失败或未知,不能报告全部发布成功。
33
+ 5. 输出各渠道、候选标识、常规测试数量与结果及独立专项未执行清单、各阶段和总耗时、镜像 digest 及官网回读;回收本次进程/临时文件并释放锁。客户部署独立,不以镜像推送代替。
34
+
35
+ 交互选项确认完毕后,本轮共用一个 **1800 秒耗时目标,而非强制截止时间**,覆盖锁/资源准备、测试、编译、加密、冒烟、Docker 检查、推送与回读。超过目标时告警并记录当前阶段、实际耗时和瓶颈,继续推进至发布成功;不能仅因达到 30 分钟杀进程、停止后续步骤或将成功退出改为失败。真实命令失败、用户取消、单操作超时及安全门禁仍保持原有失败语义,定位修复后按候选与回执安全续发。阶段切换或重试不能隐瞒累计耗时,重启续发须保留前次及累计耗时;不能通过跳过测试、吞掉错误或重复盲跑来追求时长。
36
+
37
+ 用户要求同时完成源码交付时,先记录各仓原分支与上游,安全拉取合并并解决冲突,再冻结候选;按归属提交、推送原分支并独立回读。源码同步清单可以包含独立工具仓,但不因此触发其测试、打包或发布。分别记录 Git 准备、脚本执行和任务总耗时,整体仍争取 30 分钟;官网已属于完整发布默认渠道,开发工具和独立应用不因“有变更”自动追加。远端推送问题可以与合格制品发布并行解决,未补齐时如实标为未完成。
38
+
39
+ 普通发布的“完整”指全部发行渠道,不自动扩展测试深度。默认只运行基础平台 C#、平台/前端 Node 与最终产物冒烟。发布前一次完成版本、凭据、资源与官网基础预检;完成代码合并后冻结候选,避免边发布边追加其它任务。后续阶段失败时先保存候选、原始测试和已发布渠道回执,重新核验相同源码、配置、工具与实际产物后复用有效结果,只续做未完成范围;结果不匹配或缺少必要证据时按原门禁复验,不能把通过截图当作缓存。npm、NuGet 等渠道的正式发布命令明确成功,即记录对应渠道发布完成;用户已明确确认其本机终端发布成功时,同样直接按成功继续,不再要求提供最终输出或回执。默认不查版本索引、包页面或下载地址,不等待公共索引/CDN 传播,不因即时 404 重传、升版、降为未完成或再次追问。公共可见状态仅在用户另外要求时核验。
40
+
41
+ **原生断点续发**:完整入口在发布结果目录保存 `session-*.json`,失败提示给出准确恢复命令。始终重新运行同一个正式入口并使用 `--resume=<会话JSON>`,禁止临时截取、拼接或改写脚本尾部。原始 TRX/TAP 重新核验后复用;前端构建文件、最终后端/加密/冒烟产物及 NuGet 包字节不变时复用。每个已接受的 NuGet 包单独记录,每个 Docker 标签须有独立摘要回执;续发只上传缺项,已完成 Docker 标签仍只读核对摘要,不覆盖其它任务后续发布。镜像身份读取 `docker image inspect` 的实际 `.Id`,不能拿构建日志的 config digest 代替。官网恢复只执行官网未完成部分,不重新选择 API/PC 渠道。
42
+
43
+ **静态镜像校验复用**:一键入口的 `release-image-verification.mjs` 将同一次 `docker image save` 交给原有配置和五个 DLL 严格解析器,不创建容器;成功回执绑定同一发布会话、冻结候选、不可变 ImageID/configId、模板 SHA-256、加密回执原始 SHA-256 和校验器源码 SHA-256。绑定一致且证据完整才复用,命中仍读取真实 DLL 与加密签名,不能无意义重写 `encryptedAt`。身份、输入或证据变化时重新校验,失败不写成功缓存;每个远端标签仍独立回读摘要,缓存不能替代发布确认。
44
+
45
+ **成功资源与共同基线回交**:准备前核对当前工作区实际脚本版本和门禁工具,不能因修复已推远端就认定旧工作区已更新。上轮及本轮成功发布、经官网真实回读的资源与 `.resource-sync-base` 必须随源码提交并回交原分支,不能只推版本文件导致下次重复合并。共同基线滞后时先核对上轮成功回执和当前远端差异,仅通过原生 `--repair-base-from-remote` 入口读取真实远端修复;不得伪造基线或强选本地吞掉远端变更。
46
+
47
+ **耗时优化验收边界**:阶段回执续发、上述静态镜像复用和一次收集已选 Node 各组失败已有实现;Node 各组仍按原顺序各执行一次,任一组失败、缺用例、异常退出或取消均整体失败,不生成成功摘要。失败后的测试组级复用、测试并行和渠道并行尚未实施,不能作为已获得的提速承诺。30 分钟仍是待完整端到端实测的目标,须计入整合准备、失败修复、等待与最终验收;定向夹具通过不等于真实发布已达标,超时继续完成并如实报告。
48
+
49
+ 候选冻结前一次合并本批功能、修复和依赖输入;冻结后不继续接收下一批业务能力。新增需求或与本轮无关的改动排到下一候选。确需修改当前发布源码时,原测试不能继续冒充新候选结果;保留前次耗时和失败,再按实际变更复验。对没有改变的候选、制品与渠道,不重新准备、重测或重发。
50
+
51
+ 官网打包 Skills 一致性等构建输入在整套回归前检查;这是分发输入校验,不是执行 Agent 产品测试。官方资源 HTTP 524 按原同步器先回读完整状态,再用相同候选和 CAS 只补差异,最多定向恢复一次;其它真实错误直接保留失败。重试沿用原计时文件,退出后的修复/等待也计入累计总耗时。候选、配置、渠道、原始证据或制品变化时拒绝复用,先说明具体失效项;不能清空会话来掩盖失败,也不能给一个变化的候选换签成功回执。
52
+
53
+ **普通发布禁止混入**:新建/准入主子租户、安装消息通知或聊天应用、Microi Code/Agent 的 Vitest/E2E/桌面打包、全提供商兼容专项。隔离测试数据与新建租户不是同一件事,不得借“准备权限夹具”触发安装。平台已有的通用消息/权限离线回归仍保留,不能为缩短耗时删掉已选断言。
54
+
55
+ `--full-only` 仅供用户明确要求的独立深度测试;它不推送镜像,也不作为普通发布的隐含前置。`--microi-agent` / `--microi-code` 仅供独立产品显式发布。发布流程自身的修改只执行对应定向回归;没有新的发版要求时,不为验证规范再发一轮镜像。
56
+
57
+ 普通吾码 PC/API 发布使用 PlatformRelease,包含平台自动化、编译、闭源 DLL 加密、最终产物冒烟、Docker 推送和远端摘要回读;完整发布以 30 分钟为可度量预算,记录各阶段耗时,超时如实记未达标,不承诺未知网络下必然成功。普通发布不运行 Microi Code/Agent 测试,不新建租户、不安装聊天应用。Full 保留为显式独立深度测试;本次修复需要真实依赖时复用指定 MCP 的已授权环境,SQL Server 等兼容专项只在明确指定时执行。已选必测项仍须全部通过。
58
+
59
+ 搜索标签真实浏览器门禁默认使用 1366px 和 1920px 常规桌面;测试进程显式设置 `MICROI_TEST_BROWSER_4K=1` 时追加 3840px 专项。所选宽度随显式 Full 或浏览器专项矩阵冻结,回读必须包含全部所选用例且零失败、零跳过;该变量不进入生产 API 配置。正式发布与同版本 Docker 热修复均拒绝历史 `--skip-tests` / `SmokeOnly` 入口,候选始终包含完整测试输入。
60
+
61
+ 本地发布测试默认复用 `.microi-local` 选定配置对应的已有服务,HDFS 使用该租户 SaaS 的实际 MinIO/OSS。固定夹具库名、端口或归属冲突先修正配置传递和可配置隔离,采用本任务唯一记录/Key/对象前缀并核验所有者;不能因此新建本地依赖容器、切换到其它 MCP 租户、删除他人夹具或放宽断言。清理与专项例外统一见 [本地测试程序与依赖生命周期](../workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md#本地测试程序与依赖生命周期强制)。
30
62
 
31
63
  选择、旧脚本冲突处理及结果记录统一读取 [发布测试矩阵](../microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md#按指定-mcp-选择发布测试矩阵) 和 `../workspace-conventions/SKILL.md`;实际目标未使用的提供商不能被虚构为已验证。
32
64
 
65
+ 完整入口自动读取当前工作区已忽略且仅当前用户/系统可访问的 `.microi-e2e/platform-release/profile.json`,也可由发行进程变量 `MICROI_PLATFORM_RELEASE_PROFILE` 指向既有授权配置。配置记录项目 `.microi-local` 对应依赖、明确的测试写入范围、归属及独立端口;必须保留所有者与目标校验,不存旧 Token,不依赖历史 `.tmp`。缺配置或授权不匹配时明确失败,不能自动创建租户、数据库、容器或安装应用。
66
+
67
+ 该入口在同一轮计时中启动受管原生依赖转发,待本轮构建完成后启动对应 API/Vite,并向测试子进程传递私有环境;测试完成先停止自有 API/Vite,转发保留到最终加密产物冒烟完成,脚本成功、失败或取消退出均精确收尾。显式已有 `MICROI_PLATFORM_RUNTIME_CONTROL` 时复用其监督进程,不重复启动;局部前端/仅官网入口不强制加载完整发布配置。只读检查可执行 `node Microi.Server/tools/platform-release-runtime.mjs dry-preflight <工作区绝对路径> [profile绝对路径]`,它不启动服务、不创建测试资源。
68
+
33
69
  ## 先确认部署类型
34
70
 
35
71
  默认安装与升级只恢复登录、权限、导航和应用商城所需的最小基础,表单、模块和系统设置
@@ -48,6 +84,9 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
48
84
  - 新面板默认独立 HTTPS 端口 61890,管理员密码与 PFX 密码存于服务器权限受限文件;不要把它们复制进业务 SaaS、V8、MCP 参数或日志。旧 Ops 保留原 `OPS_*`、目录、账号、端口、数据保护密钥及 `MicroiOpsUrl`,用原 Compose 替换为 Panel 镜像,不能重新初始化。
49
85
  - 业务 MCP 继续通过 `microi_get_administrative_capabilities`、`microi_admin_table_data`、`microi_update_module` 和应用发布工具维护平台入口;DiyToken 不授予主机 Docker 权限,不增加能从租户会话执行任意宿主机命令的工具。主机安装与恢复使用授权的 SSH/终端和独立面板会话。
50
86
  - 真实验收归入 `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`;两者都不能称为新主机防护已交付,也不能把新镜像失败后回退成旧镜像。
88
+ - 面板登录有独立 SQLite 防护与可撤销会话;SSH 读取真实宿主认证日志,新 MySQL/MongoDB 使用可验证认证日志,Redis 必须经逐次认证结果代理。禁止根据跨 IP 聚合的 Redis ACL LOG count 封禁最后一个 IP。新 Redis 使用独立网络、不直接发布后端端口;存量实例需维护窗口迁移,不能升级时静默断开连接或宣称已保护。
89
+ - 主机防护使用最小 systemd 服务,面板只挂载其 root Unix socket,不给业务 V8/MCP 泛化 Shell/防火墙能力。nftables 使用内核超时;iptables 兼容模式的自动解封依赖运行中的守护进程。IPv4/IPv6、INPUT/转发、两个来源 IP、真实失败/成功、手动/自动解封、去重、重启、白名单与规则故障分别验收;Docker Desktop 的专有网络空间测试不能替代原生 Linux 安装/重启或客户生产验收。独立安全专项入口在 `Microi.Panel/Tests/Security` 和 `Microi.Panel/AuthGuard/tests`。
51
90
 
52
91
  ### 依赖镜像统一镜像源
53
92
 
@@ -55,34 +94,34 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
55
94
  - 联网发行机执行 `Microi一键编译发布.sh --mirror-dependencies`,由 `dependency-images.mjs` 读取同一配置的账号密码并用 stdin 登录;禁止将凭据写进命令、日志、镜像或仓库。完成后用 `verify` 回读摘要和多架构清单。
56
95
  - 上游固定 SHA-256;国内加速只能作为传输通道,不能修改版本、替换不明镜像或丢失 CPU 架构。上游和阿里云目标摘要不一致立即停止。Oracle/达梦/金仓等受许可限制的镜像只在具备再分发权后镜像,不用无授权镜像代替。
57
96
 
58
- 用户明确要求同版本仅发布 Docker 热修复时,运行 `Microi一键编译发布.sh --docker-only-hotfix` 并选择后端镜像方案。该入口保持当前版本,禁止 NuGet、文档和官方资源数据库发布,同时保留 Full、候选源码一致性、混淆后冒烟和镜像门禁。修复应进入本地源码及捆绑资源,由目标程序启动升级;不得通过直接改生产表结构代替源码修复。
97
+ 用户明确要求同版本仅发布 Docker 热修复时,运行 `Microi一键编译发布.sh --docker-only-hotfix` 并选择后端镜像方案。该入口保持当前版本,禁止 NuGet、文档和官方资源数据库发布,同时保留 PlatformRelease、候选源码一致性、混淆后冒烟和镜像门禁。修复应进入本地源码及捆绑资源,由目标程序启动升级;不得通过直接改生产表结构代替源码修复。
59
98
 
60
- 共享源码持续变化时,可在独立目录保存完整候选源码和依赖,以该目录运行同一 Full 与发布脚本。专用测试服务使用独立端口,通过发布脚本变量 `MICROI_RELEASE_BACKEND_PORT`、`MICROI_RELEASE_FRONTEND_PORT` 指定收尾端口(默认仍为 61501、61500);进程管理器仍必须核验 PID、命令行和工作区归属,不得结束原工作区服务。变量仅供发布脚本使用,不进入生产 API 配置。
99
+ 共享源码持续变化时,可在独立目录保存完整候选源码和依赖,以该目录运行同一 PlatformRelease 与发布脚本。专用测试服务使用独立端口,通过发布脚本变量 `MICROI_RELEASE_BACKEND_PORT`、`MICROI_RELEASE_FRONTEND_PORT` 指定收尾端口(默认仍为 61501、61500);进程管理器仍必须核验 PID、命令行和工作区归属,不得结束原工作区服务。变量仅供发布脚本使用,不进入生产 API 配置。
61
100
 
62
- 私有原生规则的静态后端组合必须设置构建专用 `MICROI_RELEASE_COMPOSITION_FILE`,不能把根仓忽略的应用源码当作已经进入 Full 候选。工作区内契约 `schema:1` 固定 `properties/files/directories/artifacts`;四个文件属性 `CustomAfterMicrosoftCommonTargets`、`PrivateRulesProject`、`ApprovedRulesBootstrapSource`、`MicroiCoreProject` 必须与当前 MSBuild 环境属性一致并进入源清单。契约、规则目录、静态审批及项目文件的新增/修改/删除均绑定候选,链接和越界路径拒绝。API 最终 `publish/<规则DLL>.dll` 必须与 `artifacts` 中后台审批的实际 SHA256 一致;不重新签名另一份 DLL 来通过门禁。普通无组合发布与 PC 制品保持兼容,镜像发布以推送命令明确成功为准,默认不追加渠道回读;目标部署和运行验收仍独立执行。详细契约见官网 `getting-started/local-run.md`;这是发行进程参数,不是生产 AppSettings、V8 或 MCP 代码上传入口。
101
+ 私有原生规则的静态后端组合必须设置构建专用 `MICROI_RELEASE_COMPOSITION_FILE`,不能把根仓忽略的应用源码当作已经进入发布候选。工作区内契约 `schema:1` 固定 `properties/files/directories/artifacts`;四个文件属性 `CustomAfterMicrosoftCommonTargets`、`PrivateRulesProject`、`ApprovedRulesBootstrapSource`、`MicroiCoreProject` 必须与当前 MSBuild 环境属性一致并进入源清单。契约、规则目录、静态审批及项目文件的新增/修改/删除均绑定候选,链接和越界路径拒绝。API 最终 `publish/<规则DLL>.dll` 必须与 `artifacts` 中后台审批的实际 SHA256 一致;不重新签名另一份 DLL 来通过门禁。普通无组合发布与 PC 制品保持兼容,镜像发布须推送命令明确成功并回读目标不可变摘要;目标部署和运行验收仍独立执行。详细契约见官网 `getting-started/local-run.md`;这是发行进程参数,不是生产 AppSettings、V8 或 MCP 代码上传入口。
63
102
 
64
- Windows Git Bash 发布锁必须把当前 Shell 的 MSYS PID 经真实 `ps` 的 `WINPID` 映射成 Windows 原生 PID,再以原生 PID 和唯一令牌登记、释放;映射失败或持有者退出立即停止,不借用其它进程。中文旧热修复入口通过 PowerShell UTF-8 命令行与精确工作区路径核验,不能只看标签或因大小写规范化误拒绝已核验入口。API、PC、官网和 Agent 仍各自互斥,实际 Bash 与原生宿主回归必须通过后重新 Full。
103
+ Windows Git Bash 发布锁必须把当前 Shell 的 MSYS PID 经真实 `ps` 的 `WINPID` 映射成 Windows 原生 PID,再以原生 PID 和唯一令牌登记、释放;映射失败或持有者退出立即停止,不借用其它进程。中文旧热修复入口通过 PowerShell UTF-8 命令行与精确工作区路径核验,不能只看标签或因大小写规范化误拒绝已核验入口。API、PC、官网和 Agent 仍各自互斥,实际 Bash 与原生宿主回归必须通过后重新执行所选发布门禁。
65
104
 
66
105
  PowerShell 5/7 进程管理入口同时固定 UTF-8 控制台与管道输出;脚本有 UTF-8 BOM
67
106
  不代表错误流编码正确。用真实子进程强制继承旧代码页,核对非零拒绝状态、完整中文
68
- 诊断和无非法 UTF-8;保留原锁与进程归属断言,再重新 Full。
107
+ 诊断和无非法 UTF-8;保留原锁与进程归属断言,再重新执行所选发布门禁。
69
108
 
70
- macOS 前端构建使用有界 `vm_stat` 探针,根据真实页大小读取空闲页与可回收文件页;匿名非活动页、压缩页和已包含的预读页不叠加。探针失败时回退原生空闲内存,Windows/Linux 保持既有方式;启动余量、95% 暂停与90%恢复及五秒稳定门禁均保留。统计错误应修正探针,正式发布保留内存门禁及共享进程;修复发布逻辑后重新 Full。
109
+ macOS 前端构建使用有界 `vm_stat` 探针,根据真实页大小读取空闲页与可回收文件页;匿名非活动页、压缩页和已包含的预读页不叠加。探针失败时回退原生空闲内存,Windows/Linux 保持既有方式;启动余量、95% 暂停与90%恢复及五秒稳定门禁均保留。统计错误应修正探针,正式发布保留内存门禁及共享进程;修复发布逻辑后重新执行所选发布门禁。
71
110
 
72
- DLL 加密脚本只在 Git Bash、MSYS 或 Cygwin 中转换 Windows 路径,优先使用 `cygpath`;macOS/Linux 必须保留原生绝对路径,不能把 `/Users` 或 `/usr` 误认为盘符。修复时先对隔离的构建副本执行原加密器,核对五个目标 DLL 的实际哈希变化及加密指纹,再由一键脚本重新执行 Full、加密和最终产物冒烟;不得以专项测试替代发布门禁。
111
+ DLL 加密脚本只在 Git Bash、MSYS 或 Cygwin 中转换 Windows 路径,优先使用 `cygpath`;macOS/Linux 必须保留原生绝对路径,不能把 `/Users` 或 `/usr` 误认为盘符。修复时先对隔离的构建副本执行原加密器,核对五个目标 DLL 的实际哈希变化及加密指纹,再由一键脚本重新执行 PlatformRelease、加密和最终产物冒烟;不得以专项测试替代发布门禁。
73
112
 
74
113
  加密脚本被 `source` 引入时只提供函数,不执行发行入口。SQLite 回归使用真实解释器及隔离标准库,Windows 选择 `python`,其它宿主使用 `python3`;不能用假解释器或跳过 SQL 断言。字节契约下的包投影、内联源码以及官方资源目录的全部 JavaScript 接口、表事件和 Hook 模板均按 Git 的 LF 规则检出,不能忽略原始字节差异来通过测试。缺少发行运行产物时,可按同版本包正文的大小与 SHA-256 恢复;明确标记为制品恢复,不能报告为新的源码构建。
75
114
 
76
- 只要检测到闭源项目源码,就必须具备完整的五项目加密链;源码不完整、加密脚本缺失都要硬失败,不能降级为 `HAS_ENCRYPT=false` 的开源模式。一键脚本由 `release-encryption.mjs` 保存五个实际 DLL 的加密前后 SHA-256,并要求每个 DLL 字节改变且匹配原加密器指纹。上传 NuGet 前检查真实 ZIP 中所有闭源 DLL;上传后端 Docker 前从不启动、不联网的临时容器读取实际镜像内五个 DLL,与加密回执逐字节哈希核对。缺回执、明文重编译覆盖、包或镜像中的旧 DLL 均阻止上传;NuGet、Docker 等渠道发布命令明确成功即可报告发布完成,默认不再回读渠道或等待传播;本地检查不能替代实际发布命令,目标部署和业务验收仍独立执行。
115
+ 只要检测到闭源项目源码,就必须具备完整的五项目加密链;源码不完整、加密脚本缺失都要硬失败,不能降级为 `HAS_ENCRYPT=false` 的开源模式。一键脚本由 `release-encryption.mjs` 保存五个实际 DLL 的加密前后 SHA-256,并要求每个 DLL 字节改变且匹配原加密器指纹。上传 NuGet 前检查真实 ZIP 中所有闭源 DLL;上传后端 Docker 前通过 `docker image save` 静态读取镜像层中的五个 DLL,不创建或启动容器,与加密回执逐字节哈希核对。缺回执、明文重编译覆盖、包或镜像中的旧 DLL 均阻止上传;NuGet 等渠道发布命令明确成功可报告该渠道发布完成,不等待传播;Docker 还须回读目标不可变摘要;本地检查不能替代实际发布命令,目标部署和业务验收仍独立执行。
77
116
 
78
- 在线 AI 的 MCP 运行目录必须由已锁定依赖干净安装、编译和裁剪后完整复制。生产命令的符号链接应解析为真实文件并保留执行权限,不能依赖即将清理的临时目录;损坏、越界或循环链接在替换旧运行目录前失败,重新打包清除旧依赖残留。保留制品门禁对符号链接的拒绝规则,专项验证使用同一复制逻辑并核对清理临时目录后命令仍可运行;修复打包逻辑后重新 Full。
117
+ 在线 AI 的 MCP 运行目录必须由已锁定依赖干净安装、编译和裁剪后完整复制。生产命令的符号链接应解析为真实文件并保留执行权限,不能依赖即将清理的临时目录;损坏、越界或循环链接在替换旧运行目录前失败,重新打包清除旧依赖残留。保留制品门禁对符号链接的拒绝规则,专项验证使用同一复制逻辑并核对清理临时目录后命令仍可运行;修复打包逻辑后重新执行所选发布门禁。
79
118
 
80
119
 
81
- 私有原生规则的静态后端组合必须设置构建专用 `MICROI_RELEASE_COMPOSITION_FILE`,不能把根仓忽略的应用源码当作已经进入 Full 候选。工作区内契约 `schema:1` 固定 `properties/files/directories/artifacts`;四个文件属性 `CustomAfterMicrosoftCommonTargets`、`PrivateRulesProject`、`ApprovedRulesBootstrapSource`、`MicroiCoreProject` 必须与当前 MSBuild 环境属性一致并进入源清单。契约、规则目录、静态审批及项目文件的新增/修改/删除均绑定候选,链接和越界路径拒绝。API 最终 `publish/<规则DLL>.dll` 必须与 `artifacts` 中后台审批的实际 SHA256 一致;不重新签名另一份 DLL 来通过门禁。普通无组合发布与 PC 制品保持兼容,镜像发布以推送命令明确成功为准,默认不追加渠道回读;目标部署和运行验收仍独立执行。详细契约见官网 `getting-started/local-run.md`;这是发行进程参数,不是生产 AppSettings、V8 或 MCP 代码上传入口。
120
+ 私有原生规则的静态后端组合必须设置构建专用 `MICROI_RELEASE_COMPOSITION_FILE`,不能把根仓忽略的应用源码当作已经进入发布候选。工作区内契约 `schema:1` 固定 `properties/files/directories/artifacts`;四个文件属性 `CustomAfterMicrosoftCommonTargets`、`PrivateRulesProject`、`ApprovedRulesBootstrapSource`、`MicroiCoreProject` 必须与当前 MSBuild 环境属性一致并进入源清单。契约、规则目录、静态审批及项目文件的新增/修改/删除均绑定候选,链接和越界路径拒绝。API 最终 `publish/<规则DLL>.dll` 必须与 `artifacts` 中后台审批的实际 SHA256 一致;不重新签名另一份 DLL 来通过门禁。普通无组合发布与 PC 制品保持兼容,镜像发布须推送命令明确成功并回读目标不可变摘要;目标部署和运行验收仍独立执行。详细契约见官网 `getting-started/local-run.md`;这是发行进程参数,不是生产 AppSettings、V8 或 MCP 代码上传入口。
82
121
 
83
122
  组合环境只属于发行工具所在工作区;临时测试仓库和其它源码根显式传递自己的环境。不得把主发行环境传入隔离夹具,也不得吞掉显式错误组合;实际 CLI 继续严格验证全部四项属性。
84
123
 
85
- 原生依赖审批在目标 Linux CLR 中验证完整程序集引用链及实际字节哈希。驱动扩展也属于交付依赖:Oracle Core 23.26.300 同时交付同版本 Azure、Kerberos、OCI、ConfigFile、AWS、GCP 六个官方扩展及传递依赖,以 `ProviderDependencyDeliveryTests` 验证真实装载,不连接云服务。缺文件、身份冲突和哈希变化继续失败关闭;先复现并修复包装,再重新 Full 和镜像发布,禁止跳过未执行的依赖或开放 V8/MCP 任意装载。
124
+ 原生依赖审批在目标 Linux CLR 中验证完整程序集引用链及实际字节哈希。驱动扩展也属于交付依赖:Oracle Core 23.26.300 同时交付同版本 Azure、Kerberos、OCI、ConfigFile、AWS、GCP 六个官方扩展及传递依赖,以 `ProviderDependencyDeliveryTests` 验证真实装载,不连接云服务。缺文件、身份冲突和哈希变化继续失败关闭;先复现并修复包装,再重新执行所选发布门禁 和镜像发布,禁止跳过未执行的依赖或开放 V8/MCP 任意装载。
86
125
 
87
126
  包清单不能代替真实程序集引用:Oracle AWS 扩展还引用清单未声明的 AWSSDK.SQS,Dos.ORM 显式交付官方 4.0.100.15 包,并由 NuGet 统一 AWS Core。回归递归检查扩展引用链,仍保留 512 个程序集预算;诊断集中列出缺失项,正式验证继续拒绝缺失和身份冲突。
88
127
 
@@ -94,7 +133,7 @@ System.Drawing.Common 的 .NET 10 支持库引用 System.Formats.Nrbf,Dos.Comm
94
133
  | Windows 传统环境 | IIS + .NET Hosting Bundle + 独立依赖 |
95
134
  | 开发/调试 | 复用健康服务,或启动后端源码/隔离目录中的编译产物 + 前端 Vite;优先共用已授权开发/测试依赖 |
96
135
 
97
- 本地测试遵循 `../workspace-conventions/SKILL.md` 的“本地测试程序与依赖生命周期”:默认复用当前 MCP 对应的 MySQL、Redis、MongoDB、MinIO/OSS;不能按 AI 任务、Full 或双节点测试新建整套 Docker/Compose,也不把临时容器许可作为常规确认问题。确实无法复用时才记录证据并采用最小替代方案。每轮结束精确删除本次自建临时容器和纯测试资源,回读清理结果,既有共享服务保持原状态。
136
+ 本地测试遵循 `../workspace-conventions/SKILL.md` 的依赖生命周期:默认复用 `.microi-local` 选定项目配置对应的 MySQL、Redis、MongoDB 和 SaaS 生效的 MinIO/OSS,启动本机源码或最终产物进程。不能按 AI 任务、完整测试或双节点测试创建 Docker/Compose,也不运行临时 API/官网测试容器。无法复用时先记录具体缺口并修复,普通发布不授予新建容器例外。结束后精确回收自有进程及纯测试资源,回读清理结果,既有共享服务保持原状态。
98
137
 
99
138
  本地 `Microi.Client` 默认读取 `src/config.json` 的 `ApiBaseDev`,也允许在 `#` 前通过 URL 参数
100
139
  临时指定运行目标:
@@ -187,7 +226,7 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
187
226
  - API、PC、官网、Agent 分别使用 `api-release.lock`、`pc-release.lock`、`website-release.lock`、`agent-release.lock`,可并行发布;同类发布互斥。合并发布只取得所选产品的锁,部分取得失败时释放本次已取得的锁。
188
227
  - API 启动前执行 `node Microi.Server/tools/release-lock.mjs assert api <工作区根>`,PC 使用 `assert pc`;官网/Agent 不阻塞二者。旧全局锁仅在真实命令入口和状态目录证明 API 热修复或 Agent 归属后缩小阻塞范围,未知锁仍阻塞,不能删除活跃锁。
189
228
  - Windows 发布前调用 `Microi.Server/tools/Microi.LocalProcessManager.ps1 -Action PrepareRelease -ReleaseScope api|pc|all`。API 仅处理匹配工作区的后端与 Release DLL;PC 仅处理匹配的 Vite;官网不清理二者。禁止按进程名全机清理。
190
- - PC/API 各自保留完整 Full 门禁;Full 的 restore/build/test/package audit 输出统一隔离到本次结果目录 `.net-artifacts`。并行验收使用独立结果目录、测试服务/端口及隔离租户;共享版本与跨产品源码先冻结,测试期间不得修改。资源排队依据为当前并行阶段预算之和与系统余量,不使用单一全局发布窗口。
229
+ - PC/API 普通发布执行 PlatformRelease,Full 仅为显式深度测试;restore/build/test/package audit 输出统一隔离到本次结果目录 `.net-artifacts`。并行验收使用独立结果目录及所需测试服务/端口,普通发布不创建租户;共享版本与跨产品源码先冻结,测试期间不得修改。资源排队依据为当前并行阶段预算之和与系统余量,不使用单一全局发布窗口。
191
230
  - 测试进程的 `MICROI_TEST_REPOSITORY_ROOT` 必须绑定本轮源码工作区;源码定位核对真实项目文件,不能把 SDK 产物中的同名目录当成源码。内存诊断保留子进程隔离,只使用当前 Configuration 和当前输出布局对应的夹具 DLL,缺失即失败,禁止借用旧 Debug 产物。诊断守护器的调用参数与报告路径必须属于同一次尝试,历史报告不可用于本轮放行。
192
231
  - Vite 以相对 `node_modules/vite/bin/vite.js` 启动且父进程退出时,命令行可能没有绝对工作区路径。
193
232
  进程管理器只能把只读回读到的 CWD 精确等于当前 `Microi.Client` 作为补充证据;读取失败、
@@ -202,6 +241,8 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
202
241
 
203
242
  ## 一键发布产物边界与缓存
204
243
 
244
+ - 最终 API 冒烟只临时注入项目配置中的十个基础设施 `AppSettings` 字段,不复制 `DevLoginBypass` 或其它本地节点,不改写用户源配置。成功、失败和可捕获中断都先恢复公共 `appsettings.json` 原始字节,再清理自有 scratch;恢复失败保留恢复证据并停止发布。产物捕获/复用、每次 Docker 构建及 API 镜像上传前均校验公共模板字节与 SHA-256,拒绝环境配置、旧冒烟备份和本地选择文件残留;镜像通过不可变 imageId 静态读取配置,不运行测试容器。不可捕获的强杀/掉电不保证即时恢复,后续门禁仍必须拒绝污染产物。
245
+
205
246
  - 一键脚本的本次构建、pack、冒烟日志和 NuGet 替换临时目录由 `Microi.Server/tools/release-scratch.mjs` 创建在发布结果目录的唯一 `release-scratch-*` 下,`EXIT` 自动收尾;归属清单与 `.cleanup.json` 回执在同级。成功仅留小回执,失败保留清单、原始错误和未清范围。它不删除 Full 报告、已发布制品、源码、共享 `.tmp` 或其它任务目录。执行器在 shell 启动前拒绝时,脚本内检查尚未运行;先定位当前宿主与拒绝阶段,不换工具绕过,也不默认添加 `-Force`、清除属性或修改 ACL。完整规则见工作区规范的“Windows 默认普通删除与策略拒绝排查”。
206
247
 
207
248
  - 需要完整解决方案构建和 NuGet 打包时,先完成一次 Release build;publish 阶段复用已验证产物,禁止先 clean 再重复编译同一项目引用链。
@@ -228,8 +269,8 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
228
269
 
229
270
  - 触发场景:发布产物已经输出 `Now listening` / `Application started` 并可访问,但发布脚本因为等待某句历史中文启动文案而持续到超时,期间运行态日志或 spool 不断写入 `publish/logs`。
230
271
  - 根因:把易变化的日志文本当成服务可用事实源;超时/异常路径没有对临时进程和运行态目录做完整的有界收尾。
231
- - 通用规则:发布冒烟必须启动最终混淆/签名后的产物,确认本次进程仍存活,再以 `/api/Diagnostics/liveness` HTTP 200 判定启动成功;使用专用空闲端口,成功、超时、异常和中断路径都要在有限时间内结束本次进程并清理 publish 内的临时 logs/PDB。版本号已经更新但尚未提交时,重跑默认继续工作区当前版本,不能再次自动递增;当前版本进入 Git HEAD 后才计算下一版本。
232
- - 自动化检查:构造不再输出旧中文文案但 liveness 返回 200 的版本,断言冒烟成功;另覆盖端口占用、进程提前退出和 liveness 超时,断言脚本失败原因准确、进程无残留、`publish/logs` 不存在。再把工作区版本设为高于 HEAD,验证重跑默认版本保持不变。
272
+ - 通用规则:发布冒烟必须启动最终混淆/签名后的产物,确认本次进程仍存活,再以 `/api/Diagnostics/liveness` HTTP 200 判定启动成功;使用专用空闲端口,成功、超时、异常和中断路径都要在有限时间内结束本次进程并清理 publish 内的临时 logs/PDB。新完整发布默认从当前版本递增一次;确认续发同一候选时显式传 `--release-version=x.y.z`,不能依据未提交版本隐式复用。
273
+ - 自动化检查:构造不再输出旧中文文案但 liveness 返回 200 的版本,断言冒烟成功;另覆盖端口占用、进程提前退出和 liveness 超时,断言脚本失败原因准确、进程无残留、`publish/logs` 不存在。再把工作区版本设为高于 HEAD,验证新完整发布仍递增一次、显式续发版本保持不变。
233
274
 
234
275
  ### 复盘:旧租户启动闭包把应用包展示字段当成物理列并反复重启
235
276
 
@@ -240,6 +281,9 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
240
281
 
241
282
  ## 空数据库 SQL 导入回归
242
283
 
284
+ - 官方七种空库发布后逐一记录 ZIP SHA-256/大小并纳入原生公开副本。安装器通过固定 Database 枚举的只读选择器解析当前 NAS 地址,正文先 hub.microi.net、失败再 CDN;NAS 及仍带当前证明的 CDN 必须校验 SHA/大小,不将过期缓存导入为最新版。自定义 ZIP 不改下载来源。
285
+ - 空库初始登录密码只用宿主 CSPRNG 派生的六位随机数字,登录页提示和加密存储使用同一值;AuthSecret 独立保持高熵。不得缩短数据库/Redis/MinIO 凭据或改变恢复库密码。制作任务成功、CDN/NAS 回读和各数据库实际导入分别记录。
286
+
243
287
  - PostgreSQL 导出中的 V8、默认值和注释使用显式 `E'…'` 字符串,同时转义反斜杠、引号、
244
288
  物理换行及控制字符。分别在 `standard_conforming_strings=on/off` 中完整导入,回读代码
245
289
  哈希、长度、空字符串与 NULL;不能把关闭标准字符串模式当作通用修复,也不能删改 V8 代码。
@@ -260,3 +304,5 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
260
304
  - 不在没有备份和恢复演练时执行数据库升级或不可逆迁移。
261
305
  - 不修改 `microi.doc/docs/doc/about/update-log.md`,除非用户明确要求发版。
262
306
  - 撤回或重写版本日志前,必须遵循 `../workspace-conventions/SKILL.md` 的“多对话共享工作区变更归属保护”;当天提交、最新 `HEAD`、相同作者或相关提交信息都不能单独证明改动属于当前对话。
307
+
308
+ - 空库应用清理必须以平台基础表为保护边界:历史业务包误声明 diy_lang、组件、角色等核心字典表时,V8 与原生清理均不得将其作为应用表删除。脱敏发生失败并清理临时库后,新的生成请求须从 Prepare 开始;不得把原 Sanitize 检查点当成已有临时库继续。
@@ -39,6 +39,12 @@
39
39
 
40
40
  ## Docker/Compose
41
41
 
42
+ 恢复库在 API/Worker 启动前必须暂停业务任务与 Quartz 触发器并强回读。MySQL 5.7 的无表 `SELECT` 带 `WHERE` 时显式使用 `FROM DUAL`,兼容 8.0 和空任务表;校验命令非零退出、无标记或仅错误文本包含标记时均停止,区分 SQL 执行失败与状态不一致。中断的新安装先备份编排和数据库,保留原数据目录后恢复,不通过跳过任务暂停门禁续装。
43
+
44
+ 小规格宿主部署翻译与 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 十项启动环境变量。
45
+
46
+ 一键新安装在 Docker 可用后、每个模型启动前检查真实内存:物理低于 7680MiB 或可用低于 2048MiB 时,本次安装固定停用 OCR/LibreTranslate,精确停止已有同名安装容器并将 restart 设为 no,回读必须为 stopped;不删除模型或数据库。唯一活动主租户在核心升级完成后设置 OcrEnabled=0、TranslateProvider=None,保留 URL/Key,写后回读成功才刷新 API。空 Provider 会根据保留 URL 自动回退,不代表禁用。内存充足时模型分别限制 1024/768MiB RAM、1536/1280MiB RAM+Swap、0.75CPU,并保留单线程。小规格新建 MySQL buffer pool 上限 384MiB;无 Swap 时在文件系统、磁盘及备份前提满足后尝试 2GiB Swap,不能覆盖既存文件,也不能将 Swap 计入模型物理内存准入。内存保护已触发时禁止继续做 OCR/翻译真实推理验收;改为验收停止状态、租户开关与核心登录,待资源调整后单独启用和实测。
47
+
42
48
  执行前:
43
49
 
44
50
  1. 固定目标目录和 compose 文件,解析所有 volume 的绝对宿主路径。
@@ -70,7 +76,7 @@ IIS 进程启动不代表 API 可用,仍要检查 readiness 和真实登录路
70
76
 
71
77
  macOS 的一键发布探针通过 `run_with_timeout` 使用 GNU `timeout`、`gtimeout` 或仓库 Node 工具 `Microi.Server/tools/run-with-timeout.mjs`。缺少 GNU 命令不能据此判定 Docker 不健康;超时工具只停止自身创建的探针进程。官网专用选项 6 不发布 DLL/NuGet,后端发布的加密门禁保持有效。
72
78
 
73
- Obfuscar 路径转换只适用于 Git Bash/MSYS/Cygwin。macOS/Linux 的 `/Users`、`/usr` 等绝对路径直接传给工具;Windows 优先 `cygpath`,无该命令时只转换完整盘符根路径。修复后使用隔离副本验证五个 DLL 和指纹,再重新执行一键脚本的 Full 与最终加密产物冒烟。
79
+ Obfuscar 路径转换只适用于 Git Bash/MSYS/Cygwin。macOS/Linux 的 `/Users`、`/usr` 等绝对路径直接传给工具;Windows 优先 `cygpath`,无该命令时只转换完整盘符根路径。修复后使用隔离副本验证五个 DLL 和指纹,再重新执行一键脚本的 PlatformRelease 与最终加密产物冒烟。
74
80
 
75
81
  在线 AI MCP 的生产依赖和命令复制为完整、自足的运行快照,生产命令链接解析为真实文件,保留执行权限;损坏、越界及目录循环链接提前拒绝。临时构建目录清理后命令必须仍能运行,旧依赖不得残留;不放宽原制品门禁。
76
82
 
@@ -81,7 +81,17 @@ V8 函数”或新增、调整官方中文文档时,使用本 Skill。
81
81
  4. 在浏览器遍历全部中文阅读路由(包括 `/doc` 与 `/case`),检查页面类型类、唯一 H1、页面级横向溢出和明显低对比文字;再从五种视觉类型各选代表页,覆盖桌面/移动与亮色/暗色截图。专用站点交互页按自身组件测试与代表截图验收。只有已登记范围全部通过,才可描述为“全站视觉验收完成”。
82
82
  5. 静态脚本、Sass 编译、单元测试、VitePress 构建和浏览器截图是不同证据层。任何一层因资源保护或环境问题跳过,最终必须明确写出,不能用其它层替代。
83
83
 
84
- ## 自动审计能证明什么
84
+ ## 案例、服务与公开指标的证据边界
85
+
86
+ - 从 SaaS 登记整理案例时,只读必要字段并先核对完整分页;登记数、名称去重数、独立客户、付费客户与成功交付数分别定义,不能互相替代。名称不能推断上线、行业成效或客户认可。
87
+ - 客户姓名、租户标识、部署地址、联系信息和业务秘密不进入公开明细;遮挡名称中一个字或发布逐行哈希不等于匿名化。优先使用聚合数据,具名案例和新增截图先确认公开权限并脱敏。
88
+ - 功能、规模和性能分别给出来源、统计日期、目标版本及复核方法;来源未提供的内容写明未核验,不把构建时间当作事实核实时间。没有原始数据时不补造改善比例或认证。
89
+ - 服务地区与联系人采用已确认事实,SSR 正文与结构化数据共用事实源;地区覆盖不自动代表分公司、驻点、认证或统一服务时限。
90
+ - 公开指标工具及方法位于源码工作区 `microi.benchmarks/`(工作区提供时);缺少工具不绕过 MCP 权限或读取整表秘密。公开仓、官网、搜索收录和第三方评价分别验收,不能以本站 HTTP 成功或 AI 索引存在声称排名提升。
91
+ - 机器可读正文从实际构建的公开 SSR 正文生成,排除全站导航、脚本、注释和交互私有数据;与 HTML 使用同一内容源,不另写迎合模型的事实。逐页索引保留规范页面地址、纯文本地址、语言、正文大小和 SHA-256;只有真实来源可支持时才记录修订日期,未知时省略,不以构建日期冒充内容更新。
92
+ - 官网以 HTML 为规范收录页面,纯文本是便于抓取和核对的替代格式;`llms.txt`、HTML 替代链接与正文清单互相一致。发布前验证所有正文入口可生成、内部链接可解析、表格与代码含义保留,并检查账户页、撤回页和非公开内容不进入正文清单。生成完成不能证明搜索引擎已收录或模型已经使用。
93
+
94
+ ## 自动审计的检查范围
85
95
 
86
96
  脚本验证:
87
97
 
@@ -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,错误只在当前容器最多一次回退,真实浏览器首请求与编辑保存另验。
@@ -46,7 +46,7 @@ description: Microi 前端微服务 MicroService 开发与交付指南。用于
46
46
  - `sys_microiservice`:已发布运行时。
47
47
  - `sys_microiservice_page`:页面路由。
48
48
  - 编译后的 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 仍指向目标租户。
49
+ - 当前公开应用的独立体验优先使用可信 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
50
 
51
51
  不能从 `sys_microiservice` 公有产物反推完整源码,也不把大 JS/CSS 长期塞数据库 JSON。
52
52
 
@@ -147,9 +147,20 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
147
147
  - 服务器暂未部署修复且普通应用产物很小时,可把 `StorageMode=db` 与内联 `ContentBase64` 作为短期恢复手段;必须明确记录为临时方案。修复部署后重新流式发布到公有 HDFS,并恢复 `StorageMode=file`。只有上一条满足严格资源策略的受信任平台启动应用允许长期保留小型数据库产物;禁止借此把普通或大体积 JS/CSS 长期放进数据库 JSON。
148
148
  - 子租户发布时,源码、版本资产、回读验签、页面与缓存全部绑定当前 Token 的 `OsClient`;禁止回退到主租户或宿主服务器默认租户。切换前必须由当前 API 节点通过该子租户 HDFS 配置读回每个版本文件并校验大小/SHA-256。
149
149
  - CDN 同一不可变对象返回 200 而 API 稳定入口返回 404 时,先检查 API 读取到的当前租户 `FileServer`(含公有桶路径)和已提交 `ReleasePrefix`,不能把默认域名回退当作恢复。配置读取必须将 dynamic 数据显式转为 object/JObject,再调用扩展方法;缺失或无效配置失败关闭。
150
+ - CDN 刷新先验证当前租户可信 `FileServer` 与已校验路径组成的绝对 HTTP(S) 地址,拒绝 UserInfo、Query、Fragment。只有主机名精确匹配 `static.itdos.com`(不区分大小写)才走官方阿里云刷新并强制 HTTPS,刷新资产与入口的 Authority(主机、端口)必须一致;其它合法 HTTP/HTTPS 域名或 IP 不适用官方刷新,不读取其凭据或提交刷新任务。
151
+ - 私有 HTTP/IP 部署在对象投影通过后仍提示“固定入口缺少 HTTPS 公有文件域名”时,应升级 API 的刷新目标分类逻辑,不要求客户为此修改业务源码或伪造 HTTPS 地址。不适用刷新不等于已执行 purge,也不能跳过对象大小/SHA-256 回读、租户隔离与原 RequestId/finalize 门禁;原任务完成和页面实际可用继续分别验收。
152
+ - 首次 CDN 投影的目标尚不存在时,只有提供商验证的明确 `NoSuchKey` 才允许从已校验版本补写。MinIO/S3 必须实际签名 GET 返回 HTTP 404,并完整读取不超过 8 KiB 的合法 S3 XML;精确 Code 与可选 Key/BucketName 均校验通过。OSS 只接受实际 SDK 服务异常的精确 ErrorCode。HDFS 通过 `DataAppend.StorageReadErrorCode=NoSuchKey` 传递语义,MinIO/S3 同时提供 `StorageReadHttpStatusCode=404`;发布器不得按 Msg、路径或桶名中的词推断。普通代理 404、缺桶、拒绝访问、未知错误及不完整读取仍失败关闭。
153
+ - 旧 API 丢失错误码或仍按诊断文字分类时需升级全部 API 节点。恢复 `RepairRequired / ProjectionPending` 前回读原任务,再保留首次 finalize 的 RequestId、版本、清单哈希与原前置条件重放;禁止手工改状态、删除版本或新建同版本发布。验收必须含 Completed、投影完成、服务/页面登记、稳定/版本入口和资产哈希及真实交互。
150
154
  - `microi-platform-service` 等受信任 DatabaseOnly 平台包以 `sys_microiservice.StorageMode=db / MsUrl=db` 和内联已验签字节为运行事实。安装后的 `PublicPublishPath=micro-app/{AppKey}/{Version}` 可以没有租户前缀;不能仅凭该字段补前缀或强改为 file。普通 file 应用则核对每项 HdfsPath/FilePathName、当前租户 FileServer 与真实对象。
151
155
  - HTML/JS/CSS 被对象存储标为 `application/octet-stream` 时,文件字节可能完全正确。新上传统一设置对象 MIME;运行网关只对已提交资产的空/二进制通用标签按文件路径归一,保留类型兼容、HTML 完整性、大小、哈希及 `nosniff`。需更新全部 API 节点;旧对象的 CDN 直接入口另需修正元数据或正常发布新版本,不能把 API 兼容称为 CDN 已修复。
152
156
 
157
+ ### 复盘:MinIO 首次 CDN 投影停在 HTTP 404
158
+
159
+ - 触发场景:不可变版本资产已校验,首次复制的 CDN 目标尚不存在,发布却停在 `RepairRequired / ProjectionPending`。
160
+ - 根因:可信 HDFS 签名读取将明确的 S3 `NoSuchKey` 丢失为通用 HTTP 404,发布器因无法区分代理或权限故障而拒绝补写。
161
+ - 通用规则:MinIO/S3 验证真实 HTTP 404、完整有界 S3 XML 和对象身份,OSS 验证实际 SDK 的精确错误码;只向发布器传递结构化缺对象码,不扫描诊断文字、路径或桶名。部署全部 API 节点后回读并恢复原任务,不改业务源码或发布状态。
162
+ - 自动化检查:`MicroiHdfsMinioStreamReadTests`、`MicroiHdfsStreamErrorContractTests` 与 `ApplicationCdnCredentialTests` 覆盖 MinIO/S3 成功流、提供商缺对象码、路径/桶名词碰撞、权限/缺桶/代理 404、错误 XML、错误桶/Key、超限正文、取消和超时;完整发布与页面验收继续独立执行。
163
+
153
164
  ### 宿主路由查询参数
154
165
 
155
166
  嵌入微服务的 iframe 地址与宿主地址隔离,不能仅通过子应用 location.hash 读取站点、业务Id等查询参数。菜单宿主下发 microRoute 及 route.query;应用应合并自身白名单参数,保留完整路径和查询参数,并监听宿主数据变化。同一路径的查询参数变化也应刷新业务数据、取消旧请求,主题或尺寸快照不得覆盖应用内部导航。弹窗可从 microRoute 查询串或 dialogData 读取声明参数;独立访问才回退自身hash。
@@ -4,7 +4,7 @@
4
4
  快捷登录和会话协议以 `microi-uniapp-frontend`、`microi-frontend-sdk` 为准;本参考负责
5
5
  把源码、外部服务、后台与正式入口组成一条可回读的交付链,避免只有静态页面。
6
6
 
7
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-022 sha256=748fc4a802457bab760ae24281c3bb27cb70841fe72b61b86f088439236867aa -->
7
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-022 sha256=33bf185e007fab2c8316f090b1f608143deca2e3ff4b010e7577c7f88d751008 -->
8
8
  ## 开发前固定事实源和首版范围
9
9
 
10
10
  - 使用指定 MCP 的实际 Profile,先回读 `ApiBase + OsClient`,不能因为官网发布归主租户就让试用端请求主租户。不同租户用独立浏览器 context,不能只新开标签。
@@ -31,6 +31,7 @@
31
31
 
32
32
  ### 地图必须按产品与终端验证
33
33
 
34
+ - 手动选点必须保留用户确认的 `address + name`,名称已包含在地址中时去重;逆地理编码仅补充行政区与缺失地址,不能用坐标解析的道路/园区地址覆盖具体楼号或点位名。自动定位仅有坐标时仍使用逆解析地址;省市区独立存储时,只去掉详细地址开头的行政区前缀。回归覆盖逆解析成功/失败、选点地址为空或仅含名称、名称重复、取消和连续选点,并执行真实表单回填与提交钩子断言;原生地图真机验收单独记录。
34
35
  - 高德浏览器 JS API 的 ClientKey 与 Web 服务 REST Key 是不同产品,不能互换。H5 按明确运行 `Mode` 接入:`js` 加载官方 JS SDK;`server-static` 可由可信服务端调用官方 REST 静态地图,返回真实图片并配合服务端 POI、逆地理编码和路线。后者是静态地图,不具备交互瓦片的拖动/缩放体验;不能借此绕过供应商产品或商业授权。App/小程序走对应平台地图与原生授权适配器,不能在非 H5 分支执行 `window/document`。
35
36
  - `js` 模式的 JS 安全码或安全代理地址在 SDK 加载前配置,核对当前 SDK 版本、域名允许列表、HTTPS、CORS;所有模式都核对对应产品与商业权限。复制主租户 Key 不保证目标 CDN 域名可用;`INVALID_USER_KEY`、域名拒绝、安全码错误、配额或商业授权错误必须保留供应商阶段与追踪号。
36
37
  - 地图运行配置采用最小投影。浏览器 ClientKey 的公开使用不授权公开 REST Key、短信 Secret 或其它服务密钥;需要保护的 JS 安全配置优先按供应商支持方式通过服务端代理,并限制可信目标,不能接受任意转发 URL。
@@ -28,6 +28,7 @@ description: 已初始化吾码工作区的默认 AI 开发总控入口,用户
28
28
 
29
29
  | 工作内容 | 相关 Skill |
30
30
  |---|---|
31
+ | 吾码平台编译、测试、一键/Docker 发布 | `microi-deployment` 的“普通吾码发布固定流程(30 分钟)”;默认完整入口:版本 +1、NuGet、API/PC Docker、官网、`PlatformRelease`,基础 Microi.Tests、前端 Node 测试、接口与启动/运行冒烟,扩展浏览器测试仅显式追加 `--platform-frontend-tests` 时执行;默认排除付费 AI、客户数据及 SQL Server 专项,不再逐次询问;复用 `.microi-local` 配置,不新建 Docker/租户或安装聊天,不运行 Code/Agent 独立产品测试;独立商城应用/OpenClaw 源码专项归各自入口,平台通用回归保留 |
31
32
  | 需求文档、成熟数据模型、表/字段/索引 | `business-blueprint`、`microi-db-schema`、`microi-form-engine` |
32
33
  | 表单宽度、分组、整行控件与视觉 | `microi-form-layout`、`ui-design` |
33
34
  | 菜单骨架、AI 开发中占位、逐菜单切换、PageTabs、模块展示 | `module-engine`、`v8-menu-buttons` |
@@ -1,56 +1,58 @@
1
1
  # 质量优先的上下文与增量开发
2
- <!-- microi-progressive:chunk id=microi-system-delivery-008 sha256=beffc0924e9b36dca7a57da12a4cecb65ab05e938cb776c295c7fc5d7f736553 -->
3
-
4
- 本规范用于降低重复读取和重复传输,不降低软件质量。准确性、权限、业务完整性和验收优先于 token、耗时和回复长度。摘要只用于发现目标,不能成为未经核实的写入依据。
5
-
6
- ## 按任务确定必需知识
7
-
8
- | 范围 | 必须读取与执行 | 扩大范围的条件 |
9
- |---|---|---|
10
- | 新建完整系统 | 基础入口、总控、标准工作流全文(原八项及菜单先行、经营报表增补)、相关专项 Skills、安全与交付检查 | 任何需求、角色、关系、端或外部服务未覆盖时补齐,不得以预算不足交付缩水系统 |
11
- | 已有系统局部修改 | 基础入口、总控路由、本次领域 Skill、目标当前内容及直接依赖、相关安全规则、影响范围内的回读与回归 | 目标不唯一、关系不清、动态调用、跨表状态、权限、公共组件影响不明时继续检索;不能靠名称相似猜测 |
12
- | 只读解释或诊断 | 基础入口、总控路由、支持结论的相关事实 | 证据不足先补读,不能把文档、缓存、旧会话或摘要冒充当前运行状态 |
13
-
14
- 完整系统不因未出现“完整”二字就降级。对“开发一套系统”等新系统意图,默认按完整系统执行。任务范围判定与帐号身份分开:创始人身份不等于每项客户需求都在修改平台内核,但平台基础能力变更仍执行四项同步和平台回归。
15
-
16
- 每次开工列明实际读取的基础入口、总控、适用参考和专项 Skills;只声称已经读取的内容。首次读取、版本变化或目标不明时扩大读取。同一会话中可复用已完整读取且内容哈希未变化的知识;新会话、压缩后无法确认读取记录或哈希变化时重新读取。
17
-
18
- ## 先发现,再精确读取,再修改
19
-
20
- 1. 确认实际服务器、完整租户坐标、当前身份和业务目标;不得为了减少读取切换到其它连接。
21
- 2. 先获取目录或搜索结果,确认目标 Id、路径、版本与关系。目录摘要、行片段和字段投影不能表示全库、完整文件或完整业务模型。
22
- 3. 修改前读取目标完整语义单元及必要依赖;金额、库存、权限、审批、关联字段和公共组件扩大到后端规则、调用方和跨端回显。仅改文案仍需确认实际按钮、角色条件与运行入口。
23
- 4. 返回 `hasMore`、截断、未知完整性、错误或缺失依赖时继续分页或扩大查询。查无结果不证明资源不存在,必须检查过滤范围与权限。
24
- 5. 按本次精确差异修改,保留其它正确配置;执行前检查当前版本和授权,执行后独立回读,再验证受影响业务和界面。
25
-
26
- 完整新系统先完成可遍历的现有资源盘点与关系审查,避免重复建模;不能只看一页摘要就开始创建。局部修改不重复生成全库示例数据,也不跳过该改动的失败、边界、权限和兼容回归。
27
-
28
- ## 不可变引用与结果证据
29
-
30
- Manifest 正文可以一次提交,后续以同一内容哈希和会话引用执行 plan、dry-run、apply、validate。引用只是传输优化,不是授权票据、全局锁或幂等保证。
31
-
32
- - 引用必须绑定当前服务器、完整租户坐标和身份,设容量与有效期;凭据变化、过期、重启或跨会话引用失败时重传已核对正文。
33
- - 写入仍使用当前真实权限、确认参数、结构与引用校验;不得复用旧验收结论代替当前检查。
34
- - 写入超时、断线或结果未知时先回读,不得换引用或幂等键盲目重试。
35
- - 摘要保留状态、错误、警告、资源标识、版本/哈希、验证结果和完整证据引用;完整回执可按需取回。不能截断 JSON 后把片段作为可执行正文。
36
- - 对权限变化、冲突、部分成功、回滚和未知状态明确区分;失败不能被压缩成成功数量。
37
-
38
- ## 定制应用的最小充分接入
39
-
40
- | 场景 | 读取范围与复用方式 | 必须保留的验收 |
41
- |---|---|---|
42
- | Vue / UniApp 定制前端 | 对应前端、SDK、资源与 UI Skills;现有微服务脚手架、登录、上传和 API 封装 | 真实登录、租户隔离、失败状态、跨端回显、构建和浏览器 |
43
- | 游戏 / Unity / WebGL | 对应应用或 Unity Skill;仅按实际需要接入帐号、存档、排行、房间和支付 | 状态一致性、重连、并发、服务端防伪、设备/GPU 验收边界 |
44
- | 算法工程 | 算法源码、数据契约和可重复样例;平台仅提供需要的数据、权限与任务能力 | 正确性、边界、性能和真实数据分布;不能只验示例 |
45
- | 硬件 / IoT | 实际协议及对应 TCP、HTTP、MQTT Skill,受信配置和模拟器 | 幂等、超时、结果未知、真实设备执行;网络写入成功不等于设备已执行 |
46
-
47
- 平台没有覆盖的能力必须明确实现和验收,不能用通用模板掩盖缺口。脚手架和模拟器减少重复建设,不能替代真实服务或硬件证据。
48
-
49
- ## 计量与验收标准
50
-
51
- 以同模型、同需求、同初始数据和同验收标准比较小修改、定制页面、完整系统。记录真实输入、缓存输入、输出、供应商报告的推理用量(如有)、工具轮数、重复读取、错误重试、耗时和完成率。多 Agent 的用量也计入总量。
52
-
53
- MCP 可以准确统计传输字节和调用次数,不能据此声称供应商 token 或费用。缺少供应商 Usage 时标记未知;字符估算单独标记。缓存命中降低费用或延迟,不等于逻辑 token 消失。外部 Codex/IDE 的历史摘要与供应商缓存由宿主管理,吾码不得宣称已强制控制。
54
-
55
- 评测必须同时检验资源完整、权限/事务/关系正确、局部差异精确和必要回归通过。任何质量退步都不接受;不通过删测试、减少验收或隐瞒失败来展示节省比例。
2
+ <!-- microi-progressive:chunk id=microi-system-delivery-008 sha256=7d4c1226d529de92a79f6dcb277178f3d274738f51ed4b0fa609bb6f39ae9cb0 -->
3
+
4
+ 本规范用于降低重复读取和重复传输,不降低软件质量。准确性、权限、业务完整性和验收优先于 token、耗时和回复长度。摘要只用于发现目标,不能成为未经核实的写入依据。
5
+
6
+ ## 按任务确定必需知识
7
+
8
+ | 范围 | 必须读取与执行 | 扩大范围的条件 |
9
+ |---|---|---|
10
+ | 新建完整系统 | 基础入口、总控、标准工作流全文(原八项及菜单先行、经营报表增补)、相关专项 Skills、安全与交付检查 | 任何需求、角色、关系、端或外部服务未覆盖时补齐,不得以预算不足交付缩水系统 |
11
+ | 已有系统局部修改 | 基础入口、总控路由、本次领域 Skill、目标当前内容及直接依赖、相关安全规则、影响范围内的回读与回归 | 目标不唯一、关系不清、动态调用、跨表状态、权限、公共组件影响不明时继续检索;不能靠名称相似猜测 |
12
+ | 只读解释或诊断 | 基础入口、总控路由、支持结论的相关事实 | 证据不足先补读,不能把文档、缓存、旧会话或摘要冒充当前运行状态 |
13
+
14
+ 完整系统不因未出现“完整”二字就降级。对“开发一套系统”等新系统意图,默认按完整系统执行。任务范围判定与帐号身份分开:创始人身份不等于每项客户需求都在修改平台内核,但平台基础能力变更仍执行四项同步和平台回归。
15
+
16
+ 每次开工列明实际读取的基础入口、总控、适用参考和专项 Skills;只声称已经读取的内容。首次读取、版本变化或目标不明时扩大读取。同一会话中可复用已完整读取且内容哈希未变化的知识;新会话、压缩后无法确认读取记录或哈希变化时重新读取。
17
+
18
+ ## 先发现,再精确读取,再修改
19
+
20
+ 1. 确认实际服务器、完整租户坐标、当前身份和业务目标;不得为了减少读取切换到其它连接。
21
+ 2. 先获取目录或搜索结果,确认目标 Id、路径、版本与关系。目录摘要、行片段和字段投影不能表示全库、完整文件或完整业务模型。
22
+ 3. 修改前读取目标完整语义单元及必要依赖;金额、库存、权限、审批、关联字段和公共组件扩大到后端规则、调用方和跨端回显。仅改文案仍需确认实际按钮、角色条件与运行入口。
23
+ 4. 返回 `hasMore`、截断、未知完整性、错误或缺失依赖时继续分页或扩大查询。查无结果不证明资源不存在,必须检查过滤范围与权限。
24
+ 5. 按本次精确差异修改,保留其它正确配置;执行前检查当前版本和授权,执行后独立回读,再验证受影响业务和界面。
25
+
26
+ 完整新系统先完成可遍历的现有资源盘点与关系审查,避免重复建模;不能只看一页摘要就开始创建。局部修改不重复生成全库示例数据,也不跳过该改动的失败、边界、权限和兼容回归。
27
+
28
+ ## 不可变引用与结果证据
29
+
30
+ Manifest 正文可以一次提交,后续以同一内容哈希和会话引用执行 plan、dry-run、apply、validate。引用只是传输优化,不是授权票据、全局锁或幂等保证。
31
+
32
+ - 引用必须绑定当前服务器、完整租户坐标和身份,设容量与有效期;凭据变化、过期、重启或跨会话引用失败时重传已核对正文。
33
+ - 写入仍使用当前真实权限、确认参数、结构与引用校验;不得复用旧验收结论代替当前检查。
34
+ - 写入超时、断线或结果未知时先回读,不得换引用或幂等键盲目重试。
35
+ - 摘要保留状态、错误、警告、资源标识、版本/哈希、验证结果和完整证据引用;完整回执可按需取回。不能截断 JSON 后把片段作为可执行正文。
36
+ - 对权限变化、冲突、部分成功、回滚和未知状态明确区分;失败不能被压缩成成功数量。
37
+ - Manifest 的 `roleName`、`moduleNames` 必须唯一指向本次声明;现有资源使用当前租户回读的 Id。显式名称解析失败不得回退管理员或丢弃菜单;整批权限 Id 解析完成后才执行第一笔权限写入。资源保存成功但缺 Id 时停止并回读已完成步骤,不声称跨资源已回滚。
38
+ - 系统验收必须同时满足 `Code=1`、布尔 `Data.Passed=true`,且 `Errors` 缺省或为空数组。缺失、非布尔或矛盾的回包均不通过,保留原始错误供诊断;不能用 HTTP 成功、JSON 可解析或单项回读补成整体验收通过。
39
+
40
+ ## 定制应用的最小充分接入
41
+
42
+ | 场景 | 读取范围与复用方式 | 必须保留的验收 |
43
+ |---|---|---|
44
+ | Vue / UniApp 定制前端 | 对应前端、SDK、资源与 UI Skills;现有微服务脚手架、登录、上传和 API 封装 | 真实登录、租户隔离、失败状态、跨端回显、构建和浏览器 |
45
+ | 游戏 / Unity / WebGL | 对应应用或 Unity Skill;仅按实际需要接入帐号、存档、排行、房间和支付 | 状态一致性、重连、并发、服务端防伪、设备/GPU 验收边界 |
46
+ | 算法工程 | 算法源码、数据契约和可重复样例;平台仅提供需要的数据、权限与任务能力 | 正确性、边界、性能和真实数据分布;不能只验示例 |
47
+ | 硬件 / IoT | 实际协议及对应 TCP、HTTP、MQTT Skill,受信配置和模拟器 | 幂等、超时、结果未知、真实设备执行;网络写入成功不等于设备已执行 |
48
+
49
+ 平台没有覆盖的能力必须明确实现和验收,不能用通用模板掩盖缺口。脚手架和模拟器减少重复建设,不能替代真实服务或硬件证据。
50
+
51
+ ## 计量与验收标准
52
+
53
+ 以同模型、同需求、同初始数据和同验收标准比较小修改、定制页面、完整系统。记录真实输入、缓存输入、输出、供应商报告的推理用量(如有)、工具轮数、重复读取、错误重试、耗时和完成率。多 Agent 的用量也计入总量。
54
+
55
+ MCP 可以准确统计传输字节和调用次数,不能据此声称供应商 token 或费用。缺少供应商 Usage 时标记未知;字符估算单独标记。缓存命中降低费用或延迟,不等于逻辑 token 消失。外部 Codex/IDE 的历史摘要与供应商缓存由宿主管理,吾码不得宣称已强制控制。
56
+
57
+ 评测必须同时检验资源完整、权限/事务/关系正确、局部差异精确和必要回归通过。任何质量退步都不接受;不通过删测试、减少验收或隐瞒失败来展示节省比例。
56
58
  <!-- /microi-progressive:chunk -->
@@ -6,16 +6,20 @@
6
6
 
7
7
  临时文件回归必须调用真实 Full `finally` 与发布 `EXIT` 收尾,分别验证成功、原始失败、可捕获中断及清理失败;不能仅断言源码有 `finally`。覆盖祖先/子项链接、Git 标记、已有目录、空格及方括号路径、受保护属性与独占文件锁,断言保护项字节不变、普通删除不传 `-Force`、失败不自动强制重试、回执可定位残留。测试异常与清理异常同时发生时保留原始异常,发布锁仍释放;平台进程被硬杀不能假称已完成收尾。用例位于 `Microi.Tests/ReleaseGate/test-artifact-cleanup.test.mjs` 与 `release-scratch.test.mjs`,不为这些文件生命周期回归启动数据库或 Docker 容器。
8
8
 
9
- <!-- microi-progressive:chunk id=microi-system-delivery-006 sha256=dee4ef7027b49b46a92f4b2bbd88d82997f9c992351e5d599ba6d38a03267258 -->
9
+ <!-- microi-progressive:chunk id=microi-system-delivery-006 sha256=30d24447c0ee767e09df1fb2ecb91b146da5afc0a100dcb2c5ba310b27bd9f7d -->
10
10
  ## 自动化测试必须覆盖的坑
11
11
 
12
12
  ### 后端统一测试与发布门禁
13
13
 
14
+ 完整发布的步骤与耗时目标以 [部署 Skill 的固定流程](../../microi-deployment/SKILL.md#普通吾码发布固定流程30-分钟) 为准。默认版本 +1、NuGet、API/PC Docker 和官网全部发布;`PlatformRelease` 执行常规 Microi.Tests(平台单元/组件,不自动追加 Full 专项)、吾码前端通用 Node 测试、真实接口检查与最终加密产物启动/运行冒烟;扩展浏览器验收仅在显式传入 `--platform-frontend-tests` 时追加。真实付费 AI、鸿地/JUNCHI、XJY 等指定客户数据专项和 SQL Server 等独立提供商专项默认不纳入,不再逐次询问;只有用户另行明确要求专项时才执行,回执逐项列为“不适用/未执行”,不能冒充通过。独立 Code/Agent 测试不属于此范围。1800 秒是共享耗时目标,超出时记录并继续,不仅因耗时超标终止。默认读取 `.microi-local` 复用现有项目依赖,不创建本地 Docker 测试环境、不安装聊天应用或新建租户;需要已授权测试夹具但缺失时准确列出并阻断完整成功,不能静默跳过。
15
+
16
+ 发布入口回归须验证:遗留桌面 Node 配置不影响 `PlatformRelease`;新租户准入、聊天应用安装及 Code/Agent 测试入口均不触发;平台测试失败/零用例/跳过仍阻止发布;新推送也必须核对远端 digest,回读失败或不一致不能写成功;超过 30 分钟后仍执行当前及后续发布命令、正常成功仍返回成功并记录超标,真实失败或取消仍非零。使用隔离命令夹具覆盖这些行为,不为验证发布流程启动租户或安装应用。
17
+
14
18
  - 官方或社区独立业务应用、游戏和客户项目在应用自己的 `tests/` 或独立测试工程维护回归,由应用自己的测试及发布入口执行;不得通过直接放文件、转调包装或自动扫描加入平台 Quick/Full。官方商城发布不使业务应用变为平台内置能力。平台 SDK、商城协议、安装器及通用缺陷的最小回归仍由平台负责。
15
19
 
16
20
  - 每个平台新功能或 Bug 修复必须提供对应回归用例;平台 C# 进入 `Microi.Tests`,平台前端与内置资源/V8 测试进入平台 Node 自动发现范围。修复先保留失败证据,再跑成功、边界、异常、权限及旧格式兼容用例;不能仅添加字符串存在断言替代行为测试。
17
21
  - `run-node-regressions.mjs` 自动发现 `Microi.Tests`、`OfficialApplications/Resource`、`Microi.Client/tests` 的确定性测试。新文件无法分类即失败;Playwright 用例必须走真实浏览器入口,不能用 Node 执行后把跳过当通过。所有计数需回读,0 用例、失败、取消、skipped、todo 均拒绝发布。
18
- - 仅推送模式也必须取得发布锁并执行 Full。源码候选哈希、构建上下文哈希与 `release-artifact.mjs` 回执必须一致,且每个 Docker push 前再验证;无回执的历史产物不允许上传。文档专用模式不运行无关后端业务测试。
22
+ - 普通吾码发布(含仅推送模式)必须取得所选产品发布锁并执行 PlatformRelease:平台自动化、编译、加密产物冒烟、Docker 推送及远端摘要回读,以 30 分钟为可度量预算,超时如实记未达标。普通发布不运行 Microi Code/Agent 测试,不新建租户或安装聊天应用;Full 保留为显式独立深度测试。源码候选哈希、构建上下文哈希与 `release-artifact.mjs` 回执必须一致,且每个 Docker push 前再验证;无回执的历史产物不允许上传。文档专用模式不运行无关后端业务测试。
19
23
  - 测试评审按身份/权限、多租户隔离、CRUD/事务、V8 同步异步与 `return/V8.Result`、存储安全、缓存/任务幂等、升级回滚、应用包幂等、浏览器登录/目标路由、发布脚本失败关闭分类盘点。新增能力补所在分类,不承诺一轮测试覆盖所有未知业务。
20
24
 
21
25
  - 吾码后端统一测试入口是 `Microi.Server/Microi.Tests/Microi.Tests.csproj`,
@@ -23,12 +27,12 @@
23
27
  - 日常源码验证运行
24
28
  `Microi.Server/Microi.Tests/run-tests.ps1 -Mode Quick`。Quick 只做
25
29
  单元/组件回归,不连接远端、不写数据库,不能称为“全量生产验收”。
26
- - 发布 API 前运行 `-Mode Full`。默认提供隔离测试租户、专用测试表、
30
+ - 普通 API 发布运行 `-Mode PlatformRelease`。只有明确选择 Full 深度测试时才运行 `-Mode Full`,并提供隔离测试租户、专用测试表、
27
31
  测试 ApiEngine、测试 Token,并显式设置
28
32
  `MICROI_TEST_ALLOW_WRITES=YES`。只有用户明确授权时才可对真实租户执行;
29
33
  真实租户默认只做登录和只读烟测,写入必须限定到名称/说明明确为自动化
30
34
  测试用途的专用表,并使用唯一前缀、`finally` 清理和清理回读。
31
- - Full 的本地程序与依赖按 `../../workspace-conventions/SKILL.md` 的“本地测试程序与依赖生命周期”执行:默认复用当前 MCP 对应的 MySQL、Redis、MongoDB、MinIO/OSS 和健康本地源码程序或隔离编译产物,以租户、数据库或命名空间隔离;不按任务创建整套 Docker/Compose,不例行询问临时容器许可。本机没有容器或旧夹具已清理时,仍先核实 MCP 的实际依赖。确实不能复用才记录证据并采用最小替代方案。每轮成功、失败、取消或资源不足退出时,结束自有进程,精确删除本次临时容器及纯测试资源,并回读进程、端口、容器和测试命名空间;既有共享服务保持原状。这些要求不减少选定 Full 矩阵的用例、断言或发布门禁。
35
+ - Full 的本地程序与依赖按 `../../workspace-conventions/SKILL.md` 的“本地测试程序与依赖生命周期”执行:默认复用当前 MCP 对应的 MySQL、Redis、MongoDB、MinIO/OSS 和健康本地源码程序或隔离编译产物,以租户、数据库或命名空间隔离;不按任务创建整套 Docker/Compose,不例行询问临时容器许可。本机没有容器或旧夹具已清理时,仍先核实 MCP 的实际依赖。确实不能复用才记录证据并采用最小替代方案。每轮成功、失败、取消或资源不足退出时,结束自有进程,精确删除本次临时容器及纯测试资源,并回读进程、端口、容器和测试命名空间;既有共享服务保持原状。这些要求不减少所选模式的用例、断言或发布门禁;普通 PlatformRelease 不触发新租户准入和聊天应用安装。
32
36
  - Full 至少覆盖完整 Release 构建、FormEngine 单条/批量/按条件 CRUD、
33
37
  查询和计数、ApiEngine GET/JSON POST、API 实际启动与健康检查、真实登录、
34
38
  匿名系统配置脱敏、清理回读、NuGet 漏洞/弃用审计。NuGet 全面升级后不能
@@ -47,7 +51,7 @@
47
51
 
48
52
  ### 按指定 MCP 选择发布测试矩阵
49
53
 
50
- 测试范围以 `workspace-conventions/SKILL.md` 的“平台回归与独立应用测试归属”为准。常规发布先核实用户指定的 Profile、ApiBase、OsClient 和实际依赖,再冻结本次必测清单;不能从本机恰好存在的连接或历史 Full 清单推导额外兼容矩阵。
54
+ 测试范围以 `workspace-conventions/SKILL.md` 的“平台回归与独立应用测试归属”为准。本次修复或显式 Full 需要真实依赖时,先核实用户指定的 Profile、ApiBase、OsClient 和实际依赖,再冻结专项必测清单;普通 PlatformRelease 不默认扩展为这些深度集成测试;不能从本机恰好存在的连接或历史 Full 清单推导额外兼容矩阵。
51
55
 
52
56
  | 依赖 | 常规发布范围 | 验收依据 |
53
57
  |---|---|---|