Merge branch 'yongxu-dev' into devlop

# Conflicts:
#	.cursor/agent/软件测试/evolution/索引.md   resolved by yongxu-dev version
#	.cursor/skills/testing/SKILL.md   resolved by yongxu-dev version
#	.gitignore   resolved by yongxu-dev version
#	miniprogram/app.js   resolved by yongxu-dev version
#	miniprogram/app.json   resolved by yongxu-dev version
#	miniprogram/pages/chapters/chapters.js   resolved by yongxu-dev version
#	miniprogram/pages/index/index.js   resolved by yongxu-dev version
#	miniprogram/pages/index/index.wxml   resolved by yongxu-dev version
#	miniprogram/pages/match/match.js   resolved by yongxu-dev version
#	miniprogram/pages/my/my.js   resolved by yongxu-dev version
#	miniprogram/pages/my/my.wxml   resolved by yongxu-dev version
#	miniprogram/pages/my/my.wxss   resolved by yongxu-dev version
#	miniprogram/pages/read/read.js   resolved by yongxu-dev version
#	miniprogram/pages/read/read.wxml   resolved by yongxu-dev version
#	miniprogram/pages/read/read.wxss   resolved by yongxu-dev version
#	miniprogram/pages/wallet/wallet.js   resolved by yongxu-dev version
#	miniprogram/pages/wallet/wallet.wxml   resolved by yongxu-dev version
#	miniprogram/pages/wallet/wallet.wxss   resolved by yongxu-dev version
#	miniprogram/utils/ruleEngine.js   resolved by yongxu-dev version
#	miniprogram/utils/trackClick.js   resolved by yongxu-dev version
#	soul-admin/dist/index.html   resolved by yongxu-dev version
#	soul-admin/src/components/RichEditor.tsx   resolved by yongxu-dev version
#	soul-admin/src/layouts/AdminLayout.tsx   resolved by yongxu-dev version
#	soul-admin/src/pages/api-docs/ApiDocsPage.tsx   resolved by yongxu-dev version
#	soul-admin/src/pages/content/ContentPage.tsx   resolved by yongxu-dev version
#	soul-admin/src/pages/settings/SettingsPage.tsx   resolved by yongxu-dev version
#	soul-admin/tsconfig.tsbuildinfo   resolved by yongxu-dev version
#	soul-api/.env.production   resolved by yongxu-dev version
#	soul-api/internal/database/database.go   resolved by yongxu-dev version
#	soul-api/internal/handler/balance.go   resolved by yongxu-dev version
#	soul-api/internal/handler/book.go   resolved by yongxu-dev version
#	soul-api/internal/handler/ckb_open.go   resolved by yongxu-dev version
#	soul-api/internal/handler/db.go   resolved by yongxu-dev version
#	soul-api/internal/handler/db_book.go   resolved by yongxu-dev version
#	soul-api/internal/handler/db_person.go   resolved by yongxu-dev version
#	soul-api/internal/handler/search.go   resolved by yongxu-dev version
#	soul-api/internal/handler/upload.go   resolved by yongxu-dev version
#	soul-api/internal/router/router.go   resolved by yongxu-dev version
#	soul-api/wechat/info.log   resolved by yongxu-dev version
#	开发文档/10、项目管理/运营与变更.md   resolved by yongxu-dev version
#	开发文档/1、需求/需求汇总.md   resolved by yongxu-dev version
This commit is contained in:
Alex-larget
2026-03-17 14:23:26 +08:00
231 changed files with 14492 additions and 6576 deletions

View File

@@ -0,0 +1,7 @@
# 产品经理 经验记录 - 2026-03-16
## new-soul 派对AI 与 Mycontent 定位差异会议new-soul 新需求与当前项目差异分析)
- **new-soul 派对AI**:内容运营侧 AI 助手服务于《一场soul的创业实验》的派对→录屏→剪辑→成片→分发→文章→小程序全链路
- **当前 Mycontent**:产品侧,面向创业者的社区/工具型小程序,核心是内容→会员→导师变现、存客宝对接、分销等
- **结论**:两者是同一业务的不同层面(运营 vs 产品),互补非替代

View File

@@ -0,0 +1,13 @@
# 产品经理 经验记录 - 2026-03-17
## 稳定版源码质量优化会议2026-03-17
- **验收标准**:优化后现有功能行为不变,三端联调通过
- **优先级**:高优(安全)→ 中优(可维护)→ 低优(性能/结构)
- **原则**:源码质量优化按安全→可维护→性能分批,用户无感知
---
## 会议收尾2026-03-17
- 10 项优化全部完成;测试流程与报告模板已定稿;开发文档已同步

View File

