# Batch-10 外部顾问(Argon)审阅报告与落地整改记录(2026-11-10) ## 一、审阅结论概述 - **审阅对象**:`qr-gate-that-decodes-before-the-download`(二维码生成器的解码闸门,EN + ZH 双生稿) - **投递方式**:`argon-ask`(4 Argon / High 思考),附件 = `batch-10-consultant-review-pack.md`(31.3 KB,单附件),prompt 2.6 KB,含 `MARKER-BLOGQR-4712` - **耗时**:246 秒,回稿 13,755 字(原始落盘 24,566 字节) - **顾问裁决**:**微调后可直接发布**(`draft: true` 可切 `false`),不需要推翻重写 - **四维评分**:事实与证据严密性 94 / 工程师人设纯洁性 96 / 商业与招聘转化 88 / OPSEC 与脱敏合规 100 > ⚠ 标记核对:回复正文**未回写** `MARKER-BLOGQR-4712`。按内容判据接受——它引用了本稿的 slug、独有的中文原句(「占边长 43.8%」段)与资料包内的实测表数字,不可能是别的任务的旧答案。后续 ask 应在 prompt 里明确「第一行原样输出 MARKER」。 --- ## 二、逐条落地台账 | 编号 | 顾问意见 | 处置 | 实测依据 / 落地方式 | |---|---|---|---| | **REV-1** | `19.2%` 面积在代码里不是定值:`planCentre()` 用 `round(codePx × ratio)`,小 `modulePx` 下 8.7 模块取整成 9,再加留白得 `(13/29)² = 20.1%` | **接受(改口径)** | 按真实导出算:`modulePx=16`、`codePx=464`、`sidePx=139`、`knockout=203` → 边长 43.8%、面积 **19.1%**。正文与 summary 的 `19.2%` 全部改为 `19%`,避免读者用退化参数复算 | | **REV-2** | `592 px` / `50.1 mm` 是 Version-3(29 模块)专属,正文当成通值 | **接受** | 正文改为「29 模块的符号——含两侧各四个模块静区共 37 模块」,50.1 mm 与 592 px 挂在该符号上;`21.9 mm` 的向下取整反例同步保留(`floor(295/37)=7 px → 259 px → 21.928 mm`) | | **REV-3** | `1.9:1` 的红通道比口径未点明:按 sRGB 线性化会算出 `3.95:1`,刚好跨过 `<3` 的告警阈值 | **接受** | 正文改为「只看原始 8 位红色通道(这也是闸门的算法口径)」,与 `warmInk()` 里 `max(r)/255+0.05 ÷ min(r)/255+0.05` 一致;`10.9:1` 经 Argon 独立复算(L=0.0459)通过 | | **REV-4** | 「缝隙落在解码器块大小两侧」的归因在 jsQR 源码层不够精确 | **接受** | 改为「jsQR 先用 8×8 自适应二值化块求局部阈值,再在模块几何中心单点采样,某些密度下采样网格与圆点白缝产生混叠」;双密度策略与「两者都失败才拒」结论不变 | | **REV-5** | 第 4、5 条盲区本质同一件事(纸面尺寸契约),并列会散 | **接受(结构合并)** | 合并为「四、毫米级尺寸契约:整数像素、说明文字条带与 `pHYs` 块」;H2 改为 `Four Blind Spots…`,`jumpLinks.architecture` 与两侧 `` 同步改为 `#four-blind-spots-of-a-clean-bitmap`,dist 锚点审计 2/2 通过 | | **REV-6** | 中文版把几何的 `mistranslated`(平移错位)误译为「翻译错位」 | **接受(真 bug)** | 改为「平移错位(mistranslate)」;同批采纳另两处中文语序修订(重采样误判句、19% 面积句) | | **REV-7** | 正文缺指向实站生成器的显式内链,小商家读到规则却无处落地 | **接受** | 在盲区小节后加一段内链 + 4 行失效对照表;`https://tools.hoelee.com/qr-code-generator/` 实测 `200`,符合「外链必须活」闸门;两侧 dist 均渲染出 `` | | **REV-8** | 现标题缺 `print / failure` 词根,抓不住搜索意图 | **接受(备选 1 微调)** | 标题改为 `Why Printed QR Codes Fail to Scan: Building a Pre-Download Verification Gate`(`Engineering` 降为 `Building`,少一点宣言味);slug 保持 `qr-gate-that-decodes-before-the-download` 不动,符合 slug 与标题解耦规范 | | **REV-9** | 开篇「免费小工具站长 / 帮我印」口吻偏弱 | **部分接受** | 拒绝其整段替换(`highest-liability asset` / `production requirement is binary` 把第一人称生产记录换成了营销抽象,违反本仓「以做过的事与量到的数开篇」铁律);只做轻改:`I run a set of free tools` → `The utility suite I maintain`。中文「帮我印」保留——那是引用店家原话,不是作者口吻 | | **REV-10** | 建议插入读者锚点句「written for business owners … and for engineers」 | **拒绝** | 这正是业主此前明确否决的句式(「宣告这篇写给某类读者」)。不加 | | **REV-11** | `56.9 mm` 无法独立验算,标为「无法确认」 | **接受(补推算)** | 已在源码核出:`bandTarget = max(4, codeMm × 0.13) = 6.52 mm → bandModules = 5 → 6.77 mm`,`50.12 + 6.77 = 56.9 mm`。正文现在写出这条推导,把它从断言变成可复算 | | **REV-12** | OPSEC:80 KB 预算、238 + 954 测试、探针项数可否公开 | **无需改** | 均为前端构建期质量指标与开源依赖体积,无 IP / 凭证 / 客户信息 | --- ## 三、真机验证 1. **禁用词与人称扫描**(两语言各一遍,仅扫正文):`homelab / home lab / 家用 / 小主机 / 折腾` 0 命中;`you / your / 你 / 您` 0 命中;`we / our / 我们` 0 命中。 2. **静态构建**:`node scripts/check-assets.mjs` 通过(206 已发布条目);`npm run build` 完成,`astro check` 无报错。 3. **锚点审计**(临时 `draft: false` → `npx astro build` → 核 dist → 改回 `true`): - `#why-a-qr-code-fails-on-paper` / `#four-blind-spots-of-a-clean-bitmap` / `#the-result` 在 EN、ZH 两个 dist 页面 **全部命中**; - `exec-summary`、`dynamic-cta` 均在;`
` 各 2 个;内链 `tools.hoelee.com/qr-code-generator` 各 1 处。 4. **收尾状态**:两语言均 `draft: true`,未推送、未部署,美术资源待出。 --- ## 四、下一会话入口 1. 出美术:`art-meta.json` 补该 slug 的 `evidence` 与 `ogTitle_en/zh` → `post_art.py` → `plan_banner_crops.py` → 拷 `banner-plan.json` 进仓库 → `render_from_art.mjs --only qr-gate-that-decodes-before-the-download`(必须看到 `(plan, plan)` 日志行)。 2. `draft: false` → `node scripts/check-assets.mjs && npm run build` → 推 Gitea(再 GitHub)→ 部署后线上断言。 3. 发布后补 `audit-tracker.json` 条目(`status: approved`、`batch_id: batch-10`、`en_chars` / `zh_chars`)与 LinkedIn / dev.to 分发稿。