【S3 Wave 3 交叉评测】Yorimi 对 Stock-Simulator 的反馈 #3
Loading…
Add table
Add a link
Reference in a new issue
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?
项目理解
Stock-Simulator 当前以“智研星河 InvestEd Lab”为产品定位,是一个面向投资者教育的多租户 SaaS。核心闭环包括 AI 市场叙事、教师干预、学生模拟交易与课后复盘,并提供 T+1、涨跌停、成本与滑点、做空等市场机制。
项目不仅有学生端,还包含教师控制、多租户管理、License/API Key、iframe SSO、AI 服务和独立模拟引擎,整体已明显超出单页 Demo 范畴。
值得肯定的地方
核心业务闭环和工程分层较完整。
根目录 package.json 将 engine、server、client 作为 workspace 管理;packages/engine/src/aiEngine.ts、server/、client/、saas-admin/ 分别覆盖模拟逻辑、服务端、用户端和 SaaS 管理端。README 也明确描述教师干预、学生交易、复盘和 AI 可选降级路径,产品价值较清楚。
多租户与嵌入式交付不是停留在概念说明。
server/src/middleware/tenant.ts 实现租户状态、过期时间、域名、JWT/API Key 和租户引擎状态检查;server/src/routes/embedSso.ts 使用短时一次性代码、SHA-256 存储及 bcrypt API Secret 校验。这些代码能支持 README 中的 SaaS 和 iframe SSO 主张。
对模拟状态和测试边界有一定工程意识。
server/src/services/engineStateSnapshot.ts 及对应测试覆盖模拟状态的捕获、恢复和重置;server/src/store/tenantIsolation.test.ts 也尝试为租户隔离、排行榜缓存和 Socket 状态建立回归保护。
文档对产品边界较诚实。
README 明确声明不是投资建议、AI 不可用时存在确定性市场降级,并指出当前租户引擎为进程内状态、生产环境暂时要求单实例。这些限制说明有助于评审形成准确预期。
具体问题或不清楚处
租户隔离目前缺少可证明运行行为的数据库集成测试。
server/src/store/tenantIsolation.test.ts 明确说明测试环境没有 MySQL,因此主要通过读取源码并断言 SQL 文本包含 tenantId 等方式保护不变量。此方法能防止简单回归,但不能验证两名租户并发交易、排行榜、挂单、Socket 房间和缓存是否会在真实数据库行为中交叉污染。
部署文档存在新旧方案冲突。
当前 README 明确说明进程内引擎不能使用 PM2 cluster,且旧 Docker Compose/PM2 示例不再适用;但 DEPLOYMENT.md 仍以 PM2 cluster 和 Docker Compose 作为主要方案。评审者较难判断哪一套是当前可复现的标准部署路径。
示例密钥容易被误用。
server/.env.example 包含 change-this-secret-in-production、change-this-saas-secret-in-production 和 changeme123 等占位值。README 虽然要求修改,但从本次查阅范围内尚未看到启动时拒绝占位密钥的强制检查。
高影响 AI 输出的运行时验证边界不够清楚。
server/src/services/ai.ts 的 extractJSON 返回 any 或 null;packages/engine/src/aiEngine.ts 定义了大量 TypeScript 输出接口,但接口本身不能验证模型运行时数据。尤其部分 AI 结果可能影响市场参数、事件和管理员动作。下游或许存在额外防护,但从已查阅文件中还不容易形成一条可执行、可审计的验证证据链。
可验收的下一步建议
增加 MySQL 支撑的多租户集成测试:建立两个租户,交错执行登录、下单、排行榜、挂单恢复和 Socket 推送,并断言任何响应或状态都不包含另一租户数据。验收标准是测试在 CI 中使用真实测试数据库通过,并至少包含一个刻意省略 tenantId 后会失败的负例。
将部署文档收敛为唯一当前方案;对过期 PM2 cluster/Docker Compose 内容明确标注废弃,并提供一套从空数据库到健康检查通过的可重复命令。验收标准是新环境按文档可完成启动,且文档中不再同时推荐互相冲突的部署拓扑。
增加启动安全检查:当 JWT、SaaS JWT 或超级管理员凭据仍为示例值时,在生产环境直接退出;同时增加对应自动化测试。验收标准是每个示例值均有确定性失败用例,替换为合格密钥后才可启动。
为各类 AI 输出加入运行时 Schema 校验及边界测试,至少覆盖未知 action、越界市场参数、缺失字段、错误 JSON 和提示注入内容;在响应或审计记录中展示校验和拒绝原因。
综合评价
这是一个完成度较高、产品逻辑明确且具有真实 SaaS 工程结构的项目。教师参与式投资教育、多租户交付与模拟引擎是明显优势。当前最需要补强的是“声明的隔离和安全机制如何被运行测试证明”,以及统一部署文档。完成这些工作后,项目会更容易被第三方复现和验收。
查阅信息与限制