Commit Graph

2 Commits

Author SHA1 Message Date
浅念 6100b4eb15 fix: P4T1审查修复(platform.db入data卷/tzdata注释/corepack钉版/compose版本注记)
- main.py: PLATFORM_DB 挪到 <repo>/data/platform.db——data/ 是 compose
  bind mount,容器/镜像重建不再丢租户注册表;lifespan 对父目录兜底
  mkdir(冷机 data/ 不存在,sqlite 不建父目录)。bootstrap 脚本 --db
  默认值同步锚定 data/。
- 新测试 test_platform_db_defaults_into_data_dir: 常量形状钉死(回退
  仓库根即红)+ 冷机形态下 lifespan 建库于 data/ 内(全量 603)。
- Dockerfile: corepack 钉实测通过的具体版本 0.36.0(不追 latest,构建
  可复现);tzdata 注释照实改写(trixie slim 实测已自带,安装留作基
  镜像漂移保险)。
- docker-compose: 头注释改准确(tenants/=租户库,data/=platform.db+
  uploads);env_file 注记对象式写法需 Docker Compose >= 2.24。
- 实证: compose down/up 重建容器后宿主 ./data/platform.db 仍在,
  healthcheck healthy,/admin/ 200;docker compose build 复验通过。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-14 08:42:50 +08:00
浅念 7d16ae6318 feat: 生产装配切换DbTenantSource + bootstrap脚本(超管/两租户幂等导入)
- app/main.py: lifespan registry 装配按 env TENANT_SOURCE 切换(db|file,
  默认 db)——db 走 TenantRegistry(DbTenantSource(platform_engine)) +
  schema 就绪后 async load_all;file 回退旧 load_from_dir。空 platform.db
  冷启动不炸:显式预检 tenants 表(非捕 ValueError——坏数据同样抛
  ValueError,一揽子吞会把数据损坏静默成空平台),空表保持空注册表
  (域名全 404 直到 bootstrap 导入),清扫循环对空 runtimes() 安全。
  非法值在创建任何 engine 前显性炸。conftest 预置缝优先于 env 装配,
  既有 558 测试零改动全绿。
- scripts/bootstrap_platform.py: init(schema+超管,env/.env 凭据,空表
  才建)+ 出厂档案幂等导入(已存在 slug 跳过;FileTenantSource.read_tenant
  同构快照 → Tenant+sites+domains+版本1,版本走 write_config_version 单一
  路径;域名 _normalize_host 归一)。不建租户管理员——导入是存量迁移
  形态,租户管理员按需走后台创建向导补。CLI 照 extract_config.py 的
  argparse 风格(--db/--profiles/--seed)。
- tests/test_bootstrap_script.py: 幂等两遍零变化(行数/版本数逐项断言)、
  超管 env 凭据、未知档案显性炸、bootstrap→DbTenantSource→registry 两租户
  resolve 冒烟(jc 蓝/17 条/ai-kefu-jc,auto 橙/13 条/ai-kefu,es 覆盖层)、
  TENANT_SOURCE 三态装配(db 空/库冷启动、file 回退、非法值炸)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-13 12:05:42 +08:00