Commit Graph
21 Commits
Author SHA1 Message Date
Stev_Wang 02c716d6f2 docs(plan): A4 实施报告与计划回写
背景:A4 开发完成,需要回写实施报告、技术架构与开发计划状态。\n改动:新增 A4 实施报告;技术架构补 system_config_versions 与 dict:manage 口径;开发计划 A4 标记完成并回写门禁/遗留;README 索引补 A4 报告。\n影响面:仅文档;不改变需求与技术边界。\n回滚:回滚本提交即可。\n验证:prettier 通过;文档链接已检查。
2026-11-04 11:50:30 +08:00
Stev_Wang c90a036f82 docs(ci): 明确 CI 仅本地执行,远端 Gitea 不启用 CI
背景:远端自建 Gitea 未部署 Actions runner,推送后线上 CI 无法执行;原规范仍要求「推送后确认 CI」,容易误以为需等待远端流水线。

改动:
- AGENTS §6/§7:CI 只本地执行,推送前必须 pnpm ci:local 或本地门禁全绿,禁止等待/依赖远端 CI。
- 06-测试与CI规范 V1.1:新增「本地 CI 流水线(远端不跑 CI)」强制规则;集成/契约运行时机改为推送前本地。
- 01-Git规范 / 07-CodeReview:删除「推送后确认 CI」,改为本地门禁后推送。
- README:明确远端无 runner,ci.yml 仅本地参考/手动触发。
- .gitea/workflows/ci.yml:去掉 push 触发,仅保留 workflow_dispatch,避免推送停留在 queued。

影响面:仅规范与工作流配置,不影响代码/数据。
验证:pnpm format:check / lint 通过;pnpm ci:local 全部门禁通过(237.2s,4 e2e 冒烟 passed,8 个门控用例按环境变量跳过)。
2026-11-04 08:15:06 +08:00
Stev_Wang 140dc386c1 feat(client): A3 客户与行业目录(两级行业、客户组、字段审批)
背景:A3 需把行业 / 客户 / 客户组 / 客户级字段立为资产根节点;用户确认两级行业树与混搭 UI(行业 B / 客户列表 A / 详情 A / 新建 B / 客户组 B / 字段 A)。

改动:
- 新增 ADR-002,行业改为两级树,客户挂末级行业;同步 PRD / 技术架构 / 开发计划。
- 新增 client 模块:industries / customers / customer-groups / customer-fields 接口、真实 PrismaCustomerDirectory、客户状态机与客户转交、客户组数据范围解析、跨客户 404。
- 新增迁移与幂等种子(电商/金融两级行业、2 客户、1 客户组、4 条字段)。
- 前端新增行业/客户/客户组/字段审批页面与路由、导航更名(客户管理 / 行业管理 / 客户组),复用现有 token。
- 补充 shared 契约单测、client 集成用例、A3 浏览器 e2e。

影响面:client 模块与 client 表、shared 契约、web 路由/导航、ScopeContext 数据范围、OpenAPI 与种子;A1 客户转交占位由 client 实现替换。
回滚:回滚本提交;数据库保留新增表或按报告执行 down SQL;CUSTOMER_DIRECTORY 可切回空集实现。
验证:format:check / lint / typecheck / test 全绿(shared 131 / api 90 / web 125,共 346);test:int 5 文件 39 条;A3 e2e 1/1;build 8/8;真实浏览器六页验证通过。
2026-11-03 21:45:38 +08:00
Stev_Wang 087f27936e fix(ci): 修复本地 CI 端到端冒烟的 demo 会话与 A0 遗留用例
背景:
- .gitea/workflows/ci.yml 在 job env 中设置 VITE_PUBLIC_DEMO_SESSION=true,
  e2e 用 vite preview + 演示会话登录;scripts/ci-local.mjs 没有同步这组 env,
  本地 CI 第 10 步必失败;
- e2e/smoke.spec.ts 是 A0 用例:还在找「请输入账号或邮箱」占位符、断言登录后落在工作台;
  A1 接入真实登录后占位符为「请输入账号或手机号」,且登录默认落地 /system/users。

改动:
- ci-local:构建与 e2e 步骤注入 VITE_PUBLIC_DEMO_SESSION / VITE_PUBLIC_API_BASE_URL
  (与 ci.yml 对齐),只作用于这两个步骤,避免影响单测对真实登录流程的断言;
- turbo.json:声明 globalEnv,保证构建产物随这两个 VITE 变量变化,不复用非 demo 构建缓存;
- smoke.spec:登录占位符改为「请输入账号或手机号」;登录后按 A1 现状断言落地 /system/users,
  再从顶部「工作台」进入首页并校验模块导航;
- README:单独执行 e2e 时补充 demo 会话环境变量,并注明 ci:local 已内置。

影响面:
- 仅本地 CI 与 e2e 冒烟;业务代码与 CI 工作流行为不变(ci.yml 本就在 job env 注入这些变量);
- 本地构建缓存会因 globalEnv 变更失效一次。

