[SEN] 让Windows启动脚本读取包内sense.env #46

Closed
opened 2026-08-13 10:27:37 +08:00 by ila · 3 comments
Owner

当前状态:已完成

用户于 2026-08-14 明确验收通过。

基本信息

  • 类型:缺陷
  • 任务类型:单项目
  • 主项目:Sense
  • 主 agent:主 agent
  • 所属 Epic:#7
  • 所属 MVP / 版本:#8
  • 阶段:Windows 生产启动配置修复

依赖与并行

  • 前置工单:#37、#44
  • 是否允许与前置工单并行:是
  • 原因:Windows 包与最新导航修复均已实现并待验收;本工单在最新堆叠分支修复包内配置加载。

子项目影响

  • 仅影响:Sense
  • 是否跨项目:否
  • 是否修改共享契约:否
  • write_paths:
    • Sense/scripts/runtime/start-sense.bat
    • Sense/scripts/runtime/start-sense.ps1
    • Sense/scripts/runtime/README-WINDOWS.md
    • Sense/scripts/package-windows.bat
    • docs/04-local-development-and-verification.md(Wiki-first)
    • docs/06-troubleshooting.md(Wiki-first)
    • docs/delivery/README.md(Wiki-first)
    • wiki-docs.json
    • docs/task/<本工单归档>.md
  • 本地重建但不提交:Sense/dist/sense-windows-amd64/**
  • 明确保留且不写入:用户未跟踪文件 Sense/config/sense.zip、agent_sessions.txt

原始需求

  • 来源:用户对话
  • 提出时间:2026-08-13
  • 关键原话或脱敏摘要:打包目录 Sense/dist/sense-windows-amd64/config 已有 sense.env,要求更改 start-sense.bat 读取 config/sense.env。

要解决什么

包内 config/sense.env 已包含 PostgreSQL 等配置,但当前 BAT 从不读取文件,只检查进程环境,导致生产启动错误报告缺少 SENSE_DATABASE_URL。

做什么 / 不做什么

  • 做:BAT 委托 PowerShell 安全加载包内 config/sense.env;仅接受 SENSE_* 键;忽略空行与 # 注释;支持含 = 和 CMD 特殊字符的值;外部非空进程环境变量优先;验证必填键;增加 check 模式;打包复制启动器;更新说明并重建。
  • 不做:不提交或复制真实 sense.env;不打印配置值;不把秘密写入工单/Wiki/日志;不改变 PostgreSQL schema、业务功能或 Brain/Bell。

已确认方案

  • start-sense.bat 保持用户入口,调用同目录 start-sense.ps1。
  • 默认 production:先加载 config/sense.env,再强制 PostgreSQL 模式与包内 UI 路径,验证四个必填秘密/连接字段后启动。
  • demo:同样可读取非秘密端口等配置,但强制内存模式。
  • check:只加载并验证生产配置,不连接数据库、不启动服务、不输出值。
  • 配置优先级:Windows 非空进程环境变量 > config/sense.env > 启动器非秘密默认值。

验收标准

  • 包内存在 config/sense.env 时,无需手工 set 即可通过生产必填配置检查。
  • check 不连接数据库、不启动服务且不输出任何值。
  • 外部环境变量覆盖文件同名键。
  • 空行、注释、带 = 及 CMD 特殊字符的值被安全处理。
  • 非 SENSE_* 键和格式错误行被拒绝且只报告行号。
  • demo 模式仍可启动,生产模式仍强制 PostgreSQL 与包内 UI。
  • 新 ZIP 包含 BAT、PowerShell 启动器、示例配置和说明,不包含真实 sense.env。

验证方式

cmd /c Sense\dist\sense-windows-amd64\start-sense.bat check
cmd /c Sense\dist\sense-windows-amd64\start-sense.bat demo

另用临时测试目录验证解析边界和环境优先级;执行前只检查键是否为空,不输出值。运行前端构建、Sense 测试、Harness 与 Wiki 镜像检查。

风险和回退

风险:错误解析可能截断连接串,命令注入可能执行配置内容,回显可能泄密。通过 PowerShell 逐行数据解析、键白名单、无 eval/Invoke-Expression、无值输出降低风险。回退:恢复环境变量专用启动器并重新打包;不涉及数据迁移。

## 当前状态:已完成 用户于 2026-08-14 明确验收通过。 ## 基本信息 - 类型:缺陷 - 任务类型:单项目 - 主项目:Sense - 主 agent:主 agent - 所属 Epic:#7 - 所属 MVP / 版本:#8 - 阶段:Windows 生产启动配置修复 ## 依赖与并行 - 前置工单:#37、#44 - 是否允许与前置工单并行:是 - 原因:Windows 包与最新导航修复均已实现并待验收;本工单在最新堆叠分支修复包内配置加载。 ## 子项目影响 - 仅影响:Sense - 是否跨项目:否 - 是否修改共享契约:否 - write_paths: - `Sense/scripts/runtime/start-sense.bat` - `Sense/scripts/runtime/start-sense.ps1` - `Sense/scripts/runtime/README-WINDOWS.md` - `Sense/scripts/package-windows.bat` - `docs/04-local-development-and-verification.md`(Wiki-first) - `docs/06-troubleshooting.md`(Wiki-first) - `docs/delivery/README.md`(Wiki-first) - `wiki-docs.json` - `docs/task/<本工单归档>.md` - 本地重建但不提交:`Sense/dist/sense-windows-amd64/**` - 明确保留且不写入:用户未跟踪文件 `Sense/config/sense.zip`、`agent_sessions.txt` ## 原始需求 - 来源:用户对话 - 提出时间:2026-08-13 - 关键原话或脱敏摘要:打包目录 `Sense/dist/sense-windows-amd64/config` 已有 `sense.env`,要求更改 `start-sense.bat` 读取 `config/sense.env`。 ## 要解决什么 包内 `config/sense.env` 已包含 PostgreSQL 等配置,但当前 BAT 从不读取文件,只检查进程环境,导致生产启动错误报告缺少 `SENSE_DATABASE_URL`。 ## 做什么 / 不做什么 - 做:BAT 委托 PowerShell 安全加载包内 `config/sense.env`;仅接受 `SENSE_*` 键;忽略空行与 `#` 注释;支持含 `=` 和 CMD 特殊字符的值;外部非空进程环境变量优先;验证必填键;增加 `check` 模式;打包复制启动器;更新说明并重建。 - 不做:不提交或复制真实 `sense.env`;不打印配置值;不把秘密写入工单/Wiki/日志;不改变 PostgreSQL schema、业务功能或 Brain/Bell。 ## 已确认方案 - `start-sense.bat` 保持用户入口,调用同目录 `start-sense.ps1`。 - 默认 production:先加载 `config/sense.env`,再强制 PostgreSQL 模式与包内 UI 路径,验证四个必填秘密/连接字段后启动。 - `demo`:同样可读取非秘密端口等配置,但强制内存模式。 - `check`:只加载并验证生产配置,不连接数据库、不启动服务、不输出值。 - 配置优先级:Windows 非空进程环境变量 > `config/sense.env` > 启动器非秘密默认值。 ## 验收标准 - [ ] 包内存在 `config/sense.env` 时,无需手工 `set` 即可通过生产必填配置检查。 - [ ] `check` 不连接数据库、不启动服务且不输出任何值。 - [ ] 外部环境变量覆盖文件同名键。 - [ ] 空行、注释、带 `=` 及 CMD 特殊字符的值被安全处理。 - [ ] 非 `SENSE_*` 键和格式错误行被拒绝且只报告行号。 - [ ] demo 模式仍可启动,生产模式仍强制 PostgreSQL 与包内 UI。 - [ ] 新 ZIP 包含 BAT、PowerShell 启动器、示例配置和说明,不包含真实 `sense.env`。 ## 验证方式 ```powershell cmd /c Sense\dist\sense-windows-amd64\start-sense.bat check cmd /c Sense\dist\sense-windows-amd64\start-sense.bat demo ``` 另用临时测试目录验证解析边界和环境优先级;执行前只检查键是否为空,不输出值。运行前端构建、Sense 测试、Harness 与 Wiki 镜像检查。 ## 风险和回退 风险:错误解析可能截断连接串,命令注入可能执行配置内容,回显可能泄密。通过 PowerShell 逐行数据解析、键白名单、无 eval/Invoke-Expression、无值输出降低风险。回退:恢复环境变量专用启动器并重新打包;不涉及数据迁移。
ila added the kind/taskproject/sensescope/independentpriority/p0 labels 2026-08-13 10:27:37 +08:00
Author
Owner

范围内补充(2026-08-13)nn只读检查确认当前包内 config/sense.env 四个生产必填键均存在且非空。发现同一配置生命周期缺陷:现有打包脚本重建会删除运行目录,可能误删用户已填写的 config/sense.env。在既有 Sense/scripts/package-windows.bat write_path 内补充安全暂存/恢复:本地运行目录保留配置,但 ZIP 继续只含 example,绝不含真实 sense.env;若存在异常暂存文件则拒绝覆盖,失败时保留可恢复副本。

## 范围内补充(2026-08-13)`n`n只读检查确认当前包内 `config/sense.env` 四个生产必填键均存在且非空。发现同一配置生命周期缺陷:现有打包脚本重建会删除运行目录,可能误删用户已填写的 `config/sense.env`。在既有 `Sense/scripts/package-windows.bat` write_path 内补充安全暂存/恢复:本地运行目录保留配置,但 ZIP 继续只含 example,绝不含真实 `sense.env`;若存在异常暂存文件则拒绝覆盖,失败时保留可恢复副本。
Author
Owner

实施完成,待验收

已完成 Windows 包内配置加载并推送,工单保持开启。

结果

  • start-sense.bat 现在调用同目录 start-sense.ps1,自动读取 config\sense.env。
  • Windows 非空进程环境变量优先于文件;只接受 SENSE_* 键,不执行配置内容、不打印配置值。
  • 新增 start-sense.bat check,只检查生产必填配置,不连接数据库、不启动服务。
  • production 强制 PostgreSQL 和包内 UI;demo 强制内存模式。
  • 重打包会保留运行目录已有 config\sense.env,但交付 ZIP 不包含真实配置。

验证证据

  • Windows 前后端重新打包:通过。
  • 包内现有配置重打包前后 SHA-256:一致(未输出任何配置值)。
  • cmd /c Sense\dist\sense-windows-amd64\start-sense.bat check:通过,退出码 0。
  • ZIP 条目:含 start-sense.ps1、sense.env.example,不含 config/sense.env。
  • ZIP SHA-256:6311B29F1899691AF793A4758CD59096C5388D3C85214209B9EAFBCAD232BA8A。
  • python dev_scripts/sync_wiki_docs.py --check:通过。
  • git diff --check:通过。
  • python dev_scripts/check_harness.py --strict:被基线工单 #44 归档缺少“最终方案”章节阻塞;不是本工单引入,未混入修复。

未验证:未连接用户 PostgreSQL 启动生产服务,真实 PostgreSQL、MediaMTX 与摄像机仍留待部署验收。

提交与文档

  • 5a17898 实现配置加载和安全打包。
  • 6bbaa07 同步启动、排错和交付 Wiki 镜像。
  • ef85943 登记任务归档。
  • Wiki:Task-46-Sense-Windows包内配置加载,revision eab38da7cae8089d9cf7ed38e48d3e52962b68b4
  • 镜像:docs/task/46-Sense-Windows包内配置加载.md
  • PR:#47 #47

请在部署目录先运行 start-sense.bat check,通过后再运行 start-sense.bat。

## 实施完成,待验收 已完成 Windows 包内配置加载并推送,工单保持开启。 ### 结果 - `start-sense.bat` 现在调用同目录 `start-sense.ps1`,自动读取 `config\sense.env`。 - Windows 非空进程环境变量优先于文件;只接受 `SENSE_*` 键,不执行配置内容、不打印配置值。 - 新增 `start-sense.bat check`,只检查生产必填配置,不连接数据库、不启动服务。 - production 强制 PostgreSQL 和包内 UI;demo 强制内存模式。 - 重打包会保留运行目录已有 `config\sense.env`,但交付 ZIP 不包含真实配置。 ### 验证证据 - Windows 前后端重新打包:通过。 - 包内现有配置重打包前后 SHA-256:一致(未输出任何配置值)。 - `cmd /c Sense\dist\sense-windows-amd64\start-sense.bat check`:通过,退出码 0。 - ZIP 条目:含 `start-sense.ps1`、`sense.env.example`,不含 `config/sense.env`。 - ZIP SHA-256:`6311B29F1899691AF793A4758CD59096C5388D3C85214209B9EAFBCAD232BA8A`。 - `python dev_scripts/sync_wiki_docs.py --check`:通过。 - `git diff --check`:通过。 - `python dev_scripts/check_harness.py --strict`:被基线工单 #44 归档缺少“最终方案”章节阻塞;不是本工单引入,未混入修复。 未验证:未连接用户 PostgreSQL 启动生产服务,真实 PostgreSQL、MediaMTX 与摄像机仍留待部署验收。 ### 提交与文档 - `5a17898` 实现配置加载和安全打包。 - `6bbaa07` 同步启动、排错和交付 Wiki 镜像。 - `ef85943` 登记任务归档。 - Wiki:Task-46-Sense-Windows包内配置加载,revision `eab38da7cae8089d9cf7ed38e48d3e52962b68b4` - 镜像:`docs/task/46-Sense-Windows包内配置加载.md` - PR:#47 https://git.ilapage.cn/ila/yovision/pulls/47 请在部署目录先运行 `start-sense.bat check`,通过后再运行 `start-sense.bat`。
Author
Owner

用户验收通过(2026-08-14)

用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision 0a84806ab339)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 explore 追溯。

此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 dev 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。

## 用户验收通过(2026-08-14) 用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision `0a84806ab339`)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 `explore` 追溯。 此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 `dev` 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。
ila closed this issue 2026-08-14 10:06:50 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#46