@microi.net/cli 5.9.7 → 5.9.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.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +43 -43
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/assets/build-meta.json +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +82 -82
- package/scripts/microi-cli.js +54 -54
- package/scripts/microi-skills.meta.json +212 -221
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +42 -68
- package/skills/microi-client-frontend/SKILL.md +8 -2
- package/skills/microi-codex/SKILL.md +0 -3
- package/skills/microi-deployment/SKILL.md +6 -0
- package/skills/microi-docs-coverage/references/capability-map.md +1 -1
- package/skills/microi-system-delivery/SKILL.md +68 -5
- 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 +20 -2
- package/skills/microi-uniapp-frontend/SKILL.md +5 -1
- package/skills/module-engine/SKILL.md +10 -0
- package/skills/playwright-e2e/SKILL.md +2 -0
- package/skills/workspace-conventions/SKILL.md +181 -14
- package/skills/microi-system-delivery/references/context-quality.md +0 -56
- 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 +0 -71
- 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 +0 -180
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"generatedAt": "2026-10-16T10:07:03.043Z",
|
|
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": "
|
|
173
|
-
"originalLines":
|
|
172
|
+
"originalSha256": "55ca4a8abe9c6eb884c547b48ff581cc8d4bb03c29336939c65e0ae9056197db",
|
|
173
|
+
"originalLines": 712,
|
|
174
174
|
"prefixSha256": "19308dd1a04397f764cc5ab4fefe76093704564592396ce00482d28e952537b7",
|
|
175
175
|
"prefixBytes": 1400,
|
|
176
|
-
"entryLines":
|
|
176
|
+
"entryLines": 254,
|
|
177
177
|
"chunks": [
|
|
178
178
|
{
|
|
179
179
|
"id": "microi-client-frontend-000",
|
|
@@ -195,8 +195,8 @@
|
|
|
195
195
|
"id": "microi-client-frontend-002",
|
|
196
196
|
"ordinal": 2,
|
|
197
197
|
"destination": "microi-client-frontend/SKILL.md",
|
|
198
|
-
"sha256": "
|
|
199
|
-
"lines":
|
|
198
|
+
"sha256": "34b6dd5233aac8325da15be3dc3c6a866dbbe77fd93288d5b2ad194d646fcf08",
|
|
199
|
+
"lines": 118,
|
|
200
200
|
"heading": "2. 表单引擎三层结构"
|
|
201
201
|
},
|
|
202
202
|
{
|
|
@@ -763,11 +763,11 @@
|
|
|
763
763
|
]
|
|
764
764
|
},
|
|
765
765
|
"microi-system-delivery": {
|
|
766
|
-
"originalSha256": "
|
|
767
|
-
"originalLines":
|
|
768
|
-
"prefixSha256": "
|
|
769
|
-
"prefixBytes":
|
|
770
|
-
"entryLines":
|
|
766
|
+
"originalSha256": "5c70d405c7be421715eb2dd260b272733fc4426591528814e67b7a2e5e32ff83",
|
|
767
|
+
"originalLines": 646,
|
|
768
|
+
"prefixSha256": "be8886df24f891da364663ea8c4bfc010fba5505094347e4a97166c6e45fe2eb",
|
|
769
|
+
"prefixBytes": 4329,
|
|
770
|
+
"entryLines": 169,
|
|
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/
|
|
791
|
+
"destination": "microi-system-delivery/SKILL.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/
|
|
799
|
+
"destination": "microi-system-delivery/SKILL.md",
|
|
800
800
|
"sha256": "8e2891f2a149d6828b653b9f0735ea39a4df5ba60178c79f0e5b0065ce72ee84",
|
|
801
801
|
"lines": 13,
|
|
802
802
|
"heading": "前端交付检查清单"
|
|
@@ -821,8 +821,8 @@
|
|
|
821
821
|
"id": "microi-system-delivery-006",
|
|
822
822
|
"ordinal": 4,
|
|
823
823
|
"destination": "microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md",
|
|
824
|
-
"sha256": "
|
|
825
|
-
"lines":
|
|
824
|
+
"sha256": "3c429fa01c7c8b077ccb8bceca59ad0274f7b83e7989e2f21a861dd0e54f11aa",
|
|
825
|
+
"lines": 149,
|
|
826
826
|
"heading": "自动化测试必须覆盖的坑"
|
|
827
827
|
},
|
|
828
828
|
{
|
|
@@ -832,14 +832,6 @@
|
|
|
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": "质量优先的上下文与增量开发"
|
|
843
835
|
}
|
|
844
836
|
],
|
|
845
837
|
"references": [
|
|
@@ -855,18 +847,6 @@
|
|
|
855
847
|
"自动化测试必须覆盖的坑",
|
|
856
848
|
"复盘记录格式"
|
|
857
849
|
]
|
|
858
|
-
},
|
|
859
|
-
{
|
|
860
|
-
"path": "references/progressive-03-安全与跨端验收.md",
|
|
861
|
-
"headings": [
|
|
862
|
-
"安全与跨端验收"
|
|
863
|
-
]
|
|
864
|
-
},
|
|
865
|
-
{
|
|
866
|
-
"path": "references/context-quality.md",
|
|
867
|
-
"headings": [
|
|
868
|
-
"质量优先的上下文与增量开发"
|
|
869
|
-
]
|
|
870
850
|
}
|
|
871
851
|
]
|
|
872
852
|
},
|
|
@@ -980,11 +960,11 @@
|
|
|
980
960
|
]
|
|
981
961
|
},
|
|
982
962
|
"microi-uniapp-frontend": {
|
|
983
|
-
"originalSha256": "
|
|
984
|
-
"originalLines":
|
|
963
|
+
"originalSha256": "f3836deef4b4652d5f1df9907a10a573d1c99359ebb712ca86f9e7020f634836",
|
|
964
|
+
"originalLines": 558,
|
|
985
965
|
"prefixSha256": "55f2799d872b4b9682449adf2e554003eb8642c111af262cacf42265b99dd5f5",
|
|
986
966
|
"prefixBytes": 3040,
|
|
987
|
-
"entryLines":
|
|
967
|
+
"entryLines": 213,
|
|
988
968
|
"chunks": [
|
|
989
969
|
{
|
|
990
970
|
"id": "microi-uniapp-frontend-000",
|
|
@@ -998,8 +978,8 @@
|
|
|
998
978
|
"id": "microi-uniapp-frontend-001",
|
|
999
979
|
"ordinal": 1,
|
|
1000
980
|
"destination": "microi-uniapp-frontend/SKILL.md",
|
|
1001
|
-
"sha256": "
|
|
1002
|
-
"lines":
|
|
981
|
+
"sha256": "acfd8dd91195e7930896bd54e6ae7ce3d3982bdeb0d674d98337878eab1a5e82",
|
|
982
|
+
"lines": 31,
|
|
1003
983
|
"heading": "标准产品、视图协议与租户扩展"
|
|
1004
984
|
},
|
|
1005
985
|
{
|
|
@@ -1382,11 +1362,11 @@
|
|
|
1382
1362
|
]
|
|
1383
1363
|
},
|
|
1384
1364
|
"playwright-e2e": {
|
|
1385
|
-
"originalSha256": "
|
|
1386
|
-
"originalLines":
|
|
1387
|
-
"prefixSha256": "
|
|
1388
|
-
"prefixBytes":
|
|
1389
|
-
"entryLines":
|
|
1365
|
+
"originalSha256": "d48252ddcd363ab11c564bf448d2bdd0336a531327ef909bbc8fbb9cc7b34cfa",
|
|
1366
|
+
"originalLines": 809,
|
|
1367
|
+
"prefixSha256": "95075494656694f0912b7449b57333794ca437a5b2ee97d80b1b452aa8154392",
|
|
1368
|
+
"prefixBytes": 2492,
|
|
1369
|
+
"entryLines": 201,
|
|
1390
1370
|
"chunks": [
|
|
1391
1371
|
{
|
|
1392
1372
|
"id": "playwright-e2e-000",
|
|
@@ -3241,18 +3221,18 @@
|
|
|
3241
3221
|
]
|
|
3242
3222
|
},
|
|
3243
3223
|
"workspace-conventions": {
|
|
3244
|
-
"originalSha256": "
|
|
3245
|
-
"originalLines":
|
|
3246
|
-
"prefixSha256": "
|
|
3247
|
-
"prefixBytes":
|
|
3248
|
-
"entryLines":
|
|
3224
|
+
"originalSha256": "347085aeef939e8e91e9d0aedfe1208c5a147d234c16887c2af3ac026d73a9f5",
|
|
3225
|
+
"originalLines": 640,
|
|
3226
|
+
"prefixSha256": "b2c13c455cf052093f78881170151d3fb56c25cda2f837c9f6abc0c29e67fd30",
|
|
3227
|
+
"prefixBytes": 310,
|
|
3228
|
+
"entryLines": 285,
|
|
3249
3229
|
"chunks": [
|
|
3250
3230
|
{
|
|
3251
3231
|
"id": "workspace-conventions-000",
|
|
3252
3232
|
"ordinal": 0,
|
|
3253
3233
|
"destination": "workspace-conventions/SKILL.md",
|
|
3254
|
-
"sha256": "
|
|
3255
|
-
"lines":
|
|
3234
|
+
"sha256": "105657a606c31b5c06e3834c1d29d613d9456f04225e729ba92e69049053c074",
|
|
3235
|
+
"lines": 60,
|
|
3256
3236
|
"heading": "任务启动前 Skill 读取规则(强制)"
|
|
3257
3237
|
},
|
|
3258
3238
|
{
|
|
@@ -3266,7 +3246,7 @@
|
|
|
3266
3246
|
{
|
|
3267
3247
|
"id": "workspace-conventions-002",
|
|
3268
3248
|
"ordinal": 2,
|
|
3269
|
-
"destination": "workspace-conventions/
|
|
3249
|
+
"destination": "workspace-conventions/SKILL.md",
|
|
3270
3250
|
"sha256": "795821e68c0c347c68f8cdcb6e2f81defa9a172650216288c10d313075e3247d",
|
|
3271
3251
|
"lines": 16,
|
|
3272
3252
|
"heading": "分布式部署与重启安全规范(强制)"
|
|
@@ -3274,15 +3254,15 @@
|
|
|
3274
3254
|
{
|
|
3275
3255
|
"id": "workspace-conventions-003",
|
|
3276
3256
|
"ordinal": 3,
|
|
3277
|
-
"destination": "workspace-conventions/
|
|
3278
|
-
"sha256": "
|
|
3257
|
+
"destination": "workspace-conventions/SKILL.md",
|
|
3258
|
+
"sha256": "7e7a88134f51f7e5712e9a41cfe516bae45ea8e9cb418a93cc39adeff3f3cbb4",
|
|
3279
3259
|
"lines": 19,
|
|
3280
3260
|
"heading": "本地资源与 OOM 保护规范(强制)"
|
|
3281
3261
|
},
|
|
3282
3262
|
{
|
|
3283
3263
|
"id": "workspace-conventions-004",
|
|
3284
3264
|
"ordinal": 4,
|
|
3285
|
-
"destination": "workspace-conventions/
|
|
3265
|
+
"destination": "workspace-conventions/SKILL.md",
|
|
3286
3266
|
"sha256": "093ef306e8f2f873b76524ce69ce7fd5194cfa0b361bd564f0c767f88439a817",
|
|
3287
3267
|
"lines": 29,
|
|
3288
3268
|
"heading": "临时文件与 AI 产物放置规则(强制)"
|
|
@@ -3290,7 +3270,7 @@
|
|
|
3290
3270
|
{
|
|
3291
3271
|
"id": "workspace-conventions-005",
|
|
3292
3272
|
"ordinal": 5,
|
|
3293
|
-
"destination": "workspace-conventions/
|
|
3273
|
+
"destination": "workspace-conventions/SKILL.md",
|
|
3294
3274
|
"sha256": "f627ee155b40014af76926b3a432601aa3f6bec5a7eb98ca0540c83fa41f1e5a",
|
|
3295
3275
|
"lines": 32,
|
|
3296
3276
|
"heading": "Microi 源码路径速查(工作区根相对路径)"
|
|
@@ -3298,7 +3278,7 @@
|
|
|
3298
3278
|
{
|
|
3299
3279
|
"id": "workspace-conventions-006",
|
|
3300
3280
|
"ordinal": 6,
|
|
3301
|
-
"destination": "workspace-conventions/
|
|
3281
|
+
"destination": "workspace-conventions/SKILL.md",
|
|
3302
3282
|
"sha256": "fb29cd39fe580e3e38df4c0483e5530f876697418f38b391aa421606c8fc6fe5",
|
|
3303
3283
|
"lines": 12,
|
|
3304
3284
|
"heading": "Skills 通用化原则"
|
|
@@ -3306,7 +3286,7 @@
|
|
|
3306
3286
|
{
|
|
3307
3287
|
"id": "workspace-conventions-007",
|
|
3308
3288
|
"ordinal": 7,
|
|
3309
|
-
"destination": "workspace-conventions/
|
|
3289
|
+
"destination": "workspace-conventions/SKILL.md",
|
|
3310
3290
|
"sha256": "c23d7942a3b6176b464fe267546c09dcadf990c2c243576c267c644b4502795d",
|
|
3311
3291
|
"lines": 11,
|
|
3312
3292
|
"heading": "Skills 中文优先规则"
|
|
@@ -3314,7 +3294,7 @@
|
|
|
3314
3294
|
{
|
|
3315
3295
|
"id": "workspace-conventions-008",
|
|
3316
3296
|
"ordinal": 8,
|
|
3317
|
-
"destination": "workspace-conventions/
|
|
3297
|
+
"destination": "workspace-conventions/SKILL.md",
|
|
3318
3298
|
"sha256": "cd38647f4ae3c186e247c06ce44b45e42ce7e664d58fbed82c93595547638a7c",
|
|
3319
3299
|
"lines": 11,
|
|
3320
3300
|
"heading": "官方文档原位增补与中文单源规则(强制)"
|
|
@@ -3322,8 +3302,8 @@
|
|
|
3322
3302
|
{
|
|
3323
3303
|
"id": "workspace-conventions-009",
|
|
3324
3304
|
"ordinal": 9,
|
|
3325
|
-
"destination": "workspace-conventions/
|
|
3326
|
-
"sha256": "
|
|
3305
|
+
"destination": "workspace-conventions/SKILL.md",
|
|
3306
|
+
"sha256": "43bdb1476a7751fbc251c933ccfbd1710c9269dec3e7e4b541cdaeea37d200f1",
|
|
3327
3307
|
"lines": 38,
|
|
3328
3308
|
"heading": "多对话共享工作区变更归属保护(强制)"
|
|
3329
3309
|
},
|
|
@@ -3613,12 +3593,6 @@
|
|
|
3613
3593
|
"headings": [
|
|
3614
3594
|
"CLI 与 IDE 插件错版共存约定"
|
|
3615
3595
|
]
|
|
3616
|
-
},
|
|
3617
|
-
{
|
|
3618
|
-
"path": "references/progressive-04-工作区与平台专项保障.md",
|
|
3619
|
-
"headings": [
|
|
3620
|
-
"工作区与平台专项保障"
|
|
3621
|
-
]
|
|
3622
3596
|
}
|
|
3623
3597
|
]
|
|
3624
3598
|
}
|
|
@@ -58,7 +58,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
58
58
|
---
|
|
59
59
|
|
|
60
60
|
<!-- /microi-progressive:chunk -->
|
|
61
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=
|
|
61
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=34b6dd5233aac8325da15be3dc3c6a866dbbe77fd93288d5b2ad194d646fcf08 -->
|
|
62
62
|
## 2. 表单引擎三层结构
|
|
63
63
|
|
|
64
64
|
### 模块级跨端视图
|
|
@@ -159,14 +159,20 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
159
159
|
|
|
160
160
|
- 边角风格先读取当前用户 `CornerStyle`:`round/square` 显式覆盖;空值或 `System` 继承租户 `sys_config.CornerStyle`,租户空值默认为圆角。不得把空个人值提前归一为 `round`,否则会阻断租户直角设置。
|
|
161
161
|
- 桌面经典布局使用 `NavigationLayout=Side/Top/TopSide`,个人空值或 `System` 继承租户,租户空值为侧边导航。`TopSide` 将一级放顶部,当前一级的二级及更深菜单复用原侧栏;单个子菜单仍留在侧栏,无可见子菜单时隐藏侧栏并释放内容宽度。侧栏仍支持收起及 `MenuChildExpandMode=System/Down/Right`。顶部导航复用当前权限路由、角标与外链,空间不足收纳到更多菜单;移动端仍采用底部导航。当前路由与一级归属由 `hybrid-navigation.js` 统一投影,禁止修改共享权限树。
|
|
162
|
-
- 顶部导航整行(含功能图标和账号姓名)使用主题运行时的 `--sidebar-*`
|
|
162
|
+
- 顶部导航整行(含功能图标和账号姓名)使用主题运行时的 `--sidebar-*` 可读表面与前景;主题面板和业务弹层保留自身语义表面。主题入口为齿轮,界面密度在同一主题面板调整,已安装 `sys_user.UiDensityScale` 时保存当前账号、个人空值继承 `sys_config.UiDensityScale`,旧租户才使用按租户/账号隔离的设备回退;AI 入口使用圆圈内 AI 字母 SVG,不能回退魔法棒或图片。
|
|
163
163
|
- 头像菜单【修改密码】使用标准 `DiyCustomDialog + MicroAppDialog` 打开现有平台服务 `/personal-settings`,仅传 `Data.Action=ChangePassword` 选择密码展示模式;不能用宿主输入决定目标账号/租户,不新建密码旁路。当前密码校验、Passkey/TOTP/严格人脸一次性票据与提交继续复用个人中心,成功或卸载清除密码输入。定向回归使用 `hybrid-navigation.spec.mjs`、`password-dialog.spec.mjs` 和个人偏好资源测试。
|
|
164
164
|
- 桌面壳层使用视口高度与可收缩的 flex 内容区,只有路由内容滚动,导航和 Tab 不随页面滚动;移动端仍保留文档滚动。用户入口含头像与姓名,不能使用纯图标的固定 flex 宽度;异步图表须在真实 DOM 挂载后观察尺寸变化,避免侧边/顶部导航切换后撑破卡片。
|
|
165
165
|
- 主题色、浅色/深色、菜单子级展开方式等需要“换设备仍生效”的选择必须保存到当前 DiyToken 用户的 `sys_user` 白名单字段;`localStorage` 只作为未安装新字段租户和匿名启动阶段的兼容回退,不能作为跨设备事实源。
|
|
166
166
|
- 已安装用户偏好字段时优先级固定为“当前用户显式值 → 租户 `sys_config` → 平台安全默认”;个人菜单值 `System` 表示继承租户配置。不得让上一位用户的浏览器本地主题覆盖下一位已登录用户。
|
|
167
|
+
- 主题面板的主题色、亮暗模式、边角、导航、菜单展开、密度、三个装饰开关及登录风格均有同名系统全局默认,不新建重复字段。`framework-appearance.js` 统一应用运行状态;渲染继承值不能写成个人选择。`UiDensityScale` 安全范围为 90~110、步长 5,覆盖表单标签/普通控件、系统设置表单、侧栏、表格、Tab 与 Teleport 弹层;富文本、代码、地图和子表保持内容高度,触屏最小目标仍为 44px。
|
|
168
|
+
- 【恢复默认】沿原保存队列把 `ThemeMode/ThemeColor` 清空、`CornerStyle/NavigationLayout/MenuChildExpandMode/LoginStyle` 写 `System`、`UiDensityScale/DisableGradient/DisableShadow/DisableButtonIcon` 写 `null`,只作用当前用户。同时清旧设备回退与本身份缓存;不能修改 `sys_config` 或把平台默认值写成个人覆盖。开关 `0` 与 `null` 语义不同:`0` 可覆盖全局 `1`,`null` 继承全局。
|
|
169
|
+
- `DisableGradient/DisableShadow/DisableButtonIcon` 同时支持个人与租户默认,根标识分别为 `data-mci-disable-gradient/shadow/button-icon`。去装饰仍保留输入边界、键盘焦点、加载指示与纯图标操作。登录样式 `LoginStyle=Original/Minimal/Split/Console` 复用一套业务 mixin 与表单,不复制验证码、SSO、强认证、协议及回跳逻辑;匿名读取当前租户默认或本匿名上下文明确预览,不能读取上一账号的个人值。
|
|
170
|
+
- `sys_config.HideFrameworkFunctions` 只控制顶栏入口,固定 Key 为 `Chat/BackgroundTasks/Search/Language/Theme/AI/Bluetooth/SystemStyle/FullScreen`,账号头像姓名始终保留。它与控制移动端等范围的原 AI 禁用开关独立,也不能代替功能权限。所有入口提供 `data-framework-function` 便于验收,未知 Key 忽略。
|
|
171
|
+
- 新增全局开关 CSS 必须检查编译后选择器;scoped 中 `:global(html[attr]) .child` 会丢失后代范围,禁止用它隐藏装饰。使用独立非 scoped 且有完整登录/框架作用域的样式,或将完整选择器放进 `:global(...)`;必须断言开启全部开关时根 html、body、框架与弹层仍可见。
|
|
167
172
|
- 自助保存优先使用官方 `Managed` 接口引擎,由 `V8.CurrentUser.Id` 与 `V8.OsClient` 推导用户和租户,并在服务端构造固定白名单更新对象;接口参数禁止决定目标 Id/OsClient,也禁止写入 Account、Phone、Tenant、Dept、Role、Level、State、Pwd、认证因子和登录审计字段。只有缺少可复用可信原子能力时才新增 C# DTO/端点。保存成功后调用 `V8.Method.RefreshLoginUser` 刷新登录缓存,并让微服务宿主重新同步 `CurrentUser`。
|
|
168
173
|
- 右上角即时切换可以乐观应用并短防抖保存;远端保存失败时保留当前设备效果并明确提示。个人中心和右上角必须调用同一个应用包交付的白名单接口引擎(当前为 `platform-user-update-preferences`),不能分别形成两套字段、枚举或优先级。
|
|
169
174
|
- 导航切入或退出 `TopSide` 会重建顶栏组件;卸载前必须发送尚未保存的偏好,在途请求与后续选择共用按 store、API 地址、租户、账号和登录会话隔离的运行时队列。新顶栏继承失败状态和重试数据,旧响应不能覆盖更新的选择或跨账号合并队列;标准续签保留 `MicroiSessionId` 时也保留最终待保存选择,计算属性显式依赖 Pinia.Token。JWT 解码仅用于本地队列归属,服务端仍通过标准 DiyToken 验证授权;不得将会话凭据写入偏好存储、日志或响应。使用真实 Vue computed 和组件生命周期回归 `theme-select-autosave-lifecycle.spec.mjs` 验证卸载、在途合并、失败重试、续签及账号/租户/会话切换。
|
|
175
|
+
- 主题回归同时执行 `framework-appearance.spec.mjs`、`ui-density-runtime.spec.mjs` 与 `theme-select-autosave-lifecycle.spec.mjs`;真实浏览器至少验证 4K 系统设置与左菜单在 90/110 两档的尺寸变化、全局/个人继承与恢复、全部顶栏隐藏后账号仍在,以及装饰关闭后的亮暗和焦点可见性。
|
|
170
176
|
|
|
171
177
|
---
|
|
172
178
|
|
|
@@ -91,9 +91,6 @@ 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
|
-
|
|
97
94
|
- 连接、登录、拉取、推送、差异和 AI 初始化:使用 bundled CLI 的 `profile`、`auth`、`pull`、`push`、`sync status`、`ai init`、`mcp init`、`doctor`。
|
|
98
95
|
- 接口引擎、表单事件、模块、字段、工作流和数据库结构:先用 `action="list_tools"` / `describe_tool`,再调用对应原始 `microi_*` 工具。写工具必须保留确认口令、审计与回读。
|
|
99
96
|
- 远程执行与调试:读取 `v8-debugging/SKILL.md`。Codex 用“获取源码 → 远程执行 → 定位堆栈/日志 → 最小补丁 → 再执行”的结构化循环代替 VS Code DAP 的可视化逐行面板;不得把未执行的源码检查称为真机调试成功。
|
|
@@ -20,6 +20,12 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
|
|
|
20
20
|
- 文件/对象存储:`../v8-file-upload/SKILL.md`
|
|
21
21
|
- 数据库模型:`../microi-db-schema/SKILL.md`
|
|
22
22
|
|
|
23
|
+
## 发布测试范围
|
|
24
|
+
|
|
25
|
+
常规发布按用户指定 MCP 的实际 MySQL、MongoDB 版本、Redis 和生效 MinIO 或 OSS/HDFS 选择测试矩阵;SQL Server 真实服务与兼容专项仅在用户明确指定解决 SQL Server 问题时执行,不作为每轮发布的默认前置条件,也无需反复申请免测。本文中的“Full/重新 Full”均指当前选定矩阵,已选必测项仍须全部通过。
|
|
26
|
+
|
|
27
|
+
选择、旧脚本冲突处理及结果记录统一读取 [发布测试矩阵](../microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md#按指定-mcp-选择发布测试矩阵) 和 `../workspace-conventions/SKILL.md`;实际目标未使用的提供商不能被虚构为已验证。
|
|
28
|
+
|
|
23
29
|
## 先确认部署类型
|
|
24
30
|
|
|
25
31
|
### 吾码服务器运维面板 Microi.Panel
|
|
@@ -34,7 +34,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
34
34
|
| `more/office.md` | v8-export-import, microi-microservice | Office 导入导出与在线编辑集成 |
|
|
35
35
|
| `more/security.md` | v8-security | 平台安全和兼容基线 |
|
|
36
36
|
| `more/sso.md` | microi-sso, v8-security, app-store | 双向 OIDC/SAML2/CAS、账号映射、协议端点、安全基线、商城发布与验收 |
|
|
37
|
-
| `more/sys-config.md` | v8-utilities, microi-deployment |
|
|
37
|
+
| `more/sys-config.md` | v8-utilities, microi-deployment, microi-client-frontend | 系统/租户配置、全局主题与个人覆盖、框架显隐和敏感边界 |
|
|
38
38
|
| `system-engine/ai-engine.md` | ai-engine, v8-http-integration, microi-ai-application | 模型代理、License、V8.AI、MCP 对话、跨端调用和安全 |
|
|
39
39
|
| `system-engine/ai-cad.md` | ai-engine, v8-api-config, microi-ai-application, app-store | 吾码接口引擎到 SolidWorks 桌面插件的参数计划、模型回读、BOM 与图纸交付边界 |
|
|
40
40
|
| `system-engine/digital-human-live.md` | ai-engine, microi-microservice, app-store, playwright-e2e | 自建数字人直播、本机推理、话术知识、OBS 接入、4K 功能截图与实测边界 |
|
|
@@ -11,15 +11,13 @@ description: 已初始化吾码工作区的默认 AI 开发总控入口,用户
|
|
|
11
11
|
|
|
12
12
|
本 Skill 是已初始化吾码工作区的默认开发总控入口。用户直接描述需求即可,无需指定 Skill 名称;
|
|
13
13
|
目标 MCP 连接可沿用当前项目或唯一已登录连接,需求文件/验收地址按需提供。
|
|
14
|
-
|
|
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
|
-
|
|
23
21
|
按本次实际能力读取相关 Skill,不能只读总控入口后凭记忆实现:
|
|
24
22
|
|
|
25
23
|
| 工作内容 | 相关 Skill |
|
|
@@ -76,6 +74,73 @@ Manifest 使用 `tables[].formBanner`;未显式配置时仍按字段类型选
|
|
|
76
74
|
|
|
77
75
|
最终回复必须按原始编号逐项汇总:哪些已实现、哪些未实现、是否通过全自动化测试、是否通过截图验证。不能只给总括性“都完成了”。如果某项没有测试或没有截图,必须明说“未覆盖/未截图”,并说明原因。
|
|
78
76
|
|
|
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
|
+
|
|
79
144
|
<!-- /microi-progressive:chunk -->
|
|
80
145
|
<!-- microi-progressive:chunk id=microi-system-delivery-004 sha256=cc8ef54619f2f7a1dc3ba4268d02cbe678c855ba17e2d9e9ed3251ac0dc35e18 -->
|
|
81
146
|
## 交付完成定义
|
|
@@ -100,6 +165,4 @@ Manifest 使用 `tables[].formBanner`;未显式配置时仍按字段类型选
|
|
|
100
165
|
|
|
101
166
|
- [references/progressive-01-标准工作流.md](references/progressive-01-标准工作流.md):标准工作流
|
|
102
167
|
- [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):质量优先、精确检索、引用、局部变更及定制应用验收
|
|
105
168
|
<!-- microi-progressive:end -->
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-system-delivery-006 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-system-delivery-006 sha256=3c429fa01c7c8b077ccb8bceca59ad0274f7b83e7989e2f21a861dd0e54f11aa -->
|
|
6
6
|
## 自动化测试必须覆盖的坑
|
|
7
7
|
|
|
8
8
|
### 后端统一测试与发布门禁
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
`MICROI_TEST_ALLOW_WRITES=YES`。只有用户明确授权时才可对真实租户执行;
|
|
25
25
|
真实租户默认只做登录和只读烟测,写入必须限定到名称/说明明确为自动化
|
|
26
26
|
测试用途的专用表,并使用唯一前缀、`finally` 清理和清理回读。
|
|
27
|
-
- Full 的本地程序与依赖按 `../../workspace-conventions/SKILL.md` 的“本地测试程序与依赖生命周期”执行:优先复用健康的本地源码程序、隔离目录中的编译产物和同组既有依赖,以租户、数据库或命名空间隔离测试,不按任务重复创建 Docker/Compose
|
|
27
|
+
- Full 的本地程序与依赖按 `../../workspace-conventions/SKILL.md` 的“本地测试程序与依赖生命周期”执行:优先复用健康的本地源码程序、隔离目录中的编译产物和同组既有依赖,以租户、数据库或命名空间隔离测试,不按任务重复创建 Docker/Compose。每次测试成功、失败、取消或因资源不足暂停时,都结束本次自有测试进程并收回新建临时容器,独立回读进程、端口和容器状态;既有共享服务保持原状。这些生命周期要求不减少当前选定 Full 矩阵的用例、断言或发布门禁。
|
|
28
28
|
- Full 至少覆盖完整 Release 构建、FormEngine 单条/批量/按条件 CRUD、
|
|
29
29
|
查询和计数、ApiEngine GET/JSON POST、API 实际启动与健康检查、真实登录、
|
|
30
30
|
匿名系统配置脱敏、清理回读、NuGet 漏洞/弃用审计。NuGet 全面升级后不能
|
|
@@ -41,6 +41,24 @@
|
|
|
41
41
|
Redis/MongoDB 短暂故障、响应前重启和新旧版本共存。
|
|
42
42
|
两节点默认是两个本机源码或编译产物程序进程连接同组依赖,不等于两套 Docker 环境;破坏性故障测试仅作用于明确归属的隔离资源,不能停止复用的共享数据库或缓存。
|
|
43
43
|
|
|
44
|
+
### 按指定 MCP 选择发布测试矩阵
|
|
45
|
+
|
|
46
|
+
测试范围以 `workspace-conventions/SKILL.md` 的“平台回归与独立应用测试归属”为准。常规发布先核实用户指定的 Profile、ApiBase、OsClient 和实际依赖,再冻结本次必测清单;不能从本机恰好存在的连接或历史 Full 清单推导额外兼容矩阵。
|
|
47
|
+
|
|
48
|
+
| 依赖 | 常规发布范围 | 验收依据 |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| MySQL | 指定 MCP 实际使用的服务与版本 | 隔离数据的 CRUD、事务、升级兼容及清理回读 |
|
|
51
|
+
| MongoDB | 指定 MCP 实际使用的版本 | 实际读写、索引及本次功能相关持久化;不默认同时要求旧版和新版 |
|
|
52
|
+
| Redis | 指定 MCP 对应的实例与隔离命名空间 | 会话、缓存、TTL、锁或任务等本次链路,以及清理回读 |
|
|
53
|
+
| MinIO 或 OSS/HDFS | 该租户当前生效的提供商 | 实际上传、下载字节/哈希、公开/私有访问权限与自有测试对象清理;路由单测不能代替真实文件闭环 |
|
|
54
|
+
| SQL Server | 仅用户明确指定排查、修复或验收 SQL Server 问题时加入 | 对应版本、隔离连接与问题回归;常规发布标“不适用(未执行)” |
|
|
55
|
+
|
|
56
|
+
- 通用编译、离线单元/组件、安全、登录、业务闭环和候选源码/产物哈希校验仍按变更范围执行;指定依赖测试不能替代这些质量要求。
|
|
57
|
+
- 只有所选矩阵中的必测项才参与环境完整性与零失败、零跳过门禁。没有选择的 SQL Server 专项不属于失败、待办或需要再次申请的免测;不得报告为已通过。其他提供商或跨版本矩阵也只按明确的专项需求扩展。
|
|
58
|
+
- 混合 MySQL/SQL Server 用例必须按提供商独立选择夹具与断言;不能要求两种连接同时存在才运行 MySQL,也不能按整类排除而漏掉仍必测的 MySQL 行。
|
|
59
|
+
- 旧脚本若仍硬编码 SQL Server 必填、MongoDB 多版本齐备或全提供商清单,先按本规则适配矩阵选择和结果统计,再使用正式发布入口。禁止每轮要求用户重新批准 SQL Server 免测、只删除必填变量、吞掉 skipped/失败或绕过一键发布门禁。
|
|
60
|
+
- 记录目标 MCP、所选依赖/版本、用例数量、实际结果、不适用边界、候选哈希及资源回收证据;已选必测环境不可用时仍如实停止。生产故障注入或新增 Docker 依赖继续需要对应授权。
|
|
61
|
+
|
|
44
62
|
### 登录与账号密码
|
|
45
63
|
|
|
46
64
|
- E2E 必须支持提前录入测试账号密码:`PW_TEST_ACCOUNT`、`PW_TEST_PASSWORD`、`PW_LOGIN_ENGINE`。
|
|
@@ -26,9 +26,13 @@ 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=
|
|
29
|
+
<!-- microi-progressive:chunk id=microi-uniapp-frontend-001 sha256=acfd8dd91195e7930896bd54e6ae7ce3d3982bdeb0d674d98337878eab1a5e82 -->
|
|
30
30
|
## 标准产品、视图协议与租户扩展
|
|
31
31
|
|
|
32
|
+
地图提供行政区与附近距离两类筛选时,应复用省市区字典,并允许省、市、区逐级选“全部”;省级“全部”须显式启用,不能改变普通地址录入的默认值。行政区域查询不依赖手机定位、不叠加附近半径,空地区仍可保留既有附近模式。范围筛选必须在原有菜单/租户/行权限内执行,分批读取并丢弃迟到响应;来源列表存在同表不同菜单时,地图入口与查询应保留准确的来源菜单和固定业务条件。验收覆盖全国、全省、全市、区县、直辖市、定位拒绝、旧接口兼容和快速切换。
|
|
33
|
+
|
|
34
|
+
历史经纬度列可能是 `varchar`,距离范围边界必须以 JSON 数值传输并绑定数值参数;`toFixed()` 返回字符串,须显式转回 `Number`。回归必须覆盖经度边界跨两位/三位数、纬度跨零及扩大半径后结果不减少,并用真实数据库只读比较文本参数与数值参数,不能只用数字坐标夹具验证前端距离函数。
|
|
35
|
+
|
|
32
36
|
动态表单的组织/树字段优先复用原生 `mci-native-field` 树形下拉与 `native-tree-options.mjs`,无需为小程序把后台 `Department` 改为普通 Select。读取 `Config.<Component>.Multiple/EmitPath`:组织单选叶值保存 Id,多选叶值保存 Id 数组,路径模式保存完整路径/路径数组,数组统一 JSON 序列化。支持祖先展开、搜索、清空、禁用、重试和只读回显;数据源旧模板不能代替当前授权组织树。业务字段联动放租户扩展,不执行任意前端 V8;验收覆盖保存格式、旧数据回显、失败/迟到响应及最近公司祖先联动。
|
|
33
37
|
|
|
34
38
|
Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile + 租户插件”架构,不能把某个交付项目直接写死成平台产品:
|
|
@@ -17,6 +17,16 @@ description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修
|
|
|
17
17
|
代码字段是否显示按钮由各字段 `Config.CodeEditor.DisplayMode` 决定,禁止按 `sys_menu` 表名强制覆盖;
|
|
18
18
|
未配置时默认 `Inline`,需要紧凑按钮的字段显式保存 `Dialog`。
|
|
19
19
|
|
|
20
|
+
列表【更多功能】使用与【更多搜索】一致的次级按钮样式。模块物理字段
|
|
21
|
+
`sys_menu.HideMoreFunctions` 对应【隐藏更多功能】,只有明确 `1/true` 隐藏当前模块入口,
|
|
22
|
+
缺失/空/0 保持显示;嵌入页 `PropsHideMoreFunctions=true` 同样可隐藏当前实例。
|
|
23
|
+
通过 `microi_update_module` 的 module 对象维护同名字段,写后回读并发布模块引擎官方应用,
|
|
24
|
+
不得把新配置写入废弃 `DiyConfig`。开关不删除 MoreBtns/PageBtns/FormBtns,也不能替代后端权限。
|
|
25
|
+
|
|
26
|
+
多选搜索必须显示可读的选项 Label;折叠时至少保留首个标签,其余可用数量和浮层呈现。
|
|
27
|
+
不得仅因 DOM 有文字就判定回显成功,需验证窄搜索槽位中的真实宽度、90~110 密度、选项
|
|
28
|
+
Key/Label 映射、清除与查询条件一致;不能为修复显示改动实际查询 Key 或业务数据源。
|
|
29
|
+
|
|
20
30
|
## 必读参考
|
|
21
31
|
|
|
22
32
|
- 字段、打开方式、查询配置、ViewSchema 和接口替换:
|
|
@@ -15,6 +15,8 @@ description: 按 Microi 系统真实业务逻辑进行 Playwright 全自动化
|
|
|
15
15
|
|
|
16
16
|
`E2E` 是 `End-to-End`,中文通常叫"端到端测试"。它强调从用户入口开始,穿过前端页面、接口引擎、表单引擎、权限、缓存、数据库等真实链路,验证一条业务路径是否真的可交付。
|
|
17
17
|
|
|
18
|
+
真实依赖与发布范围沿用 `../workspace-conventions/SKILL.md` 的“平台回归与独立应用测试归属”:常规验证指定 MCP 实际使用的 MySQL、MongoDB、Redis 和 MinIO 或 OSS/HDFS,不要求额外 SQL Server 环境;仅用户明确指定 SQL Server 问题时才做其专项。按 [发布测试矩阵](../microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md#按指定-mcp-选择发布测试矩阵) 记录实际覆盖,保留正常登录、业务闭环与资源收尾,不以连接成功代替真实读写验收。
|
|
19
|
+
|
|
18
20
|
<!-- microi-progressive:begin -->
|
|
19
21
|
<!-- microi-progressive:chunk id=playwright-e2e-000 sha256=a6ef528a2a940fd0f58efaee6b73eb5dbc159db93d95afedf41c7b8642536d18 -->
|
|
20
22
|
## 是否需要 `-e2e` 后缀
|