Wayfinder:学生核心闭环真实 Pilot 验收与灰度上线 #12
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Destination
完成恭学教育学生核心学习闭环的真实 Pilot 验收,并形成可审计、可观测、可回滚的单租户灰度上线方案:真实 Student Web/H5 接入,真实 Member/租户登录,原生 Java/PostgreSQL 题库目录验证,PostgreSQL/Flyway 迁移演练,浏览器 E2E 与安全隔离证据齐全;关闭或回滚不得丢失学生历史数据。
Decisions so far
JAVA_READ,原生目录由 Education 模块和 PostgreSQL 提供。SCALAR_READ仅作为显式兼容模式保留,不进行失败后的静默 fallback。PUBLIC/TENANT_OWNEDscope;公共数据固定tenant_id=0,租户私有数据归属实际租户。education_question_collection_question是题集成员关系的唯一事实源。JAVA_READPilot,已按架构变更关闭。Remaining gates
Evidence rules
每个 gate 必须留下环境、版本、命令、测试报告、截图、日志或配置证据。不得在 issue、仓库或报告中记录 token、数据库密码、学生答案、正确答案或个人敏感数据。
Out of scope
初始 frontier:#13 准备真实 Pilot 租户、测试学生与安全凭据交接、#14 确认 Student Web/H5 生产前端版本与接入边界、#15 冻结 Scalar 只读契约并验证真实 endpoint、#16 完成真实 MySQL 空库迁移升级与回滚演练、#17 定义 Pilot 跨租户、跨学生与响应安全验收阈值、#18 确定 Pilot 灰度、故障关闭与历史数据保护策略。这些票据暂不解决;后续按 frontier 顺序一次处理一个,研究票据 #15 已启动后台研究。
决策进展:#15 冻结 Scalar 只读契约并验证真实 endpoint
#15 已完成本地研究并关闭。研究确认:当前代码已定义 GET 路径、查询参数、Bearer 服务端凭据、
x-tenant-id、响应 DTO 假设和错误映射;学生端入口为/app-api/education/...,前端不得直连 Scalar。但本地 MockRestServiceServer、loopback harness 和静态配置不能证明真实 Scalar endpoint、DNS/TLS、凭据、租户头或上游真实响应契约。因此真实契约仍未冻结。
新建前置票据:#19 提供 Scalar Pilot 契约、Staging Endpoint 与只读凭据。待 Scalar owner 提供带版本/哈希的官方 OpenAPI、staging endpoint、测试数据和安全凭据交接方式后,再进行真实 GET smoke 与契约差异验证。
#19 进展:Scalar 契约已从源码冻结
tiku-backend(
https://git.gongxue100.com/gongxuegit/tiku-backend)已克隆并完成源码审查。NestJS Controller、DTO、query 参数和认证装饰器已完整记录在docs/education/scalar-contract-from-source.md。关键发现:3 个不兼容差异
page+pageSizelimit(1-2000),无偏移total分页totalpublished=true&hidden=false契约覆盖
13 个 catalog GET 路径已确认与 RuoYi adapter 调用的路径一致。认证使用
x-tenant-idheader +@TenantAccess()。OpenAPI JSON 在/openapi.json(非生产环境)。运行时 OpenAPI 生成需要 Supabase + Docker。下一步
需要在真实 staging 环境验证这 3 个差异的实际行为,然后决定是修复 RuoYi adapter 还是在 Scalar 端增加兼容参数。