[PR #1556] [MERGED] feat(footnotes): citation-adjacency placement audit + binder rule #15572

Closed
opened 2026-05-20 13:57:41 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/harvard-edge/cs249r_book/pull/1556
Author: @profvjreddi
Created: 4/26/2026
Status: Merged
Merged: 4/26/2026
Merged by: @profvjreddi

Base: devHead: feat/footnote-citation-polish


📝 Commits (10+)

  • c4338e1 fix(intro): anchor Viola-Jones footnote to concept, not citation
  • acae94c fix(ml_workflow): decouple Waterfall footnote from Royce citation
  • 756fbc3 fix(nn_computation): anchor concept footnotes to terms, not citations
  • 675f398 fix(benchmarking): anchor cuDNN and SQuAD footnotes to terms, not citations
  • 37723e2 fix(ml_ops): anchor Prometheus footnote to tool name, not citation
  • a158659 fix(responsible_ai): anchor concept footnotes to terms, not citations
  • ff7c462 fix(edge_intelligence): anchor Gboard footnote to product name, not citation
  • e588634 fix(fault_tolerance): anchor Hamming footnote to ECC concept, not citation
  • 339d151 fix(sustainable_ai): decouple TSMC water-scale footnote from citation
  • 1dcf03e fix(robust_ai): anchor C&W attack footnote to attack name, not citation

📊 Changes

12 files changed (+54 additions, -21 deletions)

View changed files

📝 .pre-commit-config.yaml (+1 -1)
📝 book/cli/commands/validate.py (+34 -1)
📝 book/quarto/contents/vol1/benchmarking/benchmarking.qmd (+2 -2)
📝 book/quarto/contents/vol1/introduction/introduction.qmd (+1 -1)
📝 book/quarto/contents/vol1/ml_ops/ml_ops.qmd (+1 -1)
📝 book/quarto/contents/vol1/ml_workflow/ml_workflow.qmd (+1 -1)
📝 book/quarto/contents/vol1/nn_computation/nn_computation.qmd (+6 -6)
📝 book/quarto/contents/vol2/edge_intelligence/edge_intelligence.qmd (+1 -1)
📝 book/quarto/contents/vol2/fault_tolerance/fault_tolerance.qmd (+1 -1)
📝 book/quarto/contents/vol2/responsible_ai/responsible_ai.qmd (+4 -4)
📝 book/quarto/contents/vol2/robust_ai/robust_ai.qmd (+1 -1)
📝 book/quarto/contents/vol2/sustainable_ai/sustainable_ai.qmd (+1 -1)

📄 Description

12 commits from the games-polish worktree that landed locally during today's polish loop, replayed onto current dev tip.

What this PR does

Sweeps every chapter that had a **Term**[@cite][^fn-...] adjacency pattern (footnote attached directly to a citation) and re-anchors the footnote to a concept term rather than to the citation marker. Then adds a binder check + pre-commit rule to prevent the pattern from regressing.

Footnote placement fixes (10 chapters)

Each fix anchors a footnote to a concept/term/product/tool rather than to the immediately-adjacent citation:

  • intro — Viola-Jones footnote → concept, not citation
  • ml_workflow — Waterfall footnote → decoupled from Royce citation
  • nn_computation — multiple concept footnotes
  • benchmarking — cuDNN and SQuAD footnotes
  • ml_ops — Prometheus footnote → tool name
  • responsible_ai — concept footnotes → terms
  • edge_intelligence — Gboard footnote → product name
  • fault_tolerance — Hamming footnote → ECC concept
  • sustainable_ai — TSMC water-scale footnote → decoupled from citation
  • robust_ai — C&W attack footnote → attack name

Binder enforcement

  • feat(binder): catch [@cite][^fn-...] adjacency in footnote placement check — adds the audit check
  • fix(binder): tolerate whitespace in [@cite][^fn-...] detection — false-positive fix

Provenance

These commits originated in the MLSysBook-games-polish worktree where they were committed locally to dev but never pushed. They were rebased clean onto current origin/dev (1 patch was auto-dropped as already upstream). Pushing them as a feature branch instead of force-pushing to dev directly.

Test plan

  • All 12 commits replayed cleanly on top of current dev (no conflicts)
  • One commit auto-dropped because its patch was already upstream
  • Verify pre-commit hook passes after merge (binder check is the new logic)

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/harvard-edge/cs249r_book/pull/1556 **Author:** [@profvjreddi](https://github.com/profvjreddi) **Created:** 4/26/2026 **Status:** ✅ Merged **Merged:** 4/26/2026 **Merged by:** [@profvjreddi](https://github.com/profvjreddi) **Base:** `dev` ← **Head:** `feat/footnote-citation-polish` --- ### 📝 Commits (10+) - [`c4338e1`](https://github.com/harvard-edge/cs249r_book/commit/c4338e1e7cb1b47699258ae5fb4d7283c90da848) fix(intro): anchor Viola-Jones footnote to concept, not citation - [`acae94c`](https://github.com/harvard-edge/cs249r_book/commit/acae94c63ae8a1aa2f3aa65923db62bec6a47f2a) fix(ml_workflow): decouple Waterfall footnote from Royce citation - [`756fbc3`](https://github.com/harvard-edge/cs249r_book/commit/756fbc3c4ba490a7e0ffcf255f617ab6de99af4e) fix(nn_computation): anchor concept footnotes to terms, not citations - [`675f398`](https://github.com/harvard-edge/cs249r_book/commit/675f3986594de04463131c2b221a1dda53af7598) fix(benchmarking): anchor cuDNN and SQuAD footnotes to terms, not citations - [`37723e2`](https://github.com/harvard-edge/cs249r_book/commit/37723e2c24d3920393fd180de64f4fdfd52db5b5) fix(ml_ops): anchor Prometheus footnote to tool name, not citation - [`a158659`](https://github.com/harvard-edge/cs249r_book/commit/a1586590bd25875183ddc047d8f2df2a05b03359) fix(responsible_ai): anchor concept footnotes to terms, not citations - [`ff7c462`](https://github.com/harvard-edge/cs249r_book/commit/ff7c4625e979a4e80882aa3437f925dc04d86993) fix(edge_intelligence): anchor Gboard footnote to product name, not citation - [`e588634`](https://github.com/harvard-edge/cs249r_book/commit/e588634222ea9d553df711e475225c2fc12a137d) fix(fault_tolerance): anchor Hamming footnote to ECC concept, not citation - [`339d151`](https://github.com/harvard-edge/cs249r_book/commit/339d1513a2f7e528db9bf258ca5d7a1a269148ae) fix(sustainable_ai): decouple TSMC water-scale footnote from citation - [`1dcf03e`](https://github.com/harvard-edge/cs249r_book/commit/1dcf03eba1570b204ca986a7c7c37d985bcc4a75) fix(robust_ai): anchor C&W attack footnote to attack name, not citation ### 📊 Changes **12 files changed** (+54 additions, -21 deletions) <details> <summary>View changed files</summary> 📝 `.pre-commit-config.yaml` (+1 -1) 📝 `book/cli/commands/validate.py` (+34 -1) 📝 `book/quarto/contents/vol1/benchmarking/benchmarking.qmd` (+2 -2) 📝 `book/quarto/contents/vol1/introduction/introduction.qmd` (+1 -1) 📝 `book/quarto/contents/vol1/ml_ops/ml_ops.qmd` (+1 -1) 📝 `book/quarto/contents/vol1/ml_workflow/ml_workflow.qmd` (+1 -1) 📝 `book/quarto/contents/vol1/nn_computation/nn_computation.qmd` (+6 -6) 📝 `book/quarto/contents/vol2/edge_intelligence/edge_intelligence.qmd` (+1 -1) 📝 `book/quarto/contents/vol2/fault_tolerance/fault_tolerance.qmd` (+1 -1) 📝 `book/quarto/contents/vol2/responsible_ai/responsible_ai.qmd` (+4 -4) 📝 `book/quarto/contents/vol2/robust_ai/robust_ai.qmd` (+1 -1) 📝 `book/quarto/contents/vol2/sustainable_ai/sustainable_ai.qmd` (+1 -1) </details> ### 📄 Description 12 commits from the games-polish worktree that landed locally during today's polish loop, replayed onto current dev tip. ## What this PR does Sweeps every chapter that had a `**Term**[@cite][^fn-...]` adjacency pattern (footnote attached directly to a citation) and re-anchors the footnote to a concept term rather than to the citation marker. Then adds a binder check + pre-commit rule to prevent the pattern from regressing. ### Footnote placement fixes (10 chapters) Each fix anchors a footnote to a concept/term/product/tool rather than to the immediately-adjacent citation: - `intro` — Viola-Jones footnote → concept, not citation - `ml_workflow` — Waterfall footnote → decoupled from Royce citation - `nn_computation` — multiple concept footnotes - `benchmarking` — cuDNN and SQuAD footnotes - `ml_ops` — Prometheus footnote → tool name - `responsible_ai` — concept footnotes → terms - `edge_intelligence` — Gboard footnote → product name - `fault_tolerance` — Hamming footnote → ECC concept - `sustainable_ai` — TSMC water-scale footnote → decoupled from citation - `robust_ai` — C&W attack footnote → attack name ### Binder enforcement - `feat(binder): catch [@cite][^fn-...] adjacency in footnote placement check` — adds the audit check - `fix(binder): tolerate whitespace in [@cite][^fn-...] detection` — false-positive fix ## Provenance These commits originated in the `MLSysBook-games-polish` worktree where they were committed locally to `dev` but never pushed. They were rebased clean onto current `origin/dev` (1 patch was auto-dropped as already upstream). Pushing them as a feature branch instead of force-pushing to dev directly. ## Test plan - [x] All 12 commits replayed cleanly on top of current dev (no conflicts) - [x] One commit auto-dropped because its patch was already upstream - [ ] Verify pre-commit hook passes after merge (binder check is the new logic) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-05-20 13:57:41 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/cs249r_book#15572