@microi.net/cli 6.1.0 → 6.1.3

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 (121) 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/.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 +1 -1
  9. package/scripts/mcp-server.js +108 -106
  10. package/scripts/microi-skills.meta.json +312 -312
  11. package/skills/.microi-skills-version.json +2 -2
  12. package/skills/.progressive-disclosure-manifest.json +42 -42
  13. package/skills/README.md +287 -287
  14. package/skills/ai-engine/SKILL.md +273 -273
  15. package/skills/ai-engine/references/ai-employees.md +48 -48
  16. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  17. package/skills/app-store/SKILL.md +531 -531
  18. package/skills/business-blueprint/SKILL.md +193 -193
  19. package/skills/datasource-engine/SKILL.md +93 -93
  20. package/skills/dos-orm/SKILL.md +105 -105
  21. package/skills/dos-orm/references/api-reference.md +229 -229
  22. package/skills/email-engine/SKILL.md +81 -81
  23. package/skills/email-engine/references/v8-email.md +34 -34
  24. package/skills/job-engine/SKILL.md +176 -176
  25. package/skills/message-notification/SKILL.md +156 -156
  26. package/skills/message-notification/references/contracts.md +102 -102
  27. package/skills/microi/SKILL.md +14 -14
  28. package/skills/microi-ai-application/SKILL.md +115 -115
  29. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  30. package/skills/microi-client-frontend/SKILL.md +19 -19
  31. package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +10 -10
  32. package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +10 -10
  33. package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +10 -10
  34. package/skills/microi-codex/SKILL.md +130 -130
  35. package/skills/microi-codex-installer/SKILL.md +233 -233
  36. package/skills/microi-datasource-mapping/SKILL.md +131 -122
  37. package/skills/microi-db-schema/SKILL.md +175 -175
  38. package/skills/microi-db-schema/references/core-tables.md +695 -695
  39. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  40. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  41. package/skills/microi-db-schema/references/schema.md +646 -646
  42. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  43. package/skills/microi-deployment/SKILL.md +260 -260
  44. package/skills/microi-deployment/references/deployment-matrix.md +112 -109
  45. package/skills/microi-docs-coverage/SKILL.md +133 -133
  46. package/skills/microi-docs-coverage/references/capability-map.md +91 -91
  47. package/skills/microi-form-engine/SKILL.md +338 -338
  48. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  49. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  50. package/skills/microi-left-right-layout/SKILL.md +141 -141
  51. package/skills/microi-microservice/SKILL.md +2 -1
  52. package/skills/microi-microservice/references/runtime-delivery.md +282 -282
  53. package/skills/microi-solution-quotation/SKILL.md +78 -78
  54. package/skills/microi-sso/SKILL.md +102 -102
  55. package/skills/microi-sso/references/acceptance.md +51 -51
  56. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  57. package/skills/microi-sso/references/inbound.md +53 -53
  58. package/skills/microi-sso/references/outbound.md +43 -43
  59. package/skills/microi-system-delivery/SKILL.md +115 -115
  60. package/skills/microi-system-delivery/references/context-quality.md +56 -56
  61. 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 -11
  62. 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 +12 -12
  63. 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 +69 -69
  64. package/skills/microi-uniapp-frontend/SKILL.md +4 -1
  65. package/skills/module-engine/SKILL.md +297 -297
  66. package/skills/module-engine/references/module-config.md +204 -204
  67. package/skills/ocr-engine/SKILL.md +113 -113
  68. package/skills/page-engine/SKILL.md +24 -24
  69. package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +10 -10
  70. package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +12 -12
  71. package/skills/performance-testing/SKILL.md +227 -227
  72. package/skills/playwright-e2e/SKILL.md +2 -0
  73. package/skills/print-engine/SKILL.md +259 -259
  74. package/skills/production-readonly-audit/SKILL.md +41 -41
  75. package/skills/report-engine/SKILL.md +83 -83
  76. package/skills/search-engine/SKILL.md +75 -75
  77. package/skills/spider-engine/SKILL.md +190 -190
  78. package/skills/system-observability/SKILL.md +264 -264
  79. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  80. package/skills/translate-engine/SKILL.md +140 -140
  81. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  82. package/skills/ui-design/references/design-pattern-library.md +184 -184
  83. package/skills/ui-design/references/mci-design-contract.md +163 -163
  84. package/skills/ui-design/references/motion-and-media.md +78 -78
  85. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  86. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  87. package/skills/unity-integration/SKILL.md +178 -178
  88. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  89. package/skills/unity-integration/references/sdk-api.md +82 -82
  90. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  91. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  92. package/skills/v8-api-config/SKILL.md +403 -400
  93. package/skills/v8-cache-pattern/SKILL.md +320 -320
  94. package/skills/v8-debugging/SKILL.md +284 -284
  95. package/skills/v8-explorer-tree/SKILL.md +228 -228
  96. package/skills/v8-file-upload/references/cdn-alias-repair.md +13 -13
  97. package/skills/v8-formengine-http/SKILL.md +238 -238
  98. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  99. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  100. package/skills/v8-image-processing/SKILL.md +190 -190
  101. package/skills/v8-image-processing/references/api-reference.md +623 -623
  102. package/skills/v8-mongodb/SKILL.md +201 -201
  103. package/skills/v8-mq-mqtt/references/mqtt-production.md +352 -352
  104. package/skills/v8-saas-multi-tenant/SKILL.md +10 -0
  105. package/skills/v8-security/SKILL.md +2 -0
  106. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +9 -3
  107. package/skills/v8-sql-query/SKILL.md +302 -302
  108. package/skills/v8-tcp-integration/SKILL.md +225 -158
  109. package/skills/v8-template-engine/SKILL.md +167 -167
  110. package/skills/v8-utilities/SKILL.md +105 -104
  111. package/skills/v8-utilities/references/client-api-index.md +143 -143
  112. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  113. package/skills/v8-utilities/references/server-api-index.md +189 -188
  114. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  115. package/skills/vision-engine/SKILL.md +160 -160
  116. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  117. package/skills/workspace-conventions/SKILL.md +6 -0
  118. 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 +32 -32
  119. 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 +34 -34
  120. 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 +6 -6
  121. 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 +188 -188
