From fb58ff25f8041de1dfd6c6dc91a7e18dabe2c426 Mon Sep 17 00:00:00 2001 From: StarAsh042 Date: Sun, 25 Oct 2026 19:00:18 +0800 Subject: [PATCH] =?UTF-8?q?docs(od-01-od-02):=20=E8=90=BD=E5=AE=9E?= =?UTF-8?q?=E4=B8=A4=E9=A1=B9=E5=86=B3=E7=AD=96=E7=9A=84=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E5=BC=BA=E5=8C=96=EF=BC=88tooltip/README/locales=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - OD-01/OD-02 均按方案 A 关闭(维持内存窗口 / 维持启动即清空) - 两节点 tested_db_path tooltip 补默认库启动即清空提示 - 角色节点 character_count tooltip 补窗口语义(内存/重启清零/多实例独立) - README 重复回避段补多实例独立表述 - locales/zh 与代码 tooltip 逐字对齐(28 条,修复存量漂移),locales/en 同步 --- CHANGELOG.md | 8 ++++++++ README.md | 2 +- RollingArtist.py | 2 +- RollingCharacter.py | 7 ++++--- docs/decisions/OPEN-DECISIONS.md | 12 ++++++++++-- locales/en/nodeDefs.json | 4 ++-- locales/zh/nodeDefs.json | 6 +++--- 7 files changed, 29 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 095d571..cd0c01b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ 本文件记录 RollingArtist 的重要变更。格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/), 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 +## [未发布] + +### 文档 + +- **OD-01 / OD-02 决策关闭(均方案 A,2026-10-25 维护者拍板)**:角色回避窗口维持节点实例内存(不持久化到记录库);默认记录库维持「启动即清空」。按决议落实提示强化:两节点 `tested_db_path` tooltip 明示「默认路径的库每次启动会被清空(不跨会话累积),想跨会话保留请指向自己的文件」;角色节点 `character_count` tooltip 明示「重复回避窗口为最近 10 次生成,存于节点实例内存(重启清零、多实例各自独立)」;README「重复回避」段补「多实例各自独立」表述 +- **`locales/zh` 与代码 tooltip 逐字对齐**(28 条同步,修复一处存量漂移:画师节点 `tested_db_path` 的语言包早有启动清理提示而代码没有);`locales/en` 同步更新两条英文 tooltip +- `docs/decisions/OPEN-DECISIONS.md`:OD-01 / OD-02 置 RESOLVED 并补 Resolution 与后续触发条件 + ## [5.1.1] - 2026-10-25 **工程与发布面收敛版本**:Sprint 2 工程增强合入,无运行时行为变化、无节点契约变化(内容即原「未发布」段,按发布纪律定版)。 diff --git a/README.md b/README.md index b21b407..00d4492 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ ganyu_\(genshin_impact\),genshin_impact,1girl,horns 角色节点**不做权重分配**(故无 `weight_*` / `sort_by_weight`);输出**不接受前缀包装**(没有画师那样的 `artists_prefix` 开关);**没有去重模式参数**,改用固定规则的窗口。 -**重复回避**:窗口存最近 10 条输出记录(每条 = 一次生成,可含多个角色),抽取前把窗口内角色名从候选排除,因此 `character_count=3` 相当于「最近 30 个角色内不重复」。窗口在**节点实例内存**里(重启清零);外部脚本可用 `node.reset_recent()` 清空、`node.recent_names()` 查看。窗口吃掉全部候选时退回「允许重复」并打 WARNING。 +**重复回避**:窗口存最近 10 条输出记录(每条 = 一次生成,可含多个角色),抽取前把窗口内角色名从候选排除,因此 `character_count=3` 相当于「最近 30 个角色内不重复」。窗口在**节点实例内存**里(重启清零、多实例各自独立——同一张图放两个角色节点,各避各的);外部脚本可用 `node.reset_recent()` 清空、`node.recent_names()` 查看。窗口吃掉全部候选时退回「允许重复」并打 WARNING。 输出三个:`prompt`、`characters_json`(`[{"name","copyright","top","count","core_tags"}]`)、`tested_count`。 diff --git a/RollingArtist.py b/RollingArtist.py index 195e3c5..adcf2d0 100644 --- a/RollingArtist.py +++ b/RollingArtist.py @@ -266,7 +266,7 @@ class RollingArtist: "advanced": True, "tooltip": "记录数据库(SQLite)路径;留空使用节点目录下的 rollingartist.sqlite。" "已测记录存在这里,更换该路径相当于重置去重进度。" - "默认路径的数据库每次启动会被清理,要跨会话保留请显式指定", + "默认路径的库每次启动会被清空(不跨会话累积),想跨会话保留请指向自己的文件", }, ), }, diff --git a/RollingCharacter.py b/RollingCharacter.py index 3c020b7..010d671 100644 --- a/RollingCharacter.py +++ b/RollingCharacter.py @@ -135,7 +135,7 @@ class RollingCharacter: "max": 10, "step": 1, "display": "slider", - "tooltip": "每次生成的角色数量(1-10),每个角色输出一行。角色是单词条,没有穷举模式", + "tooltip": "每次生成的角色数量(1-10),每个角色输出一行。角色是单词条,没有穷举模式;重复回避窗口为最近 10 次生成,存于节点实例内存(重启清零、多实例各自独立)", }, ), "character_top_ratio": ( @@ -237,9 +237,10 @@ class RollingCharacter: "default": "", "advanced": True, "tooltip": "记录数据库(SQLite)路径;留空使用节点目录下的 " - "rollingcharacter.sqlite(与画师节点分开)。" + "rollingcharacter.sqlite(与画师节点分开)——默认路径的库每次启动会被清空" + "(不跨会话累积),想跨会话保留请把这里指向自己的文件。" "这里只存历史输出记录,更换该路径不会重置“最近 10 条不重复”的窗口" - "(那个窗口在内存里,重启即清零)", + "(那个窗口在内存里,重启清零、多实例各自独立)", }, ), }, diff --git a/docs/decisions/OPEN-DECISIONS.md b/docs/decisions/OPEN-DECISIONS.md index eba5c3e..3349782 100644 --- a/docs/decisions/OPEN-DECISIONS.md +++ b/docs/decisions/OPEN-DECISIONS.md @@ -5,8 +5,8 @@ | Date | ID | Open Item | Related Constraints | Current Leaning | Blocked By | Resolves When | Status | |------|----|-----------|---------------------|-----------------|------------|---------------|--------| -| 2026-10-25 | OD-01 | 角色回避窗口是否持久化(节点实例内存 `deque(maxlen=10)` vs 基于记录库) | 改变角色节点核心语义与输出分布;关联 TD-03;与 OD-02 联动(默认库启动即清空会削弱持久化意义) | 方案 A:维持内存窗口 + tooltip/README 强化表述 | 维护者判断「跨会话回避」是否为真实需求 | 维护者确认后关闭 | OPEN | -| 2026-10-25 | OD-02 | 默认记录库是否引入保留策略(现状:每次启动清空默认路径库) | 影响现有语义、测试与用户预期;关联 TD-04 | 方案 A:维持现状 + 界面/文档强化提示「默认库不跨会话累积」 | 维护者确认用户是否有「累积进度」诉求 | 维护者确认后关闭 | OPEN | +| 2026-10-25 | OD-01 | 角色回避窗口是否持久化(节点实例内存 `deque(maxlen=10)` vs 基于记录库) | 改变角色节点核心语义与输出分布;关联 TD-03;与 OD-02 联动(默认库启动即清空会削弱持久化意义) | ~~方案 A:维持内存窗口 + tooltip/README 强化表述~~ | ~~维护者判断「跨会话回避」是否为真实需求~~ | 维护者确认后关闭 | **RESOLVED(2026-10-25,方案 A)** | +| 2026-10-25 | OD-02 | 默认记录库是否引入保留策略(现状:每次启动清空默认路径库) | 影响现有语义、测试与用户预期;关联 TD-04 | ~~方案 A:维持现状 + 界面/文档强化提示「默认库不跨会话累积」~~ | ~~维护者确认用户是否有「累积进度」诉求~~ | 维护者确认后关闭 | **RESOLVED(2026-10-25,方案 A)** | --- @@ -38,6 +38,10 @@ 出现以下任一证据即重开评估:用户明确反馈「重启后仍希望回避近期角色」;或多实例并用成为常见用法。 +### Resolution(2026-10-25) + +**采纳方案 A**(维护者拍板)。落实内容:`RollingCharacter` 的 `character_count` tooltip 明示「重复回避窗口为最近 10 次生成,存于节点实例内存(重启清零、多实例各自独立)」;README「重复回避」段补「多实例各自独立」表述。方案 B(`dedup_mode=session_db`)留作 v5.2.0 候选,触发条件即上方解锁条件。 + --- ## OD-02 默认记录库是否引入保留策略 @@ -66,3 +70,7 @@ ### 解锁条件 出现以下任一证据即重开评估:用户反馈希望默认库也累积;或 OD-01 选择方案 B(持久化回避天然需要库存活)。 + +### Resolution(2026-10-25) + +**采纳方案 A**(维护者拍板)。落实内容:两个节点的 `tested_db_path` tooltip 均补「默认路径的库每次启动会被清空(不跨会话累积),想跨会话保留请把这里指向自己的文件」;README「记录与去重」段原有表述已足够,未改动。方案 B 触发条件:用户反馈希望默认库也累积,或 OD-01 的持久化回避落地(当前 OD-01 已定方案 A,本条短期不会触发)。 diff --git a/locales/en/nodeDefs.json b/locales/en/nodeDefs.json index 9e67b09..a8dc77e 100644 --- a/locales/en/nodeDefs.json +++ b/locales/en/nodeDefs.json @@ -93,7 +93,7 @@ "inputs": { "character_count": { "name": "Character Count", - "tooltip": "Number of characters generated per run (1-10), one output line each. Characters are single tags, so there is no exhaustion mode." + "tooltip": "Number of characters generated per run (1-10), one output line each. Characters are single tags, so there is no exhaustion mode. The dedup window covers the last 10 runs and lives in node-instance memory (cleared on restart; each instance keeps its own)." }, "character_top_ratio": { "name": "Top Pool Ratio", @@ -133,7 +133,7 @@ }, "tested_db_path": { "name": "Records DB Path", - "tooltip": "Path of the SQLite records database; leave empty for rollingcharacter.sqlite in the node directory (separate from the artist node). It only stores the output history, so changing the path does not reset the \"no repeat within the last 10 outputs\" window (that window lives in memory and is cleared on restart)." + "tooltip": "Path of the SQLite records database; leave empty for rollingcharacter.sqlite in the node directory (separate from the artist node). The database at the default path is cleared on every startup — set an explicit path to keep it across sessions. It only stores the output history, so changing the path does not reset the \"no repeat within the last 10 outputs\" window (that window lives in memory, is cleared on restart, and each node instance keeps its own)." } }, "outputs": { diff --git a/locales/zh/nodeDefs.json b/locales/zh/nodeDefs.json index 934da0c..5f158aa 100644 --- a/locales/zh/nodeDefs.json +++ b/locales/zh/nodeDefs.json @@ -69,7 +69,7 @@ }, "tested_db_path": { "name": "记录数据库路径", - "tooltip": "记录数据库(SQLite)路径;留空使用节点目录下的 rollingartist.sqlite。已测记录存在这里,更换该路径相当于重置去重进度。默认路径的数据库每次启动会被清理,要跨会话保留请显式指定" + "tooltip": "记录数据库(SQLite)路径;留空使用节点目录下的 rollingartist.sqlite。已测记录存在这里,更换该路径相当于重置去重进度。默认路径的库每次启动会被清空(不跨会话累积),想跨会话保留请指向自己的文件" } }, "outputs": { @@ -93,7 +93,7 @@ "inputs": { "character_count": { "name": "角色数量", - "tooltip": "每次生成的角色数量(1-10),每个角色输出一行。角色是单词条,没有穷举模式" + "tooltip": "每次生成的角色数量(1-10),每个角色输出一行。角色是单词条,没有穷举模式;重复回避窗口为最近 10 次生成,存于节点实例内存(重启清零、多实例各自独立)" }, "character_top_ratio": { "name": "人气池占比", @@ -133,7 +133,7 @@ }, "tested_db_path": { "name": "记录数据库路径", - "tooltip": "记录数据库(SQLite)路径;留空使用节点目录下的 rollingcharacter.sqlite(与画师节点分开)。这里只存历史输出记录,更换该路径不会重置“最近 10 条不重复”的窗口(那个窗口在内存里,重启即清零)" + "tooltip": "记录数据库(SQLite)路径;留空使用节点目录下的 rollingcharacter.sqlite(与画师节点分开)——默认路径的库每次启动会被清空(不跨会话累积),想跨会话保留请把这里指向自己的文件。这里只存历史输出记录,更换该路径不会重置“最近 10 条不重复”的窗口(那个窗口在内存里,重启清零、多实例各自独立)" } }, "outputs": {