# 专题-03:AI 编排、上下文与质量评测实现规范 - 版本:v1 - 更新日期:2026-05-19 - 目标读者:架构 / 后端 / 前端 / 测试 / 文档维护者 - 阅读时间:35-55 分钟 - 边界说明:本文件补齐 AI 编排、检索、上下文、风险路由和质量评测的跨文档设计合同。它描述目标设计,不代表当前代码都已实现。精确表结构仍以 `后端-04-统一数据库Schema-v1.md` 为准,精确 API 路径和错误码仍以 `后端-05-统一API契约-v1.md` 为准,阶段门禁和证据包仍归 `doc/dev/*`。 ## 1. 归属范围 本文件只承载第一类设计缺口:系统运行合同、接口语义、字段合同、失败路径和质量算法。以下内容不放在本文件: - 阶段是否退出、证据包字段、review 记录和命令输出。 - 当前代码是否已经实现。 - 具体服务类名、JPA 泛型、前端 hook 或测试文件路径。 | 设计主题 | 本文件负责 | 其它主文档 | |---|---|---| | RAGFlow 运行合同 | 客户端调用语义、错误分类、阻塞边界、来源标记 | Schema 看 `后端-04`,API 看 `后端-05` | | Graph Query Provider | 查询能力矩阵、返回元信息、降级边界 | ADR 决策看 `架构-03` | | Falsification Benchmark | query set、阈值、记录字段、失败原因分类 | 评测 API 和表结构看 `后端-04` / `后端-05` | | 上下文组装(Context Assembly) | 请求/响应合同、Layer 0-3、权限二次过滤、Token Budget | 系统流程看 `流程-02` | | Agent / Prompt | 能力矩阵、fallback、模板族、审计字段白名单 | 管理 API 看 `后端-05` | | Pipeline / Risk Routing | 风险等级行为、重试与自动确认边界 | 状态机看 `架构-04` | | Planning Candidate / Knowledge Draft | 待审对象字段合同和版本校验 | 表结构看 `后端-04` | | 全书解析批量返回 / 一致性检查结果 | 用户可解释返回结构 | 用户流程看 `流程-01` | | 质量评测 | 多模型聚合、分歧惩罚、配置快照绑定 | 评测集 API 看 `后端-05` | | S0-AUTH 默认超级管理员 | 初始化与凭据交付安全合同 | 认证 API 和 RBAC 表看 `后端-04` / `后端-05` | ## 2. RAGFlow 运行合同 ### 2.1 定位 RAGFlow 是外部语义检索基座,不是 Muse 的事实源。它只能消费 PostgreSQL 中的规范数据(Canonical)和授权资料投影,不能反向决定作品事实。 允许进入正式检索的来源类型: | sourceType | 含义 | 是否可进正式检索 | |---|---|---:| | `work_content` | 当前作品已确认正文、章节和文本块摘要 | 是 | | `local_knowledge_base` | 当前作品已确认局域知识 | 是 | | `global_knowledge_base` | 当前用户/作品被授权的全局知识库资料 | 是 | | `shadow_draft` | Suggestion / Knowledge Draft / Planning Candidate 等待审内容 | 否。只能用于明确标记的预览或审计,不得进入正式生成上下文 | ### 2.2 调用输入 Muse 后端调用 RAGFlow 时,必须传入或等价计算以下上下文: | 字段 | 要求 | |---|---| | `workId` | 当前作品 ID | | `userId` | 当前用户 ID 或系统任务服务身份 | | `scenario` | `generation` / `extraction` / `validation` / `planning` / `consistency_check` / `search` | | `allowedGlobalKbIds` | 当前请求允许使用的全局知识库 ID 列表 | | `sourceTypes` | 本次允许检索的来源类型,默认不包含 `shadow_draft` | | `queryText` / `queryVectorInput` | 检索查询文本或等价输入 | | `maxResults` | 最大返回数量 | | `traceId` | 链路追踪 ID | RAGFlow 请求不得只依赖物理 dataset 隔离做权限边界。即使多个全局知识库共用物理索引,请求或后处理也必须按 `global_kb_id IN allowedGlobalKbIds` 或等价规则过滤。 ### 2.3 错误分类与阻塞边界 | 错误 | 系统行为 | |---|---| | RAGFlow 不可用 / 超时 / 认证失败 | 阻塞依赖检索上下文的生成、提取、校验、规划和一致性检查,返回可恢复失败 | | RAGFlow 限流 | 任务进入可重试失败;不静默降级为低质量生成 | | 投影落后 | 使用 watermark + overlay 补齐;补不齐时返回投影未追平错误 | | 单条资料缺权限 | 丢弃该条结果,记录审计摘要,不进入上下文 | | 单条资料缺来源元信息 | 丢弃该条结果,不作为事实上下文 | RAGFlow 不可用不得阻塞: - 正文保存。 - 手工编辑章节或文本块。 - 查看已确认正文和已确认作品知识。 - 处理不依赖检索上下文的本地 UI 状态。 ### 2.4 投影失败与重建 正式写入 Canonical 后,投影事件通过 `projection_outbox` 或等价机制发送给 RAGFlow。投影消费者必须满足: - 幂等:同一 PG 业务 ID 重放不会生成重复事实。 - 可重试:超时、限流、临时不可用要保留失败原因和重试次数。 - 可观测:管理员能看到投影目标、失败原因、最后尝试时间和待处理数量。 - 可重建:重建索引时以 PostgreSQL 事实源为准,旧 RAGFlow 文档 ID 只能作为映射参考,不作为事实。 ## 3. Graph Query Provider ### 3.1 能力矩阵 Graph Query Provider 是图查询抽象,不直接等同 Neo4j。它的实现可以是 RAGFlow GraphRAG、Neo4j 或其它 provider,但对 Muse 的合同必须稳定。 | queryType | 必须支持的语义 | 典型用途 | |---|---|---| | `entity_adjacency` | 实体邻接关系、关系类型、方向、证据来源 | 角色关系、组织关系、地点关联 | | `relationship_evolution` | 同一实体关系随章节或时间变化 | 角色关系演变、阵营变化 | | `event_timeline` | 事件时间线、章节范围、先后顺序 | 时间线一致性 | | `causal_chain` | 因果链、触发事件、后果事件 | 因果检查、伏笔回收 | | `foreshadowing_trace` | 伏笔、铺垫、回收节点 | 长篇结构检查 | | `consistency_evidence` | 支撑一致性检查的问题证据集合 | 风险解释和定位 | ### 3.2 请求合同 ```json { "workId": "string-id", "queryType": "entity_adjacency", "entityIds": ["string-id"], "chapterRange": { "fromChapterId": "string-id", "toChapterId": "string-id" }, "allowedGlobalKbIds": ["string-id"], "maxResults": 20, "traceId": "request-trace-id" } ``` ### 3.3 返回合同 每条结果必须带可追溯来源。缺少来源对象、授权状态或置信度的结果不得进入上下文。 ```json { "provider": "ragflow_graphrag", "queryType": "entity_adjacency", "degraded": false, "watermark": { "projectionTarget": "graph_provider", "lastSyncedRevision": 123 }, "results": [ { "sourceObjectType": "knowledge_relation", "sourceObjectId": "string-id", "sourceChapterId": "string-id", "globalKnowledgeBaseId": null, "authorization": "allowed", "confidence": 0.87, "evidence": "引用摘要或证据片段", "metadata": { "relationType": "ally", "direction": "outgoing" } } ] } ``` ### 3.4 降级边界 - Graph Query Provider 不可用时,可以让非因果、非时间线类生成继续使用 RAGFlow 语义检索,但响应必须标记 `degraded=true`。 - 因果链、事件时间线、伏笔回收和一致性检查不能静默降级为普通语义检索后假装完整。 - Provider 返回投影落后时,必须先尝试 PG overlay;仍无法补齐时返回可恢复失败。 ## 4. Falsification Benchmark ### 4.1 Query set S1-B 起,GraphRAG / Graph Query Provider 的决策不能靠主观感受。首批 benchmark query set 至少包含: | 类别 | 目标 | 最低通过阈值 | |---|---|---:| | `local` | 当前作品局域知识、正文和规划项检索 | 90% | | `global` | 授权全局知识库检索和过滤 | 90% | | `temporal` | 时间线、章节顺序、事件先后关系 | 80% | | `causal` | 因果链、伏笔铺垫和回收关系 | 80% | 低于阈值不自动等于必须引入 Neo4j,但必须触发 ADR-006 决策复审,并记录失败原因。mock provider 或手写假结果不得计入正式 benchmark 结论。 ### 4.2 记录字段 每次 benchmark run 必须记录: | 字段 | 说明 | |---|---| | `datasetVersion` | 固定 query set 版本 | | `provider` | `ragflow_graphrag` / `neo4j` / `mock` 等 | | `queryType` | local / global / temporal / causal | | `queryText` | 查询输入 | | `expectedEvidence` | 期望命中的事实、章节或关系 | | `actualResults` | 实际返回摘要和来源 | | `score` | 单条得分 | | `failureReason` | 失败分类 | | `testedConfigSnapshot` | RAGFlow、Graph Provider、Prompt、Agent、上下文策略和 New-API 摘要 | | `traceId` | 可追踪请求 ID | 失败原因至少包含:`missing_fact`、`wrong_source`、`unauthorized_source`、`stale_projection`、`temporal_order_wrong`、`causal_link_missing`、`low_confidence`、`provider_error`。 ## 5. 上下文组装(Context Assembly) ### 5.1 请求合同 上下文组装是后端内部合同,可以有内部 API 或服务接口。无论实现形态如何,输入语义必须稳定: ```json { "workId": "string-id", "userId": "string-id", "scenario": "continuation", "targetChapterId": "string-id", "targetBlockId": "string-id", "userIntent": "继续写下一段", "currentText": "用户当前输入或选中文本", "allowedGlobalKbIds": ["string-id"], "tokenBudget": { "maxInputTokens": 12000, "reservedOutputTokens": 2000 }, "includeDebugSnapshot": false } ``` `scenario` 至少包含:`continuation`、`rewrite`、`description`、`planning`、`extraction`、`validation`、`consistency_check`、`ner_preview`、`full_parse`。 ### 5.2 四层上下文 | Layer | 内容 | 缓存策略 | 可省略性 | |---|---|---|---| | Layer 0 当前输入 | 用户当前意图、目标文本、目标章节、目标 Block revision | 不跨请求缓存 | 不可省略 | | Layer 1 近邻正文 | 当前章节、相邻 Block、章节目标、已确认规划项 | 可按章节和 revision 缓存 | 续写、改写、描写不可省略 | | Layer 2 作品事实 | 正式局域知识、Narrative State、角色关系、事件时间线 | 可按 work watermark 缓存 | 一致性检查和规划不可省略 | | Layer 3 授权全局资料 | 被授权全局知识库摘要、体裁规则、平台规范 | 可按授权策略版本缓存 | 可按场景省略,但不能越权 | Token Budget 处理顺序: 1. 先保留输出预算。 2. Layer 0 必须完整保留。 3. Layer 1 优先于 Layer 2,Layer 2 优先于 Layer 3。 4. 超限时先摘要化低优先级资料,再截断;不得丢失来源引用。 5. 被省略资料必须进入 `omittedSources`,写明原因:`token_budget`、`not_authorized`、`stale_projection`、`low_confidence`、`not_relevant`。 ### 5.3 场景注入矩阵 | 场景 | 必须注入 | 可以省略 | |---|---|---| | 续写 | Layer 0、Layer 1、核心 Layer 2、已授权且相关的 Layer 3 | 低相关全局资料、远距离章节摘要 | | 改写 | Layer 0、目标 Block revision、局部上下文、风格约束 | 远距离时间线 | | 描写 | Layer 0、目标实体/地点、风格约束、相关局域知识 | 与描写无关的事件链 | | 规划生成 | 作品方向、章节规划、Narrative State、相关实体关系 | 当前正文全文 | | 提取 | 来源文本、来源快照、MetaSchema | 全局资料,除非提取规则依赖它 | | 校验 | 待审草稿、当前 Canonical、相关关系和事件 | 与冲突无关的风格规则 | | 一致性检查 | 正式正文、正式知识、规划项、时间线/因果图 | 未确认草稿 | | NER Preview | 当前文本和局部 MetaSchema | 正式检索上下文 | | Full Parse | 章节文本、章节边界、MetaSchema、parse job 信息 | 其它章节全文,除非用于跨章冲突检查 | ### 5.4 响应合同 ```json { "contextId": "string-id", "scenario": "continuation", "layers": [ { "layer": "L1", "tokenCount": 3200, "sourceRefs": [ { "sourceType": "block", "sourceId": "string-id", "revision": 12 } ] } ], "omittedSources": [ { "sourceType": "global_knowledge_base", "sourceId": "string-id", "reason": "not_authorized" } ], "permissionFilters": { "allowedGlobalKbIds": ["string-id"], "droppedResultCount": 2 }, "projectionState": { "usedOverlay": true, "laggingTargets": ["ragflow"] }, "userExplanation": "参考了当前章节、角色关系和已授权资料;部分资料因未授权未使用。", "auditSnapshotRef": "string-id" } ``` 普通用户只能看到 `userExplanation` 和可理解来源摘要。完整 Prompt、配置快照、Layer 明细、Graph Query Provider 结果和 Token Budget 调试信息只允许管理员、审计或调试接口查看。 ### 5.5 二次权限校验 上下文组装必须做两次权限控制: 1. 检索前:根据当前用户、作品、套餐、访问策略计算 `allowedGlobalKbIds`。 2. 检索后:对每条外部返回再次校验来源、授权状态和元数据完整性。 检索后发现未授权、已撤销、缺 `global_kb_id` 或缺来源对象的结果时,必须丢弃并记录摘要。不得因为结果来自外部检索系统就直接进入 Prompt。 ## 6. Planning Task 与规划候选 ### 6.1 建模口径 Planning Task 是任务类型(`task_type`),不是 S3 阶段必需的独立 Planning Agent。 - S3 阶段:通过现有 Agent 能力执行 `task_type=planning`,输出规划候选。 - S5 后:如果 benchmark、可观测性和产品需求证明规划能力需要独立生命周期,再新增独立 Planning Agent ADR。 - 任何规划候选仍然进入 Shadow,由普通用户确认后才成为正式规划数据或生成上下文。 ### 6.2 Planning Candidate 合同 规划候选至少需要以下语义字段: | 字段 | 说明 | |---|---| | `candidateId` | 规划候选 ID | | `workId` | 所属作品 | | `sectionKey` | 作品设定、章节大纲、世界设定、角色关系、文风检查等分区 | | `taskType` | 固定为 `planning` 或规划子类型 | | `baseItemId` | 被修改的规划项;新建时为空 | | `baseItemVersion` | 生成时读取的规划项版本 | | `sourceSnapshot` | 输入文本、上下文、配置和来源摘要 | | `proposedData` | 候选规划数据 | | `evidence` | 支撑该候选的正文、知识或全局资料来源 | | `riskLevel` | low / medium / high / critical | | `expiresAt` | 过期时间 | 确认规划候选前必须校验 `baseItemVersion`。版本不匹配时返回 stale,不得把旧候选强行写入 Canonical;用户可以重新生成或手动修改后保存。 ## 7. Agent 能力矩阵与 fallback | 能力 | 输入 | 输出 | 可接受 fallback | 不允许 | |---|---|---|---|---| | Generation | 上下文、Prompt、当前文本、New-API 绑定 | Suggestion、可选 Knowledge Draft、Risk Markers | Agent 服务不可用时,可走直连 New-API fallback,但必须标记 degraded 并保留任务记录 | 缺检索硬依赖时静默生成低质量候选 | | Extraction | 来源快照、MetaSchema、正文或候选文本 | Knowledge Draft / Proposal | 旧 NER 只能作为预览或低置信草稿来源,不得自动确认 | 提取失败静默跳过 | | Validation | Draft、当前 Canonical、关系和时间线 | 风险标记、冲突摘要、去重建议 | 可以返回 `needs_review` | 无校验时标记 safe | | Planning | task_type、作品规划上下文、目标 section | Planning Candidate | 可使用通用生成能力执行规划任务 | S3 阶段强制引入独立 Planning Agent | | Retrieval / Context | 查询、授权、场景和 Token Budget | 可解释上下文 | 非图强依赖场景可降级为语义检索 | 越权资料进入上下文 | | Evaluation | 固定数据集、候选输出、评审模型集合 | 评测报告和风险结论 | 单模型临时评审只能做调试,不计正式结论 | 用评测结论替代用户确认 | fallback 对用户的基本反馈: - 生成不可用:提示“AI 助手暂时不可用,可以稍后重试”。 - 检索资料未授权:提示“部分资料当前无权使用,已从本次参考中排除”。 - 来源已变更:提示“源文本已变更,需要重新生成或重新提取”。 - Token Budget 超限:提示“参考资料过多,系统已优先保留当前章节和关键设定”。 普通用户界面不得直接暴露 `Agent`、`Prompt`、`Token Budget`、`Graph Query Provider`、`Layer` 等系统词。 ## 8. Prompt 工程合同 ### 8.1 模板族 Prompt 至少按以下模板族管理: | 模板族 | 用途 | 必含变量 | |---|---|---| | `generation` | 续写、改写、描写、插入 | 作品方向、当前章节目标、目标文本、上下文摘要、文风约束、输出格式 | | `planning` | 作品设定、章节规划、世界设定、角色关系、文风检查 | 规划分区、当前规划项、约束条件、候选数量、输出 schema | | `extraction` | 从正文、候选或导入内容提取知识草稿 | MetaSchema、来源快照、目标 domain/scope/targetType、输出 schema | | `validation` | 校验来源、冲突、重复和风险 | 当前 Canonical、待审数据、风险等级规则、输出 schema | | `evaluation` | 多模型评审和回归对比 | 评测场景、评分标准、候选输出、参考答案或参考证据 | ### 8.2 激活前要求 Prompt 新版本激活前必须满足: - 变量结构完整,不能依赖运行时拼接隐式变量。 - 输出格式明确,能被后端解析或人工审阅。 - 禁止直接要求 AI 写 Canonical。 - 关联至少一个可回归评测场景,或者标记为临时实验版本。 - 激活、停用、回滚都有审计记录。 Prompt 工程的质量闭环是:模板版本 -> 固定评测集 -> 多模型评审 -> 聚合结论 -> 人工复核 -> 激活或回滚。不能只靠一次手工试跑决定上线。 ## 9. New-API 审计字段白名单 Muse 不复制 New-API 的成本账本,也不持久化 New-API token 明文。Muse 可以保存的任务级摘要字段: | 字段 | 说明 | |---|---| | `newApiBindingId` | Muse 侧 New-API 绑定引用 | | `newApiRequestId` | New-API 返回的请求引用或 trace | | `modelAlias` | 模型别名或逻辑模型名,不作为供应商路由权威 | | `inputTokenCount` / `outputTokenCount` | 任务级 usage summary | | `latencyMs` | 调用耗时 | | `finishReason` | 正常结束、长度截断、内容过滤、错误等 | | `errorCode` / `errorMessage` | 脱敏错误摘要 | | `promptVersionRef` | Prompt 版本引用 | | `agentConfigRef` | Agent 配置引用 | | `contextSnapshotRef` | 上下文摘要引用 | 禁止保存: - New-API token 明文。 - Prompt secret。 - 模型供应商成本明细作为 Muse 权威账本。 - 未脱敏的完整请求头。 - 普通用户不可见的系统配置全文,除非走管理员审计视图并受权限控制。 ## 10. Risk Routing ### 10.1 风险等级行为表 | riskLevel | 系统行为 | 是否允许自动确认 | |---|---|---:| | `low` | 展示轻量提示,允许用户正常确认 | 可允许 | | `medium` | 明确展示风险和来源,要求用户显式确认 | 不建议自动确认 | | `high` | 阻止批量自动确认,要求用户逐项处理或重新生成 | 否 | | `critical` | 阻止确认进入 Canonical;要求重新生成、人工修改或管理员排查 | 否 | 生成链路最多自动重试 2 次。两次后仍为 high / critical 时,不继续循环重试,必须给出失败状态、替代候选或人工处理入口。 用户手工编辑正文时,Risk Routing 只能标记风险、生成待审草稿或提示重新提取,不得自动改写用户正文。 ### 10.2 与待审层的关系 - 风险标记属于 Shadow 解释的一部分,不是 Canonical 事实。 - high / critical 不得通过“一键确认全部可确认章节”绕过。 - 风险状态、来源证据和用户决策必须进入 Archive 或审计摘要,便于后续追溯。 ## 11. Knowledge Draft 字段合同 Knowledge Draft / Proposal 至少需要以下语义字段: | 字段 | 说明 | |---|---| | `id` | Draft / Proposal ID | | `workId` | 所属作品 | | `proposalType` | create_entity / update_attribute / add_relation / update_narrative_state / planning_update | | `sourceKind` | block / suggestion / parse_job / planning_candidate | | `sourceRefId` | 来源对象 ID | | `sourceBlockRevision` | 来源 Block revision,适用时必填 | | `sourceContentHash` | 来源内容 hash | | `evidence` | 支撑该草稿的证据数组 | | `proposedData` | 拟写入数据 | | `currentData` | 当前 Canonical 快照 | | `riskLevel` | low / medium / high / critical | | `suggestionId` | 生成链路中关联 Suggestion | | `parseJobId` + `chapterId` | Full Parse 章节确认边界 | | `expiresAt` | 过期时间 | `evidence` 至少包含: ```json { "sourceType": "block", "sourceId": "string-id", "revision": 5, "quoteOrSummary": "证据摘要", "confidence": 0.82 } ``` 缺少来源快照、来源 hash 或章节边界的旧草稿不得 best-effort 硬确认,应作废并重新提取。 ## 12. 全书解析批量返回合同 批量选择和“一键确认全部可确认章节”只是用户操作效率优化。后端仍按章节逐个事务执行,并返回可解释摘要。 建议返回结构: ```json { "parseJobId": "string-id", "summary": { "requestedChapterCount": 12, "succeededChapterCount": 10, "failedChapterCount": 2 }, "chapters": [ { "chapterId": "string-id", "status": "succeeded", "acceptedProposalCount": 18, "archivedProposalCount": 18, "outboxEventCount": 6, "retryable": false }, { "chapterId": "string-id", "status": "failed", "failureCode": "CHAPTER_BATCH_CONFLICT", "failureReason": "本章存在冲突草稿,需要逐项处理", "retryable": true } ], "retryableChapterIds": ["string-id"] } ``` 失败章节不得回滚已成功章节;也不得只返回一个全局错误让用户无法定位。 ## 13. 一致性检查结果结构 一致性检查是主动质量工具,不是强制审批。返回结果至少包含: ```json { "checkId": "string-id", "workId": "string-id", "issues": [ { "issueId": "string-id", "issueType": "timeline_conflict", "severity": "high", "title": "角色到达地点的时间冲突", "description": "第 12 章和第 14 章对同一事件时间顺序描述不一致", "locations": [ { "chapterId": "string-id", "blockId": "string-id", "revision": 8 } ], "relatedObjects": [ { "type": "knowledge_entity", "id": "string-id" } ], "evidence": [ { "sourceType": "graph_provider", "sourceId": "string-id", "summary": "证据摘要" } ], "suggestedActions": [ "修改第 14 章事件描述", "更新角色时间线" ] } ] } ``` 严重程度使用 `low` / `medium` / `high` / `critical`。检查结果只提示、定位和解释风险,不自动写正文、规划项或知识。 ## 14. 质量评测聚合算法 ### 14.1 多模型评审输入 正式 Evaluation Run 至少绑定: - 评测集版本。 - Prompt 版本。 - Agent 配置版本。 - 上下文策略版本。 - 全局知识库和访问策略版本。 - New-API 绑定摘要。 - judge model set。 ### 14.2 加权中位数 + 分歧惩罚 每个评审模型返回 `score`、`confidence`、`rationale` 和结构化问题列表。聚合时: 1. 按模型可信度、场景适配度和历史稳定性计算权重。 2. 用加权中位数作为基础分,降低极端模型输出影响。 3. 计算分歧度,例如四分位距、最大最小差或高低分阵营差。 4. 根据分歧度扣减置信度或最终分。 5. 输出三态结论:`pass`、`needs_human_review`、`fail`。 聚合结果必须保留: | 字段 | 说明 | |---|---| | `baseScore` | 加权中位数基础分 | | `disagreementPenalty` | 分歧惩罚 | | `finalScore` | 最终分 | | `confidence` | 聚合置信度 | | `verdict` | pass / needs_human_review / fail | | `judgeBreakdown` | 各模型得分摘要 | | `failureReasons` | 失败或需复核原因 | 评测结论只能用于改进 Prompt、Agent、上下文策略和回归风险判断,不替代普通用户对正文、规划和作品知识的确认。 ## 15. 默认超级管理员初始化 Sa-Token 引入后,系统需要可审计的默认超级管理员初始化,但不能交付明文默认密码。 目标合同: - 初始化只允许在安装、首启或明确的系统管理命令中执行。 - 初始化必须幂等:已存在超级管理员时不得重复创建或覆盖密码。 - 凭据交付只能使用一次性 bootstrap token、临时密码哈希、控制台一次性输出或等价安全机制。 - 首次登录必须强制改密或完成凭据轮换。 - 初始化行为必须写审计日志,记录时间、来源、操作者或系统服务身份。 - 日志、接口响应和文档不得包含明文默认密码。 错误处理: | 场景 | 行为 | |---|---| | 超级管理员已存在 | 返回已初始化状态,不改写凭据 | | bootstrap token 过期 | 拒绝初始化,要求重新生成 | | 初始化部分失败 | 回滚用户/角色绑定或进入可重试失败状态 | | 无安全凭据来源 | 拒绝创建默认账号 | ## 16. 与 doc/dev 的关系 `doc/dev/00-09` 仍负责研发管理基线、阶段依赖、验收门禁和证据包。本文件只把其中已经属于“目标设计合同”的内容沉入 `doc/design-docs`。后续如果 `doc/dev` 再出现新的设计合同,应先判断: 1. 是否属于产品/架构/API/Schema/流程目标设计。 2. 是否已有正式设计 owner。 3. 是否只是阶段门禁或证据要求。 只有第 1 类和第 2 类才需要进入 `doc/design-docs`;阶段门禁和证据要求继续留在 `doc/dev`。