@@ -1,12 +1,12 @@
1
- # microi-system-delivery 详细参考 2
2
-
3
- > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
-
5
- ## 自动清理入口回归增补
6
-
7
- 临时文件回归必须调用真实 Full `finally` 与发布 `EXIT` 收尾,分别验证成功、原始失败、可捕获中断及清理失败;不能仅断言源码有 `finally`。覆盖祖先/子项链接、Git 标记、已有目录、空格及方括号路径、受保护属性与独占文件锁,断言保护项字节不变、普通删除不传 `-Force`、失败不自动强制重试、回执可定位残留。测试异常与清理异常同时发生时保留原始异常,发布锁仍释放;平台进程被硬杀不能假称已完成收尾。用例位于 `Microi.Tests/ReleaseGate/test-artifact-cleanup.test.mjs` 与 `release-scratch.test.mjs`,不为这些文件生命周期回归启动数据库或 Docker 容器。
8
-
9
- <!-- microi-progressive:chunk id=microi-system-delivery-006 sha256=dee4ef7027b49b46a92f4b2bbd88d82997f9c992351e5d599ba6d38a03267258 -->
1
+ # microi-system-delivery 详细参考 2
2
+
3
+ > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
+
5
+ ## 自动清理入口回归增补
6
+
7
+ 临时文件回归必须调用真实 Full `finally` 与发布 `EXIT` 收尾,分别验证成功、原始失败、可捕获中断及清理失败;不能仅断言源码有 `finally`。覆盖祖先/子项链接、Git 标记、已有目录、空格及方括号路径、受保护属性与独占文件锁,断言保护项字节不变、普通删除不传 `-Force`、失败不自动强制重试、回执可定位残留。测试异常与清理异常同时发生时保留原始异常,发布锁仍释放;平台进程被硬杀不能假称已完成收尾。用例位于 `Microi.Tests/ReleaseGate/test-artifact-cleanup.test.mjs` 与 `release-scratch.test.mjs`,不为这些文件生命周期回归启动数据库或 Docker 容器。
8
+
9
+ <!-- microi-progressive:chunk id=microi-system-delivery-006 sha256=dee4ef7027b49b46a92f4b2bbd88d82997f9c992351e5d599ba6d38a03267258 -->
10
10
  ## 自动化测试必须覆盖的坑
11
11
 
12
12
  ### 后端统一测试与发布门禁
