Pine
000e3b5cb7
feat(hall): 任务/岗位编辑与审核接口
...
- 任务编辑(发布者或运营端,非运营编辑后重新进审核)
- 岗位编辑/审核/上下架(运营端 published 上架)
- JobRepository.update 支持字段白名单更新
2026-09-13 11:14:20 +08:00
Pine
ef57e51ef0
refactor(db): 统一引擎为进程级单例,同一 URL 只一个连接池
...
此前同一 DATABASE_URL 存在 3 个独立 engine(db 主 engine、
repositories._shared_engine、park._ASYNC_ENGINE),各自 20+20 池,
理论连接上限 120,池间不互济,仍有满载风险。
- _shared_engine:URL==config.DATABASE_URL 时直接复用 db 模块级 engine
- park/tenants._get_session:同样复用主 engine
- 收敛后同一 URL 进程内仅一个池(上限 40),连接数可控、池可互济
2026-09-10 22:52:19 +08:00
Pine
396f98c9c5
fix(db): 修复生产连接池耗尽(QueuePool 5/10 超时)
...
根因:生产经公网穿透(腾讯云→阿里云NPS→本地MySQL)访问数据库,
默认池 5+10=15 且无 pool_recycle,穿透断链后半死连接长期占用池,
并发一高即 30s 超时(TimeoutError)。
- 主 engine:pool_size=20, max_overflow=20, pool_recycle=1800(30min),
pool_timeout=30, 保留 pool_pre_ping
- make_async_engine(共享引擎/测试/park):MySQL 场景同样配置
2026-09-10 22:40:03 +08:00
Pine
052fb589ca
fix: 金额/算力/信用额度列 int→bigint,修复充值 Out of range 500(compute_quota 等 43 列)+ alembic 0077
2026-09-10 14:48:09 +08:00
Pine
23e17560f6
feat(agent-gate): 智能体互通编排层——authorize_call 三层权限(L1管理员/L2同企业/L3临时授权)+MQTT invoke 派发+agent-events 内部接口+agent-grants CRUD+幂等迁移SQL
2026-09-10 01:40:38 +08:00
Pine
91db9d1a70
feat: 微信分享图独立配置 + 默认问卷开关 + 发布方/管理员权限拆分
...
- 迁移 0074: events/content_items 加 share_img_timeline(朋友圈1:1)/share_img_message(会话5:4)
- 迁移 0075: events 加 show_default_question(默认问卷「最想解决的问题」admin可控)
- 迁移 0076: events 加 publishers_json(发布方手机号绑定,可编辑活动+审核报名)
- 权限拆分: _can_edit_event(发布方+创建者+运营,不含管理员)/ _can_review_booking(发布方+管理员+创建者+运营)
- 审核报名相关端点改用 _can_review_booking;活动编辑用 _can_edit_event
- event_out 输出 canEdit/canReview/publishers;create/update 接收 publishers
- 我管理的活动包含发布方+管理员命中
2026-09-09 21:52:37 +08:00
Pine
d5b322dc22
feat:报名
2026-09-09 14:23:26 +08:00
Pine
ffb7833a78
fix: 桌面版本排序忽略预发布后缀,beta.2 与 beta.1 排序平局导致下载页/更新源永远选旧版
...
- _version_key 原只解析主版本号,0.0.1-beta.1 与 0.0.1-beta.2 排序键同为 (0,0,1)
- publishable() 稳定排序保住先插入的 beta.1 → candidates[0] 恒为旧版
- 修复:纳入 PEP 440 预发布后缀(dev<alpha<beta<rc<正式版),同主版本时 pre-release 数字越大越新
- 影响面:/desktop-installers/latest.json(下载页)、/desktop-updates/latest.json(更新源)、admin 版本列表排序
2026-09-09 08:51:24 +08:00
Pine
11a9ad0105
fix: 云超服待修复清单 #1/#3 + 园区成员公司列表 + main 修复
...
- #1 站内消息:新增 GET /opc/messages/unread-count(红点角标)、POST /opc/messages/read(批量/全部已读),MessageRepository 补 unread_count/mark_read
- #3 发布活动 500:events 表补 created_at 列(models.Event + alembic 0072 迁移,旧库需执行 alembic upgrade head)
- rbac_admin 园区成员接口补充所属公司列表 companies(含 is_admin)
- main.py 修复 root() 语法错误,APP_NAME 更新为云南省超级个体服务平台
- 补充 nginx ssl 证书(opc.pinesound.cn)
2026-09-09 04:50:08 +08:00
Pine
a7100a2a4d
feat: 数据库备份+平台配置初始化(证书类型/信用规则/等级/徽章/市场分类)
2026-09-08 17:59:22 +08:00
Pine
b56831eb46
feat(rbac): 生态/OPC/培训 RBAC 路由与市场服务更新
2026-09-08 00:10:33 +08:00
Pine
ff234f7071
feat(sms): 迁移 PineSound 阿里云短信+Redis缓存+真实随机数;强制MySQL禁用SQLite;连接池取消请求shield修复
2026-09-08 00:10:16 +08:00
Pine
1cd26e174e
feat: 企业认领/企业入驻申请/团队 身份链路
...
- company_claim_requests:认领园区入驻企业(仅搜索);admin 认领仅当企业无管理员;
审核人:admin→园区管理员,member→有企业管理员则企业管理员否则园区管理员;
证明资料(姓名/身份证/手机号)仅存证
- company_apply_requests:已有企业加入平台;park_entered 园区管理员审,
independent 运营方审;通过后建 ParkCompany 并设提交人为管理员
- teams/team_members:团队即建即用;支持升级为企业(复用企业入驻申请)
- 审核权限:园区管理员=ParkTenant.operator_user_id;企业管理员=is_admin;运营方=operator
- 新表由启动时 create_all 幂等创建
2026-09-07 16:15:35 +08:00
Pine
e831fdd34e
feat: 内容审核体系(0070)— 违规内容库/举报表/IP采集/统一审核服务/审核API
...
- 迁移0070:content_moderation_records(违规库,快照+发布者+IP+原因+处置人)、
content_reports(举报队列);各内容表加 ip 列,dm_messages 加 hidden,
community_comments/ratings 加 status,users 加 profile_hidden/original_nickname
- moderation_service:hide/restore/delete(物理删除留档)/list/archive/report/
handle_report/scan + 申诉通知;用户资料隐藏自动脱敏昵称
- rbac_moderation:/admin/moderation/{type} 列表、hide/restore/delete、
violations 违规库、reports 举报处理、scan 巡查;/content/report 用户举报入口
- IP 采集:任务/岗位/服务/社区帖子/评论/私信/评价/主页提交创建端点写入发布者 IP
- 前台可见性:社区评论/私信查询过滤 hidden
2026-09-07 15:07:43 +08:00
Pine
cdcc50a1c6
feat: 个人主页流量/点赞/打招呼
...
- 新增 user_page_views/user_page_likes/user_page_greets 三表
- UserPageSocialRepository:访问去重计数/一人一赞可取消/打招呼/近7日趋势
- rbac_pages 新增 POST /pages/{uid}/view|like|greet 与 GET /pages/me/social/stats
- get_user_page 返回 social 互动数据(viewCount/likeCount/greetCount/likedByMe)
2026-09-07 12:28:35 +08:00
Pine
c8870d5b3b
算力余额体系闭环:企业分配/个人充值分离记账+退出返还
...
- users 新增 compute_personal_balance(分):个人充值/企业转入个人账本,
与 company_members.compute_balance(企业分配)彻底分离
- relay 转发引擎后按实际用量记账(deduct_usage_post):
先扣企业分配余额(折扣低→高)、不足扣个人余额,写 compute_usage_records;
流式 SSE 透传时解析 usage chunk 记账,JWT 登录态调用生效、PAT 调用不重复记账
- 个人充值到账(pay/service)与 企业↔个人互转 同步更新个人账本
- 成员退出企业(leave)与管理员移出成员(remove_company_member):
仅返还企业分配剩余(member.compute_balance)至企业余额,同步扣减引擎 quota,
绝不触碰个人充值余额
- GET /compute/user/balance 个人余额改读独立账本(不再引擎倒推)
- 迁移 0067;存量个人充值/互转净额已回填
2026-09-07 12:19:50 +08:00
Pine
12f92e2453
feat: 桌面端安装包列(0066迁移)+算力定价增强+企业/支付相关更新
2026-09-07 10:14:23 +08:00
Pine
9e2b2ad183
fix: 修复OpcCertApplyRequest前向引用未导入导致openapi 500; content_items.summary加长为Text
2026-09-06 18:18:22 +08:00
Pine
4dedb43d7f
算力多级折扣与企业余额体系 - 服务端核心改造
...
数据模型:
- 新增 tenant_discounts(运营端载体折扣)
- 新增 tenant_user_discounts(载体端账号折扣)
- 新增 compute_recharges(算力充值记录)
- 新增 compute_balance_allocations(余额分配记录)
- 新增 compute_usage_records(算力使用记录)
- 扩展 park_tenants(default_company_discount, default_user_discount)
- 扩展 park_companies(compute_balance, compute_balance_used)
- 扩展 company_members(role, compute_balance, compute_balance_used, left_at, left_reason)
核心服务:
- compute_pricing_service.py:四级折扣价格计算、余额扣费、企业余额管理
API接口(/api/compute):
- 运营端:载体折扣管理、标准价管理
- 载体端:企业折扣设置、账号折扣设置、默认折扣设置
- 企业端:余额充值、成员余额分配/回收、充值/分配记录
- 个人端:我的余额、使用记录、退出企业
- 内部:价格查询、算力扣费
数据库迁移:0064_compute_discount_balance.py
2026-09-06 17:59:56 +08:00
Pine
e03f2c5fb8
重构:认证体系规范,新增prerequisite前置认证字段
...
- CertificationType 模型新增 prerequisite 字段
- Repository _to_dict 新增 prerequisite 字段
- 重写 init_cert_types.py 初始化脚本,规范认证体系
- 个人实名认证改为 L1→L2→L3 递进关系
- 高级认证增加更多认证信息(手持身份证、人脸识别、手机号、银行卡四要素等)
- 学历认证、职业资格认证、收款认证为独立认证类型
- 企业认证保持递进关系:基础→高级→信用
- 初始化脚本执行成功:新增4个,更新5个认证类型
2026-09-06 11:30:39 +08:00
Pine
0fd1307d57
全线加入Redis缓存:1)统一Redis配置支持PINEAGENTS_REDIS_*前缀;2)增强cache.py:JSON序列化/缓存装饰器/批量删除/分布式锁/全局单例+连接池;3)大厅任务列表缓存8秒(key含用户ID+筛选条件);4)大厅总览缓存30秒;5)人才/服务/岗位列表缓存20秒;6)用户档案_actor_profile缓存30秒(can_accept核心依赖);7)认证类型列表缓存5分钟;8)应用启动时连接Redis,失败自动降级无缓存
2026-09-05 14:33:38 +08:00
Pine
9b1df88bf0
任务资格要求:最低信用分/要求勋章/要求认证(0061),can_accept 校验,发布端点接收
2026-09-05 11:33:37 +08:00
Pine
e131bba599
任务流程按模式适配:新增 assigned(指派/邀约待确认)/signed(签约托管) 状态 + accept-invite/sign 端点 + 按模式时间线 + 超时释放
2026-09-05 11:18:18 +08:00
Pine
6d0385ef88
task claim 表单承载:0058 迁移修复(TEXT 去 server_default) + register/grab 申请表单落库 + claims 返回 form
2026-09-05 11:08:55 +08:00
Pine
3061ceb2d8
实时通知体系后端:NotificationService 三通道(落库+MQTT+SSE)、迁移0057、通知接口增强(分页/分类/单条已读/未读计数/公告)、SSE /notify/events 鉴权流,事件接入任务/接单/认证/信用/培训/服务/点赞/评论/运营审核
2026-09-05 10:37:14 +08:00
Pine
1a614cb409
任务完整详情:detail 放开终态权限、聚合时间线/交付/验收/发票/参与方
2026-09-05 09:25:04 +08:00
Pine
c12380cf8c
任务系统 v2/v3:状态机统一、v2 发布字段、接单/交付/验收/返工/结算/发票全链路
2026-09-05 03:40:58 +08:00
Pine
e4d8534155
信用体系与徽章体系完整实现:L1-L8等级+无上限累加积分+26事件规则+26徽章引擎+全量重算+用户/运营端接口
2026-09-05 03:05:56 +08:00
Pine
e1459cda12
fix(审核): 审核列表返回真实HTML内容+支持全部状态筛选
...
- list_all() 替代 list_pending(), 支持 ?status= 过滤
- 审核列表对 html 模式调用 _load_html_content() 从 OSS 加载真实源码
- 修复 page_type 不一致数据(embed_url有值但page_type=html)
- admin端预览直接用返回的htmlContent生成Blob URL, 不再fetch /oss/
2026-09-05 02:30:29 +08:00
Pine
051f7a1aed
feat(个人主页): 审核日志全链路+驳回原因必填
...
- 新增 user_page_review_logs 表(迁移0054): 记录submit/approve/reject
- submit接口自动写日志(用户提交)
- review接口: 驳回必须填写原因; 通过/驳回均写日志(操作人+备注)
- 新增 GET /pages/admin/{user_id}/logs 审核日志查询
2026-09-05 01:42:13 +08:00
Pine
1ec34c0a5c
feat(个人主页): 审核流程+OSS存储+能力数据公开+URL模式强制无能力
...
- 迁移0053: html_url/review_status/review_note/submitted_at/reviewed_at
- HTML保存时上传OSS,数据库存html_url;URL模式只存embed_url
- URL(embed)模式强制capabilities为空(第三方网页无法接入平台能力)
- HTML模式选择能力后警告:必须真实接入,否则下架+永久关闭功能
- 上架流程: 保存草稿→提交审核→审核通过→上架;修改已上架内容自动下架
- GET /pages/{user_id} 根据capabilities返回公开的能力数据(订单/证书)
- postMessage桥注入capabilityData给HTML
- 运营端审核接口: /pages/admin/review/list + /pages/admin/{user_id}/review
- OSS新增download方法
2026-09-04 23:51:47 +08:00
Pine
279341dd51
feat(pages): 新增OPC个人主页(user_pages)后端 — 自写HTML/第三方嵌入、能力接入声明、徽章规则、公开渲染接口
2026-09-04 21:51:33 +08:00
Pine
b90ee8aabc
fix(agents): AgentRepository 空串 port 不再被拦截,修复服务端查不到/删不掉智能体
...
require_port 单角色后恒定 port='',但 AgentRepository 用 if not port 把空串当无 port 直接返回空/None,导致 GET /agents 永远为空、GET/DELETE 404 'Agent not found';本地删除依赖服务端先删身份,被 404 卡死后本地也无法删除。改为 if port is None 后空串正常参与查询。
2026-09-04 17:49:00 +08:00
Pine
a3cf1e0cd7
feat(market): 商品封面图 cover_url + 图标/封面上传接口
...
- MarketItem 新增 cover_url 字段(0051 迁移,已应用)
- service.create_item / _row 支持 cover_url
- ItemCreate/UpdateRequest 增加 cover_url;create/update 持久化
- 新增 POST /market/admin/items/upload-image(kind=icon|cover,
OSS market/images/,5MB 限制,返回稳定相对路径)
- 数据库连接切换到新主机 47.108.226.213(.env 已更新)
2026-09-03 21:37:19 +08:00
Pine
fef55e0fbb
feat(market): 市场分类字典 + 商品标识 slug 规范化
...
市场分类字典(admin 端弹窗维护,已运行生效):
- 新增 MarketCategory 模型 + 0050 迁移 + seed
- categories.py 重构为数据库驱动(list/valid/CRUD)
- admin 分类管理端点:增删改/排序/启停;商品列表支持分类筛选
商品标识 slug 规范化(修复云超服市场安装下载链路):
- 新增 _normalize_slug:标识不含 '/' 自动补 pineagents/ 前缀,
避免单段 slug 在 owner/name 拆分时产生 undefined
- admin_create_item:创建时 slug 规范化
- admin_update_item:修复标识首次提交后再次编辑无效
(此前 handler 未把 slug 传给 update_item)
配套:存量单段 slug 数据已批量规范化为 pineagents/<slug>
2026-09-03 20:28:44 +08:00
Pine
3fe6bf6dbc
feat: 登录注入 MQTT 凭证、官方智能体平台化、会话ID扩容、微信支付分账/认证迁移
2026-09-03 12:40:05 +08:00
Pine
6bac6b5c80
fix: RatingRepository 添加 list_for 方法,修复 /me/credit 500 错误
...
/me/credit 接口调用了 db.ratings.list_for(),但 RatingRepository 只有 avg_for 和 create 方法,
导致 AttributeError 返回 500。添加 list_for 方法返回用户收到的评价列表。
2026-09-03 11:16:23 +08:00
Pine
ab52d4013d
fix: 修复接口错误 - _loads未定义+重新注册ecosystem路由
...
1. repositories.py: 添加 _loads 函数定义(之前从 hall_repositories 隐式依赖导致 NameError)
- 修复 /cert/types 返回 500 错误
2. main.py: 重新注册 rbac_ecosystem 路由(通知/信用/任务/合同/争议等基础功能)
- 修复 /me/credit 返回 404 错误
3. rbac_ecosystem.py: 将已移除的 service 角色统一替换为 opc_member
- _ANY 元组移除 service
- 所有 require_roles 中的 service 替换为 opc_member
2026-09-03 11:05:37 +08:00
Pine
cb1492f2d6
fix: 完整审查修复 - 5个问题
...
1. _resolve_identity: permissions_for 未归一化 role → 使用 account_type+permission_role
2. rbac_org.py: 用 user.role 判断 operator → 改用 capabilities
3. membership_service: sync_user_affiliation 不同步 organization_members → 新增 _sync_org_members
4. repositories.to_profile: capabilities 只查旧表 → 增加 organization_members 查询
5. Header.RoleBadge: account_type_label 被 t() 重复翻译 → 优先直接显示中文
2026-09-03 09:43:34 +08:00
Pine
6bb988cc3e
refactor: 角色组织账号模型重构 - 阶段一
...
1. capabilities 写入 JWT,避免每次请求查库
2. 移除 service 账号类型,非 operator/carrier 统一归为 opc_member
3. 前端统一基于 capabilities 判断权限
4. 清理登录接口死代码,恢复账号密码登录
5. 移除 enterprise/provider/government/investor/developer 角色
6. 清理 seed.py 中多余角色和权限定义
7. 重写 rbac_portals.py 只保留 carrier 路由
2026-09-03 00:35:40 +08:00
Pine
581ef33112
fix(market): bundle_json 字段 MySQL 已 ALTER 为 MEDIUMTEXT(skill 内嵌 SKILL.md 可能超 64KB)
2026-09-02 14:44:03 +08:00
Pine
86c6d24b17
fix(pay): 所有支付小程序码 page 路径修正为 pages-extra 子包路径
...
统一修正3处支付相关小程序码的 page 参数(之前误写为主包 pages/ 路径,
扫码后微信找不到页面→白屏):
- app/pay/service.py: 算力充值支付 → pages-extra/pay/index
- app/market/service.py: 市场购买支付 → pages-extra/pay/index
- app/training/main.py: 活动报名支付 → pages-extra/pay-qr/index
加上之前修复的 scan-login(auth.py + wechat.py 默认参数),
后端所有 get_wxacode 调用的 page 路径现已全部正确。
2026-09-02 11:47:34 +08:00
Pine
700bafdb26
feat(invite): 完整邀请归因系统
...
数据模型:
- User表添加inviter_id/invite_code/invited_at/invite_share_count字段
- 新建invite_records表记录分享/扫码/注册归因
- MySQL迁移已执行
后端API(/invite/*):
- GET /invite/me 获取我的邀请码和统计
- GET /invite/qrcode 生成带邀请参数的小程序码(体验版/正式版)
- POST /invite/share 记录分享行为
- POST /invite/scan 记录扫码行为(无需登录)
- GET /invite/invitees 获取我邀请的用户列表
登录归因:
- wx_login支持inviter参数,新用户自动绑定邀请人
- 用户列表返回inviter_name和invite_count
服务层:
- invite_service.py:邀请码生成、归因绑定、小程序码生成、统计
2026-09-02 02:18:41 +08:00
Pine
ece9dcc7ee
feat(incubator): 园区设置+企业/成员信息自动识别接口
...
- 新增 IncubatorSetting 模型与迁移 0042:开放区域说明/申请注意事项/月报说明
- GET/PUT /incubator/settings(管理方维护,提交方只读)
- GET /incubator/company(提交方企业资料,月报/申请表单自动带出)
- GET /incubator/company/members(企业绑定成员,联系人自动填入)
2026-09-01 22:31:53 +08:00
Pine
04624ab477
feat(dm): 站内会话 + 我发布的任务/岗位(0041)
...
- 0041 迁移:dm_messages 点对点私信表(会话按双方聚合,read_at 未读标记)
- DmRepository:send/conversations(聚合末条+未读数)/thread/mark_read
- /dm/conversations、/dm/messages(GET 记录+已读、POST 发送,禁自发、校验接收人存在)
- /hall/tasks/mine(发布者视角,附接单/报名/投标计数)、/hall/jobs/mine(附投递计数)
2026-09-01 20:19:04 +08:00
Pine
53f7f495d3
feat(incubator): 昆明大学生创业园运营系统子应用——月度报告(填报/审核/统计) + 共享区域(直播间/会议室)申请/审批/备案
...
- app/incubator/ 独立子应用(service.py + routers.py,prefix=/incubator,21 接口)
- 身份自动判定:管理方=role carrier(归属 park_tenants.operator_user_id 或权限码),提交方=company_members 关联 park_companies.tenant_id 非空
- 月度报告:一企业一月一报告(UNIQUE),状态 draft/submitted/approved/rejected,统计维度对齐《派音人工智能2608》纸质月报
- 共享区域:live/meeting 两类,冲突检测按 (area_id,start_at,end_at) 与 pending/approved 重叠,承诺勾选校验,审批+备案
- models.py 追加三 ORM 模型;main.py 挂载路由;0040_incubator 迁移(父=0039_wx_profitsharing)
2026-09-01 19:48:51 +08:00
Pine
0fd210ac1f
feat(pay): 微信服务商分账+资金托管改造——OPC个人/商户双绑定收款、验收95/5分账、回调确认、escrow资金托管字段扩展
...
- profitsharing.py:服务商分账客户端(添加接收方/发起分账/查分账/退款/回调验签)
- payment_bindings + settlement_logs:OPC 收款绑定(personal openid / merchant 子商户号)与分账流水镜像
- settlement_service.release_escrow:验收后优先发起微信分账(95%接单者/5%平台),未配置时降级台账结算(channel=manual)
- handle_split_notify:分账回调确认 escrow released(幂等)
- 路由:分账回调 + 绑定创建/列表/停用
- 迁移:alembic 0039(新表 + escrows 幂等加列)+ 兜底迁移脚本 + 冒烟测试
2026-09-01 18:39:41 +08:00
Pine
496c006ba0
feat(task): 载体端任务流通——平台级任务下发载体端+可下架/上架(不可编辑)+大屏联动
...
- 新增 task_park_visibility 表(task_id+park_id+visible,唯一约束),alembic 0038 迁移
- TaskParkVisibilityRepository:get/set(幂等 upsert)/hidden_ids
- rbac_portals 新增载体端任务管理:GET /carrier/tasks(平台级任务+本载体下架状态)、POST /carrier/tasks/{id}/hide|unhide(不可编辑,无 update 端点)
- 大屏 /park/api/tasks 过滤升级:本园专属 ∪ 平台级任务(受载体下架控制)
- seed:u_car_01 幂等绑定默认园区 T001
2026-09-01 14:44:14 +08:00
Pine
61c572a19a
feat(task,sms): 任务功能增量合并到大厅 + 短信生态配置
...
- 任务统一合并到 /hall:新增 grab/grab-by-code/bid/doing/complete/deliver/recommend 操作端点(走 TaskService 真实逻辑)
- 删除 rbac_opc 全部旧任务端点(广场/详情/grab/bid/doing/complete/assign/recommend/select/deliver),/opc/tasks 返回 404
- /opc/my-tasks 改真实聚合(task_claims 承接 + bids 投标,附任务信息),不再读 opc_tasks 演示表
- dashboard_service.opc_dashboard 改 task_claims 统计
- 删除 opc_tasks 演示表(models/seed/repositories)
- BidRepository 新增 list_by_opc
- 短信生态(上一轮):sms.py 阿里云签名、seed 7 项配置、send-code scene、rbac_hall 预约/订单短信
2026-09-01 11:22:19 +08:00
Pine
0a6f753584
fix(db): 补回 system_configs.description 列(修复 /admin/config 500)
...
- 此前 MySQL 适配时模型编辑误删 description,导致仓储序列化 AttributeError
- 0037_system_config_description:幂等补列(SQLite 已有则跳过)并回填存量说明
- 与并行的 0037_market 分叉建 merge 版本,统一迁移线(当前 head=02d10eccb1f9)
2026-08-31 23:45:03 +08:00