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>
This commit is contained in:
浅念
2026-10-12 17:31:57 +08:00
parent 8a16a2959b
commit bc903a273e
19 changed files with 2132 additions and 310 deletions
+3 -2
View File
@@ -1,5 +1,6 @@
"""出厂默认配置。结构 = spec §5.1 的 9 个配置组。
本阶段 brand/wall 的默认值由 Task 4 从 jc 代码提取填充。
brand 由租户 seed(seed_profiles/<slug>/)提供;wall 由租户 seed 的
wall.json 提供(app/engine/wall_schema.compile_wall 编译),出厂均留空。
只读约定:消费者不得修改本 dict,需要定制走 deep_merge 拷贝。"""
import copy
@@ -9,7 +10,7 @@ DEFAULT_CONFIG: dict = {
"welcome": "", "topics": [], "placeholder": "",
"whatsapp": "", "email": "", "privacy_url": "",
},
"wall": {}, # Task 4 填充
"wall": {}, # wall 由租户 seed 的 wall.json 提供,出厂留空
"contact": {"cc_completion": True, "email_light_ask": True, "template_languages": ["en", "zh", "es"]},
"email": {"smtp": None, "sender_name": "", "notify_emails": []},
"push": {"enabled": False, "url": "", "api_key": "", "prefix": "", "timeout": 10,