@@ -155,8 +155,8 @@
155
155
  - 团队/分润人数统计必须明确资格口径,例如是否只统计已认证、已激活、有效状态用户。若业务规则要求认证门槛,未认证小号不得计入直推、间推、团队总人数、奖励门槛或入账门槛。
156
156
  - 每次修复资金/资产业务规则后,必须同步更新项目蓝图/方案文档中的触发点、计算公式、字段口径和验收方式,不能只改代码或只在对话里说明。
157
157
 
158
- <!-- /microi-progressive:chunk -->
159
- <!-- microi-progressive:chunk id=microi-system-delivery-007 sha256=67fa060b6520a80e41818ac0974c0b38ff3171c97a1c558a01667b854865fa7a -->
158
+ <!-- /microi-progressive:chunk -->
159
+ <!-- microi-progressive:chunk id=microi-system-delivery-007 sha256=67fa060b6520a80e41818ac0974c0b38ff3171c97a1c558a01667b854865fa7a -->
160
160
  ## 复盘记录格式
161
161
 
162
162
  每次用户手工测出问题,修复后都要把问题写入对应通用 Skill,格式如下:
@@ -238,4 +238,4 @@
238
238
  - 根因:ASP.NET Core 运行时从 `Microsoft.AspNetCore.App` / `Microsoft.NETCore.App` 共享框架加载程序集,这些 DLL 默认不复制到 framework-dependent 的发布目录;Obfuscar 是离线元数据处理器,只搜索 `InPath` 时无法解析新增基类。同时,插件直接使用的 NuGet API 若只由其它项目传递带入,项目依赖契约也不完整。
239
239
  - 通用规则:项目直接使用的包必须在自身 `.csproj` 声明直接 `PackageReference`,但不能把“补 NuGet 引用”误当作 Obfuscar 搜索路径修复。混淆脚本应从发布目录的 `runtimeconfig.json` 读取目标 .NET 主版本,再从 `dotnet --list-runtimes` 动态选择同主版本的最新 `Microsoft.AspNetCore.App` 和 `Microsoft.NETCore.App` 目录,生成绝对路径 `AssemblySearchPath`;禁止硬编码补丁版本,也不要为了混淆把共享框架 DLL 强行复制进最终发布目录。错误提示应保留 Obfuscar 的真实依赖解析错误,不能统一误报“工具未安装”。
240
240
  - 自动化检查:使用实际 Git Bash 执行脚本语法检查;定向构建插件并检查 nupkg 明确包含直接依赖;对全部受保护 DLL 执行混淆并验证哈希变化;最后必须启动混淆后的发布目录,断言插件注入、平台初始化和 Kestrel 监听成功,且日志不存在 `FileNotFoundException`、`TypeLoadException`、`Unable to resolve dependency` 或 `Could not load file or assembly`。
