一人公司 的粗略想法(七)
一人公司 的粗略想法(七)
工程组织、AI 协作与运维
版本:2026-04-26
核心原则
这个论坛项目的协作方式:
人负责判断、边界和规格
AI 负责实现、迁移和重复劳动
类型系统、测试、审计、预览环境负责兜底
一个人做论坛,最大的风险不是代码写不完,而是边界想不清、审核缺位、支付事故不可追溯。AI 能加速实现,但不能替你承担产品判断和责任。
规格驱动开发
每个较大功能先写规格,不直接让 AI 开写。
规格模板:
docs/specs/0001_thread-posting.md
1. 背景
2. 非目标
3. 用户流程
4. 数据模型
5. API / Server Actions
6. 权限要求
7. 状态机
8. 错误码
9. 审计事件
10. 幂等性和并发
11. 测试计划
12. 上线和回滚
AI 最适合把清晰规格转成代码,不适合替你猜社区规则和商业边界。
AI 友好的代码组织
结构要显式、集中、一致:
packages/forum/
types.ts
errors.ts
repository.ts
service.ts
permissions.ts
routes.ts
__tests__/
每个 bounded context 都遵循类似结构:
types.ts:领域类型。errors.ts:错误码。repository.ts:数据库读写。service.ts:业务逻辑和事务。permissions.ts:权限判断。routes.ts:HTTP/Server Action 适配。__tests__:状态机、权限、repository 测试。
这样当你让 AI “给 moderation 增加锁帖功能” 时,它能自然找到要改的位置。
分支和部署流程
默认流程:
feature branch
-> Vercel Preview Deployment
-> preview database branch
-> smoke test
-> PR review
-> main
-> production deployment
-> post-deploy smoke
主分支保护:
- typecheck 必须通过。
- lint 必须通过。
- unit tests 必须通过。
- 数据库迁移必须进入 PR。
- 支付、权限、审核相关变更必须人工 review。
不要让 AI 直接操作 production 数据库或 production 环境变量。
命令约定
{
"scripts": {
"dev": "turbo dev",
"build": "turbo build",
"typecheck": "turbo typecheck",
"lint": "turbo lint",
"test": "turbo test",
"db:generate": "drizzle-kit generate",
"db:migrate": "drizzle-kit migrate",
"db:studio": "drizzle-kit studio",
"check:env": "tsx scripts/check-env.ts",
"check:db": "tsx scripts/check-db.ts",
"seed:dev": "tsx scripts/seed-dev.ts",
"smoke:prod": "tsx scripts/smoke-prod.ts"
}
}
AI 修改后至少跑:
pnpm typecheck
pnpm lint
pnpm test
涉及数据库:
pnpm db:generate
pnpm db:migrate
涉及支付:
先用 sandbox/test provider fixture
再用 Vercel preview/staging 验证 webhook
最后生产小流量验证
测试策略
必须测:
- 发帖权限。
- 私密/付费板块权限。
- 新用户限频。
- 邀请码兑换的一次性和并发安全。
- 举报和审核状态机。
- Webhook 幂等性。
- 用户封禁后核心 API 拒绝。
- 数据库迁移。
建议测试类型:
unit tests
- 权限函数、状态机、slug、风险评分
integration tests
- repository + test database
- 发帖事务和计数器更新
- webhook parser fixture
e2e smoke
- 登录
- 激活
- 发主题
- 回复
- 举报
- 管理员隐藏内容
- billing 页面可打开
支付 Webhook fixture:
packages/billing/__fixtures__/stripe/
checkout.session.completed.json
invoice.paid.json
customer.subscription.updated.json
customer.subscription.deleted.json
invoice.payment_failed.json
AI 修改 parser 时,fixture 是兜底。
人工 Review 边界
以下代码不允许只靠 AI 自测:
- OAuth callback。
- Webhook 签名验证。
- API key 生成、哈希、验证。
- 权限 guard。
- 付费板块访问控制。
- 用户封禁和删除。
- 审核状态机。
- 数据库 destructive migration。
- 生产环境变量。
- 用户数据导出/删除。
AI 可以写初稿,但你必须审查。
Rust 使用策略
你熟悉 Rust,但这个项目不要为了 Rust 而 Rust。
适合 Rust 的模块:
- Markdown/HTML 安全处理,如果 TS 方案不满足性能或安全要求。
- 图片压缩、EXIF 清理、附件处理。
- 搜索分词或相似度计算。
- 大规模导入导出。
- 后续独立 worker。
不适合第一阶段用 Rust 的模块:
- 普通 CRUD。
- Auth.js/Better Auth 集成。
- 支付 Webhook。
- 管理后台。
- 简单搜索。
判断标准:
Rust 是否带来明确性能、可靠性或类型收益?
是否会显著增加 Vercel 部署和调试成本?
TS 是否已经足够?
只有收益明显时引入 Rust。
文档资产
保留这些文档:
docs/design/ # 顶层设计
docs/specs/ # 每个功能的实施规格
docs/ops/deploy.md # 部署流程
docs/ops/rollback.md # 回滚流程
docs/ops/secrets.md # 密钥轮换
docs/ops/billing-incident.md # 支付事故处理
docs/ops/moderation.md # 审核流程
docs/ops/data-export.md # 用户数据导出
docs/ops/abuse-spike.md # 垃圾攻击处理
这些不是形式主义,而是未来你和 AI 继续工作的上下文。
项目 Skill 的时机
不要第一天就写 Skill。等模式稳定后再固化。
触发条件:
- 项目已有稳定目录结构。
- 已经沉淀 3 个以上重复模式。
- AI 经常问同样上下文。
- 第二个产品或第二个论坛开始复用这些模式。
届时可以创建:
skills/forum/SKILL.md
- 项目结构
- 常用命令
- 数据库模式
- forum 模块约定
- moderation 模块约定
- billing 集成方式
- 测试要求
- 禁止事项
先有模式,再固化模式。
运维基线
上线前必须有:
check-env.ts:校验环境变量。smoke-prod.ts:生产冒烟测试。- 数据库 migration 回滚策略。
- 管理员账号 bootstrap。
- 只读模式开关。
- 暂停发帖开关。
- 关闭上传开关。
- 关闭付费板块开关。
- Stripe/MoR webhook 重放工具。
- 审核队列可用。
只读模式很重要。事故发生时,先保住读,再逐步恢复写。
备份和恢复
数据库:
- Neon production 使用可恢复能力或定期备份。
- 关键表支持导出。
- 大迁移前做快照或备份。
Blob:
- 文件元数据在 Postgres。
- 清理任务延迟删除,避免误删无法恢复。
- 重要导出物设置过期策略。
代码:
- 所有基础结构和配置变更进 Git。
- Vercel Instant Rollback 只能回滚部署,不能自动回滚数据库。
- 数据库 migration 要能向前修复,而不是指望部署回滚解决全部问题。
成本纪律
每个变动成本功能都要有:
- 使用记录。
- 限额。
- 管理员开关。
- 后台可见。
重点关注:
- Blob 存储和流量。
- 图片上传和优化。
- 邮件发送。
- 搜索。
- 长时间 Functions。
- 队列重试风暴。
- 机器人爬取公开页面。
控制手段:
邀请制默认开启
新用户低限额
上传大小限制
付费板块不允许无限附件
Cron 清理临时文件
队列最大重试次数
异常 IP 限频
每日成本和用量汇总
省钱不是最终目的,但失控成本会直接杀死一人项目。
上线前检查清单
- Vercel 账户 2FA 已开启。
- Production 数据库不是 preview 数据库。
- Production OAuth callback URL 正确。
- Webhook endpoint 使用 live secret。
- Sandbox/test key 没有进入 production。
-
check:env通过。 - 数据库迁移已跑。
- 管理员账号已配置。
- 邀请制或发帖限制默认开启。
- 新用户不能无限发帖/上传。
- 举报和审核后台可用。
- 付费板块权限测试通过。
- Webhook fixture 测试通过。
- 生产 smoke test 通过。
- 回滚和只读模式明确。