docs(tasks): FIX-2 for #188 — allow word-bounded status/field rules in _strip_pl9_user_engineering_markers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
This commit is contained in:
2026-11-11 17:07:53 +08:00
co-authored by Claude Opus 5.5
parent e491b7b054
commit fa5beae764
@@ -0,0 +1,31 @@
# FIX-2:R4 允许改 `_strip_pl9_user_engineering_markers`(#188,2026-11-11)
Claude 答复(验收方的任务书修正,不是产品裁定):原任务书第四节第 5 条把 `_strip_pl9_user_engineering_markers` 列为不改,这是任务书的错——它在完整导出里被调用两次(`_sanitize_pl9_public_markdown` 末尾、`_sanitize_pl9_ai_density_markdown`),不改它 R4 的验收第 4–6 条做不到。现放开,范围如下。
## 允许改的
只改该函数 `replacements` 表里这两类条目:
1. **状态词**:`parameter_sensitive / unverified`、`parameter_sensitive`、`partial_verified`、`pyjhora_behavior_only / not_multiengine_parity`、`pyjhora_behavior_only`、`restricted_or_unclosed`、`not_applicable`、`blocked_and_conflict_fields_cannot_generate_final_predictions`、`blocked`、`profile_sensitive`。
- 映射改成与原任务书第四节同一张 `STATUS` 表(参数敏感 / 阻塞 / 待核对 …)。只保留一份表,两处引用同一常量,不得复制第二份。
- 表里没有的词按原任务书第四节的规则处理,不得自创新词;遇到原任务书没覆盖的词,停下选需拍板。
2. **字段名类**:`profile` / `Profile`、`status` / `Status`、`source_path`、`schema`、`audit`、`producer` / `Producer`。
- 改为只在独立词上替换:正则 `(?<![A-Za-z0-9_])…(?![A-Za-z0-9_])`,不用 `str.replace`。
- 结果:`functional_profile`、`profile_source`、`blocked_step`、`bphs_exception_profile` 原样保留;独立的 `profile` 仍按原词替换。
## 仍然不改
- 该函数里其他所有条目(标题改名、`Applicable … Yogas`、Tajika、`annual_tajika_pack`、`未返回`、星宿名表等)和 `translate_zh_glued_phrases` 调用。瑜伽表名是 #189 的范围。
- `_render_pl9_user_markdown`、`references/**`(含 `references/product_runtime_contract.md`)。
- 原任务书其余“不要碰”照旧。
## 验收补充
1. 原 R4 单元测试(验收第 4 条)对两条路径都跑一遍:单独过 `_sanitize_pl9_public_markdown`,以及过完整导出(含 `_sanitize_pl9_ai_density_markdown`)。断言逐字相等。
2. 加一条测试:独立的内部工程词(如单独一行的 `producer`、`schema`)仍被替换,证明过滤没有被放松。
3. 原 R4 真实报告第 5、6 条在两张公开盘的完整导出上通过。
4. 两张盘中英文完整报告重新渲染,PROGRESS 列出该函数改动前后各条目的原值/新值。
5. `pytest tests` 全量跑完,失败项逐条对照 staging 基线。
不得自行写“产品决定/裁定”。
不得修改或删除既有断言来让测试通过;确需修改必须写原值/新值/原因,并在 PROGRESS 里逐条列出。