241
- <!-- /microi-progressive:chunk -->
241
+ <!-- /microi-progressive:chunk -->
@@ -1,71 +1,71 @@
1
- # 安全与跨端验收
2
-
3
- > 原规则按适用范围无损迁移;触发对应工作时必须完整读取相关章节。
4
-
5
- <!-- microi-progressive:chunk id=microi-system-delivery-002 sha256=adeb9e4ec4beadf3b7ba33325e860b378b81f6d7e95b25879b64ca4ee1c91987 -->
6
- ## 平台安全与存量兼容验收(强制)
7
-
8
- AI 零代码交付不能只验证管理员帐号和页面能打开。任何涉及 FormEngine、菜单、角色、子表、文件、SaaS 或登录协议的交付,都必须按以下服务端边界设计和验收:
9
-
10
- ### FormEngine 混合授权
11
-
12
- - Token 只完成身份认证,不是任意表的访问凭证。浏览器、UniApp、SDK 等外部请求必须继续校验表、菜单、角色、操作权限和数据范围。
13
- - 显式 `_SysMenuId` / `ModuleEngineKey` 进入精确菜单校验;伪造、传错或借用其它表菜单时失败关闭,不能退回兼容推断。
14
- - 为兼容存量前端 V8,无菜单请求由后端从当前用户真正拥有的菜单授权快照中推断目标表权限。没有候选菜单、范围无法安全合并或解析失败时失败关闭;不要要求所有历史项目一次性补 `_SysMenuId`。
15
- - 标准 PC facade 只给当前菜单绑定的当前表注入菜单 Id,跨表调用不借用主表菜单。没有菜单入口的 SDK/定制页才使用最小【高级表权限】。
16
- - 后端接口引擎、后端表单 V8 和平台内部调用由服务端建立可信上下文,不要求 `_SysMenuId`;客户端伪造 `_TrustedServerInvocation` 或 `_InvokeType:'Server'` 不能获得信任。
17
- - `TableChild` 使用父记录范围内委托:验证父菜单、父表字段配置、子菜单、父记录数据范围和外键,并由服务端强制注入外键。隐藏子菜单不要求存量角色逐个补权限。
18
- - 菜单 `SqlWhere` / `SqlJoin` 只约束列表、计数、导出等集合查询;单行详情只校验同表菜单访问权。主表写入由 `Add` / `Edit` / `Del` / `Import` 专项权限控制,不把查询范围追加到写入 SQL,也不因查询 Join 拒绝。行级写业务限制放在后端表单 V8 或专用接口引擎。
19
-
20
- ### 保护表、控制面与缓存
21
-
22
- - SaaS、接口引擎、表/字段、菜单角色、用户、任务、数据源、MQ/MQTT、页面、打印、工作流、数据库、应用商城、AI 与安全审计等保护表,普通客户端 `Level < 9999` 硬拒绝;菜单或表权限不能覆盖。
23
- - 创建 V8、接口引擎、任务、数据源和 Redis 管理等控制面 API 继续要求 `Level >= 9999`。不能只靠前端隐藏菜单。
24
- - 权限缓存使用按 `OsClient` 隔离的共享 Redis `epoch`、用户快照、短 TTL L1/L2。用户/角色/菜单/权限变化后提升 `epoch`;验收至少使用两个节点确认无需清 Redis或重启即可生效。
25
- - Upgrade15 只清理普通角色的保护表直接授权,不能删除正常业务菜单权限。
26
-
27
- ### 上传、私有文件与 SaaS
28
-
29
- - 上传业务默认值为 100 MB/文件、200 MB/次、10 文件、2 GB/帐号/日、20 GB/租户/日。有效值只按当前租户 `sys_osclients` → 代码安全默认值解析,租户可以提高或降低业务默认值;不得为上传开关、额度或硬上限新增 API 环境变量或 `appsettings` 节点。最终仍受代码内不可突破的灾难保护、HTTP/Multipart/Form 和反向代理上限约束。共享 Redis 原子预留,Redis 故障失败关闭。
30
- - 无字段上下文的普通交互式上传默认私有桶,一级安全目录为 `file`、`img`、`avatar`、`editor`;可由管理员在普通 `sys_config.HdfsUploadRules` 按真实角色授权业务目录与公有权限。通配符必须有界并先校验实际路径,保留目录与跨租户不能放行。标准表单仍按权威字段配置执行。可信后端 V8 仍受全局文件大小硬上限。
31
- - 普通客户端私有文件签名必须提交 `FormEngineKey`、`FormDataId`、`FieldId`、`SysMenuId` 并验证记录字段真实引用;不能把后端 `V8.Method.GetPrivateFileUrl({FilePathName})` 的可信调用方式照搬到浏览器。
32
- - Upgrade16 六个上传字段全部可空,空值保持老租户兼容;升级后回读字段元数据、租户值并刷新 SaaS 缓存。
33
- - `V8.OsClientModel` / `V8.SysConfig` 只使用脱敏副本,不返回整个对象。新租户不能复制主租户整条 `sys_osclients`;数据库、认证、Redis、存储、MQ/MQTT、搜索凭据必须独立创建或由服务端托管。
34
- - Redis 管理器只允许超级管理员使用当前租户或已保存连接;匿名/temporary 任意 Host 连接必须拒绝,MCP 写操作必须 `confirmExecution`,禁止传递 Redis 密码。
35
-
36
- ### 网络、登录和发布兼容
37
-
38
- - `CorsAllowOrigins` 和全局 CORS 来源都为空时默认允许任意来源;配置后才按精确来源/通配符收紧。CORS 不是鉴权边界。
39
- - 严格 SSRF 默认关闭,未配置时不得拒绝存量非 HTTP(S)、URL 凭据、私网、云元数据和重定向调用;显式启用后才执行严格拦截与精确主机白名单。
40
- - 登录 RSA 仅避免密码在请求体直接显示,HTTPS 才是安全边界。必须保留历史 RSA fallback,专属公私钥成对切换,不能因删除旧常量造成所有客户无法登录。
41
- - 登录传 `_ClientType`,请求携带稳定 `did`,每次响应接收 `authorization`。多标签续签 single-flight;`TokenReplaced` 先检查新 Token,旧响应不能清掉新登录态。
42
- - 安全升级不得删除私有子 Git 的 `Microi.Server/Microi.net/License/keys/`。授权签名资产与登录 RSA 用途不同,禁止以安全清理为由混删。
43
- - 不得修改默认 CORS/SSRF/RSA 行为后只用新装环境验收;必须覆盖旧前端、历史 V8、滚动升级和至少两个节点。
44
-
45
- ### 安全自动化最低断言
46
-
47
- 1. 普通角色保护表读写、伪造菜单、伪造可信标记均失败。
48
- 2. 真实菜单、历史无菜单推断和父记录范围内 TableChild 均成功,跨父记录失败。
49
- 3. 查询范围在列表、计数、导出中生效;详情按同表菜单访问权成功;有写权限的单表/Join 模块写入成功,无写权限失败,后端 V8 行级业务校验可回滚。
50
- 4. 节点 A 改权限后节点 B 无需重启生效。
51
- 5. 上传大小/数量/双日额度、多节点并发和 Redis 故障行为正确。
52
- 6. 私有文件跨菜单/记录/字段失败,授权访问成功,匿名失败。
53
- 7. CORS 空配置兼容、配置后收紧;SSRF 默认兼容、严格模式拦截。
54
- 8. 历史 RSA fallback 和专属匹配密钥均可登录;并发续签不反复退出。
55
- 9. SaaS 脱敏投影不包含基础设施密钥,Redis anonymous/temporary/非管理员管理失败。
56
-
57
- <!-- /microi-progressive:chunk -->
58
- <!-- microi-progressive:chunk id=microi-system-delivery-003 sha256=8e2891f2a149d6828b653b9f0735ea39a4df5ba60178c79f0e5b0065ce72ee84 -->
59
- ## 前端交付检查清单
1
+ # 安全与跨端验收
60
2
 
