openxiangda 2.69.1 → 2.70.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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  授权由四层组成:页面/操作 capability、行谓词、字段 read,以及字段 create/update。前端只消费平台返回的最终访问结果来隐藏按钮、只读输入和剔除 payload;平台每次请求重新执行权威校验。
4
4
 
5
- 涉及独立企业的上下级组织、跨学校身份或家校班级范围时,先读[多组织与家校目录](./multi-organization.md)。平台已有组织/成员/会话基础;V2 角色 reach、目录事实应用映射和组织行边界尚未完整接通,不能将当前普通角色并集、unrestricted 规则或前端 `corpId` 当成自动跨组织授权。
5
+ 涉及独立企业的上下级组织、跨学校身份或家校班级范围时,先读[多组织与家校目录](./multi-organization.md)。V2 已提供组织角色 reach、目录事实应用映射和组织行归属声明;执行这些边界需要目标平台部署配套 contracts、后端及正式 SQL。普通角色并集、unrestricted 规则或前端 `corpId` 不能自动产生跨组织授权;包发行、站点配套和真实角色验收仍须分别核验。
6
6
 
7
7
  以下仅以仪器管理应用举例,不是平台默认模型或角色。该示例的行规则是:学校管理员不受行谓词限制;学院管理员按记录 `collegeId` 匹配;仪器管理员按 `instrumentAdminIds` 包含当前用户匹配。不要增加影子范围字段。
8
8
 
@@ -247,3 +247,6 @@ SDK复用现有应用CSRF与512条命令绑定缓存,预览到期不会自动
247
247
  打印先筛选同一成员同时具备资料read及所有打印能力的资格,再沿原RLS、Perspective、字段读取与脱敏;不能把ALL-read职责和own-print职责合并成ALL-print。普通app-admin与平台超管分别验收。SDK `loadNativeRecordPrint(resourceCode, recordId, { viewCode? })` 只读当前单记录投影;公开 `ResourceRecordPrintPreview` 与生成Native详情中的“打印”入口共用它。字段权限仍使用页面/模型规则,不增加流程节点字段权限配置。
248
248
 
249
249
  预览显示读取时间、当前详情可见字段和分组。打印前重新读取当前授权数据,失败清除旧预览,身份/授权/Perspective变化和关闭淘汰过期请求。附件/图片只列名称及大小、富文本转安全文本,没有自动外部下载;系统打印取消不写业务资料。当前版本只支持主记录,详情包含可读子表返回409,超2MiB返回413,不静默漏项;专用PDF模板、签章与子表完整打印另行提供。独立权限保护平台的打印接口和标准入口,已读资料的截图/浏览器自行打印不属于可撤销许可。
