修复账号画布绑定与切号恢复边界

按账号主体持久化项目与资源绑定并迁移旧版绑定
在线性化会话租约内冻结生成与编辑账本身份
通过 Runner owner claim 隔离跨 GUI 登录态
为编辑器幂等创建补充持久回执与公开契约
保留不确定本地登记现场并阻止重复生成
补充切号、恢复、下载、幂等和会话竞态回归
增加真实 SpacetimeDB 幂等事务门禁
This commit is contained in:
2026-08-24 01:32:30 +08:00
parent 29894de43d
commit ad93d4534d
45 changed files with 12113 additions and 1163 deletions
@@ -418,6 +418,11 @@
"ExternalApiKey": []
}
],
"parameters": [
{
"$ref": "#/components/parameters/IdempotentCreateKey"
}
],
"requestBody": {
"required": false,
"content": {
@@ -439,11 +444,17 @@
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"409": {
"$ref": "#/components/responses/IdempotentCreateConflict"
}
}
}
@@ -684,6 +695,9 @@
"parameters": [
{
"$ref": "#/components/parameters/ProjectId"
},
{
"$ref": "#/components/parameters/IdempotentCreateKey"
}
],
"requestBody": {
@@ -718,6 +732,9 @@
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"409": {
"$ref": "#/components/responses/IdempotentCreateConflict"
}
}
}
@@ -766,6 +783,11 @@
"ExternalApiKey": []
}
],
"parameters": [
{
"$ref": "#/components/parameters/IdempotentCreateKey"
}
],
"requestBody": {
"required": true,
"content": {
@@ -795,6 +817,9 @@
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"409": {
"$ref": "#/components/responses/IdempotentCreateConflict"
}
}
}
@@ -1557,6 +1582,18 @@
"maxLength": 128,
"pattern": "^[!-~]+$"
}
},
"IdempotentCreateKey": {
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "可选的稳定创建幂等键。同一账号、接口与键使用相同规范化请求体重试时返回首次结果的当前记录,即使该记录后来已被修改;同键不同请求体返回 409。首次结果已删除时,同键重放同样返回 409 且不会重新创建。网络结果不确定时必须复用原值。",
"schema": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[!-~]+$"
}
}
},
"responses": {
@@ -1610,6 +1647,16 @@
}
}
},
"IdempotentCreateConflict": {
"description": "稳定创建幂等冲突:同一 Idempotency-Key 携带不同规范化请求体,或首次创建结果已删除 / 缺少耐久回执;服务端不会重新创建或重复首次副作用",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"UpstreamError": {
"description": "上游生成服务失败",
"content": {