【S3 Wave 3 交叉评测】Yorimi 对 Stock-Simulator 的反馈 #3

Open
opened 2026-08-04 02:26:36 +08:00 by mart · 0 comments

项目理解

Stock-Simulator 当前以“智研星河 InvestEd Lab”为产品定位,是一个面向投资者教育的多租户 SaaS。核心闭环包括 AI 市场叙事、教师干预、学生模拟交易与课后复盘,并提供 T+1、涨跌停、成本与滑点、做空等市场机制。

项目不仅有学生端,还包含教师控制、多租户管理、License/API Key、iframe SSO、AI 服务和独立模拟引擎,整体已明显超出单页 Demo 范畴。

值得肯定的地方

  1. 核心业务闭环和工程分层较完整。

    根目录 package.json 将 engine、server、client 作为 workspace 管理;packages/engine/src/aiEngine.ts、server/、client/、saas-admin/ 分别覆盖模拟逻辑、服务端、用户端和 SaaS 管理端。README 也明确描述教师干预、学生交易、复盘和 AI 可选降级路径,产品价值较清楚。

  2. 多租户与嵌入式交付不是停留在概念说明。

    server/src/middleware/tenant.ts 实现租户状态、过期时间、域名、JWT/API Key 和租户引擎状态检查;server/src/routes/embedSso.ts 使用短时一次性代码、SHA-256 存储及 bcrypt API Secret 校验。这些代码能支持 README 中的 SaaS 和 iframe SSO 主张。

  3. 对模拟状态和测试边界有一定工程意识。

    server/src/services/engineStateSnapshot.ts 及对应测试覆盖模拟状态的捕获、恢复和重置;server/src/store/tenantIsolation.test.ts 也尝试为租户隔离、排行榜缓存和 Socket 状态建立回归保护。

  4. 文档对产品边界较诚实。

    README 明确声明不是投资建议、AI 不可用时存在确定性市场降级,并指出当前租户引擎为进程内状态、生产环境暂时要求单实例。这些限制说明有助于评审形成准确预期。

具体问题或不清楚处

  1. 租户隔离目前缺少可证明运行行为的数据库集成测试。

    server/src/store/tenantIsolation.test.ts 明确说明测试环境没有 MySQL,因此主要通过读取源码并断言 SQL 文本包含 tenantId 等方式保护不变量。此方法能防止简单回归,但不能验证两名租户并发交易、排行榜、挂单、Socket 房间和缓存是否会在真实数据库行为中交叉污染。

  2. 部署文档存在新旧方案冲突。

    当前 README 明确说明进程内引擎不能使用 PM2 cluster,且旧 Docker Compose/PM2 示例不再适用;但 DEPLOYMENT.md 仍以 PM2 cluster 和 Docker Compose 作为主要方案。评审者较难判断哪一套是当前可复现的标准部署路径。

  3. 示例密钥容易被误用。

    server/.env.example 包含 change-this-secret-in-production、change-this-saas-secret-in-production 和 changeme123 等占位值。README 虽然要求修改,但从本次查阅范围内尚未看到启动时拒绝占位密钥的强制检查。

  4. 高影响 AI 输出的运行时验证边界不够清楚。

    server/src/services/ai.ts 的 extractJSON 返回 any 或 null;packages/engine/src/aiEngine.ts 定义了大量 TypeScript 输出接口,但接口本身不能验证模型运行时数据。尤其部分 AI 结果可能影响市场参数、事件和管理员动作。下游或许存在额外防护,但从已查阅文件中还不容易形成一条可执行、可审计的验证证据链。

可验收的下一步建议

  1. 增加 MySQL 支撑的多租户集成测试:建立两个租户,交错执行登录、下单、排行榜、挂单恢复和 Socket 推送,并断言任何响应或状态都不包含另一租户数据。验收标准是测试在 CI 中使用真实测试数据库通过,并至少包含一个刻意省略 tenantId 后会失败的负例。

  2. 将部署文档收敛为唯一当前方案;对过期 PM2 cluster/Docker Compose 内容明确标注废弃,并提供一套从空数据库到健康检查通过的可重复命令。验收标准是新环境按文档可完成启动,且文档中不再同时推荐互相冲突的部署拓扑。

  3. 增加启动安全检查:当 JWT、SaaS JWT 或超级管理员凭据仍为示例值时,在生产环境直接退出;同时增加对应自动化测试。验收标准是每个示例值均有确定性失败用例,替换为合格密钥后才可启动。

  4. 为各类 AI 输出加入运行时 Schema 校验及边界测试,至少覆盖未知 action、越界市场参数、缺失字段、错误 JSON 和提示注入内容;在响应或审计记录中展示校验和拒绝原因。

综合评价

这是一个完成度较高、产品逻辑明确且具有真实 SaaS 工程结构的项目。教师参与式投资教育、多租户交付与模拟引擎是明显优势。当前最需要补强的是“声明的隔离和安全机制如何被运行测试证明”,以及统一部署文档。完成这些工作后,项目会更容易被第三方复现和验收。

查阅信息与限制

  • 仓库:https://www.synnovator.com/MuskZhou/Stock-Simulator
  • 默认分支:main
  • 查阅提交:f8d8aa8cdfa37af8307183882415275458fc6d6f
  • 提交信息:docs: update InvestEd Lab readme for SaaS
  • 主要查阅文件:
    • README.md
    • package.json
    • DEPLOYMENT.md
    • server/.env.example
    • server/src/services/ai.ts
    • server/src/middleware/tenant.ts
    • server/src/routes/embedSso.ts
    • server/src/store/tenantIsolation.test.ts
    • server/src/services/engineStateSnapshot.ts
    • packages/engine/src/aiEngine.ts
  • 静态审查限制:本次通过公开仓库和 API 进行静态审查,未配置 MySQL、密钥或安装依赖,因此不声称完成了运行验证。

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

No due date set.

Dependencies

No dependencies set.

Reference
MuskZhou/Stock-Simulator#3
No description provided.