|
|
2dfc926f96
|
feat(ai): W1-AI-CLOSURE 超级 Sprint — 9 APP 全链路收口 + chat 上下文真激活
Phase 2.3 chat 上下文捕获链路从未真正激活到完整工作:
- 14 处 ai-float-button 补 sourcePage,chat.ts 三分支同步设 pageFilters.contextId
- 后端 page_context 4 层 BUG 修(列名错位 + RLS site_id 未重设)
- xcx_chat filters.pop 破坏 body.page_context 引用 — dict() 浅拷贝隔离
- chat 流式 markdown 实时解析(表格/标题/列表/加粗 + KPI 富卡)
- reference_card KPI 富卡接入 SSE 路径,db 真写入
- 维客线索 source 显示规则:AI 来源用机器人 icon 替代长文字
数据库:
- public.member_retention_clue 加 emoji + runtime_mode + sandbox_instance_id
- biz.ai_run_logs 加 assistant_id + 复合索引
- chk_ai_cache_type CHECK 约束 8 类应用名
- cache_type / app_type 命名统一(app6_note / app7_customer / app8_consolidation)
- 历史 emoji 抽取脚本 44/44 成功
后端 silent failure 修:
- cleanup_service WHERE app_type → cache_type(90 天清理 + 20K 上限重新生效)
- _build_ai_insight 字段错位修复(app4 → app7 + 字段对齐 prompt schema)
- task_manager talkingPoints 改 app5_tactics + tactics 字段
- task_manager aiSuggestion 改取 one_line_summary
- cache_service.CACHE_EXPIRY_DAYS 加 app2a_finance_area
- WS /ws/ai-cache 加 token + JWT + site_id 校验(P0 信息泄露漏洞)
- internal_ai token 改 hmac.compare_digest
工具/文档:
- main.py 加 RotatingFileHandler logs/backend.log + uvicorn /health 过滤
- 新建 utils/clue_category.py(VI 6 类配色 + emoji fallback + source 显示规则)
- 新建 utils/markdown.ts(轻量 md 转 rich-text 解析 + streaming 容错)
- audit + 数据库变更说明 + backlog §七 #14 收口 + #15-#38 残余子任务
- backlog 追加 §十一 App1 参数/MCP/沙箱审计 + §十二 百炼/SQL MCP 主任务线
实地 MCP 走查:14 入口数据层 + 5 代表入口 sourcePage 注入 + customer-detail 全模块 + chat md 渲染 + reference_card 富卡 都已验证。9 项预先 BUG/UX 登记 §七 #29-#38 后续修复。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-06 16:39:07 +08:00 |
|
|
|
1e803e23cd
|
feat(db,docs): F1-5b MP-2 prep + 沙箱时光机模块 spec (W1)
MP-2 经 4 轮调研 + Neo 反馈,采纳方案 C(推迟到 F1-6 沙箱时光机阶段 B):
- 第 1 轮原方案 D(双口径) → 第 2 轮 D'(单口径)
- 第 3 轮 Neo 架构纠正:不读 DWD,走 Core/DWS/app
- 第 4 轮 DWS 视图靠谱性审计:dws_assistant_daily_detail 是计费明细
(ledger_amount),不是助教工资(gross_salary 需等级时薪 + 抽成
+ 罚分),且缺 effective_hours / work_days
- 结论:MP-2 真正实施需要新建 dws_assistant_daily_salary 表(ETL
改造),跟其他 14 个 P1 指标一起做更高效 → 推迟到 F1-6
本次 Wave B 只做 prep:DB schema + 模块 spec + tasks.md 状态调整。
DB 迁移(zqyy_app):
- db/zqyy_app/migrations/20260505__add_effective_date_for_excel_adjustments.sql
- 3 张 Excel 暂存表(全空,Neo 确认尚无 Excel 上传)ADD COLUMN
effective_date DATE NOT NULL(无 DEFAULT,强制未来 Excel 上传必须带):
* biz.salary_adjustments(助教薪资扣款/奖励)
* biz.stg_finance_expense(月度支出)
* biz.stg_platform_income(平台结算收入)
- 3 个复合索引 (site_id, effective_date) 支持后续 daily 截断查询
- biz.stg_recharge_commission 已有 recharge_date,无需改造
测试库执行 + 5/5 校验 PASS:
- 字段存在(NOT NULL DATE 无 default)
- 复合索引存在 + 列序正确
- 字段注释含 'F1-5b MP-2 prep'
- INSERT 不带 effective_date 触发 NotNullViolation
docs/database/ 同步:
- docs/database/changes/2026-05-05__add_effective_date_for_excel_adjustments.md
完整变更说明 + 兼容性 + 回滚 + 5 条校验 SQL + 正式库执行说明
沙箱时光机模块 spec(主干任务排期登记):
- docs/_overview/sandbox-replay-engine-spec.md
- 22 个相关指标分 P1/P2/P3 优先级:
* P1 14 项(daily 视图已有,后端切换)
* P2 5 项(算法重算,含 MP-2 完整 daily salary)
* P3 3 项(状态算法 + sandbox_audit_log 用户行为)
- 4 阶段实施路径:
* 阶段 0(本次 prep)
* 阶段 A(F1-5a/b 已完成)
* 阶段 B(F1-6,2-3 周)— MP-2 真正实施在此
* 阶段 C(F1-7+,1-2 周)
- sandbox_replay 模块结构 + runtime_aware decorator 接口契约
- 性能 + 测试 + 前置依赖清单
F1-5b-tasks.md 状态调整:
- §4.3 顺序 15:MP-2 从"待开始/C4" → "延期 F1-6"
- §6 进度表 MP-2 行同步标"延期 F1-6 + 改方向说明"
- 关联到 mp2_prep.md 审计
业务影响:
- board-coach sandbox 行为暂遗留(F1-6 解决)
- 旧 Excel 模板上传将因 NOT NULL 失败,需 F1-6 同期 ETL UI 改造 +
操作员培训
- 跨页面已 audit:board-finance / customer-records / coach-service-records
/ customer-service-records 等已合规(F1-5b A1/A3 + MP-1/3/5 收益)
审计:docs/audit/changes/2026-05-05__wave1_f1_5b_mp2_prep.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-05 22:12:22 +08:00 |
|
|
|
18fbb2fddf
|
refactor(auth): F1-5b BE-1 manager 角色移除 view_tasks 权限 (W1)
走查发现 manager(店长)进入小程序"任务"tab 收到 403 "权限不足"。
根因不在 require_permission(权限校验通过,missing=set()),而在
task_manager._get_assistant_id() 因 user_assistant_binding 无有效绑定
抛 403 "权限不足"(detail 与权限错误同名,误导走查方向)。
设计层冲突:task-list 是助教个人工作台业务概念,manager 没有"我自己
的任务"业务场景,监督需求由 board-coach 等汇总看板覆盖。
Neo 决策(2026-05-05):
> "任务的 tab 只有助教身份的用户可以进入并查看,让管理身份的用户
> 进入没有意义。因为他们使用业务场景中不存在任务方面的场景。"
→ 选 B 方案:权限矩阵层移除 manager 的 view_tasks。
变更:
- db/zqyy_app/migrations/20260505__remove_manager_view_tasks.sql
DELETE FROM auth.role_permissions WHERE role_id=manager AND permission_id=view_tasks
- docs/database/changes/2026-05-05__remove_manager_view_tasks.md
完整变更说明 + 兼容性 + 4 条校验 SQL + 幂等回滚
测试库执行 + 4 条校验全 PASS:
- manager 改前 5 项权限,改后 4 项(view_board* 保留)
- view_tasks 现绑定到 [coach, head_coach](manager 已剥离)
- coach / head_coach 助教工作台不受影响
- 典型 manager 用户 Neo (8778) 实际权限不再含 view_tasks
双口径走查(weixin-devtools-mcp):
- 4a live: relaunch 后 visibleTabs 从 [task, board, my] → [board, my]
小程序 tabBar"任务"tab 自动隐藏(getVisibleTabs 基于权限自动重算)
- 强制调 GET /api/xcx/tasks 仍 403,但根因从 _get_assistant_id 错位
转为 require_permission 正确拦截,语义清晰
不改的部分:
- task_manager._get_assistant_id() 不动(仍用于 coach/head_coach)
- require_permission("view_tasks") 路由保护不动(仍合理)
- 前端 auth-guard.ts 不改(getVisibleTabs 已基于 permissions 自动)
正式库同步说明:
- 本次仅在测试库执行,生产环境同步时 psql 执行 migration + 跑校验 SQL
审计:
- docs/audit/changes/2026-05-05__wave1_f1_5b_be1_task_list_403_root_cause.md
含完整证据链 + 三方案 ABC 业务影响对比 + B 实施记录
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-05 18:43:35 +08:00 |
|
|
|
b0340349bd
|
feat(etl): cfg_* 视图入口统一 + NULL 兼容 + 3 处 _load_* 历史 Bug (W1-T2 / P0-1)
Wave 1 Day 3 沙箱配置参数切片。
DB 迁移 (20260504__cfg_views_null_compatible.sql):
- 4 个 v_cfg_* 视图 WHERE 加 NULL 兼容
(effective_to IS NULL OR effective_to >= ...)
- 顺手清理 v_cfg_assistant_level_price / v_cfg_performance_tier
WHERE 重复一次的 bug
- 测试库已执行,4 校验 PASS
ETL 代码 (4 处 SQL):
- base_index_task.py: FROM dws.cfg_index_parameters -> app.v_cfg_index_parameters
- base_dws_task.py 3 处 _load_* (performance_tier / level_price / bonus_rules)
改 FROM app.v_cfg_*,顺手修历史 Bug:原 SQL 不带 effective_from/to WHERE
效果:
- 修复视图 NULL 行被过滤问题(SPI 27 行原本读到 0)
- 沙箱模式回放历史日期时,参数自动按 sandbox_date 切片
- _load_* 直接得到当前生效行(原 12/9 行历史 Python 挑)
参考:
- docs/audit/changes/2026-05-04__wave1_t2_scd2_view_unify.md
- docs/database/changes/2026-05-04__cfg_views_null_compatible.md
|
2026-05-04 08:10:57 +08:00 |
|
|
|
caf179a5da
|
feat: 2026-04-15~05-02 累积变更基线 — AI 重构 + Runtime Context + DWS 修复
涵盖(每条对应已存的审计记录):
- AI 模块拆分:apps/backend/app/ai/apps -> prompts/(8 个 APP + app2a 派生)
audit: 2026-04-20__ai-module-complete.md
- admin-web AI 管理套件:AIDashboard / AIOperations / AIRunLogs / AITriggers / TriggerManager
audit: 2026-04-21__admin-web-ai-management-suite.md
- App2 财务洞察 prompt v3 -> v5.1 + 小程序 AI 接入(chat / board-finance)
audit: 2026-04-22__app2_prompt_v5_1_and_miniprogram_ai_insight.md
- App2 prewarm 全过滤器 + AI 触发器 cron reschedule
audit: 2026-04-21__app2-finance-prewarm-all-filters.md
migration: 20260420_ai_trigger_jobs_and_app2_prewarm.sql / 20260421_app2_prewarm_cron_reschedule.sql
- AppType 联合类型对齐 + adminAiAppTypes.test.ts
audit: 2026-04-30__admin_web_ai_app_type_alignment.md
- DashScope tokens_used 提取修复
audit: 2026-04-30__backend_dashscope_tokens_used_extraction.md
- App3 线索完整详情 prompt
audit: 2026-05-01__backend_app3_full_detail_prompt.md
- Runtime Context 沙箱(5-1~5-2 主线):
- 后端 schema/service + admin_runtime_context / xcx_runtime_clock 两个 router
- admin-web RuntimeContext.tsx + miniprogram runtime-clock.ts
- migration: 20260501__runtime_context_sandbox.sql
- tools/db/verify_admin_web_sandbox.py + verify_sandbox_end_to_end.py
- database/changes: 7 份 sandbox_* 验证报告
- 飞球 DWS 修复:finance_area_daily 区域汇总 + task_engine 调整
+ RLS 视图业务日上界(migration 20260502 + scripts/ops/gen_rls_business_date_migration.py)
合规:
- .gitignore 启用 tmp/ 排除
- 不入仓:apps/etl/connectors/feiqiu/.env(API_TOKEN secret,本地修改保留)
待验证清单:
- docs/audit/changes/2026-05-04__cumulative_baseline_pending_verification.md
每个主题的功能完整性 / 上线验证几乎都未收口,按优先级 P0~P3 逐一处理
|
2026-05-04 02:30:19 +08:00 |
|
|
|
76a23639ee
|
feat(db): app2a DWS 新列 + ai_cache CHECK 约束放开
1. db/etl_feiqiu/migrations/20260423__app2a_add_member_order_count.sql:
- dws.dws_finance_area_daily 增加 member_order_count 列 (integer NOT NULL DEFAULT 0)
- 重建 app.v_dws_finance_area_daily RLS 视图暴露新列
- 同步重建 dws.v_dws_finance_area_daily(遵守双 schema 规则)
- 列顺序因 PostgreSQL CREATE OR REPLACE VIEW 限制必须加在末尾
2. db/zqyy_app/migrations/20260423__ai_cache_allow_app2a.sql:
- biz.ai_cache.chk_ai_cache_type CHECK 约束放开 app2a_finance_area 新值
- DROP 旧 7 项 CHECK + CREATE 含 8 项的新 CHECK(新增 app2a_finance_area)
3. docs/database/changes/ 两份变更文档:
- 变更说明 + 兼容性 + 回滚策略 + 3-4 条验证 SQL
测试库已执行 + 验证通过。生产库待上线窗口按 checklist 跑。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-04-22 21:55:01 +08:00 |
|