Files
Jyotisha/docs/tasks/PROGRESS-compliance-launch-20260930.md
T
Jesse_ChenandClaude Opus 5.5 3177ffe61d
Independent Staging Quality Gate / validate (push) Successful in 12m54s
Independent Staging Quality Gate / publish (push) Successful in 3m31s
fix(account): deletion freeze trigger reads amount via jsonb so shared inserts don't fail; list the new tables (BUG-1118)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-09-30 10:15:06 +08:00

53 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PROGRESS · 合规五项合并交付(2026-09-30)
> 产品 2026-09-30「合规与法律的前四个你可以帮我做吗」+「点踩要收集这一轮对话」。执行:Claude 直接执行,五个 fork 子代理各自在独立分支完成,Claude 合并到 `codex/compliance-launch-20260930` 并整体复验。
> 各项细节:`PROGRESS-legal-consent-20260930.md`、`PROGRESS-feedback-complaints-20260930.md`、`PROGRESS-account-deletion-20260930.md`、`PROGRESS-content-moderation-20260930.md`、`PROGRESS-reply-quality-20260930.md`。真机:`docs/testing/compliance-launch-20260930.md`。
## 产品决定
| 项 | 决定 |
|---|---|
| 注销 | 7 天冷静期,期间重新登录可撤销;到期删除个人内容与账号;订单、支付、点数流水等 16 张表保留但去身份;剩余点数作废 |
| 主体与联系方式 | 先用占位(`frontend/src/lib/legal-entity.ts` 一处),正式发布前以 `JYOTISHA_REQUIRE_LEGAL_ENTITY=1` 跑测试拦住占位与草稿 |
| 客服 | 站内反馈表单 + 后台处理;投诉在注销时保留处理记录、清空联系方式(Claude 合并时按常规做法定,已写进注销弹窗与隐私政策草稿) |
| 审核 | 输入命中不送模型不扣点;输出命中整段替换并退点;日志不存原文。自伤类改回求助句(12356)而非「不能讨论」,待法务确认 |
| 点踩 | 保存这一轮 + 模型当时读到的上下文(点踩时由服务端按同一段拼接代码还原);90 天后清空正文只留统计;注销即删 |
## 合并中处理的问题
- 注销会自动删除所有带 user_id 的表,包括新建的 `user_feedback`:改为保留并在清除时置空 `contact`(迁移、TS 镜像、弹窗文案、隐私政策草稿四处一致)。
- `tests/test_api_server_security.py` 的全站页面清单:A/B/C/E 新增的 `terms`、`privacy`、`admin/account-deletions`、`admin/feedback`、`admin/reply-quality` 未登记,已补(三栏注释)。
## 验证(Claude 实跑,基线 origin/staging `f898df55`,前端与 `5208f19b` 相同)
| 项 | 结果 |
|---|---|
| tsc | 0 错 |
| lint | 0 error / 126 warning(同基线) |
| npm test 全量 | 4,470 / fail 24,失败名单与基线逐条相同;新增 52 条,消失 0 条 |
| next build | `/` `○ Static`;`/terms`、`/privacy` 静态 |
| 首屏 gzip-9 | 646,480 → 652,948 B(+1.0%,在 ±2% 内;首屏多一个脚本,是外壳里的协议重新同意检查) |
| Python 快速门 | 1000 passed / 2 skipped;门内 npm 步用系统 Node 20,属已知环境失败 |
## 新增数据库表(均只加不改;本机无 Docker,未跑 test:db,部署到 staging 时第一次真实执行)
`user_consents`(20260930010000)、`account_deletion_requests` 及清除函数(20260930020000)、`user_feedback` + `reply_ratings`(20260930030000)、`moderation_events`(20260930040000)、`reply_quality_snapshots`(20260930050000)。
## 带给律师 / 需要产品提供
1. 运营主体全称、联系地址、客服邮箱(电话 / 微信可选)、ICP 备案号。
2. 协议与隐私政策草稿里 13 处【待确认】:在线支付是否开放与方式、退款规则与时限、管辖法院、服务器日志是否记 IP 与保存期、正式站启用的模型服务商及所在国、出生地点搜索服务商、是否启用 VedAstro、支付服务商名称、数据出境合规路径、订单与点数流水保存年限、内容审核日志保存期、备份与加密覆盖范围;另加投诉记录保存年限。
3. 接收用户数据的第三方:模型服务商(OpenAI / Anthropic / 兼容接口,后台配置)、Resend(境外)、Geoapify / Mapbox / GeoNames(可能境外)、VedAstro(境外,是否启用待确认)、易支付。
4. 内容审核:本地词表(12 条规则 5 类)与自伤求助热线待法务审;正式审核服务(阿里云内容安全)需要开通账号与密钥。
5. 生成式 AI 标识、算法备案(本轮未做)。
## 环境缺口
无 Docker(数据库测试);无 staging 测试账号与真机(浏览器全流程、注销 7 天后真实清除);阿里云密钥;协议文本未经律师审定。
## 门禁失败与修复(BUG-1118)
推 `2f6581ff` 后 staging 门禁 validate 失败(Gitea 日志需令牌,看不到)。本机排查:隐私扫描、Python 编译均通过;在本机用 PostgreSQL 17.11 预编译二进制 + 一个只支持 up / down / exec psql 的 `docker compose` 替身(脚本在会话临时目录,不入仓)跑全部 `database-*.test.ts`,比基线多 4 条失败:3 条是注销迁移的冻结触发器引用 `new.amount`(跨表复用,另两张表没有该列),1 条是表清单缺六张新表。修复后失败名单与基线逐条相同。
本机数据库测试方法(供以后无 Docker 时复用):`embedded-postgres-binaries-linux-amd64-17.x.jar` 解出 `initdb/pg_ctl/postgres`;用 `pg` 客户端重放 `deploy/postgres/001-bootstrap-roles.sh` 做模板库;替身 `docker` 在 `compose up` 时复制模板启动实例、`exec psql` 用 `pg` 客户端执行 `-Atc` / `-f -`。已知替身局限:不支持 `pg_dump`、部署脚本类测试(基线同样 6 条失败)。