61
- - 底部 tabBar 图标不 404。
62
- - 首页、分类、详情、Banner、头像、订单凭证图全部真实加载。
63
- - 主题切换是全局生效,不是只对一个页面生效。
64
- - 列表页和详情页显示同一主体名称、头像、状态,不能列表对、详情错。
65
- - 关联人名不得退化成“卖家BMB9”“匿名卖家”等可推断 Id 的兜底,除非确实无数据。
66
- - 关键业务资产不得默认选中第一条,必须用户手动选择。
67
- - 自己不能抢自己的单,不能约自己的单,必须给明确提示。
68
- - 消息/待办/约单/审核类提醒必须有未读角标,已读后消失。
69
- - 订单状态角标只给需要处理的状态,不给“全部/已完成/已取消”等静态分类堆数字。
3
+ > 原规则按适用范围无损迁移;触发对应工作时必须完整读取相关章节。
70
4
 
71
- <!-- /microi-progressive:chunk -->
5
+ <!-- microi-progressive:chunk id=microi-system-delivery-002 sha256=b4cd10b169b54235314d170c8e74f17bf6bcb5f658d0d4d2e10c73dc8aa37ef7 -->
6
+ ## 平台安全与存量兼容验收(强制)
7
+
8
+ AI 零代码交付不能只验证管理员帐号和页面能打开。任何涉及 FormEngine、菜单、角色、子表、文件、SaaS 或登录协议的交付,都必须按以下服务端边界设计和验收:
9
+
10
+ ### FormEngine 混合授权
11
+
12
+ - Token 只完成身份认证,不是任意表的访问凭证。浏览器、UniApp、SDK 等外部请求必须继续校验表、菜单、角色、操作权限和数据范围。
13
+ - 显式 `_SysMenuId` / `ModuleEngineKey` 进入精确菜单校验;伪造、传错或借用其它表菜单时失败关闭,不能退回兼容推断。
14
+ - 为兼容存量前端 V8,无菜单请求由后端从当前用户真正拥有的菜单授权快照中推断目标表权限。没有候选菜单、范围无法安全合并或解析失败时失败关闭;不要要求所有历史项目一次性补 `_SysMenuId`。
15
+ - 标准 PC facade 只给当前菜单绑定的当前表注入菜单 Id,跨表调用不借用主表菜单。没有菜单入口的 SDK/定制页才使用最小【高级表权限】。
16
+ - 后端接口引擎、后端表单 V8 和平台内部调用由服务端建立可信上下文,不要求 `_SysMenuId`;客户端伪造 `_TrustedServerInvocation` 或 `_InvokeType:'Server'` 不能获得信任。
17
+ - `TableChild` 使用父记录范围内委托:验证父菜单、父表字段配置、子菜单、父记录数据范围和外键,并由服务端强制注入外键。隐藏子菜单不要求存量角色逐个补权限。
18
+ - 菜单 `SqlWhere` / `SqlJoin` 只约束列表、计数、导出等集合查询;单行详情只校验同表菜单访问权。主表写入由 `Add` / `Edit` / `Del` / `Import` 专项权限控制,不把查询范围追加到写入 SQL,也不因查询 Join 拒绝。行级写业务限制放在后端表单 V8 或专用接口引擎。
19
+
20
+ ### 保护表、控制面与缓存
21
+
22
+ - 平台表按 `PlatformResourceSecurity` 的管理员专用、只读委托、按角色管理三类校验,不使用过时的统一硬拒绝清单。`sys_apiengine` 的标准 FormEngine 管理按真实菜单/表操作授权,不能因 `Level < 9999` 拒绝已获授权的开发角色;无授权、伪造菜单、匿名和撤权必须拒绝。
23
+ - 接口代码写权限只授予可信开发角色;任务、Redis 等其它控制面门禁、接口运行权限和 MCP 专用开发权限仍独立执行,不能只靠前端隐藏菜单,也不能从接口管理菜单权限推导其它控制面权限。
24
+ - 权限缓存使用按 `OsClient` 隔离的共享 Redis `epoch`、用户快照、短 TTL L1/L2。用户/角色/菜单/权限变化后提升 `epoch`;验收至少使用两个节点确认无需清 Redis或重启即可生效。
25
+ - Upgrade15 只清理普通角色的保护表直接授权,不能删除正常业务菜单权限。
26
+
27
+ ### 上传、私有文件与 SaaS
28
+
29
+ - 上传业务默认值为 100 MB/文件、200 MB/次、10 文件、2 GB/帐号/日、20 GB/租户/日。有效值只按当前租户 `sys_osclients` → 代码安全默认值解析,租户可以提高或降低业务默认值;不得为上传开关、额度或硬上限新增 API 环境变量或 `appsettings` 节点。最终仍受代码内不可突破的灾难保护、HTTP/Multipart/Form 和反向代理上限约束。共享 Redis 原子预留,Redis 故障失败关闭。
30
+ - 无字段上下文的普通交互式上传默认私有桶,一级安全目录为 `file`、`img`、`avatar`、`editor`;可由管理员在普通 `sys_config.HdfsUploadRules` 按真实角色授权业务目录与公有权限。通配符必须有界并先校验实际路径,保留目录与跨租户不能放行。标准表单仍按权威字段配置执行。可信后端 V8 仍受全局文件大小硬上限。
31
+ - 普通客户端私有文件签名必须提交 `FormEngineKey`、`FormDataId`、`FieldId`、`SysMenuId` 并验证记录字段真实引用;不能把后端 `V8.Method.GetPrivateFileUrl({FilePathName})` 的可信调用方式照搬到浏览器。
32
+ - Upgrade16 六个上传字段全部可空,空值保持老租户兼容;升级后回读字段元数据、租户值并刷新 SaaS 缓存。
33
+ - `V8.OsClientModel` / `V8.SysConfig` 只使用脱敏副本,不返回整个对象。新租户不能复制主租户整条 `sys_osclients`;数据库、认证、Redis、存储、MQ/MQTT、搜索凭据必须独立创建或由服务端托管。
34
+ - Redis 管理器只允许超级管理员使用当前租户或已保存连接;匿名/temporary 任意 Host 连接必须拒绝,MCP 写操作必须 `confirmExecution`,禁止传递 Redis 密码。
35
+
36
+ ### 网络、登录和发布兼容
37
+
38
+ - `CorsAllowOrigins` 和全局 CORS 来源都为空时默认允许任意来源;配置后才按精确来源/通配符收紧。CORS 不是鉴权边界。
39
+ - 严格 SSRF 默认关闭,未配置时不得拒绝存量非 HTTP(S)、URL 凭据、私网、云元数据和重定向调用;显式启用后才执行严格拦截与精确主机白名单。
40
+ - 登录 RSA 仅避免密码在请求体直接显示,HTTPS 才是安全边界。必须保留历史 RSA fallback,专属公私钥成对切换,不能因删除旧常量造成所有客户无法登录。
41
+ - 登录传 `_ClientType`,请求携带稳定 `did`,每次响应接收 `authorization`。多标签续签 single-flight;`TokenReplaced` 先检查新 Token,旧响应不能清掉新登录态。
42
+ - 安全升级不得删除私有子 Git 的 `Microi.Server/Microi.net/License/keys/`。授权签名资产与登录 RSA 用途不同,禁止以安全清理为由混删。
43
+ - 不得修改默认 CORS/SSRF/RSA 行为后只用新装环境验收;必须覆盖旧前端、历史 V8、滚动升级和至少两个节点。
44
+
45
+ ### 安全自动化最低断言
46
+
47
+ 1. 普通角色保护表读写、伪造菜单、伪造可信标记均失败。
48
+ 2. 真实菜单、历史无菜单推断和父记录范围内 TableChild 均成功,跨父记录失败。
49
+ 3. 查询范围在列表、计数、导出中生效;详情按同表菜单访问权成功;有写权限的单表/Join 模块写入成功,无写权限失败,后端 V8 行级业务校验可回滚。
50
+ 4. 节点 A 改权限后节点 B 无需重启生效。
51
+ 5. 上传大小/数量/双日额度、多节点并发和 Redis 故障行为正确。
52
+ 6. 私有文件跨菜单/记录/字段失败,授权访问成功,匿名失败。
53
+ 7. CORS 空配置兼容、配置后收紧;SSRF 默认兼容、严格模式拦截。
54
+ 8. 历史 RSA fallback 和专属匹配密钥均可登录;并发续签不反复退出。
55
+ 9. SaaS 脱敏投影不包含基础设施密钥,Redis anonymous/temporary/非管理员管理失败。
56
+
57
+ <!-- /microi-progressive:chunk -->
58
+ <!-- microi-progressive:chunk id=microi-system-delivery-003 sha256=479ccdb65450c7741b052a30d8e4a11917bc19d80bf9b4ac89ea00092b4aaa73 -->
59
+ ## 前端交付检查清单
60
+
61
+ - 底部 tabBar 图标不 404。
62
+ - 首页、分类、详情、Banner、头像、订单凭证图全部真实加载。
63
+ - 主题切换是全局生效,不是只对一个页面生效。
64
+ - 列表页和详情页显示同一主体名称、头像、状态,不能列表对、详情错。
65
+ - 关联人名不得退化成“卖家BMB9”“匿名卖家”等可推断 Id 的兜底,除非确实无数据。
66
+ - 关键业务资产不得默认选中第一条,必须用户手动选择。
67
+ - 自己不能抢自己的单,不能约自己的单,必须给明确提示。
68
+ - 消息/待办/约单/审核类提醒必须有未读角标,已读后消失。
69
+ - 订单状态角标只给需要处理的状态,不给“全部/已完成/已取消”等静态分类堆数字。
70
+
71
+ <!-- /microi-progressive:chunk -->
@@ -26,7 +26,7 @@ UniApp/H5/小程序必须通过项目统一 `microi.v8.js` 的 `V8.uploadFile` /
26
26
  创建、重构或修复任何 Microi 移动端项目前,必须同时应用 `microi.skills/microi-mobile-app-quality/SKILL.md`,并读取其[首版交付与外部服务验收](../microi-mobile-app-quality/references/mobile-first-delivery.md)。手机号快捷登录、会话续签、导航几何、真实地图、页面动效和公开发布回读从首版纳入需求与测试,不能先交静态占位版,再等待用户逐页指出问题。涉及后台与第三方服务时按实际业务范围执行,既有授权和租户策略优先。
