docs: add Indonesian translation - #418
Conversation
Add complete Indonesian translation for the book in directory book-id/. - Copied structure, figures, TeX scripts, and image assets from book-en/. - Translated all markdown files (introduction.md, chapters 1-10, afterword.md, answers) into professional Bahasa Indonesia. - Preserved all code blocks, LaTeX math formulas, markdown formatting, and image assets.
Translate SVG image text and figure generator scripts in book-id/ to Indonesian. - Updated Python figure generator scripts (gen_ch1_figs.py ~ gen_ch9_figs.py, gen_cover.py). - Translated all static SVG diagrams (fig0-*, fig6-*, fig7-*, fig10-*). - Ran fit_svg_text.py to ensure text alignment and layout overflow safety across all 132 SVG files.
…in book-id Refine SVG diagram translations and layout precision in book-id/images/. - Translated remaining untranslated English labels and text across all SVG files and Python generator scripts. - Adjusted text wrapping, font sizes, line height, and box bounding coordinates to prevent text overflow. - Re-generated figures and ran fit_svg_text.py auto-fitting.
…ounds safety Fix all remaining untranslated English labels and apply font-size scaling across all 132 SVG files in book-id/images/. - Translated workflow SVGs (fig1-wf-*.svg, fig2-12.svg, fig2-17.svg, fig3-15.svg, fig6-4.svg, fig6-5.svg, etc.). - Dynamically scaled text font sizes where text length exceeds bounding box widths to eliminate overflow.
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthrough本次变更新增完整书稿内容、十章插图生成器、SVG 绘图库、PDF 构建脚本、LaTeX 样式配置及 Pandoc 过滤器,并补充封面生成、SVG 后处理和思考题参考答案。 Changes书稿内容与章节
构建与插图资产
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related issues
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
Note
Due to the large number of review comments, Critical severity comments were prioritized as inline comments.
🟠 Major comments (30)
book-id/chapter1.md-126-127 (1)
126-127: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift不要把
reasoning写成可直接持久化/回传的普通消息字段(126-127、160-167)。 这里把推理表现成assistant.reasoning的普通属性,容易让读者误以为原始 CoT 可以被直接读取并存储。更稳妥的是抽象成“推理状态/推理摘要”,并注明可见内容取决于具体模型/平台;否则实现时很容易做出不兼容或泄露敏感推理轨迹的设计。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter1.md` around lines 126 - 127, 更新“Pesan Asisten (Assistant Messages)”中对 reasoning 的描述,不要将其表述为可直接读取、持久化或回传的普通 assistant 字段;改为“推理状态”或“推理摘要”等抽象概念,并明确其可见内容取决于具体模型和平台,同时避免暗示原始 CoT 可被获取。book-id/introduction.md-41-43 (1)
41-43: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win统一
Gambar/Figure的图题匹配规则。book-id/crossref.lua目前只识别Figure N-M,而book-id里的图题大多是Gambar N-M,这些图不会拿到交叉引用锚点,PDF 里的引用会失效。这个模式不只出现在这里,后续章节里同类图题也一样受影响。
book-id/introduction.md#L41-L43book-id/chapter1.md#L109-L109book-id/chapter1.md#L137-L137book-id/chapter1.md#L151-L151book-id/chapter1.md#L223-L223book-id/chapter1.md#L350-L350book-id/chapter1.md#L360-L360🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/introduction.md` around lines 41 - 43, 统一更新 book-id/crossref.lua 中的图题匹配规则,使其同时识别 “Figure N-M” 和 “Gambar N-M” 格式并生成交叉引用锚点。book-id/introduction.md:41-43、book-id/chapter1.md:109、137、151、223、350、360 的图题无需直接修改,均由该规则修复。book-id/chapter2.md-689-690 (1)
689-690: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win移除误混入正文的分析提示。
The above content does NOT show...是工具提示而非书稿内容,当前会被直接发布并打断正文。请删除该提示,仅保留后面的章节内容。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter2.md` around lines 689 - 690, Remove the accidentally embedded tool-status prompt beginning with “The above content does NOT show the entire file contents” from the chapter body, preserving the surrounding chapter content and removing only this analysis metadata.book-id/chapter2.md-533-539 (1)
533-539: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift该段译文已严重失真,不能进入出版稿。
从本段开始,句子被大量同义词重复和异常拼接破坏,出现明显机器生成残留(例如
chace、men-dobrak等),读者无法可靠理解原意。这不是普通润色问题;请与原文逐段对照重译,并继续检查后续同类段落。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter2.md` around lines 533 - 539, 从该段开始逐段对照原文重新翻译,删除同义词堆叠、异常拼接及机器生成残留(如“chace”“men-dobrak”),恢复准确、自然且可出版的印尼语表达;同时检查后续同类段落并按相同标准修订,确保技术含义完整可靠。book-id/chapter3.md-428-436 (1)
428-436: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win不要将
hit@k命名为recall@k。脚注明确说明这里实际计算的是 hit rate/success@k,而不是标准定义下“相关文档被检索出的比例”。继续使用
recall@k会让实验结果与常规论文或工具不可比,也会使1 - recall@20的结论产生歧义。请改名为hit@k/success@k,或实现标准的 recall@k,并同步修正相关实验说明。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter3.md` around lines 428 - 436, Rename the metric labeled “recall@k” in the metrics table and footnote to “hit@k” or “success@k” to match the described calculation, and update the retrieval failure-rate statement from “1 − recall@20” to the corresponding renamed metric. Do not present this hit-rate calculation as standard academic recall@k; if retaining the recall name, replace the calculation with true relevant-document proportion recall and revise the related experiment explanations consistently.book-id/chapter3.md-345-346 (1)
345-346: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift清理正文中串入的候选译文。
这些段落包含大量连续堆叠的同义词和替代短语,已经不是可读的印尼语正文,会使检索、知识治理和实验章节无法正常阅读。请恢复为每段一份连贯译文,并在合并前完成全章校对。
Also applies to: 369-377, 543-546, 549-557, 560-568, 638-650, 653-675
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter3.md` around lines 345 - 346, Bersihkan paragraf-paragraf terdampak yang memuat tumpukan sinonim dan frasa alternatif dari terjemahan kandidat. Pertahankan satu versi bahasa Indonesia yang paling koheren di setiap paragraf, termasuk pembahasan Word2Vec, BERT, BGE-M3, dan contoh polisemi, tanpa mengubah makna teknis. Terapkan perbaikan yang sama pada seluruh rentang bagian yang disebutkan, lalu lakukan penyuntingan dan pemeriksaan konsistensi untuk seluruh bab sebelum menggabungkannya.book-id/chapter10.md-172-179 (1)
172-179: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift统一补齐并修正表格引用。
Table 10-3 在章节正文中被引用但未完整呈现,答案文件又引用了未定义的 Table 10-4,导致读者无法建立正确的交叉引用关系。
book-id/chapter10.md#L172-L179: 恢复完整的 Table 10-3 内容,并修复其 Markdown 引用块结构。book-id/思考题参考答案.md#L365-L367: 将 Table 10-4 改为正确编号,或在章节中实际补充 Table 10-4。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter10.md` around lines 172 - 179, Restore the complete Table 10-3 in book-id/chapter10.md at lines 172-179 and correct the surrounding Markdown blockquote structure so the table renders and is referenced consistently. In book-id/思考题参考答案.md at lines 365-367, replace the undefined Table 10-4 reference with the correct table number, unless a genuine Table 10-4 is added to the chapter.book-id/chapter4.md-255-257 (1)
255-257: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win补充工具日志的脱敏与访问控制要求。
本段建议记录参数、结果和审计轨迹,但本章前文涉及 OAuth/API 密钥、邮件及私有数据。请明确要求敏感字段脱敏或白名单记录、日志加密、严格访问控制及保留期限,避免示例实现直接造成凭据和 PII 泄露。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter4.md` around lines 255 - 257, 扩展“工具执行可观测性”段落,明确参数、结果和审计轨迹必须采用敏感字段脱敏或白名单记录,并要求日志加密、严格访问控制及明确的保留期限;覆盖 OAuth/API 密钥、邮件和 PII 等凭据或私有数据,避免示例实现直接记录其原始内容。book-id/chapter5.md-446-476 (1)
446-476: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift让取消操作在同一事务中验证并提交。
当前实现先读取并检查预订状态,再调用
execute_cancellation;其他请求可以在两者之间标记航段已使用或修改航班状态,导致策略绕过或重复取消。应使用事务/行锁或带完整策略条件的原子条件更新,并加入幂等键。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter5.md` around lines 446 - 476, The cancellation flow around the reservation lookup and execute_cancellation must validate policy and commit cancellation atomically. Use a transaction with a row lock, or a single conditional update containing all policy predicates, and add an idempotency key so retries cannot cancel the same reservation repeatedly; preserve the existing success and failure reasons.book-id/chapter5.md-640-647 (1)
640-647: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift不要把生成的 SQL 直接交给数据库执行。
默认应使用只读事务、参数化查询、权限校验、语句超时和行数/成本限制;涉及写入、删除或导出时必须经过独立策略检查和确认。否则模型错误或 prompt injection 可能造成破坏性修改、数据泄露或资源耗尽。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter5.md` around lines 640 - 647, The SQL query Agent workflow must not execute generated SQL directly against the database. Route execution through read-only transactions by default with parameterized queries, authorization checks, statement timeouts, and row/cost limits; require independent policy validation and explicit confirmation for writes, deletes, or exports, including protection against prompt injection and model errors.book-id/chapter5.md-270-272 (1)
270-272: 🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift为并行工具调用定义幂等和补偿语义。
cascading abort只能阻止后续调用,不能撤销已经开始的文件写入、数据库更新或外部 API 副作用。请补充依赖分类、幂等键、事务/补偿操作,以及“已启动但未完成”的结构化结果。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter5.md` around lines 270 - 272, Lengkapi bagian tentang eksekusi paralel di bab 5 dengan mendefinisikan semantik idempoten dan kompensasi untuk panggilan alat. Tambahkan klasifikasi dependensi, kunci idempotensi, transaksi atau operasi kompensasi, serta hasil terstruktur untuk operasi yang sudah dimulai tetapi belum selesai, dan jelaskan bahwa cascading abort tidak membatalkan efek samping yang telah dimulai.book-id/chapter5.md-229-260 (1)
229-260: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift这一章仍不能进入最终出版状态,需要完整的母语审校。
这些段落存在严重的机器直译痕迹:句法不自然、同义词堆叠、英文残留过多,导致错误恢复和 Agent bootstrapping 等技术含义难以理解。请进行全章母语校对,统一术语,并在最终 PDF 中复核断行和可读性。
Also applies to: 681-713
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter5.md` around lines 229 - 260, Bab ini masih dipenuhi terjemahan mesin yang mengaburkan makna teknis dan belum layak diterbitkan. Lakukan penyuntingan bahasa Indonesia secara menyeluruh pada seluruh bab, termasuk bagian tentang klasifikasi kegagalan, pemulihan, terminasi, dan Agent bootstrapping; sederhanakan sintaks, hapus penumpukan sinonim serta sisa bahasa Inggris yang tidak perlu, dan seragamkan istilah teknis. Setelah itu, periksa hasil PDF untuk memastikan断行, tata letak, dan keterbacaan tetap baik.book-id/chapter5.md-23-24 (1)
23-24: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win不要把 sandbox 描述成“绝对安全”。
“不会影响 host”以及“不可见数据不会泄漏”都过度承诺了安全边界。应改为“降低直接访问和泄漏风险”,并明确说明 sandbox escape、环境变量、进程元数据、允许的 egress 和资源限制仍需单独防护。
Also applies to: 114-116
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter5.md` around lines 23 - 24, Perbarui deskripsi Code Interpreter dan Bash Shell agar tidak menyatakan sandbox “aman” secara absolut atau menjamin host tidak terdampak maupun data tidak dapat bocor. Ganti klaim tersebut dengan penjelasan bahwa sandbox hanya mengurangi risiko akses dan kebocoran langsung, serta sebutkan bahwa sandbox escape, environment variable, metadata proses, egress yang diizinkan, dan pembatasan resource tetap memerlukan perlindungan terpisah.book-id/chapter5.md-587-590 (1)
587-590: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift在自动分析和发布前加入脱敏与授权门槛。
生产轨迹、PRD、原始 prompt 和模型响应可能包含凭据、PII 或专有信息。发送给 Agent、GitHub 和公开网站前应默认脱敏,并增加访问控制、保留期限、最小权限和人工审批;不要默认公开 raw logs 或 raw responses。
Also applies to: 617-619
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter5.md` around lines 587 - 590, Add a privacy and authorization gate to the automated analysis and issue-publication workflow described in the “Code generation” section. Redact credentials, PII, proprietary data, raw logs, prompts, and model responses before sending content to Agents, GitHub, or public sites; enforce access control, least privilege, retention limits, and human approval, and never expose raw logs or responses by default.book-id/chapter5.md-136-140 (1)
136-140: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win补充可追溯来源,或降级为条件性表述。 这里的“零违规”和“约 2 毫秒开销”被写成了结论,但正文没有给出可复现的数据来源;256-258 的阈值/会话统计也同样缺少出处。若这些数字来自内部实验,请补数据集、配置和结果链接,否则改成“基于示例/预期”的弱表述。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter5.md` around lines 136 - 140, Perbarui klaim kuantitatif dalam bagian tentang Permission-Embedded Data Objects—termasuk “nol pelanggaran”, “sekitar 2 milidetik”, serta ambang/statistik sesi yang dirujuk—dengan sumber yang dapat dilacak dan detail eksperimen yang dapat direproduksi, termasuk dataset, konfigurasi, hasil, dan tautan bila berasal dari eksperimen internal; jika informasi tersebut tidak tersedia, ubah klaim menjadi pernyataan bersyarat yang jelas seperti hasil contoh atau ekspektasi, bukan kesimpulan pasti.book-id/chapter6.md-660-673 (1)
660-673: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift阻止发布:这些段落包含严重的翻译污染。
多个段落把每个词替换成数十个同义词并连续堆叠,导致印尼语句子不可读、技术含义无法可靠理解。这已经超出普通校对范围;请恢复为每个概念一个明确译法,并对整章进行人工审校后再提交。
Also applies to: 684-685, 710-718, 722-730
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter6.md` around lines 660 - 673, Replace the synonym-stacked Indonesian translations in the affected sections, including “Prompt Sensitivity Assessment” and “Analitik Sadar-Privasi sebagai Fondasi Evaluasi,” with clear, readable Indonesian using one consistent translation per concept. Manually review the entire chapter, including the additionally identified sections, to ensure technical meaning is preserved and all translation pollution is removed before submitting.book-id/chapter6.md-304-313 (1)
304-313: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win修正 YAML 示例的缩进,否则复制后会报解析错误。
3_Good比同级项多缩进一个空格,当前示例是无效 YAML。建议修改
- 3_Good: "Menjawab dengan benar Dr. Chen tetapi tidak menyebutkan bahwa Dr. Chen adalah dokter Lily" + 3_Good: "Menjawab dengan benar Dr. Chen tetapi tidak menyebutkan bahwa Dr. Chen adalah dokter Lily"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter6.md` around lines 304 - 313, 修正 rubric.dimensions.scoring 下的 3_Good 条目缩进,使其与 4_Excellent、2_Passable 和 1_Fail 位于同一层级,确保示例可被 YAML 解析器正确解析。book-id/chapter7.md-449-450 (1)
449-450: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win避免对 RLVR 的效果作绝对化表述。
这里声称可“彻底”消除 reward hacking,并暗示可以移除 KL;但 Line 390 和 Line 422 又说明 RLVR/GRPO 通常保留 KL 正则。可验证奖励主要避免神经 reward model 的漏洞利用,仍可能存在验证器漏洞或规范错配;请统一表述并保留必要的稳定性约束。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter7.md` around lines 449 - 450, Revise the RLVR discussion in the paragraph around “verifiability” so it no longer claims reward hacking is completely eliminated or that KL penalty terms can be removed. State that verifiable rewards reduce vulnerabilities associated with neural reward models while validator flaws and specification mismatch remain possible, and preserve the established description that RLVR/GRPO retains necessary KL regularization.book-id/chapter7.md-579-579 (1)
579-579: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift完成残留英文段落的印尼语翻译。
这些位置仍包含整段英文正文,而不是正常的术语括注,导致“完整印尼语译本”无法交付。请在合并前翻译或移除这些英文占位内容。
Also applies to: 581-581, 596-598
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter7.md` at line 579, Translate or remove the remaining full English prose in the chapter, specifically the paragraphs beginning with “Memulai Bertolak” and the content at the additional referenced locations. Preserve necessary technical terms as Indonesian text with parenthetical terminology only where appropriate, so the chapter is fully localized rather than containing English placeholders.book-id/chapter9.md-235-237 (1)
235-237: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win删除残留英文片段和重复图注
图 9-6 的图片链接后混入了
d reply context...等残留英文,随后又重复插入一份英文图注。构建后的书稿会显示乱码并重复同一插图说明,请保留单一、完整的印尼语图注。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter9.md` around lines 235 - 237, Clean up the Figure 9-6 section by removing the residual English text beginning with “d reply context” after the image link and deleting the duplicate English caption. Retain only the single complete Indonesian caption and its associated image reference.book-id/chapter9.md-340-344 (1)
340-344: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win完成该段英文正文的印尼语翻译
这一整段仍是英文,而本 PR 的目标是提供完整的印尼语译本。请翻译 lines 340-344,并保持术语与本章其他部分一致。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter9.md` around lines 340 - 344, Translate the full paragraph and numbered steps in the chapter9 section into Indonesian, replacing the remaining English prose while preserving the technical meaning. Keep terminology consistent with the chapter, including DOM tree, Accessibility Tree, CDP, interactive elements, unique IDs, bounding boxes, and screenshots.book-id/chapter8.md-264-265 (1)
264-265: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift统一修复损坏的机器翻译段落
这些段落不是普通措辞瑕疵,而是出现了大量同义词堆叠、重复表达和语义不连贯,导致印尼语正文不可读。
book-id/chapter8.md#L264-L265: 根据原文重新翻译该段,恢复清晰的知识、策略和工具三层说明。book-id/chapter9.md#L404-L405: 根据原文重新翻译该段,删除重复词和无意义的扩写。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter8.md` around lines 264 - 265, 根据原文重新翻译 book-id/chapter8.md 第264-265行和 book-id/chapter9.md 第404-405行,修复机器翻译造成的同义词堆叠、重复表达及语义不连贯问题;保留并清晰呈现知识、策略和工具三层说明,不进行无意义扩写。book-id/chapter9.md-139-141 (1)
139-141: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win修复被拼接到正文中的章节标题
## Paradigma 2被直接拼接在上一段末尾,Markdown 不会将其识别为独立标题,导致章节结构和目录生成错误。请在标题前补充换行。建议修改
-... token-token `<|noise|>` ... alih## Paradigma 2: Model Omnimodal End-to-End (Omni) +... token-token `<|noise|>` ... alih + +## Paradigma 2: Model Omnimodal End-to-End (Omni)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter9.md` around lines 139 - 141, 在正文段落结尾与“## Paradigma 2: Model Omnimodal End-to-End (Omni)”标题之间补充换行,使该章节标题成为独立的 Markdown 标题;保留前文内容和标题文本不变。book-id/gen_ch2_figs.py-3-17 (1)
3-17: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win函数名与输出文件名错位,文档字符串也与实际生成数量不符。
fig2_9()实际写出fig2-10.svg,而fig2_9_memory_comparison()写出fig2-9.svg;顶部文档字符串声明「9 figures total (fig2-1 through fig2-9)」,但主流程生成 11 张并在第 886 行打印 11。后续维护极易改错图号,建议把函数名与图号对齐并更新文档字符串。Also applies to: 596-599, 674-677, 783-786, 886-886
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch2_figs.py` around lines 3 - 17, 对齐 gen_ch2_figs.py 中各图生成函数、输出文件名与文档字符串:重点检查 fig2_9()、fig2_9_memory_comparison() 及主流程,确保函数名对应实际图号、输出文件按 fig2-1 至 fig2-9 命名,并将顶部数量说明及主流程第 886 行的生成数量更新为 9。book-id/build_pdf.sh-64-71 (1)
64-71: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win出版配置整体沿用英文版,未做印尼语本地化。
build_pdf.sh与cover.tex是从英文版直接复制的,语言选项、PDF 元数据、输出文件名和封面文案都仍是英文,导致印尼语正文外包裹一层英文书壳。
book-id/build_pdf.sh#L64-L71:将title-meta/author-meta改为印尼语,并补充印尼语译者署名;同时把OUT(第 30 行)加上-id后缀以避免与英文版产物同名。book-id/cover.tex#L15-L17:翻译书名与副标题,并把第 108 行的Version改为Versi。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/build_pdf.sh` around lines 64 - 71, 本地化印尼语版本的出版配置:在 book-id/build_pdf.sh 的构建参数中将 title-meta 和 author-meta 改为印尼语并补充印尼语译者署名,同时更新 OUT 配置为带 -id 后缀以避免与英文版产物重名;在 book-id/cover.tex 的书名和副标题处使用印尼语,并将封面中的 Version 改为 Versi。book-id/crossref.lua-59-76 (1)
59-76: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win印尼语交叉引用需要本地化关键词
split_kw只识别Figure/Chapter,图注锚点也只从Figure N-M生成;而正文里实际大量出现的是Bab N/Gambar N-M,这些引用会静默退化成纯文本。第 101、110 行生成的显示文本也仍是英文,建议把匹配词和输出词一起本地化。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/crossref.lua` around lines 59 - 76, Update split_kw and the Figure/Image caption-matching logic to recognize Indonesian keywords “Bab” and “Gambar” alongside the existing terms, generating anchors for Gambar N-M references. Also update the reference display-text generation around the existing lines 101 and 110 to emit the localized Indonesian labels instead of Figure/Chapter.book-id/gen_ch9_figs.py-1049-1208 (1)
1049-1208: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
fig10_11与fig10_12被完整重复定义了两遍。第 855-1014 行已定义过这两个函数,此处是逐字复制的第二份;后定义会覆盖前者,属于纯重复代码,应删除其中一份。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch9_figs.py` around lines 1049 - 1208, Remove the duplicate definitions of fig10_11 and fig10_12, keeping only one complete implementation of each function. Preserve the earlier definitions and delete this later repeated block so the functions are not redefined or overwritten.book-id/gen_ch9_figs.py-1-38 (1)
1-38: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win文档声明“DO NOT RUN”,但
main()仍会无条件覆盖fig10-*.svg。第 30 行把
sys.exit(2)注释掉了,防护措施形同虚设:任何人执行该脚本都会按 docstring 所警告的方式覆盖图形。要么恢复显式的守卫,要么删掉这个已废弃的生成器。第 28、31 行还重复导入了sys。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch9_figs.py` around lines 1 - 38, Restore the execution guard in the deprecated figure generator so running the script exits before any generation or overwrite occurs, matching the “DO NOT RUN” declaration. Remove the duplicate sys import while updating the top-level guard near the imports; preserve the existing generation code otherwise.book-id/experiment_box.lua-28-40 (1)
28-40: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win构建资产中的英文字符串未随正文一起本地化。 正文已全部译为印尼语,但 Pandoc 过滤器与 LaTeX 前置配置仍硬编码英文,导致标题匹配失效、页面出现英文标签。
book-id/experiment_box.lua#L28-L40:把^[Ee]xperiment%s?%d与^[Tt]hought [Qq]uestions改为匹配印尼语章节中的实际标题写法(可同时兼容英文)。book-id/preamble.tex#L180-L190:把questionbox的title={... Deep Thinking}改为印尼语标题。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/experiment_box.lua` around lines 28 - 40, Update the title-matching patterns in experiment_box.lua around the experiment and thought-question branches to recognize the Indonesian chapter headings while retaining English compatibility. In book-id/preamble.tex lines 180-190, replace the questionbox title’s hardcoded “Deep Thinking” text with the Indonesian localized title.book-id/gen_ch5_figs.py-1096-1101 (1)
1096-1101: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win静默吞掉所有异常,会导致图形生成失败被完全掩盖。
任一
figN()抛错都会被忽略,脚本仍打印 “Generated 11 figures”,构建随后会使用缺失或过期的 SVG。gen_ch3_figs.py/gen_ch4_figs.py都是直接失败退出的,这里应保持一致。🐛 建议修复
for fn in figs: - try: - fn() - except Exception as e: - pass - print(f"\nGenerated {len(figs)} figures in {OUT}/") + fn() + print(f" ok {fn.__name__}") + print(f"\nGenerated {len(figs)} figures in {OUT}/")🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch5_figs.py` around lines 1096 - 1101, Remove the broad exception suppression around the `fn()` calls in the figure-generation loop so any `figN()` failure propagates and terminates the script. Keep the final generated-count message only reachable after all figures complete successfully, matching the direct-failure behavior of the other chapter generators.Source: Linters/SAST tools
🟡 Minor comments (26)
book-id/introduction.md-66-66 (1)
66-66: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win修正代码仓库链接的 Markdown 语法。
当前写法是
[URL],没有链接目标,不会生成可点击链接。请改为<URL>或[Repositori Kode Pendamping](URL)。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/introduction.md` at line 66, Update the “Repositori Kode Pendamping” Markdown link so it includes the repository URL as its link target, using either autolink syntax or descriptive link text with the URL, while preserving the displayed repository reference.Source: Linters/SAST tools
book-id/chapter1.md-65-79 (1)
65-79: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win为代码围栏补充语言标识。
这两个围栏触发了 markdownlint MD040。即使内容是伪代码,也请使用
text、json或最接近的实际语言标识,以确保文档检查和渲染结果稳定。Also applies to: 155-188
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter1.md` around lines 65 - 79, 为 chapter1.md 中展示工具调用流程的两个代码围栏补充语言标识:将当前无标识的围栏分别标记为最接近内容的语言(优先使用 text 或 json),并同步处理另一个适用的代码围栏,确保所有围栏都符合 Markdownlint MD040。Source: Linters/SAST tools
book-id/chapter2.md-321-348 (1)
321-348: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win修复 Markdown lint 警告。
321–348 行的三个代码围栏缺少语言标识;请分别添加合适的标识(伪代码可使用
text)。同时删除 417 行和 502 行块引用中的空行,以通过 MD040/MD028。Also applies to: 417-417, 502-502
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter2.md` around lines 321 - 348, Update the three fenced code blocks in the documented message examples to include appropriate language identifiers, using text for pseudocode where needed. Remove the empty lines inside the blockquotes at the referenced sections so the Markdown passes MD040 and MD028.Source: Linters/SAST tools
book-id/chapter3.md-23-31 (1)
23-31: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win为所有围栏代码块指定语言。
这些代码块会触发 Markdown lint(MD040)。对话、提取结果、BM25 日志和目录树可分别使用
text等合适的语言标识。Also applies to: 35-41, 385-398, 530-537
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter3.md` around lines 23 - 31, 为 book-id/chapter3.md 中所有围栏代码块补充语言标识,至少覆盖对话示例、提取结果、BM25 日志和目录树等位置;根据内容使用合适的标识(如 text),确保每个围栏代码块都符合 Markdown lint MD040。Source: Linters/SAST tools
book-id/chapter3.md-12-12 (1)
12-12: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win翻译图像的替代文本。
本 PR 的目标是完整印尼语翻译,但图像 alt text 仍全部使用英文。屏幕阅读器和图片加载失败时会直接暴露英文内容;请将这些描述翻译为印尼语,同时保持 SVG 文件路径不变。
Also applies to: 95-95, 217-217, 227-227, 307-307, 339-339, 351-351, 371-371, 410-410, 493-493, 501-501, 570-570, 576-576, 612-612, 665-665
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter3.md` at line 12, Translate the alt text for every referenced image in chapter3.md into Indonesian, including the listed occurrences, while preserving each existing SVG/image file path unchanged.book-id/chapter10.md-406-406 (1)
406-406: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win为代码围栏指定语言。
markdownlint 报告 MD040;请将无语言标注的围栏改为例如
```text,以通过文档检查并明确该块不是可执行代码。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter10.md` at line 406, 为 chapter10.md 中该无语言标注的 Markdown 代码围栏添加语言标识,将开头围栏改为适合纯文本内容的 ```text,并保持围栏内内容及其他文档结构不变。Source: Linters/SAST tools
book-id/chapter10.md-128-128 (1)
128-128: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win清理实验编号和标题占位符。
正文仍包含
Eksperimen 10-2 ??和Eksperimen 10-4 ???;同时,后文引用了 Eksperimen 10-3,但对应的翻译 Agent 实验段落没有明确的实验标题。发布前应补齐编号和标题,避免 PDF 中出现未完成内容。Also applies to: 202-214, 233-233
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter10.md` at line 128, 清理 chapter10.md 中实验标题的占位符:为 Eksperimen 10-2 和 Eksperimen 10-4 补齐正确编号与标题,并为被后文引用但缺少明确标题的 Eksperimen 10-3 翻译 Agent 实验段落添加正式标题;确保相关段落及引用使用一致、完整的实验编号。book-id/思考题参考答案.md-365-367 (1)
365-367: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win修正未定义的 Table 10-4 引用。
问题本身询问的是 Table 10-3,但答案改为引用 Table 10-4;当前
book-id/chapter10.md也没有定义 Table 10-4。请统一编号,并补齐对应表格内容。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/思考题参考答案.md` around lines 365 - 367, 统一该题目与答案中的表格编号:将答案中对 Table 10-4 的引用改为题目实际要求的 Table 10-3,并检查相关表格引用保持一致;若 Table 10-3 尚未定义,则在对应章节补充其内容,避免继续引用未定义的 Table 10-4。book-id/chapter10.md-346-346 (1)
346-346: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win修复 QA 条目的 Markdown 层级。
相邻条目都位于引用块中,但这一行缺少前导
>,会使 QA Agent 条目脱离实验说明块并改变 PDF 排版。建议修改
-- **Agen QA Insinyur (QA Engineer Agent)**: ... +> - **Agen QA Insinyur (QA Engineer Agent)**: ...🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter10.md` at line 346, Restore the missing leading “>” on the QA Engineer Agent list entry in the experiment description block, matching the surrounding quoted entries and preserving the intended Markdown/PDF hierarchy.book-id/chapter4.md-533-538 (1)
533-538: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win为围栏代码块指定语言。
这段内容是纯文本示例,请使用
text标识以修复 MD040。建议修改
-``` +```text [Unprocessed Event 1/4] Hasil alat dari database_query: ... [Unprocessed Event 2/4] Catatan suplementer pengguna: Hanya lihat data Beijing [Unprocessed Event 3/4] Peringatan sistem: Tenggat pelaporan dalam 30 menit [Unprocessed Event 4/4] Pengguna bertanya: Bagaimana kemajuannya?</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@book-id/chapter4.mdaround lines 533 - 538, Specify the text language on the
fenced code block containing the unprocessed event examples by changing its
fence to use the text identifier, preserving all example content unchanged.</details> <!-- cr-comment:v1:bc49874faf32017facc2a3b9 --> _Source: Linters/SAST tools_ </blockquote></details> <details> <summary>book-id/chapter4.md-121-123 (1)</summary><blockquote> `121-123`: _🎯 Functional Correctness_ | _🟡 Minor_ | _⚡ Quick win_ **把这里改成区分“异步任务”和“跨会话唤醒”。** MCP 已有进度通知和 Tasks 这类持久任务句柄,断线后可以继续轮询;缺的是标准化的跨会话 Agent 唤醒/事件循环,而不是异步能力本身。 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@book-id/chapter4.mdaround lines 121 - 123, Perbarui bagian “Keterbatasan
MCP” agar membedakan kemampuan tugas asinkron—termasuk notifikasi progres dan
Tasks dengan handle persisten yang dapat terus dipolling setelah koneksi
terputus—dari keterbatasan pemicu Agent lintas sesi. Nyatakan bahwa yang belum
distandardisasi adalah mekanisme untuk membangunkan Agent atau menjalankan event
loop lintas sesi, bukan dukungan terhadap tugas asinkron.</details> <!-- cr-comment:v1:eede106facfcb21f29b39877 --> </blockquote></details> <details> <summary>book-id/chapter5.md-35-35 (1)</summary><blockquote> `35-35`: _📐 Maintainability & Code Quality_ | _🟡 Minor_ | _⚡ Quick win_ **修复会阻断 Markdown lint 的格式问题。** 为 Lines 35 和 368 的代码围栏添加 `text`、`python` 等语言标识,并删除 Lines 392 和 525 的 blockquote 空行。 Also applies to: 368-368, 392-392, 525-525 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@book-id/chapter5.mdat line 35, 修复 chapter5.md 中阻断 Markdown lint 的格式问题:为第 35
行和第 368 行的代码围栏补充适当的语言标识(如 text、python),并删除第 392 行和第 525 行 blockquote 中的空行。</details> <!-- cr-comment:v1:4fc546a84f52133692cf28a9 --> _Source: Linters/SAST tools_ </blockquote></details> <details> <summary>book-id/chapter6.md-35-35 (1)</summary><blockquote> `35-35`: _📐 Maintainability & Code Quality_ | _🟡 Minor_ | _⚡ Quick win_ **为代码围栏指定语言。** 第 35 行的 fenced code block 未声明语言,触发 MD040。请改为 `text` 或其他适用语言,避免 Markdown 检查告警。 <details> <summary>建议修改</summary> ```diff -``` +```text🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter6.md` at line 35, 为 chapter6.md 第 35 行的 fenced code block 添加语言标识,使用适合其内容的 text(或其他合适语言),保持代码块内容不变并消除 MD040 检查告警。Source: Linters/SAST tools
book-id/chapter7.md-612-612 (1)
612-612: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win删除未使用的
ch7-8脚注定义,或补充引用。全文没有
[^ch7-8]引用,当前定义会触发 Markdown lint 的 MD053 警告。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter7.md` at line 612, Remove the unused ch7-8 footnote definition, or add a corresponding [^ch7-8] reference where intended, ensuring the Markdown no longer triggers MD053.Source: Linters/SAST tools
book-id/chapter7.md-299-300 (1)
299-300: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win不要在 blockquote 中插入未标记的空行。
这些空行会结束 Markdown blockquote,后续内容可能被渲染成独立段落。请删除空行,或使用单独的
>保持引用块连续。Also applies to: 536-537
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter7.md` around lines 299 - 300, Remove the unmarked blank lines within the blockquote around the experiment-design passage and the corresponding section at the referenced later location. Keep the quote continuous by deleting those blank lines or prefixing them with `>` so subsequent text remains rendered as part of the blockquote.Source: Linters/SAST tools
book-id/chapter7.md-95-95 (1)
95-95: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win修复第 95 行的损坏公式和第 156 行残留的
\n
第 95 行的复杂度表达式被截断(^2$、$)缺失),第 156 行还保留了字面量\n。这会破坏公式渲染并扭曲技术含义;请从原文补回完整公式,并去掉残留换行转义。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter7.md` at line 95, Perbaiki paragraf yang memuat pembahasan covariate shift pada bab ini dengan memulihkan formula kompleksitas lintasan yang terpotong hingga mencakup notasi lengkap untuk imitasi murni dan pelatihan online, sesuai teks sumber. Selain itu, hapus literal “\n” yang tersisa di sekitar bagian terkait pada simbol atau paragraf yang berada dekat pembahasan tersebut, tanpa mengubah isi teknis lainnya.book-id/chapter9.md-126-131 (1)
126-131: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win为代码围栏补充语言标识
markdownlint-cli2报告这些围栏缺少语言标识(MD040)。这些示例不是编程语言代码,建议使用text,以消除 lint 警告并明确其用途。建议修改
-``` +```textAlso applies to: 197-205, 346-354
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/chapter9.md` around lines 126 - 131, 在 chapter9.md 中为该示例及同文件第 197-205、346-354 行对应的代码围栏添加 text 语言标识;保持围栏内的示例内容不变,以消除 MD040 警告。Source: Linters/SAST tools
book-id/gen_ch1_figs.py-18-18 (1)
18-18: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win印尼语文本中残留了中文全角标点。
第 18 行的
(/)和第 412 行的:是从中文原版遗留的全角标点,在印尼语排版中应使用半角形式,否则图中字符间距会明显异常。🐛 建议修正
- s.text(410, 100, 'LLM(Kimi K3 / GPT-5.6)', size=FS_BODY, bold=True) + s.text(410, 100, 'LLM (Kimi K3 / GPT-5.6)', size=FS_BODY, bold=True)- s.box(wx, wy, ww, wh, f'{title}:{task}', fill='light', font_size=FS_SMALL) + s.box(wx, wy, ww, wh, f'{title}: {task}', fill='light', font_size=FS_SMALL)Also applies to: 412-412
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch1_figs.py` at line 18, Update the Indonesian text rendered by the figure-generation code near s.text to replace the full-width parentheses with standard half-width parentheses, and replace the full-width colon at the corresponding text definition with a half-width colon. Preserve the surrounding wording and formatting.Source: Linters/SAST tools
book-id/gen_ch8_figs.py-76-83 (1)
76-83: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win硬编码的红/绿填充与全书灰度印刷风格不符。
svg_lib.py顶部明确声明配色为黑白灰以适配黑白印刷,而这里使用#f0d8d8/#d8e8d8区分「Naif」与「Dioptimalkan」。在黑白输出下两者灰度接近,语义区分会丢失。建议改用COLORS中的灰阶(例如light/medium)并配合虚线边框区分。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch8_figs.py` around lines 76 - 83, Update the diagram styling in the relevant figure-generation code to use grayscale values from COLORS instead of the hardcoded red and green fills, such as light and medium. Add distinct dashed borders to preserve the visual difference between the “Naif” and “Dioptimalkan” sections in grayscale output, while keeping the existing layout and text unchanged.book-id/gen_ch2_figs.py-291-296 (1)
291-296: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win小数分隔符在同一章内不一致。
第 291 行用印尼语习惯的逗号(
~0,5 detik),而第 418-421 行的压缩率仍用英文句点(6.8%、2.1%、0.9%、1.4%)。建议统一为逗号。Also applies to: 417-422
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch2_figs.py` around lines 291 - 296, 统一本章的小数分隔符:在压缩率相关文本生成处,将 417-422 行附近的 `6.8%`、`2.1%`、`0.9%` 和 `1.4%` 改为使用逗号的小数格式,与 `s.text` 中的 `~0,5 detik` 保持一致。book-id/gen_ch1_figs.py-34-34 (1)
34-34: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win标签尾部多余的
\n会插入一个空行。
SVG.box()会对标签执行str(label).split('\n'),尾随换行会产生一个空字符串行并参与行高与垂直居中计算,使文字整体上移。🐛 建议修正
- s.box(120, 250, 200, 55, 'Pengguna: Cari tren Bitcoin bulan lalu\n', fill='light', font_size=FS_SMALL) + s.box(120, 250, 200, 55, 'Pengguna: Cari tren Bitcoin bulan lalu', fill='light', font_size=FS_SMALL)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch1_figs.py` at line 34, Remove the trailing newline from the label passed to SVG.box in the affected figure-generation call, while preserving the displayed text content and existing box layout.book-id/build_pdf.sh-6-6 (1)
6-6: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win用法注释中的目录名有误。
本文件位于
book-id/,注释里写的是cd book。🐛 建议修正
-# Usage: cd book && bash build_pdf.sh +# Usage: cd book-id && bash build_pdf.sh🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/build_pdf.sh` at line 6, 修正 build_pdf.sh 顶部的 Usage 注释,将错误的 “cd book” 更新为进入 “book-id” 目录,保持后续脚本调用说明不变。book-id/gen_ch2_figs.py-108-109 (1)
108-109: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winQwen3-0.6B 的参数量与吞吐单位有误。
第 108 行写作
0,6M parameter,而 Qwen3-0.6B 为 6 亿参数(0,6B / 600M);第 109 行token/d的单位不明,按上下文应为每秒 token(token/detik)。🐛 建议修正
- s.text(410, 120, '0,6M parameter · Kuantisasi Q4', size=FS_SMALL, fill='text_light') - s.text(410, 145, '> 100 token/d', size=FS_SMALL, fill='text_light') + s.text(410, 120, '0,6B parameter · Kuantisasi Q4', size=FS_SMALL, fill='text_light') + s.text(410, 145, '> 100 token/detik', size=FS_SMALL, fill='text_light')🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch2_figs.py` around lines 108 - 109, Update the Qwen3-0.6B labels in the figure text calls to show 0,6B parameters (or 600M) instead of 0,6M, and replace the ambiguous token/d throughput unit with the intended per-second token notation while preserving the existing values and styling.book-id/preamble.tex-180-190 (1)
180-190: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win印尼语译本中的可见标题仍是英文 “Deep Thinking”。
questionbox的title会直接印在正文页面上,需要一并本地化(例如 “Pemikiran Mendalam”),否则思考题框在整本印尼语书中显示英文。🐛 建议修复
- title={\sffamily\bfseries Deep Thinking}, + title={\sffamily\bfseries Pemikiran Mendalam},🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/preamble.tex` around lines 180 - 190, Update the visible title in the questionbox definition from the English “Deep Thinking” to the Indonesian translation “Pemikiran Mendalam”, while preserving the existing styling and box configuration.book-id/gen_ch5_figs.py-708-720 (1)
708-720: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win换行转义不一致,最后一个步骤的文本无法换行。
前几项用字面
\\n(与 719 行split('\\n')匹配),而第 713 行的"Deskripsi \n teks"是真实换行符,split('\\n')无法切分,会把一个含真实换行的字符串直接写进<text>,渲染结果异常。🐛 建议修复
- ("Pengguna", 'medium', "Deskripsi \n teks"), + ("Pengguna", 'medium', "Deskripsi \\n teks"),🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch5_figs.py` around lines 708 - 720, Update the final “Deskripsi” entry in trad_steps to use the same literal newline escape sequence as the preceding descriptions, so desc.split('\\n') in the rendering loop separates it into individual lines and produces valid SVG text elements.book-id/gen_cover.py-45-57 (1)
45-57: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win文件句柄未关闭;
urlretrieve也没有超时。第 50 行
open(out, "wb").write(data)依赖引用计数回收,属资源泄漏写法;另外第 57 行的下载没有超时,网络挂住时脚本会无限等待。🐛 建议修复
+import urllib.request +from urllib.request import urlopen ... data = base64.b64decode(r.data[0].b64_json) - open(out, "wb").write(data) + with open(out, "wb") as f: + f.write(data) except Exception as e: print(f"gpt-image-1 tidak tersedia ({e}); beralih ke dall-e-3 …") @@ url = r.data[0].url - urllib.request.urlretrieve(url, out) + with urllib.request.urlopen(url, timeout=60) as resp, open(out, "wb") as f: + f.write(resp.read())🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_cover.py` around lines 45 - 57, Update the image-writing path in the generation fallback around the unnamed script flow to use a context-managed file handle, and add an explicit timeout to the urllib.request.urlretrieve download so network stalls do not wait indefinitely.Source: Linters/SAST tools
🧹 Nitpick comments (12)
book-id/svg_lib.py (2)
196-196: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value建议将
_ATTR改为普通函数。
(re.search(...) or [None, None])[1]这种写法可读性较差,且 Ruff 会报 E731。♻️ 建议改法
-_ATTR = lambda attrs, name: (re.search(name + r'="([^"]*)"', attrs) or [None, None])[1] +def _ATTR(attrs, name): + m = re.search(name + r'="([^"]*)"', attrs) + return m.group(1) if m else None🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/svg_lib.py` at line 196, 将 `_ATTR` 从 lambda 表达式改为普通函数,保留其通过正则提取指定属性值、未匹配时返回 None 的现有行为,并消除 Ruff E731 检查问题。Source: Linters/SAST tools
227-227: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value
lo/hi未被使用,且溢出判定分支可以简化。第 227 行解包的
lo, hi从未使用;第 251-255 行的嵌套判断把「无需缩放」和「可用宽度为 0」两种语义混在一个分支里,建议拆开表达。Also applies to: 251-258
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/svg_lib.py` at line 227, 在相关尺寸计算函数中移除对未使用的 lo、hi 解包,仅保留 _extent 的必要结果;同时重构 251-258 行的溢出判断,分别明确处理“无需缩放”和“可用宽度为 0”两种情况,保持其余缩放行为不变。Source: Linters/SAST tools
book-id/gen_ch1_figs.py (1)
2-4: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value建议改为显式导入,与
gen_ch2_figs.py保持一致。
from svg_lib import *会掩盖未定义名(Ruff F403),而同目录的gen_ch2_figs.py已采用显式导入列表。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch1_figs.py` around lines 2 - 4, Replace the wildcard import from svg_lib in gen_ch1_figs.py with an explicit import list, matching the import style and required symbols used by gen_ch2_figs.py. Keep the existing sys.path setup unchanged and include every svg_lib symbol referenced by gen_ch1_figs.py.Source: Linters/SAST tools
book-id/.gitignore (1)
1-1: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value建议同时忽略 PDF 构建产物。
build_pdf.sh输出的AI-Agents-in-Depth-*.pdf及 xelatex 中间文件(*.aux、*.log、*.toc、*.out)当前未被忽略,容易被误提交。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/.gitignore` at line 1, Update the .gitignore entries alongside images/cover-image.png to ignore build_pdf.sh PDF outputs matching AI-Agents-in-Depth-*.pdf and XeLaTeX intermediate files with .aux, .log, .toc, and .out extensions.book-id/build_pdf.sh (1)
10-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win建议在构建前检查外部依赖是否存在。
PR 说明提到本地无法完成构建。脚本假定
pandoc、xelatex、rsvg-convert、pdfinfo均已安装,缺失时报错信息来自底层工具,不易定位。加一段前置检查能显著改善上手体验。♻️ 建议补充
set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$SCRIPT_DIR" + +for cmd in pandoc xelatex rsvg-convert; do + if ! command -v "$cmd" >/dev/null 2>&1; then + echo "Error: required tool '$cmd' not found in PATH" >&2 + exit 1 + fi +doneAlso applies to: 46-54
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/build_pdf.sh` around lines 10 - 13, 在 build_pdf.sh 的 SCRIPT_DIR 初始化和实际构建流程之间增加前置依赖检查,确认 pandoc、xelatex、rsvg-convert、pdfinfo 均可用;任一依赖缺失时立即终止,并输出明确指出缺失命令及安装提示的错误信息,避免继续执行构建。book-id/gen_ch9_figs.py (1)
1233-1235: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value循环变量
name未使用。改为
for _name, func in figs:,或恢复被注释掉的进度打印。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch9_figs.py` around lines 1233 - 1235, 在遍历 figs 的循环中,将未使用的循环变量 name 重命名为 _name;保留现有 func() 调用行为,不要恢复注释掉的进度打印。Source: Linters/SAST tools
book-id/strip_titles.py (1)
93-107: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value
counts.get与examples[result]处理不一致。
counts用.get容错,但examples[result]会在出现新返回值时抛KeyError。建议examples也用setdefault。♻️ 建议改法
- counts[result] = counts.get(result, 0) + 1 - if len(examples[result]) < 5: - examples[result].append(name) + counts[result] = counts.get(result, 0) + 1 + ex = examples.setdefault(result, []) + if len(ex) < 5: + ex.append(name)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/strip_titles.py` around lines 93 - 107, Update the result-handling logic in main so examples supports previously unseen process_file return values just as counts does. Use setdefault when accessing examples[result], while preserving the existing five-example limit and summary output.book-id/gen_ch4_figs.py (1)
34-44: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value
_seq_msg未被任何图形函数使用。
fig4_1的序列图是手写arrow+text实现的,这个辅助函数是死代码;建议删除,或在fig4_1中实际复用它以减少重复。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch4_figs.py` around lines 34 - 44, Remove the unused _seq_msg helper, or refactor fig4_1 to use it for its sequence-message arrows and labels; ensure the chosen change eliminates the duplicate implementation without altering the generated figure.book-id/preamble.tex (2)
1-1: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value注释描述与本目录内容不符。
第 1 行仍写中文书名,第 77 行称 “This is an English book”,而
book-id/是印尼语译本。建议更新这些说明,避免误导后续维护者。Also applies to: 76-81
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/preamble.tex` at line 1, Update the introductory comments in the preamble, including the book title and the English-book statement around lines 76–81, so they accurately identify book-id as the Indonesian translation; remove or revise any remaining Chinese or English-book descriptions while preserving the LaTeX configuration.
30-35: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win字体回退只有两级,缺失时会直接构建失败。
Noto Sans CJK SC/DejaVu Sans/DejaVu Sans Mono在最小化的 TeX 容器里并不总是存在,此时\newfontfamily/\setmonofont会报错,而 PR 作者本身尚未成功完成本地构建。建议再嵌套一层\IfFontExistsTF,或在build_pdf.sh中记录所需字体依赖。Also applies to: 82-82, 115-117
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/preamble.tex` around lines 30 - 35, 增强字体回退逻辑,避免最小化 TeX 容器缺少 Noto Sans CJK SC、DejaVu Sans 或 DejaVu Sans Mono 时构建失败。更新 \fallbackfont、★ 的 \newunicodechar 处理及相关 \setmonofont 配置,使用嵌套 \IfFontExistsTF 选择可用字体,并在无候选字体时提供安全回退或由 build_pdf.sh 明确记录并验证所需字体依赖。book-id/gen_ch3_figs.py (1)
851-861: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value建议与
gen_ch4_figs.py/gen_ch5_figs.py保持一致,封装为main()。其余章节脚本都提供了可复用的
main()入口,本文件把逻辑直接写在if __name__块中,无法被批量构建脚本导入调用。♻️ 建议改法
-if __name__ == '__main__': - os.makedirs(OUT, exist_ok=True) - for fn in ALL_FIGS: - fn() - print(f" ok {fn.__name__}") - print(f"\nDone — {len(ALL_FIGS)} SVGs saved to {OUT}/") +def main(): + os.makedirs(OUT, exist_ok=True) + for fn in ALL_FIGS: + fn() + print(f" ok {fn.__name__}") + print(f"\nDone — {len(ALL_FIGS)} SVGs saved to {OUT}/") + + +if __name__ == '__main__': + main()🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch3_figs.py` around lines 851 - 861, 将 gen_ch3_figs.py 底部的输出目录创建和 ALL_FIGS 遍历逻辑封装到可复用的 main() 函数中,并让 if __name__ == '__main__' 仅调用 main();保持现有生成顺序、日志输出和返回行为不变,以便批量构建脚本导入调用。book-id/gen_ch5_figs.py (1)
285-285: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value分节注释编号与其后的函数不匹配。
例如第 285 行标注
fig5-3却紧跟fig5_4,第 599 行标注fig5-7却紧跟fig5_8。函数顺序调整后注释未同步,容易误导后续维护者。Also applies to: 387-387, 481-481, 599-599, 695-695, 790-790, 904-904, 992-992
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@book-id/gen_ch5_figs.py` at line 285, 同步更新 gen_ch5_figs.py 中各分节注释与其后函数的编号,重点检查 fig5-3、fig5-7 以及 387、481、599、695、790、904、992 行对应的标注。确保每个注释使用紧随其后的函数实际生成的图编号,保持函数顺序不变且不修改函数逻辑。
| # ════════════════════════════════════════════════════════════════════ | ||
| # Main | ||
| # Shared file system | ||
| fy = 310 | ||
| s.rect(30, fy, W - 60, 50, fill='medium', rx=4) | ||
| s.text(W // 2, fy + 16, 'Direktori Proyek Bersama', size=FS_SMALL, bold=True) | ||
| s.mono(W // 2, fy + 36, 'docs/PRD.md docs/design.md src/*.py docs/test_report.md', | ||
| size=11, anchor='middle') | ||
|
|
||
| # Key insight | ||
| ky = 375 | ||
| s.rect(30, ky, W - 60, 130, fill='code_bg', rx=4) | ||
| s.text(W // 2, ky + 18, 'Desain Inti MetaGPT', size=FS_BODY, bold=True) | ||
|
|
||
| insights = [ | ||
| ('Dokumen Terstandarisasi', 'Setiap peran menghasilkan format yang jelas — hilir hanya perlu memahami format, bukan proses pemikiran hulu'), | ||
| ('Decoupling Antarmuka', 'Tingkatkan PM (beralih ke model yang lebih kuat) — selama output sesuai dengan format PRD, hilir tidak memerlukan modifikasi'), | ||
| ('Tanpa Manajer', 'Kontrol mengalir secara alami di sepanjang DAG: PM→Arch→Eng→QA, tanpa overhead penjadwalan pusat'), | ||
| ('Saluran Eksepsi', 'Kegagalan uji QA → Laporan bug dirutekan oleh modul kembali ke Insinyur → perbaikan iteratif'), | ||
| ] | ||
| for i, (title, desc) in enumerate(insights): | ||
| y = ky + 42 + i * 24 | ||
| s.text(42, y, '▸ ' + title, size=FS_SMALL, bold=True, anchor='start') | ||
| s.text(200, y, desc, size=FS_TINY, anchor='start', fill='text_light') | ||
|
|
||
| s.save(os.path.join(OUT, 'fig10-10.svg')) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win
语法错误:模块顶层出现缩进代码块,整个文件无法解析。
# Main 注释之后的 fy = 310 起的代码块是 fig10_10 尾部被误粘贴的残留,处于模块顶层且带缩进,Python 会直接抛 IndentationError: unexpected indent(s、W 在此作用域也未定义)。必须删除这段残留。
🐛 建议修复
# ════════════════════════════════════════════════════════════════════
# Main
- # Shared file system
- fy = 310
- s.rect(30, fy, W - 60, 50, fill='medium', rx=4)
- s.text(W // 2, fy + 16, 'Direktori Proyek Bersama', size=FS_SMALL, bold=True)
- s.mono(W // 2, fy + 36, 'docs/PRD.md docs/design.md src/*.py docs/test_report.md',
- size=11, anchor='middle')
-
- # Key insight
- ky = 375
- s.rect(30, ky, W - 60, 130, fill='code_bg', rx=4)
- s.text(W // 2, ky + 18, 'Desain Inti MetaGPT', size=FS_BODY, bold=True)
-
- insights = [
- ('Dokumen Terstandarisasi', '...'),
- ...
- ]
- for i, (title, desc) in enumerate(insights):
- y = ky + 42 + i * 24
- s.text(42, y, '▸ ' + title, size=FS_SMALL, bold=True, anchor='start')
- s.text(200, y, desc, size=FS_TINY, anchor='start', fill='text_light')
-
- s.save(os.path.join(OUT, 'fig10-10.svg'))📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| # ════════════════════════════════════════════════════════════════════ | |
| # Main | |
| # Shared file system | |
| fy = 310 | |
| s.rect(30, fy, W - 60, 50, fill='medium', rx=4) | |
| s.text(W // 2, fy + 16, 'Direktori Proyek Bersama', size=FS_SMALL, bold=True) | |
| s.mono(W // 2, fy + 36, 'docs/PRD.md docs/design.md src/*.py docs/test_report.md', | |
| size=11, anchor='middle') | |
| # Key insight | |
| ky = 375 | |
| s.rect(30, ky, W - 60, 130, fill='code_bg', rx=4) | |
| s.text(W // 2, ky + 18, 'Desain Inti MetaGPT', size=FS_BODY, bold=True) | |
| insights = [ | |
| ('Dokumen Terstandarisasi', 'Setiap peran menghasilkan format yang jelas — hilir hanya perlu memahami format, bukan proses pemikiran hulu'), | |
| ('Decoupling Antarmuka', 'Tingkatkan PM (beralih ke model yang lebih kuat) — selama output sesuai dengan format PRD, hilir tidak memerlukan modifikasi'), | |
| ('Tanpa Manajer', 'Kontrol mengalir secara alami di sepanjang DAG: PM→Arch→Eng→QA, tanpa overhead penjadwalan pusat'), | |
| ('Saluran Eksepsi', 'Kegagalan uji QA → Laporan bug dirutekan oleh modul kembali ke Insinyur → perbaikan iteratif'), | |
| ] | |
| for i, (title, desc) in enumerate(insights): | |
| y = ky + 42 + i * 24 | |
| s.text(42, y, '▸ ' + title, size=FS_SMALL, bold=True, anchor='start') | |
| s.text(200, y, desc, size=FS_TINY, anchor='start', fill='text_light') | |
| s.save(os.path.join(OUT, 'fig10-10.svg')) | |
| # ════════════════════════════════════════════════════════════════════ | |
| # Main |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@book-id/gen_ch9_figs.py` around lines 1017 - 1042, Remove the indented
residual block after the “Main” comment, beginning with fy = 310 and ending with
the fig10-10.svg save call. Keep the valid surrounding module content intact so
no top-level code references the undefined s or W symbols and the file parses
without an IndentationError.
bojieli
left a comment
There was a problem hiding this comment.
Thank you for contributing the Indonesian edition. I checked commit 1d5f3cc and attempted a complete PDF build. This PR is not ready for final review yet, so please convert it back to Draft and address the following items before requesting another review.
- Rework and human-proofread the complete translation.
Several sections contain visibly corrupted or machine-expanded prose rather than readable Indonesian. Examples include:
book-id/chapter2.md:827-846: extensive repetition of words such aslurus,luwes, andmurni.book-id/chapter3.md:670-687: long sequences of synonymous words followed by the original English source in parentheses.book-id/chapter3.md:679: “Ringkasan Rangkuman Penutup Ringkasan Simpulan…” instead of a normal chapter-summary heading.book-id/chapter6.md:680-718: similarly expanded/repetitive prose.book-id/chapter9.md:340: a complete paragraph remains in English.book-id/chapter9.md:235-239: Figure 9-6 is duplicated, and stray English text is appended to the first caption.
Because this problem is widespread, please translate again from a clean, current upstream source instead of trying to patch individual words. Have a fluent Indonesian speaker proofread every chapter for grammar, naturalness, technical accuracy, and terminology consistency. Parenthesized English source text should remain only where it is intentionally needed to define a technical term.
- Fix the reproducible PDF build failures.
A clean run of:
cd book-id
bash build_pdf.shcurrently fails for two independent reasons:
book-id/images/fig3-15.svg:5,23contains unescaped&characters, making the SVG invalid XML. Pandoc cannot convert it and XeLaTeX exits with code 43.- After temporarily escaping those characters, the build fails at
book-id/chapter7.md:156because a literal\nappears after the Bellman equation and is emitted as an undefined LaTeX command.
After temporarily fixing both defects, I could produce a 521-page PDF, but LaTeX still reported an undefined fig:9-9 reference. The submitted commit therefore does not pass build verification.
- Audit all figures and their generators.
The Chapter 3 figures are currently semantically mismatched:
fig3-12.svgshows structured legal-knowledge extraction, while its caption says “Comparison of Agentic RAG and Non-Agentic RAG.”fig3-13.svgshows an externalized-learning loop, while its caption says “Agentic RAG System Architecture.”fig3-14.svgshows GAIA experience learning, while its caption says “Contextual Retrieval.”fig3-15.svghas the expected subject, but much of its visible text is still English and it is invalid XML.
Please compare every committed figure against the corresponding canonical source figure. Update the generators and committed SVGs together so rerunning a generator cannot overwrite a correct figure with an obsolete one. Validate every SVG as XML.
- Localize the PDF toolchain consistently.
The toolchain is still largely copied from the English edition:
build_pdf.shuses the English output filename, English title, andEnglish translation: Devaraj.cover.texdisplays “AI Agents in Depth: Design Principles and Engineering Practice” and contains no Indonesian translation credit.preamble.texdisplays “Deep Thinking.”crossref.luarecognizes onlyFigureandChapter, while most of the manuscript usesGambarandBab.
Standardize all captions and prose references on Gambar/Bab, then update the filter to create anchors and links using those terms. The final PDF build should have no undefined-reference or image-conversion warnings.
- Register Indonesian as a repository language.
This PR adds only book-id/, so Indonesian would not appear on the website, in the language switcher, or among release downloads. Please add or update the relevant integration points:
mkdocs.ymlscripts/build_site.shdocs/id/README.mdand, for a complete edition,docs/id/LEARNING.mdchapter1/README.id.mdthroughchapter10/README.id.md- Language navigation and language counts in the root and localized README files
build_epub.shandEPUB.md.github/workflows/build-latest.yml, including path triggers, PDF/EPUB builds, and release artifact names
If PDF or EPUB publication is intentionally being deferred, state that explicitly and open a tracked follow-up; the edition should not be silently unreferenced.
- Update the branch from upstream.
At the time of review, the PR branch is 36 commits behind main, including recent manuscript and translation synchronization changes. Rebase or merge current upstream main before doing the final translation pass.
Before requesting re-review, please run:
git diff --check
python3 -m compileall -q book-id
find book-id/images -name '*.svg' -exec xmllint --noout {} +
(cd book-id && bash build_pdf.sh)
./build_epub.sh id
python3 scripts/check_i18n_consistency.py
bash scripts/build_site.sh
mkdocs build -d sitePlease include the successful PDF/EPUB build results and identify the fluent Indonesian reviewer who performed the final language proofread in the updated PR description. Please prioritize these manuscript, build, figure, and integration problems before working through lower-value lint or docstring suggestions.
|
Thank you very much for the detailed review and for testing the build process. I appreciate the feedback. I will convert this PR back to Draft and address the issues step by step. My plan:
Thank you again for taking the time to review this contribution. I will work on these improvements and update the PR when it is ready. |
Add complete Indonesian translation for the book in directory book-id/. - Copied structure, figures, TeX scripts, and image assets from book-en/. - Translated all markdown files (introduction.md, chapters 1-10, afterword.md, answers) into professional Bahasa Indonesia. - Preserved all code blocks, LaTeX math formulas, markdown formatting, and image assets.
Translate SVG image text and figure generator scripts in book-id/ to Indonesian. - Updated Python figure generator scripts (gen_ch1_figs.py ~ gen_ch9_figs.py, gen_cover.py). - Translated all static SVG diagrams (fig0-*, fig6-*, fig7-*, fig10-*). - Ran fit_svg_text.py to ensure text alignment and layout overflow safety across all 132 SVG files.
…in book-id Refine SVG diagram translations and layout precision in book-id/images/. - Translated remaining untranslated English labels and text across all SVG files and Python generator scripts. - Adjusted text wrapping, font sizes, line height, and box bounding coordinates to prevent text overflow. - Re-generated figures and ran fit_svg_text.py auto-fitting.
…ounds safety Fix all remaining untranslated English labels and apply font-size scaling across all 132 SVG files in book-id/images/. - Translated workflow SVGs (fig1-wf-*.svg, fig2-12.svg, fig2-17.svg, fig3-15.svg, fig6-4.svg, fig6-5.svg, etc.). - Dynamically scaled text font sizes where text length exceeds bounding box widths to eliminate overflow.
Status
This is a draft pull request.
Current progress:
Notes
I wasn't able to successfully build the project in my local environment, so I would appreciate any guidance on the build process or if there are additional setup steps required.
This draft PR is mainly to share the current progress and gather early feedback before the final submission.
Related Issue
Refs #409
Summary by CodeRabbit
新内容
阅读体验
文档与构建