docs(deploy): 记录模型转换镜像与本地验收结果
This commit is contained in:
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user