回滚方式:
- 回滚本提交即恢复原 ci-local 步骤、冒烟用例与 README。

验证证据:
- pnpm ci:local 全部门禁通过(用时 218.8s);
- e2e smoke 4 项通过(登录 / 403 / 模块切换 / 404;A1 账号周期 7 项按预期 skip)。
2026-11-03 16:25:55 +08:00
Stev_Wang 3e384febf3 fix(tooling): 给 db:reset 增加显式确认,避免误清本地密码
ci / 质量门禁 (push) Canceled after 0s
背景:
- 本轮部门管理联调后执行了 pnpm db:reset 清理测试数据,清空本地库,
  导致用户手工改过的登录密码被重置回 lingxi2026;
- 之前只保证了 ./dev.sh / pnpm dev / pnpm db:init 不会重置数据,
  db:reset 本身仍可被脚本或助手无提示执行,问题没有真正兜住。

改动:
- 新增 scripts/db-reset.mjs:默认拒绝执行并打印影响;只有显式
  ALLOW_DB_RESET=1 才调用 prisma migrate reset --force;
- package.json 的 db:reset 指向该脚本;
- README / AGENTS §6 §11 / e2e README / A1 实施报告同步:
  日常迁移补种子只用 pnpm db:init,验证/联调中禁止 db:reset;
  e2e 会改写 actor 密码,需使用专用账号或独立测试库。

影响面:
- 确需清库时多一步显式确认;迁移、启动、单测、int 测试不受影响。

回滚方式:
- 回滚本提交即恢复 db:reset 直接执行 prisma migrate reset --force。

验证证据:
- pnpm db:reset 无 ALLOW_DB_RESET 时退出码 1,并打印拦截说明;
- pnpm format:check / lint 通过;node --check scripts/db-reset.mjs 通过。
2026-11-03 15:16:52 +08:00
Stev_Wang f5a8afe835 refactor(web): 侧栏与页面模块名由角色权限改为角色管理
ci / 质量门禁 (push) Canceled after 0s
背景:角色权限只描述模块的一部分能力,侧栏同级均为模块级命名(用户与组织 / 客户 / 行业树);角色页实际覆盖角色 CRUD、权限点、数据范围、特殊权限与 SoD。

改动:
- 侧栏、面包屑、页面标题统一为「角色管理」,页面内权限点 / 数据范围 / 特殊权限分区名不变;
- 用户详情与超管授予弹窗中的模块引用同步改为「角色管理」;
- 开发计划页面清单与 A2 实施报告同步;
- 更新导航与面包屑单测、A2 e2e 标题断言。

