diff --git a/system-update/releases/model-conversion-20261003.json b/system-update/releases/model-conversion-20261003.json new file mode 100644 index 0000000..7196cd9 --- /dev/null +++ b/system-update/releases/model-conversion-20261003.json @@ -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." + ] +} diff --git a/system-update/releases/model-conversion-20261003/README.md b/system-update/releases/model-conversion-20261003/README.md new file mode 100644 index 0000000..9687d1f --- /dev/null +++ b/system-update/releases/model-conversion-20261003/README.md @@ -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`。 diff --git a/system-update/releases/model-conversion-20261003/browser-import.png b/system-update/releases/model-conversion-20261003/browser-import.png new file mode 100644 index 0000000..29ff6e7 Binary files /dev/null and b/system-update/releases/model-conversion-20261003/browser-import.png differ diff --git a/system-update/releases/model-conversion-20261003/browser-local.json b/system-update/releases/model-conversion-20261003/browser-local.json new file mode 100644 index 0000000..5e3b2ff --- /dev/null +++ b/system-update/releases/model-conversion-20261003/browser-local.json @@ -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" + } + ] +} \ No newline at end of file diff --git a/system-update/releases/model-conversion-20261003/conversion-local.json b/system-update/releases/model-conversion-20261003/conversion-local.json new file mode 100644 index 0000000..17f8389 --- /dev/null +++ b/system-update/releases/model-conversion-20261003/conversion-local.json @@ -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 +} \ No newline at end of file diff --git a/system-update/releases/model-conversion-20261003/protocol-local.json b/system-update/releases/model-conversion-20261003/protocol-local.json new file mode 100644 index 0000000..b61391e --- /dev/null +++ b/system-update/releases/model-conversion-20261003/protocol-local.json @@ -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 + } + ] +} \ No newline at end of file