For agentic workers: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 消除阅读试卷正确答案集中在 A 的问题,并确保在线答题、打印试卷、答案解析使用一致的选项对应关系。
Architecture: 通过共享的、可复现的题组呈现函数控制正确选项位置,移动整个选项对象,保持正确内容及判分依据不变。在线答题和 PDF 使用同一个呈现版本;同时消除生成示例中的首项正确偏置,并处理解析里引用的原选项字母。首期兼容已有题目,不批量改写历史题目或成绩。
Tech Stack: Angular 18、TypeScript、Jasmine/Karma、现有 Parse 阅读接口。
Spec: 本文“调查结论”“目标与约束”是本方案的依据。当前用户请求为先查原因、再制定方案;本文任务均尚未实施。
核查截止:2026-11-15 18:05(Asia/Shanghai)。统计按北京时间自然日筛选 createdAt,不是服务器默认时区。
| 范围 | 阅读题数 | 关联文章/题组数 | 原始顺序正确答案 A/B/C/D | 五题全 A 题组 |
|---|---|---|---|---|
| 11 月 15 日截至核查时 | 105 | 21 | 104 / 1 / 0 / 0 | 20 |
| 11 月 14 日全天 | 110 | 22 | 110 / 0 / 0 / 0 | 22 |
check=true,未标记删除。已单独回查关联文章,确认 21 篇存在。SurveyLog(type=exam) 为 0;该结果仅说明未查到这种线上提交记录,不能据此判断学生未做纸质试卷,也不能证明用户反馈一定来自打印入口。/Users/mac/.local/state/xiaoshu/qa/2026-11-15-reading-answer-audit/,原始题目和线上代码不进入 Git。english-reading.service.ts:153–159 为每道题都生成 check: optionIndex === 0 的示例;fmode-ai.service.ts 将这个示例追加到提示词末尾,并要求严格按结构返回。正式产物 chunk-62Y437QX.js 同样存在 check:m===0。这是强烈的首项示范偏置;本次未做在线模型对照实验,因此不能把模型内部因果量化为已独立证明。createQuestions() 检查数量、题目重复、四个不同选项和唯一正确项,然后把 item.options 按原顺序保存。线上网关 readingCreate() 也按传入数组保存,没有补做位置分散。reading-pdf.component.ts:65–68 取回题目后直接 questions.set(questions);模板把数组第 0 项显示成 A。正式产物 chunk-NPVFXZFL.js 行为相同。因此数据库第一项正确会稳定成为打印的 A。chunk-KSDV6NJ6.js 也如此。因此现有证据可以直接解释打印/PDF 全 A,但不足以断言在线按钮显示一定全 A。若用户反馈来自在线按钮,须补查具体文章与客户端版本;若来自解析文字,则需重点核对第 5 点。question.answer 和 option.answer,其中 A/B/C/D 的文字仍指原顺序。单纯新增洗牌会扩大这个既有错位风险。线上 PromptTemplate 已写明“正确选项随机分布(避免固定位置模式)”,最后更新于 2026-09-04。故“再加一句随机要求”不能构成可靠修复。11 月 14 日已出现同样分布,不能归因于今天的新发布。
读取今天一组真实的五道题,使用项目实际 reading.utils.ts 经 TypeScript 转译后的校验与洗牌函数:
A A A A A。117 / 114 / 139 / 130,该轮无全 A 题组。这是代码级复现,未冒充浏览器或实体手机验收;也未逐题审查 AI 答案的教学正确性。不能用“位置异常”推导全部答案内容错误或历史成绩算错。
check,禁止仅修改正确答案字母或互换 check。Plan A、文章中人名首字母不被误改。Files: 新建 projects/xiaoshu-mobile/src/app/features/english-reading/reading-presentation.ts 及对应 .spec.ts。
Interfaces:
presentReadingQuestions(questions: ReadingQuestion[], seed: string): ReadingQuestion[]:复制输入,校验完整题组,根据种子产生题序和近均衡位置,移动完整选项对象。remapReadingExplanation(text: string, labels: Readonly<Record<string, string>>): string:仅映射无歧义选项引用;从原数组索引构造旧字母→新字母映射,单次替换,防止 A→B→C 的级联误替换。
[ ] 写失败测试:五题原始全 A;同一种子结果稳定;不同种子可产生不同结果;每个字母出现 1–2 次;正确内容、选项解析绑定和原始输入保持不变。
[ ] 写失败测试:A项/B项/选项A/option A 同步映射;Plan A 与普通单词保留;题目和各选项的解析都处理。
[ ] 写失败测试:不完整、重复内容、多正确项拒绝进入新题组编排;检测位置依赖选项,不直接重排导致含义变化。
[ ] 实现共享函数。对不能可靠转换的旧解析或位置依赖题逐题列入复核,不能用宽泛正则改写所有 A/B/C/D,也不能静默删除解释。
[ ] 运行专项测试并检查上述不变量后提交本任务文件。
Files: 修改 reading-exercise.component.ts、reading-pdf.component.ts、reading.models.ts、reading.utils.ts 及相应测试;均位于上述 english-reading 目录。
Interfaces: 路由增加非敏感 presentationVersion(默认 v1);共享种子由文章 ID 与该版本组成。使用任务 1 的 presentReadingQuestions(),不再在两个组件内各自安排选项。
answer 按题目 ID 和内容恢复,计算成绩与原结果一致;缺题保护与保存失败重试保持正确。SurveyLog 数据。Files: 修改 english-reading.service.ts、reading-prompts.ts 及相应测试。云端 PromptTemplate 更新通过独立、单记录、带旧值校验的发布步骤执行,不运行会从旧源覆盖全部模板的同步脚本。
Interfaces: 保留现有题目 JSON 字段与接口;新生成题的题干、选项及解释以内容指代答案,不引用会随重排改变的选项字母和位置。
true;云端模板存在和缺失两条路径都附加“解释不依赖选项字母/位置”的要求。updatedAt 与旧内容,避免覆盖他人更新。npm run test:mobile:ci -- --include='projects/xiaoshu-mobile/src/app/features/english-reading/**/*.spec.ts',全部通过。npm run test:mobile:ci;构建:npm run build:mobile,均通过。check 一致;含字母解析及位置依赖项逐题复核。相同版本的在线页、PDF 题目和答案逐项一致;五题正确位置符合约束;重排前后正确内容、历史选中内容和成绩一致;所有解析字母指向当前展示选项;旧题得到兼容;专项、全量和浏览器验收均有证据。当前仅调查与方案完成,以上修复与验收尚未执行。