27
27
 
28
28
  <!-- /microi-progressive:chunk -->
29
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-001 sha256=acfd8dd91195e7930896bd54e6ae7ce3d3982bdeb0d674d98337878eab1a5e82 -->
29
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-001 sha256=ad6d719fd27c252c1916c54d65185ecf90846e5f780a81b671a6e0540fbea4a6 -->
30
30
  ## 标准产品、视图协议与租户扩展
31
31
 
32
32
  地图提供行政区与附近距离两类筛选时,应复用省市区字典,并允许省、市、区逐级选“全部”;省级“全部”须显式启用,不能改变普通地址录入的默认值。行政区域查询不依赖手机定位、不叠加附近半径,空地区仍可保留既有附近模式。范围筛选必须在原有菜单/租户/行权限内执行,分批读取并丢弃迟到响应;来源列表存在同表不同菜单时,地图入口与查询应保留准确的来源菜单和固定业务条件。验收覆盖全国、全省、全市、区县、直辖市、定位拒绝、旧接口兼容和快速切换。
@@ -52,11 +52,14 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
52
52
  - 原生详情进入编辑后,取消丢弃未保存字段并返回同一详情/Tab,保存成功后回读服务端结果并通知来源列表刷新;直接新增/编辑仍返回来源列表。验收覆盖系统返回、保存/子表失败、迟到响应和权限撤销,不能用重复压入详情页替代原实例恢复。
