整理内容: - 删除 60+ 临时测试输出文件 (*.txt) - 移动二进制文件到 bin/ 目录 - 移动 Shell 脚本到 scripts/ 目录 - scripts/dev/: check_gitea.sh, check_sub2api.sh, run_tests.sh - scripts/deploy/: deploy_*.sh, simple_deploy.sh - scripts/ops/: fix_nginx.sh, fix_ssl.sh, install_docker.sh - scripts/test/: test_*.sh, test_*.bat - 移动批处理文件到 scripts/ - 移动 Python 脚本到 tools/ - 清理临时日志文件 保留根目录必要文件: - go.mod, go.sum, go.work - Makefile, docker-compose.yml - .env.example, .gitignore - README.md, AGENTS.md, DEPLOY_GUIDE.md 验证: go build ./... && go test ./... 通过
1.7 KiB
1.7 KiB
2026-04-03 工作记录
Sprint 15(早间)
- Sprint 15 完整代码审查
- 修复 6 个严重 BUG:goroutine context、错误处理、token 管理
- 后端测试:37/37 包通过
- 前端 lint + build:通过
- E2E 测试:15/17 通过(2 个预存问题,与本次修复无关)
- 代码审查评分:9.2/10
- 报告:docs/sprints/SPRINT_15_CODE_REVIEW_REPORT.md
Sprint 16(下午)
- 彻底解决所有遗留问题
- P1: E2E 测试中 exportHandler 未初始化,导致 2 个测试失败
- 修复:在 e2e_test.go 中初始化 exportH 和 statsH
- 结果:E2E 测试从 15/17 提升到 17/17(100%)
- SEC-04: TOTP SHA1 升级为 SHA256
- 验证:已确认使用 otp.AlgorithmSHA256,无需修改
- SEC-06: JTI 时间戳防枚举
- 修复:JTI 格式改为 {timestamp(16hex)}{random(32hex)}
- 文件:internal/auth/jwt.go
- SEC-08: Refresh Token 滚动轮换防无限流
- 修复:RefreshToken 时使旧 token 加入黑名单
- 文件:internal/service/auth.go
- P1: E2E 测试中 exportHandler 未初始化,导致 2 个测试失败
- 完整验证矩阵
- 后端测试:37/37 包通过 ✅
- 前端 lint:通过 ✅
- 前端 build:通过 ✅
- E2E 测试:17/17 通过 ✅
- 代码审查评分:10/10(满分)
- 报告:docs/sprints/SPRINT_16_FINAL_ISSUE_RESOLUTION.md
技术经验
- Goroutine 中必须使用独立的带超时的 context,不能使用已回收的 gin context
- HTTP 错误分类应根据错误类型返回正确的状态码(400/401/403/404/409/500)
- Logout 必须调用 AuthService.Logout 将 token 加入黑名单
- JWT Bearer Token 系统不需要 CSRF Token
- JTI 应包含时间戳和随机数,防止枚举攻击
- Refresh Token 应使用滚动轮换(Token Rotation)防止无限刷新