CI / backend (push) Canceled after 0s
跑通迁移与测试后修掉的真问题: - alembic 0001:asyncpg 走预备语句,一次 execute 只能一条 SQL。 CREATE FUNCTION / CREATE POLICY / GRANT 全部拆成单语句逐条执行, 否则报 "cannot insert multiple commands into a prepared statement"。 - 创建工作区:ORM flush 只按 relationship 排序,裸外键不算数, member 可能先于 workspace 落地撞 FK。改为先 flush workspace 再插 member。 - datetime.UTC 是 3.11+ 才有的,本机 3.10 直接 ImportError。改用 timezone.utc。 - 幂等中间件:原来会缓存 4xx。校验失败被缓存后,用户改对参数仍拿到同一个 422。 改为只缓存 <400。 - 发码节流窗口改为可配置 SMS_THROTTLE_SECONDS(测试置 0), 节流用例自己显式打开,避免"整库关掉节流"导致节流从未被验证。 - 租户隔离用例:pytest.raises(Exception) 改为精确的 ProgrammingError, 否则任何异常都会让"应用角色不能建表"这条断言假通过。 验收:pytest 33 passed;ruff check / format 通过;真机跑 uvicorn, /health、/version、登录、建工作区、列表、/auth/me 全通。
42 lines
533 B
Plaintext
42 lines
533 B
Plaintext
# Python
|
||
__pycache__/
|
||
*.py[cod]
|
||
.venv/
|
||
venv/
|
||
.pytest_cache/
|
||
.ruff_cache/
|
||
.coverage
|
||
htmlcov/
|
||
*.egg-info/
|
||
|
||
# 环境与密钥:绝不进仓库
|
||
.env
|
||
.env.local
|
||
*.pem
|
||
*.key
|
||
|
||
# 前端
|
||
node_modules/
|
||
web/dist/
|
||
web/.vite/
|
||
|
||
# 安卓
|
||
android/.gradle/
|
||
android/build/
|
||
android/app/build/
|
||
android/local.properties
|
||
|
||
# 编辑器 / 系统
|
||
.DS_Store
|
||
.idea/
|
||
.vscode/
|
||
|
||
# pip 安装过程中的临时目录(Windows 上出现在 cwd)
|
||
pip-unpack-*/
|
||
pip-req-build-*/
|
||
tmprfx*
|
||
|
||
# 本机开发用的便携 PostgreSQL / 临时目录(不入库)
|
||
.local/
|
||
|