fix(glossary): 绑定 QA identity 与人工 override
bat-rust / Build and test Rust (push) Canceled after 0s
bat-rust / Build and test Go API (push) Canceled after 0s

This commit is contained in:
2026-09-09 00:25:49 +08:00
parent 0275a890bc
commit 68c6c91b1e
22 changed files with 844 additions and 92 deletions
+24 -5
View File
@@ -89,7 +89,23 @@ bat i18n set \
--translated-text '中文文本'
```
也可以使用 `--translated-file` 读取 UTF-8 文本。需要复核单条内容时:
也可以使用 `--translated-file` 读取 UTF-8 文本。
如果译文触发 blocking Glossary QA,需先从 diagnose/任务结果取得当前
`qa_identity`,并与 reviewer、reason、provenance 一起提交;系统不会根据 workbench
中旧的 QA 自动补填:
```bash
bat i18n set \
--translation-file /tmp/bat-workbench.json \
--translation-id <text-unit-id> \
--translated-text '人工确认的译文' \
--glossary-qa-identity <qa-identity> \
--glossary-reviewer operator \
--glossary-reason '人工确认术语偏离' \
--glossary-provenance workbench
```
需要复核单条内容时:
```bash
bat i18n get \
@@ -166,7 +182,8 @@ Glossary V1 是 Rust `bat` 持有的独立项目级 SQLite 资产,默认位于
`BAT_GLOSSARY_PATH``[translation.worker].glossary_path` 指定。worker 只把
`approved` term 转成 provider-neutral constraints,并在 TM 复用、provider 返回
和人工工作台/任务回写时执行相同的确定性 QA。冲突或不符合推荐/允许译法的结果会
阻止自动完成;必须提交带 reviewer、reason 和 provenance 的显式 override。
阻止自动完成;必须提交带当前 `qa_identity`reviewer、reason 和 provenance 的显式
override。
常用 Glossary 操作:
@@ -303,7 +320,9 @@ Rust `translation.tasks` / `translation.handoff`,不在 Go 侧维护状态。
`translation.task.update`。人工校对流程提交译文时必须使用 `status=completed`
并为每个 `translation_results[]` 提供 `unit_id``source_text`
`translated_text`Rust 会用当前 `official-textunit-index.json` 校验 unit、
source text、destination 和 archive entry 后再落库。
source text、destination 和 archive entry 后再落库。blocking Glossary QA 还必须提交
与当前 QA 完全相等的 `glossary_override.qa_identity`;旧或缺少 identity 的 override
不会授权。
`POST /admin/control/translation-worker-run` 会触发 Rust 侧
`translation.worker.run`,请求字段为 `provider``fixture_path`
@@ -320,8 +339,8 @@ source text、destination 和 archive entry 后再落库。
release,校验工作台与当前 TextUnit 索引的 source/location 一致后,写入已有支持
范围内的 TextAsset、TypeTree string field 和 managed-reference string field
patch。校验通过后才原子切换 `localized/current`,并在 release manifest 中记录
源/目标 BLAKE3、字节数、patch kind、TextUnit、provider、review 和 rollback
信息。ZIP 内 bundle 不会被静默改写。
源/目标 BLAKE3、字节数、patch kind、TextUnit、provider、review、发布时重新计算的
Glossary QA/override 和 rollback 信息。ZIP 内 bundle 不会被静默改写。
使用人工编辑的工作台发布:
+10 -3
View File
@@ -287,8 +287,10 @@ offset 和 error。TypeTree-covered managed reference 字段会进入结构化
`status=completed` 时额外提交 `provider``provider_run_id`
`translation_results[]`,每个结果必须包含 `unit_id``source_text`
`translated_text`;结果也可以提交完整的 `glossary_override``reviewer`
`reason``provenance``confirmed_unix_seconds`),用于人工确认 Glossary
blocking deviation。Rust 会用当前 `official-textunit-index.json` 校验 unit、
`reason``provenance``confirmed_unix_seconds` 和当前 blocking QA 的
`qa_identity`),用于人工确认 Glossary blocking deviation。`qa_identity` 必须与
Rust 重新计算的当前 QA 完全相等;缺失或过期的 override 不授权。Rust 会用当前
`official-textunit-index.json` 校验 unit、
source text、destination 和 archive entry 后再落库。因此 worker 或人工校对流程
消费 handoff 后,bat-api 可通过 `translation.tasks` 查询单项任务,也可通过
`translation.handoff` 获取完整 job/unit/provider run 状态。`translation.handoff`
@@ -326,7 +328,9 @@ Glossary 只把 `approved` term 发送为 provider constraints。worker 会在 t
复用前、provider 返回后、人工 `translation.task.update` 和 workbench publish 前执行
同一套确定性 QA;冲突或未使用推荐/允许译法的结果不会自动完成或发布。允许但非推荐译法
产生 warningblocking deviation 必须在对应结果中提交 `glossary_override`,并包含
`reviewer``reason``provenance` 和确认时间。系统不会在译文生成后做静默字符串替换。
`qa_identity``reviewer``reason``provenance` 和确认时间。Glossary 定义变化会
只使受影响 QA 的旧 override 失效;无关术语变化不会改变该 QA identity。系统不会在
译文生成后做静默字符串替换。
### localized
@@ -351,6 +355,9 @@ Glossary 只把 `approved` term 发送为 provider constraints。worker 会在 t
`patch_manifest_path``patch_manifest_available`
`patch_manifest_matches_release``patch_file_count`
`patch_text_asset_operation_count``rollback_previous_current_target`
每个 localized patch operation 的 manifest metadata 记录发布时重新计算的
`glossary_qa`(包括 `qa_identity`)及对应 `glossary_override`,不会复用 workbench
中已经过期的 QA 快照。
### catalog
+1 -1
View File
@@ -117,7 +117,7 @@ Rust `bat` 已提供独立项目级 SQLite TM,记录 raw source/hash、完整
### G-013Glossary V1 已实现,协作视图仍缺失
Rust `bat` 已提供独立项目级 `glossary.sqlite`term/alias/recommended/allowed/category/priority、全局与 TextUnit scope、source history、approved review、冲突诊断、provider-neutral constraints 和确定性 QA 均由 Rust 持有。trusted TM 复用会先经过 Glossary QAprovider、TM、人工 task/workbench 结果都记录 QAblocking deviation 必须显式提交 reviewer/reason/provenance`translation.glossary.*` 已通过 `bat.sock` 暴露,Go 仅提供鉴权后的 typed forwarding。剩余缺口是完整 Web 术语协作视图和更丰富的导入/搜索能力。
Rust `bat` 已提供独立项目级 `glossary.sqlite`term/alias/recommended/allowed/category/priority、全局与 TextUnit scope、source history、approved review、冲突诊断、provider-neutral constraints 和确定性 QA 均由 Rust 持有。trusted TM 复用会先经过 Glossary QAprovider、TM、人工 task/workbench 结果都记录 QAblocking deviation 必须显式提交与当前 QA 精确绑定的 `qa_identity` 及 reviewer/reason/provenance。localized publish 会把发布时重算的 QA 写入 manifest`translation.glossary.*` 已通过 `bat.sock` 暴露,Go 仅提供鉴权后的 typed forwarding。剩余缺口是完整 Web 术语协作视图和更丰富的导入/搜索能力。
### G-014:完整 Provider 扩展体系未实现