验证:format:check / lint / typecheck / test 全绿;5173 实测侧栏、面包屑、页标题均为「角色管理」。
2026-11-03 14:03:13 +08:00
Stev_Wang 7824bc7b32 fix(dev): 明确启动不重置数据库并新增安全 db:init
ci / 质量门禁 (push) Canceled after 0s
背景:开发机每次重启后被反馈需要重新用默认密码登录并强改,排查确认仓库启动链路(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 实际执行通过。
2026-11-03 13:37:34 +08:00
Stev_Wang 7fb458f62f docs(plan): 回写 A2 完成状态并记录 H1 权限门决策
ci / 质量门禁 (push) Canceled after 0s
背景:A2 角色权限与数据范围已完成,需回写计划状态、实施报告与架构决策记录。

改动:
- 新增 docs/adr/ADR-001-权限点目录与六类数据范围.md 及 ADR 索引,记录 H1 权限门六项决策。
- 新增 A2 实施报告(范围、交付、门禁、遗留、回滚、下一步)。
- 更新开发计划 §5.2 / §6.3 / 文档状态,并同步根 README 文档索引。
2026-11-03 12:27:15 +08:00
Stev_Wang 2c8dd5040f fix(dev): 修复演示会话导致的登录回跳并默认输出运行日志
ci / 质量门禁 (push) Canceled after 0s
背景:
- 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 通过。
2026-11-03 09:45:09 +08:00
Stev_Wang 46959fd5fc chore(dev): 增加开发机一键启动脚本 dev.sh
ci / 质量门禁 (push) Canceled after 0s
背景:
- 开发机上前端/后端/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 行为符合预期。
2026-11-03 07:31:50 +08:00
Stev_Wang 2f200fc9d9 docs(infra): 接入公网 RustFS 对象存储
ci / 质量门禁 (push) Canceled after 0s
背景:项目方提供公网 RustFS(https://oss.xinsenidea.com,桶 lingxi-dev)。
改动:.env.example 填入 endpoint / 桶名占位;README 与 A0 报告记录
对象存储接入方式与验证结果;真实密钥仅保存在本地 .env / .env.local。
影响面:环境变量样例与文档,无运行时代码变更。
回滚方式:还原 .env.example 与文档即可。
验证:list buckets、HEAD bucket、PUT/GET/DELETE 探针对象均成功;
format:check、lint、typecheck、test 全绿。
2026-11-02 18:32:38 +08:00
Stev_Wang 5628e158c0 fix(infra): 移除本地 S3 容器并改用 check:dev
ci / 质量门禁 (push) Canceled after 0s
背景:本地 PG/Redis 已按要求复用 docker-postgres-1 / docker-redis-1;
S3 容器按用户要求删除,后续接入公网自建 RustFS。

改动:
- 删除 infra/docker-compose.dev.yaml、infra/compose.dev.yaml
- 移除 compose:up / compose:down 脚本,改用 check:dev 预检本机 PG/Redis
- 新增 scripts/check-dev-deps.mjs;.env.example 的 S3_* 改为待填
- README / AGENTS / A0 报告同步本地依赖与对象存储说明

影响面:本地开发依赖与 CI 本地脚本、环境变量样例、文档。
回滚方式:恢复被删除的两个 compose 文件与 package.json 脚本即可。
验证:format:check、lint、pnpm ci:local(含 e2e 4/4)全部通过,用时 106.3s。
2026-11-02 18:26:24 +08:00
Stev_Wang 620cb93a46 fix(infra): 本地 PG/Redis 复用已有 Docker 服务
ci / 质量门禁 (push) Canceled after 0s
背景:此前误将宿主端口冲突当作新建 compose 服务的理由,实际应按技术架构使用本机已有 PostgreSQL/Redis。

改动:
- 删除 lingxi-pg / lingxi-redis 容器及数据卷,不再另起数据库;
- DATABASE_URL 改回 127.0.0.1:5432/lingxi,REDIS_URL 改回 127.0.0.1:6379;
- 在已有 docker-postgres-1 中创建 lingxi 库并执行迁移/seed;
- compose 仅保留无法拉取镜像的 S3 兼容服务;
- README、A0 报告同步依赖来源。

影响面:仅本地开发依赖与文档;代码/接口/数据模型不变。
回滚方式:git revert 本提交,并按旧 compose 重新初始化(不推荐)。
验证:migrate deploy、db:seed、test:int、pnpm ci:local(85.9s)全部通过。
2026-11-02 18:21:09 +08:00
Stev_Wang 68b5ca20f4 ci(ci): 支持本地 CI 并调整开发库凭据
ci / 质量门禁 (push) Canceled after 0s
背景:Gitea 暂未部署 Actions runner,远程 CI 会停留在 queued;本地开发库按约定改用 lingxi / postgres / postgres。

改动:
- 新增 pnpm ci:local,按 CI 工作流顺序执行 compose、格式、Lint、类型、单测、构建、迁移种子、集成、OpenAPI 与 e2e;
- 新增 scripts/e2e.mjs 管理 vite preview 生命周期,e2e 改为单 worker 避免退出挂起;
- openapi:export 生成后自动 Prettier,保持工作区干净;
- compose、.env.example、CI services 数据库凭据统一为 postgres/postgres,库名 lingxi;
- README、AGENTS、A0 报告同步本地 CI 与数据库说明。

影响面:仅本地开发与 CI 执行方式,无业务代码/接口/数据模型变更;本地库已重建为 lingxi/postgres。
回滚方式:git revert 本提交;数据库需按回滚后的 compose 凭据重新初始化。
验证:pnpm ci:local 全绿(158s),format:check、lint、typecheck、openapi:diff 通过。
2026-11-02 18:14:08 +08:00
Stev_Wang 043f0d9962 docs(plan): 补全开发计划与项目索引
ci / 质量门禁 (pull_request) Canceled after 0s
引入 M0–M4 开发计划(含 A0 WBS、门禁与七管理模块专项),并在 README、AGENTS 同步文档索引;保留 A0 已完成状态。
2026-11-02 17:29:59 +08:00
Stev_Wang 98a5343e53 docs(docs): 补充 A0 实施报告与本地开发说明
记录 A0 完成范围、门禁实测、环境适配与待确认事项;README 补充本地启动、演示登录及 A0 状态。
2026-11-02 17:22:13 +08:00
Stev_Wang c50ee7b57a docs(repo): rewrite README to current product baseline
原 README 仍指向 PRD V0.3 与已废弃的「四大模块」。改为三主线 + 一底座,
补齐文档索引、目标目录结构与本地开发入口。

影响面:仅文档,无代码影响。回滚方式:git revert 本提交。
2026-11-02 15:09:51 +08:00
lmsll 131e285939 docs: 新增 PRD V0.3(行业=业务属性、行业/客户模块拆分、信息模块、视频方向与视频预览下载) 2026-10-31 00:39:05 +08:00
lmsll cd3d42057f docs: 新增 PRD V0.2(编辑模块+录入、图片预览勾选、资产升 P0、管理预览、图片制作流程图) 2026-10-30 17:59:59 +08:00
lmsll 5f5ed7cd09 docs: 新增 PRD V0.1(脚本生成/素材生产/创作/管理四模块) 2026-10-30 17:26:44 +08:00
Stev_Wang 5faf6fde2d chore: 重置仓库,仅保留 docs 目录与 README(切换新赛道) 2026-10-30 15:30:00 +08:00