浅念
|
20dddc151e
|
fix: 装配切换审查修复(启动异常路径韧性/清扫隔离/文案与夹具卫生)
- main.lifespan: 预热+清扫挪进 try,finally dispose_all 覆盖启动半途
失败(幂等于更少引擎,堵 engine 泄漏);清扫循环体 per-tenant
try/except + logger.exception 后继续——一个租户坏库不炸平台启动,
resolve/load_from_dir 保持 fail-fast
- routes/runtime.py: RuntimeError 文案补 registry_reload dispose 旧
runtime 成因;TenantRuntime 注解挪 TYPE_CHECKING(engine 包运行期
零 import platform)
- conftest client: teardown 置空 app.state.registry(关残留窗);
rmtree 先正常删,失败 warnings.warn 留痕后再 ignore_errors 兜底
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-12 19:37:51 +08:00 |
|
浅念
|
d041077bb6
|
feat: 装配切换——main/服务构造线/conftest 迁至 Registry(含默认租户过渡兜底)
- main.py: 删全局 engine/async_session;lifespan 装配 TenantRegistry
(seed_profiles → 仓库根 tenants/,路径锚定),预热默认租户 jiancai 挂
app.state.default_runtime,逐 active 租户(库文件已存在)跑
sweep_stale_pending,退出 dispose_all。app.state.registry 预置即沿用
(测试注入缝)
- routes/runtime.py(过渡,Task 7 删): get_runtime——state.tenant 优先,
缺省落 default_runtime;chat.py/chat_rest.py 全部改走它,消除
main↔routes 循环依赖
- ConversationManager 构造线: 新增 runtime 可选参(持 session_factory/
compiled_wall/config 引用;prompts 仍模块级,Task 6;业务接线 Task 9),
fire_pending_pushes 随任务传 session_factory(后台写回派发租户的库)
- lead_push_service: 去 app.main import;写库入口显式收 session_factory,
模块级 async_session=None 仅作测试注入兜底
- conftest: client 夹具 = 每测试独立 Registry(tmp data_dir)+ 真实
lifespan 在 TestClient 循环内预热;删 _dispose_main_engine;
async_db 保持 NullPool(跨 asyncio.run 循环安全,刻意不换 Registry 引擎)
- 测试仅动夹具/桩签名(断言零改动): wiring 桩补 session_factory 形参;
history-404 用例改经真实 WS 路由造 widget 会话(引擎常驻连接绑定
TestClient 循环,测试线程不得直开 session_factory)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-12 19:15:46 +08:00 |
|
浅念
|
0c296ca1ba
|
fix: Registry 审查修复(JSON定位/校验测试/竞态窗口/TenantDisabledError/路径锚定/seed_dir)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-12 18:54:30 +08:00 |
|
浅念
|
607baff83c
|
feat: TenantRuntime/Registry——每租户懒建 engine(WAL/pool2)+文件加载器+站点解析
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-12 18:24:47 +08:00 |
|
浅念
|
f5f54383fc
|
fix: 词表墙的四项审查修复(es 池降级/占位符白名单校验/键 allowlist/提取自检+防呆测试)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-12 18:05:55 +08:00 |
|
浅念
|
bc903a273e
|
feat: 词表数据化——AST 提取脚本 + wall.json + 编译器 + boundary/conversation 数据源切换(等价回归全绿)
- scripts/extract_config.py: AST 解析两老项目源码取常量(不 import 源模块),
生成 seed_profiles/<slug>/{wall.json, brand_values.json, prompts/};幂等可重跑
- app/engine/wall_schema.py: compile_wall(json)→CompiledWall,坏结构/坏 regex
编译期显性失败(WallConfigError 含字段路径)
- boundary_filter/conversation: 墙词表/话术数据源切换为 DEFAULT_WALL
(jiancai 出厂 seed),函数逻辑不动、常量名保留为 wall 视图(既有测试零修改);
wall 数据化新增 pivots/pivots_contact/zero_number/reask_patterns 字段
- 脆锚点迁移: test_inline_prohibitions 断言对象从 conversation.py 源码改为
wall.json 数据文件,语义等价(唯一允许的测试修改)
- 回归: 322 既有全绿 + 10 新增 wall_schema 测试 = 332;提取脚本两遍无 diff
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-12 17:31:57 +08:00 |
|
浅念
|
8a16a2959b
|
test: 钉住 deep_merge 的 None 替换与列表替换语义 + 只读约定注释
- characterization:显式 None 整体替换且兄弟键保留默认(Task 9 回退契约依赖);列表整体替换不与默认拼接
- DEFAULT_CONFIG 与 TenantConfig.data/Site.brand 补只读约定注释
- platform 包依赖章程改明确:defaults/tenant_config 为叶子模块供 engine 反向消费,registry 组装层可 import app/engine
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-12 16:59:31 +08:00 |
|
浅念
|
89339868db
|
feat: 出厂默认与快照深合并(E4 配置演进)
- app/platform/defaults.py:DEFAULT_CONFIG(spec §5.1 九组,brand/wall 待 Task 4 填充)+ deep_merge(补缺/不动入参/兄弟保留)
- app/platform/tenant_config.py:TenantConfig/Site frozen dataclass;site.brand 以租户级 data["brand"] 为合并基线,租户自定义可被站点继承
- tests/test_config_merge.py:merge 三性质 + 站点覆盖/继承/无 sites 共 5 用例
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-12 16:44:49 +08:00 |
|
浅念
|
603c03eb4a
|
feat: jc 引擎主线搬入 app/engine(315 测试基线全绿:320 去掉 admin 5 用例)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-12 16:25:32 +08:00 |
|