[SEN] 建立新 GoAdmin 基线的 Windows 配置、启动与打包交付 #70

Closed
opened 2026-08-14 10:26:40 +08:00 by ila · 9 comments
Owner

状态

已完成

基本信息

  • 类型:需求 / 新 GoAdmin 基线重建
  • 任务类型:单项目独立任务
  • 主项目:Sense
  • 主 agent:Sense agent
  • 所属 Epic:#7
  • 所属 MVP:#8
  • 前置工单:#69
  • 是否允许与前置工单并行:否
  • 原因:交付包必须基于完整 Sense 独立纵切生成,不能在业务模块未稳定前冻结启动和目录结构。
  • 独立运行:Brain、Bell 均不启动时完成实现和验收

原始需求与追溯

  • 来源:用户于 2026-08-14 要求先建立 Sense 全部独立任务工单;Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix。
  • 需求摘要:在 #61 冻结 GoAdmin/go-admin-ui 源码派生骨架上,重新实现 Sense 独立纵切;旧 explore 只用于业务、测试和故障证据,不复制自研基础框架。
  • 历史对照:#37、#40、#42、#44、#46 及 Windows 实际启动排错记录。

目标

提供可复制的 Windows amd64 前后端打包、包内配置加载、PostgreSQL 迁移、MediaMTX 启动编排、日志位置和安全初始化说明。

做什么

建立 build/package/start/check 脚本;读取包内 config/sense.env 且非空进程环境优先;启动前检查数据库、端口、目录和 MediaMTX;提供迁移、备份/恢复入口和明确错误。

不做什么

不提交真实连接串、密码或 token;不自动创建生产默认管理员;不打包 node_modules、本地数据库或客户数据;不修改根级部署。

GoAdmin 复用与文档门禁

  • 必须沿用 #61 建立的 Cobra、Gin、GORM、Casbin、JWT、迁移、Router、Store、Axios、Layout 和权限链。
  • 优先复用 go-admin-ui 的页面容器、搜索栏、表格、表单、分页、Dialog、Tag、权限按钮和反馈组件。
  • 冻结 go-admin-doc 必查:cmd/server.md、cmd/migrate.md、advanced/config.md 与冻结上游 README/构建命令。
  • 在工单评论记录实际阅读文件、采用方式及无法复用而新增的业务组件。
  • 不永久删除默认模块;无关能力采用菜单、路由、权限和后端访问同时禁用。

