Skip to content

I-02A–F2: 实现身份、巡检基础与上传验证受理 - #9

Merged
SayQuan1 merged 1 commit into
mainfrom
wsq/i-02a-auth-api
Oct 1, 2026
Merged

SayQuan1 merged 1 commit into
mainfrom
wsq/i-02a-auth-api

Conversation

@SayQuan1

@SayQuan1 SayQuan1 commented Oct 1, 2026

Copy link
Copy Markdown
Owner

变更说明

本 PR 接通 dev/test 的身份、角色、组织、模板、巡检草稿、巡检项查询和上传验证受理,共 31 个公共业务接口。客户端可以创建巡检草稿并提交上传完成请求,服务端固定对象版本并原子登记 validating 图像、验证任务和 TaskDispatch;后台消费尚未实现,因此不会将图像伪标 ready。

  • 任务编号:I-02A/B/C/D/E/F1/F2。交付当前子批,不声明完整 I-02 业务闭环完成。
  • 需求:R-01、R-02、R-06;R-04/R-05 本次仅纯领域守卫,R-07 仅初始持久任务受理。
  • 验收映射:API-01/02/03、SEC-01/02、DB-01/02 的已覆盖范围见各批记录;UP-01/FLOW/CAP 为局部覆盖,SEC-03/UP-03 的真实存储部署验收仍待完成。

影响范围

  • 产品/业务流程
  • 数据库/迁移(仓储与事务变化;无新迁移)
  • API 契约(实现既有契约;生成物无漂移)
  • AI 模型/数据
  • 规则
  • 权限/隐私/审计
  • 部署/监控(dev/test 配置和 CI)
  • 仅文档

主要文件:apps/api/app/{identity,foundations,item_queries,uploads,main}.py;packages/{domain,application,persistence} 的对应模块;packages/storage/s3.py;tests/{business,domain,persistence,security};DEVELOPMENT.md、docs/08-delivery/01-implementation-plan.md、10–16 批次验收记录及 API/编码规范;.env.example、requirements/py311-business.txt、pyproject.toml 和 .github/workflows/ci.yml。

实现当前权限重验、CSRF、幂等重放、最后管理员保护、租户/实验室隔离和事务原子性。上传 HEAD 在数据库事务外,提交前再次检查 owner/期限/声明 hash;同 upload 不重复创建 image/task。图像查询不暴露内部对象引用。Python 3.11 业务/AI 环境保持隔离,boto3 仅在业务环境安装。

验证

Windows / Python 3.11.4 本地结果:

  • python -m pytest tests/business tests/domain tests/security tests/persistence/test_unit.py -q --tb=short:1283 passed,含 1 个既有 Starlette/AnyIO 弃用警告。
  • python tools/database/run_mysql_tests.py --mysqld <isolated-mysqld>:213 passed;192 项真实 MySQL + 21 项与主套件重叠的单元测试。MySQL 8.0.33、0001_initial、43 表/115 外键、结构 errors=[]。本次文档纠正了 F2 曾沿用 F1 的 157 项统计。
  • python -m ruff check apps packages tests tools/database、python -m ruff format --check apps packages tests tools/database:PASS,106 文件。
  • 独立 AI 环境 python -m unittest discover -s tests/ai -t . -v:15 passed;两个环境各运行协议测试 4 passed;AI 无业务/S3/模型依赖检查通过。
  • python -B tools/design/build_specs.py --check、test_readiness_design.py、validate_specs.py:16 份生成物无漂移、148 项 synthetic readiness checks、228 个文档链接通过。
  • git diff --check 通过。SDK 签名为真实本地计算,HEAD/GET 使用 Stubber;没有真实 MinIO/IAM/nginx/TLS、GPU/模型或浏览器联调证据。远程 CI 以本 PR checks 为准。

风险与回滚

  • API_IDENTITY_ENABLED/API_UPLOADS_ENABLED 默认关闭,仅 dev/test;production 仍拒绝。上传未包含图像消费/解码、原始字节 SHA 验证、O/A 生成、下载和 ready 提交。未实现 submit/retry/complete、事实、人工复核、整改的完整应用事务,allowed_actions 仍为空。
  • task_runs/Outbox 已登记不等于 publisher/lease/fencing/sweeper/消费闭环;后续先实现 I-03A,再接 general 图像验证。staging 生命周期可能使长期未消费的输入过期,仅使用可丢弃开发对象。
  • 回退:关闭对应 API 开关并重启;必要时通过审查后的 revert 恢复前一版本。保留 uploads/images/task_runs/outbox/审计和幂等记录,不清库、不改历史迁移。关闭 API 不撤销既有短期签名 URL,也不取消已登记任务。
  • 新增顶层 boto3 版本约束,不声称完整传递依赖 lock 或生产性能通过。租户/权限/审计及数据库事务变更须协作者共同确认。

审查清单

  • 未包含 .obsidian/、.env、secret 文件、权重或真实实验室图片;测试使用合成数据
  • 已更新实现计划、设计/API 和开发说明
  • 已补充领域、HTTP、权限、并发和故障测试
  • 数据库版本保持 0001_initial;无真实模型/规则制品变更
  • 远程 CI 通过
  • 至少一名其他协作者审查;数据库/权限变更共同确认

请通过 PR 审查后按仓库规范 Squash merge;本次不自动合并。

Implement I-02A through I-02F2 with 31 dev/test APIs, domain guards, tenant authorization, atomic idempotency and audit, and pinned upload validation intents. Preserve remaining workflow and worker boundaries.

Validation: pytest business/domain/security/persistence unit 1283 passed; isolated MySQL suite 213 passed (192 database + 21 overlapping unit); Ruff and design checks passed. See docs/08-delivery acceptance records for commands and limitations.

Rollback: disable identity/uploads feature flags and restart; retain business, task, outbox, audit and idempotency history. No migration changes; existing signed URLs expire naturally. Requires independent security/database review.

@SayQuan987 SayQuan987 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pass

@SayQuan1
SayQuan1 merged commit 070ed74 into main Oct 1, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants