@microi.net/cli 5.9.8 → 6.0.0

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-10-16T10:07:03.043Z",
3
+ "generatedAt": "2026-10-17T12:31:59.686Z",
4
4
  "policy": {
5
5
  "maxEntryLines": 285,
6
6
  "referenceBudgetLines": 245,
@@ -169,11 +169,11 @@
169
169
  ]
170
170
  },
171
171
  "microi-client-frontend": {
172
- "originalSha256": "55ca4a8abe9c6eb884c547b48ff581cc8d4bb03c29336939c65e0ae9056197db",
173
- "originalLines": 712,
172
+ "originalSha256": "7b65364363bbc4f99b85c3ff2aafeec2767313c399337a4bdd4569835b6c924e",
173
+ "originalLines": 717,
174
174
  "prefixSha256": "19308dd1a04397f764cc5ab4fefe76093704564592396ce00482d28e952537b7",
175
175
  "prefixBytes": 1400,
176
- "entryLines": 254,
176
+ "entryLines": 259,
177
177
  "chunks": [
178
178
  {
179
179
  "id": "microi-client-frontend-000",
@@ -187,16 +187,16 @@
187
187
  "id": "microi-client-frontend-001",
188
188
  "ordinal": 1,
189
189
  "destination": "microi-client-frontend/SKILL.md",
190
- "sha256": "83fb9902ca2edddfc8b72de9578f28a6a7df5cadb2626e5ffb0321d62caa0bb0",
191
- "lines": 30,
190
+ "sha256": "60265fdc9842dcc4f032f80e1a93b88dd5f47f1261d0fa7334c2a7eac8d31c4c",
191
+ "lines": 32,
192
192
  "heading": "1. 技术栈和源码入口"
193
193
  },
194
194
  {
195
195
  "id": "microi-client-frontend-002",
196
196
  "ordinal": 2,
197
197
  "destination": "microi-client-frontend/SKILL.md",
198
- "sha256": "34b6dd5233aac8325da15be3dc3c6a866dbbe77fd93288d5b2ad194d646fcf08",
199
- "lines": 118,
198
+ "sha256": "0d8e3d76a5c8198d562b0af842e109e8d9eeb27ab5ddc43a6fa367d5b08bdd14",
199
+ "lines": 121,
200
200
  "heading": "2. 表单引擎三层结构"
201
201
  },
202
202
  {
@@ -763,11 +763,11 @@
763
763
  ]
764
764
  },
765
765
  "microi-system-delivery": {
766
- "originalSha256": "5c70d405c7be421715eb2dd260b272733fc4426591528814e67b7a2e5e32ff83",
767
- "originalLines": 646,
768
- "prefixSha256": "be8886df24f891da364663ea8c4bfc010fba5505094347e4a97166c6e45fe2eb",
769
- "prefixBytes": 4329,
770
- "entryLines": 169,
766
+ "originalSha256": "e04b4ac9fc32d5b502b8dbaeb5fa1a3a799bb7181b20cd4e7e95e3d06757af3f",
767
+ "originalLines": 701,
768
+ "prefixSha256": "c6846a619a5b9291649fc44a36de5a0676ec2b1dfa94a57ad38f9620573cf4ff",
769
+ "prefixBytes": 4786,
770
+ "entryLines": 106,
771
771
  "chunks": [
772
772
  {
773
773
  "id": "microi-system-delivery-000",
@@ -788,7 +788,7 @@
788
788
  {
789
789
  "id": "microi-system-delivery-002",
790
790
  "ordinal": 3,
791
- "destination": "microi-system-delivery/SKILL.md",
791
+ "destination": "microi-system-delivery/references/progressive-03-安全与跨端验收.md",
792
792
  "sha256": "adeb9e4ec4beadf3b7ba33325e860b378b81f6d7e95b25879b64ca4ee1c91987",
793
793
  "lines": 52,
794
794
  "heading": "平台安全与存量兼容验收(强制)"
@@ -796,7 +796,7 @@
796
796
  {
797
797
  "id": "microi-system-delivery-003",
798
798
  "ordinal": 5,
799
- "destination": "microi-system-delivery/SKILL.md",
799
+ "destination": "microi-system-delivery/references/progressive-03-安全与跨端验收.md",
800
800
  "sha256": "8e2891f2a149d6828b653b9f0735ea39a4df5ba60178c79f0e5b0065ce72ee84",
801
801
  "lines": 13,
802
802
  "heading": "前端交付检查清单"
@@ -832,6 +832,14 @@
832
832
  "sha256": "67fa060b6520a80e41818ac0974c0b38ff3171c97a1c558a01667b854865fa7a",
833
833
  "lines": 82,
834
834
  "heading": "复盘记录格式"
835
+ },
836
+ {
837
+ "id": "microi-system-delivery-008",
838
+ "ordinal": 8,
839
+ "destination": "microi-system-delivery/references/context-quality.md",
840
+ "sha256": "0e9e14b98ac7ab7ca0bf1c4ef97bad2bf061d0c01b170325ddbaf961a02a0de4",
841
+ "lines": 54,
842
+ "heading": "质量优先的上下文与增量开发"
835
843
  }
836
844
  ],
837
845
  "references": [
@@ -847,6 +855,18 @@
847
855
  "自动化测试必须覆盖的坑",
848
856
  "复盘记录格式"
849
857
  ]
858
+ },
859
+ {
860
+ "path": "references/progressive-03-安全与跨端验收.md",
861
+ "headings": [
862
+ "安全与跨端验收"
863
+ ]
864
+ },
865
+ {
866
+ "path": "references/context-quality.md",
867
+ "headings": [
868
+ "质量优先的上下文与增量开发"
869
+ ]
850
870
  }
851
871
  ]
852
872
  },
@@ -3221,17 +3241,17 @@
3221
3241
  ]
3222
3242
  },