写路径

  • Sense/scripts/build/**
  • Sense/scripts/runtime/**
  • Sense/config/**
  • Sense/package/**
  • Sense/README-WINDOWS.md
  • Sense/tests/package/**
  • Sense/server/app/sense/media/runtime.go
  • Sense/server/app/sense/media/runtime_test.go
  • Sense/server/cmd/api/server.go
  • Sense/server/cmd/api/web.go
  • Sense/server/cmd/api/web_test.go
  • Sense/.gitignore

禁止写入:Brain/**、Bell/**、contracts/**、根级部署配置、docs/**、wiki-docs.json。如实现发现必须修改这些路径,停止并转协同工单。

文档影响

更新 Windows 安装、配置、数据库准备、管理员初始化、启动停止、日志、备份恢复和排错。

长期文档先更新 Gitea Wiki;本地 docs/ 镜像由单一协调工单同步,避免共享路径冲突。

验收标准

  • 干净环境可按单一命令生成 Windows amd64 交付包
  • 包不包含 node_modules、构建缓存、真实秘密或客户数据
  • start 脚本读取 config/sense.env,进程环境优先且不执行配置内容
  • 生产启动检查 PostgreSQL 数据库、迁移、端口和 MediaMTX,错误可行动
  • demo 与 production 明确隔离,demo 数据不可冒充生产
  • 提供安全管理员初始化、密码修改、停止、备份和恢复步骤

验证方式

  • PowerShell/bat 参数、配置优先级、特殊字符和失败路径测试
  • Go/前端 production build 与包内容审计
  • 全新 PostgreSQL + MediaMTX Windows 包 smoke
  • 秘密、node_modules、dist 嵌套和默认密码扫描

风险与回退

打包脚本可能泄漏环境或造成错误启动。只读取白名单 SENSE_*,不打印值;测试使用隔离目录和数据库;回退交付产物和脚本。

协同需求摘要

本工单不建立跨项目契约。发现 Sense→Brain 源/区域配置或 Sense/Brain→Bell 事件/证据需求时,只记录生产者、消费者、目的与建议验证,不取得共享写路径。

需求变化记录

  • 2026-08-15:实施检查确认新 GoAdmin 基线只提供 API 与 /static 资源路由,尚不能从 Windows 单包直接提供 go-admin-ui 的 SPA。为满足“前后端单包、单一启动命令”,在现有 GoAdmin Gin Engine 上增加可选 SENSE_WEB_ROOT SPA fallback,纳入 Sense/server/cmd/api/web.go 及测试;不另建 HTTP/RBAC 框架,不改变 API、认证或权限链。未配置时保持原 GoAdmin 行为。
  • 2026-08-15:包烟测确认 #67 的 MediaMTX supervisor 原为有媒体路由时惰性启动,无法满足本工单“生产启动即检查和编排 MediaMTX”。在 media/runtime.go 增加显式 managed/external 启动检查,disabled 仅供 demo;保持未配置模式时的既有惰性行为,启动失败时阻止 HTTP 服务冒充可用。
  • 2026-08-15:使用隔离 PostgreSQL 17 空库复核完整迁移链已成功,#67 评论中的旧 sys_config 字段长度阻塞在当前 dev 不再复现,因此不修改上游迁移文件。

实施结果与证据(2026-08-15)

  • 实现提交:6b79478
  • 长期文档提交:e4544a0
  • 归档登记/镜像提交:23d3cdb、2e76aaf
  • PR:#89(已合入 dev,merge commit 863b232a73767c0e8b6eb5a6bde606f882d2f72a)
  • Wiki 归档:Task-70-Sense-Windows配置启动与打包交付,revision a8e7e7eb355e1863bc4d0aaba02eb2131b2919df
  • 交付包:Sense/dist/sense-windows-amd64.zip,SHA-256 F0772175007641CA04434680B14BC0793CCD355DE75C8ADF82A573419170F592
  • 测试:Go 全量 test/vet/build、定向 race、18 项包测试、固定工具链 build、隔离 PostgreSQL 17 空库迁移、SPA/health、MediaMTX、包外启停、备份恢复、包审计、Wiki 镜像检查均通过。
  • 已知检查项:check_harness.py --strict 仅因既存 #66/#67 归档缺少当前模板章节失败;未修改这两个既有归档。
  • 未验证:客户全新 Windows 机器、客户生产 PostgreSQL 账号、目标浏览器和真实获准摄像机。

交付回归阻塞(2026-08-15)

#92 合入后已重新打包并在仓库外完成数据库与配置备份;custom-format 备份可由 pg_restore --list 读取。真实迁移已成功把设备 capabilities 转为 JSONB,随后媒体迁移因旧唯一约束实际名称与 GORM 推导名称不同而报 SQLSTATE 42704。媒体迁移事务已回滚,独立缺陷记录为 #95。#70 在 #95 确认、修复、重新打包及启动 smoke 前保持阻塞。

交付回归恢复(2026-08-15)

  • #95 修复提交 3dd4890 已集成到 #70 分支,集成提交 c088caf816422cb684c402bb8c85e18db1832186。
  • 新 ZIP SHA-256:7E35394F6377F9F4AB0046E8413F29B140D6F301383C54C87CE871B435EF253D,56,595,209 字节;构建内置包审计通过,真实配置仅在 ZIP 生成后恢复到本地解压目录。
  • 已验证仓库外 custom-format 备份可读取;真实迁移完成,2 条旧媒体路由保留,运行态列无空值,path 唯一索引有效。
  • Web/SPA、/healthz、MediaMTX Control API 均返回 200,停止脚本完成且相关监听端口清空。
  • #70 从阻塞恢复为待验收;仍需等待 #95 自身验收并合入 dev 后再完成最终合并顺序。

验收反馈与修复方案(2026-08-15)

  • 用户反馈:运行发布包 start-sense.bat 后访问 http://127.0.0.1:18080/ 白屏,并明确确认继续 #70 修复。
  • 只读证据:首页返回 200,但 HTML 引用的 /js/runtime.daef9028.js 返回 404;发布目录缺少该现代 runtime,仅存在 runtime-legacy.4986a4a0.js。其余主要 JS/CSS 返回 200。Chromium 控制台唯一错误即该 runtime 404,Vue 根应用未启动。
  • 根因边界:现有生产构建中的 runtime 内联插件与差异化构建产物不闭环,生成的 HTML 仍引用已从输出中移除的现代 runtime;包审计只检查 web/index.html 存在,HTTP smoke 只检查首页状态码,没有执行 JS 或核对 HTML 引用资源,因此未发现白屏。
  • 已确认修复:取消不可靠的 runtime 内联优化,确保 HTML 引用的 runtime 作为独立文件进入产物;扩展包审计以核对 HTML 的本地 script/link 引用全部存在;重新构建并使用 Chromium 验证登录页渲染、静态资源无 404、控制台无启动错误。
  • 回退:恢复本次前端构建配置和包审计提交,并继续使用上一个发布包;不改数据库、接口、认证或媒体状态。

新增验收标准

  • 发布包 web/index.html 引用的全部本地 JS/CSS 文件真实存在
  • Chromium 打开生产入口可渲染登录页,不再白屏
  • 首屏静态资源无 404,控制台无阻止 Vue 启动的错误

白屏修复实施证据(2026-08-15)

  • 修复提交:4ca4abff7bbe8ade47b321b8db302004591a29e1;归档镜像提交:2c0e39b;PR #89 已更新且保持 open。
  • 移除不可靠的 runtime 内联插件配置;现代与 legacy runtime 均进入产物。为 css-loader 6 启用 ICSS mode,GoAdmin 原有 SCSS :export 主题变量可正常从 JavaScript 读取,两个阻止启动的构建 warning 已消失。
  • 新增 HTML 本地 JS/CSS 资源审计及缺失 runtime 反例;Windows PowerShell 包测试 21 项通过,最终包构建阶段核对 11 个本地引用通过。
  • Chromium 进入 /#/login?redirect=/dashboard,账号、密码、验证码表单可见;首屏 7 个 JS/CSS 均为 200,白屏及阻止 Vue 挂载的错误消失。
  • 最终 ZIP:56,597,422 字节;SHA-256 217BEBADF77D34DBA314074FD56B43A2A5A66D73479F3D57BB7BBCEECFBAE114;ZIP 配置为无秘密模板,VERSION.txt 与修复提交一致。
  • 测试完成后 Sense/MediaMTX 已停止,18080 无监听;Sense/ui/node_modules 与 Sense/ui/dist 已清理。
  • Wiki 归档 revision:412da1c81551d8fadbba3feb0d3b05868b83deee,定向同步与一致性检查通过。
  • 邻接发现:/api/v1/app-config 在登录页返回不阻塞渲染的 404,且上游页面仍请求百度统计;均未混入本次白屏修复。

#97 集成回归(2026-08-16)

  • 用户验收 #97 后继续推进 #70;最终 Windows 发布包必须包含已合入 dev 的免验证码登录变更。
  • 将最新 dev 合入 #70 功能分支,重新构建并验证登录页无验证码、仅账号密码登录、静态资源闭环与 Windows 启停。
  • 本轮不扩大接口、数据库或权限范围;#95 仍保持独立待验收,#70 完成集成回归后重新进入待验收。

#97 集成回归结果(2026-08-16)

  • 最新 dev@116318df748ff0d46d3fe5f8a4f41a6507567eec 已合入 #70 分支;#97 免验证码登录进入最终 Windows 包。
  • 构建发现 Windows PowerShell 环境未自动加载 Get-FileHash;已改用 .NET SHA-256 流式计算。实现提交:b66c39724c42b9e63891d06a41fb4a87c8c3f6c7;归档镜像提交:098d0fa。
  • 新 ZIP:56,455,903 字节;SHA-256 B500982BD566005DC8876A418C26A75BCABE41F498D10E3DAD286A71C92F0241;包内 source_commit=b66c39724c42b9e63891d06a41fb4a87c8c3f6c7。
  • 验证:Go 全量 test/vet、21 项包测试、固定工具链 production build、11 个 HTML 本地资源审计、65 个 ZIP 清单文件逐项哈希、无秘密模板/无 node_modules 审计通过。
  • 使用仓库外配置备份完成真实 PostgreSQL 迁移、Web/SPA、MediaMTX、包外 start/stop smoke;测试后 18080/9997 无监听。本地解压目录恢复现场配置,ZIP 仍只含模板。
  • PowerShell 7 的 Invoke-WebRequest 曾对 loopback 超时;curl 与正式 Windows PowerShell 5.1 smoke 均返回正常,确认不是 Sense 服务阻塞。
  • Wiki 归档 revision:f3c8e115375c6fa7bd1061a69d2b9368e934546a。#70 重新进入待验收;#95 仍保持独立待验收。

人工验收(2026-08-16)

  • 用户明确验收通过 #70。
  • 依赖 #95 已先合入 dev;PR #89 随后合入 dev,merge commit:863b232a73767c0e8b6eb5a6bde606f882d2f72a;main 未变更。
  • Wiki 归档 revision:9eb390dfd691acc089656a838dd3f12e24f97884;验收镜像提交:5a67a17e17862f27b526c2e34905a260b1fa2dc4。
## 状态 已完成 ## 基本信息 - 类型:需求 / 新 GoAdmin 基线重建 - 任务类型:单项目独立任务 - 主项目:Sense - 主 agent:Sense agent - 所属 Epic:#7 - 所属 MVP:#8 - 前置工单:#69 - 是否允许与前置工单并行:否 - 原因:交付包必须基于完整 Sense 独立纵切生成,不能在业务模块未稳定前冻结启动和目录结构。 - 独立运行:Brain、Bell 均不启动时完成实现和验收 ## 原始需求与追溯 - 来源:用户于 2026-08-14 要求先建立 Sense 全部独立任务工单;Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix。 - 需求摘要:在 #61 冻结 GoAdmin/go-admin-ui 源码派生骨架上,重新实现 Sense 独立纵切;旧 `explore` 只用于业务、测试和故障证据,不复制自研基础框架。 - 历史对照:#37、#40、#42、#44、#46 及 Windows 实际启动排错记录。 ## 目标 提供可复制的 Windows amd64 前后端打包、包内配置加载、PostgreSQL 迁移、MediaMTX 启动编排、日志位置和安全初始化说明。 ## 做什么 建立 build/package/start/check 脚本;读取包内 config/sense.env 且非空进程环境优先;启动前检查数据库、端口、目录和 MediaMTX;提供迁移、备份/恢复入口和明确错误。 ## 不做什么 不提交真实连接串、密码或 token;不自动创建生产默认管理员;不打包 node_modules、本地数据库或客户数据;不修改根级部署。 ## GoAdmin 复用与文档门禁 - 必须沿用 #61 建立的 Cobra、Gin、GORM、Casbin、JWT、迁移、Router、Store、Axios、Layout 和权限链。 - 优先复用 go-admin-ui 的页面容器、搜索栏、表格、表单、分页、Dialog、Tag、权限按钮和反馈组件。 - 冻结 go-admin-doc 必查:`cmd/server.md`、`cmd/migrate.md`、`advanced/config.md` 与冻结上游 README/构建命令。 - 在工单评论记录实际阅读文件、采用方式及无法复用而新增的业务组件。 - 不永久删除默认模块;无关能力采用菜单、路由、权限和后端访问同时禁用。 ## 写路径 - `Sense/scripts/build/**` - `Sense/scripts/runtime/**` - `Sense/config/**` - `Sense/package/**` - `Sense/README-WINDOWS.md` - `Sense/tests/package/**` - `Sense/server/app/sense/media/runtime.go` - `Sense/server/app/sense/media/runtime_test.go` - `Sense/server/cmd/api/server.go` - `Sense/server/cmd/api/web.go` - `Sense/server/cmd/api/web_test.go` - `Sense/.gitignore` 禁止写入:`Brain/**`、`Bell/**`、`contracts/**`、根级部署配置、`docs/**`、`wiki-docs.json`。如实现发现必须修改这些路径,停止并转协同工单。 ## 文档影响 更新 Windows 安装、配置、数据库准备、管理员初始化、启动停止、日志、备份恢复和排错。 长期文档先更新 Gitea Wiki;本地 `docs/` 镜像由单一协调工单同步,避免共享路径冲突。 ## 验收标准 - [x] 干净环境可按单一命令生成 Windows amd64 交付包 - [x] 包不包含 node_modules、构建缓存、真实秘密或客户数据 - [x] start 脚本读取 config/sense.env,进程环境优先且不执行配置内容 - [x] 生产启动检查 PostgreSQL 数据库、迁移、端口和 MediaMTX,错误可行动 - [x] demo 与 production 明确隔离,demo 数据不可冒充生产 - [x] 提供安全管理员初始化、密码修改、停止、备份和恢复步骤 ## 验证方式 - PowerShell/bat 参数、配置优先级、特殊字符和失败路径测试 - Go/前端 production build 与包内容审计 - 全新 PostgreSQL + MediaMTX Windows 包 smoke - 秘密、node_modules、dist 嵌套和默认密码扫描 ## 风险与回退 打包脚本可能泄漏环境或造成错误启动。只读取白名单 SENSE_*,不打印值;测试使用隔离目录和数据库;回退交付产物和脚本。 ## 协同需求摘要 本工单不建立跨项目契约。发现 Sense→Brain 源/区域配置或 Sense/Brain→Bell 事件/证据需求时,只记录生产者、消费者、目的与建议验证,不取得共享写路径。 ## 需求变化记录 - 2026-08-15:实施检查确认新 GoAdmin 基线只提供 API 与 `/static` 资源路由,尚不能从 Windows 单包直接提供 go-admin-ui 的 SPA。为满足“前后端单包、单一启动命令”,在现有 GoAdmin Gin Engine 上增加可选 `SENSE_WEB_ROOT` SPA fallback,纳入 `Sense/server/cmd/api/web.go` 及测试;不另建 HTTP/RBAC 框架,不改变 API、认证或权限链。未配置时保持原 GoAdmin 行为。 - 2026-08-15:包烟测确认 #67 的 MediaMTX supervisor 原为有媒体路由时惰性启动,无法满足本工单“生产启动即检查和编排 MediaMTX”。在 `media/runtime.go` 增加显式 `managed`/`external` 启动检查,`disabled` 仅供 demo;保持未配置模式时的既有惰性行为,启动失败时阻止 HTTP 服务冒充可用。 - 2026-08-15:使用隔离 PostgreSQL 17 空库复核完整迁移链已成功,#67 评论中的旧 `sys_config` 字段长度阻塞在当前 `dev` 不再复现,因此不修改上游迁移文件。 ## 实施结果与证据(2026-08-15) - 实现提交:`6b79478` - 长期文档提交:`e4544a0` - 归档登记/镜像提交:`23d3cdb`、`2e76aaf` - PR:#89(已合入 `dev`,merge commit `863b232a73767c0e8b6eb5a6bde606f882d2f72a`) - Wiki 归档:`Task-70-Sense-Windows配置启动与打包交付`,revision `a8e7e7eb355e1863bc4d0aaba02eb2131b2919df` - 交付包:`Sense/dist/sense-windows-amd64.zip`,SHA-256 `F0772175007641CA04434680B14BC0793CCD355DE75C8ADF82A573419170F592` - 测试:Go 全量 test/vet/build、定向 race、18 项包测试、固定工具链 build、隔离 PostgreSQL 17 空库迁移、SPA/health、MediaMTX、包外启停、备份恢复、包审计、Wiki 镜像检查均通过。 - 已知检查项:`check_harness.py --strict` 仅因既存 #66/#67 归档缺少当前模板章节失败;未修改这两个既有归档。 - 未验证:客户全新 Windows 机器、客户生产 PostgreSQL 账号、目标浏览器和真实获准摄像机。 ## 交付回归阻塞(2026-08-15) #92 合入后已重新打包并在仓库外完成数据库与配置备份;custom-format 备份可由 `pg_restore --list` 读取。真实迁移已成功把设备 `capabilities` 转为 JSONB,随后媒体迁移因旧唯一约束实际名称与 GORM 推导名称不同而报 SQLSTATE 42704。媒体迁移事务已回滚,独立缺陷记录为 #95。#70 在 #95 确认、修复、重新打包及启动 smoke 前保持阻塞。 ## 交付回归恢复(2026-08-15) - #95 修复提交 `3dd4890` 已集成到 #70 分支,集成提交 `c088caf816422cb684c402bb8c85e18db1832186`。 - 新 ZIP SHA-256:`7E35394F6377F9F4AB0046E8413F29B140D6F301383C54C87CE871B435EF253D`,56,595,209 字节;构建内置包审计通过,真实配置仅在 ZIP 生成后恢复到本地解压目录。 - 已验证仓库外 custom-format 备份可读取;真实迁移完成,2 条旧媒体路由保留,运行态列无空值,path 唯一索引有效。 - Web/SPA、`/healthz`、MediaMTX Control API 均返回 200,停止脚本完成且相关监听端口清空。 - #70 从阻塞恢复为待验收;仍需等待 #95 自身验收并合入 `dev` 后再完成最终合并顺序。 ## 验收反馈与修复方案(2026-08-15) - 用户反馈:运行发布包 `start-sense.bat` 后访问 `http://127.0.0.1:18080/` 白屏,并明确确认继续 #70 修复。 - 只读证据:首页返回 200,但 HTML 引用的 `/js/runtime.daef9028.js` 返回 404;发布目录缺少该现代 runtime,仅存在 `runtime-legacy.4986a4a0.js`。其余主要 JS/CSS 返回 200。Chromium 控制台唯一错误即该 runtime 404,Vue 根应用未启动。 - 根因边界:现有生产构建中的 runtime 内联插件与差异化构建产物不闭环,生成的 HTML 仍引用已从输出中移除的现代 runtime;包审计只检查 `web/index.html` 存在,HTTP smoke 只检查首页状态码,没有执行 JS 或核对 HTML 引用资源,因此未发现白屏。 - 已确认修复:取消不可靠的 runtime 内联优化,确保 HTML 引用的 runtime 作为独立文件进入产物;扩展包审计以核对 HTML 的本地 script/link 引用全部存在;重新构建并使用 Chromium 验证登录页渲染、静态资源无 404、控制台无启动错误。 - 回退:恢复本次前端构建配置和包审计提交,并继续使用上一个发布包;不改数据库、接口、认证或媒体状态。 ### 新增验收标准 - [x] 发布包 `web/index.html` 引用的全部本地 JS/CSS 文件真实存在 - [x] Chromium 打开生产入口可渲染登录页,不再白屏 - [x] 首屏静态资源无 404,控制台无阻止 Vue 启动的错误 ## 白屏修复实施证据(2026-08-15) - 修复提交:`4ca4abff7bbe8ade47b321b8db302004591a29e1`;归档镜像提交:`2c0e39b`;PR #89 已更新且保持 open。 - 移除不可靠的 runtime 内联插件配置;现代与 legacy runtime 均进入产物。为 css-loader 6 启用 ICSS mode,GoAdmin 原有 SCSS `:export` 主题变量可正常从 JavaScript 读取,两个阻止启动的构建 warning 已消失。 - 新增 HTML 本地 JS/CSS 资源审计及缺失 runtime 反例;Windows PowerShell 包测试 21 项通过,最终包构建阶段核对 11 个本地引用通过。 - Chromium 进入 `/#/login?redirect=/dashboard`,账号、密码、验证码表单可见;首屏 7 个 JS/CSS 均为 200,白屏及阻止 Vue 挂载的错误消失。 - 最终 ZIP:56,597,422 字节;SHA-256 `217BEBADF77D34DBA314074FD56B43A2A5A66D73479F3D57BB7BBCEECFBAE114`;ZIP 配置为无秘密模板,`VERSION.txt` 与修复提交一致。 - 测试完成后 Sense/MediaMTX 已停止,18080 无监听;`Sense/ui/node_modules` 与 `Sense/ui/dist` 已清理。 - Wiki 归档 revision:`412da1c81551d8fadbba3feb0d3b05868b83deee`,定向同步与一致性检查通过。 - 邻接发现:`/api/v1/app-config` 在登录页返回不阻塞渲染的 404,且上游页面仍请求百度统计;均未混入本次白屏修复。 ## #97 集成回归(2026-08-16) - 用户验收 #97 后继续推进 #70;最终 Windows 发布包必须包含已合入 `dev` 的免验证码登录变更。 - 将最新 `dev` 合入 #70 功能分支,重新构建并验证登录页无验证码、仅账号密码登录、静态资源闭环与 Windows 启停。 - 本轮不扩大接口、数据库或权限范围;#95 仍保持独立待验收,#70 完成集成回归后重新进入待验收。 ## #97 集成回归结果(2026-08-16) - 最新 `dev@116318df748ff0d46d3fe5f8a4f41a6507567eec` 已合入 #70 分支;#97 免验证码登录进入最终 Windows 包。 - 构建发现 Windows PowerShell 环境未自动加载 `Get-FileHash`;已改用 .NET SHA-256 流式计算。实现提交:`b66c39724c42b9e63891d06a41fb4a87c8c3f6c7`;归档镜像提交:`098d0fa`。 - 新 ZIP:56,455,903 字节;SHA-256 `B500982BD566005DC8876A418C26A75BCABE41F498D10E3DAD286A71C92F0241`;包内 `source_commit=b66c39724c42b9e63891d06a41fb4a87c8c3f6c7`。 - 验证:Go 全量 test/vet、21 项包测试、固定工具链 production build、11 个 HTML 本地资源审计、65 个 ZIP 清单文件逐项哈希、无秘密模板/无 node_modules 审计通过。 - 使用仓库外配置备份完成真实 PostgreSQL 迁移、Web/SPA、MediaMTX、包外 start/stop smoke;测试后 18080/9997 无监听。本地解压目录恢复现场配置,ZIP 仍只含模板。 - PowerShell 7 的 `Invoke-WebRequest` 曾对 loopback 超时;curl 与正式 Windows PowerShell 5.1 smoke 均返回正常,确认不是 Sense 服务阻塞。 - Wiki 归档 revision:`f3c8e115375c6fa7bd1061a69d2b9368e934546a`。#70 重新进入待验收;#95 仍保持独立待验收。 ## 人工验收(2026-08-16) - 用户明确验收通过 #70。 - 依赖 #95 已先合入 `dev`;PR #89 随后合入 `dev`,merge commit:`863b232a73767c0e8b6eb5a6bde606f882d2f72a`;`main` 未变更。 - Wiki 归档 revision:`9eb390dfd691acc089656a838dd3f12e24f97884`;验收镜像提交:`5a67a17e17862f27b526c2e34905a260b1fa2dc4`。
ila added the kind/taskproject/sensescope/independentpriority/p0 labels 2026-08-14 10:26:40 +08:00
Author
Owner

来自 #67 的前置验证提示:在隔离空白 PostgreSQL 17 上执行完整上游迁移链时,尚未到达 #67 媒体迁移就被既有 sys_config 初始化字段长度问题中止。#67 自身定向迁移(表、3 菜单、12 策略)已通过。#70 建立 Windows 新安装交付时必须复核并修正空库完整迁移链,不能只在已初始化数据库上验收。

来自 #67 的前置验证提示:在隔离空白 PostgreSQL 17 上执行完整上游迁移链时,尚未到达 #67 媒体迁移就被既有 `sys_config` 初始化字段长度问题中止。#67 自身定向迁移(表、3 菜单、12 策略)已通过。#70 建立 Windows 新安装交付时必须复核并修正空库完整迁移链,不能只在已初始化数据库上验收。
Author
Owner

开始实施。前置 #69 已验收关闭并合入 dev;分支 feature/70-sense-windows-delivery 从 dev@cf50c28 创建,初始工作区干净。

已读取冻结 go-admin-doc:

  • docs/intro/cmd/server.md:继续使用编译后的 sense.exe server -c <配置>,不绕开 Cobra 启动链。
  • docs/intro/cmd/migrate.md:继续使用 sense.exe migrate -c <配置>,生产启动前先备份并执行完整迁移。
  • docs/intro/advanced/config.md 与 docs/intro/cmd/config.md:交付层生成独立 production YAML,再通过 -c 显式传入,不改 GoAdmin 配置事实源。
  • 冻结上游 README.md:采用固定 Go 1.26.5、Node 22.22.1、pnpm 9.15.1 的后端/前端 production build;保留 GoAdmin 构建与迁移入口。

当前机器事实:模块内 Go 自动工具链为 1.26.5;Node 为 22.22.1;全局 pnpm 为 11.21.0,因此构建脚本将显式调用 corepack pnpm@9.15.1,避免工具链漂移。代码图 MCP 本轮未提供可调用工具,按规则回退到 rg 和定点读取。现有 GoAdmin 基线尚无 Sense/scripts、Sense/package、Sense/tests/package,本工单将在授权路径新增 Windows 交付层。

开始实施。前置 #69 已验收关闭并合入 `dev`;分支 `feature/70-sense-windows-delivery` 从 `dev@cf50c28` 创建,初始工作区干净。 已读取冻结 go-admin-doc: - `docs/intro/cmd/server.md`:继续使用编译后的 `sense.exe server -c <配置>`,不绕开 Cobra 启动链。 - `docs/intro/cmd/migrate.md`:继续使用 `sense.exe migrate -c <配置>`,生产启动前先备份并执行完整迁移。 - `docs/intro/advanced/config.md` 与 `docs/intro/cmd/config.md`:交付层生成独立 production YAML,再通过 `-c` 显式传入,不改 GoAdmin 配置事实源。 - 冻结上游 `README.md`:采用固定 Go 1.26.5、Node 22.22.1、pnpm 9.15.1 的后端/前端 production build;保留 GoAdmin 构建与迁移入口。 当前机器事实:模块内 Go 自动工具链为 1.26.5;Node 为 22.22.1;全局 pnpm 为 11.21.0,因此构建脚本将显式调用 `corepack pnpm@9.15.1`,避免工具链漂移。代码图 MCP 本轮未提供可调用工具,按规则回退到 `rg` 和定点读取。现有 GoAdmin 基线尚无 `Sense/scripts`、`Sense/package`、`Sense/tests/package`,本工单将在授权路径新增 Windows 交付层。
Author
Owner

#70 已完成实现并进入待验收。

  • PR:#89 #89(目标 dev,未合并)
  • 实现:6b79478;文档:e4544a0;归档镜像:23d3cdb、2e76aaf
  • Wiki 归档 revision:a8e7e7eb355e1863bc4d0aaba02eb2131b2919df
  • 最终 ZIP:Sense/dist/sense-windows-amd64.zip,56,589,367 字节,SHA-256 F0772175007641CA04434680B14BC0793CCD355DE75C8ADF82A573419170F592
  • 自动化:Go 全量 test/vet/build、media/api race、18 项 PowerShell 包测试、固定工具链 production build、包审计均通过。
  • 集成 smoke:隔离 PostgreSQL 17 空库完整 8 迁移、首页/SPA/healthz、MediaMTX Control API、包外目录启停、custom-format 备份及恢复到独立数据库通过。
  • Wiki 三个长期页面已更新并读取确认,sync_wiki_docs.py --check 通过。
  • check_harness.py --strict 的唯一失败来自既存 #66/#67 归档缺少当前模板章节,与 #70 文件无关,已记录在归档。
  • 未验证:客户全新 Windows 主机、客户生产数据库账号、目标浏览器和真实获准摄像机。

当前工单保持打开、“待验收”;未合并 PR、未关闭工单。

#70 已完成实现并进入待验收。 - PR:#89 https://git.ilapage.cn/ila/yovision/pulls/89(目标 `dev`,未合并) - 实现:`6b79478`;文档:`e4544a0`;归档镜像:`23d3cdb`、`2e76aaf` - Wiki 归档 revision:`a8e7e7eb355e1863bc4d0aaba02eb2131b2919df` - 最终 ZIP:`Sense/dist/sense-windows-amd64.zip`,56,589,367 字节,SHA-256 `F0772175007641CA04434680B14BC0793CCD355DE75C8ADF82A573419170F592` - 自动化:Go 全量 test/vet/build、media/api race、18 项 PowerShell 包测试、固定工具链 production build、包审计均通过。 - 集成 smoke:隔离 PostgreSQL 17 空库完整 8 迁移、首页/SPA/`healthz`、MediaMTX Control API、包外目录启停、custom-format 备份及恢复到独立数据库通过。 - Wiki 三个长期页面已更新并读取确认,`sync_wiki_docs.py --check` 通过。 - `check_harness.py --strict` 的唯一失败来自既存 #66/#67 归档缺少当前模板章节,与 #70 文件无关,已记录在归档。 - 未验证:客户全新 Windows 主机、客户生产数据库账号、目标浏览器和真实获准摄像机。 当前工单保持打开、“待验收”;未合并 PR、未关闭工单。
Author
Owner

#92 合入后已重新生成 Windows 包并完成仓库外数据库/配置备份,备份通过 pg_restore --list 校验。真实迁移已越过 capabilities JSONB 问题,随后在媒体路由迁移遇到 SQLSTATE 42704。只读核对确认旧约束为 sense_media_routes_path_key,GORM 尝试删除推导名 uni_sense_media_routes_path;媒体迁移版本未登记,失败事务未留下半成品。独立缺陷已记录为 #95,#70 暂停在真实启动回归门禁。

#92 合入后已重新生成 Windows 包并完成仓库外数据库/配置备份,备份通过 `pg_restore --list` 校验。真实迁移已越过 capabilities JSONB 问题,随后在媒体路由迁移遇到 SQLSTATE 42704。只读核对确认旧约束为 `sense_media_routes_path_key`,GORM 尝试删除推导名 `uni_sense_media_routes_path`;媒体迁移版本未登记,失败事务未留下半成品。独立缺陷已记录为 #95,#70 暂停在真实启动回归门禁。
Author
Owner

#95 已集成并完成真实旧库回归:新包 source_commit=c088caf,ZIP SHA-256 7E35394F6377F9F4AB0046E8413F29B140D6F301383C54C87CE871B435EF253D。数据库备份可恢复读取;真实迁移保留 2 条路由并建立有效唯一索引;Web/SPA/health/MediaMTX 200,停止后端口清空。#70 恢复为待验收,但合并顺序仍等待 #95 先验收进入 dev。

#95 已集成并完成真实旧库回归:新包 `source_commit=c088caf`,ZIP SHA-256 `7E35394F6377F9F4AB0046E8413F29B140D6F301383C54C87CE871B435EF253D`。数据库备份可恢复读取;真实迁移保留 2 条路由并建立有效唯一索引;Web/SPA/health/MediaMTX 200,停止后端口清空。#70 恢复为待验收,但合并顺序仍等待 #95 先验收进入 `dev`。
ila referenced this issue from a commit 2026-08-15 15:57:21 +08:00
Author
Owner

#70 白屏验收反馈已修复并重新进入“待验收”。

  • 修复提交:4ca4abf
  • 归档镜像:2c0e39b
  • Task Wiki revision:412da1c81551d8fadbba3feb0d3b05868b83deee
  • 最终 ZIP SHA-256:217BEBADF77D34DBA314074FD56B43A2A5A66D73479F3D57BB7BBCEECFBAE114
  • Chromium 已显示账号登录页;首屏 7 个 JS/CSS 均为 200
  • 包构建审计核对 11 个本地资源引用,包测试 21 项通过
  • 测试进程已停止,18080 无监听

邻接发现的 /api/v1/app-config 非阻塞 404 与上游百度统计请求未混入本次修复。工单和 PR 保持 open,等待人工验收。

#70 白屏验收反馈已修复并重新进入“待验收”。 - 修复提交:`4ca4abf` - 归档镜像:`2c0e39b` - Task Wiki revision:`412da1c81551d8fadbba3feb0d3b05868b83deee` - 最终 ZIP SHA-256:`217BEBADF77D34DBA314074FD56B43A2A5A66D73479F3D57BB7BBCEECFBAE114` - Chromium 已显示账号登录页;首屏 7 个 JS/CSS 均为 200 - 包构建审计核对 11 个本地资源引用,包测试 21 项通过 - 测试进程已停止,18080 无监听 邻接发现的 `/api/v1/app-config` 非阻塞 404 与上游百度统计请求未混入本次修复。工单和 PR 保持 open,等待人工验收。
Author
Owner

继续 #70:#97 已验收并合入 dev。开始把最新 dev@116318df 集成到 Windows 交付分支,重新生成不含验证码的发布包并执行受影响回归;#70/#95 均不在本轮自动关闭。

继续 #70:#97 已验收并合入 `dev`。开始把最新 `dev@116318df` 集成到 Windows 交付分支,重新生成不含验证码的发布包并执行受影响回归;#70/#95 均不在本轮自动关闭。
Author
Owner

#70 已完成 #97 集成后的最终重打包并重新进入待验收。新 ZIP SHA-256:B500982BD566005DC8876A418C26A75BCABE41F498D10E3DAD286A71C92F0241;真实 PostgreSQL、Web/SPA、MediaMTX 与包外启停 smoke 通过,18080/9997 已清空。PR #89 已更新;#70/#95 均未关闭。

#70 已完成 #97 集成后的最终重打包并重新进入待验收。新 ZIP SHA-256:`B500982BD566005DC8876A418C26A75BCABE41F498D10E3DAD286A71C92F0241`;真实 PostgreSQL、Web/SPA、MediaMTX 与包外启停 smoke 通过,18080/9997 已清空。PR #89 已更新;#70/#95 均未关闭。
ila closed this issue 2026-08-16 19:34:34 +08:00
Author
Owner

用户已于 2026-08-16 明确验收通过。依赖 #95 已先合入 dev;PR #89 随后合入 dev(merge commit 863b232a73767c0e8b6eb5a6bde606f882d2f72a)。Wiki 归档与镜像已更新,main 未变更。

用户已于 2026-08-16 明确验收通过。依赖 #95 已先合入 `dev`;PR #89 随后合入 `dev`(merge commit `863b232a73767c0e8b6eb5a6bde606f882d2f72a`)。Wiki 归档与镜像已更新,`main` 未变更。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#70