@@ -0,0 +1,33 @@
# 2026-03-14 - 内容排名算法修正(排名分公式)
## 问题 / 场景
- 管理端「内容排行」与小程序「精选推荐」共用 `computeArticleRankingSections`,原算法错误:
- 使用「原始数值 × 权重」:`hot = readCnt×readWeight + payCnt×payWeight + recencyScore×recencyWeight`
- `recencyScore` 为 01 的天数衰减,非排名分
- 管理端修改权重后,列表不刷新(只调了 loadList未调 loadRanking
## 解决方案
### 算法修正db_book.go computeSectionsWithHotScore
- **公式**:热度积分 = 阅读权重×阅读排名分 + 新度权重×新度排名分 + 付款权重×付款排名分(三权重之和须为 1
- **排名分规则**
- 阅读量前 20 名:第 1 名=20 分 … 第 20 名=1 分,其余 0 分
- 最近更新前 30 篇:第 1 名=30 分 … 第 30 名=1 分,其余 0 分
- 付款数前 20 名:第 1 名=20 分 … 第 20 名=1 分,其余 0 分
- **权重配置**:从 `system_config.article_ranking_weights` 读取 readWeight、recencyWeight、payWeight
- **手动覆盖**:若 `chapters.hot_score > 0`,则优先使用该值
### 与前端约定
- 管理端保存权重后需同时调用 `loadList()``loadRanking()`,并关闭弹窗,列表才能立即刷新。
## 代码位置
- `soul-api/internal/handler/db_book.go``computeSectionsWithHotScore``computeArticleRankingSections`
- 管理端 `ContentPage.tsx``handleSaveRankingWeights` 中 loadRanking + setShowRankingAlgorithmModal(false)
## 影响
- 管理端内容排行榜、小程序精选推荐(`/api/miniprogram/book/recommended`)均复用该算法,修正后两端同步生效。

View File

@@ -0,0 +1,17 @@
# 后端工程师 经验记录 - 2026-03-16
## ParseAutoLinkContent 必须输出 data-label
- TipTap Mention 仅从 `data-label` 解析显示名,缺则回退显示 `data-id`token
- 新建 mention span`<span data-type="mention" data-id="TOKEN" data-label="名字">@名字</span>`
- 已损坏内容span 内为 token用 token 查 persons 取真实名字补回 data-label
## 存客宝创建计划参数
- planType=1、sceneId=9、scenario=9、status=1
- 管理端添加、文章 @ 自动创建两处均已同步
## new-soul 派对AI 与 content_upload.py会议new-soul 新需求与当前项目差异分析)
- content_upload.py 直连 DB 与 soul-api 并存,需核对 chapters 表结构与字段一致性
- 中长期可规划将文章上传迁移到 soul-api admin/db 接口,统一数据入口

View File

@@ -0,0 +1,73 @@
# 后端 - 2026-03-17
## 代付 PayNotify 权益归属修复
### 问题
代付支付回调中,`buyerUserID` 由 openID 解析得到,即**代付人**。权益激活全书、VIP、章节、余额充值和分佣均用 `buyerUserID`,导致权益错误给到代付人,而非发起人。
### 修复
引入 `beneficiaryUserID`(权益归属人):
- **代付订单**`beneficiaryUserID = order.UserID`(发起人)
- **普通订单**`beneficiaryUserID = buyerUserID`(付款人)
权益激活、分佣、取消未支付订单等逻辑统一改用 `beneficiaryUserID`
### 经验
- 代付场景:`order.user_id` = 发起人,`payer_user_id` = 代付人;权益与分佣必须按 `order.user_id` 处理
- PayNotify 中 openID 解析得到的是实际付款人,代付时需以 order 的 user_id 为权益归属
---
## gift-pay detail 返回 initiatorUserId
- 供小程序区分发起人/好友,展示不同 UI
- 字段:`initiatorUserId`(发起人 user_id
---
## 新版管理端迁移 - 后端任务会议2026-03-17
- **router 补齐**:迁移前注册 5 个路由:`db.GET("/users/rfm")``db.GET("/users/journey-stats")``admin.GET("/shensheshou/query")``admin.POST("/shensheshou/enrich")``admin.POST("/shensheshou/ingest")`
- **待确认**/api/admin/settings 是否已支持 ossConfig若不支持需补充
---
## 稳定版源码质量优化会议2026-03-17
- **敏感配置**生产环境MODE=release强制校验缺敏感 env 则 Fatal
- **user/track 鉴权**:新增 GET /api/admin/user/track + AdminAuth原 /api/user/track 保留给小程序 POST 埋点
- **AdminWithdrawTest**:非 develop 环境返回 404 或拒绝
---
## 会议收尾2026-03-17
- 源码优化 10 项全部完成;开发环境测试 10 通过 2 跳过
---
## 性能优化与 Redis 缓存方案落地2026-03-17
### Redis 缓存
- **internal/cache**Get/Set/Del、GetString/SetStringRedis 不可用时回退 DB
- **已缓存**book/parts、hot、recommended、stats、config、章节 content
- **失效**InvalidateBookParts、InvalidateBookCache、InvalidateConfig、InvalidateChapterContent
### OSS 上传
- **internal/oss**LoadConfig、Upload、Delete失败回退本地
- 配置从 system_config.oss_config 读取
### /health
- 返回 database、redis 连接状态ok/disconnected/disabled
### 经验
- Redis 容灾:未配置或失败时回退 DB不阻塞业务
- 缓存 keysoul:{业务}:{标识}

View File

@@ -6,3 +6,6 @@
| 2026-03-05 | 文章详情@某人content 内嵌 @ 标记、miniprogram 添加好友接口 | [2026-03-05.md](./2026-03-05.md) |
| 2026-03-10 | 管理端迁移 Mycontent-temp接口边界不变overview 聚合接口可选但需降级 | [2026-03-10.md](./2026-03-10.md) |
| 2026-03-12 | persons token 字段与 DB 迁移CKBLead 用 token 兑换 ckb_api_key | [2026-03-12.md](./2026-03-12.md) |
| 2026-03-14 | 内容排名算法修正:排名分公式(阅读/新度/付款前 N 名),支持 hot_score 手动覆盖 | [2026-03-14.md](./2026-03-14.md) |
| 2026-03-16 | ParseAutoLinkContent data-label存客宝 create planType/sceneId/status | [2026-03-16.md](./2026-03-16.md) |
| 2026-03-17 | 代付 PayNotify beneficiaryUserID 权益归发起人gift-pay detail 返回 initiatorUserId | [2026-03-17.md](./2026-03-17.md) |

View File

@@ -0,0 +1,17 @@
# 2026-03-14 - 内容排名算法跨端复用约定
## 业务规则
- **热度积分公式**:阅读权重×阅读排名分 + 新度权重×新度排名分 + 付款权重×付款排名分(三权重之和须为 1
- **排名分规则**:阅读量前 20 名20~1 分)、最近更新前 30 篇30~1 分)、付款数前 20 名20~1 分)
## 跨端复用
- **管理端**`/api/db/book?action=ranking``computeArticleRankingSections`
- **小程序**`/api/miniprogram/book/recommended``computeArticleRankingSections`(取前 3 条)
- 两者共用同一套算法、权重配置(`article_ranking_weights`)、置顶配置(`pinned_section_ids`
## 约定
- 排名算法修改只需改 soul-api 一处,管理端与小程序自动同步。
- 管理端保存权重后必须调用 `loadRanking()` 刷新列表,否则用户看不到变化。

View File

@@ -0,0 +1,12 @@
# 团队 经验记录 - 2026-03-16
## TipTap Mention 显示规则
- **data-label 必填**TipTap Mention 的 label 仅从 `data-label` 解析,不解析 span 内文本
- 后端 ParseAutoLinkContent 输出 mention 时必须含 data-label否则管理端重开后显示 token 而非名字
## new-soul 派对AI 与 Mycontent 关系会议new-soul 新需求与当前项目差异分析)
- new-soul 派对AI魂AI9 技能 5 组:魂资/魂流/魂产/魂码/魂质
- 与 Mycontent 三端soul-api、soul-admin、miniprogram为同一业务不同层面运营侧 vs 产品侧
- 路径差异Mac vs Windows需在文档中说明

View File

@@ -0,0 +1,66 @@
# 团队 - 2026-03-17
## 代付美团式流程与权益归属约定
### 流程约定
1. **入口**:读页「找好友代付」→ 创建请求 → **跳转代付详情页**(不再弹窗)
2. **代付页**:发起人看到「分享给好友」,好友看到「帮他付款」
3. **后端**detail 返回 `initiatorUserId`,前端据此区分
### 权益与分佣约定
- 代付订单:`order.user_id` = 发起人,`payer_user_id` = 代付人
- 权益全书、VIP、章节、余额充值归属发起人
- 分佣按发起人的推荐关系计算
- PayNotify 中 openID 解析得到的是代付人,权益与分佣必须用 `order.user_id`
### 同时影响
- 小程序:代付详情页双态 UI、读页跳转
- 后端PayNotify beneficiaryUserID、detail initiatorUserId
---
## 新版管理端迁移到稳定版会议2026-03-17
### 决议
- **内容管理**:以稳定版为主,不采纳新版
- **新版独有**API 文档 Tab、api-docs 独立页、OSS 配置、编辑时手机号禁用、鉴权逻辑 → **全部吸纳**
- **后端**:迁移前补 routerusers/rfm、journey-stats、shensheshou 共 5 个)
### 影响角色
- 管理端开发工程师:主导迁移
- 后端开发router 补齐、ossConfig 确认
- 测试人员:迁移后验收
---
## 稳定版源码质量优化会议2026-03-17
- **原则**:增量修复、不改功能逻辑;高优安全项优先,中优可维护项次之,低优可后续迭代
- **影响角色**:后端、管理端、小程序、测试
---
## 会议收尾2026-03-17
- 源码优化 10 项全部完成;功能测试流程定稿;开发环境测试 10 通过 2 跳过
---
## 性能优化与 Redis 缓存方案落地2026-03-17
### 架构约定
- **Redis 容灾**:不可用时回退 DB不阻塞业务
- **缓存 key**soul:{业务}:{标识}
- **OSS 上传**:优先 OSS失败回退本地
### 影响角色
- 后端开发cache、oss 包;/health 增强
- 管理端开发工程师OSS 配置后上传自动优先 OSS
- 测试人员test_upload.py、/health 验证、部署后回归缓存接口

View File

@@ -7,3 +7,6 @@
| 2026-03-05 | 分支冲突后各端完整性自查流程 | [2026-03-05.md](./2026-03-05.md) |
| 2026-03-10 | 管理端迁移 Mycontent-temp菜单/布局新规范基线与入口收敛规则 | [2026-03-10.md](./2026-03-10.md) |
| 2026-03-12 | 密钥/token 设计:关联小程序 key、@ 人物 token不暴露真实密钥、服务端兑换 | [2026-03-12.md](./2026-03-12.md) |
| 2026-03-14 | 内容排名算法跨端复用:管理端内容排行与小程序精选推荐共用 computeArticleRankingSections | [2026-03-14.md](./2026-03-14.md) |
| 2026-03-16 | TipTap Mention 需 data-label否则显示 token | [2026-03-16.md](./2026-03-16.md) |
| 2026-03-17 | 代付美团式流程与权益归属约定:读页→代付页→分享;权益/分佣归发起人 | [2026-03-17.md](./2026-03-17.md) |

View File

@@ -0,0 +1,40 @@
# 阅读页文本长按选中复制
> 问题→解决闭环,已升级 miniprogram-dev SKILL
---
## 问题
小程序阅读页正文长按时无法选中、复制文本。
---
## 解决方案
使用 `text` 组件的 **`user-select`** 属性(基础库 2.12.1+,官方推荐;`selectable` 已废弃):
```html
<text user-select>{{seg.text}}</text>
```
---
## 实施范围read.wxml
- 章节标题:`<text class="chapter-title" user-select>`
- 正文片段text / mention / linkTag 均加 `user-select`
- 预览段落:`<text user-select>{{item}}</text>`(原为 view 内直接 `{{item}}`,需用 text 包裹)
---
## 备选方案
- **selectable**:已废弃但多数环境仍可用,若 `user-select` 导致布局异常inline-block 换行)可回退
- **wx.setClipboardData + bindlongpress**iOS 原生选中失效时,可做长按整段复制兜底
---
## Skill 升级
已写入 miniprogram-dev SKILL §10 文本可选与复制。

