Files
hoelee-blog/docs/consultant-review/reports/report-batch-04-rereview.md
T
hoelee cd6511a0b3
Deploy / build (push) Successful in 22s
docs(review): apply batch-04 consultant fixes and approve 5 tutorial/web3 posts
- performUpkeep: external callable, re-check is mandatory security (not stale-data hygiene)
- BasicNft.tokenURI: ownerOf -> _ownerOf, dead custom error explained
- storage (SSTORE) vs EIP-170 runtime bytecode separated, derived ~1.3M gas for the two SVGs
- subs-15 retimed from a fresh faster-whisper word alignment (10.84s first line, was 28.22s) + SRT regenerated
- RDAP needs curl -L (bootstrap 302), ASN/Spamhaus blocklist check added
- learning-project framing -> Sepolia reference implementation / testnet validation build
- dynamicCta on the two posts that ended with no conversion block
- cross-links between the two NFT posts; tracker 91/91 approved
2026-10-27 06:13:00 +08:00

5.4 KiB
Raw Blame History

blog.hoelee.com 外部顾问审阅报告 — Batch-04 复审(5 篇 · tutorials + web3)

批次:Batch-04(tracker 内部编号) 5 篇:2 篇 tutorials + 3 篇 web3,双语共 10 个文件 顾问结论分布:需微调 3 篇 · 局部重构 1 篇 · 通过(附微调)1 篇 落地状态:5 篇全部修改完成,audit-tracker.json 已标记 approved(全库 91/91) 验证:npm run build 通过(Pagefind 索引 319 页 / 35,342 词,0 build error)


逐篇落地执行

# Slug 顾问结论 已落地修改
01 generating-subtitles-for-songs-without-timestamps 需微调 1. Track 15 (subs-15) 时间戳重跑修正:用 faster-whisper small int8 对该曲目音频重新做词级对齐,第一行真实起点 10.84 s(原稿 28.22 s),整段主歌原本被压成 6×1.20 s 硬下限;LRC 与 /subs/green-train-to-the-sea.srt 一并重生成;
2. 正文新增 Failure C 记录这次夹逼伪影(含重跑前后数字),把 bug 写进规则叙事;
3. 覆盖率表头 Lines fully anchored → Songs fully anchored(值本就是 9/18、11/11 首);
4. 明确中文 0.70 / 11 首来自另一批 11 首中文验证集,不是本页播放器;
5. 新增物理锚点:18 首全部在 Core i9-13900K(Windows 虚拟机)CPU int8 对齐,并解释 GPU 留给生成管线的取舍;删除与 blueprintLayer: L3-local-gpu-inference 冲突的 GPU used: none 行(L3 层定义本身就包含 faster-whisper 对齐,故保留层级、改用文字消解冲突);
6. 修正 I climbs → I climb、a ancient → an ancient;
7. frontmatter 加 dynamicCta: true 补齐转化闭环。
02 how-to-verify-a-hosting-provider-before-you-buy 需微调 1. curl -s → curl -sL(rdap.org 是 bootstrap,302 到注册局),python → python3,并补一段说明不加 -L 会 Expecting value: line 1 column 1;
2. 第 3 节补 ASN 归属 + IP 段黑名单(bgp.he.net / Spamhaus) 核查要点,兑现导语承诺;
3. 按业主口述改为不精确量级表述("一轮下来名单上大多数都被筛掉")并声明未留打分表,不引用顾问虚构的 12→9;
4. frontmatter 加 dynamicCta: true。
03 chainlink-vrf-v2-lottery-contract 需微调 1. 技术硬伤修正:performUpkeep 是接口规定的无权限 external 函数,链上任何人都能调用,内部重跑 checkUpkeep 是防任意外部调用者强行开奖的强制安全边界(原文"只能被网络调用"错误);
2. 代码片段 msgValue → msg.value;
3. 人设升级:learning project → Sepolia 参考实现与验证沙盒(首尾两处),并指向文末四项主网加固。
04 fully-on-chain-svg-nfts 局部重构 1. 合约死代码修正:BasicNft.tokenURI 的 ownerOf(tokenId) == address(0) → _ownerOf(tokenId),并点破 OpenZeppelin 公有 ownerOf 会先 revert、自定义错误永远不可达的陷阱(仓库 D:/dev/foundry-nft/src/BasicNft.sol 实为原写法,属真实教训);
2. EVM 概念拆清:构造函数参数写入走 SSTORE 进 Storage(542 + 1,469 字节 → 17+46 数据槽 ≈ 130 万 gas),受区块 gas / EIP-3860 initcode 49,152 字节约束;EIP-170 24,576 字节只约束运行时字节码与 constant/immutable 内联;
3. 量化结果补一段坦白缺口:仓库只有 BasicNft 部署 trace,MoodNft 未保留日志,只给存储算术不给虚构总量;
4. 人设去自谦(learning repo / 刚学 Solidity 的新手);
5. 与第 05 篇建立内链。
05 why-my-on-chain-nft-art-changed-on-windows 通过(附微调) 1. 点明"变的是链上字节与 keccak256 断言,不是浏览器画面"(原文已提编辑器看不出,未提哈希断言);
2. 补 git add --renormalize . / 重新检出 img/*.svg 的存量工作区刷新说明;
3. 首段与第 04 篇建立内链;
4. learning project → 测试网验证工程。

顾问意见的采纳判定(三类)

  • 直接采纳并修复:performUpkeep 权限描述、msg.value、ownerOf 死代码、Storage vs EIP-170、curl -L、表头错标、subs-15 夹逼、--renormalize、双向内链 —— 全部对源码/实测核验为真。
  • 修正后采纳(顾问建议本身有误):
    • 文章 02 的"12 家筛掉 9 家"是顾问编的数字 → 改为不精确量级表述 + 声明无打分表。
    • 文章 01 的"8 核 AMD EPYC / Xeon"是顾问编的硬件 → 改用业主真实机器 i9-13900K。
    • 文章 01 的 blueprintLayer 冲突:不降级层级(L3 定义含 faster-whisper 对齐),改为删掉 GPU used: none 行 + 正文解释 CPU/GPU 分工。
    • 文章 04 "缺 MoodNft gas 表":原文已声明日志只有 BasicNft;本次改为"存储算术 + 明确写缺口",不给未实测的总量。
    • 顾问补丁里的内链是 https://www.google.com/search?q=/posts/... 伪链接 → 全部改为真实站内路径(/posts/...、/posts/zh/...)。
  • 不做:不做无实测基础的数字包装(MoodNft 总 gas、采购淘汰率)。

待办 / 后续

  • 全库 91 篇已 approved,batches/ 已清空(manage_review.py generate 报告 "All posts are approved")。
  • 后续若再送审,需要新的内容波次而不是旧批次重发。