ZL-Q
41ade24bcf
chore: record journal
2026-04-28 17:23:46 +08:00
ZL-Q
dd48d1d59d
chore: 更新主题、反馈页面和测试用例
...
- 更新 App 主题配置
- 优化反馈页面
- 更新认证和通知测试用例
2026-04-28 17:23:03 +08:00
ZL-Q
85023a668b
refactor(divination): 优化占卜界面和组件
...
- 更新占卜处理和结果页面
- 优化占卜共享组件
2026-04-28 17:22:47 +08:00
ZL-Q
295dbc09ab
feat(payment): 优化套餐配置和支付服务
...
- 简化套餐配置结构,删除冗余的 default.yaml 和 us.yaml
- 优化 Apple IAP 服务和验证逻辑
- 更新套餐数据模型和协议文档
- 添加支付相关测试用例
2026-04-28 17:21:14 +08:00
ZL-Q
a940f2ea47
feat(notification): 通知标题和正文支持多语言
...
- 通知静态配置支持 title/body i18n
- 前端通知列表和详情页展示本地化内容
- 新增数据库迁移脚本
- 更新通知协议文档
2026-04-28 17:20:17 +08:00
ZL-Q
b9617ae152
refactor(settings): 统一语言设置,合并 interface_language 和 ai_language
...
- 后端 Schema 将 interface_language 和 ai_language 合并为 language
- 前端设置界面只保留一个语言选项
- AI 回复语言统一使用 language 设置
- 更新协议文档
- 新增数据库迁移脚本
2026-04-28 17:19:47 +08:00
ZL-Q
940c67e642
feat(points): 实现积分流水列表功能
...
- 后端新增 GET /api/v1/points/ledger 接口
- 前端新增积分流水列表页面
- 积分中心添加「查看流水」入口
- 重命名 AccountDeleteScreen 为 AccountDataScreen
- 流水列表支持分页加载和空状态展示
2026-04-28 17:19:08 +08:00
ZL-Q
a83001de0d
feat(locale): 实现 App 启动时语言和时区自动设置
...
- 新增系统语言/时区读取工具函数
- SessionStore 扩展支持时区存储
- 启动流程自动检测并保存系统语言/时区
- 注册时传递语言/时区到后端
- 登录后从服务器同步语言/时区
2026-04-28 17:18:16 +08:00
ZL-Q
14752cdcfa
chore(task): archive 04-27-feat-ios-apple-pay
2026-04-28 17:17:40 +08:00
ZL-Q
c7a75a6445
chore(task): archive 04-28-refactor-unify-language
2026-04-28 17:17:39 +08:00
ZL-Q
8de03314fd
chore(task): archive 04-28-feat-locale-timezone-bootstrap
2026-04-28 17:17:39 +08:00
ZL-Q
9bc24fa0c4
chore(task): archive 04-28-feat-points-ledger
2026-04-28 17:17:38 +08:00
ZL-Q
87f92987b2
feat: 实现 iOS Apple Pay 内购支付功能
...
前端:
- 集成 in_app_purchase 插件,实现 IAP 支付流程
- 添加支付模块 (payments/) 处理产品获取、购买、验证
- 积分中心页面集成 Apple Pay 购买入口
- 设置页面重构: 关于/隐私/协议直接展示,删除 legal_center 子页面
- 修复欢迎引导页滚动检测阈值问题
- 修复解卦结果页 iOS 侧滑返回手势被阻止的问题
- 邀请码绑定按钮临时禁用(待后端实现)
后端:
- 新增 apple_iap_transactions 表记录交易
- 实现 Apple 服务器端验证 (App Store Server API)
- 支付成功后自动发放积分
- 支持 Sandbox/Production 环境切换
- 添加退款处理和交易状态机
协议:
- 更新积分流水协议,支持 purchase/refund 类型
- 新增 PAYMENT_* 错误码
2026-04-28 10:45:29 +08:00
qzl
b453ff7345
chore(trellis): add task tracking for ios apple pay feature
2026-04-27 11:01:20 +08:00
qzl
285bb91851
feat: enable local supabase and update llm catalog
...
- Enable supabase in docker-compose.yml for local development
- Update llm_catalog.yaml with deepseek-v4-flash configuration
2026-04-27 11:00:13 +08:00
qzl
926929a3cb
docs(trellis): update for cloud supabase migration
2026-04-27 10:04:29 +08:00
qzl
5325793203
fix: correct tests and type annotations for cloud supabase migration
2026-04-25 15:53:44 +08:00
qzl
08db431653
feat(legal): update legal documents and add zh_Hant support
2026-04-25 14:14:49 +08:00
qzl
2d46251220
chore(task): archive 04-17-feat-privacy-do-not-sell
2026-04-20 12:52:39 +08:00
qzl
5c4ba49ffc
chore: record journal
2026-04-20 12:52:35 +08:00
qzl
4a3fe85fc9
chore(task): archive 04-17-feat-user-feedback
2026-04-20 12:51:15 +08:00
qzl
ae7727a1c4
chore: record journal
2026-04-20 12:50:54 +08:00
qzl
6a2a9d2c87
feat(feedback): implement user feedback collection system with email reporting
...
Backend:
- Add user_feedback table with RLS policy
- Create feedback submission API (multipart/form-data)
- Implement xlsx report generation with embedded images
- Add scheduled email delivery via Feishu SMTP
- Create HTML email templates (daily_report, no_feedback)
Frontend:
- Add feedback screen with type selection and image picker
- Support anonymous submission via skipAuth flag
- Collect device info and app version
Protocol:
- Document feedback API contract and error codes
- Update http-error-codes.md with FEEDBACK_* codes
2026-04-20 12:49:54 +08:00
qzl
913ed26f8d
feat(privacy): add personalized ads toggle in settings
...
- Add PrivacySettings schema with can_sell field (default: false)
- Move privacy toggle to GeneralSettingsScreen with clear labeling
- Update l10n for zh/en/zh_hant with user-friendly copy
- Clean up redundant PrivacyNotificationSettingsScreen
- Update profile-protocol.md to reflect new privacy schema
- Fix basedpyright warnings in user.py
2026-04-17 13:11:09 +08:00
qzl
be30eb6eab
chore: record journal
2026-04-16 17:53:16 +08:00
qzl
c79c773d67
feat(notification): add target_mode enum constraint and merge register-notifications script
...
- Add NotificationTargetMode enum (new_users/exist_users/all_users/user_ids)
- Create Alembic migrations: drop duplicate indexes, add target_mode column
- Merge register-notifications.sh into dev-migrate.sh sync-notifications subcommand
- Shorten notification config path: static/notification/notifications -> static/notifications
- Update registration flow to dispatch notifications by target_mode
- Add is_first_registration to RegisterBonusResult for first-time user detection
- Remove dead code: link_published_notifications_to_user
- Update welcome_points.yaml to target new_users only
- Add 44 unit tests + 1 integration test, all passing
2026-04-16 17:50:57 +08:00
qzl
d91064835b
chore: record journal
2026-04-16 16:15:22 +08:00
qzl
d4919fe52a
chore(task): archive 04-16-starter-package-purchase-tracking
2026-04-16 16:14:51 +08:00
qzl
fd0df28461
Merge branch 'worktree/feat-starter-package-purchase-tracking' into dev
2026-04-16 16:13:20 +08:00
qzl
ff40ff9dd8
feat: 新人初始礼包购买追踪功能
...
- 数据库:添加 has_purchased_starter_pack 字段到 register_bonus_claims
- 后端:创建静态配置管理套餐信息,支持按国家/地区区分
- 后端:新增 GET /api/v1/points/packages API 返回可用套餐
- 后端:创建 utils/paths.py 统一路径管理
- 前端:动态获取套餐信息,移除硬编码
- 前端:添加 ProductCode 枚举约束,前后端类型安全
- 配置:Profile 默认国家改为 US(ISO 3166-1 alpha-2)
- 文档:更新协议文档说明新 API 和字段
2026-04-16 16:11:09 +08:00
qzl
443c0c80ae
fix: 修复后端代码违规并更新协议文档
...
- 修复 notifications 模块 datetime.now() 缺少时区问题
- 用 ApiProblemError 替换 BaseService 中的 HTTPException
- 更新协议文档:添加错误码、繁体字段、邀请相关协议
- 升级 Docker 镜像版本
2026-04-16 10:51:08 +08:00
qzl
aea514a9b5
chore: record journal
2026-04-16 10:15:17 +08:00
qzl
dcb955c6af
chore(task): archive 04-15-divination-tutorial-first-visit
2026-04-16 10:15:07 +08:00
qzl
69b34bd723
feat: 添加起卦教程首次访问追踪和Agent时间上下文
...
- 后端 ProfileSettingsV1 添加 DivinationTutorialSettings 字段
- 前端三个起卦页面添加首次访问检测,自动弹出教程
- 教程展示后更新 settings 标记,避免重复弹出
- 使用本地状态管理避免并发更新覆盖问题
- Agent 系统提示添加时间上下文信息
2026-04-15 18:56:41 +08:00
qzl
55eeab43df
feat(divination): 为解卦结果的断卦要点添加复制按钮
2026-04-15 18:23:01 +08:00
qzl
edafb4dc50
chore: record journal
2026-04-15 18:19:25 +08:00
qzl
0bb7d77a3f
chore(task): archive 04-15-session-deletion-anonymization
2026-04-15 18:19:20 +08:00
qzl
c2b726e7bd
feat(agent): session deletion anonymization for iOS compliance
...
Replace soft-delete with anonymize + hard-delete to meet iOS App Store
data retention requirements. Non-PII fields are preserved in
anonymous_session_snapshots for analytics.
- Add anonymous_session_snapshots table and ORM model
- Implement anonymizer to extract non-PII fields before deletion
- Remove points_ledger.biz_id FK constraint (snapshot-style reference)
- Preserve transaction history while allowing session deletion
- Add 14 unit tests + 1 integration test
2026-04-15 18:18:39 +08:00
qzl
a244eaa666
chore: record journal
2026-04-15 16:50:29 +08:00
qzl
3fd983dc5b
chore(task): archive 04-15-liuyao-algorithm-fix
2026-04-15 16:49:49 +08:00
qzl
be686810d9
docs: 添加trellis任务文档
2026-04-15 16:48:09 +08:00
qzl
9598d162dd
feat: 六爻算法修复 + prompt架构重构 + i18n输出规则
...
算法修复 (P0/P1):
- P0-1: 空亡判断改为仅从日柱计算(年月空亡标注但不断事)
- P0-2: 暗动判断重写为静爻+旺相+日冲三条件
- P1-1: 月破独立标注
- P1-2: 动不为空、旺不为空
- P1-3: 三合局判断
- P1-4: 反吟伏吟判断
- P1-5: 日辰十二长生
- P1-6: 回头生克判断
Prompt架构重构:
- 删除system_prompt中_build_env_section,不再泄露用户上下文到prompt
- 删除if is_chinese分支,_LANGUAGE_LABELS已覆盖全部语言映射
- 安全规则改为六爻专属约束,拒绝无关问题
- sign_level枚举值在所有语言版本中统一为简体中文(schema严格约束)
- _WORKER_ROLE_PLAYING始终为中文,不因ai_language切换
- _WORKER_OUTPUT_RULES按ai_language分zh-CN/zh-Hant/en三版本
- worker_rules.py独立文件管理多语言输出规则
- runner ai_language从user_context.settings.preferences提取传入prompt
清理死代码:
- 删除UserPreferences/RuntimePromptContext及辅助函数
- 删除runner中runtime_client_time参数链路
- 删除SystemAgentRuntimeConfig.extra_context
- 删除sections.py中env section marker
- 删除agent_prompt.py中AgentPromptRegistry死代码
安全规则:
- AGENTS.md添加Git Safety规则(禁止未经批准的破坏性git操作)
- opencode.json添加高危git命令审批配置
测试:
- 新增22个六爻算法单元测试(空亡/暗动/月破/三合局等)
- 重写7个prompt测试适配新签名
- 全部85个单元测试通过
2026-04-15 16:45:57 +08:00
qzl
c74e3f688c
fix: 修复 basedpyright 类型错误和语言设置同步问题
...
runner.py: 将 user_text 解构从 tuple 第二元素改为第一元素(str),
消除 str | list[dict[str,Any]] 与 Msg.content 的类型不兼容问题。
简化了始终为 true 的 user_blocks 条件分支。
repository.py: 将 result.rowcount 的 type: ignore 替换为基于
pyright: ignore[reportAttributeAccessIssue],消除 basedpyright 错误。
app.dart: 保存 profile 时同步 _locale 和 session store 中的语言标记。
2026-04-14 12:42:35 +08:00
qzl
55bac03eb0
fix: 修复历史卦象列表无法显示及六爻解卦提示词逻辑错误
...
后端 Pydantic schema 添加 Hant 繁体字段支持(guaNameHant,
targetGuaNameHant, spiritNameHant, relationNameHant),解决
DerivedDivinationData extra=forbid 拒绝 AI 输出的繁体字段导致
agent_output 解析失败、历史记录为空的问题。
六爻解卦提示词修复:增加静卦五行生克链分析、假破假空降权、
六冲中性判断、用神核对防捏造、空亡数据对照等硬约束。
前端 Dart model 同步添加 Hant 字段(反向兼容,缺省为空字符串)。
其他:硬币翻转动画修复、弹窗单按钮居中、起卦按钮布局调整、
繁体 l10n 清理、pre-commit 排除集成测试。
2026-04-14 12:37:19 +08:00
qzl
97976b20bf
perf: recover lost files (locale_selector.dart, terminology.py, app_zh_hant.arb)
...
These files were accidentally omitted during cherry-pick workflow.
They were present in 639ef12 but dropped when switching to git apply workflow.
2026-04-14 11:49:45 +08:00
qzl
dc66afb5a8
perf: reduce LLM input tokens by ~50% via prompt deduplication
...
- Remove JSON appendix from user_prompt (saves ~3000 chars, 85% reduction)
- Consolidate identity: remove English system_prompt identity, merge into agent_prompt Chinese identity
- Simplify system_prompt output rules: keep only Language Requirement, remove Answer Rules (duplicate with agent_prompt)
- Enhance follow-up context: include more divination_derived fields (changing_yaos, fushen, wu_xing, etc.)
- Fix bug: lowerName -> lower_name in user_prompt (Pydantic snake_case)
- Update tests to reflect new prompt structure
2026-04-14 11:18:59 +08:00
qzl
6bc9c88ce8
fix: 修复语言设置为简体中文而非繁体翻译
2026-04-13 16:14:28 +08:00
qzl
1e22f27de2
feat: integrate invite API and improve notification handling
...
- Add invite code display and binding functionality via API
- Fix notification unread count sync on auth state change
- Improve notification mark read with server state validation
- Add auth state listener to trigger notification refresh
- Add YaoCoinConverter for coin-to-yao type conversion
- Remove YaoLegend from divination screens (UI cleanup)
- Abbreviate relation labels in yao detail view
- Add re-register notice to account delete screen
- Update 'coins' terminology to 'points' in localization
- Fix backend points consumption to only run in CHAT mode
- Add HttpxAuthNoiseFilter to suppress auth endpoint logging
- Fix notification static_schema import path
- Add test coverage for notification bloc error handling
- Update AGENTS.md page header rules and image handling
- Delete deprecated run-dev.sh script
2026-04-13 14:52:22 +08:00
qzl
da947f9f08
chore: record journal
2026-04-13 12:46:37 +08:00
qzl
a2f010251d
chore: record journal
2026-04-13 12:04:36 +08:00