diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 88eba86..8e4485d 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -211,7 +211,7 @@ Scheduler 的独立单工作线程执行 Maintenance,不占学习、模型探 ## M3 persona -2026-10-10 的产品默认改为 `all_manual`。M3 persona 的整版有依据门槛未达到,先让管理员查看逐句依据与检查结果后确认;检查通过不再默认自动发布,句子恢复后仍未通过的候选拒绝。初始模板、管理员直接编辑和回滚仍是明确的发布操作。`DEFAULT_PUBLISH_MODE` 同时用于数据层缺省值和设置请求模型;`PUBLISH_MODES` 继续接受三种方式,不靠枚举顺序定义默认。 +2026-10-10 的产品默认改为 `all_manual`;#61 的 persona 改进及 #130 的手写句规则合入后,默认仍为全部人工确认。管理员查看逐句依据与检查结果后确认,检查通过本身不触发默认自动发布;初始模板、管理员直接编辑和回滚仍是明确的发布操作。`DEFAULT_PUBLISH_MODE` 同时用于数据层缺省值和设置请求模型;`PUBLISH_MODES` 继续接受三种方式,不靠枚举顺序定义默认。 迁移 020 先补齐缺失的旧隐式发布方式,再只把 `small_medium_auto` 且从无管理员 `persona_settings_saved` 操作记录的值改为 `all_manual`。记录只要求 `actor=admin` 与动作匹配,任何字段的保存都保护管理员原选择;正文编辑、自动生成和其他设置操作不算 persona 设置修改。迁移不修改版本、已接受尝试或其检查/设置快照。待确认数量复用版本列表的 `status=pending` 过滤计数 `total`,唯一索引限制最多一个;没有新增宿主通知路径。 @@ -223,38 +223,66 @@ Scheduler 的独立单工作线程执行 Maintenance,不占学习、模型探 ```mermaid flowchart LR - A[有效自我认知记忆] --> B[确定性选材与依据快照] - B --> C[persona_generate] - C --> D[确定性检查与 persona_check] + A[有效自我认知记忆与当前手写条目] --> B[确定性选材、依据与出处快照] + B --> C[persona_generate v21] + C --> W[独立手写审查:仅许可删除] + W --> D[确定性预筛与分批事实检查 v34] D --> R{逐句检查} - R -->|有问题| S[仅问题句修复一次] - S --> T[只复查修改句;仍有问题则删句] - T --> U[全文确定性检查] - R -->|全通过| E{检查与发布设置} + R -->|有问题| S[确定性选择完整绑定记忆或删句] + S --> T[复查替换句;事实通过后独立评程度] + T --> U[删去失败替换并做全文确定性检查] + R -->|全通过| Q[独立程度判定 v1] + Q --> E{检查、程度覆盖与发布设置} U --> E - E -->|失败| F[拒绝,保留当前版] + E -->|失败或全自动程度无效| F[不发布,保留当前版] E -->|需要确认| G[待确认,保留当前版] E -->|自动发布| H[新当前版,旧版转历史] G -->|管理员确认及版本核对| H ``` -选材要求涉及 self 且说话人 self 或立场为设定,排除遗忘/删除;代码先从最新 `initial_setting` 版本读取模板原句,为仍有效的模板依据预留预算,再按原排序选其余记忆;两者共同受 6000 token 限制。模板任一依据失效或未选入时,整句记入 `material.omitted_template_sentences`;有效原句保存在 `locked_sentences`,不从 previous 重建事实。仅锁定有记忆绑定的设定句;首次模板中的名字介绍与空背景占位句不重复放入后续候选,名字保留在角色设置材料中,首次正文不变。模型生成材料排除锁定句所用的依据,代码在生成结果前拼接原文。每条附日期、入口类型、立场和最早一条/最近三条来源摘录(各最多 300 token),递归来源按消息及日期去重。上一版不充当事实来源。生成先检查句子依据、800 字上限与残留编号,300 字下限只警告;模型检查覆盖每句的支持、虚构、监管违规、单日依据场景限定,并判小/中/大。管理员手写句被删改时确定性覆盖为大。直接编辑只做确定性检查,原样句保留原出处,新增或改写句标为管理员。回滚从已发布版本复制正文与句子到新版本,保留旧检查与材料,并重新记生成时间;旧依据失效仍可见。 +选材要求涉及 self 且说话人 self 或立场为设定,排除遗忘/删除;代码先从最新 `initial_setting` 版本读取模板原句,为仍有效的模板依据预留预算,再按原排序选其余记忆;两者共同受 6000 token 限制。模板任一依据失效或未选入时,整句记入 `material.omitted_template_sentences`;有效原句保存在 `locked_sentences`,不从 previous 重建事实。仅锁定有记忆绑定的设定句;首次模板中的名字介绍与空背景占位句不重复放入后续候选,名字保留在角色设置材料中,首次正文不变。模型生成材料排除锁定句所用的依据,代码在生成结果前拼接原文。每条附日期、入口类型、立场和最早一条/最近三条来源摘录(各最多 300 token),递归来源按消息及日期去重。上一版不充当事实来源。生成先检查句子依据、800 字上限与残留编号,300 字下限只警告。直接编辑只做确定性检查,原样句保留原出处,新增或改写句标为管理员;回滚从已发布版本复制正文与句子到新版本,保留旧检查与材料,重新记生成时间,手写条目的引入时间仍沿原出处追踪。旧依据失效仍可见。 `admin.py` 的路由 lifespan 在服务 Store/Gateway 建立后创建 `PersonaJobs`,退出时在线程中等待执行器关闭,然后才关闭底层资源。任务先在短写事务核对当前版本、排除已有 queued/running 任务、记录请求和冻结设置,再提交单线程执行器。HTTP 请求不等待模型。`persona_attempts` 持久保存状态、材料、输出及结果;读取接口只投影安全的任务元数据,生成输出就绪后显示 checking。服务启动把未完成任务记为 interrupted 失败,不自动重试。数据层同步生成也走同一任务准入,避免与管理请求并行生成。 -提示词映射 `PROMPT_VERSIONS` 使用生成 v10、检查/复查 v14 与专用修复 v9(保留旧版本),恢复新增 `persona_sentence_repair` 与 `persona_recheck` 用途。生成与检查按实质分句核对人物、动作、事件日期及完成状态,禁止借用别的分句补齐关系。生成 v10 不再混入修复任务,也不要求输出 `evidence_note`;用独立短提示词提炼通常 3—6 个核心认识,非硬截断上限,全部实际生成句仍逐句检查。先前版本的证据笔记仅是历史原始输出,从未作为独立检查证据。检查输入先排列原话及其归属,再排列记忆摘要和候选,检查 v14 明确 check 必须核对所有事实,只有 degree_only 可返回空判定;保留逐分句短引与结论,精简重复说明,明确关系存疑就判不支持,不反复寻找可使候选成立的解释。每行必须有 `persona_kind`;`state/task/instruction` 即使 supported=true 且 violations=[] 也判为问题。后续事实批次仍核对监管,历史日期不豁免进度/待办。初检仍覆盖每句;检查输入用 `evidence_refs` 逐句绑定共享的 `evidence_by_ref` 去重池,只包含所引依据;模板仅附对应原句以核对设定口吻,不重复传整份旧背景。自动句另按完整分词检查第三人称性别代词及第二人称代词,命中作为句子问题进入同一修复/复查路径,不盲目替换。`_surface_issues` 在不足两个来源日期时先要求 `BOUNDED_SCENE` 的明确当次/日期限定,与逐片段证明使用同一规则;修复选项在模型调用前也执行。另拦截明确的惯常措辞和无当次限定的句首条件式;初检与复查均执行,模型的 `scene_qualified=true` 不能覆盖。手写和模板原文不改;设定不受单日措辞约束;非设定自动句中的相对日历时间也按完整分词及相邻词组合检查,不从请求日期推算事件日期,也不命中“体现在”中的子串。该规则不证明语义蕴涵,也不把整句日期并集当成每个分句的独立支持。检查输入显式给每个候选 `index`,包含模板与手写句;复查子集使用本次局部编号,模型错号不自动重排。`_bound_source_issues` 只读取本句对应 ID/修订的证据:全为游戏入口时要求游戏/联机限定,原话有明确现实/线下范围时允许保留同一范围;不据入口猜测现实事件的世界归属。肯定的“……完/完成”结果断言(包括无“了”的写法)需本句原话中同一谓词的完成措辞,其他分句的否定或偏好词不能豁免此检查,摘要不能覆盖原话;没有消息摘录的既有记忆才回退正文。按分词边界排除“完整/完全/完善”,能力、假装和比较否定范围不按已完成结果拦截。这是保守的必要表面条件,不是蕴涵或否定、人物、完成状态的语义证明,仍由逐句模型检查核对。严格校验每个布尔值、序号与数组长度。句序完整可定位的自动句若缺失有效判定,代码将其标为不支持并送该句修复,不默认为通过;句序不明或保护句的格式损坏仍拒绝整版。原始损坏判定保留在批次记录中。 `_check_payload` 显式提供 `role_name` 与按逗号/分号划出的 `clauses` 核对片段。自动非设定句的检查输出逐片段给 `evidence[{ref,source_index,quote_index}]`、支持与场景结论。代码按原文逗号/分号提供 `quote_spans`,完整来源仍作为上下文;选择后还原为 `quote`,保留编号与原始输出。兼容旧的逐字 quote,编号与文字冲突时拒绝,不挑选其中一个。代码核对本句绑定、来源索引、逐字短引及逐片段的独立日期;有原始摘录时不能以摘要补证。一般描述至少两日;单日句必须有当次或事件日期限定。核对片段不等同语法树,引用匹配不等同语义支持,模型仍须核对整句关系。 +现行 `PROMPT_VERSIONS` 为生成 `persona_generate_v21`、检查/复查 `persona_check_v34`;独立程度与手写审查分别使用 `DEGREE_PROMPT_VERSION=persona_degree_v1`、`HANDWRITTEN_PROMPT_VERSION=persona_handwritten_v1`。程度判定计入当前初检或复查,手写审查计入初检,均不另建用途预算。早期生成 v10、检查 v14、专用修复 v9 及 `persona_sentence_repair` 是历史方案,保留的旧提示词与原始输出不代表当前调用路径;证据笔记也不作为独立检查证据。生成通常提炼 3—6 个自动句,非硬截断上限,不输出 `evidence_note`,全部实际生成句仍接受检查。 -检查 v14 允许显式否定短路:`stop_after_failure=true` 仅在整句为 false、已返回焦点为按序前缀且末项为 false 时有效;代码仍逐项校验类型与原编号。余下未查焦点保存在 `unchecked_clause_indices` 与 `short_circuits`,整句只能修复/删除,不能保留。所有保留句仍须覆盖并通过全部焦点,其他 candidate 行不能省略。缺标记漏项、正向缺项和格式错误仍使评测作废;此前无此协议的作废运行不追认。 +事实与全文比较已经分离:所有初检/复查事实批均由 `_fact_payload` 构造,`task=check_facts_and_rules`,移除 `previous` 与 `candidate_text`,首批也不接收旧稿或完整比较稿。逐句 `evidence_refs` 绑定共享的 `evidence_by_ref` 去重池,只含本句当前冻结的依据;模板仅附对应原句核对设定口吻,不重复传整份旧背景。来源原话与归属供事实证明;有来源摘录时,`current_revision_text` 只提供当前范围及更正约束,不能补证原话没有的动作或完成状态。事实通过后,以独立 `task=degree_only` 比较上一当前版 `previous` 与组装稿 `candidate_text`,使用程度 v1,不重新判断事实;事实批中的幅度占位值不用于发布。存在事实拒绝时先修复/删句,再针对最终组装稿判程度;复查后仍删句时按后述规则保守覆盖。 -`_recover_sentences` 先对原文替换选项做确定性预筛,无合格选项记为 `repair_options` 并删除,候选选项和原因留在 `checks.repair_options_rejected`。当前修复不另调用模型,原独立修复分批、阶段及输出预算不再使用;修复后的模型复查计入复查阶段预算。代码按每句绑定的记忆 ID 与修订生成共享的 `replacement_text_by_ref`,每项只列自身的 `allowed_replacement_refs`,原文不按问题句重复铺开:只能选一条非设定记忆的完整单句正文,可去外层空白并补缺失的句号;不抽取消息片段、不切走多句正文的上下文,也不允许任意删字、拼接或自由改写。修复只能选择选项原文或 null,不能新增句子、引用新依据或伪造手写标记;代码选择相应的单条依据重新运行确定性检查,避免其余引用把修复句的日期数抬高。摘录先重新通过 `_surface_issues` 的确定性防护,已知不合格的改写提前记为 `repair_deterministic` 并删除,不再浪费复查。其余摘录仍需模型核对原始来源,不把记忆摘要等同于原话支持。越界改写记录 `stage=repair_extract`、原句和修复稿,`checks.repair_policy=bound_memory_extract_v1` 标记本次合同。模板只允许保留原文或删去,不参与修复。只复查改写句,再组装已通过判定;没有改写句时以显式 `task=degree_only` 复查,只评定最终差异。复查不通过的改写被删去,全文重新做确定性检查;此时不再调用第三次检查,对未获最终差异判定的删句保守覆盖为 large(正文完全未变可为 small,手写保护优先)。所有问题原文、依据、修复与删除原因写入既有 `checks_json`,无需迁移。`checks.model.assembled_from` 说明最终判定组合自初检和复查;初检原文单独保留。 +生成与检查逐分句核对人物、动作、事件日期、活动范围及完成状态,禁止借用其他分句的日期或人物,表态或宣布打算不等于完成,也不因加上日期而成为可保留的待办。每行必须有 `persona_kind`;`state/task/instruction` 即使 supported=true 且 violations=[] 也判为问题,历史日期不豁免进度/待办。`_check_payload` 显式提供 `role_name`、本批局部 `index` 与按逗号/分号划出的 `clauses`。自动非设定句逐片段给出 `evidence[{ref,source_index,quote_index}]`、支持及场景结论;代码提供来源 `quote_spans`,完整来源仍作上下文,选择后还原逐字 quote 并保留编号和原始输出。兼容旧的逐字 quote,编号与文字冲突时拒绝。核对本句绑定、来源索引、逐字短引与每个分句独立的日期;有原始摘录时不能以摘要补证。一般描述至少两日,单日句必须有当次或事件日期限定。核对片段不是语法树,引用匹配也不证明语义蕴涵,模型仍须核对整句关系。 -模型使用对话端点,生成、初检和复查三个用途分别记录用量、耗时、结束原因和推理档位,沿用 chat 暂停、自动恢复与每日 token 上限;暂停/超限记 skipped。生成/初检/复查单次输出上限均为 16000 token,包含服务商计入输出的推理用量;确定性修复不另设模型输出额度。`finish_reason=length` 记为 output_limit,保留原文且不做 JSON 修正重试;初检或复查未完成时整候选被拒绝,生成未完成时保留当前版并记录失败。评测单列输出耗尽调用数及用途,不能把截断当成支持结论。`CALL_TIMEOUTS` 的生成/初检/复查单次请求上限均为 360 秒;确定性修复没有独立模型调用或阶段预算。`_check_all` 由 `_check_batches` 按 `CHECK_BATCH_SIZE=4` 与 `CHECK_BATCH_CLAUSES=2` 控制单批行数和自动证明片段数,并把完整请求限制在 32768 字节;输出截断后按句递归二分,所有子批仍使用原阶段预算。长句分多个证明窗口,每个窗口仍附完整原句、只列本次核对片段,片段序号不重排;设置/手写/模板只检查一次。逐窗口先核对本句依据、原话短引与类型,再按原句取 supported AND、fabricated OR、违规和问题并集,全部窗口通过才可保留。代码不把分片后的文字写进 persona,不给缺少检查的片段默认通过。`window_map` 与 attempts 的用途名 `_windows` 保存原句和片段映射,原始输出完整保留。初检和复查各自共享固定 900 秒阶段预算,单句批同样适用;各批、结构重问、焦点补查、截断拆批与程度判定共用原阶段 `_deadline`,单次请求取自身 360 秒上限与剩余阶段时间的较小值。单批超时可在阶段预算内重试一次,拆分子批共用父批的重试额度;GLM 检查流连续 90 秒无新数据时主动中止并按既有规则重试。HTTP 重试和结构修正均计入原预算,重问或拆批不重置截止时间;该配置随材料与报告保存。已知网关超时摘要归一为尝试级 timeout,评测同时统计调用级和尝试级超时,含未发出 HTTP 就已耗尽阶段预算的情况。每批局部序号先严格核对,再映射回整稿序号;只有首批接收 previous/candidate_text 并判断整稿变化程度,后续 `check_facts_and_rules` 批次不接收整稿、仍查事实和监管,幅度占位值不用于发布决定。仅根对象恰有一个 `answer` 对象时展开一层,并保存 `unwrap_single_answer` 规整记录;不递归解包,不从冲突字段中挑结果。保存全部原始输出与部分失败输出。实际调用数增加,梦境现有网关仍逐调用扣 persona_max_calls,不够时整个尝试保持未发布。全部网络调用在数据库事务之外。发布事务重新核对当前版本 ID、记忆修订/生命周期和来源指纹;确认候选同样复核。冲突返回/记录 conflict,不覆盖管理员刚发布的版本。新的候选取代已有待确认候选;管理员编辑/回滚也清理待确认状态。操作记录与版本或任务状态变更在同一事务提交。 +自动句按完整分词检查第三人称性别代词及第二人称代词,命中进入同一修复/复查路径,不盲目替换。`_surface_issues` 对不足两个来源日期的句子要求 `BOUNDED_SCENE` 的明确当次/日期限定,拦截惯常措辞及无当次限定的句首条件式,修复选项也先执行;模型的 `scene_qualified=true` 不能覆盖。设定保持设定口吻,不受单日措辞约束;非设定自动句的相对日历时间按完整分词与相邻词组合检查,不从请求日期推算事件日期,不命中“体现在”中的子串。模板不改写,依据失效或检查不通过时可整句省去/删除;手写句的去留由下述独立许可处理。 + +`_bound_source_issues` 只读取本句对应 ID/修订的证据:全为游戏入口时要求游戏/联机限定,原话有明确现实/线下范围才可保留同一范围,不据入口猜测世界归属。肯定的“……完/完成”结果断言(包括无“了”的写法)需本句原话中同一谓词的完成措辞,其他分句的否定或偏好词不能豁免,摘要不能覆盖原话;没有消息摘录的既有记忆才回退正文。按分词边界排除“完整/完全/完善”,能力、假装与比较否定范围不按已完成结果拦截。这些是必要表面条件,不是人物、完成状态、否定或语义蕴涵的证明。 + +检查保留否定短路:按序前缀中有效的否定可拒绝整句,未查焦点保存在 `unchecked_clause_indices`、`short_circuits`;省略冗余停止标记的否定前缀会记规整诊断,显式无效标记仍走结构校验。已验证的正向前缀若只缺后续焦点,可只补查该句缺失焦点一次;重复或额外焦点分别校验,已有不利结论不会被后来的正向结果覆盖。已被证据/日期/范围防护拒绝的句子可停止后续窗口。所有最终保留的自动句必须覆盖并通过全部焦点,不能把未查部分默认为支持。 + +初检和复查统一处理 JSON 不能解析、根对象错误、字段缺失、类型/枚举无效、理由缺失、焦点或句子数量/顺序错误:只重问受影响的句、批或程度判定一次,共用原阶段预算,整批重问已覆盖的行不再逐层追加结构重问。仍无效时,句级结论按不支持处理,批级字段损坏影响该批;漏句、多句或乱序只采用能按有效且唯一的句子编号对齐的部分,其余保守拒绝,绝不把错位结论套到别句。程度结构仍无效时标记 `degree_assessment.status=conservative` 并按 large 处理。单纯结构损坏不会使整次事实检查“不完整”;原始错误、重问结果、保守拒绝及已有不利结论均保留在结构诊断中。仅根对象恰有一个 `answer` 对象时展开一层并记录 `unwrap_single_answer`,不递归解包或从冲突字段中挑结果。 + +生成后由 `_review_handwritten` 独立审查每条手写句,`task=handwritten_review`,与初检共用 900 秒阶段预算;生成模型仍须逐字携带原句,代码恢复未获许可而被遗漏或改归属的手写项。审查只允许两种删除许可:后来的有效记忆明确更正同一事实/认识(不同侧面、较弱证据或判断不清均不许可),或原句本身确实规定角色回复行为。代码校验更正记忆在手写之后写入或实际修订、逐字引文及绑定,指令许可须逐字引用该手写原句。证据按请求大小分页,单页必须独立给出完整许可,不合并不同页面来加强许可;无效输出只重问该页一次,仍无效则保留。当前自动流程只实现提议删除,不改写手写句,也不生成替代事实;未获许可的原句继续受保护,普通事实检查不能代替删除许可。 + +手写出处以“版本 ID+该版本 A 引用”追踪,复用 `base_version_id`、`rollback_of` 及 `material.handwritten_changes` 的确切删除映射,校验原句、引用唯一性和保留数量;组装时逐个消费实际保留项并维持同文项的相对顺序。分次加入同文句后只删较早项,剩余项仍沿较晚的引入版本取 `written_at`;回滚沿真正恢复的目标版本追溯。对应不唯一,或历史/删除记录不足以建立可靠对应时,写入时间为未知,不以更正记忆授权删除;句子自身为指令的独立许可不依赖记忆时间。触发条目、依据、动作及理由保存在 `handwritten_changes`,审查与保守保留另记 `handwritten_review`。获准删除强制为 large:`all_manual`、`small_medium_auto` 等待确认,`all_auto` 自动发布并保留可回滚的版本记录。若独立程度判定在结构重问后仍无效,事实及确定性检查通过时,前两种模式按大变化待确认;`all_auto` 拒绝本次候选、保留当前版,下次照常尝试,不新增人工关卡。 + +`_recover_sentences` 使用 `REPAIR_POLICY=first_eligible_bound_memory_v2`:按冻结材料顺序枚举问题句已绑定 ID/修订对应的非设定记忆,只接受完整的单句正文,可去外层空白并补缺失句号,不抽取消息片段、不切去多句上下文、不任意删字、拼接或自由改写。先做确定性及 `_surface_issues` 预筛,并排除仅更换“这次/那次”等指示词的同一失败主张;代码只选择第一个合格选项。没有合格选项就删句,复查失败后也不再试后续选项。每个替换句只绑定被选中的单条依据,不让其他引用抬高日期数;相同替换正文与依据组合去重。模板和手写句均不参与此替换,获准的手写变化只执行删除。 + +修复没有模型调用、独立阶段或输出额度;选择记录保存在 `checks.repair_selections` 与 `outputs.persona_repair_selections`,被筛除的选项及原因保存在 `checks.repair_options_rejected`。只对实际替换句调用 `persona_recheck`,其事实批同样不携带旧稿或全文;全部事实通过后才独立比较最终组装稿的程度。没有替换句时,复查只发送 `degree_only`。复查仍不通过的替换被删去,全文再做确定性检查,不调用第三轮事实检查;对未获最终比较的删句保守覆盖为 large,正文完全未变可为 small,手写删除仍强制 large。所有问题原文、依据、修复与删除原因写入既有 `checks_json`;`checks.model.assembled_from=initial_check_and_recheck` 标明组合来源,初检原文单独保留。 + +模型使用对话端点,实际用途为 `persona_generate`、`persona_check`、`persona_recheck`,分别记录用量、耗时、结束原因和推理档位,沿用 chat 暂停、自动恢复及每日 token 上限;暂停/超限记 skipped。`CALL_TIMEOUTS` 中每次请求均至多 360 秒,`CALL_MAX_TOKENS` 均为 16000 token,包含服务商计入输出的推理用量。`finish_reason=length`/等价输出上限错误记为 output_limit,保留原文,不解析截断片段,也不将它当 JSON 格式错误修正。事实批截断时按句递归二分重试,子批共用原截止时间与父批超时重试额度,已有不利结论保留;单句仍截断或程度判定未完整时不发布候选。生成截断则记录失败并保留当前版;独立手写审查未完整同样不授予发布许可。截断次数、拆批次数与拆批结果分别记录,不把截断当成支持。 + +`_check_batches` 以 `CHECK_BATCH_SIZE=4`、`CHECK_BATCH_CLAUSES=2` 限制单批行数与自动证明片段数,再把含提示词的 UTF-8 JSON 消息材料限制为 32768 字节;超出时继续拆行或焦点。长句每个窗口仍附完整原句与本句完整绑定来源,只列本次核对片段,片段序号不重排;不能再拆的最小事实请求若仍超限,就保守拒绝该句并记 `material_rejections`,不截去证据。设定/手写/模板不拆自动证明窗口。逐窗口按 supported AND、fabricated OR、违规及问题并集组合,全部窗口通过才可保留;不把分片文字写进 persona。`window_map` 与尝试输出的 `_windows` 保存原句/片段映射。 + +初检和复查各自共享固定 900 秒阶段预算;手写审查、各事实批、结构重问、焦点补查、截断拆批及程度判定共用所属阶段 `_deadline`,单次请求取 360 秒与剩余阶段时间的较小值。单批超时可在预算内重试一次,拆批和重问不重置截止时间;阶段预算耗尽或未恢复调用错误仍为基础设施失败。GLM 检查的 SSE 流连续 90 秒没有新数据时主动中止并按既有规则重试;心跳或推理增量等新数据会刷新到达时间,不按总思考时长判停滞。已知网关超时摘要归一为尝试级 timeout,报告保留调用级和尝试级超时,含未发出 HTTP 就耗尽阶段预算的情况;原始输出、部分失败输出、配置及诊断随材料保存。 + +梦境网关仍逐实际调用扣 `persona_max_calls`,不足时本次保持未发布。全部网络调用在数据库事务之外。发布事务重新核对当前版本 ID、记忆修订/生命周期和来源指纹,删除许可所用依据也复核;确认候选同样复核。冲突返回/记录 conflict,不覆盖管理员刚发布的版本。新的候选取代已有待确认候选,管理员编辑/回滚也清理待确认状态;操作记录与版本或任务状态变更在同一事务提交。 `settings_api.py` 只允许管理员通过 `PATCH /admin/api/settings/persona` 修改生成目标、监管要求和发布方式,保存时记录字段名;`GET /admin/api/settings` 返回 persona 设置。任务接受时冻结设置,因此之后的设置修改不影响在途任务、既有当前版和待确认版;确认按该候选保存的检查结果处理。此接口不唤起学习或重新生成。 `persona_context` 在回复准备已有的只读快照中读取当前版正文、生成时间、句子及材料,逐项核对被引用记忆,返回 `version/content/generated_at/needs_update/stale_basis_count`。不读取可能很大的全部自我记忆快照,不调用模型,不改其他分区;失效计数按记忆 ID 去重。管理当前页在同一快照增加失效依据列表。`persona_due` 独立判断至少五条新增/变化,或自生成时刻起经过至少 168 小时且有变化;手动编辑和回滚重新起算,确认不改起点。定期更新调用由梦境整理线接入。 -管理接口、分页、状态枚举与请求字段见 README 的 M3 persona 小节。所有读取使用已有管理员会话,写入还需 CSRF 与同源检查;版本 CAS 冲突返回 409。页面轮询不会触发模型。外部评测冻结输入指纹,保留拒绝候选并单列;双判逐句取不利结论,评分格式与双判规则仍沿用冻结的 persona_scoring_v1;优化线同时运行 persona_v1/persona_v2。新增 proposed/deleted/repaired sentence 及 candidate deletion 比例,分母包括全部生成候选修复前的模板和生成句,失败/超时仍保留在检查点统计中。用途与超时、源码、语料、实际设置进入外部材料,删除记录不被当作最终句子判分;它们作为运行诊断完整保留。 `run_valid` 另行反映运行有效性:任何 429、超时、可重试传输错误、输出耗尽或未完成的模型判定均使该次评测无效,`_incomplete_checks` 从版本检查原文重新计算,旧报告的 complete=true 不能遮蔽缺判定;`incomplete_check_count` 单列,完整的语义拒绝仍是有效质量结果。成功重试不能覆盖原始错误;无效时间线不写完成缓存,完整重跑使用新输出目录。`timeline-progress-*.json` 在每次操作后用 fsync+同目录原子替换保存已完成检查点、原始尝试和调用;BaseException 中断在关闭 Store 与临时数据库清理前再写快照,部分日志永不用于恢复缓存。技术失败在检查点后停止当前时间线和后续案例,报告 `planned_timelines/executed_timelines/unexecuted_timelines` 与已完成/剩余事件数;正常的完整拒绝判定仍继续执行。中断中的在途调用可能没有用量,不能以零用量计。 +管理接口、分页、状态枚举与请求字段见 README 的 M3 persona 小节。所有读取使用已有管理员会话,写入还需 CSRF 与同源检查;版本 CAS 冲突返回 409。页面轮询不会触发模型。外部评测冻结输入指纹,保留拒绝候选并单列;双判逐句取不利结论,沿用冻结的 persona_scoring_v1,同时运行 persona_v1/persona_v2。公开质量门槛为实际变化全部有依据、七类违规为 0;must_reflect、must_not 和程度合理率只作诊断。报告包含 proposed/deleted/repaired sentence、检查拒绝率及候选删句比例;分母包括修复前的模板和生成句,失败/超时仍在检查点统计中。删除记录作为诊断保存,不当作最终句子判分。 + +运行有效性独立于质量,使用 `RUN_VALIDITY_POLICY=retained_incomplete_checkpoints_v2`。调用按检查点的实际 call_ids 归属,只有同一操作预算内恢复成功且检查完整的调用才记 recovered,后续无关成功不能掩盖早先失败。已恢复/未恢复的超时、429、输出截断分别单列;成功拆批的事实截断可记已恢复。对仍不完整的检查点,运行器核对 rejected 候选确未发布、当前版本 ID/正文/句子与之前一致,记为 `unpublished_current_retained` 并继续后续检查点;该检查点内的纯检查截断可记 tolerated。每轮不完整检查点不超过 `INCOMPLETE_CHECK_LIMIT=2` 且均已验证保留当前版时,不因此判整轮无效;超过 2 个或无法验证保留则 `run_valid=false`。这不宽免未恢复的超时、429、传输/调用错误或时间线未执行完整,基础设施失败仍停止当前时间线及后续案例。完整的语义拒绝是有效质量结果。`_incomplete_checks` 从冻结版本重新计算,不信任旧报告的 complete=true;`incomplete_check_count` 与每个检查点的去向单列。 + +用途、源码、语料、实际设置、运行有效性策略、结构重问/保守处理、截断拆批及流停滞诊断进入外部材料。技术未完成的时间线不写完成缓存;允许的不完整检查点可在验证保留当前版后继续完成时间线,缓存仍核对完整指纹及调用结果。需要完整重跑时使用新输出目录。`timeline-progress-*.json` 在每次操作后用 fsync+同目录原子替换保存已完成检查点、原始尝试和调用;BaseException 中断在关闭 Store 与清理临时数据库前再写快照,部分日志不用于恢复缓存。报告列出 `planned_timelines/executed_timelines/unexecuted_timelines` 及已完成/剩余事件数,中断中的在途调用用量可能未知,不能计为零。 ## M3 当前状态(GO 第一步)