docs(deploy): 记录模型转换镜像与本地验收结果

This commit is contained in:
2026-10-03 02:47:42 +08:00
parent be3ba8838a
commit c252a2f9ad
6 changed files with 251 additions and 0 deletions
@@ -0,0 +1,118 @@
{
"status": "prepared-awaiting-production-target",
"productVersion": "3.23.0.20261003",
"source": {
"backend": "8a67a2f180e6c6af3fab760a32d6bcc78ca1cee2",
"backendImageBuild": "83cefbfdf2bc909d11ace9f020b108145844051a",
"web": "965c417288c5f09260c6e28254cde62af7683854",
"deploymentImplementation": "be3ba8838a0db0ad7d6e4a711303caa607ae95be"
},
"images": {
"server": "sha256:a21a59205ced431987dda6c72d4fe5c0ad00ced97311500b10d08a9c1237bbce",
"web": "sha256:bb1ff1dc77518ca01b770d03317fbddb0e2bf8eda6c27b70d6dbec0944d8e78e",
"webNoSsr": "sha256:d97c52ac76c462140827e8d9d9a1198f36dd2cc7d2c6defed60f9f7aee87cbaf",
"modelConversionWorker": "sha256:085fa49d99a06562ce9634bfdd8567efdfe4e38754e9688de81288d2e2578526"
},
"imagePlatform": "linux/amd64",
"publishedTags": "version-only",
"floatingTagsPromoted": false,
"production": {
"status": "not-executed",
"targetHost": null,
"reason": "Latest release record and ignored production connection config identify different hosts; clarification pending."
},
"checks": [
{
"name": "frontend directed tests",
"passed": true,
"tests": 190,
"durationSeconds": 1.237
},
{
"name": "API directed Nx tests",
"passed": true,
"tests": 88,
"durationSeconds": 2.02
},
{
"name": "Linux Worker in formal amd64 image including KTX2 and memory termination",
"passed": true,
"tests": 14,
"durationSeconds": 36.637
},
{
"name": "Bash/PowerShell update, real Git re-exec and actual Compose configuration",
"passed": true,
"durationSeconds": 21.93,
"boundary": "Docker command transport is stubbed in entrypoint tests; actual Compose is resolved separately."
},
{
"name": "frontend SSR production build",
"passed": true,
"durationSeconds": 502.95
},
{
"name": "frontend no-SSR production build",
"passed": true,
"durationSeconds": 182.66
},
{
"name": "static resource upload and object verification",
"passed": true,
"objects": 2881,
"durationSeconds": 168.05
},
{
"name": "formal API and Worker with DEV upload/task/artifact chain",
"passed": true,
"cases": 8
},
{
"name": "800k GLB formal image conversion, artifact hash and meter dimensions",
"passed": true,
"evidence": "model-conversion-20261003/conversion-local.json"
},
{
"name": "canvas i18n locale check",
"passed": false,
"preExisting": true,
"missingKey": "canvasFlow.remotePlugin.inputPortMissing",
"locales": [
"zh-CN",
"en-US",
"ja-JP",
"ko-KR"
],
"boundary": "Present at origin/dev before the director3d commits."
},
{
"name": "Worker official amd64 image build",
"passed": true,
"durationSeconds": 632.9
},
{
"name": "formal frontend image actual OBJ file input, meters, lightweight copy and WebGL UI",
"passed": true,
"standingHeightMeters": 1.72,
"dimensionsMeters": [
20,
0.2,
20
],
"errors": 0,
"sourceResourceCacheReused": true,
"evidence": "model-conversion-20261003/browser-local.json",
"screenshot": "model-conversion-20261003/browser-import.png"
}
],
"gateway": {
"updateRequiredFromLatestRecordedProductionSource": false,
"basis": "No diff under apps/easyai-wsgateway or shared libraries compared with recorded backend source e3f12240; actual target still needs inspection."
},
"limitations": [
"These are local candidate-image acceptance results, not production acceptance.",
"M4 Max executes amd64 containers through emulation; reported conversion timing is not a production hardware benchmark.",
"Customer original GLB is not available.",
"Live customized Compose, ICE overrides and proxy access must be inspected on the confirmed target before update."
]
}
@@ -0,0 +1,11 @@
# 模型转换服务部署候选
版本 `3.23.0.20261003` 的固定版本镜像已发布;尚未提升浮动标签或执行线上更新。目标主机待确认,本记录不能作为线上验收通过的证据。
部署代码通过 `update.sh` / `update.ps1` 完成环境迁移、共享令牌初始化、指定服务镜像拉取、容器启动和健康等待。生产只使用更新脚本应用配置;确认主机后还需检查其现有 Compose、端口、数据卷、ICE 与代理设置,再执行上线和真实转换验收。
`conversion-local.json` 是正式 API / Worker amd64 镜像、真实 DEV 存储和任务链路的合成 GLB 转换记录;`protocol-local.json` 记录 8 个实际协议场景。原文件约 19.2 MB、798,848 个三角面,转换产物 714,896 字节、100,000 个三角面,宽深均 20 米,高度误差约 0.022 毫米。当前 M4 Max 使用 amd64 模拟执行,耗时不能当作线上硬件性能。
镜像源码为后端 `83cefbfd` 与前端 `965c4172`;后端后续 `8a67a2f1` 只增加验收工具与说明,没有改镜像运行代码。主工作区的收益钱包、鉴权、上传和 PM2 改动未被此次发布提交带入。
正式前端镜像还通过真实浏览器选择 OBJ、确认米制单位、默认性能优先轻量副本和 WebGL 显示验收:素体站立身高 1.72 米,导入实体 20 × 0.2 × 20 米。此轮复用了同项目的已上传来源资源,记录在 `browser-local.json`,截图为 `browser-import.png`。
Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