53
53
  - IoT/关联快照的“记录不存在”应展示业务空状态并隐藏表名/SQL,权限与网络失败仍保留真实错误;未知遥测使用占位值,零值和离线不能被当作缺失。依赖租户 V8 的契约测试从授权同步目录按唯一 ApiEngineKey 定位,测试前核验源码完整性与哈希,不靠旧分类文件夹名定位或跳过缺失依赖。
54
54
  - 小程序不得下载或执行任意前端 V8,不得使用 `eval/new Function`。字段显隐和联动使用白名单声明式规则,按钮使用 ActionSchema,复杂事务和校验进入 ApiEngine 或后端表单事件。
55
+ - 定制详情的按钮锚点必须从完整表单定义定位所属 Tab/分组,不能回退到当前 Tab 的第一个可见分组,否则关联、二维码等基础动作会串栏。后台 Button 只有受控原生适配才能进入小程序;设备控制同时取字段权限与服务端能力交集,较多动作按业务分组、双列和“更多”展开。涉及物理动作时沿用服务端稳定编号的准备/派发/查询协议,超时只查原编号,离页/切换记录取消后续派发;接口受理、设备回执和遥测复核分别展示。回归覆盖 Tab 往返、权限撤销、取消、连点、响应丢失、旧指令混入和迟到响应。
55
56
  - 分片日志的时间筛选复用后台 SearchFieldIds 和统一筛选弹窗,不增加重复的月份、开始日期和结束日期控件。月份从已选时间推导,未筛选时查询当月;虚拟文本时间发送完整边界,缺省精度可按接口能力使用分钟,显式 DateTimeType 优先。草稿确认后生效、关闭取消、重置清空条件;结束包含整个所选精度。服务端在存储层过滤、计数和分页,缓存及迟到响应按已生效条件隔离;接口不支持跨月时在提交前明确提示。