View File

@@ -0,0 +1,90 @@
# 联网吸收:微信小程序最新开发规则与 API2025-03
> 来源微信开放文档、基础库更新日志、Skyline 文档、隐私合规指南等
---
## 一、基础库版本与更新节奏
- **当前最新**v3.14.22026-01-22v3.14.3 灰度中
- **建议**:在 `app.json` 中设置 `"useExtendedLib": { "weui": true }` 或指定 `libVersion`,关注灰度版本说明
- **兼容**:使用 `wx.canIUse('api.xxx')` 做能力检测,避免在低版本报错
---
## 二、新增 / 重要 API基础库 3.14 系列)
| API | 用途 | 基础库 |
|-----|------|--------|
| `wx.rewriteRoute` | 路由重写 | 3.14+ |
| `wx.openOfficialAccountProfile` | 打开公众号 | 3.14+ |
| `wx.openOfficialAccountChat` | 跳转公众号会话 | 3.14+ |
| `wx.openInquiriesTopic` | 跳转问一问话题 | 3.14.0 |
| `wx.loadBuiltInFontFace` | 加载微信内置字体 | 3.14+ |
| `wx.onUserOffTranslation` | 监听用户关闭翻译 | 3.14.3 灰度 |
**其他能力**
- 鼠标右键点击事件支持PC 端)
- 图片分享朋友圈
- 半屏小程序 `openEmbeddedMiniProgram` 上限提升到 100
- TCPSocket 支持 `TCP_NODELAY`
---
## 三、Skyline 渲染引擎(可选升级)
- **定位**:新一代渲染引擎,以性能为首要目标,仍用 WXML/WXSS
- **配置**:页面级 `page.json``"renderer": "skyline"`
- **性能**:启动耗时降约 20%,跳页耗时降约 50%;长列表 `scroll-view` 仅渲染屏内节点
- **注意**CSS 特性精简,只保留更现代的集合;鸿蒙 OS 已灰度支持
- **Soul 项目**:当前为 WebView 渲染,若需性能优化可逐步按页面接入 Skyline
---
## 四、隐私合规2025 重要变更)
### 4.1 核心变化:从集中授权改为按需授权
- **旧**:首次启动一次性请求所有权限
- **新**:必须在用户**实际触发相关功能时**才发起对应授权请求
- **影响**:需拆分授权逻辑到具体业务场景,不能集中在 `app.onLaunch`
### 4.2 必须完成的步骤
1. **后台配置**:在小程序管理后台填写《小程序用户隐私保护指引》,声明处理的用户信息类型及用途
2. **查询与展示**`wx.getPrivacySetting` 查询授权状态,`wx.openPrivacyContract` 打开隐私协议
3. **获取同意**:使用 `<button open-type="agreePrivacyAuthorization">` 获取用户明示同意,用户点击后微信同步状态,开发者才可调用已声明的隐私接口
### 4.3 敏感权限
- 通讯录、位置、摄像头、麦克风、相册等**不会默认开启**
- 需用户明确同意后才可调用
- 需为「用户拒绝」设计降级方案
---
## 五、网络请求wx.request
- **官方**`wx.request` 仍为主流,仅支持回调,不支持原生 Promise
- **Soul 项目**:已用 `app.request` 封装,支持 Promise、统一 baseUrl、鉴权、错误处理符合规范
- **第三方**:若需更丰富能力(拦截器、重试等),可考虑 wechat-http、mini-quest 等
---
## 六、与 Soul 项目 SKILL 的衔接
| 联网吸收内容 | Soul miniprogram-dev SKILL 对应 |
|-------------|--------------------------------|
| 隐私按需授权 | 登录、手机号、推荐码等涉及隐私的接口,应在用户触发时再请求,避免启动时集中授权 |
| Skyline 可选 | 当前 SKILL 未强制 Skyline性能敏感页面可单独配置 `renderer: skyline` |
| 新 API | 路由重写、公众号跳转等按需使用,调用前用 `wx.canIUse` 检测 |
| 基础库版本 | 建议在项目文档中注明最低支持版本,便于兼容性排查 |
---
## 七、建议动作
1. **隐私合规**:检查 `app.js` 及登录/手机号/推荐码流程,确保按需授权,不在启动时集中请求
2. **文档**:在 README 或开发文档中注明基础库最低版本(如 2.19.0 或 3.0.0
3. **能力检测**:新增依赖新 API 的功能时,使用 `wx.canIUse` 做降级
4. **Skyline**:阅读页、章节列表等长列表页面可评估 Skyline 接入收益

View File

@@ -0,0 +1,18 @@
# 2026-03-14 - 我的页设置隐藏与资料引导场景梳理
## 1. 设置入口隐藏
- **需求**:我的页「设置」菜单项隐藏
- **实现**`my.wxml` 中设置菜单项加 `wx:if="{{false}}"`
- **说明**:设置页仍存在,用户可通过推广页「去设置」等入口进入(如绑定微信号用于提现)
## 2. 资料修改引导场景(何时引导用户修改资料)
| 场景 | 位置 | 触发条件 | 行为 |
|------|------|----------|------|
| 登录后 | app.js `_ensureProfileCompletedAfterLogin` | 昵称空/默认/头像空 | Toast「请先完善头像和昵称」→ 跳转 profile-edit |
| 阅读页 @某人 | read.js `_doMentionAddFriend` | 已登录但无手机/微信号 | 弹窗「完善资料」→ 确认跳转 profile-edit |
| 找伙伴页 | match.js `ensureContactInfo` | 已登录但无手机/微信号 | 页面内弹窗填写联系方式(不跳转) |
| 首页链接卡若 | index.js | 无手机/微信号 | 弹窗输入手机号(不跳转 profile-edit |
- **判断依据**`_isProfileIncomplete(user)` 检查 nickname、avatar手机/微信号需单独拉 `user/profile` 接口判断。

View File

@@ -0,0 +1,34 @@
# 2026-03-16 编辑资料页分享名片
## 问题/场景
编辑资料页转发给朋友、分享到朋友圈时,需做特殊处理:直接变成「分享名片」,而非普通页面分享。分享标题、封面需体现用户身份与名片信息。
## 解决方案
1. **分享标题**`昵称+为您分享名片`(如「少年梦想家为您分享名片」)
2. **分享封面**Canvas 绘制名片图5:4 比例,符合微信分享图规范)
- 布局:左头像(圆形)+ 右昵称 +「个人名片」副标题
- 分隔线
- 四栏信息:地区 | MBTI、行业 | 职位(标签灰、数值白,统一色值)
3. **分享路径**:转发/朋友圈均指向 `member-detail?id=userId`,好友打开即见名片详情
4. **朋友圈重定向**:分享带 `id` 时,`profile-edit``onLoad` 检测到 `options.id``redirectTo``member-detail`
## 技术要点
- **预生成**:资料加载完成后、头像更新后调用 `generateShareCard()`,将 `shareCardPath` 存入 data
- **Canvas**:隐藏 canvas 500×400`wx.createCanvasContext` + `ctx.draw(true)` + `wx.canvasToTempFilePath`
- **头像下载**:网络头像需 `wx.downloadFile`,域名须配置 downloadFile 合法域名;失败时用昵称首字母占位
- **文本截断**`ctx.measureText` 超宽时截断加「…」
## 适用角色
小程序开发工程师
## 升级 Skill
miniprogram-dev SKILL 新增 §10 分享名片
## new-soul 派对AI 与小程序会议new-soul 新需求与当前项目差异分析)
- 派对AI 的小程序站管理与当前 miniprogram 一致,仅涉及发布流程,不改变小程序功能

View File

@@ -0,0 +1,15 @@
# 小程序开发工程师 经验记录 - 2026-03-17
## 稳定版源码质量优化会议2026-03-17
- **payment.js**确认无引用可删除read.js 直接调 /api/miniprogram/pay
- **goToMatch**my.js 重复定义,删除一个
- **备份文件**:删除 read.js.backup、referral.wxss.backup
- **appId 等**:优先从 config 的 mpConfig 读取,保留兜底
- **totalSections**:从 book/stats 或 all-chapters 动态获取,保留 62 兜底
---
## 会议收尾2026-03-17
- 源码优化 5 项全部完成;开发环境测试通过

View File

@@ -2,9 +2,14 @@
| 日期 | 摘要 | 文件 |
|------|------|------|
| 2025-03-14 | 联网吸收:基础库 3.14、Skyline、隐私按需授权、新 API | [2025-03-14-联网吸收小程序最新开发规则与API.md](./2025-03-14-联网吸收小程序最新开发规则与API.md) |
| 2025-03-14 | 阅读页文本长按选中复制text 组件 user-select | [2025-03-14-文本长按复制.md](./2025-03-14-文本长按复制.md) |
| 2026-02-28 | input 边距口诀、match 资源对接弹窗修正 | [2026-02-28.md](./2026-02-28.md) |
| 2026-03-03 | 我的页面卡片区边距优化16rpx 推荐值 | [2026-03-03.md](./2026-03-03.md) |
| 2026-03-05 | 分支合并后核心流程自测app.json 拆行orders 接口确认 | [2026-03-05.md](./2026-03-05.md) |
| 2026-03-05 | 文章详情@某人高亮与一键加好友(解析@、调添加好友接口) | [2026-03-05.md](./2026-03-05.md) |
| 2026-03-10 | 管理端迁移 Mycontent-temp关注内容产物格式与阅读页解析兼容回归 | [2026-03-10.md](./2026-03-10.md) |
| 2026-03-12 | 链接标签 mpKey、@ 人物 token 兑换contentParser、onLinkTagTap、onMentionTap | [2026-03-12.md](./2026-03-12.md) |
| 2026-03-14 | 我的页设置入口隐藏;资料修改引导场景梳理(登录后、@某人、找伙伴、链接卡若) | [2026-03-14.md](./2026-03-14.md) |
| 2026-03-16 | 编辑资料页分享名片:转发/朋友圈特殊处理Canvas 绘制封面,标题「昵称+为您分享名片」 | [2026-03-16.md](./2026-03-16.md) |
| 2026-03-17 | 代付美团式:读页→代付页→分享;详情页双态(发起人/好友);目录 loading、最新新增 5 条折叠 | [2026-03-17.md](./2026-03-17.md) |

View File

@@ -0,0 +1,91 @@
# 用户交互习惯分析(基于 agent-transcripts 抽样)
> 乘风发起,读取 97 个 agent 会话记录,抽样分析后总结。用于优化 agent 响应策略与 Skill 设计。
---
## 一、角色与触发词使用习惯
| 触发词/角色 | 使用场景 | 期望动作 |
|-------------|----------|----------|
| **乘风** | 开会、同步进度、协调开发、总结经验 | 老板分身主持,协调各角色 |
| **开会** | 需求评审、方案讨论、进度同步 | 按 team-meeting SKILL 主持多角色会议 |
| **吸收经验** | 功能完成、讨论完毕 | 经验入库 + Skill 升级 + 同步需求文档 |
| **橙子 / 小橙** | 记录、同步文档、会议收尾 | 文档同步、纪要生成、索引更新 |
| **加个需求xxx** | 新增功能 | 产品经理三端分析 → 功能规划 → 指派 |
| **变更完成 / 检查一下** | 代码改完 | 过 change-checklist 三端关联检查 |
---
## 二、表达方式偏好
### 1. 直接点名角色
- 如:「小程序工程师」「后端工程师」「管理端工程师」「测试工程师」
- 期望agent 按该角色 Skill 执行,不混用其他端逻辑
### 2. @ 文件引用
- 如:@new-soul、@scripts@soul-admin、@开发文档
- 期望agent 读取并理解引用内容,作为上下文执行任务
### 3. 任务导向、先分析再实现
- 典型句式:「帮我对比」「整理出迁移清单」「分析有没有逻辑盲点」「从经营角度看看」
- 期望:先出方案/文档,再写代码;不直接动手改
### 4. 图片辅助反馈
- 经常截图 + 文字描述问题(如「@匹配有问题」「弹窗太大」「封面图要长这样」)
- 期望agent 结合截图理解 UI/交互问题,给出针对性修改
---
## 三、工作流程偏好
| 阶段 | 习惯 | 说明 |
|------|------|------|
| **需求** | 以需求驱动、以界面定需求 | 不凭空加功能,需求与实现可追溯 |
| **分析** | 先对比、出方案、写文档 | 迁移清单、逻辑盲点、技术协调、经营建议 |
| **实现** | 小步迭代、可读性优先 | 函数单一职责,避免深层嵌套 |
| **验收** | 测试 → 吸收经验 → 同步文档 | 闭环经验入库、Skill 升级、需求汇总更新 |
| **会议** | 开会 → 各角色发言 → 决议 → 橙子总结 | 会议结束触发收尾流程 |
---
## 四、沟通风格
- **简洁**:如「帮我处理」「帮我测试一下」「修复」
- **追问细节**:如「界面有什么变化」「有逻辑盲点吗」「从经营角度看看」
- **强调合理性**:如「产品经理要根据实际情况判断,不能随意增加管理列表」
- **确认后执行**:如「先帮我对比」「整理出迁移清单」——先出结果再决定是否实现
---
## 五、技术偏好Soul 项目)
- **三端隔离**:小程序只调 `/api/miniprogram/*`,管理端只调 `/api/admin/*``/api/db/*`
- **存客宝对接**Person、LinkTag、ckb_api_key、planType、sceneId、status 等参数约定
- **测试规范**scripts/test 目录miniapp / web / process 分类pytest + requests运行前显式提示测试环境
---
## 六、反馈与确认习惯
| 用户表达 | 触发动作 |
|----------|----------|
| 「搞定了」「可以了」「解决了」 | 经验自动收集(老板分身-索引.mdc |
| 「会议结束」「散会」 | 助理橙子会议收尾 |
| 「吸收经验」「同步到需求文档」 | 经验入库 + 需求汇总更新 |
| 「不要记录」「不用沉淀」 | 不触发经验入库 |
---
## 七、Agent 响应建议
1. **先理解再动手**用户说「帮我xxx」时先确认范围、出方案再写代码
2. **按角色执行**:用户点名角色时,必须 Read 对应 Skill按规范执行
3. **文档先行**:迁移、重构类任务,先出清单/分析文档,再实现
4. **闭环收尾**:功能完成时主动提示「可以说吸收经验同步到文档」
5. **图片理解**:用户发截图时,结合截图分析问题,不只看文字
---
**来源**agent-transcripts 抽样(约 15 个会话),结合经验清单与项目索引交叉验证。
**适用**:开发助理、老板分身、各角色 agent 的响应策略优化。

View File

@@ -0,0 +1,9 @@
# 开发助理 经验记录 - 2026-03-17
## 会议收尾2026-03-17
- **纪要**2026-03-17_会议收尾-源码优化完成与测试流程定稿.md
- **经验入库**:各角色 evolution 已追加收尾经验
- **项目索引**:后端、管理端、小程序、测试、助理橙子已更新
- **会议索引**README.md 已追加
- **开发文档**:运营与变更第十七部分已追加

View File

@@ -4,3 +4,4 @@
| 日期 | 摘要 | 文件 |
|------|------|------|
| 2026-03-16 | 用户交互习惯分析(基于 agent-transcripts | 2026-03-16-交互习惯分析.md |

View File

@@ -40,6 +40,18 @@
| 2026-03-12 | 后端、团队 | 业务规则 | api-dev SKILL、team three-tier-arch | 9.9 买断统一由后端折叠为 hasFullBook/has_full_book小程序和管理端只认该信号可通过用户资料开关 OR 订单实现赠送全书 |
| 2026-03-13 | 小程序、后端、团队 | 业务规则 | api-dev SKILL、miniprogram-dev SKILL、three-tier-arch SKILL | 文章详情预览统一由后端按 50% 截取,小程序按 accessState 使用预览/全文,外层 content 与 data.content 始终一致以避免泄露全文 |
| 2025-03-14 | 小程序 | 最佳实践 | miniprogram-dev SKILL §10 | 阅读页文本长按选中复制text 组件 user-selectselectable 已废弃),正文/标题/预览均加 user-select |
| 2026-03-14 | 后端、管理端、小程序、团队 | 业务规则/bug 修复 | - | 内容排名算法修正(排名分公式);保存权重后 loadRanking 刷新;我的页设置隐藏;资料引导场景梳理 |
| 2026-03-16 | 软件测试 | 知识沉淀 | testing SKILL | scripts 目录与测试关联:本地启动.sh 联调必备、飞书脚本非回归范围、soul-api/scripts 与根 scripts 区分 |
| 2026-03-16 | 软件测试 | 目录约定 | testing SKILL §5 | scripts/testminiapp 小程序接口测试、web 管理端测试;测试工程师在此编写用例 |
| 2026-03-16 | 软件测试 | 目录约定 | testing SKILL §5 | scripts/test/process流程测试跨端多接口串联下单→支付→分润等 |
| 2026-03-16 | 软件测试 | 配置约定 | testing SKILL | pytest 架构、配置从 soul-api/.env* 读取、SOUL_TEST_ENV 必显;运行前报告头部显示测试环境,避免误测正式库 |
| 2026-03-16 | 小程序 | 最佳实践 | miniprogram-dev SKILL §10 | 编辑资料页分享名片:转发/朋友圈特殊处理Canvas 绘制 5:4 封面,标题「昵称+为您分享名片」,路径 member-detail |
| 2026-03-16 | 开发助理 | 交互习惯分析 | - | 乘风读取 agent-transcripts 抽样分析角色触发词、表达方式、工作流程、沟通风格、技术偏好、Agent 响应建议 |
| 2026-03-17 | 小程序、后端、团队 | 业务规则/bug 修复 | - | 代付美团式读页→代付页→分享PayNotify beneficiaryUserID 权益归发起人detail 返回 initiatorUserId目录 loading、最新新增 5 条折叠 |
| 2026-03-17 | 小程序 | 业务规则 | - | 代付统一到代付页gift=1&ref 打开 read 时 redirectTo 代付页,禁止在阅读页代付 |
| 2026-03-17 | 软件测试 | 流程定稿 | testing SKILL | 功能测试流程:成功 ☑、失败列问题、最终报告scripts/test/功能测试流程.md、测试报告-环境与用例清单.md |
| 2026-03-17 | 后端、团队 | 架构/最佳实践 | api-dev SKILL | Redis 缓存parts/hot/recommended/stats/config/章节 content容灾回退 DBOSS 上传;/health 返回 database/redis 状态 |
---
@@ -50,4 +62,4 @@
---
**最后更新**2026-03-13文章预览规则统一、小程序与后端对齐
**最后更新**2026-03-17会议收尾源码优化完成与测试流程定稿

View File

@@ -21,9 +21,12 @@ Soul 创业派对产品定位:面向创业者的社区/工具型小程序。
| 2026-03-05 | 文章详情@某人加好友方案讨论:验收标准、添加好友接口 path 待确认 | 待续 |
| 2026-03-10 | 会议:管理端迁移 Mycontent-temp新菜单/布局与入口收敛验收口径确定 | 待续 |
| 2026-03-11 | 以界面定需求文档建立;需求基准以《以界面定需求》为准 | 已完成 |
| 2026-03-16 | 乘风发起例行开发进度同步 | 已完成 |
| 2026-03-16 | 会议new-soul 新需求与当前项目差异分析 | 已完成 |
| 2026-03-17 | 会议:稳定版源码质量优化;验收标准功能不变、三端联调通过 | 待续 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-03-11
**最后更新**2026-03-17

View File

@@ -17,9 +17,16 @@
| 2026-02-26 | 项目索引初始化经验库五角色目录结构搭建SKILL 补充角色映射表与跨端写入规则 | 已完成 |
| 2026-02-28 | .cursor 按 cursor标准模板 重构agent 目录、config、evolution.py、meeting | 已完成 |
| 2026-03-11 | 会议收尾:开发团队对齐业务逻辑与以界面定需求;纪要生成、各角色经验入库、项目索引与会议索引更新 | 已完成 |
| 2026-03-16 | 乘风发起例行开发进度同步 | 已完成 |
| 2026-03-16 | 乘风读取 agent-transcripts 分析交互习惯,总结经验并吸收 | 已完成 |
| 2026-03-17 | 吸收需求代付美团式流程、PayNotify 权益归属、目录 loading、最新新增 5 条折叠 → 开发文档与 agent | 已完成 |
| 2026-03-17 | 乘风吸收经验与交互:迁移完成度与待办清单、运营与变更第十二部分 | 已完成 |
| 2026-03-17 | 吸收新需求代付统一到代付页gift=1&ref redirectTo→ 需求汇总、找朋友代付流程、运营与变更 | 已完成 |
| 2026-03-17 | 会议收尾:新版管理端迁移到稳定版实施方案确认;纪要、各角色经验入库、项目索引更新 | 已完成 |
| 2026-03-17 | 会议收尾:源码优化完成与测试流程定稿;纪要、经验入库、开发文档同步 | 已完成 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-03-11
**最后更新**2026-03-17会议收尾源码优化完成与测试流程定稿

View File

@@ -27,9 +27,18 @@ soul-apiGo + Gin + GORM + MySQL提供三组路由`/api/miniprogram/*`
| 2026-03-12 | persons 表新增 token 字段add-persons-token.sqlCKBLead 用 token 兑换 ckb_api_key | 已完成 |
| 2026-03-12 | 9.9 买断后端开关方案users 增手动 fullbook 开关purchase-status/check-purchased 折叠为统一 hasFullBook/has_full_book小程序免改即支持赠送全书 | 已完成 |
| 2026-03-13 | 文章详情预览统一与安全previewContent 改为截取正文前 50%findChapterAndRespond 保证外层 content 与 data.content 一致,未授权只返回预览 | 已完成 |
| 2026-03-14 | 内容排名算法修正computeSectionsWithHotScore 改为排名分公式(阅读/新度/付款前 N 名得分),支持手动 hot_score 覆盖 | 已完成 |
| 2026-03-16 | 乘风发起例行开发进度同步 | 已完成 |
| 2026-03-16 | ParseAutoLinkContent 添加 data-label存客宝 create planType=1 sceneId=9 status=1 | 已完成 |
| 2026-03-16 | 会议new-soul 新需求与当前项目差异分析content_upload.py 与 chapters 一致性待核对 | 待续 |
| 2026-03-17 | 代付 PayNotify 权益归属修复beneficiaryUserID代付=发起人gift-pay detail 返回 initiatorUserId | 已完成 |
| 2026-03-17 | 会议新版管理端迁移router 补齐 users/rfm、journey-stats、shensheshou 共 5 个;确认 ossConfig | 进行中 |
| 2026-03-17 | 会议:稳定版源码质量优化;敏感配置生产强制校验、新增 /api/admin/user/track、AdminWithdrawTest 环境限制 | 已完成 |
| 2026-03-17 | 会议收尾:源码优化 10 项全部完成;开发环境测试 10 通过 2 跳过 | 已完成 |
| 2026-03-17 | 性能优化会议Redis 缓存接入parts/hot/recommended/stats/config/章节 content、容灾回退 DBOSS 上传接入;/health 返回 database/redis 状态 | 已完成 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-03-13
**最后更新**2026-03-17

View File

@@ -24,9 +24,14 @@ Soul 创业派对全项目架构与约定路由隔离miniprogram/admin/db
| 2026-03-12 | 密钥/token 设计:关联小程序 key、@ 人物 token不暴露真实密钥、服务端兑换 | 已完成 |
| 2026-03-12 | 9.9 买断团队约定:后端统一输出 hasFullBook/has_full_book小程序和管理端只认该信号支持通过用户资料开关 OR 订单赠送全书且不影响 VIP 逻辑 | 已完成 |
| 2026-03-13 | 文章详情预览规则统一:预览长度由后端统一按 50% 计算,小程序按 accessState 切换预览/全文,接口约定 content 与 data.content 始终一致 | 已完成 |
| 2026-03-14 | 内容排名算法跨端复用:管理端内容排行与小程序精选推荐共用 computeArticleRankingSections排名分公式、权重配置统一 | 已完成 |
| 2026-03-16 | 乘风发起例行开发进度同步 | 已完成 |
| 2026-03-16 | TipTap Mention 需 data-label 规则;链接人与事与存客宝对接优化会议收尾 | 已完成 |
| 2026-03-17 | 代付美团式流程与权益归属约定:读页→代付页→分享;权益/分佣归发起人PayNotify beneficiaryUserID | 已完成 |
| 2026-03-17 | 性能优化与 Redis 缓存方案落地Redis 容灾回退 DB、OSS 上传容灾;/health 返回 database/redis 状态 | 已完成 |
> **格式说明**:每次架构级讨论后在此追加一行,日期格式 YYYY-MM-DD
---
**最后更新**2026-03-13
**最后更新**2026-03-17

View File

@@ -29,9 +29,19 @@
| 2026-03-11 | 以界面定需求:小程序界面清单纳入《以界面定需求》;展示以用户资料为准,与现有实现一致 | 已完成 |
| 2026-03-12 | 链接标签 mpKey 兑换 appId@ 人物 token 兑换 ckb_api_keycontentParser、onLinkTagTap、onMentionTap | 已完成 |
| 2026-03-13 | 阅读页文章预览与付费解锁对齐:预览长度改由后端统一计算,前端按 accessState 显示预览/全文,避免 data.content 泄露全文 | 已完成 |
| 2025-03-14 | 阅读页文本长按选中复制text 组件 user-select已升级 SKILL §10 | 已完成 |
| 2026-03-14 | 我的页设置入口隐藏wx:if资料修改引导场景梳理登录后、@某人、找伙伴、链接卡若) | 已完成 |
| 2026-03-16 | 乘风发起例行开发进度同步 | 已完成 |
| 2026-03-16 | 编辑资料页分享名片:转发/朋友圈改为分享名片Canvas 封面(头像+昵称+四栏信息),路径 member-detail | 已完成 |
| 2026-03-16 | 会议new-soul 新需求与当前项目差异分析派对AI 小程序站管理与当前一致 | 已完成 |
| 2026-03-17 | 代付美团式:读页→创建请求→跳转代付详情页;详情页双态(发起人分享/好友帮他付款);目录 loading、首页最新新增 5 条折叠 | 已完成 |
| 2026-03-17 | 代付统一到代付页gift=1&ref 打开 read 时 redirectTo 代付页,禁止在阅读页代付 | 已完成 |
| 2026-03-17 | 代付页营销:章节标题+20%内容预览;我的代付列表点击进详情;页面协调 | 已完成 |
| 2026-03-17 | 会议:稳定版源码质量优化;删除 payment.js、goToMatch 重复、备份文件config 读取、totalSections 动态化 | 已完成 |
| 2026-03-17 | 会议收尾:源码优化 5 项全部完成;开发环境测试通过 | 已完成 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-03-13
**最后更新**2026-03-17

View File

@@ -20,7 +20,17 @@
| 2026-03-05 | 分支冲突后功能完整性分析会议:制定「分支合并后回归清单」 | 待续 |
| 2026-03-05 | 文章详情@某人加好友方案讨论@ 展示与添加好友用例、联调与回归 | 待续 |
| 2026-03-10 | 会议:管理端迁移 Mycontent-temp回归重点为菜单一致性、隐藏路由可达性、鉴权跳转 | 待续 |
| 2026-03-16 | 乘风发起例行开发进度同步 | 已完成 |
| 2026-03-16 | scripts 目录知识吸收:本地启动、飞书脚本、联调环境准备 | 已完成 |
| 2026-03-16 | scripts/test 测试用例目录约定miniapp 小程序接口、web 管理端 | 已完成 |
| 2026-03-16 | scripts/test/process 流程测试目录:跨端业务流程 | 已完成 |
| 2026-03-16 | pytest 架构、配置从项目读取、运行前显示测试环境 | 已完成 |
| 2026-03-16 | 文章 @某人 自动创建存客宝:用例编写、执行、报告;归档规则 | 已完成 |
| 2026-03-16 | 会议new-soul 新需求与当前项目差异分析引入派对AI 时回归文章上传/飞书推送/小程序展示 | 已完成 |
| 2026-03-17 | 会议:稳定版源码质量优化;每项小回归、全部完成后完整三端联调 | 待续 |
| 2026-03-17 | 会议收尾:功能测试流程定稿、测试报告模板、开发环境 10 通过 2 跳过 | 已完成 |
| 2026-03-17 | 性能优化会议test_upload.py 6 用例;/health 可验证 database/redis部署后回归缓存接口 | 已完成 |
---
**最后更新**2026-03-10
**最后更新**2026-03-17

View File

@@ -8,6 +8,13 @@
管理端React + Vite + Tailwind主要功能用户管理、订单管理、提现审核、VIP 管理、内容/章节管理、配置项管理、数据统计。调用 `/api/admin/*``/api/db/*` 接口JWT Bearer 鉴权。
### 项目路径定义
| 版本 | 路径 | 说明 |
|------|------|------|
| **稳定版(主用)** | `soul-admin/` | 根目录,线上部署 |
| **新版(参考)** | `new-soul/soul-admin/` | 迁移时对照,含 ApiDocsPage 完整版、OSS region 等 |
---
## 开发进度
@@ -24,9 +31,21 @@
| 2026-03-10 | Toast 通知系统落地:创建 utils/toast.ts纯原生全系统 18 文件约 90 处 alert 全部替换为 toast.success/error/info | 已完成 |
| 2026-03-11 | 以界面定需求:管理端界面清单纳入《以界面定需求》,作为验收基准 | 已完成 |
| 2026-03-12 | ContentPage TypeScript 严格类型修复;关联小程序 key、@ 人物 token 设计(链接标签存 key、PersonItem.id=token | 已完成 |
| 2026-03-14 | 排名算法权重保存后刷新handleSaveRankingWeights 成功后 loadRanking + 关闭弹窗,列表立即更新 | 已完成 |
| 2026-03-16 | 乘风发起例行开发进度同步 | 已完成 |
| 2026-03-16 | 链接人与事table 布局、planId/apiKey 列、复制图标、删除 Dialog 弹窗 | 已完成 |
| 2026-03-16 | 会议new-soul 新需求与当前项目差异分析派对AI 不新增管理端需求 | 已完成 |
| 2026-03-17 | 会议:新版管理端迁移到稳定版实施方案确认;新版独有全部吸纳,内容管理以稳定版为主 | 已完成 |
| 2026-03-17 | 吸收新版管理端定义new-soul/soul-admin迁移 ApiDocsPage 完整版、OSS region、鉴权失败 clearAdminToken | 已完成 |
| 2026-03-17 | 修复 DistributionPage Order.description用户余额人工调整后端 adjust API + 用户详情入口);代付列表页(后端 gift-pay-requests + 推广中心 Tab | 已完成 |
| 2026-03-17 | 会议稳定版源码质量优化UserDetailModal 改 /api/admin/user/track、RichEditor HTML 转义 | 已完成 |
| 2026-03-17 | 会议收尾:源码优化已落地;开发环境测试通过 | 已完成 |
| 2026-03-17 | 性能优化会议OSS 配置后上传自动优先 OSS失败回退本地无需前端改动 | 已完成 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-03-12
**最后更新**2026-03-17
> soul-admin 构建仍有 DistributionPage Order.description 类型错误(与本次迁移无关),待修复。

View File

@@ -0,0 +1,17 @@
# 2026-03-14 - 内容排行权重保存后刷新
## 问题 / 场景
- 管理端「排名算法」弹窗修改权重并保存后,内容排行榜列表和排序不更新。
- 原因:`handleSaveRankingWeights` 成功时只调用了 `loadList()`(章节树),未调用 `loadRanking()`(内容排行榜)。
## 解决方案
- 保存成功后:
1. `setShowRankingAlgorithmModal(false)` 关闭弹窗
2. `loadList()` 刷新章节树(含 hotScore
3. `loadRanking()` 刷新内容排行榜
## 代码位置
- `soul-admin/src/pages/content/ContentPage.tsx``handleSaveRankingWeights`

View File

@@ -0,0 +1,16 @@
# 管理端开发工程师 经验记录 - 2026-03-16
## 链接人与事列表优化
- **table 布局**:列表改用 `<table>` 替代 flex列头与数据对齐
- **新增列**planId、apiKey
- **apiKey 复制**:列前增加复制图标,点击复制到剪贴板并 toast 提示
- **删除确认**:用 Dialog 弹窗替代 confirm(),二次确认文案清晰
## 删除弹窗尺寸
- max-w-md、p-4、gap-3避免弹窗过大
## new-soul 派对AI 与管理端会议new-soul 新需求与当前项目差异分析)
- 派对AI 不新增管理端需求,管理端以当前项目为准

View File

@@ -0,0 +1,19 @@
# 管理端开发工程师 经验记录 - 2026-03-17
## 稳定版源码质量优化会议2026-03-17
- **UserDetailModal**:改为调用 `/api/admin/user/track`(后端新增后同步改)
- **RichEditor**@mention 弹窗对 `item.name``item.label` 做 HTML 转义,防 XSS不改 @mention 行为
---
## 会议收尾2026-03-17
- 源码优化已落地;开发环境测试通过
---
## 性能优化会议2026-03-17
- **OSS 上传**:系统设置保存 OSS 配置后,上传接口自动优先 OSS失败回退本地
- 无需前端改动,后端 upload handler 已支持

View File

@@ -3,6 +3,8 @@
| 日期 | 摘要 | 文件 |
|------|------|------|
| 2026-03-12 | ContentPage TypeScript 严格类型修复;关联小程序 key、@ 人物 token 设计 | [2026-03-12.md](./2026-03-12.md) |
| 2026-03-14 | 排名算法权重保存后 loadRanking 刷新、关闭弹窗 | [2026-03-14.md](./2026-03-14.md) |
| 2026-03-05 | 分支合并后全功能自测404/异常接口记录 | [2026-03-05.md](./2026-03-05.md) |
| 2026-03-05 | 文章详情@某人:编辑页插入 @用户、保存约定 content 格式 | [2026-03-05.md](./2026-03-05.md) |
| 2026-03-10 | 管理端迁移 Mycontent-temp 菜单/布局主导航收敛、Settings Tab 承载 author/admin | [2026-03-10.md](./2026-03-10.md) |
| 2026-03-16 | 链接人与事table 布局、planId/apiKey 列、复制图标、删除 Dialog 弹窗 | [2026-03-16.md](./2026-03-16.md) |

View File

@@ -0,0 +1,103 @@
# 软件测试 经验记录 - 2026-03-16
## scripts 目录与测试关联
测试工程师需了解项目根目录 `scripts/` 下的辅助脚本,以便在联调、回归、环境准备时正确使用。
---
### 1. 本地启动脚本(联调必备)
| 脚本 | 用途 | 测试关联 |
|------|------|----------|
| `本地启动.sh` | 一键启动 soul-api8080+ soul-admin5174 | **三端联调前**:先执行此脚本,确保后端与管理端在本地运行;小程序需配置本地 API 地址 |
**用法**`./scripts/本地启动.sh``bash scripts/本地启动.sh`
**前置**Mac/Linux 环境soul-api 需能连接数据库;首次会编译 `soul-api-mac`
**验证**:访问 http://localhost:5174默认账号 admin / admin123
---
### 2. 飞书相关脚本(非核心业务,可了解)
| 脚本/目录 | 用途 | 测试关联 |
|-----------|------|----------|
| `feishu_export/` | 书稿导出 md供飞书知识库同步 | 与 Soul 三端业务无直接关系,回归可不覆盖 |
| `sync_book_to_feishu_export.py` | 从书稿目录导出 md 到 feishu_export | 同上 |
| `feishu_wiki_upload.py` | 上传全书到飞书知识库 | 同上 |
| `send_chapter_poster_to_feishu.py` | 生成章节海报并推送到飞书群 | 若海报含小程序码,可顺带验证二维码可访问性 |
---
### 3. Git 推送脚本
| 脚本 | 用途 | 测试关联 |
|------|------|----------|
| `gitea_push_once.sh` | 首次推送到 Gitea 仓库 | 与功能测试无关,部署/发布流程用 |
---
### 4. 测试工程师使用建议
- **联调前**:优先使用 `本地启动.sh` 启动后端与管理端,再测小程序、管理端功能
- **回归范围**scripts 内飞书、Gitea 脚本不纳入三端功能回归清单
- **环境依赖**`本地启动.sh` 依赖 Go 编译、pnpm、数据库可连测试环境需提前确认
---
### 5. 测试用例目录 `scripts/test/`(测试工程师主战场)
| 子目录 | 用途 | 对应端 |
|--------|------|--------|
| **miniapp/** | 小程序接口测试 | miniprogramAPI/api/miniprogram/* |
| **web/** | 管理端测试 | soul-adminAPI/api/admin/*、/api/db/* |
| **process/** | 流程测试 | 跨端,多接口串联 |
**约定**测试工程师在此编写与维护测试用例miniapp 放小程序接口、web 放管理端、process 放跨端业务流程。
**环境配置**必须明确指定测试环境SOUL_TEST_ENV=local|souldev|soulapi 或 SOUL_API_BASE运行前会打印「测试环境: xxx」横幅避免误测正式库。配置可来自 soul-api/.env* 或 scripts/test/.env.test。
---
### 6. pytest + requests 架构与配置约定
| 文件 | 说明 |
|------|------|
| config.py | 从项目 soul-api/.env* 或 .env.test 读取SOUL_TEST_ENV / SOUL_API_BASE |
| conftest.py | base_url、admin_token、miniapp_tokenpytest_report_header 显示环境横幅 |
| util.py | admin_headers、miniapp_headers |
| requirements-test.txt | pytest、requests |
**配置优先级**SOUL_TEST_ENV > SOUL_API_BASE > .env.test > soul-api/.env* > 默认 local。
**运行前必看**pytest 报告头部会显示「测试环境: 本地/测试/正式 (URL)」,确认无误后再执行。
---
### 7. 测试用例归档与复用规则
| 场景 | 归档目录 | 示例 |
|------|----------|------|
| 管理端 + 后端混合 | process/ | 文章 @某人 自动创建 Person + 存客宝 |
| 仅小程序接口 | miniapp/ | 登录、VIP、阅读 |
| 仅管理端/后端 | web/ | 鉴权、CRUD |
**需求变更**:用例随需求更新;无变更时直接复用。
---
### 8. 与 soul-api/scripts 的区别
| 位置 | 内容 | 测试关联 |
|------|------|----------|
| `scripts/`(项目根) | 本地启动、飞书同步、Gitea 推送、**test/** | 见上文 |
| `scripts/test/` | **测试用例**miniapp、web、processpytest 架构 | 测试工程师在此写用例 |
| `soul-api/scripts/` | SQL 迁移、Python 脚本等 | 数据库迁移、后端运维;测试时若涉及表结构变更,需关注对应 SQL |
---
### 9. 示例:文章 @某人 自动创建2026-03-16
- **用例**`scripts/test/process/test_article_mention_ckb_flow.py`
- **报告**`scripts/test/process/2026-03-16-文章@某人自动创建-测试报告.md`
- **结论**:后端逻辑正确,会调用存客宝创建计划;存客宝 API 返回 400 导致失败,需排查 CKB 配置或 deviceGroups 空值

View File

@@ -0,0 +1,7 @@
# 软件测试 经验记录 - 2026-03-16
## new-soul 派对AI 与测试关注点会议new-soul 新需求与当前项目差异分析)
- 引入派对AI 流程时需回归:文章上传、飞书推送、小程序展示
- 关注 content_upload.py 与 soul-api 数据流一致性,避免双写冲突
- 环境差异派对AI 为 Mac 路径,当前为 Windows需确认是否同一代码库不同环境

View File

@@ -0,0 +1,31 @@
# 软件测试 经验记录 - 2026-03-17
## 新版管理端迁移验收(会议:实施方案确认)
- **验收清单**:按《新版管理端迁移到稳定版-需求评估》§七
- **回归范围**:提现、分销、找伙伴、导师、设置等
- **风险**:合并时避免误覆盖稳定版独有逻辑,建议 diff 逐模块核对
- **三端联调**:管理端 ↔ soul-api 重点验证;用户规则、订单、余额展示
---
## 稳定版源码质量优化会议2026-03-17
- **回归重点**:支付流程、管理端用户详情行为轨迹、我的页找伙伴/推广/搜索、首页目录搜索
- **策略**:每项优化完成后小回归,全部完成后完整三端联调
---
## 会议收尾2026-03-17
- **功能测试流程定稿**`scripts/test/功能测试流程.md` — 成功 ☑️、失败列问题、最终报告
- **测试报告模板**`scripts/test/测试报告-环境与用例清单.md` — 环境、用例、结果记录
- **开发环境测试**10 通过、2 跳过、0 失败
---
## 性能优化会议2026-03-17
- **test_upload.py**6 个用例(上传成功、鉴权、校验、删除)
- **/health**:可验证 database、redis 连接状态
- **部署后回归**parts、hot、config、章节阅读等缓存接口

View File

@@ -2,7 +2,11 @@
| 日期 | 摘要 | 文件 |
|------|------|------|
| 2026-03-15 | **全站深度测试42个问题**管理端20+页面截图测试、35个API端点、25个小程序页面代码审查、25张数据库表严重11/高13/中12/低6沉淀安全测试/API测试/小程序测试/数据库测试方法论 | [2026-03-15-全站深度测试42问题.md](./2026-03-15-全站深度测试42问题.md) |
| 2026-03-10 | 管理端迁移 Mycontent-temp菜单一致性、隐藏路由可达性、鉴权与跳转回归 | [2026-03-10.md](./2026-03-10.md) |
| 2026-03-05 | 分支合并后回归清单制定;三端联调验证 | [2026-03-05.md](./2026-03-05.md) |
| 2026-03-05 | 文章详情@某人@ 展示与添加好友用例、联调与回归点 | [2026-03-05.md](./2026-03-05.md) |
| 2026-03-10 | 管理端迁移 Mycontent-temp菜单一致性、隐藏路由可达性、鉴权与跳转回归 | [2026-03-10.md](./2026-03-10.md) |
| 2026-03-16 | scripts 目录与测试关联:本地启动、飞书脚本、联调前环境准备 | [2026-03-16-scripts目录与测试关联.md](./2026-03-16-scripts目录与测试关联.md) |
| 2026-03-16 | scripts/test 测试用例目录miniapp 小程序接口、web 管理端 | [2026-03-16-scripts目录与测试关联.md](./2026-03-16-scripts目录与测试关联.md) |
| 2026-03-16 | scripts/test/process 流程测试:跨端多接口串联 | [2026-03-16-scripts目录与测试关联.md](./2026-03-16-scripts目录与测试关联.md) |
| 2026-03-16 | pytest 架构、配置从项目读取、运行前显示测试环境 | [2026-03-16-scripts目录与测试关联.md](./2026-03-16-scripts目录与测试关联.md) |
| 2026-03-16 | 测试用例归档规则混合→process、纯端→miniapp/web需求变更时更新 | [2026-03-16-scripts目录与测试关联.md](./2026-03-16-scripts目录与测试关联.md) |