chore: bootstrap nana-story M0
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
# ADR 0001:Rust 是公共契约的唯一事实来源
|
||||
|
||||
- 状态:已接受
|
||||
- 日期:2026-07-28
|
||||
|
||||
## 决策
|
||||
|
||||
公共数据模型只在 `nana-domain` 中定义。JSON Schema 与 TypeScript DTO 由
|
||||
`nana-contracts` 生成并提交到 `contracts/`。CI 同时检查源文件哈希和生成结果。
|
||||
|
||||
禁止手工维护第二套同名模型。前端只能导入 `contracts/ts`。
|
||||
|
||||
## 原因
|
||||
|
||||
资源校验、状态 reducer、存档和 Tauri 命令都运行在 Rust 侧。让 Rust 成为唯一事实来源
|
||||
可以避免多个子智能体分别发明不兼容的字段和枚举。
|
||||
|
||||
## 后果
|
||||
|
||||
- 任何契约变更必须重新生成 Schema 与 TypeScript。
|
||||
- 契约变更必须连同 canonical fixtures 一起评审。
|
||||
- 生成物漂移会使 `pnpm verify` 失败。
|
||||
@@ -0,0 +1,29 @@
|
||||
# ADR 0002:RuntimeState 与 PlayerView 是安全边界
|
||||
|
||||
- 状态:已接受
|
||||
- 日期:2026-07-28
|
||||
|
||||
## 决策
|
||||
|
||||
前端永远不接收完整 `RuntimeState`。所有界面通过 Rust 生成的 `PlayerView` 或同等
|
||||
脱敏 DTO 读取数据。
|
||||
|
||||
`PlayerView` 只包含:
|
||||
|
||||
- 当前演出节拍和建议;
|
||||
- 玩家当前可访问的持有物;
|
||||
- 玩家已经获得的知识;
|
||||
- 已接受且允许展示的许诺;
|
||||
- 模糊化关系阶段;
|
||||
- 可回溯节点摘要。
|
||||
|
||||
## 原因
|
||||
|
||||
这条边界从结构上阻止 NPC 隐藏物品、未揭示事实、精确关系数值、骰点和剧情节点泄漏。
|
||||
仅靠前端“不要显示”不足以形成安全保证。
|
||||
|
||||
## 后果
|
||||
|
||||
- Vue 不允许导入或缓存 `RuntimeState`。
|
||||
- PlayerView 泄密测试属于跨模块硬门槛。
|
||||
- 新界面字段必须先证明玩家有权知道。
|
||||
@@ -0,0 +1,23 @@
|
||||
# ADR 0003:供应商能力只通过 lapp-rs
|
||||
|
||||
- 状态:已接受
|
||||
- 日期:2026-07-28
|
||||
|
||||
## 决策
|
||||
|
||||
供应商协议、模型选择、凭据解析与网络调用全部属于 `lapp-rs`。`nana-story` 只在
|
||||
`nana-runtime` 中保留窄适配层,不引入供应商 SDK。
|
||||
|
||||
开发基线固定为:
|
||||
|
||||
```text
|
||||
openlapp/lapp-rs@5ba3c659e1536ec4bee16340faca603940a5cb17
|
||||
```
|
||||
|
||||
本地模型仅视为 HTTP 服务;应用不安装、下载、启动或管理 Ollama/LM Studio。
|
||||
|
||||
## 后果
|
||||
|
||||
- 普通 CI 使用确定性 Fake Provider。
|
||||
- 真实模型只参与独立冒烟测试。
|
||||
- `lapp-rs` 升级必须先通过协议夹具回归。
|
||||
Reference in New Issue
Block a user