返回 Bug 清单
BUG-0398project-13中已修复backend-logic

占位符 token 从未在解析器中注册且全链路无校验,导致花括号原样显示给用户

发现:2026-10-03验证:2026-10-09置信度:90%

症状

用户在题目里看到 "蛟龙集团的{{PARENT_COMPANY}}作为承兑人在汇票上签章",花括号直接暴露在产品界面上。

根因

题库 13 道题使用 {{PARENT_COMPANY}}(18 处)与 {{CHILD_COMPANY}}(25 处),但 SymbolResolver 从未注册这两个 token,resolve() 的设计是「未知 token 原样保留」。更根本的是整条链路(题库写入、服务启动、接口响应)都没有任何校验会提示「这个 token 解析不了」,于是缺陷可以长期潜伏。

修复方案

①注册 PARENT_COMPANY / CHILD_COMPANY 及其 _NAME/_SHORT/_ID 变体,母公司取 parent_company_id 的指向(未配则第一个启用公司),子公司取第一个与母公司不同的启用公司;②为每家公司另注册 PARENT_OF_<别名|id> 与 CHILD_OF_<别名|id>;③在 resolve() 里加锚点预处理,把「{{COMPANY_X}}的{{PARENT_COMPANY}}」改写成 X 专属 token(否则会取全局默认母公司,当默认值恰为 COMPANY_A 时产生「蛟龙集团的蛟龙集团」的自我指涉);④新增 PlaceholderHealthChecker(@Order(90)) 启动自检,扫描全库列出未注册 token 与影响题数,只告警不阻断启动。

错误签名

API 响应含字面量 "{{PARENT_COMPANY}}";SymbolResolver 只注册 COMPANY_/CITY_/INDUSTRY_/PERSON_ 前缀;resolve() 对未知 token 原样返回

技术信息

来源项目

project-13

涉及文件

backend/src/main/java/com/project-13/service/SymbolResolver.java, backend/src/main/java/com/project-13/config/PlaceholderHealthChecker.java

标签

占位符, 无校验, 静默外露, 自我指涉, project-13...