post: QR pre-download decode gate (EN+ZH) + Argon batch-10 review
Deploy / build (push) Successful in 30s

- 69-module symbol at 20 mm = 0.29 mm/module, refused below a 0.40 mm floor
- 30% centre image on a 29-module symbol knocks out 19% of area, capped at 15%
- maroon #800000 passes WCAG at 10.9:1 but is 1.9:1 on the red channel, so warn only
- 300 dpi export quoted at 50.1 x 56.9 mm with the caption band and pHYs block
- gate reads every code back with jsQR at two densities before the download unlocks
- batch-10 external review: 94/96/88/100, 10 items applied, 2 rejected with reasons
This commit is contained in:
hoelee committed 2026-11-10 09:31:43 +08:00
1 parent b75899c875
commit b7a53af943
12 files changed
+1001 -24

No files matched your search

@@ -0,0 +1,49 @@
# 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` 与两侧 `<a id>` 同步改为 `#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 均渲染出 `<table>` |
| **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` 均在;`<details>` 各 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 分发稿。