@@ -0,0 +1,18 @@
{
"passed": true,
"standingHeight": "1.72",
"lightweight": true,
"quality": "performance",
"dimensions": {
"width": "20.00",
"height": "0.20",
"depth": "20.00"
},
"errors": [],
"requests": [
{
"status": 201,
"path": "http://127.0.0.1:3101/model-conversion/resources/source-upload"
}
]
}
@@ -0,0 +1,64 @@
{
"passed": true,
"apiOrigin": "http://127.0.0.1:3101",
"projectId": "6abff8d24f5fe54612cf8f3b",
"nodeId": "model-conversion-deployment-acceptance",
"taskId": "6abff8dd4f5fe54612cf8f8f",
"sourceHash": "f686ed16f4f90cc9b8ad9b5fc7d133d3768b1851620b107dd811fbd85a19f834",
"sourceBytes": 19203544,
"artifactHash": "889709b74d725388f3b225f7b158a0717d0c07fa0a8532fad8358cecf616f581",
"artifactBytes": 714896,
"originalDimensions": {
"width": 20,
"height": 0.20000000298023224,
"depth": 20
},
"actualDimensions": {
"width": 20,
"height": 0.19997775554656982,
"depth": 20
},
"loadingUnit": "meters",
"converterVersion": "assimp6.0.5-gltf4.3.0-meshopt0.25.0-ktx4.4.2-recipe2",
"statistics": {
"before": {
"triangles": 798848,
"meshes": 1,
"primitives": 1,
"nodes": 2,
"skins": 0,
"animations": 0,
"morphPrimitives": 0,
"geometryBytes": 19202712,
"textures": [],
"estimatedTextureGpuBytes": 0
},
"after": {
"triangles": 100000,
"meshes": 1,
"primitives": 1,
"nodes": 2,
"skins": 0,
"animations": 0,
"morphPrimitives": 0,
"geometryBytes": 1830360,
"textures": [],
"estimatedTextureGpuBytes": 0
},
"primary": {
"triangles": 100000,
"meshes": 1,
"primitives": 1,
"nodes": 2,
"skins": 0,
"animations": 0,
"morphPrimitives": 0,
"geometryBytes": 1830360,
"textures": [],
"estimatedTextureGpuBytes": 0
}
},
"uploadMs": 11026,
"conversionAndDownloadMs": 17482,
"elapsedMs": 28776
}
@@ -0,0 +1,40 @@
{
"sourceSha": "83cefbfdf2bc909d11ace9f020b108145844051a",
"projectId": "6abff81f4f5fe54612cf7f11",
"sourceHash": "263a8cd920cf8e06abaa996cf4aeec27ab7a609d77499028020d003c6e576b4f",
"cases": [
{
"name": "actual upload/worker/persistent artifact/idempotency/no port writes",
"passed": true,
"taskId": "6abff8204f5fe54612cf7f34"
},
{
"name": "verified upload and conversion cache reuse",
"passed": true
},
{
"name": "generic task refresh recovery",
"passed": true
},
{
"name": "cross-project resource rejected",
"passed": true
},
{
"name": "paid channel default disabled",
"passed": true
},
{
"name": "changed source hash rejected",
"passed": true
},
{
"name": "queued cancellation survives worker restart; late completion not applied",
"passed": true
},
{
"name": "persisted locked node blocks import",
"passed": true
}
]
}