Commit Graph

44 Commits

Author SHA1 Message Date
Neo
421e193041 fix(ai): F1-5a 沙箱 batch-run 接入 runtime_context (W1 / 阶段 A 主体)
Neo F1-5 反馈: "让沙箱起到其真正的作用. 真正的模拟日期, 仅能看到沙箱设定日期
及之前日期的数据, 并运行 AI 的各个业务."

调研发现 (4 个并行子代理): batch-run 端点 _run_batch 是空壳 stub
(只 logger.info, 实际不跑 AI), GUC apply_runtime_session_vars 0 处调用
(dead code), 7 张业务表 6 张有 runtime 复合索引唯独 ai_run_logs 漏建,
App2/2a 3 行 _calc_date_range 漏传 ref_date.

本 commit (F1-5a 阶段 A 主体, F1-5b 后续完整 zqyy_app RLS 视图层):

后端核心:
- admin_service.py: _run_batch 真实化 (Semaphore(5)+asyncio.gather+
  return_exceptions=True+ctx_snapshot 防漂移); estimate 入口抓
  RuntimeContext 快照, confirm 取出传给 worker
- admin_ai.py: confirm_batch_run lazy 注入 dispatcher
- admin_service.retry_trigger_job: INSERT 落 runtime_mode +
  sandbox_instance_id 列 (用 runtime_insert_columns helper)
- runtime_context.py: get_runtime_context 加 bind_to_session 参数,
  激活 GUC app.current_business_date / app.current_runtime_mode
- run_log_service.create_log: 启用 bind_to_session=True 试点

App2/2a 3 行 ref_date 修复:
- app2_finance_prompt.py:817 储值卡余额变化板块
- app2_finance_prompt.py:841 日粒度 series + 异常检测窗口
- app2a_finance_area_prompt.py:466 区域日粒度 series

DB:
- migrations/20260505__ai_run_logs_runtime_index.sql:
  补 (site_id, runtime_mode, sandbox_instance_id, created_at DESC) 复合索引

前端:
- AIOperations.tsx: 顶部加 sandbox 模式提示条 (Alert 显示 sandbox_date +
  sandbox_instance_id + 影响范围 + 切回 live 入口)

未做 (留 F1-5b 完整 zqyy_app RLS 视图层一并):
- B1 admin_service 6 处 CURRENT_DATE -> business_date
- B2 fdw_queries 异常分支兜底
- GUC 完整传递 (fdw_queries / page_context 等)
- 测试 3 套 (.gitignore:71 排除, F2-2 入仓时 commit)
- P20 SPEC \xa76/\xa710/\xa711/\xa715 (F1-5b 完整收口后同步更准确)

Neo 决策: docs/_overview/wave1-findings/F1-5-impl-decisions.md

详见 docs/audit/changes/2026-05-05__wave1_f1_5a_sandbox_batch_run.md
2026-05-05 03:01:48 +08:00
Neo
a99bbd9a74 chore(hooks): OpenAPI 抓取 + Prompt 同步 提醒 hook (W1 / F2-1B)
历史教训 (F2-1A): OpenAPI 抓取脚本 2026-04-06 commit 779b2f6 被
Claude Opus 4.6 在批量清理 1155 个废弃文件时误归档到
_DEL/_DEL/scripts/ops/, 导致 docs/contracts/openapi/backend-api.json
28 天 stale (137 paths -> 实际 167 paths, 缺 30 端点)。
Neo 反馈: 建立机制不要让类似事件再发生。

F3-2C 配套需求: 建立 docs/ai/system-prompts/ 独立 MD 体系后,
维护流程依赖 3 步同步 (元信息日期 / 同步历史 / _INDEX.md 状态表),
容易遗漏造成漂移。

