openxiangda 2.3.0 → 2.4.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.
- package/documentation/backend.md +19 -2
- package/documentation/getting-started.md +7 -7
- package/documentation/manifest.json +3 -3
- package/package.json +22 -22
- package/releases/2.4.0.json +37 -0
- package/skills/manifest.json +1 -1
- package/skills/openxiangda-v2/SKILL.md +4 -4
- package/skills/openxiangda-v2/references/backend.md +19 -2
- package/skills/openxiangda-v2/references/getting-started.md +7 -7
package/documentation/backend.md
CHANGED
|
@@ -45,10 +45,27 @@ operation、事件消费者、人员提供器,然后运行 `pnpm openxiangda c
|
|
|
45
45
|
|
|
46
46
|
只读前置条件使用 `record-exists` 或 `record-match`,它们不要求同记录 mutation,
|
|
47
47
|
但仍执行 read capability、字段权限与行级授权。需要与数据库当前时间比较时使用
|
|
48
|
-
`databaseNowAssertion('publishAt', 'lte')
|
|
49
|
-
|
|
48
|
+
`databaseNowAssertion('publishAt', 'lte')`;平台在守卫行锁及写入前校验完成后,
|
|
49
|
+
用一次 PostgreSQL `clock_timestamp()` 完成所有动态断言,并把该接受时刻作为
|
|
50
|
+
`evaluatedAt` 存入幂等回执。它不是最终提交时刻。相同幂等键重放不会重新
|
|
50
51
|
读取当前时间。不得把 `Date.now()`、SQL 表达式、时区偏移或调用方时钟塞入断言。
|
|
51
52
|
|
|
53
|
+
新建或更新的时间窗口使用 `operation-time`,直接引用本次操作提交的 datetime 字段:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
const guards = [
|
|
57
|
+
{ kind: 'operation-time', operationIndex: 0, field: 'startsAt',
|
|
58
|
+
operator: 'gt', offsetMilliseconds: 0, errorCode: 'OPENXIANGDA_NOT_FUTURE' },
|
|
59
|
+
{ kind: 'operation-time', operationIndex: 0, field: 'startsAt',
|
|
60
|
+
operator: 'lte', offsetMilliseconds: 2592000000, errorCode: 'OPENXIANGDA_TOO_FAR' },
|
|
61
|
+
];
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
上述规则表示第一个 create/update 操作的 startsAt 必须晚于平台接受时刻,
|
|
65
|
+
且最多提前 30 天。字段须已声明、可写,并在操作 data 中提供带 Z 或显式偏移的
|
|
66
|
+
ISO 时间字符串;不接受空值、嵌套路径、引用或表达式。offsetMilliseconds 是
|
|
67
|
+
最多正负 366 天的整数,所有时间条件共享一个接受时刻。需要平台 Data API 1.1.0。
|
|
68
|
+
|
|
52
69
|
|
|
53
70
|
## 业务动作与普通查询 {#business-action}
|
|
54
71
|
|
|
@@ -11,10 +11,10 @@ OpenXiangda 2.0 默认生成 React 应用和共享契约。普通 CRUD、标准
|
|
|
11
11
|
以下命令的版本占位符由随包资料替换为该根包的精确版本。网站源码阅读者应先确认要使用的发行版本。
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
pnpm dlx openxiangda@2.
|
|
15
|
-
pnpm dlx openxiangda@2.
|
|
16
|
-
pnpm dlx openxiangda@2.
|
|
17
|
-
pnpm dlx openxiangda@2.
|
|
14
|
+
pnpm dlx openxiangda@2.4.0 skill install --force
|
|
15
|
+
pnpm dlx openxiangda@2.4.0 auth status --base-url <平台地址> --json
|
|
16
|
+
pnpm dlx openxiangda@2.4.0 login --base-url https://platform.example.com
|
|
17
|
+
pnpm dlx openxiangda@2.4.0 create my-app --base-url https://platform.example.com
|
|
18
18
|
cd my-app
|
|
19
19
|
pnpm openxiangda context --json
|
|
20
20
|
pnpm openxiangda dev
|
|
@@ -114,9 +114,9 @@ MCP 的 `docs_read` 可以读取本说明,当前没有独立的源码操作 MC
|
|
|
114
114
|
无需本地工作区,使用本 Skill 随包精确版本或已安装的对应 CLI:
|
|
115
115
|
|
|
116
116
|
```bash
|
|
117
|
-
pnpm dlx openxiangda@2.
|
|
118
|
-
pnpm dlx openxiangda@2.
|
|
119
|
-
pnpm dlx openxiangda@2.
|
|
117
|
+
pnpm dlx openxiangda@2.4.0 auth status --base-url <平台> --json
|
|
118
|
+
pnpm dlx openxiangda@2.4.0 source resolve <仓库URL> --base-url <平台> --json
|
|
119
|
+
pnpm dlx openxiangda@2.4.0 source clone <仓库URL> <新目录> --base-url <平台> --json
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
登录缺失或站点不匹配时,先按该平台执行 login。resolve 根据平台已经登记的绑定返回
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "openxiangda.documentation/v1",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"topics": [
|
|
5
5
|
{
|
|
6
6
|
"id": "getting-started",
|
|
7
7
|
"title": "安装与开始开发",
|
|
8
8
|
"file": "getting-started.md",
|
|
9
|
-
"sha256": "
|
|
9
|
+
"sha256": "bff9fdb110552a735202c9ec0fe6112f3d852760b0888d469973923dc492f5cd"
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
"id": "product-design",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"id": "backend",
|
|
79
79
|
"title": "按需后端与业务动作",
|
|
80
80
|
"file": "backend.md",
|
|
81
|
-
"sha256": "
|
|
81
|
+
"sha256": "9ef4d6ac9b4bee97d28daeacf7e88a9460f2402a35e0ece4ba2888cdceb354e7"
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
"id": "administration",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openxiangda",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "OpenXiangda 2.0 的统一命令、应用 SDK、MCP 与中文 AI 技能资料。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -58,13 +58,13 @@
|
|
|
58
58
|
"antd-mobile": "5.42.3",
|
|
59
59
|
"dayjs": "1.11.18",
|
|
60
60
|
"docx-preview": "0.3.7",
|
|
61
|
-
"openxiangda-cli": "2.2.
|
|
62
|
-
"openxiangda-contracts": "2.
|
|
63
|
-
"openxiangda-devkit-core": "2.
|
|
61
|
+
"openxiangda-cli": "2.2.5",
|
|
62
|
+
"openxiangda-contracts": "2.4.0",
|
|
63
|
+
"openxiangda-devkit-core": "2.4.0",
|
|
64
64
|
"openxiangda-legacy": "npm:openxiangda@1.0.268",
|
|
65
|
-
"openxiangda-mcp": "2.0.
|
|
66
|
-
"openxiangda-nest": "2.0.
|
|
67
|
-
"openxiangda-skill-kit": "2.0.
|
|
65
|
+
"openxiangda-mcp": "2.0.6",
|
|
66
|
+
"openxiangda-nest": "2.0.6",
|
|
67
|
+
"openxiangda-skill-kit": "2.0.7",
|
|
68
68
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz"
|
|
69
69
|
},
|
|
70
70
|
"peerDependencies": {
|
|
@@ -130,18 +130,18 @@
|
|
|
130
130
|
},
|
|
131
131
|
"openxiangdaRelease": {
|
|
132
132
|
"schemaVersion": "openxiangda.release-notes/v1",
|
|
133
|
-
"version": "2.
|
|
134
|
-
"title": "
|
|
133
|
+
"version": "2.4.0",
|
|
134
|
+
"title": "事务接受时刻与预约时间窗口",
|
|
135
135
|
"status": "reviewed",
|
|
136
|
-
"summary": "
|
|
136
|
+
"summary": "增加绑定提交字段的时间守卫,统一在锁等待结束后使用平台数据库时间判断业务期限。",
|
|
137
137
|
"newFeatures": [
|
|
138
|
-
"
|
|
138
|
+
"operation-time 守卫可检查 create/update 中的 datetime 字段,支持正负 366 天以内的整数毫秒偏移和六种比较。"
|
|
139
139
|
],
|
|
140
140
|
"fixes": [
|
|
141
|
-
"
|
|
141
|
+
"动态时间条件使用守卫锁及写入前校验完成后的数据库接受时刻,成功重放保持原 evaluatedAt。"
|
|
142
142
|
],
|
|
143
143
|
"affectedUsers": [
|
|
144
|
-
"
|
|
144
|
+
"需要预约窗口、截止时间、签到时间或并发事务时间条件的 V2 应用开发者。"
|
|
145
145
|
],
|
|
146
146
|
"compatibility": {
|
|
147
147
|
"node": ">=24",
|
|
@@ -149,21 +149,21 @@
|
|
|
149
149
|
"v1",
|
|
150
150
|
"v2"
|
|
151
151
|
],
|
|
152
|
-
"v1Policy": "V1
|
|
153
|
-
"platformPolicy": "
|
|
152
|
+
"v1Policy": "V1 引擎和已有应用契约不变。",
|
|
153
|
+
"platformPolicy": "新编译的数据应用要求 Data API 1.1.0 和匹配的共享校验器;平台预检拒绝不支持该能力的目标。"
|
|
154
154
|
},
|
|
155
155
|
"upgradeSteps": [
|
|
156
|
-
"
|
|
157
|
-
"
|
|
156
|
+
"将应用精确依赖升级至 openxiangda 2.4.0,更新锁文件并刷新技能资料。",
|
|
157
|
+
"平台部署匹配版本后执行正式检查、测试发布、数据库截止和真实角色验收。"
|
|
158
158
|
],
|
|
159
159
|
"knownLimitations": [
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
-
"
|
|
160
|
+
"evaluatedAt 是动态条件的接受时刻,不是最终数据库提交时刻。",
|
|
161
|
+
"字段必须是声明且可写的 datetime 字面值,不支持空值、嵌套路径或操作引用。",
|
|
162
|
+
"工具包发布不代表平台已部署或应用业务验收已通过。"
|
|
163
163
|
],
|
|
164
164
|
"issues": [],
|
|
165
|
-
"sha256": "
|
|
166
|
-
"url": "https://github.com/1377385356/openxiangda/releases/tag/v2.
|
|
165
|
+
"sha256": "2c4e0bf9f880e72a454010d2590fe3ac5b2993a215473c8e29ef29e77431e42a",
|
|
166
|
+
"url": "https://github.com/1377385356/openxiangda/releases/tag/v2.4.0"
|
|
167
167
|
},
|
|
168
168
|
"scripts": {
|
|
169
169
|
"build": "node ../../scripts/prune-package-dist.mjs && tsc -p tsconfig.json && node scripts/copy-assets.mjs",
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "openxiangda.release-notes/v1",
|
|
3
|
+
"version": "2.4.0",
|
|
4
|
+
"title": "事务接受时刻与预约时间窗口",
|
|
5
|
+
"status": "reviewed",
|
|
6
|
+
"summary": "增加绑定提交字段的时间守卫,统一在锁等待结束后使用平台数据库时间判断业务期限。",
|
|
7
|
+
"newFeatures": [
|
|
8
|
+
"operation-time 守卫可检查 create/update 中的 datetime 字段,支持正负 366 天以内的整数毫秒偏移和六种比较。"
|
|
9
|
+
],
|
|
10
|
+
"fixes": [
|
|
11
|
+
"动态时间条件使用守卫锁及写入前校验完成后的数据库接受时刻,成功重放保持原 evaluatedAt。"
|
|
12
|
+
],
|
|
13
|
+
"affectedUsers": [
|
|
14
|
+
"需要预约窗口、截止时间、签到时间或并发事务时间条件的 V2 应用开发者。"
|
|
15
|
+
],
|
|
16
|
+
"compatibility": {
|
|
17
|
+
"node": ">=24",
|
|
18
|
+
"workspaceGenerations": [
|
|
19
|
+
"v1",
|
|
20
|
+
"v2"
|
|
21
|
+
],
|
|
22
|
+
"v1Policy": "V1 引擎和已有应用契约不变。",
|
|
23
|
+
"platformPolicy": "新编译的数据应用要求 Data API 1.1.0 和匹配的共享校验器;平台预检拒绝不支持该能力的目标。"
|
|
24
|
+
},
|
|
25
|
+
"upgradeSteps": [
|
|
26
|
+
"将应用精确依赖升级至 openxiangda 2.4.0,更新锁文件并刷新技能资料。",
|
|
27
|
+
"平台部署匹配版本后执行正式检查、测试发布、数据库截止和真实角色验收。"
|
|
28
|
+
],
|
|
29
|
+
"knownLimitations": [
|
|
30
|
+
"evaluatedAt 是动态条件的接受时刻,不是最终数据库提交时刻。",
|
|
31
|
+
"字段必须是声明且可写的 datetime 字面值,不支持空值、嵌套路径或操作引用。",
|
|
32
|
+
"工具包发布不代表平台已部署或应用业务验收已通过。"
|
|
33
|
+
],
|
|
34
|
+
"issues": [],
|
|
35
|
+
"sha256": "2c4e0bf9f880e72a454010d2590fe3ac5b2993a215473c8e29ef29e77431e42a",
|
|
36
|
+
"url": "https://github.com/1377385356/openxiangda/releases/tag/v2.4.0"
|
|
37
|
+
}
|
package/skills/manifest.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
{
|
|
5
5
|
"name": "openxiangda-v2",
|
|
6
6
|
"description": "使用 OpenXiangda 2.0 从模糊业务想法、已有资料或具体变更出发,通过对话发现模块、完成详细产品设计,再开发、检查和交付应用。维护 1.x 应用时使用对应的 1.x 技能。",
|
|
7
|
-
"sha256": "
|
|
7
|
+
"sha256": "ef5fadf78a37085d925678710fecbdca3a466987a27770aa6421c869be6bbc03"
|
|
8
8
|
}
|
|
9
9
|
]
|
|
10
10
|
}
|
|
@@ -18,10 +18,10 @@ description: 使用 OpenXiangda 2.0 从模糊业务想法、已有资料或具
|
|
|
18
18
|
未创建工作区时使用本 Skill 随根包发布的精确版本:
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
pnpm dlx openxiangda@2.
|
|
22
|
-
pnpm dlx openxiangda@2.
|
|
23
|
-
pnpm dlx openxiangda@2.
|
|
24
|
-
pnpm dlx openxiangda@2.
|
|
21
|
+
pnpm dlx openxiangda@2.4.0 auth status --base-url <平台地址> --json
|
|
22
|
+
pnpm dlx openxiangda@2.4.0 login --base-url <平台地址>
|
|
23
|
+
pnpm dlx openxiangda@2.4.0 create <应用目录> --base-url <同一平台地址>
|
|
24
|
+
pnpm dlx openxiangda@2.4.0 skill install --force
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
创建前把产品要求的目标平台明确带入命令,不从旧登录态推断站点。已有工作区从原绑定恢复,平台不一致时先解决登录与目标,不改 link 文件跨站创建。
|
|
@@ -45,10 +45,27 @@ operation、事件消费者、人员提供器,然后运行 `pnpm openxiangda c
|
|
|
45
45
|
|
|
46
46
|
只读前置条件使用 `record-exists` 或 `record-match`,它们不要求同记录 mutation,
|
|
47
47
|
但仍执行 read capability、字段权限与行级授权。需要与数据库当前时间比较时使用
|
|
48
|
-
`databaseNowAssertion('publishAt', 'lte')
|
|
49
|
-
|
|
48
|
+
`databaseNowAssertion('publishAt', 'lte')`;平台在守卫行锁及写入前校验完成后,
|
|
49
|
+
用一次 PostgreSQL `clock_timestamp()` 完成所有动态断言,并把该接受时刻作为
|
|
50
|
+
`evaluatedAt` 存入幂等回执。它不是最终提交时刻。相同幂等键重放不会重新
|
|
50
51
|
读取当前时间。不得把 `Date.now()`、SQL 表达式、时区偏移或调用方时钟塞入断言。
|
|
51
52
|
|
|
53
|
+
新建或更新的时间窗口使用 `operation-time`,直接引用本次操作提交的 datetime 字段:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
const guards = [
|
|
57
|
+
{ kind: 'operation-time', operationIndex: 0, field: 'startsAt',
|
|
58
|
+
operator: 'gt', offsetMilliseconds: 0, errorCode: 'OPENXIANGDA_NOT_FUTURE' },
|
|
59
|
+
{ kind: 'operation-time', operationIndex: 0, field: 'startsAt',
|
|
60
|
+
operator: 'lte', offsetMilliseconds: 2592000000, errorCode: 'OPENXIANGDA_TOO_FAR' },
|
|
61
|
+
];
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
上述规则表示第一个 create/update 操作的 startsAt 必须晚于平台接受时刻,
|
|
65
|
+
且最多提前 30 天。字段须已声明、可写,并在操作 data 中提供带 Z 或显式偏移的
|
|
66
|
+
ISO 时间字符串;不接受空值、嵌套路径、引用或表达式。offsetMilliseconds 是
|
|
67
|
+
最多正负 366 天的整数,所有时间条件共享一个接受时刻。需要平台 Data API 1.1.0。
|
|
68
|
+
|
|
52
69
|
|
|
53
70
|
## 业务动作与普通查询 {#business-action}
|
|
54
71
|
|
|
@@ -11,10 +11,10 @@ OpenXiangda 2.0 默认生成 React 应用和共享契约。普通 CRUD、标准
|
|
|
11
11
|
以下命令的版本占位符由随包资料替换为该根包的精确版本。网站源码阅读者应先确认要使用的发行版本。
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
pnpm dlx openxiangda@2.
|
|
15
|
-
pnpm dlx openxiangda@2.
|
|
16
|
-
pnpm dlx openxiangda@2.
|
|
17
|
-
pnpm dlx openxiangda@2.
|
|
14
|
+
pnpm dlx openxiangda@2.4.0 skill install --force
|
|
15
|
+
pnpm dlx openxiangda@2.4.0 auth status --base-url <平台地址> --json
|
|
16
|
+
pnpm dlx openxiangda@2.4.0 login --base-url https://platform.example.com
|
|
17
|
+
pnpm dlx openxiangda@2.4.0 create my-app --base-url https://platform.example.com
|
|
18
18
|
cd my-app
|
|
19
19
|
pnpm openxiangda context --json
|
|
20
20
|
pnpm openxiangda dev
|
|
@@ -114,9 +114,9 @@ MCP 的 `docs_read` 可以读取本说明,当前没有独立的源码操作 MC
|
|
|
114
114
|
无需本地工作区,使用本 Skill 随包精确版本或已安装的对应 CLI:
|
|
115
115
|
|
|
116
116
|
```bash
|
|
117
|
-
pnpm dlx openxiangda@2.
|
|
118
|
-
pnpm dlx openxiangda@2.
|
|
119
|
-
pnpm dlx openxiangda@2.
|
|
117
|
+
pnpm dlx openxiangda@2.4.0 auth status --base-url <平台> --json
|
|
118
|
+
pnpm dlx openxiangda@2.4.0 source resolve <仓库URL> --base-url <平台> --json
|
|
119
|
+
pnpm dlx openxiangda@2.4.0 source clone <仓库URL> <新目录> --base-url <平台> --json
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
登录缺失或站点不匹配时,先按该平台执行 login。resolve 根据平台已经登记的绑定返回
|