56
57
  - ActionSchema 只能描述文字、图标、颜色、确认提示、参数映射、ApiEngineKey、原生 ActionType 和成功后的刷新/跳转;扫码、定位、拍照、拨号、导航等由受控原生适配器执行。
57
58
 
58
59
  仓库必须提供 AI 与人工协作约束文件、租户脚手架、Profile 构建/同步命令和架构检查。平台层改动至少同时构建标准 Profile 与默认交付 Profile;租户视觉改动还要执行多视口截图回归。这样其他同事使用 Codex、Claude、Copilot、Cursor 等工具继续开发时,会先读取相同规则,而不是依赖某次对话记忆。
59
60
 
61
+ Profile 覆盖层回归必须在独占临时夹具中执行,禁止为了测试临时切换正在被 HBuilderX/Vite 监听的真实源码。即使最终恢复字节,也可能触发增量编译缓存不一致,留下空 WXSS。验收须断言真实文件内容与 mtime 均未变化,覆盖夹具成功/失败退出清理,并检查已编译页面含实际样式规则、与当前模板匹配;不能只检查 JS/WXML 或产物是否存在。
62
+
60
63
  <!-- /microi-progressive:chunk -->
61
64
  <!-- microi-progressive:chunk id=microi-uniapp-frontend-002 sha256=1faa6e553ff61b9043ff7608d02518e815f1dcbe2cc56fefb8adff326c5d1f1f -->
62
65
  ## H5 预览壳与底部导航强制规则