新增 2 个 PostToolUse hook (Edit|Write matcher, timeout 5s):
- post_edit_openapi_reminder.py: 改 apps/backend/app/routers/*.py
  提醒重抓 OpenAPI 具体命令
  (.venv/Scripts/python.exe scripts/ops/_export_openapi.py)
- post_edit_prompt_sync_reminder.py: 改 docs/ai/system-prompts/app*.md
  提醒 3 步同步 (元信息 / 同步历史 / _INDEX.md 状态表)

settings.json 注册 2 个 hook 条目 (PostToolUse 末尾追加)。

spec-close.md 步骤 5 文档同步表:
- OpenAPI 行升级为具体命令 (避免手工同步漂移描述)
- 新增 docs/ai/system-prompts/app*.md 同步行

验证: stdin 模拟测试 3 场景全部符合预期 (匹配 router 输出 OpenAPI 提醒;
匹配 system-prompts MD 输出 prompt 同步提醒; 不匹配静默)。

详见 docs/audit/changes/2026-05-05__wave1_f2_1b_defense_hooks.md
2026-05-05 02:03:43 +08:00
Neo
b3ad4b8325 docs(ai-prompt): 9 APP system prompt 独立 MD 目录 + ai-app-prompts.md 瘦身改造 (W1 / F3-2C)
Neo 反馈: 我把百炼 8 APP 的 system prompt 更新到了 ai_system_prompt_by_app.md,
帮我整理成单独 8+1 个文件, 加说明, 放合适目录, 妥善保管。

新增 docs/ai/system-prompts/ 目录:
- _INDEX.md (关系图 + APP ID 映射 + 同步状态表 + SOP)
- 9 份独立 MD: app1_chat / app2_finance / app2a_finance_area /
  app3_clue / app4_analysis / app5_tactics /
  app6_note / app7_customer / app8_consolidation
- 每份带元信息表 + 场景 + 提示词参数 + system prompt 全文 +
  协作关系 + 同步历史 (用 4 反引号 ````text 避免内部 ```json 冲突)

App2a 厘清 (状态 A):
- 与 App2 是两个独立百炼 APP, APP_ID 0ae965029bc54706bcff44f511ac716b
- 显示名 ZQYY-APP2a-指定区域财务洞察, env DASHSCOPE_APP_ID_2A_FINANCE_AREA
- prompt 是 App2 5/5 版本的精细化扩充: H6 新增'助教成本特殊规则'+
  板块 D 新增'助教字段缺失业态判断'(麻将/KTV 缺失=业态正常 /
  大厅/VIP/斯诺克 缺失=业态异常)

改名 + Banner:
- docs/ai/ai_system_prompt_by_app.md
  -> docs/ai/system-prompts/_snapshot-20260505-source.md
  (git mv 保留历史; 文件头加 Banner 说明已被拆分)

A 处置 docs/prd/ai-app-prompts.md (Neo 同意):
- 727 行 -> 110 行 (减 84.9%)
- 标题改为 '百炼平台 AI 应用集成实现规范'
- 删 8 APP system prompt 章节 (已迁移)
- 留 NS2 实现要点 + APP ID 映射 (补 App2a 行) + 前端消费方式 (补 App2a 行) + 附录代码审计对照表

修正认知错误:
- 5/4 F3-2-prompt-files-list.md 给的对照逻辑 (对照 .py 与云端) 是错的
- .py 是 user message 拼装代码, 不是 system prompt 备份
- 5/5 重写该文件: 对照对象改为 docs/ai/system-prompts/*.md

详见 docs/audit/changes/2026-05-05__wave1_f3_2c_system_prompts_split.md
2026-05-05 02:03:20 +08:00
Neo
f92f2d98f3 fix(tools): 恢复 OpenAPI 抓取脚本 + 重抓 backend-api.json (W1 / F2-1A)
历史: 2026-04-06 commit 779b2f6 大批量清理时被 Claude Opus 4.6
误归档到 _DEL/_DEL/scripts/ops/_export_openapi.py, 28 天 stale。

恢复:
- cp _DEL/_DEL/scripts/ops/_export_openapi.py scripts/ops/
- 跑脚本重抓: 137 -> 167 paths (新增 30) / 194 -> 234 schemas
- 0 个 removed (后端无废弃)

新增 30 端点分布: admin-ai 5 + runtime-context 3 + task-engine 7 +
triggers 1 + db-health 1 + execution/internal/trigger-jobs 5 + xcx 5

附 F3-2B prompt 文件清单 (本地 8 个 + App1 缺本地副本):
docs/_overview/wave1-findings/F3-2-prompt-files-list.md
Neo 决策 B 云端权威, 用清单对照云端 prompt 检查/更新本地副本。

详细 diff 见审计:
docs/audit/changes/2026-05-04__wave1_f2_1_openapi_script_restored.md
2026-05-05 00:30:10 +08:00
Neo
8458cfaae2 docs(audit): Wave 1 findings 第二轮反馈追加 (5 项深入答疑)
回答 Neo 在 01-W1-findings-response.md 上写的 5 个新问题:

1. F1-3 Frozen >1 年 - 本地硬盘 tar.zst 即可, 不必对象存储
2. F2-1 OpenAPI 作用深入浅出 - "厨房菜单 vs 大堂菜单"比喻 +
   5 个使用场景 (FastAPI 双层结构 + 28 天 stale 不破坏运行的原因)
3. F2-2 自建 Gitea 优化 - .gitea/workflows/ 替代 GitHub Actions,
   默认仍 5 分钟版 (步骤 1+2+5), 启 Actions 可选
4. F3-2 system prompt 计费 - 100% 计入 (Qwen 无 caching 折扣) +
   推荐方案 A 全 prompt 入 git 单源 (新增 Wave 5 prompt 治理任务)
5. F3-4 全 API 端点遍历 - ~25-30 端点 / 半天集中改造,
   兑现 Wave 0 全览调研价值 (推荐 Wave 5 集中, 不分散)

最终 Wave 总分配:
- Wave 1 (进行中): F1-5
- Wave 2 前 (立即): F2-1A 恢复脚本
- Wave 2: F1-1 / F2-1B hook / F3-1 / F3-2A / F3-3
- Wave 4: F1-2 / F1-3 三层归档 / F3-5
- Wave 5: F2-2 tests / F3-4 全 API 沙箱校验 / F3-2B prompt 治理 (新增)

待 Neo 拍板 3 项:
- F2-2 是否启 Gitea Actions
- F3-2B 全 App prompt 入 git 单源 是否启动
- F3-4 集中 Wave 5 vs 分散
2026-05-05 00:20:19 +08:00
Neo
8952ca2969 docs(audit): Wave 1 findings 反馈响应 + F2-1 OpenAPI 同步历史调研
01-W1-findings-response.md 主线整合 12 项 Neo 反馈:
- 直接同意 7 项 (F1-1/1-5 + F2-1 + F3-1/3/5 等)
- 修正 2 项: F1-2 降级 P1 UX (admin-web 无 site_admin 登录),
  F1-4 撤销 (前提错误)
- 评估 1 项: F1-3 改良为 Hot DB + Cold Parquet 按月分区
- 简化 1 项: F2-2 基于 Neo 前提 5 分钟方案 (删 .gitignore + 入仓)
- 联网搜 1 项: F3-2 DashScope Qwen3-Max-Preview $1.20/$6.00 per 1M
  + Qwen3 切词 1000 字符 ≈ 500 tokens + SCD2 配置表方案
- 答疑 1 项: F3-4 沙箱越界 422 拒绝

F2-1-openapi-history.md (234 行) 真相:
- 抓取脚本 scripts/ops/_export_openapi.py 12 行曾存在
- 2026-04-06 00:39 commit 779b2f6 批量清理 1155 个废弃文件时
  被 Claude Opus 4.6 误归档到 _DEL/_DEL/scripts/ops/
- 36 分钟前同一天还跑过最后一次抓取
- 28 天内无人发现, 9/10 缺失端点是工具消失后新加 router
- 脚本本身无 bug, 推荐恢复 + 加 hook 防御
2026-05-05 00:03:57 +08:00
Neo
658aa7e12b docs(audit): Wave 1 发现待 Neo 拍板 12 项业务故事卡
Wave 1 Day 1-4 实施过程中挖出的问题, 按 04a/b/c 业务故事卡风格呈现:
- 7 字段 (关联/背景/逻辑/影响/选项/判定)
- 12 项分 3 组: P0 评估发现×5 / 项目治理×2 / 业务语义×5
- 每条带 Wave 分配建议, 不评估工时

第一组 P0 评估发现 (W1-T7 PRD 撰写挖出):
- F1-1 批量 AI 长事务无幂等 (重复扣费风险)
- F1-2 run-logs PII 跨租户泄露 (个保法风险, 建议 Wave 1 修)
- F1-3 batch_id 生命周期未管理 (数据库膨胀)
- F1-4 triggers/unified 权限过松 (跨租户可见)
- F1-5 沙箱 batch-run 未读 runtime_context (沙箱主线必修)

第二组 项目治理:
- F2-1 OpenAPI 与代码不同步 (建议 Wave 2 提前修脚本)
- F2-2 tests/ .gitignore 排除 (建议 Wave 5 入仓 + 启 CI)

第三组 业务语义待 Neo 答:
- F3-1 cache invalidate 粒度
- F3-2 AI budget 单价来源
- F3-3 手动触发 audit + 二次确认
- F3-4 sandbox_date 边界
- F3-5 unified 分页
2026-05-04 22:37:04 +08:00
Neo
c58599d29b docs(prd): admin-web API 全景总览 + 批 1 PRD (W1-T7 / P1-7)
Wave 1 Day 4 admin-web 后端 API PRD 批 1 撰写。

00-overview.md (338 行):
- 151 端点 / 34 标签全清单(实际 vs P1-7 估算 80,多 71 个)
- 5 批 PRD 拆分映射
- OpenAPI 与代码不同步告警(本批缺 10+ 端点,Wave 5 修复抓取脚本)

batch1-runtime-context-and-ai.md (924 行):
- 23 端点 PRD: admin-ai 17 + runtime-context 5 + triggers 1
- 41 评估发现: P0x8 / P1x20 / P2x13
- 每端点带 file:line 引用 + 调用方定位

工作量修正: P1-7 估算 60-65h -> 实际 100-130h (按 5 批分散到 Wave 1-5)。

参考: docs/audit/changes/2026-05-04__wave1_t7_admin_api_prd_batch1.md
2026-05-04 09:54:35 +08:00
Neo
e74ce4242f docs(audit): Day 4 测试现状 + 补 W1-T4 audience 单测 (本地)
- 跑测试: jwt 15/15 + db_viewer_properties 2/2 + ETL 4 视图 smoke PASS
- 补 W1-T4 audience 7 单测 (admin/miniapp 写入 + 旧 token 兼容 + jose silent pass)
- 修 db_viewer_properties.py: _WRITE_KEYWORDS -> _DENY_KEYWORDS (W1-T5 重命名)
- pre-existing 26 个 db_viewer_router fail 与本 Wave 无关 (留 Wave 5)

注: .gitignore:71 'tests/' 排除测试代码不入仓 (项目级决策),
    测试改动仅在本地工作树,本审计记录改动清单 + 跑通结果。

参考:
- 审计: docs/audit/changes/2026-05-04__wave1_day4_test_coverage.md
- 待治理: tests/ 不入仓 -> CI 缺失 -> 测试可能 rot,留 Wave 5 决策
2026-05-04 09:46:27 +08:00
Neo
3673090582 docs(audit): W1-T6 chat 多入口后端契约已就位 (P1-11 关闭)
Day 3 实地走读确认 CHAT-2b 端点已实现:
- 后端 xcx_chat.py:GET /api/xcx/chat/messages (contextType + contextId)
- 前端 chat.ts:6 分支 (historyId / taskId / customerId / coachId / sourcePage / general)
- 前后端字段契约 + chatId 归属验证均一致

E-2 调研当时只读到前端标 "待核",本次走读确认后端早已实现。
无代码改动,本审计文件作为"已就位"标记,避免后续误判。

参考: docs/audit/changes/2026-05-04__wave1_t6_chat_context_already_in_place.md
2026-05-04 08:12:12 +08:00
Neo
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
Neo
9eb495686f feat(miniprogram): board-finance isCurrentMonthFilter 接入业务时钟 (W1-T1 / P0-3)
Wave 1 Day 2 看板沙箱接入。

调研修正:
- xcx_board.py + board_service.py 服务层已接入 runtime_context (L264/L712)
- board-customer.ts / board-coach.ts 0 处使用 new Date(),无需改
- 唯一遗漏: board-finance.ts isCurrentMonthFilter 用 new Date().getDate()
  沙箱回放历史日期会判错"本月前 5 天预估"提示

修复:
- import getBusinessClock from utils/runtime-clock
- isCurrentMonthFilter 接收可选 businessDate 参数;空值降级 new Date()
- data 加 businessDate: ''
- onShow 拉业务时钟 + 修正 isCurrentMonth
- onTimeChange 用 this.data.businessDate

参考: docs/audit/changes/2026-05-04__wave1_t1_board_sandbox_clock.md
2026-05-04 07:42:51 +08:00
Neo
509cf43284 chore(docs): Wave 0 调研产出 + P0/P1/P2 反馈调研
建立项目级标杆文档 docs/_overview/ 作为产品全景索引,
解决"PRD 零碎、文档膨胀、跨子系统调研无入口"的问题。

主要内容:
- 00-index 总索引 + 维护协议 + 与 CLAUDE.md 关系
- 01-product-overview 产品全景脑图(6 角色 / 6 子系统 / 数据流 /
  7 业务概念 / 8+1 AI 矩阵 / 22 术语)
- 02a-miniprogram-page-matrix 小程序 21 页业务指纹
- 02b-adminweb-page-matrix admin-web 19 路由业务指纹
- 03-test-spec 测试规范 (L1-L5 分层 + 走查模板 + 75-95 case 估算)
- 04-doc-conflicts 39 条冲突索引(P0×8 / P1×13 / P2×13 + 5 子项)
- 04a/b/c-conflicts-*-detail 业务故事卡(7 字段:关联/逻辑/影响/选项/判定)
- 05-orphan-pages-cleanup admin-web 6 孤儿页面处置(1 归档 + 4 保留)
- WAVES-MASTER-PLAN.md 全 Wave 主计划(0-5,共 22-32 工作日)
- WAVE-1-KICKOFF.md Wave 1 实施 kickoff
- GLOBAL-DECISION-DASHBOARD.md 全局决策仪表板

反馈调研产物:
- 04a-feedback/ P0 两轮反馈(8+8 项决策 + D-1/2/3 + F-1/2 子代理产出)
- 04b-feedback/ P1 两轮反馈(13+1+5 项 + E-1/2/3/4 + G-1/2 子代理产出)
- 04c-feedback/ P2 反馈(13 项 + 5 子项 + H-1/2/3 子代理产出)
- NEO-DECISIONS-LOG 累积决策记录

关键追加发现 8 处 D Bug(原蓝本 0):
- P0-3 看板沙箱接入(Wave 1 W1-T1)
- P0-5 致命 1 (4 处 fdw_etl 残留, 已修 commit 17f045a)
- P0-5 致命 2 (JWT aud 缺失, 已修 commit 17f045a)
- P0-6 clearAllTasks 守卫 (Wave 3)
- P0-8 DBViewer 黑名单漏 (已修 commit 17f045a)
- P1-3 task-detail 跳转传 task_id 而非 customer_id
- P2-7 board-finance 隐式 null
- 2 个独立 Bug (page_context.created_at + ClueCategory 字典)

参考: docs/_overview/00-index.md
2026-05-04 07:38:28 +08:00
Neo
c6453829a6 docs(prd): 新增 P20 Runtime Context 沙箱 SPEC + §14 成果层走查
补全 Runtime Context / 虚拟时间机制的独立 SPEC,基于现有代码 +
2026-05-01/02 审计记录追溯型起草(Neo P0-7 反馈触发)。

§1-§13 工程层规范:
- 数据模型 (biz.site_runtime_context + 7 表 runtime 维度列)
- 5 个 API 端点(管理面 + 通用面 + 小程序面)
- 各端读取约定(后端服务层 / ETL 视图层 / 小程序 / AI 提示词 / admin-web)
- 跨模块覆盖矩阵 + 13 条 AC + 任务清单 T1-T15
- 已知冲突清单 (BD_Manual vs 代码现状)

§14 成果层走查 (Neo P0-7 §15 patch 落入,选项 A):
- admin-web Playwright 12 路由走查清单
- 小程序微信开发者工具 10 页走查清单
- 跨页时间漂移 (AC12 实地化)
- 多角色身份走查 (看板收口后主线主动提醒切身份)
- 走查产物归档约定

参考: docs/_overview/04a-feedback/P0-7-spec-acceptance-layer-check.md
2026-05-04 07:38:01 +08:00
Neo
17f045a89e fix(backend): Wave 1 Day 1 三个 P0 D Bug 修复
- W1-T3 修 4 处 fdw_etl.* 必坏残留 → app.* (P0-5 致命 1)
  · tenant_users.py L431/L456-457: v_dim_assistant + v_dim_staff(_ex)
  · tenant_excel.py L394/L411: v_dim_assistant + v_dim_staff
  · tenant_clues.py L119: v_dim_member
  · 修复后 tenant-admin 用户审核 / Excel 上传 / 维客线索恢复正常

- W1-T4 JWT aud sign 端写入 (P0-5 致命 2 最小止血)
  · jwt.py 全部 token 创建/解码函数加 audience 参数
  · auth.py admin 端加 audience="admin"
  · xcx_auth.py miniapp 端加 audience="miniapp" (8 处调用)
  · 18 router 切强制 aud 校验留 Wave 2

- W1-T5 DBViewer 白名单 + 黑名单双保险 (P0-8)
  · 白名单: SELECT/WITH/EXPLAIN/SHOW 开头
  · 黑名单: 17 关键词覆盖全 DML/DDL/DCL
  · 注释剥离避免误伤;15/15 单测 PASS

参考: docs/audit/changes/2026-05-04__wave1_day1_d_bug_triple_fix.md
2026-05-04 07:36:20 +08:00
Neo
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
Neo
f2e0de8fab chore(migration): Cursor → Claude Code 反向迁移 + 单轨化(v2)
- 删除 5 个 AGENTS.md(根 + 4 子模块)与 .cursor/、.cursorignore,全部已备份
- 在 CLAUDE.md 末尾追加 5 节迁移必需内容(CLI/Shell 中文与编码、Claude Code 资产入口、Hook 与权限、不破坏原则、历史追溯),保留用户选定的 226 行项目规则全集
- 用户级 12 个 skills 从 ~/.cursor/skills/ 剥包装回迁到 ~/.claude/skills/(neozqyy-cursor-migration → neozqyy-claude-code-migration)
- docs/ai-env-history/ 顶层 10 文件入仓(含 conversation_index.csv、file_impact_index.csv,已脱敏);sessions/ 原文继续本地保留
- 新增 tools/claude-code/migrate_ai_environment.py(--check 14/14 通过)
- 新增 docs/claude_code_migration.md 与 docs/audit/changes/2026-05-02__claude_code_migration.md
- .gitignore 调整:开放 2 个 CSV 索引入仓,保留 sessions/ 与 claude-history/ 排除
- 不混入 124 个业务变更(AI 模块重构、runtime_context、sandbox 等保持 unstaged)
- 备份位置:~/.claude/backups/pre-claude-code-migration-2026-05-02/

第二轮迁移(第一轮 commit 6facb2d 已被 git reset 回滚;本轮策略为追加而非重写 CLAUDE.md)
2026-05-03 21:08:13 +08:00
Neo
81e41730ec 迁移 Claude/Codex/Cursor 开发环境与追溯资产
Co-Authored-By: OpenAI Codex <codex@openai.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-02 03:11:39 +08:00
Neo
d269ee6401 docs(ai): app2a v1.2 system prompt + 多 APP 派生设计 v2 + 审计 + A/B 脚本
1. docs/ai/app2a_finance_area_system_prompt_20260422_v1.md (新建 · v1.2 生产版):
   - 基于 app2_finance V5.1 派生
   - 板块 C 改"业态收入结构" · 板块 E 改"业态定位与对比"
   - 新增 H7 硬约束:业态特征引用必须紧跟 payload 真实数据
   - H6 扩展区域级 6 类字段缺失降级(储值卡/分渠道现金流/现金流出/会员占比/按星期/日异常)
   - 经 3 次修正:v1"稀疏" → v1.1 纠正为业务真实 0/非 0 → v1.2 纠正为字段存在/整块缺失
   - 已同步百炼控制台 APP ID 0ae965029bc54706bcff44f511ac716b

2. docs/ai/app2_finance_multi_app_design.md (新建 · v2 定稿):
   - 6 章 + 3 附录 · Q1-Q7 全部决策 · 6 阶段 28 项 checklist
   - 72 组合数据源支持度三档梳理(必须 / 业务级全店 / 字段存在 vs 整块缺失)
   - 2 套 prompt 拼接方案 · 2 个派生百炼 APP 策略

3. docs/audit/changes/2026-04-23__app2a_finance_area_integrated.md (新建):
   - 完整审计记录 · 13 高风险文件逐项注解
   - 数据库变更 + 风险与回滚 + 验证方式 + 合规检查

4. docs/audit/audit_dashboard.md (刷新 · 135 条记录)

5. scripts/ab_test_app2a_area.py (新建):
   - 8 业态 × 3 轮 = 24 次采样评估含金量
   - 自动检测 H1/H2/H3/H7 硬约束通过率 + seq11 三色灯分布

6. scripts/ab_to_cache.py (新建):
   - 复用 A/B 结果直接写 ai_cache · 绕开百炼预算验证 UI 端到端

A/B 实测 24/24 成功 · 12 条齐整率 100% · H1/H3/H7 100% · 达生产级。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 21:56:46 +08:00
Neo
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
Neo
b44096600d chore(cleanup): 清理历史会话遗留未跟踪产物 — gitignore 追加 + 文件归位
- .gitignore: 追加 .playwright-mcp/ 与 apps/miniprogram/.font_patch_tmp/ 两条忽略规则
- apps/miniprogram/scripts/: 新建目录, 迁入 TDesign BOM 修复脚本 inspect-wechat-font.ps1 及其检查报告
- 根目录 excel_analysis_report.txt / sheet_structure.txt 归位 tmp/, 修正 root-file 风险标签
- 审计记录 2026-04-20__legacy-untracked-cleanup-review.md, 含实际执行段与回滚路径
- audit_dashboard.md 由 gen_audit_dashboard.py 刷新至 130 条

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:48:27 +08:00
Neo
95dd1fa6b9 chore(audit): 修正审计文件命名 — 单下划线补为双下划线
2026-03-24_fix_cfg_skill_type_missing_records.md
  → 2026-03-24__fix_cfg_skill_type_missing_records.md

该文件源自 audit-gap-recovery 阶段 1 补追的 96 份 D 类孤本之一,原命名采用单
下划线分隔日期与 slug,与 gen_audit_dashboard.py 期望的双下划线格式不符而被
脚本忽略。补齐下划线后 dashboard 记录数从 128 升至 129,与主目录 md 文件
数一致。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:39:13 +08:00
Neo
ec8f7d4e03 chore(audit): 清理 changes/changes/ 嵌套误产物目录 — audit-gap-recovery 收尾
按 docs/specs/audit-gap-recovery/tasks.md 阶段 2/4 完成:

阶段 2(B 类内容漂移,1 份)
决策:保留主目录版 2026-04-06__v1-cleanup-ddl-consolidation.md。
两版仅差 1 行路径(第 128 行):
  - 主目录版:cd c:/NeoZQYY && python tools/db/gen_consolidated_ddl.py
  - 嵌套版:   cd c:/Project/NeoZQYY && ...
主目录版是 2026-04-06 审计当天原始写法(与 v1 整理 commit 779b2f6 同期),
忠于历史真相;嵌套版是开发机迁移后批量路径替换过的版本,舍弃。
差异过小,不单独备份。

阶段 4(删除嵌套目录)
- rm -rf docs/audit/changes/changes/(本地删除,目录本就被 .gitignore 屏蔽,
  无 git 历史需清理)
- .gitignore 移除 docs/audit/changes/changes/ 临时屏蔽规则(嵌套目录已不复存在)
- 刷新 docs/audit/audit_dashboard.md,当前 128 条记录
  (主目录 129 份 md 中有 1 份 2026-03-24_fix_cfg_skill_type_missing_records.md
   因单下划线命名异常被 dashboard 脚本忽略,后续可重命名)

验证
- ls docs/audit/changes/*.md | wc -l = 129(原 33 + D 补追 96 = 129 ✓)
- ls docs/audit/changes/changes/ 返回 "No such file"(✓)
- git log --oneline -- "docs/audit/changes/" 有本次补追 + 清理 commit(✓)

audit-gap-recovery PRD 至此全部 4 阶段执行完毕。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:38:11 +08:00
Neo
14a12342b5 chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。

按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。

涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
   召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
   DDL 基线合并 / Kiro 到 Claude Code 迁移

阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:35:42 +08:00
Neo
80bda9b991 chore(audit): 2026-04-20 历史批次预审 + 文档同步 + .gitignore 修正
- 新增 docs/audit/changes/2026-04-20__historical-batch-pre-audit.md
  157 文件分批盘点审计(7 条主线 + 10 项高/中风险 + 2 份迁移 SQL DDL 清单)
- 补追 docs/audit/changes/2026-04-15__meituan-settle-core-sync.md
  原审计产物因 .gitignore 屏蔽长期未入仓,本次一并追回
- 刷新 docs/audit/audit_dashboard.md(33 条审计记录)
- .gitignore 白名单放行 docs/audit/changes/*.md 与 audit_dashboard.md
  同时屏蔽 changes/changes/ 嵌套误产物目录
- 新增 docs/specs/audit-gap-recovery/tasks.md
  扫描嵌套目录发现 96 份 D 类孤本(从未入过 git history),
  生成独立 PRD 供单开任务清理与补追
- 文档同步(高风险项):
  - apps/backend/docs/API-REFERENCE.md (+69)
  - apps/miniprogram/README.md (+50)
  - apps/etl/connectors/feiqiu/docs/architecture/data_flow.md (+52/-2)
  - apps/etl/connectors/feiqiu/docs/architecture/system_overview.md (+5/-3)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:32:58 +08:00
Neo
2a7a5d68aa feat: 2026-04-15~04-20 累积变更基线 — 多主线合流
主线 1: rns1-customer-coach-api + 04-miniapp-core-business 后端实施
  - 新增 GET /xcx/coaches/{id}/banner 轻量接口
  - performance/records 加 coach_id 参数 + view_board_coach 权限分流
  - coach/customer/performance/board/task 服务层重构
  - fdw_queries 结算单粒度聚合 + consumption_summary 视图统一
  - task_generator 回访宽限 72h + UPSERT 替代策略 + Step 5 保底清理
  - recall_detector settle_type=3 双重限制 + 门店级 resolved

主线 2: 小程序权限分流 + 新增 coach-service-records 管理者视角业绩明细页
  - perf-progress 共享模块去重 task-list/coach-detail 动画逻辑
  - isScattered 散客标记端到端
  - foodDetail/phoneFull/creator* 字段透传

主线 3: P19 指数回测框架 Phase 1+2
  - 3 个指数表 stat_date 日快照模式
  - 新增 DWS_INDEX_BACKFILL / DWS_TASK_SIMULATION 工具任务
  - task_engine 升级 HTTP 实时 + 推演回测双模式

主线 4: Core 维度层启用
  - 新增 CORE_DIM_SYNC 任务(DWD → core 4 维度表)
  - 修复 app 视图空查询问题

主线 5: member_project_tag 改为 LAST_30_VISITS 消费次数窗口

主线 6: 2 个迁移 SQL 已执行(stat_date + member_project_tag 新窗口)
  - schema 基线与 DDL 快照同步

主线 7: 开发机路径迁移 C:\NeoZQYY → C:\Project\NeoZQYY(约 95% 改动量)

附带: 新建运维脚本(churned_customer_report / simulate_historical_tasks /
      backfill_index_snapshots)+ tools/task-analysis/ 任务分析工具

合计 157 文件。未包含中间产物(tmp/ .playwright-mcp/ inspect-* excel/sheet 分析 txt)。
审计记录见下一个 commit。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:32:07 +08:00
Neo
79d3c2e97e 开发机迁移 2026-04-10 06:24:13 +08:00
Neo
f65c1d038b chore: 审计记录 + 修复 repo_root.py 仓库根检测
- 审计记录:2026-04-06__v1-cleanup-ddl-consolidation.md
- 刷新审计一览表(125 条记录)
- 修复 repo_root.py:.kiro 已删除后改用 pyproject.toml + CLAUDE.md 检测

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 01:05:06 +08:00
Neo
4ab8822848 chore: 刷新 DDL 基线日期至 2026-04-06(结构无变化)
连库验证确认 DDL 文件与���据库现状完全同步,仅更新生成日期戳。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 00:44:18 +08:00
Neo
779b2f6d52 chore: v1 整理 — 清理历史文件、DDL 合并、文档归档
- 清理 1155 个已删除的历史文件(废弃 prompt_logs、tmp、旧 ops 脚本)
- export/ 数据文件从 git 移除(已在 .gitignore)
- demo-miniprogram 从 tmp/ 移入 apps/,添加 CLAUDE.md 注解
- DDL 合并:完整 schema 定义填充到 db/*/schemas/(从 docs/database/ddl/ 复制)
- 39 个 v1 迁移脚本归档到 db/_archived/migrations_v1_merged/
- 4 个迁移变更类 BD_Manual 文档归档到 docs/database/_archived/
- .gitignore 补充 .vite/ 和 apps/*.zip
- settings.json 添加 effortLevel 默认配置
- scripts/ops/ 新增运维脚本入库

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 00:39:27 +08:00
Neo
6f8f12314f feat: 累积功能变更 — 聊天集成、租户管理、小程序更新、ETL 增强、迁移脚本
包含多个会话的累积代码变更:
- backend: AI 聊天服务、触发器调度、认证增强、WebSocket、调度器最小间隔
- admin-web: ETL 状态页、任务管理、调度配置、登录优化
- miniprogram: 看板页面、聊天集成、UI 组件、导航更新
- etl: DWS 新任务(finance_area_daily/board_cache)、连接器增强
- tenant-admin: 项目初始化
- db: 19 个迁移脚本(etl_feiqiu 11 + zqyy_app 8)
- packages/shared: 枚举和工具函数更新
- tools: 数据库工具、报表生成、健康检查
- docs: PRD/架构/部署/合约文档更新

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 00:03:48 +08:00
Neo
70324d8542 chore: 文档与 IDE 配置整理
- .kiro/specs/ → docs/specs/(41 个历史需求 spec 迁移,移除 .config.kiro)
- CLAUDE.md 三层拆分:根文件精简 + apps/backend/CLAUDE.md + .claude/commands/
- 新增 /spec-close、/pre-change 两个工作流命令
- DDL 基线刷新(从测试库重新导出 11 个文件,dws 35→38 表,biz 18→21 表)
- BD_Manual → BD_manual 命名统一(48 个文件)
- 修复 3 处文档与数据库不一致(auth.users.status 默认值、scheduled_tasks 字段、RLS 视图数)
- 新增 BD_manual_public_rbac_tables.md(public schema 8 张 RBAC/工作流表)
- 合并 biz.trigger_jobs 文档(10→12 字段,归档独立文档)
- docs/database/README.md 索引更新

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 00:02:37 +08:00
Neo
beb88d5bea feat: chat integration, tenant admin spec, backend chat service, miniprogram updates, DEMO moved to tmp, XCX-TEST removed, migrations & docs 2026-03-20 09:02:10 +08:00
Neo
675301f38b feat: gift card breakdown - migrations, fdw queries, finance recharge task, board-finance page updates 2026-03-20 03:24:17 +08:00
Neo
79f9a0e1da feat: batch update - gift card breakdown spec, backend APIs, miniprogram pages, ETL finance recharge, docs & migrations 2026-03-20 01:43:48 +08:00
Neo
075caf067f 小程序迁移 静态页面完成!!! 2026-03-18 05:14:35 +08:00
Neo
72bb11b34f 1 2026-03-15 10:15:02 +08:00
Neo
6e20987d2f 微信小程序页面迁移校验之前 P5任务处理之前 2026-03-09 01:19:21 +08:00
Neo
263bf96035 微信小程序页面迁移校验之前 P5任务处理之前 2026-03-09 01:18:47 +08:00
Neo
b25308c3f4 feat: P1-P3 全栈集成 — 数据库基础 + DWS 扩展 + 小程序鉴权 + 工程化体系
## P1 数据库基础
- zqyy_app: 创建 auth/biz schema、FDW 连接 etl_feiqiu
- etl_feiqiu: 创建 app schema RLS 视图、商品库存预警表
- 清理 assistant_abolish 残留数据

## P2 ETL/DWS 扩展
- 新增 DWS 助教订单贡献度表 (dws.assistant_order_contribution)
- 新增 assistant_order_contribution_task 任务及 RLS 视图
- member_consumption 增加充值字段、assistant_daily 增加处罚字段
- 更新 ODS/DWD/DWS 任务文档及业务规则文档
- 更新 consistency_checker、flow_runner、task_registry 等核心模块

## P3 小程序鉴权系统
- 新增 xcx_auth 路由/schema(微信登录 + JWT)
- 新增 wechat/role/matching/application 服务层
- zqyy_app 鉴权表迁移 + 角色权限种子数据
- auth/dependencies.py 支持小程序 JWT 鉴权

## 文档与审计
- 新增 DOCUMENTATION-MAP 文档导航
- 新增 7 份 BD_Manual 数据库变更文档
- 更新 DDL 基线快照(etl_feiqiu 6 schema + zqyy_app auth)
- 新增全栈集成审计记录、部署检查清单更新
- 新增 BACKLOG 路线图、FDW→Core 迁移计划

## Kiro 工程化
- 新增 5 个 Spec(P1/P2/P3/全栈集成/核心业务)
- 新增审计自动化脚本(agent_on_stop/build_audit_context/compliance_prescan)
- 新增 6 个 Hook(合规检查/会话日志/提交审计等)
- 新增 doc-map steering 文件

## 运维与测试
- 新增 ops 脚本:迁移验证/API 健康检查/ETL 监控/集成报告
- 新增属性测试:test_dws_contribution / test_auth_system
- 清理过期 export 报告文件
- 更新 .gitignore 排除规则
2026-02-26 08:03:53 +08:00
Neo
fafc95e64c 在前后端开发联调前 的提交20260223 2026-02-23 23:02:20 +08:00
Neo
254ccb1e77 feat: TaskSelector v2 全链路展示 + 同步检查 + MCP Server + 服务器 Git 排除
- admin-web: TaskSelector 重构为按域+层全链路展示,新增同步检查功能
- admin-web: TaskConfig 动态加载 Flow/处理模式定义,DWD 表过滤内嵌域面板
- admin-web: App hydrate 完成前显示 loading,避免误跳 /login
- backend: 新增 /tasks/sync-check 对比后端与 ETL 真实注册表
- backend: 新增 /tasks/flows 返回 Flow 和处理模式定义
- apps/mcp-server: 新增 MCP Server 模块(百炼 AI PostgreSQL 只读查询)
- scripts/server: 新增 setup-server-git.py + server-exclude.txt
- docs: 更新 LAUNCH-CHECKLIST 添加 Git 排除配置步骤
- pyproject.toml: workspace members 新增 mcp-server
2026-02-19 10:31:16 +08:00
Neo
4eac07da47 在准备环境前提交次全部更改。 2026-02-19 08:35:13 +08:00
Neo
ded6dfb9d8 init: 项目初始提交 - NeoZQYY Monorepo 完整代码 2026-02-15 14:58:14 +08:00