docs(qa): 2026-W19 周报不是合法 UTF-8(已绊倒两个扫描脚本),修成可读并标出截断处 - #858
Conversation
这个文件从 be6c3de(2026-05-12)提交那天起就不是合法 UTF-8:三行在写入时被按字节 截断,把汉字切成半个(残留字节 e4 b8 5f / ef 5f 0a / e7 5f 0a)。 它已经绊倒过两个按 UTF-8 读全目录的脚本(见 #857 与 #772 的记录)—— 任何 Path.read_text() 走到这里都会抛 UnicodeDecodeError,中断整次扫描, 而且报错指向的是"位置 2467 的字节"这种与业务无关的信息,很难联想到是某份周报坏了。 处理: - 三处坏字节换成显式标记〔原文在此处被截断,内容已丢失〕; - 顶部加编者注说明来龙去脉。 🔴 **没有猜写任何丢失的内容。** 该文件只有一次提交,历史里没有完好版本 (git log --follow 只有 be6c3de 一条,且那一版就已非法),被截掉的后半句 无从恢复 —— 与其编一个读起来通顺的句子,不如把"这里丢了"如实写出来。 验证:改后按 UTF-8 读完 docs/ 下全部 md 文件无异常; check-no-memory-slugs.py 在全树上仍报 OK。
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 54973e18d5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| _派生 token 是否随母 token 失效,是 fleet-management 类工具的核心契约。_ | ||
| - `qa-hub-07-sse-reconnect` — [tests/qa-hub-07-sse-reconnect/](../../tests/qa-hub-07-sse-reconnect/) | ||
| _这个测试 pin 关键契约:「断开期间的任务不能丢」—— 通过 getinbox 拿,�_ | ||
| _这个测试 pin 关键契约:「断开期间的任务不能丢」—— 通过 getinbox 拿,〔原文在此处被截断,内容已丢失〕_ |
There was a problem hiding this comment.
Restore the summaries from their existing sources
These contents are not permanently lost: scripts/qa-status.sh generated each summary from the next line of the linked test README and merely split UTF-8 with head -c 100. In the reviewed parent tree, the three READMEs still contain the exact text, including 不是通过重放 SSE, the complete 真 LLM 烧钱不可取, sentence, and 生成/解析的形状边界没有快速断言. Replacing the bytes with loss markers therefore makes the QA record and the new editor's note factually incorrect; recover the summaries from those repository sources or describe them as generator truncation instead.
Useful? React with 👍 / 👎.
把这个 PR 的必要性说准一点(核过之后,比我原来写的更窄、也更具体)我在正文里说它「绊倒过两个按 UTF-8 读全目录的脚本」。核实一下影响面,免得这条被高估或低估: 今天没有任何在仓脚本会被它绊倒我扫了 全是按路径读具名文件,没有一个递归遍历 🔴 但有一个将来一定会撞上的,而且撞法比崩溃更糟
try:
text = (REPO / rel).read_text(encoding="utf-8")
except (OSError, UnicodeDecodeError):
continue # ← 静默跳过它不会崩,会静默跳过这个文件。 而 #852 建议把它的
这正是本仓反复出现的那个形态(见 #861 / #860 / 所以这个 PR 的准确定位不是「修复 CI 崩溃」(今天没有 CI 因它崩),而是:
顺序上,这个 PR 应当排在 #852 的扩范围动作之前。 |
|
这个 PR 要修的东西已经不存在了,建议关闭。 标题是「2026-W19 周报不是合法 UTF-8(已绊倒两个扫描脚本)」。我在 open('docs/qa/weekly/2026-W19.md','rb').read().decode('utf-8') # 无异常抛出W19 现在是合法 UTF-8,由 #899( 本 PR 当前是 顺带:这个文件今晚又动了两次,你可能想知道
如果你这个 PR 里还有 #899 没覆盖的改动,说一声,我们单独摘出来;否则关掉。 |
|
关掉 —— 它要修的东西已经在 main 上修好了,而现在合它会把另一件事改坏。 ① 它的前提在写的时候是真的在这个 PR 的父提交上验: 编码问题当时确实存在。这个 PR 没有说错话。 ② 但 main 上已经不是那样了当前 main 上那份:5642 字节,合法 UTF-8,三处截断也已经标出来了(标记文本不同,但作用一样)。 ③ 🔴 现在合它,会把 #911 修好的相对链接改回去两版的差别不止编码 —— 链接层级也不一样:
文件在 不是推断,我把本 PR 的文件放到 main 的树上跑了一次 main 现在的门: 26 条,全在这一个文件里。
④ 有一样东西值得留下,我抄在这里免得丢本 PR 加的那段编者注,main 上没有对应的说明:
「历史里没有完好版本、内容永久丢失」这句是有用的 —— main 的行内标记只说了「被截断」,没说为什么找不回来。谁想补的话,单独提一个只加这段注的 PR 即可,别带链接改动。 结论:关闭。原因不是这个 PR 做错了,是 main 在它之后走了两步(#899 修编码、#911 修链接),而它还停在两步之前。 今晚第 5 个这种形状 —— 陈旧 PR 的危险不在于它没用,在于它会把后来修好的东西一起带回去。 |
问题
docs/qa/weekly/2026-W19.md不是合法 UTF-8,而且从它诞生那天起就不是。只有这一次提交,且那一版就已非法 —— 历史里没有完好版本可回。
三处坏字节,签名一致:多字节汉字被从中间切断,残留一个
_:三行分别在第 48 / 56 / 68 个字符处断掉,后半句没了。看起来是当初某个按字节
截断的写入过程干的(周报是
qa-status.sh脚手架生成的)。为什么值得改
它已经绊倒过两个按 UTF-8 读全目录的脚本(#857 做文档 pin 盘点时一次,
#772 量 slug 暴露面时又一次)。任何
都会在这里中断整次扫描,而报错信息是「position 2467 的字节非法」这种
和业务毫无关系的东西 —— 第一次撞上时很难联想到是某份周报坏了。
用
errors="ignore"绕过则会在写回时损坏文件,不是解法。这次做了什么
〔原文在此处被截断,内容已丢失〕;🔴 没有做什么
没有猜写任何丢失的内容。 三处截断的后半句无从恢复,与其编一个读起来通顺的
句子填上(那会让一份 QA 记录变成半真半假的东西),不如把「这里丢了」如实写出来。
验证