250
+
251
+
252
+ 多组织应用使用 `role.organizationReach`、`authz.directoryRoleSources` 与 `resource.organization` 显式声明;来源字符串范围、可信用户组织及数据库行边界共同执行。声明、配套平台版本与目标站点实际启用分别核验。完整字段、上级内容下发、目录派生角色所有权、手工组织授权和限制见[多组织与家校目录](./multi-organization.md#authorization)。
@@ -222,3 +222,6 @@ image/signature/富文本图片字段在上传计划(initiate)里返回 `max
222
222
  省略/false关闭新入口;true绑定资源read,数组引用已有能力,不隐式生成能力。
223
223
  同一角色成员须同时满足资源read和全部历史能力,原行权限继续约束旧固定实例;该项独立于Native `audit.read`。
224
224
  标准Native详情和公开 `WorkflowRecordHistoryPanel` 可复用,参见[工作流历史](./workflow-events.md#record-history-read)。
225
+
226
+
227
+ 多组织应用使用 `role.organizationReach`、`authz.directoryRoleSources` 与 `resource.organization` 显式声明;来源字符串范围、可信用户组织及数据库行边界共同执行。声明、配套平台版本与目标站点实际启用分别核验。完整字段、上级内容下发、目录派生角色所有权、手工组织授权和限制见[多组织与家校目录](./multi-organization.md#authorization)。
@@ -68,10 +68,10 @@ MCP 服务随项目根包一起安装,AI 客户端的 stdio 连接仍需配置
68
68
  以下命令的版本占位符由随包资料替换为该根包的精确版本。网站源码阅读者应先确认要使用的发行版本。
69
69
 
70
70
  ```bash
71
- pnpm dlx openxiangda@2.69.1 skill install --force
72
- pnpm dlx openxiangda@2.69.1 auth status --base-url <平台地址> --json
73
- pnpm dlx openxiangda@2.69.1 login --cwd my-app --base-url https://platform.example.com
74
- pnpm dlx openxiangda@2.69.1 create my-app --base-url https://platform.example.com
71
+ pnpm dlx openxiangda@2.70.0 skill install --force
72
+ pnpm dlx openxiangda@2.70.0 auth status --base-url <平台地址> --json
73
+ pnpm dlx openxiangda@2.70.0 login --cwd my-app --base-url https://platform.example.com
74
+ pnpm dlx openxiangda@2.70.0 create my-app --base-url https://platform.example.com
75
75
  cd my-app
76
76
  pnpm openxiangda context --json
77
77
  pnpm openxiangda dev
@@ -221,9 +221,9 @@ MCP 的 `docs_read` 可以读取本说明,当前没有独立的源码操作 MC
221
221
  无需本地工作区,使用本 Skill 随包精确版本或已安装的对应 CLI:
222
222
 
223
223
  ```bash
224
- pnpm dlx openxiangda@2.69.1 auth status --base-url <平台> --json
225
- pnpm dlx openxiangda@2.69.1 source resolve <仓库URL> --base-url <平台> --json
226
- pnpm dlx openxiangda@2.69.1 source clone <仓库URL> <新目录> --base-url <平台> --json
224
+ pnpm dlx openxiangda@2.70.0 auth status --base-url <平台> --json
225
+ pnpm dlx openxiangda@2.70.0 source resolve <仓库URL> --base-url <平台> --json
226
+ pnpm dlx openxiangda@2.70.0 source clone <仓库URL> <新目录> --base-url <平台> --json
227
227
  ```
228
228
 
229
229
  登录缺失或站点不匹配时,先按该平台执行 login。resolve 根据平台已经登记的绑定返回
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "schemaVersion": "openxiangda.documentation/v1",
3
- "version": "2.69.1",
3
+ "version": "2.70.0",
4
4
  "topics": [
5
5
  {
6
6
  "id": "getting-started",
7
7
  "title": "安装与开始开发",
8
8
  "file": "getting-started.md",
9
- "sha256": "88715ad6a3e93ccaad5ad9409c21a2e3ecd42ccf46a257802d6e0f7fe8e8bc02"
9
+ "sha256": "659b9a1e62a75be6ebd0328bdf2e5dbd24016cd6b1ff3b8db087fcdf30d6b12d"
10
10
  },
11
11
  {
12
12
  "id": "product-design",
@@ -36,7 +36,7 @@
36
36
  "id": "declarations-cheatsheet",
37
37
  "title": "声明速查:一次写对 config",
38
38
  "file": "declarations-cheatsheet.md",
39
- "sha256": "69ef6d6c02424f2db6bc050e9dd84b39cd8b61f358dbb7cb8eefaf7eabb5ab9e"
39
+ "sha256": "91957b16bf2ca08059f6a602d6b2cb354b6c78cac8cbdab2920a5fef67c1354d"
40
40
  },
41
41
  {
42
42
  "id": "application-foundation",
@@ -78,13 +78,13 @@
78
78
  "id": "data-authz",
79
79
  "title": "数据查询与权限",
80
80
  "file": "data-authz.md",
81
- "sha256": "317ecd5c68c7a8713dfb01d96a82b58be0dff27cd5213374dacc68aa0c1911be"
81
+ "sha256": "de73eeb5e9940d2740f1f5ab62efbcec6dea648fffadf6be48ac47b38ec0c8e4"
82
82
  },
83
83
  {
84
84
  "id": "multi-organization",
85
85
  "title": "多组织、局校管理与家校目录",
86
86
  "file": "multi-organization.md",
87
- "sha256": "6810f3def86e43dcd36b57ec2504fba83535d0169e46fb66cca2c17a3de0e2ae"
87
+ "sha256": "1000d6e9eefb31c4a4659e0a074f5c836b4ccc7652d714dd236f7a67b345566d"
88
88
  },
89
89
  {
90
90
  "id": "public-access",
@@ -2,7 +2,7 @@
2
2
 
3
3
  教育局与多所学校各有独立钉钉企业、同一教师属于多个组织、家长的孩子在不同学校时,优先复用平台的组织与身份基础能力。应用不再建立第二份企业组织树、钉钉身份库或学校密钥配置。
4
4
 
5
- 本专题描述 2026-10-14 的源码契约基线。组织基础、本人目录角色事实读取和 SDK 组织上下文/切换生命周期已有配套实现;事实到应用角色、组织 reach 与跨组织数据权限仍有接入缺口。目标站点是否部署了这些接口,需现场核实;安装新工具或读到本专题不证明平台已经升级。
5
+ 本专题描述 2026-10-14 的源码契约基线。组织基础、本人目录角色事实读取、SDK 组织切换、目录事实到应用角色的投影及 Native 组织行边界已有配套实现。目标站点是否部署了这些接口,需现场核实;安装新工具或读到本专题不证明平台已经升级。
6
6
 
7
7
  ## AI 识别场景与选择能力 {#scenario}
8
8
 
@@ -26,9 +26,9 @@
26
26
  | 当前人的可切换组织 | 已有平台会话 HTTP 与 `loadCurrentOrganizationMemberships()` | 读取本人活动成员列表,显示对应企业/学校选项 |
27
27
  | 当前工作组织、同会话切换 | 已有平台登录上下文、SDK `activeOrganizationId` 和 `switchCurrentOrganization()` 生命周期 | 在支持本契约的会话中读取/切换;不能从 URL 直接产生授权 |
28
28
  | 组织管理授权 | 已实现平台管理员授予人/部门,祖先授权覆盖后代 | 管理操作由平台核验;不能把“教育局成员”当作“全区管理员” |
29
- | 应用角色 `self` / `subtree` | 传统平台角色 CRUD 能保存 `organizationReach`;V2 声明与执行尚未接通 | 在设计中明确每个角色的组织覆盖意图,不向 V2 config 填入未支持字段 |
30
- | 家校事实到应用角色、班级范围的消费 | 本人事实 HTTP/SDK 读取已实现;业务角色与班级范围映射尚未接通 | 声明拟使用哪些事实及范围,将接入列为依赖;不能凭空调用 SDK |
31
- | 组织数据归属、隔离、后代可见与公共内容下发 | Native Data API 的组织边界尚未接通 | 不能宣称已经自动隔离或继承,也不能用前端筛选代替服务端权限 |
29
+ | 应用角色 `self` / `subtree` | V2 声明、组织维度角色绑定和实时 SQL 准入已接通 | 声明每个角色的覆盖意图;旧应用未声明继续沿用原行为 |
30
+ | 家校事实到应用角色、班级范围的消费 | `authz.directoryRoleSources` 由平台投影到应用角色和字符串 scope | 使用真实来源角色事实,目录派生绑定不能手工覆盖;事实退休立即拒绝旧投影 |
31
+ | 组织数据归属、隔离、后代可见与内容下发 | `organization.mode=owned/inherited-down`、不可改归属及 RLS 已实现 | 声明策略并核验目标站点的配套能力,按真实组织角色验收允许和拒绝 |
32
32
  | 安装回调、每校自动定时同步、组织通知路由与链接生成 | 尚未完成整条自动接入 | 不假定安装完成后立即能登录,不假定消息自动选中正确安装 |
33
33
 
34
34
  平台管理组织的授权与应用业务授权是两种事实。能开通学校或查询组织树,不会自动获得该学校的业务数据权限;看到一条成员关系,也不会自动成为应用管理员。
@@ -102,7 +102,7 @@ SDK 通过应用 `/auth/organization/switch-surface` 取得真实浏览器会话
102
102
 
103
103
  成功、运输结果未知或服务器 5xx 时,SDK 失效旧授权、命令缓存和在途读取,通过 Runtime identity epoch 重读并重建页面。旧学校晚到的响应不会覆盖新学校数据。跨页只发送失效信号,不传身份或凭据;明确 4xx 拒绝保留原授权。切换写入不自动重放;结果未知先读回当前授权,不能把目标名称当成成功。组织切换不选择应用角色,也不是只收窄读取的 Perspective。
104
104
 
105
- 完整 V2 role reach 和组织数据策略仍未接通,不能把切换后的角色列表或字段传递当作组织隔离证明。
105
+ 角色与数据隔离通过下面的显式声明启用;切换后的角色列表或字段传递仍不能替代实际行权限验收。
106
106
 
107
107
  ### 管理面接口
108
108
 
@@ -129,24 +129,51 @@ SDK 通过应用 `/auth/organization/switch-surface` 取得真实浏览器会话
129
129
 
130
130
  SDK 使用 `loadCurrentDirectoryRoleFacts({ limit, after, signal })`,返回 `DirectoryRoleFactPage`,包含 organizationId、userId、items、nextCursor。每个 item 包含 id、subjectId、source、roleCode、scopeType、scopeValue。客户端拒绝与当前 identity 不同组织/用户的响应,并在组织变化时丢弃旧读取,不自动拉取全部页面。
131
131
 
132
- 读取来源事实不授予应用能力。业务角色、班级范围的可执行声明仍是后续接入项;不能以管理 upsert 或复制应用通讯录替代。
132
+ 读取来源事实不授予应用能力。使用下面的 `directoryRoleSources` 声明由平台派生角色及班级范围;不能以管理 upsert 或复制应用通讯录替代。
133
133
 
134
134
  ## 应用角色与数据边界 {#authorization}
135
135
 
136
- 每个应用角色在设计中显式声明组织 reach,具体可执行的 V2 声明仍需后续接通:
136
+ 应用通过显式声明启用组织能力;编译器自动生成 `authz.organizations`、`authz.directory-roles` 和 `data.organizations` 的最低能力要求。目标平台不支持时拒绝激活,不能手改生成契约绕过协商。
137
137
 
138
- | reach 意图 | 适用范围 | 例子 |
139
- | --- | --- | --- |
140
- | `self` | 授予组织自身 | 学校教师只能在任职学校的业务范围操作 |
141
- | `subtree` | 授予组织及全部后代 | 获授权的上级管理人员处理被授予组织子树内的业务 |
138
+ ```ts
139
+ authz: {
140
+ roles: [
141
+ { code: 'teacher', name: '教师', organizationReach: 'self', capabilities: teacherCapabilities },
142
+ { code: 'bureau', name: '区管理人员', organizationReach: 'subtree', capabilities: bureauCapabilities },
143
+ ],
144
+ scopeDimensions: [{ code: 'class', name: '班级', valueType: 'string' }],
145
+ directoryRoleSources: [{
146
+ code: 'teachers', name: '家校教师事实', source: 'dingtalk_school_contact',
147
+ roleFactCode: 'teacher', roleCode: 'teacher', failureMode: 'strict',
148
+ scopes: [{ dimensionCode: 'class', scopeType: 'class', operations: ['read', 'create', 'update'] }],
149
+ }],
150
+ },
151
+ data: {
152
+ resources: [{ code: 'assignments', name: '作业', organization: { mode: 'owned' }, fields: assignmentFields }],
153
+ },
154
+ ```
155
+
156
+ 上例省略了应用自己的操作能力与班级行策略定义;`teacherCapabilities`、`bureauCapabilities` 和 `assignmentFields` 是应用变量,并非平台内置对象。班级字段保存真实来源字符串 ID,通过原 dataPolicy 的 `class` 维度核对。来源字符串不能绑定 Native UUID 维度、valueSource、resourceCode 或组织树层级。
157
+
158
+ | 声明 | 语义 |
159
+ | --- | --- |
160
+ | `role.organizationReach = self` | 绑定在授予组织,只在该工作组织生效 |
161
+ | `role.organizationReach = subtree` | 绑定在授予组织,在该组织和活动后代生效;不自动授予操作能力 |
162
+ | `resource.organization.mode = owned` | 创建时记录归属可信工作组织。self 只操作本组织;subtree 可在其获准树内结合行策略操作 |
163
+ | `resource.organization.mode = inherited-down` | 同 owned,额外允许获准角色读取工作组织的祖先内容;下级不能修改祖先内容 |
164
+ | 未声明或 `none` | 沿用原无组织行为,不产生组织隔离 |
165
+
166
+ 角色的操作能力、字段能力、组织 reach 和班级行范围必须在同一条 membership 中成立。不能合并多个组织的班级范围,不能用 subtree 角色的组织范围借用另一角色的班级范围。上级普通成员没有 subtree,共享 unionId 也不合并各校授权。目录映射角色只能 self,不能与 Native roleMembershipSources 争用同一角色。
167
+
168
+ 目录源最多 32 个,每个源最多 16 个 scope;每次当前人、工作组织最多 512 个不同事实。超限、源失效、手工 shadow 冲突和更新锁竞争失败关闭;无变化的投影不更新 membership 或权限版本,也不与当前事务自己的角色锁冲突。目录派生绑定稳定且分组织,原始目录仍只有平台一份。本人读取不返回 raw 或 unionId。没有工作组织时,启用了目录映射的当前授权请求返回 `OPENXIANGDA_CURRENT_USER_ORGANIZATION_REQUIRED`。
142
169
 
143
- 这是组织覆盖维度,与某资源的 `read/create/update/delete` 能力、班级 scope、行/字段策略分别组合。`subtree` 不自动授予修改权限;`self` 不是 Data API 的“记录属于当前人”谓词。上级学校/教育局的普通成员不会因层级自动成为管理员;共享 unionId 也不会把一个人在几所学校的权限合并到当前组织。
170
+ 手工给非目录角色授权使用现有 Native membership 管理面及 `createNativeRoleMembership`,新增可选 `organizationId`。组织角色必须明确目标,目标用户须是同租户活动安装的活动成员;平台管理员或应用管理员可管理。已有委托管理没有组织覆盖契约,不能扩大为跨校授权。更新不能换组织,目录派生角色的 create/update/revoke 均返回平台所有权拒绝。传统无组织角色不需要该字段。批量 create 也支持组织维度;重复目标以 user/role/organization 核对。
144
171
 
145
- 当前传统平台角色 CRUD 能保存 `organizationReach`,不等于 V2 `authz.roles` 已支持此字段。当前权限引擎也没有已接通的“当前工作组织”内置行条件,不存在可使用的 `currentOrganization()` helper。不要手改生成契约、追加虚构 requiredPlatformCapabilities 或把所有学校授予一个 unrestricted 角色来替代组织边界。
172
+ 组织归属是平台保留列 `organization_id`,不是业务字段。组织资源的读回提供这一只读 UUID,可在 Data API 的筛选和聚合 dimensions 中按学校分组;写入包含它会被拒绝。传统资源不增加该字段。创建从可信当前用户派生,更新不可修改;历史 NULL 归属不会自动推断或回填,组织资源也不会放行。唯一键按组织分区;父子表需要同样的组织策略,复合外键防止跨组织关联。已启用资源不能通过下一版本移除组织策略来开放历史数据。
146
173
 
147
- 组织数据权限还需把工作组织送入可信 Native principal,并执行数据归属、reach 与服务端行边界。在该接入完成前,以下都不能作为已支持行为交付:学校互相隔离;教育局只看/代操作全部下级数据;上级公共内容自动向后代开放。现有 `publicRead` 是已认证用户的公共字段投影,不等于组织树下发;匿名公开访问也不是跨学校共享机制。
174
+ 列表、直接 ID、聚合、导出及关联通过同一 Native RLS。命名 Nest 业务动作保留经过验证的当前用户/组织,继续核验短期调用证明、动作能力与同一 membership 的变更前后行范围。业务输入不能填充可信组织;没有当前用户证明的普通 application、后台或定时身份不获得组织资源权限。声明策略不自动授予服务身份全区访问。
148
175
 
149
- 应用可以先设计业务模型、页面及明确的业务操作;数据访问仍走已有 Data API 和受支持的 Nest operation。涉及尚未接通的组织授权闭环,记录平台依赖和所需验收,不用前端隐藏、浏览器字段或另一套成员表绕过。
176
+ 组织上下文请求实时核对目录与成员,当前暂不使用授权快照缓存。fresh 和事务请求均不读取或保存未提交快照;Head 在准备期间变化要求刷新。安装、成员、账号、主体或事实撤销后,数据库下一条语句即拒绝。源码和独立 PostgreSQL 测试不证明目标站点已经部署,也不代表真实教师/家长验收。
150
177
 
151
178
  ## 入口、同步与通知的处理边界 {#entry-sync}
152
179
 
@@ -158,7 +185,7 @@ SDK 使用 `loadCurrentDirectoryRoleFacts({ limit, after, signal })`,返回 `D
158
185
 
159
186
  ## 开发前核对与验收 {#verification}
160
187
 
161
- 1. 用项目锁定版本的 `context --json` / MCP `workspace_context` 确认平台绑定;用 `docs multi-organization` / `docs_read` 读取同版本正文。文档主题已注册,不代表 `platform_capabilities` 已有新的组织能力 code;当前不能仅凭缺少/出现某个虚构 feature 判断支持。
188
+ 1. 用项目锁定版本的 `context --json` / MCP `workspace_context` 确认平台绑定;用 `docs multi-organization` / `docs_read` 读取同版本正文。通过实际 `platform_capabilities` 核对配套声明的能力 code 和最低版本,不能把文档可读当成站点可用。
162
189
  2. 确认目标站点的源码/部署版本、正式 SQL 迁移与组织管理授权。资料版本、接口状态和实际启用分别记录;站点缺能力由平台维护者补齐,应用不自行执行迁移或发包。
163
190
  3. 在测试组织核实本人成员列表、真实企业名称、活动安装、profile/原始授权组织字段,验证同会话切换与非成员拒绝。不以单次 HTTP 200 代替响应 `code` 和业务事实。
164
191
  4. 使用家校角色前,确认平台已经提供可消费的事实读取及映射契约;使用 `self/subtree` 前,确认 V2 声明、可信上下文和服务端数据边界均已实现。未闭合就标记依赖,不能报告自动隔离通过。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openxiangda",
3
- "version": "2.69.1",
3
+ "version": "2.70.0",
4
4
  "description": "OpenXiangda 2.0 的统一命令、应用 SDK、MCP 与中文 AI 技能资料。",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -95,13 +95,13 @@
95
95
  "dayjs": "1.11.18",
96
96
  "docx-preview": "0.3.7",
97
97
  "elkjs": "0.12.0",
98
- "openxiangda-cli": "2.11.3",
99
- "openxiangda-contracts": "2.89.1",
100
- "openxiangda-devkit-core": "2.67.3",
98
+ "openxiangda-cli": "2.11.4",
99
+ "openxiangda-contracts": "2.90.0",
100
+ "openxiangda-devkit-core": "2.68.0",
101
101
  "openxiangda-legacy": "npm:openxiangda@1.0.269",
102
- "openxiangda-mcp": "2.2.16",
103
- "openxiangda-nest": "2.20.1",
104
- "openxiangda-skill-kit": "2.3.118",
102
+ "openxiangda-mcp": "2.2.17",
103
+ "openxiangda-nest": "2.20.2",
104
+ "openxiangda-skill-kit": "2.3.119",
105
105
  "xlsx": "https://github.com/1377385356/openxiangda/releases/download/vendor-mirror/xlsx-0.20.3.tgz"
106
106
  },
107
107
  "peerDependencies": {
@@ -167,35 +167,38 @@
167
167
  },
168
168
  "openxiangdaRelease": {
169
169
  "schemaVersion": "openxiangda.release-notes/v1",
170
- "version": "2.69.1",
170
+ "version": "2.70.0",
171
171
  "status": "reviewed",
172
- "title": "流程画布按需面板与连续分支保存修复",
173
- "summary": "修复流程设计器的常驻面板、连续条件路由断线及带可读名称的草稿无法保存。",
174
- "newFeatures": [],
172
+ "title": "组织角色与业务记录归属边界",
173
+ "summary": "应用可声明平台目录角色映射、self/subtree 组织范围及 Native 记录组织归属,由配套平台统一执行身份与数据授权。",
174
+ "newFeatures": [
175
+ "角色显式声明 organizationReach;directoryRoleSources 将可信平台目录事实映射为当前组织内的应用角色和班级等字符串范围。",
176
+ "Native 资源声明 none、owned 或 inherited-down 组织策略;组织归属元数据可用于有界读取和统计,业务输入不能更改归属。",
177
+ "编译器共同校验组织角色、来源范围和资源策略,自动协商 authz.organizations、authz.directory-roles 与 data.organizations 能力。"
178
+ ],
175
179
  "fixes": [
176
- "流程大纲默认隐藏,节点设置默认关闭;选择节点后按需打开配置,浮层不挤压编辑画布。",
177
- "相邻条件区域只拥有各自分支,汇合目标保持单一位置;连续条件和嵌套并行的连线接回实际目标节点。",
178
- "正式流程文档schema接受已有readability元数据,保留闭集字段、长度与数量上限及原业务权限校验。"
180
+ "隔离 CLI 候选构建保留固定 Corepack 缓存,嵌套源码构建并发上限为两个任务;保留真实依赖安装和端到端检查。"
179
181
  ],
180
182
  "affectedUsers": [
181
- "使用V2流程设计器编辑或维护审批流程的应用。"
183
+ "使用多组织、教育局与独立学校或平台家校目录的 OpenXiangda V2 应用;已有未声明组织策略的应用保持原授权语义。"
182
184
  ],
183
185
  "upgradeSteps": [
184
- "安装精确openxiangda 2.69.1官方组合并重新检查、构建应用。",
185
- "平台后端同步正式contracts包及同源回执后,才具备草稿保存schema修复;应用自行维护流程列表和独立画布路由。"
186
+ "安装精确 openxiangda 2.70.0 官方组合并刷新项目资料,检查生成契约及能力要求。",
187
+ "平台配套正式 contracts、组织角色投影服务与新增 SQL 后再启用组织资源;在目标站点验证真实来源、活动成员、安装及角色正反路径。"
186
188
  ],
187
189
  "knownLimitations": [
188
- "不修改历史实例、审批边界或业务拓扑;此版本不包含原DeploymentRun例外ack接口。",
189
- "包发行不等于平台部署或现场草稿保存验收,已有未保存输入需保留。"
190
+ "npm 包发布不代表平台部署、真实组织同步或业务验收;源码和独立 PostgreSQL 测试不能代替现场登录与权限验证。",
191
+ "普通后台或应用凭据不自动取得组织权限;未声明明确系统动作边界的后台任务不能访问组织资源。",
192
+ "已有无组织记录不自动推断或回填归属,启用组织策略后不能降级移除边界。"
190
193
  ],
191
194
  "compatibility": {
192
195
  "node": "Node.js 24 or newer for maintained toolchain",
193
196
  "generation": "OpenXiangda V2; V1 unchanged",
194
- "platform": "平台后端须消费本轮正式contracts及配套组合;原权限、revision和operationId守卫保持"
197
+ "platform": "须部署同源 contracts 及组织授权 SQL/后端;组织来源角色限定 self,subtree 授权由合法应用管理员显式管理"
195
198
  },
196
199
  "issues": [],
197
- "sha256": "529eee3d6d426c149635e6143310ff6a4a01da6c7243e203ff959f9d3b34a4b5",
198
- "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.69.1"
200
+ "sha256": "7291b56c3a9c02615075ea5bb9bcf22669b3d19540f5f95173f54589d31a24f8",
201
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.70.0"
199
202
  },
200
203
  "scripts": {
201
204
  "build": "node ../../scripts/prune-package-dist.mjs && tsc -p tsconfig.json && node scripts/copy-assets.mjs",
@@ -0,0 +1,45 @@
1
+ {
2
+ "schemaVersion": "openxiangda.release-notes/v1",
3
+ "version": "2.63.0",
4
+ "status": "reviewed",
5
+ "title": "Workflow design, handling nodes and editable application templates",
6
+ "summary": "Publish the reviewed mainline workflow designer and handling capabilities, shared-record Save, structured parallel branches and guarded workflow source synchronisation. Add editable templates, resource reference read/update contexts and read-only AI command reconciliation. The platform must use the same public contracts 2.79.0 pure compiler as the SDK.",
7
+ "newFeatures": [
8
+ "Canonical workflow designer definitions, target/variable catalogs, administration, proposals and instance adoption share the same pure validation rules.",
9
+ "Independent handling and correction nodes support explicit completion actions, opinion requirements, shared-record Save, return policies, durable reminders, platform notifications and supervisor-chain assignments.",
10
+ "Paired parallel/join nodes have bounded disjoint branches, branch-scoped position proofs and publication validation while retaining immutable task-entry authority.",
11
+ "Workflow source export/import, read-only version registration plans and environment synchronisation use digest and target-head guards and preserve prepared version history.",
12
+ "Editable application templates cover administration, PC, mobile and login frames, with shared resource-page controllers, source digests and composition validation.",
13
+ "Resource reference filtering has an independent read intent; ordinary edits supply saved-record id/revision and actual edits for authoritative server-side merge.",
14
+ "AI reconciliation binds a read-only GET/read operation to the original command receipt instead of replaying a business mutation."
15
+ ],
16
+ "fixes": [
17
+ "Give the new workflow pure-rule APIs a fresh public contracts version so platforms need not privately add exports under an already published semver.",
18
+ "Correct canvas branch selection, outline hierarchy and approval action presentation while retaining permissions, CAS, idempotency and unknown-result recovery.",
19
+ "Export standard resource query, cascade and address helpers from shared contracts so browser and platform consumers use the same query semantics."
20
+ ],
21
+ "affectedUsers": [
22
+ "OpenXiangda V2 platforms and applications using workflow design, independent handling, shared Save, reminders, notifications or instance adoption.",
23
+ "V2 workspaces using editable template composition, resource reference fields or read-only AI result reconciliation."
24
+ ],
25
+ "upgradeSteps": [
26
+ "Deploy a platform matching the actual contracts 2.79.0 native validator first. Server contracts must come from the official published tarball with verified SRI.",
27
+ "Upgrade the complete workspace distribution to public openxiangda 2.63.0, install the lockfile and refresh project documentation and MCP sessions.",
28
+ "Preserve application, record, task, workflow-version and idempotency identities. Run normal check/deploy preflight against the actual platform capabilities and validator digest.",
29
+ "Verify workflow design, shared Save, handling completion, return paths, notification recipients and reference reads/updates with real roles before environment promotion."
30
+ ],
31
+ "knownLimitations": [
32
+ "New reference contexts and workflow contracts require the matching platform to be deployed first; declaring a different digest does not establish compatibility.",
33
+ "Template appearance and package regressions do not replace real-role, notification, instance-adoption and business-data acceptance.",
34
+ "The separate event-receipt lease-ownership and worker-effect candidates are not included in this public release."
35
+ ],
36
+ "compatibility": {
37
+ "generation": "v2",
38
+ "node": ">=24",
39
+ "platform": "contracts 2.79.0 exact native validator and matching workflow/resource contexts",
40
+ "v1": "Independent 1.x maintenance distribution is unchanged"
41
+ },
42
+ "issues": [],
43
+ "sha256": "ef4279a6f846a604d68dbd1adc2473203ffef4287e2dc74b51aa17727a7397b5",
44
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.63.0"
45
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "schemaVersion": "openxiangda.release-notes/v1",
3
+ "version": "2.63.1",
4
+ "status": "reviewed",
5
+ "title": "流程设计、独立办理与公开契约配套发行",
6
+ "summary": "正式发行已评审的流程设计、办理节点、共享数据保存、结构化并行、提醒通知和流程源码同步能力,提供可编辑应用模板、资源引用读取上下文及只读 AI 回执核对,同时修复首次导入前的源基线比较和配置写入边界。公开 SDK 与 contracts 2.79.1 使用同一冻结分发。",
7
+ "newFeatures": [
8
+ "流程设计、变量和目标目录、管理员配置、设计提案及历史实例接管共用规范定义与纯校验规则。",
9
+ "独立办理与补正节点支持明确完成动作、意见要求、共享数据保存、退回策略、持久提醒、平台通知和主管链规则。",
10
+ "结构化 parallel/join 节点支持有界独立分支、分支位置证明及发布校验,保留任务进入时的权威事实。",
11
+ "流程源码导出、导入、版本注册和环境同步使用源摘要及目标版本守卫,保留准备版本历史。",
12
+ "可编辑模板覆盖后台、PC、移动端和登录外观,资源页控制器、来源摘要及组合校验共用标准边界。",
13
+ "资源引用筛选使用独立读取意图;普通关联编辑提供记录 id/revision 和实际编辑上下文,由平台合并权威绑定。",
14
+ "AI 核对通过只读 GET/read 查询原幂等键的提交回执,不重新执行业务命令。"
15
+ ],
16
+ "fixes": [
17
+ "首次导入前按目标应用声明比较流程源状态,忽略其他环境观察,复用规范摘要、校验源锁并将写入限定于应用导出的配置。",
18
+ "并行分支卡片居中且条件开关保持单行,审批布局继续保留权限、CAS、幂等和未知结果恢复。",
19
+ "新增流程规则使用正式公开 contracts 新版本,不在已公开旧版本号下私有添加 API。",
20
+ "封包清单正确检查 template/list 命令,参考候选仓库支持显式任务代理访问官方上游。"
21
+ ],
22
+ "affectedUsers": [
23
+ "使用流程设计、独立办理、共享保存、提醒通知、流程源同步或历史实例接管的 OpenXiangda 2.0 平台和应用。",
24
+ "使用可编辑模板、资源引用字段或只读 AI 结果核对的 2.0 工作区。"
25
+ ],
26
+ "upgradeSteps": [
27
+ "先部署与 contracts 2.79.1 实际纯规则摘要一致的平台;服务器使用官方公开 tarball 并核对 SRI。",
28
+ "完整工作区分发升级到 openxiangda 2.63.1,按锁文件安装并刷新资料及 MCP 连接。",
29
+ "保留原应用、数据、任务、流程版本和幂等标识,正常 check/deploy 核对实际能力与 validatorDigest。",
30
+ "按真实角色验证设计、保存、办理完成、退回、通知收件人及关联字段读写,再执行原晋级流程。"
31
+ ],
32
+ "knownLimitations": [
33
+ "新增读取上下文和流程契约需要配套平台先升级,修改摘要不能代替真实兼容性。",
34
+ "包测试和模板外观不代替真实角色、通知、实例接管及业务数据读回验收。",
35
+ "事件回执租约对象归属和 Worker 原子效果仍为独立 PLT-040 候选,本次不包含未整合改动。"
36
+ ],
37
+ "compatibility": {
38
+ "generation": "v2",
39
+ "node": ">=24",
40
+ "platform": "contracts 2.79.1 exact native validator and matching workflow/resource contexts",
41
+ "v1": "独立 1.x 维护分发不变"
42
+ },
43
+ "issues": [],
44
+ "sha256": "364565fc1ab2b4a1db89328b684ca7f5d1b261ad882e00e5da7c1687e5be7861",
45
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.63.1"
46
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "schemaVersion": "openxiangda.release-notes/v1",
3
+ "version": "2.66.0",
4
+ "status": "reviewed",
5
+ "title": "受限事件后台事务能力",
6
+ "summary": "复用平台事件投递租约及持久回执,支持定时消费者以显式资源与字段授权执行 Native 事务。",
7
+ "newFeatures": [
8
+ "事件消费者支持受限查询、冻结事务、原键提交与回执恢复;平台统一执行并验证事件租约。"
9
+ ],
10
+ "fixes": [
11
+ "迟到消费者只能释放自身租约,不能覆盖新消费者处理权。"
12
+ ],
13
+ "affectedUsers": [
14
+ "需要定时业务事务的 OpenXiangda V2 应用开发者与平台维护者。"
15
+ ],
16
+ "upgradeSteps": [
17
+ "配对升级 SDK、CLI、共享契约和平台服务;为事件订阅显式声明 worker-effect 资源、字段及容量。"
18
+ ],
19
+ "knownLimitations": [
20
+ "投递至少一次,业务事务依赖原幂等意图去重;不允许工作流拥有的资源写入或任意业务身份冒用。"
21
+ ],
22
+ "compatibility": {
23
+ "node": ">=24",
24
+ "pnpm": "10.15.1"
25
+ },
26
+ "issues": [],
27
+ "sha256": "48c557ed1f5420f31b352721b05fc769d2f728c84102da0705eca9553844532a",
28
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.66.0"
29
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "schemaVersion": "openxiangda.release-notes/v1",
3
+ "version": "2.66.1",
4
+ "status": "reviewed",
5
+ "title": "事件 worker-effect SDK 导出修复",
6
+ "summary": "保持 2.66.0 worker-effect 能力,并修复根包 Nest 入口导出缺失。",
7
+ "newFeatures": [
8
+ "事件消费者支持受限查询、冻结事务、原键提交与回执恢复;平台统一执行并验证事件租约。"
9
+ ],
10
+ "fixes": [
11
+ "公开 Nest 入口补充导出事件 worker-effect 服务。"
12
+ ],
13
+ "affectedUsers": [
14
+ "需要定时业务事务的 OpenXiangda V2 应用开发者与平台维护者。"
15
+ ],
16
+ "upgradeSteps": [
17
+ "配对升级 SDK、CLI、共享契约和平台服务;为事件订阅显式声明 worker-effect 资源、字段及容量。"
18
+ ],
19
+ "knownLimitations": [
20
+ "投递至少一次,业务事务依赖原幂等意图去重;不允许工作流拥有的资源写入或任意业务身份冒用。"
21
+ ],
22
+ "compatibility": {
23
+ "node": ">=24",
24
+ "pnpm": "10.15.1"
25
+ },
26
+ "issues": [],
27
+ "sha256": "bf5cc01bff98c34817ba998f822f74561f8d4d44da121229b5e585654cba13c0",
28
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.66.1"
29
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "schemaVersion": "openxiangda.release-notes/v1",
3
+ "version": "2.66.2",
4
+ "status": "reviewed",
5
+ "title": "工具链事实契约兼容修复",
6
+ "summary": "保持现有 worker-effect 能力,并修复工作区工具链事实的公开契约。",
7
+ "newFeatures": [
8
+ "事件消费者支持受限查询、冻结事务、原键提交与回执恢复;平台统一执行并验证事件租约。"
9
+ ],
10
+ "fixes": [
11
+ "允许工作区上下文返回已安装工具链事实。"
12
+ ],
13
+ "affectedUsers": [
14
+ "需要定时业务事务的 OpenXiangda V2 应用开发者与平台维护者。"
15
+ ],
16
+ "upgradeSteps": [
17
+ "配对升级 SDK、CLI、共享契约和平台服务;为事件订阅显式声明 worker-effect 资源、字段及容量。"
18
+ ],
19
+ "knownLimitations": [
20
+ "投递至少一次,业务事务依赖原幂等意图去重;不允许工作流拥有的资源写入或任意业务身份冒用。"
21
+ ],
22
+ "compatibility": {
23
+ "node": ">=24",
24
+ "pnpm": "10.15.1"
25
+ },
26
+ "issues": [],
27
+ "sha256": "f597de89ed6ca7b7270427f35e2d9078576f1ee3ec06f961cd09b65e5298ebb8",
28
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.66.2"
29
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "schemaVersion": "openxiangda.release-notes/v1",
3
+ "version": "2.67.0",
4
+ "status": "reviewed",
5
+ "title": "应用Agent接口与事件worker声明修复",
6
+ "summary": "新增作用域内应用Agent客户端,并补齐事件worker编译上下文及节点条件配置契约。",
7
+ "newFeatures": [
8
+ "公开openxiangda/agent客户端与hooks,沿用平台当前身份和持久游标,未知写入不自动重放。"
9
+ ],
10
+ "fixes": [
11
+ "worker-effect编译传入显式emitEventTypes与实际工作流subject,避免合法声明被误拒绝。",
12
+ "配置类型公开worker-effect执行声明,避免应用使用类型绕过。",
13
+ "共享节点人员配置支持完整条件规则与权威来源边界。"
14
+ ],
15
+ "affectedUsers": [
16
+ "OpenXiangda V2应用开发者和平台维护者"
17
+ ],
18
+ "upgradeSteps": [
19
+ "按同批版本升级工具链,重新生成并检查应用契约。",
20
+ "配套升级平台共享契约后验证TEST,真实角色验收独立执行。"
21
+ ],
22
+ "knownLimitations": [
23
+ "事件至少一次投递,依赖原业务意图和平台回执去重。",
24
+ "工具链发布不代表学校平台部署或应用业务验收完成。"
25
+ ],
26
+ "compatibility": {
27
+ "node": ">=24",
28
+ "pnpm": "10.15.1"
29
+ },
30
+ "issues": [],
31
+ "sha256": "535f00f729995cc1f8ce0925c3ddbd5976e1ed6283ef60d2888955ae95393d02",
32
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.67.0"
33
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "schemaVersion": "openxiangda.release-notes/v1",
3
+ "version": "2.67.1",
4
+ "status": "reviewed",
5
+ "title": "应用Agent及worker声明与发行恢复修复",
6
+ "summary": "新增作用域内应用Agent客户端,并补齐事件worker编译上下文及节点条件配置契约。",
7
+ "newFeatures": [
8
+ "公开openxiangda/agent客户端与hooks,沿用平台当前身份和持久游标,未知写入不自动重放。"
9
+ ],
10
+ "fixes": [
11
+ "worker-effect编译传入显式emitEventTypes与实际工作流subject,避免合法声明被误拒绝。",
12
+ "配置类型公开worker-effect执行声明,避免应用使用类型绕过。",
13
+ "共享节点人员配置支持完整条件规则与权威来源边界。",
14
+ "声明warning保持警告,真正错误仍阻断,避免正确应用被误拒绝。",
15
+ "Git worktree发行计划、验证与发布共用冻结制品、回执和进程锁;发现旧私有回执时先恢复原状态。"
16
+ ],
17
+ "affectedUsers": [
18
+ "OpenXiangda V2应用开发者和平台维护者"
19
+ ],
20
+ "upgradeSteps": [
21
+ "按同批版本升级工具链,重新生成并检查应用契约。",
22
+ "配套升级平台共享契约后验证TEST,真实角色验收独立执行。"
23
+ ],
24
+ "knownLimitations": [
25
+ "事件至少一次投递,依赖原业务意图和平台回执去重。",
26
+ "工具链发布不代表学校平台部署或应用业务验收完成。"
27
+ ],
28
+ "compatibility": {
29
+ "node": ">=24",
30
+ "pnpm": "10.15.1"
31
+ },
32
+ "issues": [],
33
+ "sha256": "cab78d0c354ccfe6373966f884c475e4e50e0096a5cbe9763fce2a761ba99e99",
34
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.67.1"
35
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "schemaVersion": "openxiangda.release-notes/v1",
3
+ "version": "2.67.2",
4
+ "status": "reviewed",
5
+ "title": "读取范围能力交集与开发诊断修复",
6
+ "summary": "所选读取范围严格收窄当前身份能力,并补充原执行健康、托管文件语义及设计资料预算诊断。",
7
+ "newFeatures": [
8
+ "应用自助操作提供原执行健康和托管文件语义观察,沿用当前身份与原请求。"
9
+ ],
10
+ "fixes": [
11
+ "Perspective读取能力与当前身份能力取交集,避免有限角色选择其他角色的完整管理投影。",
12
+ "AppSpec记录实际读取字节和省略原因,保留现有确认及部署门禁,不将超预算资料误判为不存在。",
13
+ "工作区加载及封包的声明warning不再误当error阻断,真实错误继续拒绝。",
14
+ "发行元数据读取保留有界并发和原渠道状态;CLI模板与根SDK版本配套。"
15
+ ],
16
+ "affectedUsers": [
17
+ "使用多角色读取范围的V2应用开发者及平台维护者"
18
+ ],
19
+ "upgradeSteps": [
20
+ "通过官方精确根包版本安装整组工具链,检查当前平台兼容性后重新部署TEST。",
21
+ "使用有限角色、兼任角色及撤销授权场景核对页面投影;实际业务验收独立于发包。"
22
+ ],
23
+ "knownLimitations": [
24
+ "源码回归不证明学校身份同步、通知通道、定时任务或完整迁移已验收。",
25
+ "读取范围不改变写入和业务动作授权,Native后端继续独立执行字段与行权限。"
26
+ ],
27
+ "compatibility": {
28
+ "node": ">=24",
29
+ "pnpm": "10.15.1"
30
+ },
31
+ "issues": [],
32
+ "sha256": "a6d7741c59762468ee23815832c0d707166bc60ca7913dabd4f945d6cf84ac20",
33
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.67.2"
34
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "schemaVersion": "openxiangda.release-notes/v1",
3
+ "version": "2.68.2",
4
+ "status": "reviewed",
5
+ "title": "固定公开单选过滤的编译一致性修复",
6
+ "summary": "允许对 option.single 单选字段声明固定公开 eq 条件,保持平台强制过滤和字段白名单。",
7
+ "newFeatures": [],
8
+ "fixes": [
9
+ "修复是否开放、发布状态等单选字段被应用与 Native 编译器错误拒绝的问题。",
10
+ "单选值只接受字符串或 null,拒绝数组、对象、数值和布尔;多选、附件、人员及资源引用仍不接受。"
11
+ ],
12
+ "affectedUsers": [
13
+ "通过 frontend.publicAccess 发布带开放/发布状态条件的公开目录应用。"
14
+ ],
15
+ "upgradeSteps": [
16
+ "应用升级精确 openxiangda 2.68.2 并重新 check;不修改已安装编译器或生成输出。",
17
+ "平台同步官方 openxiangda-contracts 2.88.1 编译器后再部署含此条件的应用;运行时过滤仍由平台负责。"
18
+ ],
19
+ "knownLimitations": [
20
+ "仍只允许固定 eq 条件;不开放匿名任意筛选、排序或普通 Native Data API。",
21
+ "包与平台发布不代表学校浏览器、真实角色或通知验收完成。"
22
+ ],
23
+ "compatibility": {
24
+ "node": "Node.js 24 or newer for maintained toolchain",
25
+ "generation": "OpenXiangda V2; V1 unchanged",
26
+ "platform": "Native compiler openxiangda-contracts 2.88.1; server option JSON equality already implemented"
27
+ },
28
+ "issues": [
29
+ "PLT-068"
30
+ ],
31
+ "sha256": "122b83c8aa1540c4e97ba7b4700618a03ff86585848f3f9f5626475ad13b7a8d",
32
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.68.2"
33
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "schemaVersion": "openxiangda.release-notes/v1",
3
+ "version": "2.70.0",
4
+ "status": "reviewed",
5
+ "title": "组织角色与业务记录归属边界",
6
+ "summary": "应用可声明平台目录角色映射、self/subtree 组织范围及 Native 记录组织归属,由配套平台统一执行身份与数据授权。",
7
+ "newFeatures": [
8
+ "角色显式声明 organizationReach;directoryRoleSources 将可信平台目录事实映射为当前组织内的应用角色和班级等字符串范围。",
9
+ "Native 资源声明 none、owned 或 inherited-down 组织策略;组织归属元数据可用于有界读取和统计,业务输入不能更改归属。",
10
+ "编译器共同校验组织角色、来源范围和资源策略,自动协商 authz.organizations、authz.directory-roles 与 data.organizations 能力。"
11
+ ],
12
+ "fixes": [
13
+ "隔离 CLI 候选构建保留固定 Corepack 缓存,嵌套源码构建并发上限为两个任务;保留真实依赖安装和端到端检查。"
14
+ ],
15
+ "affectedUsers": [
16
+ "使用多组织、教育局与独立学校或平台家校目录的 OpenXiangda V2 应用;已有未声明组织策略的应用保持原授权语义。"
17
+ ],
18
+ "upgradeSteps": [
19
+ "安装精确 openxiangda 2.70.0 官方组合并刷新项目资料,检查生成契约及能力要求。",
20
+ "平台配套正式 contracts、组织角色投影服务与新增 SQL 后再启用组织资源;在目标站点验证真实来源、活动成员、安装及角色正反路径。"
21
+ ],
22
+ "knownLimitations": [
23
+ "npm 包发布不代表平台部署、真实组织同步或业务验收;源码和独立 PostgreSQL 测试不能代替现场登录与权限验证。",
24
+ "普通后台或应用凭据不自动取得组织权限;未声明明确系统动作边界的后台任务不能访问组织资源。",
25
+ "已有无组织记录不自动推断或回填归属,启用组织策略后不能降级移除边界。"
26
+ ],
27
+ "compatibility": {
28
+ "node": "Node.js 24 or newer for maintained toolchain",
29
+ "generation": "OpenXiangda V2; V1 unchanged",
30
+ "platform": "须部署同源 contracts 及组织授权 SQL/后端;组织来源角色限定 self,subtree 授权由合法应用管理员显式管理"
31
+ },
32
+ "issues": [],
33
+ "sha256": "7291b56c3a9c02615075ea5bb9bcf22669b3d19540f5f95173f54589d31a24f8",
34
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.70.0"
35
+ }
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "name": "openxiangda-v2",
6
6
  "description": "使用 OpenXiangda 2.0 从模糊业务想法、已有资料或具体变更出发,通过对话发现模块、完成详细产品设计,由当前 AI Agent 按需用 Image 2.5 等图片能力形成视觉参考,直接实现真实页面并在浏览器修正,再检查和交付应用;维护 1.x 应用时使用对应的 1.x 技能。",
7
- "sha256": "6f6bac84207b781c00df7f823d20604d0762759241a2cf7c67a3778fd4c049fb"
7
+ "sha256": "d4162da3387da0b32a1ba55c4803d9fd7c5599d6f3edd0fbdf208da2b92e106f"
8
8
  }
9
9
  ]
10
10
  }
@@ -40,10 +40,10 @@ AI 接到新应用、页面或改版任务时,在同一个 OpenXiangda 工作
40
40
  未创建工作区时使用本 Skill 随根包发布的精确版本:
41
41
 
42
42
  ```bash
43
- pnpm dlx openxiangda@2.69.1 auth status --cwd <应用目录> --base-url <平台地址> --json
44
- pnpm dlx openxiangda@2.69.1 login --cwd <应用目录> --base-url <平台地址>
45
- pnpm dlx openxiangda@2.69.1 create <应用目录> --base-url <同一平台地址>
46
- pnpm dlx openxiangda@2.69.1 skill install --force
43
+ pnpm dlx openxiangda@2.70.0 auth status --cwd <应用目录> --base-url <平台地址> --json
44
+ pnpm dlx openxiangda@2.70.0 login --cwd <应用目录> --base-url <平台地址>
45
+ pnpm dlx openxiangda@2.70.0 create <应用目录> --base-url <同一平台地址>
46
+ pnpm dlx openxiangda@2.70.0 skill install --force
47
47
  ```
48
48
 
49
49
  创建前把产品要求的目标平台明确带入命令,不从旧登录态推断站点。已有工作区从原绑定恢复,平台不一致时先解决登录与目标,不改 link 文件跨站创建。
@@ -2,7 +2,7 @@
2
2
 
3
3
  授权由四层组成:页面/操作 capability、行谓词、字段 read,以及字段 create/update。前端只消费平台返回的最终访问结果来隐藏按钮、只读输入和剔除 payload;平台每次请求重新执行权威校验。
4
4
 
5
- 涉及独立企业的上下级组织、跨学校身份或家校班级范围时,先读[多组织与家校目录](multi-organization.md)。平台已有组织/成员/会话基础;V2 角色 reach、目录事实应用映射和组织行边界尚未完整接通,不能将当前普通角色并集、unrestricted 规则或前端 `corpId` 当成自动跨组织授权。
5
+ 涉及独立企业的上下级组织、跨学校身份或家校班级范围时,先读[多组织与家校目录](multi-organization.md)。V2 已提供组织角色 reach、目录事实应用映射和组织行归属声明;执行这些边界需要目标平台部署配套 contracts、后端及正式 SQL。普通角色并集、unrestricted 规则或前端 `corpId` 不能自动产生跨组织授权;包发行、站点配套和真实角色验收仍须分别核验。
6
6
 
7
7
  以下仅以仪器管理应用举例,不是平台默认模型或角色。该示例的行规则是:学校管理员不受行谓词限制;学院管理员按记录 `collegeId` 匹配;仪器管理员按 `instrumentAdminIds` 包含当前用户匹配。不要增加影子范围字段。
8
8
 
@@ -247,3 +247,6 @@ SDK复用现有应用CSRF与512条命令绑定缓存,预览到期不会自动
247
247
  打印先筛选同一成员同时具备资料read及所有打印能力的资格,再沿原RLS、Perspective、字段读取与脱敏;不能把ALL-read职责和own-print职责合并成ALL-print。普通app-admin与平台超管分别验收。SDK `loadNativeRecordPrint(resourceCode, recordId, { viewCode? })` 只读当前单记录投影;公开 `ResourceRecordPrintPreview` 与生成Native详情中的“打印”入口共用它。字段权限仍使用页面/模型规则,不增加流程节点字段权限配置。
248
248
 
249
249
  预览显示读取时间、当前详情可见字段和分组。打印前重新读取当前授权数据,失败清除旧预览,身份/授权/Perspective变化和关闭淘汰过期请求。附件/图片只列名称及大小、富文本转安全文本,没有自动外部下载;系统打印取消不写业务资料。当前版本只支持主记录,详情包含可读子表返回409,超2MiB返回413,不静默漏项;专用PDF模板、签章与子表完整打印另行提供。独立权限保护平台的打印接口和标准入口,已读资料的截图/浏览器自行打印不属于可撤销许可。
250
+
251
+
252
+ 多组织应用使用 `role.organizationReach`、`authz.directoryRoleSources` 与 `resource.organization` 显式声明;来源字符串范围、可信用户组织及数据库行边界共同执行。声明、配套平台版本与目标站点实际启用分别核验。完整字段、上级内容下发、目录派生角色所有权、手工组织授权和限制见[多组织与家校目录](multi-organization.md#authorization)。
@@ -222,3 +222,6 @@ image/signature/富文本图片字段在上传计划(initiate)里返回 `max
222
222
  省略/false关闭新入口;true绑定资源read,数组引用已有能力,不隐式生成能力。
223
223
  同一角色成员须同时满足资源read和全部历史能力,原行权限继续约束旧固定实例;该项独立于Native `audit.read`。
224
224
  标准Native详情和公开 `WorkflowRecordHistoryPanel` 可复用,参见[工作流历史](workflow-events.md#record-history-read)。
225
+
226
+
227
+ 多组织应用使用 `role.organizationReach`、`authz.directoryRoleSources` 与 `resource.organization` 显式声明;来源字符串范围、可信用户组织及数据库行边界共同执行。声明、配套平台版本与目标站点实际启用分别核验。完整字段、上级内容下发、目录派生角色所有权、手工组织授权和限制见[多组织与家校目录](multi-organization.md#authorization)。
@@ -68,10 +68,10 @@ MCP 服务随项目根包一起安装,AI 客户端的 stdio 连接仍需配置
68
68
  以下命令的版本占位符由随包资料替换为该根包的精确版本。网站源码阅读者应先确认要使用的发行版本。
69
69
 
70
70
  ```bash
71
- pnpm dlx openxiangda@2.69.1 skill install --force
72
- pnpm dlx openxiangda@2.69.1 auth status --base-url <平台地址> --json
73
- pnpm dlx openxiangda@2.69.1 login --cwd my-app --base-url https://platform.example.com
74
- pnpm dlx openxiangda@2.69.1 create my-app --base-url https://platform.example.com
71
+ pnpm dlx openxiangda@2.70.0 skill install --force
72
+ pnpm dlx openxiangda@2.70.0 auth status --base-url <平台地址> --json
73
+ pnpm dlx openxiangda@2.70.0 login --cwd my-app --base-url https://platform.example.com
74
+ pnpm dlx openxiangda@2.70.0 create my-app --base-url https://platform.example.com
75
75
  cd my-app
76
76
  pnpm openxiangda context --json
77
77
  pnpm openxiangda dev
@@ -221,9 +221,9 @@ MCP 的 `docs_read` 可以读取本说明,当前没有独立的源码操作 MC
221
221
  无需本地工作区,使用本 Skill 随包精确版本或已安装的对应 CLI:
222
222
 
223
223
  ```bash
224
- pnpm dlx openxiangda@2.69.1 auth status --base-url <平台> --json
225
- pnpm dlx openxiangda@2.69.1 source resolve <仓库URL> --base-url <平台> --json
226
- pnpm dlx openxiangda@2.69.1 source clone <仓库URL> <新目录> --base-url <平台> --json
224
+ pnpm dlx openxiangda@2.70.0 auth status --base-url <平台> --json
225
+ pnpm dlx openxiangda@2.70.0 source resolve <仓库URL> --base-url <平台> --json
226
+ pnpm dlx openxiangda@2.70.0 source clone <仓库URL> <新目录> --base-url <平台> --json
227
227
  ```
228
228
 
229
229
  登录缺失或站点不匹配时,先按该平台执行 login。resolve 根据平台已经登记的绑定返回
@@ -2,7 +2,7 @@
2
2
 
3
3
  教育局与多所学校各有独立钉钉企业、同一教师属于多个组织、家长的孩子在不同学校时,优先复用平台的组织与身份基础能力。应用不再建立第二份企业组织树、钉钉身份库或学校密钥配置。
4
4
 
5
- 本专题描述 2026-10-14 的源码契约基线。组织基础、本人目录角色事实读取和 SDK 组织上下文/切换生命周期已有配套实现;事实到应用角色、组织 reach 与跨组织数据权限仍有接入缺口。目标站点是否部署了这些接口,需现场核实;安装新工具或读到本专题不证明平台已经升级。
5
+ 本专题描述 2026-10-14 的源码契约基线。组织基础、本人目录角色事实读取、SDK 组织切换、目录事实到应用角色的投影及 Native 组织行边界已有配套实现。目标站点是否部署了这些接口,需现场核实;安装新工具或读到本专题不证明平台已经升级。
6
6
 
7
7
  ## AI 识别场景与选择能力 {#scenario}
8
8
 
@@ -26,9 +26,9 @@
26
26
  | 当前人的可切换组织 | 已有平台会话 HTTP 与 `loadCurrentOrganizationMemberships()` | 读取本人活动成员列表,显示对应企业/学校选项 |
27
27
  | 当前工作组织、同会话切换 | 已有平台登录上下文、SDK `activeOrganizationId` 和 `switchCurrentOrganization()` 生命周期 | 在支持本契约的会话中读取/切换;不能从 URL 直接产生授权 |
28
28
  | 组织管理授权 | 已实现平台管理员授予人/部门,祖先授权覆盖后代 | 管理操作由平台核验;不能把“教育局成员”当作“全区管理员” |
29
- | 应用角色 `self` / `subtree` | 传统平台角色 CRUD 能保存 `organizationReach`;V2 声明与执行尚未接通 | 在设计中明确每个角色的组织覆盖意图,不向 V2 config 填入未支持字段 |
30
- | 家校事实到应用角色、班级范围的消费 | 本人事实 HTTP/SDK 读取已实现;业务角色与班级范围映射尚未接通 | 声明拟使用哪些事实及范围,将接入列为依赖;不能凭空调用 SDK |
31
- | 组织数据归属、隔离、后代可见与公共内容下发 | Native Data API 的组织边界尚未接通 | 不能宣称已经自动隔离或继承,也不能用前端筛选代替服务端权限 |
29
+ | 应用角色 `self` / `subtree` | V2 声明、组织维度角色绑定和实时 SQL 准入已接通 | 声明每个角色的覆盖意图;旧应用未声明继续沿用原行为 |
30
+ | 家校事实到应用角色、班级范围的消费 | `authz.directoryRoleSources` 由平台投影到应用角色和字符串 scope | 使用真实来源角色事实,目录派生绑定不能手工覆盖;事实退休立即拒绝旧投影 |
31
+ | 组织数据归属、隔离、后代可见与内容下发 | `organization.mode=owned/inherited-down`、不可改归属及 RLS 已实现 | 声明策略并核验目标站点的配套能力,按真实组织角色验收允许和拒绝 |
32
32
  | 安装回调、每校自动定时同步、组织通知路由与链接生成 | 尚未完成整条自动接入 | 不假定安装完成后立即能登录,不假定消息自动选中正确安装 |
33
33
 
34
34
  平台管理组织的授权与应用业务授权是两种事实。能开通学校或查询组织树,不会自动获得该学校的业务数据权限;看到一条成员关系,也不会自动成为应用管理员。
@@ -102,7 +102,7 @@ SDK 通过应用 `/auth/organization/switch-surface` 取得真实浏览器会话
102
102
 
103
103
  成功、运输结果未知或服务器 5xx 时,SDK 失效旧授权、命令缓存和在途读取,通过 Runtime identity epoch 重读并重建页面。旧学校晚到的响应不会覆盖新学校数据。跨页只发送失效信号,不传身份或凭据;明确 4xx 拒绝保留原授权。切换写入不自动重放;结果未知先读回当前授权,不能把目标名称当成成功。组织切换不选择应用角色,也不是只收窄读取的 Perspective。
104
104
 
105
- 完整 V2 role reach 和组织数据策略仍未接通,不能把切换后的角色列表或字段传递当作组织隔离证明。
105
+ 角色与数据隔离通过下面的显式声明启用;切换后的角色列表或字段传递仍不能替代实际行权限验收。
106
106
 
107
107
  ### 管理面接口
108
108
 
@@ -129,24 +129,51 @@ SDK 通过应用 `/auth/organization/switch-surface` 取得真实浏览器会话
129
129
 
130
130
  SDK 使用 `loadCurrentDirectoryRoleFacts({ limit, after, signal })`,返回 `DirectoryRoleFactPage`,包含 organizationId、userId、items、nextCursor。每个 item 包含 id、subjectId、source、roleCode、scopeType、scopeValue。客户端拒绝与当前 identity 不同组织/用户的响应,并在组织变化时丢弃旧读取,不自动拉取全部页面。
131
131
 
132
- 读取来源事实不授予应用能力。业务角色、班级范围的可执行声明仍是后续接入项;不能以管理 upsert 或复制应用通讯录替代。
132
+ 读取来源事实不授予应用能力。使用下面的 `directoryRoleSources` 声明由平台派生角色及班级范围;不能以管理 upsert 或复制应用通讯录替代。
133
133
 
134
134
  ## 应用角色与数据边界 {#authorization}
135
135
 
136
- 每个应用角色在设计中显式声明组织 reach,具体可执行的 V2 声明仍需后续接通:
136
+ 应用通过显式声明启用组织能力;编译器自动生成 `authz.organizations`、`authz.directory-roles` 和 `data.organizations` 的最低能力要求。目标平台不支持时拒绝激活,不能手改生成契约绕过协商。
137
137
 
138
- | reach 意图 | 适用范围 | 例子 |
139
- | --- | --- | --- |
140
- | `self` | 授予组织自身 | 学校教师只能在任职学校的业务范围操作 |
141
- | `subtree` | 授予组织及全部后代 | 获授权的上级管理人员处理被授予组织子树内的业务 |
138
+ ```ts
139
+ authz: {
140
+ roles: [
141
+ { code: 'teacher', name: '教师', organizationReach: 'self', capabilities: teacherCapabilities },
142
+ { code: 'bureau', name: '区管理人员', organizationReach: 'subtree', capabilities: bureauCapabilities },
143
+ ],
144
+ scopeDimensions: [{ code: 'class', name: '班级', valueType: 'string' }],
145
+ directoryRoleSources: [{
146
+ code: 'teachers', name: '家校教师事实', source: 'dingtalk_school_contact',
147
+ roleFactCode: 'teacher', roleCode: 'teacher', failureMode: 'strict',
148
+ scopes: [{ dimensionCode: 'class', scopeType: 'class', operations: ['read', 'create', 'update'] }],
149
+ }],
150
+ },
151
+ data: {
152
+ resources: [{ code: 'assignments', name: '作业', organization: { mode: 'owned' }, fields: assignmentFields }],
153
+ },
154
+ ```
155
+
156
+ 上例省略了应用自己的操作能力与班级行策略定义;`teacherCapabilities`、`bureauCapabilities` 和 `assignmentFields` 是应用变量,并非平台内置对象。班级字段保存真实来源字符串 ID,通过原 dataPolicy 的 `class` 维度核对。来源字符串不能绑定 Native UUID 维度、valueSource、resourceCode 或组织树层级。
157
+
158
+ | 声明 | 语义 |
159
+ | --- | --- |
160
+ | `role.organizationReach = self` | 绑定在授予组织,只在该工作组织生效 |
161
+ | `role.organizationReach = subtree` | 绑定在授予组织,在该组织和活动后代生效;不自动授予操作能力 |
162
+ | `resource.organization.mode = owned` | 创建时记录归属可信工作组织。self 只操作本组织;subtree 可在其获准树内结合行策略操作 |
163
+ | `resource.organization.mode = inherited-down` | 同 owned,额外允许获准角色读取工作组织的祖先内容;下级不能修改祖先内容 |
164
+ | 未声明或 `none` | 沿用原无组织行为,不产生组织隔离 |
165
+
166
+ 角色的操作能力、字段能力、组织 reach 和班级行范围必须在同一条 membership 中成立。不能合并多个组织的班级范围,不能用 subtree 角色的组织范围借用另一角色的班级范围。上级普通成员没有 subtree,共享 unionId 也不合并各校授权。目录映射角色只能 self,不能与 Native roleMembershipSources 争用同一角色。
167
+
168
+ 目录源最多 32 个,每个源最多 16 个 scope;每次当前人、工作组织最多 512 个不同事实。超限、源失效、手工 shadow 冲突和更新锁竞争失败关闭;无变化的投影不更新 membership 或权限版本,也不与当前事务自己的角色锁冲突。目录派生绑定稳定且分组织,原始目录仍只有平台一份。本人读取不返回 raw 或 unionId。没有工作组织时,启用了目录映射的当前授权请求返回 `OPENXIANGDA_CURRENT_USER_ORGANIZATION_REQUIRED`。
142
169
 
143
- 这是组织覆盖维度,与某资源的 `read/create/update/delete` 能力、班级 scope、行/字段策略分别组合。`subtree` 不自动授予修改权限;`self` 不是 Data API 的“记录属于当前人”谓词。上级学校/教育局的普通成员不会因层级自动成为管理员;共享 unionId 也不会把一个人在几所学校的权限合并到当前组织。
170
+ 手工给非目录角色授权使用现有 Native membership 管理面及 `createNativeRoleMembership`,新增可选 `organizationId`。组织角色必须明确目标,目标用户须是同租户活动安装的活动成员;平台管理员或应用管理员可管理。已有委托管理没有组织覆盖契约,不能扩大为跨校授权。更新不能换组织,目录派生角色的 create/update/revoke 均返回平台所有权拒绝。传统无组织角色不需要该字段。批量 create 也支持组织维度;重复目标以 user/role/organization 核对。
144
171
 
145
- 当前传统平台角色 CRUD 能保存 `organizationReach`,不等于 V2 `authz.roles` 已支持此字段。当前权限引擎也没有已接通的“当前工作组织”内置行条件,不存在可使用的 `currentOrganization()` helper。不要手改生成契约、追加虚构 requiredPlatformCapabilities 或把所有学校授予一个 unrestricted 角色来替代组织边界。
172
+ 组织归属是平台保留列 `organization_id`,不是业务字段。组织资源的读回提供这一只读 UUID,可在 Data API 的筛选和聚合 dimensions 中按学校分组;写入包含它会被拒绝。传统资源不增加该字段。创建从可信当前用户派生,更新不可修改;历史 NULL 归属不会自动推断或回填,组织资源也不会放行。唯一键按组织分区;父子表需要同样的组织策略,复合外键防止跨组织关联。已启用资源不能通过下一版本移除组织策略来开放历史数据。
146
173
 
147
- 组织数据权限还需把工作组织送入可信 Native principal,并执行数据归属、reach 与服务端行边界。在该接入完成前,以下都不能作为已支持行为交付:学校互相隔离;教育局只看/代操作全部下级数据;上级公共内容自动向后代开放。现有 `publicRead` 是已认证用户的公共字段投影,不等于组织树下发;匿名公开访问也不是跨学校共享机制。
174
+ 列表、直接 ID、聚合、导出及关联通过同一 Native RLS。命名 Nest 业务动作保留经过验证的当前用户/组织,继续核验短期调用证明、动作能力与同一 membership 的变更前后行范围。业务输入不能填充可信组织;没有当前用户证明的普通 application、后台或定时身份不获得组织资源权限。声明策略不自动授予服务身份全区访问。
148
175
 
149
- 应用可以先设计业务模型、页面及明确的业务操作;数据访问仍走已有 Data API 和受支持的 Nest operation。涉及尚未接通的组织授权闭环,记录平台依赖和所需验收,不用前端隐藏、浏览器字段或另一套成员表绕过。
176
+ 组织上下文请求实时核对目录与成员,当前暂不使用授权快照缓存。fresh 和事务请求均不读取或保存未提交快照;Head 在准备期间变化要求刷新。安装、成员、账号、主体或事实撤销后,数据库下一条语句即拒绝。源码和独立 PostgreSQL 测试不证明目标站点已经部署,也不代表真实教师/家长验收。
150
177
 
151
178
  ## 入口、同步与通知的处理边界 {#entry-sync}
152
179
 
@@ -158,7 +185,7 @@ SDK 使用 `loadCurrentDirectoryRoleFacts({ limit, after, signal })`,返回 `D
158
185
 
159
186
  ## 开发前核对与验收 {#verification}
160
187
 
161
- 1. 用项目锁定版本的 `context --json` / MCP `workspace_context` 确认平台绑定;用 `docs multi-organization` / `docs_read` 读取同版本正文。文档主题已注册,不代表 `platform_capabilities` 已有新的组织能力 code;当前不能仅凭缺少/出现某个虚构 feature 判断支持。
188
+ 1. 用项目锁定版本的 `context --json` / MCP `workspace_context` 确认平台绑定;用 `docs multi-organization` / `docs_read` 读取同版本正文。通过实际 `platform_capabilities` 核对配套声明的能力 code 和最低版本,不能把文档可读当成站点可用。
162
189
  2. 确认目标站点的源码/部署版本、正式 SQL 迁移与组织管理授权。资料版本、接口状态和实际启用分别记录;站点缺能力由平台维护者补齐,应用不自行执行迁移或发包。
163
190
  3. 在测试组织核实本人成员列表、真实企业名称、活动安装、profile/原始授权组织字段,验证同会话切换与非成员拒绝。不以单次 HTTP 200 代替响应 `code` 和业务事实。
164
191
  4. 使用家校角色前,确认平台已经提供可消费的事实读取及映射契约;使用 `self/subtree` 前,确认 V2 声明、可信上下文和服务端数据边界均已实现。未闭合就标记依赖,不能报告自动隔离通过。
@@ -1,33 +0,0 @@
1
- {
2
- "schemaVersion": "openxiangda.release-notes/v1",
3
- "version": "2.68.1",
4
- "status": "reviewed",
5
- "title": "原部署运行的流程例外只读预览",
6
- "summary": "按平台能力读取失败 DeploymentRun 的冻结候选、当前 Head 和真实流程例外,支持在独立诊断目录使用公开 SDK 读取旧工作区会话。",
7
- "newFeatures": [
8
- "`status <deployment-id> --workflow-exceptions` 只读展示原运行的例外及完整集合摘要,不确认或重试。",
9
- "独立精确版本 devkit 客户端可读取旧工作区 link/session,无需更改应用 package、lock 或冻结包。"
10
- ],
11
- "fixes": [],
12
- "affectedUsers": [
13
- "发布包含工作流的 V2 应用的开发者和管理员。"
14
- ],
15
- "upgradeSteps": [
16
- "平台需先提供 deployment.workflow-adoption-preview 1.0.0 能力;无能力时明确停止。",
17
- "使用本版根包或独立 openxiangda-devkit-core 2.67.0 诊断目录;旧应用不必为了查看例外升级依赖。",
18
- "保留原 DeploymentRun ID,先核对完整例外;生产仍只晋级已验收 TEST 原版本。"
19
- ],
20
- "knownLimitations": [
21
- "本批仅提供预览,不提供例外确认、事实转换或原 Run 恢复通道。",
22
- "truncated=true 不代表已观察完整明细;预览不授予激活许可。",
23
- "包发行不等于平台部署或真实业务验收;source/status 的独立500故障不在此修复中。"
24
- ],
25
- "compatibility": {
26
- "node": "Node.js 24 or newer for maintained toolchain",
27
- "generation": "OpenXiangda V2; no V1 migration",
28
- "platform": "New read-only preview requires deployment.workflow-adoption-preview 1.0.0; contracts remains 2.88.0"
29
- },
30
- "issues": [],
31
- "sha256": "859687bd04474e031528a651304916e7535919419aa697ec1892ff5b17cdf666",
32
- "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.68.1"
33
- }
@@ -1,32 +0,0 @@
1
- {
2
- "schemaVersion": "openxiangda.release-notes/v1",
3
- "version": "2.69.1",
4
- "status": "reviewed",
5
- "title": "流程画布按需面板与连续分支保存修复",
6
- "summary": "修复流程设计器的常驻面板、连续条件路由断线及带可读名称的草稿无法保存。",
7
- "newFeatures": [],
8
- "fixes": [
9
- "流程大纲默认隐藏,节点设置默认关闭;选择节点后按需打开配置,浮层不挤压编辑画布。",
10
- "相邻条件区域只拥有各自分支,汇合目标保持单一位置;连续条件和嵌套并行的连线接回实际目标节点。",
11
- "正式流程文档schema接受已有readability元数据,保留闭集字段、长度与数量上限及原业务权限校验。"
12
- ],
13
- "affectedUsers": [
14
- "使用V2流程设计器编辑或维护审批流程的应用。"
15
- ],
16
- "upgradeSteps": [
17
- "安装精确openxiangda 2.69.1官方组合并重新检查、构建应用。",
18
- "平台后端同步正式contracts包及同源回执后,才具备草稿保存schema修复;应用自行维护流程列表和独立画布路由。"
19
- ],
20
- "knownLimitations": [
21
- "不修改历史实例、审批边界或业务拓扑;此版本不包含原DeploymentRun例外ack接口。",
22
- "包发行不等于平台部署或现场草稿保存验收,已有未保存输入需保留。"
23
- ],
24
- "compatibility": {
25
- "node": "Node.js 24 or newer for maintained toolchain",
26
- "generation": "OpenXiangda V2; V1 unchanged",
27
- "platform": "平台后端须消费本轮正式contracts及配套组合;原权限、revision和operationId守卫保持"
28
- },
29
- "issues": [],
30
- "sha256": "529eee3d6d426c149635e6143310ff6a4a01da6c7243e203ff959f9d3b34a4b5",
31
- "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.69.1"
32
- }