3223
3243
  "workspace-conventions": {
3224
- "originalSha256": "347085aeef939e8e91e9d0aedfe1208c5a147d234c16887c2af3ac026d73a9f5",
3225
- "originalLines": 640,
3226
- "prefixSha256": "b2c13c455cf052093f78881170151d3fb56c25cda2f837c9f6abc0c29e67fd30",
3227
- "prefixBytes": 310,
3228
- "entryLines": 285,
3244
+ "originalSha256": "41a0ea967ef35e75b8873868319a36c30825f2b6878e447ba27213542e18499f",
3245
+ "originalLines": 648,
3246
+ "prefixSha256": "45acfafcda30d35e7cabefaa67f8b73697d0f93724733d2469386a54e3910b76",
3247
+ "prefixBytes": 1658,
3248
+ "entryLines": 120,
3229
3249
  "chunks": [
3230
3250
  {
3231
3251
  "id": "workspace-conventions-000",
3232
3252
  "ordinal": 0,
3233
3253
  "destination": "workspace-conventions/SKILL.md",
3234
- "sha256": "105657a606c31b5c06e3834c1d29d613d9456f04225e729ba92e69049053c074",
3254
+ "sha256": "0b8322a967e67a45f195860314357a7b974555b6f3d0b642fe910dc769bd7e23",
3235
3255
  "lines": 60,
3236
3256
  "heading": "任务启动前 Skill 读取规则(强制)"
3237
3257
  },
@@ -3246,7 +3266,7 @@
3246
3266
  {
3247
3267
  "id": "workspace-conventions-002",
3248
3268
  "ordinal": 2,
3249
- "destination": "workspace-conventions/SKILL.md",
3269
+ "destination": "workspace-conventions/references/progressive-04-工作区与平台专项保障.md",
3250
3270
  "sha256": "795821e68c0c347c68f8cdcb6e2f81defa9a172650216288c10d313075e3247d",
3251
3271
  "lines": 16,
3252
3272
  "heading": "分布式部署与重启安全规范(强制)"
@@ -3254,15 +3274,15 @@
3254
3274
  {
3255
3275
  "id": "workspace-conventions-003",
3256
3276
  "ordinal": 3,
3257
- "destination": "workspace-conventions/SKILL.md",
3258
- "sha256": "7e7a88134f51f7e5712e9a41cfe516bae45ea8e9cb418a93cc39adeff3f3cbb4",
3277
+ "destination": "workspace-conventions/references/progressive-04-工作区与平台专项保障.md",
3278
+ "sha256": "478664d863219c724b8d19d25e7ac17420add6229c9efab5b75823d815aede53",
3259
3279
  "lines": 19,
3260
3280
  "heading": "本地资源与 OOM 保护规范(强制)"
3261
3281
  },
3262
3282
  {
3263
3283
  "id": "workspace-conventions-004",
3264
3284
  "ordinal": 4,
3265
- "destination": "workspace-conventions/SKILL.md",
3285
+ "destination": "workspace-conventions/references/progressive-04-工作区与平台专项保障.md",
3266
3286
  "sha256": "093ef306e8f2f873b76524ce69ce7fd5194cfa0b361bd564f0c767f88439a817",
3267
3287
  "lines": 29,
3268
3288
  "heading": "临时文件与 AI 产物放置规则(强制)"
@@ -3270,7 +3290,7 @@
3270
3290
  {
3271
3291
  "id": "workspace-conventions-005",
3272
3292
  "ordinal": 5,
3273
- "destination": "workspace-conventions/SKILL.md",
3293
+ "destination": "workspace-conventions/references/progressive-04-工作区与平台专项保障.md",
3274
3294
  "sha256": "f627ee155b40014af76926b3a432601aa3f6bec5a7eb98ca0540c83fa41f1e5a",
3275
3295
  "lines": 32,
3276
3296
  "heading": "Microi 源码路径速查(工作区根相对路径)"
@@ -3278,7 +3298,7 @@
3278
3298
  {
3279
3299
  "id": "workspace-conventions-006",
3280
3300
  "ordinal": 6,
3281
- "destination": "workspace-conventions/SKILL.md",
3301
+ "destination": "workspace-conventions/references/progressive-04-工作区与平台专项保障.md",
3282
3302
  "sha256": "fb29cd39fe580e3e38df4c0483e5530f876697418f38b391aa421606c8fc6fe5",
3283
3303
  "lines": 12,
3284
3304
  "heading": "Skills 通用化原则"
@@ -3286,7 +3306,7 @@
3286
3306
  {
3287
3307
  "id": "workspace-conventions-007",
3288
3308
  "ordinal": 7,
3289
- "destination": "workspace-conventions/SKILL.md",
3309
+ "destination": "workspace-conventions/references/progressive-04-工作区与平台专项保障.md",
3290
3310
  "sha256": "c23d7942a3b6176b464fe267546c09dcadf990c2c243576c267c644b4502795d",
3291
3311
  "lines": 11,
3292
3312
  "heading": "Skills 中文优先规则"
@@ -3294,7 +3314,7 @@
3294
3314
  {
3295
3315
  "id": "workspace-conventions-008",
3296
3316
  "ordinal": 8,
3297
- "destination": "workspace-conventions/SKILL.md",
3317
+ "destination": "workspace-conventions/references/progressive-04-工作区与平台专项保障.md",
3298
3318
  "sha256": "cd38647f4ae3c186e247c06ce44b45e42ce7e664d58fbed82c93595547638a7c",
3299
3319
  "lines": 11,
3300
3320
  "heading": "官方文档原位增补与中文单源规则(强制)"
@@ -3302,8 +3322,8 @@
3302
3322
  {
3303
3323
  "id": "workspace-conventions-009",
3304
3324
  "ordinal": 9,
3305
- "destination": "workspace-conventions/SKILL.md",
3306
- "sha256": "43bdb1476a7751fbc251c933ccfbd1710c9269dec3e7e4b541cdaeea37d200f1",
3325
+ "destination": "workspace-conventions/references/progressive-04-工作区与平台专项保障.md",
3326
+ "sha256": "bec8162387c470c0cad1252645dbb4ecdafb0abb5f9b042525b6df8671e77ab0",
3307
3327
  "lines": 38,
3308
3328
  "heading": "多对话共享工作区变更归属保护(强制)"
3309
3329
  },
@@ -3593,6 +3613,12 @@
3593
3613
  "headings": [
3594
3614
  "CLI 与 IDE 插件错版共存约定"
3595
3615
  ]
3616
+ },
3617
+ {
3618
+ "path": "references/progressive-04-工作区与平台专项保障.md",
3619
+ "headings": [
3620
+ "工作区与平台专项保障"
3621
+ ]
3596
3622
  }
3597
3623
  ]
3598
3624
  }
@@ -51,7 +51,11 @@ description: Microi AI 引擎、MiniMax 图片/音乐/视频生成与预览、
51
51
 
52
52
  在线 `/#/mic-ai-engine` 的低代码建模模式使用本地 Microi.Agent 同一份 `microi.mcp` 工具目录:先 `list_tools`/`describe_tool`,再执行表、字段、菜单、接口引擎、Manifest 系统编排、删除等原 MCP 工具。用户在对话中明确要求写入时自动执行,不需要网页按钮;明确“只规划、不执行”时只调用只读工具。前端仅向 `Level >= 9999` 开放建模入口;服务端进入模式和每次工具调用前都以当前 DiyToken、主库账号及有效角色复核。工具原有确认值、审计和回读规则继续生效;超时或结果不确定时停止,不自动重试写操作。商城包不替换平台前后端程序。
53
53
 
54
- 建模对话使用非流式 `/api/Ai/Chat` 获取服务端 MCP 工具循环最终答案和工具名称/状态;普通对话保持流式。完整系统先调用 `microi_get_db_schema`、`microi_get_manifest_schema`、`microi_plan_system`,用 `microi_generate_system(dryRun=true)` 验证,再按用户明确创建请求调用 `dryRun=false` 并用 `microi_validate_system` 回读。模型提交的参数由原 MCP Schema 校验,不能在前端绕过。
54
+ 建模工作台使用 `/api/Ai/ChatStream` 接收真实模型增量和 `agent/receipt/message/error/done` 事件;每轮工具、请求与 DDL 阶段持续显示。等待心跳只表示请求尚未返回,不能冒充完成百分比或隐藏推理原文。只公开经过授权的执行摘要,不向浏览器发送完整工具参数、原始返回、密钥或连接串。非流式 Chat 兼容入口继续返回最终结果。完整系统先调用 `microi_get_db_schema`、`microi_get_manifest_schema`、`microi_plan_system`,用 `microi_generate_system(dryRun=true)` 验证,再按用户明确创建请求调用 `dryRun=false` 并用 `microi_validate_system` 回读;原 MCP Schema 与确认规则不变。
55
+
56
+ MCP 可信写前校验分支确认未执行时标记 `notExecuted`,保留安全的参数位置和错误码,同一动作最多允许模型修正一次参数;不能仅凭未看到 HTTP 请求就推断未写入。发出写请求后断线或工具报错保留 `uncertain`,停止后续写入。已知表、字段和 Manifest 使用精确只读工具核对;回读返回不等于原写入成功,也不授权重放。普通 POST 网络失败不得通过另一 HTTP 传输自动重发;已有稳定 RequestId 的专用资产协议按自身契约执行。浏览器提前断流、取消或错误时保留已收到的文本、步骤与失败回执,不能把正在执行的工具保存为成功。
57
+
58
+ 建表和新增字段的 DDL 来自已鉴权 MCP 端点开启的内部 ORM observer,在真实 DbCommand 执行前、返回或失败时记录安全语句,不从模型计划推测。字面量、默认值、注释及含歧义的双引号段隐藏,只返回有界 TABLE/INDEX DDL,不返回 DML 值。`submitted/executed/failed` 与 `TransactionPending` 是数据库执行阶段,不等于最终事务提交;截断必须标明。局部 HTTPS 联调只使用系统证书链与 localhost 名称验证通过的公开链,专属 Node 临时 CA 文件严格限权并在退出后清理;不关闭 TLS、不导出服务端私钥。
55
59
 
56
60
  在线工具网关仅转发当前请求的真实 DiyToken 与租户到同版 MCP,不创建服务账号或提权 Token;不继承宿主其它凭据。每次调用前复核当前管理员权限,模型只能提出调用建议,MCP 继续负责参数 Schema、写操作确认、幂等、审计和权威回读。对浏览器本地文件,先通过受控上传取得服务器可读内容,不能把客户端路径当作 API 节点路径。
57
61
 
@@ -27,15 +27,17 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
27
27
  ---
28
28
 
29
29
  <!-- /microi-progressive:chunk -->
30
- <!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=83fb9902ca2edddfc8b72de9578f28a6a7df5cadb2626e5ffb0321d62caa0bb0 -->
30
+ <!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=60265fdc9842dcc4f032f80e1a93b88dd5f47f1261d0fa7334c2a7eac8d31c4c -->
31
31
  ## 1. 技术栈和源码入口
32
32
 
33
- ### 详情评论与代码版本的按需读取
33
+ ### 详情评论、日志与版本的按需读取
34
34
 
35
35
  - 评论用 `/api/FormEngine/AddFormComment`,只传 `ParentFormEngineKey/ParentTableRowId/_SysMenuId/Content/ParentCommentId/RequestId`。服务端固定作者、父表及回复上下文;同一提交重试必须复用 RequestId,兼容 GUID 与平台 `DiyCommon.NewGuid()` 实际生成的 ULID。
36
36
  - 评论归属为 `diy_comment.ParentTableId + TableRowId`,新表字段与复合索引通过表单引擎应用交付,主库回读保证写后可见。已有 TableId 绑定兼容,空归属历史评论禁止仅按记录 Id 自动猜测或后台回填。
37
- - `/api/FormEngine/GetFormRelatedData` 的版本列表只含元信息;`HistoryContentMode=OnDemand` 时,点击动作再传 `VersionId` 读取一条,并要求返回 `Authorized`。不要把 Data 缓存到列表,不要并发预取全部正文。
38
- - 代码历史只向当前有效的平台管理员开放代码字段白名单;当前行可读不等于历史秘密可读。局部版本比较/加载只涉及快照中的字段,保存继续走正常表单鉴权和事件。
37
+ - `/api/FormEngine/GetFormRelatedData` 的日志和版本列表只含元信息;`HistoryContentMode=OnDemand` 时,点击动作再传 `LogId/VersionId` 读取一条,并要求返回 `Authorized`。不要预取全部正文或将版本 Data 装入列表长期缓存。
38
+ - 历史正文单独复核当前主库有效管理员、父菜单/表/记录,普通用户与 AccessKey 会话不能仅凭当前行可读获得历史原文。代码继续使用代码字段白名单,普通数据使用当前元数据和正常 Client 读取前后未改变的字段交集;字段被任意 DataFilter、文件/模块权限隐藏、删除或改写时,不开放其历史值。密码控件、加密列、嵌套凭据及连接等敏感配置继续排除;SaaS 配置历史只允许明确安全字段白名单。
39
+ - 历史读取观察既有父记录管线,不重新执行历史 V8,不新读业务原行、不触发业务写入。局部版本比较/加载只涉及可读快照字段,保存继续走正常表单鉴权和事件。
40
+ - 表、记录、菜单、ApiBase/OsClient 或表单代次变化时同步清空列表、计数、评论/回复与历史弹窗,并作废旧响应。头像解析和按需正文 Promise 恢复后再次核归属;同一记录重新打开也要生成新代次,不能用列表非空代替当前记录已加载。
39
41
  - 不得为了修复右栏恢复调度器通用 FormEngine 状态写回、启动历史回填或无变化版本写入。必须同时运行评论归属/去重、按需读取以及 ScheduleRuntimeTimeWriter、V8CodeVersionService 的性能回归。
40
42
 
41
43
  - Vue 3 + Options API + mixins,构建工具是 Vite。
@@ -58,7 +60,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
58
60
  ---
59
61
 
60
62
  <!-- /microi-progressive:chunk -->
61
- <!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=34b6dd5233aac8325da15be3dc3c6a866dbbe77fd93288d5b2ad194d646fcf08 -->
63
+ <!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=0d8e3d76a5c8198d562b0af842e109e8d9eeb27ab5ddc43a6fa367d5b08bdd14 -->
62
64
  ## 2. 表单引擎三层结构
63
65
 
64
66
  ### 模块级跨端视图
@@ -159,12 +161,15 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
159
161
 
160
162
  - 边角风格先读取当前用户 `CornerStyle`:`round/square` 显式覆盖;空值或 `System` 继承租户 `sys_config.CornerStyle`,租户空值默认为圆角。不得把空个人值提前归一为 `round`,否则会阻断租户直角设置。
161
163
  - 桌面经典布局使用 `NavigationLayout=Side/Top/TopSide`,个人空值或 `System` 继承租户,租户空值为侧边导航。`TopSide` 将一级放顶部,当前一级的二级及更深菜单复用原侧栏;单个子菜单仍留在侧栏,无可见子菜单时隐藏侧栏并释放内容宽度。侧栏仍支持收起及 `MenuChildExpandMode=System/Down/Right`。顶部导航复用当前权限路由、角标与外链,空间不足收纳到更多菜单;移动端仍采用底部导航。当前路由与一级归属由 `hybrid-navigation.js` 统一投影,禁止修改共享权限树。
164
+ - 侧栏与角色管理组织树共用 `MciResizablePane`:右边缘拖拽、可访问分隔条、方向键/Shift/Home/End 和收起按钮必须同样可用。`sys_user.SidebarWidth/RoleTreeWidth` 为 nullable 整数像素(160–600),`SidebarCollapsed/RoleTreeCollapsed` 为 nullable 0/1;使用当前账号的 Managed 偏好白名单保存。拖拽中仅预览,松开提交,取消或卸载释放指针。视口夹紧保留主内容宽度,不能把夹紧值覆盖长期偏好;窄屏禁拖,旧租户仅用账号/租户/API 隔离的设备回退。侧栏空宽度沿用 `sys_config.MenuWidth` 后回退240px,角色树默认240px。
165
+ - 顶部主导航与工作区 Tabs 是不同层级:`Top/TopSide` 的当前一级使用独立短底线,hover/focus 前景显式跟随可读主题,禁止继承 Element 的低对比品牌色。长弹出菜单使用独立主题表面、无异色顶边和内部滚动,嵌套层仍 Teleport;顶部菜单标题与品牌不显示 title/alt/Tooltip 类提示浮层,保留完整 aria-label 无障碍名称;顶栏整条背景色带须贴合视口或所属壳层左右边界,不能把内部 padding 当成全宽验收,内容区留白独立处理。窄视口“更多”菜单也遵守同一契约。
162
166
  - 顶部导航整行(含功能图标和账号姓名)使用主题运行时的 `--sidebar-*` 可读表面与前景;主题面板和业务弹层保留自身语义表面。主题入口为齿轮,界面密度在同一主题面板调整,已安装 `sys_user.UiDensityScale` 时保存当前账号、个人空值继承 `sys_config.UiDensityScale`,旧租户才使用按租户/账号隔离的设备回退;AI 入口使用圆圈内 AI 字母 SVG,不能回退魔法棒或图片。
163
167
  - 头像菜单【修改密码】使用标准 `DiyCustomDialog + MicroAppDialog` 打开现有平台服务 `/personal-settings`,仅传 `Data.Action=ChangePassword` 选择密码展示模式;不能用宿主输入决定目标账号/租户,不新建密码旁路。当前密码校验、Passkey/TOTP/严格人脸一次性票据与提交继续复用个人中心,成功或卸载清除密码输入。定向回归使用 `hybrid-navigation.spec.mjs`、`password-dialog.spec.mjs` 和个人偏好资源测试。
164
168
  - 桌面壳层使用视口高度与可收缩的 flex 内容区,只有路由内容滚动,导航和 Tab 不随页面滚动;移动端仍保留文档滚动。用户入口含头像与姓名,不能使用纯图标的固定 flex 宽度;异步图表须在真实 DOM 挂载后观察尺寸变化,避免侧边/顶部导航切换后撑破卡片。
165
169
  - 主题色、浅色/深色、菜单子级展开方式等需要“换设备仍生效”的选择必须保存到当前 DiyToken 用户的 `sys_user` 白名单字段;`localStorage` 只作为未安装新字段租户和匿名启动阶段的兼容回退,不能作为跨设备事实源。
166
170
  - 已安装用户偏好字段时优先级固定为“当前用户显式值 → 租户 `sys_config` → 平台安全默认”;个人菜单值 `System` 表示继承租户配置。不得让上一位用户的浏览器本地主题覆盖下一位已登录用户。
167
171
  - 主题面板的主题色、亮暗模式、边角、导航、菜单展开、密度、三个装饰开关及登录风格均有同名系统全局默认,不新建重复字段。`framework-appearance.js` 统一应用运行状态;渲染继承值不能写成个人选择。`UiDensityScale` 安全范围为 90~110、步长 5,覆盖表单标签/普通控件、系统设置表单、侧栏、表格、Tab 与 Teleport 弹层;富文本、代码、地图和子表保持内容高度,触屏最小目标仍为 44px。
172
+ - 密度覆盖不能只改字号和单元格 padding:父菜单底圈、图标、菜单行间距与普通表格 `.cell` 的历史38/40px行高都必须采用同一密度 token。多行内容保持自然高度,不能设置固定行高裁切。直角样式需按真实选择器优先级覆盖 `.el-message-box.mci-unified-message-box` 等双class的 important 壳,并验退出确认 Teleport 首帧。
168
173
  - 【恢复默认】沿原保存队列把 `ThemeMode/ThemeColor` 清空、`CornerStyle/NavigationLayout/MenuChildExpandMode/LoginStyle` 写 `System`、`UiDensityScale/DisableGradient/DisableShadow/DisableButtonIcon` 写 `null`,只作用当前用户。同时清旧设备回退与本身份缓存;不能修改 `sys_config` 或把平台默认值写成个人覆盖。开关 `0` 与 `null` 语义不同:`0` 可覆盖全局 `1`,`null` 继承全局。
169
174
  - `DisableGradient/DisableShadow/DisableButtonIcon` 同时支持个人与租户默认,根标识分别为 `data-mci-disable-gradient/shadow/button-icon`。去装饰仍保留输入边界、键盘焦点、加载指示与纯图标操作。登录样式 `LoginStyle=Original/Minimal/Split/Console` 复用一套业务 mixin 与表单,不复制验证码、SSO、强认证、协议及回跳逻辑;匿名读取当前租户默认或本匿名上下文明确预览,不能读取上一账号的个人值。
170
175
  - `sys_config.HideFrameworkFunctions` 只控制顶栏入口,固定 Key 为 `Chat/BackgroundTasks/Search/Language/Theme/AI/Bluetooth/SystemStyle/FullScreen`,账号头像姓名始终保留。它与控制移动端等范围的原 AI 禁用开关独立,也不能代替功能权限。所有入口提供 `data-framework-function` 便于验收,未知 Key 忽略。
@@ -36,7 +36,7 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
36
36
 
37
37
  - 桌面与手机配对的本机 HTTP 监听必须避开 Fetch 标准禁止端口。系统自动分配的端口也可能不可浏览器访问;只有浏览器允许的真实监听端口才能进入配对 URL。自动命中禁止端口时关闭监听再有界重选,显式配置禁止端口须报错;权限和占用错误仍保留原错误,不改变系统动态端口范围、不绕过浏览器安全策略。同步上游时保护共同端口选择器、配对监听与对应回归。
38
38
 
39
- - 1.3.8 起生产宿主为 DeepSeek 官方桌面。同步前读取内部源码根目录 `同步DeepSeek官方上游.md`、`apps/official-desktop/upstream.lock.json` 与维护交接记录;核对官方提交、归档 SHA、版本与完整锁。保留原始快照、自有层和精确接缝,干净安装、回归及真实包验收后才能推进基线。`同步dsh-desktop上游.md` 仅用于历史派生模块,不得恢复退役宿主或 PPT 模式。
39
+ - 1.3.8 起生产宿主为 DeepSeek 官方桌面。同步前读取内部源码根目录 `同步DeepSeek官方上游.md`、`apps/official-desktop/upstream.lock.json` 与维护交接记录;核对官方提交、归档 SHA、版本与完整锁。保留原始快照、自有层和精确接缝,干净安装、回归及真实包验收后才能推进基线。旧 `同步dsh-desktop上游.md` 已删除;历史派生模块只按发行快照追溯,不得恢复退役宿主或 PPT 模式。
40
40
  - Microi Agent 是内部仓库中的独立桌面发行物,基于 DeepSeek Harness 官方桌面源码及独立吾码差异层,内置固定 Harness、Node.js、MCP / CLI / Skills;不是需要额外 Agent Token 的 CLI 别名。历史 DataElement 派生模块及许可证仍保留。
41
41
  - 官方 AI 登录只走吾码桌面账号窗口,在受支持的 `https://api.microi.net` / `https://api.itdos.com`、`OsClient=iTdos` 使用本人的中转 Key 和额度;它是员工业务 MCP 之外的可选计费来源。不要把密码或 AI Key 写入对话、命令行、MCP 参数或模型配置。
42
42
  - 业务连接在「服务器连接(MCP)」中单独添加、登录;官方 AI 账号不授予业务租户权限。项目初始化和资源同步优先使用桌面「项目资源」;其余业务继续调用同源 MCP 的原工具。
@@ -62,7 +62,7 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
62
62
  - Windows 1.3.7 修复候选针对新版 stage 启用时 Win32=5 的单次失败:对 5/32/33 有限重试,再仅在成功新建的目标目录内做同盘文件重命名;以固定 UTF-16 日志记录迁移意图,部分失败逐项搬回,已有目标、未知文件与旧备份均不覆盖。回滚 EOF 和短记录必须停止,目录枚举句柄先关闭再删除空目录。真实 NSIS 回归覆盖短暂/持续错误 5、中途错误 5、文件冲突和未知目标;Wine 结果与 Windows 原生覆盖升级/全部文件哈希/最终程序启动分别报告。
63
63
  - Windows 1.2.9 起本机启动探测必须使用覆盖 TCP 连接和响应头的硬超时;Harness 输出认证地址后,Node 请求失败可使用实际渲染页面的 Chromium 网络通道回退,严格限制为本次 `http://127.0.0.1:端口/`、不带凭据、不跟随重定向。记录两个通道的真实错误;只有响应正常且存在本次认证信息才可启动页面。恢复日志只能去除缓冲区之间的重叠,不能用全局 Set 删除重试中的相同超时。发布必须运行 `scripts/verify-harness-startup.mjs`,使用发布包内 Node/Harness 验证普通与安全模式、注入 Node 超时后由真实 Chromium 渲染新会话控件,以及双通道真实不响应的有界失败;本机验证不能称为客户设备已通过。
64
64
  - 桌面平台 Worker 必须在真实安装包内验证 IPC 与 Windows DPAPI。旧保险库只有成功解密且明文为零字节时才允许迁移为空文档;损坏或其他 Windows 用户的保险库保留原文件并返回具体错误。启动初始化拒绝不能让 Node 服务退出;单元测试、安装成功与真实桌面账号/AI 员工页面联调是三个独立验收层。
65
- - dsh-desktop 升级必须遵循 `Microi.Agent/同步dsh-desktop上游.md` 的三方同步流程和补丁意图清单;`microi/`、`packages/microi-code-*` 与桥接代码是永久保护区,普通上游文件使用三方比较,补丁必须经 `npm ci` 重放。关于页、NOTICE、MIT License、DataElement 版权与两个上游仓库链接不得删除。停止或退出后的任务保留历史,当前 SDK 的跨进程历史仅供查看,需新建任务引用继续。
65
+ - Microi Agent 的生产桌面使用 DeepSeek 官方源码,升级唯一入口为 `Microi.Agent/同步DeepSeek官方上游.md`。锁定官方 commit 和归档哈希,重放独立 overlay、桥接、客户端插件及云应用契约;吾码源码保护区、VS Code/CLI/MCP 与商店通道不能被上游覆盖。历史 dsh 桌面快照只作旧发行追溯和保留业务模块的来源,不再作为生产同步入口。用户「关于」可以只展示 Microi Agent、版本、吾码官网和支持入口;第三方许可证与版权声明继续在安装包的 NOTICE/LICENSE 中保留,不能因简化关于弹窗而删除法律材料。停止或退出后的任务保留历史,当前 SDK 的跨进程历史仅供查看,需新建任务引用继续。
66
66
 
67
67
  ### 默认中文输出
68
68
 
@@ -91,6 +91,9 @@ Codex Router 启动后会异步调用 bundled CLI 的 `microi update --backgroun
91
91
 
92
92
  ## 功能路由
93
93
 
94
+ - 质量优先的上下文策略读取 `microi-system-delivery/references/context-quality.md`。完整系统读全原八项及增补;局部修改读取目标与依赖,歧义扩大。`microi_get_db_schema` 默认目录摘要,字段写入前使用 `detail:"fields"` 并遍历 `Paging.nextCursor`;应用清单和文件片段同样检查完整性,不能把摘要作为覆盖正文。
95
+ - 较大 Manifest 在 `microi_plan_system` 首次提交正文并传 `detail:"summary"` 获取 `manifestRef/manifestHash` 复用,执行与验收仍校验当前身份;引用过期、重启或凭据变化时重新提交正文,写入未知先回读。`microi_get_context_metrics` 只报告当前 MCP 工具载荷字节、调用和错误,不能冒充供应商 token/费用。外部宿主的历史摘要和缓存由宿主管理。
96
+
94
97
  - 连接、登录、拉取、推送、差异和 AI 初始化:使用 bundled CLI 的 `profile`、`auth`、`pull`、`push`、`sync status`、`ai init`、`mcp init`、`doctor`。
95
98
  - 接口引擎、表单事件、模块、字段、工作流和数据库结构:先用 `action="list_tools"` / `describe_tool`,再调用对应原始 `microi_*` 工具。写工具必须保留确认口令、审计与回读。
96
99
  - 远程执行与调试:读取 `v8-debugging/SKILL.md`。Codex 用“获取源码 → 远程执行 → 定位堆栈/日志 → 最小补丁 → 再执行”的结构化循环代替 VS Code DAP 的可视化逐行面板;不得把未执行的源码检查称为真机调试成功。
@@ -11,13 +11,15 @@ description: 已初始化吾码工作区的默认 AI 开发总控入口,用户
11
11
 
12
12
  本 Skill 是已初始化吾码工作区的默认开发总控入口。用户直接描述需求即可,无需指定 Skill 名称;
13
13
  目标 MCP 连接可沿用当前项目或唯一已登录连接,需求文件/验收地址按需提供。
14
- 任何吾码开发任务先读本入口、八项清单及其增补要求,再按下表读取相关专项 Skill。
14
+ 任何吾码开发任务先读本入口和质量规范;完整系统必须完整读取八项清单及其增补要求,局部修改按目标与依赖读取对应专项 Skill。
15
15
  收到“完整开发/交付系统”请求时,必须先读取
16
16
  [完整系统开发默认交付清单(原推荐提示词 1–8)](references/progressive-01-标准工作流.md#完整系统开发默认交付清单原推荐提示词-18),
17
17
  并完整读取同一参考文件的[菜单先行与经营报表增补要求](references/progressive-01-标准工作流.md#菜单先行与经营报表增补要求强制),
18
18
  逐项执行并记录覆盖结果;不能只交方案、示例或待办。局部修改、只读分析按用户实际范围执行,
19
19
  这份默认清单不额外授权生产写入或客户部署。
20
20
 
21
+ 先读取 [质量优先的上下文与增量开发](references/context-quality.md)。完整系统在写入前必须读取 [安全与跨端验收](references/progressive-03-安全与跨端验收.md);局部涉及 FormEngine、菜单、权限、文件、登录或前端交互时读取对应安全/跨端章节。未知影响必须扩大检索,不能用少读资料换取不准确的修改。
22
+
21
23
  按本次实际能力读取相关 Skill,不能只读总控入口后凭记忆实现:
22
24
 
23
25
  | 工作内容 | 相关 Skill |
@@ -74,73 +76,6 @@ Manifest 使用 `tables[].formBanner`;未显式配置时仍按字段类型选
74
76
 
75
77
  最终回复必须按原始编号逐项汇总:哪些已实现、哪些未实现、是否通过全自动化测试、是否通过截图验证。不能只给总括性“都完成了”。如果某项没有测试或没有截图,必须明说“未覆盖/未截图”,并说明原因。
76
78
 
77
- <!-- /microi-progressive:chunk -->
78
- <!-- microi-progressive:chunk id=microi-system-delivery-002 sha256=adeb9e4ec4beadf3b7ba33325e860b378b81f6d7e95b25879b64ca4ee1c91987 -->
79
- ## 平台安全与存量兼容验收(强制)
80
-
81
- AI 零代码交付不能只验证管理员帐号和页面能打开。任何涉及 FormEngine、菜单、角色、子表、文件、SaaS 或登录协议的交付,都必须按以下服务端边界设计和验收:
82
-
83
- ### FormEngine 混合授权
84
-
85
- - Token 只完成身份认证,不是任意表的访问凭证。浏览器、UniApp、SDK 等外部请求必须继续校验表、菜单、角色、操作权限和数据范围。
86
- - 显式 `_SysMenuId` / `ModuleEngineKey` 进入精确菜单校验;伪造、传错或借用其它表菜单时失败关闭,不能退回兼容推断。
87
- - 为兼容存量前端 V8,无菜单请求由后端从当前用户真正拥有的菜单授权快照中推断目标表权限。没有候选菜单、范围无法安全合并或解析失败时失败关闭;不要要求所有历史项目一次性补 `_SysMenuId`。
88
- - 标准 PC facade 只给当前菜单绑定的当前表注入菜单 Id,跨表调用不借用主表菜单。没有菜单入口的 SDK/定制页才使用最小【高级表权限】。
89
- - 后端接口引擎、后端表单 V8 和平台内部调用由服务端建立可信上下文,不要求 `_SysMenuId`;客户端伪造 `_TrustedServerInvocation` 或 `_InvokeType:'Server'` 不能获得信任。
90
- - `TableChild` 使用父记录范围内委托:验证父菜单、父表字段配置、子菜单、父记录数据范围和外键,并由服务端强制注入外键。隐藏子菜单不要求存量角色逐个补权限。
91
- - 菜单 `SqlWhere` / `SqlJoin` 只约束列表、计数、导出等集合查询;单行详情只校验同表菜单访问权。主表写入由 `Add` / `Edit` / `Del` / `Import` 专项权限控制,不把查询范围追加到写入 SQL,也不因查询 Join 拒绝。行级写业务限制放在后端表单 V8 或专用接口引擎。
92
-
93
- ### 保护表、控制面与缓存
94
-
95
- - SaaS、接口引擎、表/字段、菜单角色、用户、任务、数据源、MQ/MQTT、页面、打印、工作流、数据库、应用商城、AI 与安全审计等保护表,普通客户端 `Level < 9999` 硬拒绝;菜单或表权限不能覆盖。
96
- - 创建 V8、接口引擎、任务、数据源和 Redis 管理等控制面 API 继续要求 `Level >= 9999`。不能只靠前端隐藏菜单。
97
- - 权限缓存使用按 `OsClient` 隔离的共享 Redis `epoch`、用户快照、短 TTL L1/L2。用户/角色/菜单/权限变化后提升 `epoch`;验收至少使用两个节点确认无需清 Redis或重启即可生效。
98
- - Upgrade15 只清理普通角色的保护表直接授权,不能删除正常业务菜单权限。
99
-
100
- ### 上传、私有文件与 SaaS
101
-
102
- - 上传业务默认值为 100 MB/文件、200 MB/次、10 文件、2 GB/帐号/日、20 GB/租户/日。有效值只按当前租户 `sys_osclients` → 代码安全默认值解析,租户可以提高或降低业务默认值;不得为上传开关、额度或硬上限新增 API 环境变量或 `appsettings` 节点。最终仍受代码内不可突破的灾难保护、HTTP/Multipart/Form 和反向代理上限约束。共享 Redis 原子预留,Redis 故障失败关闭。
103
- - 无字段上下文的普通交互式上传默认私有桶,一级安全目录为 `file`、`img`、`avatar`、`editor`;可由管理员在普通 `sys_config.HdfsUploadRules` 按真实角色授权业务目录与公有权限。通配符必须有界并先校验实际路径,保留目录与跨租户不能放行。标准表单仍按权威字段配置执行。可信后端 V8 仍受全局文件大小硬上限。
104
- - 普通客户端私有文件签名必须提交 `FormEngineKey`、`FormDataId`、`FieldId`、`SysMenuId` 并验证记录字段真实引用;不能把后端 `V8.Method.GetPrivateFileUrl({FilePathName})` 的可信调用方式照搬到浏览器。
105
- - Upgrade16 六个上传字段全部可空,空值保持老租户兼容;升级后回读字段元数据、租户值并刷新 SaaS 缓存。
106
- - `V8.OsClientModel` / `V8.SysConfig` 只使用脱敏副本,不返回整个对象。新租户不能复制主租户整条 `sys_osclients`;数据库、认证、Redis、存储、MQ/MQTT、搜索凭据必须独立创建或由服务端托管。
107
- - Redis 管理器只允许超级管理员使用当前租户或已保存连接;匿名/temporary 任意 Host 连接必须拒绝,MCP 写操作必须 `confirmExecution`,禁止传递 Redis 密码。
108
-
109
- ### 网络、登录和发布兼容
110
-
111
- - `CorsAllowOrigins` 和全局 CORS 来源都为空时默认允许任意来源;配置后才按精确来源/通配符收紧。CORS 不是鉴权边界。
112
- - 严格 SSRF 默认关闭,未配置时不得拒绝存量非 HTTP(S)、URL 凭据、私网、云元数据和重定向调用;显式启用后才执行严格拦截与精确主机白名单。
113
- - 登录 RSA 仅避免密码在请求体直接显示,HTTPS 才是安全边界。必须保留历史 RSA fallback,专属公私钥成对切换,不能因删除旧常量造成所有客户无法登录。
114
- - 登录传 `_ClientType`,请求携带稳定 `did`,每次响应接收 `authorization`。多标签续签 single-flight;`TokenReplaced` 先检查新 Token,旧响应不能清掉新登录态。
115
- - 安全升级不得删除私有子 Git 的 `Microi.Server/Microi.net/License/keys/`。授权签名资产与登录 RSA 用途不同,禁止以安全清理为由混删。
116
- - 不得修改默认 CORS/SSRF/RSA 行为后只用新装环境验收;必须覆盖旧前端、历史 V8、滚动升级和至少两个节点。
117
-
118
- ### 安全自动化最低断言
119
-
120
- 1. 普通角色保护表读写、伪造菜单、伪造可信标记均失败。
121
- 2. 真实菜单、历史无菜单推断和父记录范围内 TableChild 均成功,跨父记录失败。
122
- 3. 查询范围在列表、计数、导出中生效;详情按同表菜单访问权成功;有写权限的单表/Join 模块写入成功,无写权限失败,后端 V8 行级业务校验可回滚。
123
- 4. 节点 A 改权限后节点 B 无需重启生效。
124
- 5. 上传大小/数量/双日额度、多节点并发和 Redis 故障行为正确。
125
- 6. 私有文件跨菜单/记录/字段失败,授权访问成功,匿名失败。
126
- 7. CORS 空配置兼容、配置后收紧;SSRF 默认兼容、严格模式拦截。
127
- 8. 历史 RSA fallback 和专属匹配密钥均可登录;并发续签不反复退出。
128
- 9. SaaS 脱敏投影不包含基础设施密钥,Redis anonymous/temporary/非管理员管理失败。
129
-
130
- <!-- /microi-progressive:chunk -->
131
- <!-- microi-progressive:chunk id=microi-system-delivery-003 sha256=8e2891f2a149d6828b653b9f0735ea39a4df5ba60178c79f0e5b0065ce72ee84 -->
132
- ## 前端交付检查清单
133
-
134
- - 底部 tabBar 图标不 404。
135
- - 首页、分类、详情、Banner、头像、订单凭证图全部真实加载。
136
- - 主题切换是全局生效,不是只对一个页面生效。
137
- - 列表页和详情页显示同一主体名称、头像、状态,不能列表对、详情错。
138
- - 关联人名不得退化成“卖家BMB9”“匿名卖家”等可推断 Id 的兜底,除非确实无数据。
139
- - 关键业务资产不得默认选中第一条,必须用户手动选择。
140
- - 自己不能抢自己的单,不能约自己的单,必须给明确提示。
141
- - 消息/待办/约单/审核类提醒必须有未读角标,已读后消失。
142
- - 订单状态角标只给需要处理的状态,不给“全部/已完成/已取消”等静态分类堆数字。
143
-
144
79
  <!-- /microi-progressive:chunk -->
145
80
  <!-- microi-progressive:chunk id=microi-system-delivery-004 sha256=cc8ef54619f2f7a1dc3ba4268d02cbe678c855ba17e2d9e9ed3251ac0dc35e18 -->
146
81
  ## 交付完成定义
@@ -165,4 +100,6 @@ AI 零代码交付不能只验证管理员帐号和页面能打开。任何涉
165
100
 
166
101
  - [references/progressive-01-标准工作流.md](references/progressive-01-标准工作流.md):标准工作流
167
102
  - [references/progressive-02-自动化测试必须覆盖的坑.md](references/progressive-02-自动化测试必须覆盖的坑.md):自动化测试必须覆盖的坑;复盘记录格式
103
+ - [references/progressive-03-安全与跨端验收.md](references/progressive-03-安全与跨端验收.md):安全与跨端验收
104
+ - [references/context-quality.md](references/context-quality.md):质量优先、精确检索、引用、局部变更及定制应用验收
168
105
  <!-- microi-progressive:end -->
@@ -0,0 +1,56 @@
1
+ # 质量优先的上下文与增量开发
2
+ <!-- microi-progressive:chunk id=microi-system-delivery-008 sha256=0e9e14b98ac7ab7ca0bf1c4ef97bad2bf061d0c01b170325ddbaf961a02a0de4 -->
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
+ 评测必须同时检验资源完整、权限/事务/关系正确、局部差异精确和必要回归通过。任何质量退步都不接受;不通过删测试、减少验收或隐瞒失败来展示节省比例。
56
+ <!-- /microi-progressive:chunk -->
@@ -0,0 +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
+ ## 前端交付检查清单
60
+
61
+ - 底部 tabBar 图标不 404。
62
+ - 首页、分类、详情、Banner、头像、订单凭证图全部真实加载。
63
+ - 主题切换是全局生效,不是只对一个页面生效。
64
+ - 列表页和详情页显示同一主体名称、头像、状态,不能列表对、详情错。
65
+ - 关联人名不得退化成“卖家BMB9”“匿名卖家”等可推断 Id 的兜底,除非确实无数据。
66
+ - 关键业务资产不得默认选中第一条,必须用户手动选择。
67
+ - 自己不能抢自己的单,不能约自己的单,必须给明确提示。
68
+ - 消息/待办/约单/审核类提醒必须有未读角标,已读后消失。
69
+ - 订单状态角标只给需要处理的状态,不给“全部/已完成/已取消”等静态分类堆数字。
70
+
71
+ <!-- /microi-progressive:chunk -->
@@ -23,6 +23,12 @@ description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修
23
23
  通过 `microi_update_module` 的 module 对象维护同名字段,写后回读并发布模块引擎官方应用,
24
24
  不得把新配置写入废弃 `DiyConfig`。开关不删除 MoreBtns/PageBtns/FormBtns,也不能替代后端权限。
25
25
 
26
+ 模块【替换】中的 `[日志]/[评论]/[版本]文字替换` 对应物理字段
27
+ `sys_menu.DataLogTitle/DataCommentTitle/DataVersionTitle`(varchar100/Text,普通字段不设整行宽度)。
28
+ 空白恢复当前语言默认“日志/评论/版本”,桌面页面、弹窗、抽屉及移动端使用同一标题,
29
+ 不改变角标、内容或权限。通过 `microi_update_module` 同名字段维护并回读;先升级模块引擎应用,
30
+ 同时同步所有共享 sys_menu 的官方包 PhysicalColumns,不写入废弃 DiyConfig 或默认租户标题种子。
31
+
26
32
  多选搜索必须显示可读的选项 Label;折叠时至少保留首个标签,其余可用数量和浮层呈现。
27
33
  不得仅因 DOM 有文字就判定回显成功,需验证窄搜索槽位中的真实宽度、90~110 密度、选项
28
34
  Key/Label 映射、清除与查询条件一致;不能为修复显示改动实际查询 Key 或业务数据源。
@@ -215,7 +215,7 @@ Microi 项目必须支持用户或项目级形态偏好:`data-mci-shape="round
215
215
  - **弹窗与抽屉边界有区别**:表单对话框采用中性细边界、柔和遮罩与模糊背景,标题顶部不加装饰色线;抽屉必须贴边且无圆角,可在顶部保留克制的 2–3px 主题色识别线。两者都使用连续的柔和表单画布和紧凑操作区;设计器双击字段弹窗必须可拖动,并继续提供控件专项配置入口。
216
216
  - **平台 Dialog 统一壳**:除 Drawer 外,框架弹层、微应用弹层、系统设置、商城、通知与业务表单默认使用 20–24px 大圆角、上下左右居中、标题栏可拖动的 Dialog;禁止页面自行恢复方角壳或顶部主题色粗线。标题栏左侧依次提供语义图标、英文眉题、大字标题和可选小字副标题;右上关闭按钮与标题区垂直居中并必须有可辨识的按钮底色。内容区使用连续、固定的柔和背景和整齐栅格;底部操作区右对齐大号关闭/保存按钮,两者都带语义图标。拖动与窗口缩放必须按弹层真实宽高重新约束,四边至少保留 8–18px 可视余量,不得把内容拖出视口。Teleport 到 `body` 的微应用弹层必须在弹层根同步 `data-mci-ui-root`、主题与必要 token,不能只依赖原祖先 CSS 变量。遮罩毛玻璃由 `sys_config.FormMaskBlur=1/true` 全局显式开启,缺失或 `0/false` 默认关闭;`prefers-reduced-motion` 只能停止动画与过渡,不得擅自反转静态毛玻璃配置。
217
217
  - **Dialog 关闭按钮可见性**:右上关闭按钮固定使用 40×40px(移动端不低于 40px)中性灰底、细边框和 10–12px 圆角,不能只显示悬空的细线 X;亮色和暗色主题都必须保持可辨识背景。hover/focus-visible 时使用更深一级灰底、主题色图标和清晰焦点环。底部关闭/取消/保存按钮高度不低于 42px、最小宽度 96px,并保持右对齐与 12px 间距。
218
- - **Tabs 统一视觉**:顶部工作区、数据列表 PageTabs、表单 Tabs 与右侧关联数据 Tabs 使用同一套清爽、独立标签视觉。横向 Tabs 禁止铺设贯穿整行的有色轨道、边框底板、下划线或其它装饰线;未选项保持透明,悬停与选中只使用克制的文字色、浅色独立表面和轻阴影。纵向 Tabs 可使用截图式中性浅色分组容器,选中项是独立浅色卡片。数字角标放在标签文本之后且不得挤压标题;过渡只用于交互,并尊重 `prefers-reduced-motion`。
218
+ - **Tabs 统一视觉**:顶部工作区、数据列表 PageTabs、表单 Tabs 与右侧关联数据 Tabs 使用同一套清爽、独立标签视觉。横向 Tabs 禁止铺设贯穿整行的有色轨道、边框底板、下划线或其它装饰线;未选项保持透明,悬停与选中只使用克制的文字色、浅色独立表面和轻阴影。纵向 Tabs 可使用截图式中性浅色分组容器,选中项是独立浅色卡片。数字角标放在标签文本之后且不得挤压标题;过渡只用于交互,并尊重 `prefers-reduced-motion`。框架 `Top/TopSide` 的一级主导航属于站点导航,使用独立短底线标识当前位置,不将该样式扩散到上述 Tabs。
219
219
  - **表格与卡片行为完整**:桌面数据卡片采用连续白色表面、弱边界和轻阴影,操作区不得再叠加有色底板或硬分割线;表格模块门头的标题/副标题卡片与每个动态统计卡片必须彼此独立,父布局保持透明,禁止用一个大卡片或外框把标题和全部统计项包在一起。表格默认取消无意义的纵向网格,只保留浅表头与轻量横向行节奏,工具栏和分页不得层层套框。`PageBtns`、`BatchSelect`、行内/行外 V8 按钮均不可因改版丢失;需多选而当前未选中时,应先把当前记录纳入选中集再执行。
220
220
  - **启动状态可理解、可恢复**:Vue 挂载和业务就绪是两个状态。进度到 100% 后若仍在初始化,应显示“正在连接/后端响应较慢/仍在等待”等阶段文字;明确失败时提供原因摘要与刷新重试,禁止撤掉启动层后留下空白页。
221
221
  - **侧栏清爽但层级清晰**:压缩无效间距,保留足够点击区域、选中态、父子层级和键盘焦点;颜色、圆角、阴影必须来自主题 token。