背景:开发机每次重启后被反馈需要重新用默认密码登录并强改,排查确认仓库启动链路(dev.sh / pnpm dev / API / worker / db:seed)均不重置密码;只有 db:reset / migrate reset / 重建数据卷会恢复种子密码。A2 收尾时为干净截图执行过 db:reset,是最近一次重置的直接原因。 改动: - 新增 pnpm db:init = prisma migrate deploy + 幂等 seed,作为首次/迁移后的安全初始化;不重置数据、不覆盖已有密码。 - README / dev.sh / AGENTS 命令契约 / SEED.md / A1·A2 实施报告明确:日常启动不需要 DB 命令,db:reset 仅用于清库。 - 实测:对已改密的 admin 执行 db:init 后 password_hash 与 must_change_password 均未变化。 验证:pnpm format:check / pnpm lint 通过;db:init 实际执行通过。
背景: - dev.sh 会把仓库根 .env 的变量全部导出给子进程,其中 VITE_PUBLIC_DEMO_SESSION=true 被 Vite 读取后启用演示会话:登录写入 假 token,进入 /users 后真实接口 401、刷新失败即清会话回登录页; - 后台启动后终端看不到运行日志,不利于排查。 改动: - dev.sh 不再向子进程导出 VITE_*,前端环境仍由 Vite 自己管理; - .env.example 的 VITE_PUBLIC_DEMO_SESSION 默认改为 false(本地 .env / .env.local 同步); - ./dev.sh 默认启动后前台跟随日志(Ctrl+C 停止全部),新增 -d/--detach 后台模式;非交互环境仍默认后台; - README 同步脚本用法。 影响面: - 仅开发脚本与示例环境;生产与 CI 不涉及;演示会话仍可通过显式 VITE_PUBLIC_DEMO_SESSION=true 开启。 回滚方式: - 回滚本提交即恢复后台启动与 VITE_* 透传行为。 验证证据: - 浏览器登录会真实请求 POST /api/v1/auth/login,错误账号返回 「账号或密码不正确」; - 真实账号登录后停留在 /users 并加载 9 条成员,不再回跳登录页; - ./dev.sh -f 持续输出 api/web/worker 日志,SIGTERM 后服务与端口 全部释放; - bash -n dev.sh 与 pnpm format:check 通过。
背景: - 开发机上前端/后端/worker 需要分别启动,端口被旧进程占用时排查成本高; PostgreSQL / Redis 已按约定提前以 Docker 启动,脚本不再负责。 改动: - 新增 ./dev.sh:后台启动 api(3000)/web(5173)/worker,启动前自动检测并结束 端口占用进程(--no-kill 可改为直接失败),等待健康检查后返回。 - 提供 start/stop/restart/status/logs/clean 子命令;stop 按进程组结束并兜底 释放端口;支持 --api-only/--web-only/--no-worker/--follow。 - 自动加载仓库根 .env.local/.env 并导出给子进程(worker 读取 REDIS_URL 需要)。 - .dev/ 纳入 gitignore;README 本地开发章节补充脚本用法。 影响面: - 仅新增开发工具与文档,不影响构建、运行时与 CI;`pnpm dev` 保持原行为。 回滚方式: - 回滚本提交即可,无数据与配置变更。 验证证据: - bash -n 通过; - ./dev.sh start / status / stop / restart / clean / --follow 实测; - 占用 3000/5173 的假服务被自动结束并成功启动; - --no-kill、--api-only、--no-worker 行为符合预期。