78 Commits

Author SHA1 Message Date
github-actions[bot]
3283c8aa20 docs: add @coyaSONG as contributor for bug, code, doc (instructors) 2026-07-15 09:09:44 +00:00
github-actions[bot]
bb89312236 docs: add @coyaSONG as contributor for doc (instructors) 2026-07-15 09:09:19 +00:00
coyaSONG
81ca75f92b Fix instructor lab links (issue #1810) (#1959) 2026-07-15 11:06:00 +02:00
Vijay Janapa Reddi
2df92fd9d2 Merge dev into fix/site-qa-polish 2026-06-27 09:03:44 -04:00
Vijay Janapa Reddi
c53f3fe238 Site QA polish: finish MLSys.im brand migration, fix broken links, add memory-tier figure
- Complete the MLSYSIM -> MLSys.im display-name migration across mlsysim/docs,
  instructors, and shared config (code identifiers stay lowercase mlsysim)
- Fix broken TinyTorch module links (_ABOUT.html -> .html)
- Route the navbar Subscribe action to the newsletter page so Safari content
  blockers stop hiding the #subscribe anchor
- Add the Accelerator Memory Tiers figure to compute_infrastructure with a
  registry-driven log-log capacity/bandwidth scatter
- Add four sourced cloud accelerator specs (Groq LPU, Graphcore GC200,
  Untether speedAI240, d-Matrix Corsair) feeding the local-SRAM tier
- Remove the unshipped Coming Soon audio-lectures placeholder and related
  Binder/audio references
2026-06-27 08:14:00 -04:00
Vijay Janapa Reddi
b933251ac9 docs: backfill missed contributor credits 2026-06-24 07:52:19 -04:00
Vijay Janapa Reddi
c2259df1ce fix: clean website preflight issues 2026-06-22 14:34:24 -04:00
Vijay Janapa Reddi
714eecebb4 fix: flatten Quarto's double-nested vol URL structure at deploy time
Quarto renders chapters at contents/vol{N}/{chapter}/{chapter}.html
(depth 3 from site root), which deployed as the double-nested URL
mlsysbook.ai/vol{N}/contents/vol{N}/{chapter}/{chapter}.html.

Fixes:
- Add .github/scripts/flatten-vol-urls.sh: post-build script that
  moves contents/vol{N}/* to site root, fixes relative asset paths
  (../../../ → ../), search.json hrefs, sitemap.xml, and absolute
  URL refs in moved HTML files.
- book-publish-live.yml: run flatten script after artifact download,
  before release manifests, for both vol1-site and vol2-site.
- book-preview-dev.yml: add flatten-vol-urls.sh to sparse checkout
  and run flatten before rewrite-dev-urls so depth is correct.
- cloudflare-redirects.json: update all 37 "to" values to clean
  /vol{N}/{chapter}/... form; add 33 backward-compat entries for
  existing /vol{N}/contents/vol{N}/... live URLs.
- instructors/*.qmd: update 77 chapter hrefs to clean URL form.
2026-06-08 21:05:05 -04:00
Vijay Janapa Reddi
ae801a0be4 fix: repair broken chapter URLs in instructors pages and add Cloudflare redirect rules
Source fixes (instructors/*.qmd):
- Replace all short-form /vol1/{slug}.html URLs with correct full paths
  /vol1/contents/vol1/{chapter}/{chapter}.html across course-map, foundations-
  syllabus, scale-syllabus, tinyml-syllabus, getting-started, ta-guide
- Fix renamed chapter slugs: dl_primer→nn_computation, efficient_ai→
  optimizations/model_compression, serving→model_serving, ops→ml_ops,
  responsible_ai→responsible_engr (vol1), on_device_inference→model_serving
- Same pattern for all /vol2/{slug}.html → /vol2/contents/vol2/...
- Update broken tinytorch/INSTRUCTOR.html link to tinytorch/ index

Cloudflare redirects (external inbound traffic):
- Add shared/config/cloudflare-redirects.json with 37 301 redirects covering
  all broken short-form chapter URLs
- Add infra-cloudflare-redirects.yml workflow that syncs the JSON to
  Cloudflare's Redirect Rules API on every push to dev/main; uses
  secrets.CLOUDFLARE_REDIRECTS_TOKEN (separate from Cache Purge token)

Link checker gap (root cause of missed 404s):
- Add shared/config/.lycheeignore-nightly without the blanket mlsysbook.ai
  exclusion that was silently swallowing all broken internal links
- Update infra-link-rot-nightly.yml to use .lycheeignore-nightly so the
  nightly sweep now catches broken mlsysbook.ai links that are live post-deploy
2026-06-08 20:26:39 -04:00
Vijay Janapa Reddi
2dd81eaa38 Add shared ecosystem cards to landing pages
Add shared/config/_ecosystem-cards.qmd: one source of truth for the
'Part of the MLSysBook Ecosystem' section (full 7-member set). Each landing
page includes it; a small script marks the current site 'You are here' by
reading that site's own release-manifest meta, so one block shows each page
its own state. Replace the divergent inline sections in kits (3 hand-written
cards) and labs (prose paragraph); add the section to slides, instructors,
and mlsysim.
2026-06-03 15:34:30 -04:00
Vijay Janapa Reddi
5a6c71911d Standardize shared footer and version pill across Quarto sites
Add shared/config/footer-common.yml (mirrors navbar-common.yml) and point
slides, labs, kits, and instructors at it via metadata-files, replacing their
drifted inline footers. The release pill now lives in the footer right slot
(not dangling below the page) as a fixed muted-gray chip, pinned so it looks
identical regardless of each site's theme accent. mlsysim and the book keep
their own footers (dual license / build stamp) but carry the same pill span.
release-pill.html is now assets-only and populates every data-release-pill
span from each site's own release-manifest.
2026-06-03 15:27:50 -04:00
Vijay Janapa Reddi
f79d657e3f Merge pull request #1779 from Shashank-Tripathi-07/fix/404-pages-quarto-dark-toggle
Adds body.quarto-dark selectors to all 404 pages, mirroring existing @media rules.
2026-05-27 08:13:40 -04:00
Rocky
a27ff11fc1 fix(404): add body.quarto-dark selectors alongside @media dark rules 2026-05-18 18:48:28 +05:30
Vijay Janapa Reddi
c005be91aa chore(announcements): drop self-link CTAs from Line 1 of every subsite
Every subsite's announcement bar Line 1 carried a 'Start reading →' / 'Start building →' / 'Get started →' link that pointed at the very subsite the reader was already on. Clicking it was a no-op self-navigation.

Strip the CTA from Line 1 across all 8 sites that have the regression:
  - announcement-vol1.yml  drop 'Start reading →'
  - announcement-vol2.yml  drop 'Start reading →'
  - tinytorch              drop 'Start building →'
  - mlsysim                drop 'Get started →'
  - kits                   drop 'Get started →'
  - labs                   drop 'Preview →'
  - slides                 drop 'Browse decks →'
  - instructors            drop 'Start here →'

Line 1 keeps the bold identity statement, which is what readers came for. The other lines (Vol I / II links, sibling row, newsletter CTA) keep their navigations since they DO lead somewhere new.

announcement-book.yml is unchanged — its Line 1 already points at the ecosystem root (https://mlsysbook.ai/), not at /book/ where the reader is.
2026-05-13 20:35:33 -04:00
Vijay Janapa Reddi
11194193c0 feat(bars): add StaffML to ecosystem cross-link row across 8 Quarto sites
For the public launch, every site's "Alongside the book" (or "Build
with your students") row now lists StaffML alongside TinyTorch, Hardware
Kits, MLSys·im, and Labs. Two coupled changes:

  • StaffML appended with verb "practice" — pairs cleanly with the
    existing verbs (build / deploy / model / explore / practice).
  • MLSys·im verb changed from "simulate" to "model" to match the
    project's own self-description ("first-principles analytical
    modeling for ML training and inference; model the physics before
    you build"). MLSys·im is analytical, not Monte-Carlo simulation;
    the new verb is more honest and the audience reads it cleanly.

Also restores tinytorch/quarto/config/announcement.yml to the canonical
4-line ecosystem template. That file had been silently rewritten to a
release-only banner ("🎉 v0.1.11 released — ...") by the
tinytorch-publish-live workflow, dropping the ecosystem cross-links
entirely. Restoration here; workflow fix is a separate commit.

Per-site row state after this commit (each site omits itself):

  site, vol1, vol2:  TinyTorch · Kits · MLSys·im · Labs · StaffML
  instructors:       TinyTorch · Kits · Slides · StaffML
  kits:              TinyTorch · MLSys·im · Labs · StaffML
  labs:              TinyTorch · Kits · MLSys·im · StaffML
  mlsysim:           TinyTorch · Kits · Labs · StaffML
  tinytorch:         Kits · MLSys·im · Labs · StaffML
  slides:            (teacher-focused row, unchanged)

The staffml site itself has its own Next.js ecosystem navbar
(EcosystemBar.tsx) which is out of scope for this Quarto-only sweep
and audited separately.
2026-05-12 09:55:35 -04:00
Vijay Janapa Reddi
2d9c85b410 Fix multiplier formatting contexts 2026-05-10 17:52:24 -04:00
Vijay Janapa Reddi
f9a4db830c style: standardize dimensions and multipliers to MIT Press 2026 house style 2026-05-10 15:09:47 -04:00
Farhan Asghar
187950468d fix(instructors): readable landing tables and footer CTA in dark mode (#1640)
The .inv-table cells and .footer-cta card hardcoded light colors that
made text invisible against the dark theme. Added dark-mode overrides
for column text, hover row, last-column links, and the CTA card.
2026-05-04 07:54:17 -04:00
Vijay Janapa Reddi
6d0695644e Merge pull request #1638 from farhan523/fix/instructors-dark-mode-dropdown
fix(instructors): improve dark mode dropdown menu contrast
2026-05-03 18:03:52 -04:00
farhan
ad200f4eb3 fix(instructors): readable blockquote text in dark mode
Markdown blockquotes (e.g. the Sample Decision Log entries on the
Assessment page) inherited Quarto's light-mode text color, leaving the
content nearly unreadable on the dark background. Style blockquotes
with the dark-mode body color, elevated surface, and indigo left border.
2026-05-03 19:52:36 +05:00
farhan
81faa71450 fix(instructors): improve dark mode dropdown menu contrast
Mirrors the kits fix (#1623): navbar submenus rendered with a white
background in dark mode. Sets dropdown surface, items, headers, and
dividers to the Blueprint dark palette with indigo hover/active.
2026-05-03 19:46:38 +05:00
github-actions[bot]
a9995accb8 docs: add @farhan523 as contributor for bug, code, design (instructors) 2026-05-03 12:17:06 +00:00
Vijay Janapa Reddi
10c88cbff4 Merge pull request #1634 from farhan523/fix/instructors-tinytorch-instructor-link
fix(instructors): repair broken TinyTorch Instructor Guide link
2026-05-03 08:02:33 -04:00
farhan
32ad20d842 fix(instructors): repair broken TinyTorch Instructor Guide link
The sidebar entry pointed to https://mlsysbook.ai/tinytorch/INSTRUCTOR.html
which 404s — INSTRUCTOR.md lives in tinytorch/ but is not part of the
TinyTorch Quarto project (tinytorch/quarto/), so it never gets rendered
or published.

Point at the canonical GitHub source instead until the TinyTorch site
is updated to publish the instructor guide as a real page.
2026-05-03 09:13:38 +05:00
farhan
bb4fc7bfdb fix(instructors): make left sidebar readable in dark mode
The dark-mode rule targeted .sidebar .sidebar-item a, but the rendered
sidebar uses a.sidebar-link and a.sidebar-item-toggle directly, so the
section headers and leaf links inherited the light theme and were
unreadable on the dark background.

Target the actual selectors (sidebar-link, sidebar-item-toggle,
menu-text), and cover the search input and TOC rail with the same
indigo accent.
2026-05-03 09:00:34 +05:00
Rocky
b4024ac642 fix(instructors): correct lab subtitles in foundations syllabus (labs 09-15) (#1604)
Lab subtitles from Week 10 onward were shifted one position ahead of the
actual lab content. The URLs were correct (clicking would open the right
lab) but the displayed names described the wrong lab, misleading instructors
about what each week's lab covers.

Corrected subtitles cross-checked against each lab file's opening title:
- Lab 09: "Quantization (INT8/INT4)" → "The Data Selection Paradox"
- Lab 10: "The Roofline Model" → "The Compression Paradox"
- Lab 11: "Benchmarking Methodology" → "The Hardware Roofline"
- Lab 12: "Tail Latency (P99)" → "The Benchmarking Trap"
- Lab 13: "Drift Detection" → "The Tail Latency Trap"
- Lab 14: "Fairness and Efficiency" → "The Silent Degradation Problem"
- Lab 15: "Capstone Integration" → "No Free Fairness"
2026-04-30 18:48:24 -04:00
github-actions[bot]
475789954d docs: add @Shashank-Tripathi-07 as contributor for doc, code, review (instructors) 2026-04-30 22:47:14 +00:00
github-actions[bot]
26b9e72f8a docs: add @farhan523 as contributor for bug, code (instructors) 2026-04-29 14:00:28 +00:00
Vijay Janapa Reddi
0aa8086b3d fix(instructors): widen pillar boxes + re-snap arrows (Gemini pass)
Local rendering of the previous redesign showed text bleed on the
longer secondary labels — "Hardware Kits: Reality" and
"TinyTorch: Implementation" sat right at the box edges with no inner
padding, "Labs: Simulation & Discovery" overflowed the rect bounds
on Safari. Per gemini-2.5-flash review (the user's preferred
gemini-3.1-pro-preview was at quota cap):

  - Pillar box width 140 -> 170 px (extra ~7px padding either side
    of the longest label).
  - X coordinates of READ/EXPLORE shifted from 270 -> 255 to keep
    them centred at x=340; BUILD shifted 475 -> 460 and DEPLOY
    65 -> 50 to keep their outer edges aligned with the canvas
    margin.
  - Box centres unchanged, so the emoji + title + sublabel rows
    stay vertically aligned.
  - Re-snapped the four loop-arrow paths to the new box edges so
    each marker terminates exactly at the perpendicular border:
      READ→BUILD : M425,135 Q500,135 500,195
      BUILD→EXPLORE : M500,265 Q500,345 425,345
      EXPLORE→DEPLOY : M255,345 Q180,345 180,265
      DEPLOY→READ : M180,195 Q180,135 255,135
  - Y coords of arrow labels and annotation card text snapped to
    the 5/10px grid (gemini change retained).

Verified by local render: no text spills outside any pillar; all
four arrows close into their target box edges; loop reads
clockwise; semantic palette unchanged.
2026-04-29 08:47:26 -04:00
Vijay Janapa Reddi
768b134d87 fix(instructors): redesign Silicon Realism Loop per svg-style.md
The four-pillar-loop.svg used pill-shape boxes (`rx="12"`), bright
non-semantic accent colors (indigo, mint-green, amber, rose), and
indigo arrow markers — none of which matched .claude/rules/svg-style.md.
Reads as inconsistent next to vol1/vol2 figures and instructor-hub
material.

Changes (geometry preserved, only style):
  - Box corners: rx="12" → rx="4" (standard process boxes per spec).
  - Annotation cards: rx="6" → rx="4".
  - Color roles mapped to the canonical semantic palette:
      READ    : compute blue   (#cfe2f3 / #4a90c4)
      BUILD   : data-flow green (#d4edda / #3d9e5a)
      EXPLORE : routing orange  (#fdebd0 / #c87b2a)
      DEPLOY  : error/cost red  (#f9d6d5 / #c44)
      Center / annotations : neutral container (#f7f7f7 / #bbb)
  - Arrow markers: indigo (#6366f1) → neutral (#555) per spec default.
  - Loop arrow paths still curve around the center hub (cyclic
    topology is the figure's content), but pulled clear of box
    fills to avoid stroke-through-box defects.
  - Title moved to canonical y=30 (was y=35).
  - Footnote moved to canonical y=448 (was y=420), italic muted #999.
  - Annotation cards widened to 180×40 to clear the footnote band.
  - All coordinates snapped to 5/10px grid.
  - Typography sizes tightened to the spec scale (titles 11/13,
    secondary labels 9, sub 8).
2026-04-29 07:38:37 -04:00
Vijay Janapa Reddi
6921b80c88 feat(kits|labs|instructors): tier-B versioning batch
Adds the Tier B (lite) versioning pattern to all three Quarto-only
sites in one commit — they have identical shape, so fragmenting would
add review burden without isolation benefit.

For each project:
  - workflow_dispatch inputs: release_type/description/site_only/
    explicit_version/confirm. Same shape as Tier A workflows so
    operators see one consistent UI across the monorepo.
  - New `prepare:` job calls _release-prepare.yml with tier=B and the
    project's previous_tag_pattern.
  - New manifest emit step before deploy: hashes the project's content
    directory (excluding _build, .quarto, etc.) and writes
    release-manifest.json into the build output. URL convention
    matches the deploy path: /kits/, /labs/, /instructors/.
  - New create-tag job: tags <project>-v<release_id> on success.
    Tier B intentionally skips AI-generated release notes — the
    description plus auto-generated commit list (where available) is
    sufficient given the rapid iteration cadence and lower citation
    stakes than book/staffml/tinytorch/mlsysim.
  - Quarto _quarto.yml: <meta name="release-manifest"> in
    include-in-header and shared/release/release-pill.html in
    include-after-body.

No changes to Marimo notebook structure (labs), Quarto build commands,
PDF builds, or any project's content files.
2026-04-28 18:19:53 -04:00
Vijay Janapa Reddi
aa75852a80 polish(404): bigger SVG font, smaller joke text, tighter joke pool
Iterates on the post-merge 404 redesign across all 8 sub-sites:

- SVG roofline-plot fonts bumped for readability without changing
  layout: axis labels 9.5pt to 14pt, region labels 9.5pt to 14pt,
  title and "your page (404)" annotation 11pt to 16pt.

- Random-joke font shrunk from 1.6rem to 1.3rem (1.1rem on mobile)
  so the joke no longer dominates the SVG above it.

- Removed the static "Looks like this page slipped past our load
  balancer" subline from 6 sub-sites — it read as a competing static
  joke alongside the random rotation. Slides and instructors keep
  their informational sublines.

- Joke pool tightened 97 to 79 via a strict ML-systems-centric test:
  if you could swap "page" for any generic web/ops resource and the
  joke still works, cut. Cuts removed the H&P canonical material
  (Amdahl's Law, TLB miss, Dennard scaling, false sharing, fat-tree
  topology) that is general computer architecture rather than ML
  systems specifically. 19 borderline jokes were rewritten to anchor
  punchlines in concepts only ML practitioners decode (KV cache,
  gradient AllReduce, prefill, ZeRO, speculative-decode acceptance,
  1F1B schedule, ridge point, BPE merges).
2026-04-26 08:04:57 -04:00
Vijay Janapa Reddi
8135dda4c8 feat(site): redesign 404 pages with curated ML systems jokes
Replace the inline-game 404 across all 8 sub-sites with a unified
design: roofline-plot illustration, random pick from a 97-joke
editorial-curated pool, dual CTA (home + playground), and a
GitHub-issue-backed contribute link for community submissions.

The joke pool was curated through a multi-agent editorial process:
4 generators (each with a different ML systems lens) produced 240
candidates; 5 reviewer personas (architect, NLP researcher, production
engineer, undergrad, copy editor) scored each; the synthesizer kept 92
surviving jokes plus 5 new canonical-architecture additions (Amdahl,
TLB, Dennard, false sharing, fat-tree topology) the architect flagged
as missing from the H&P-tradition canon.

Self-contained CSS with prefers-color-scheme: dark adapts to host
themes without coupling to each sub-site's bespoke styling. SVG
follows the book's semantic palette (blue memory-bound slope, green
compute roof, MIT red error annotation). Per-site navigation
preserved across all sub-sites.

Adds .github/ISSUE_TEMPLATE/404_joke.yml so contributions arrive
structured (joke text, theme dropdown, license checkbox) and
auto-tagged (site, 404-joke, good-first-issue) for triage.
2026-04-25 19:34:40 -04:00
Vijay Janapa Reddi
6117777c1d Merge branch 'feat/fun-404' into dev 2026-04-25 15:41:29 -04:00
Vijay Janapa Reddi
12d4aeaa7d feat(playground): complete 14-game MLSysBook arcade gallery
- Added 'KV Cache Packer' to teach PagedAttention and KV fragmentation
- Added 'Cluster Commander' to teach Slurm scheduling and fleet fragmentation
- Registered all 14 games in the runtime registry
- Fixed WebGL rendering loops to avoid performance overhead and crashes
- Updated 404 pages across all workspaces to route to the new games Playground
- Overrode default Quarto 'S' search shortcut to Shift+? to free up typing controls
2026-04-25 15:40:23 -04:00
Vijay Janapa Reddi
1eb30f5f86 fix(mlsysim): harden release QA and paper artifacts
Align the MLSys·im code, docs, paper, website, workflows, and lab wheel for the 0.1.1 release. This also fixes runtime/API issues found during release review and prepares the paper PDF plus archive package.
2026-04-25 10:06:01 -04:00
Vijay Janapa Reddi
400f0e3027 docs: clarify MLSysBook ecosystem paths
Align public README and site messaging around the curriculum components, adoption paths, and current early-release status so newcomers can move from reading to building, deployment, practice, and teaching.
2026-04-25 08:48:38 -04:00
Vijay Janapa Reddi
ad98437b4c docs(announcements): unify announcement bars across nine Quarto sites
Every site's announcement bar now follows one template:

  Line 1  — identity + primary CTA (what is THIS site)
  Line 2  — the book (or, on book sites, the other volume)
  Line 3  — "Alongside the book:" sibling row (3 most-relevant verbs)
  Line 4  — newsletter

The book is the anchor of the curriculum; every other site is a verb
applied to it — TinyTorch (build), Hardware Kits (deploy), MLSys·im
(simulate), Labs (explore), Slides + Instructors (teach). Making that
shape visible in every bar turns nine independent sites into chapters
of one curriculum.

Removed stale copy: "Happy New Year!" on kits + labs, "coming in 2026"
on labs (we are in 2026; replaced with "Coming Summer 2026"), TinyTorch
v0.1.10 single-line release notice (belonged in a release changelog,
not the always-visible nav bar).

Normalized outbound links: /book -> /vol1/ and /vol2/, consistent
trailing-slash hygiene on every URL. Newsletter link points to
https://mlsysbook.ai/newsletter/ (the actual Quarto page) instead of
#subscribe (which only resolves on the landing page).

The landing site (mlsysbook.ai) uses a 5-line variant that covers all
four learner verbs + the teacher-tools row; every other site uses the
4-line form.

StaffML is a Next.js app, not a Quarto site, so its banner is out of
scope for this PR and will ship as a separate React component change.
2026-04-23 16:35:57 -04:00
Vijay Janapa Reddi
9f20e7f20d docs(readmes): add language hints to bare code fences (markdownlint MD040)
Add `text` language tag to 25 unlabeled fenced code blocks across the
public-facing READMEs. Mostly directory-tree listings, all-contributors
bot instructions, and pseudo-output ASCII blocks — none were getting
syntax highlighting anyway, but the explicit tag silences markdownlint
MD040 and signals intent ("this is plain text, not a forgotten lang").
2026-04-22 16:56:08 -04:00
Vijay Janapa Reddi
434417d69f docs(readmes): force table width via inline style (override GitHub CSS)
GitHub's github-markdown-css applies:
  .markdown-body table { display: block; width: max-content; max-width: 100%; }

The HTML width="100%" attribute is a presentational hint with lower
specificity than the class selector, so tables with short cell content
were sizing to max-content and not stretching to fill the column.
Tables with long sentences per cell stretched fine, masking the bug.

Add inline style="width:100%" (specificity 1,0,0,0) which overrides
the class-selector rule. Keep width="100%" attribute as a fallback for
non-GitHub renderers (VSCode preview, GitLab, plain HTML viewers).

54 tables updated across 10 READMEs + the two contributor-sync scripts
that regenerate auto-managed tables.
2026-04-22 16:20:38 -04:00
Vijay Janapa Reddi
eb27858591 docs(readmes): replace HTML card pattern with native GitHub callouts
The sub-project READMEs used an old-school nested-table card design
with hardcoded bgcolor="#ffffff", "#cfd6dd", "#eef2f7" plus deprecated
HTML4 attributes (cellpadding, cellspacing, border). It looked good in
light mode but produced harsh white islands in GitHub's dark theme,
which is what most readers see today.

Across 11 sub-READMEs:

- Strip the card wrapper so data tables are just clean
  <table width="100%"> with semantic <thead>/<tbody>. Headers keep
  their column widths; bgcolor/valign/zebra-stripe cruft is removed
  (GitHub provides its own theme-aware striping).
- Convert the early-release callouts (and mlperf-edu's two-tier
  status block + "source of truth" note + interviews' two info boxes)
  to GitHub-native > [!NOTE] / > [!WARNING] / > [!TIP] callouts.
  These are theme-aware, get proper icons, and render correctly in
  light AND dark mode.

Net result: 528 lines of HTML cruft removed, 230 lines of clean
markdown added. Visual identity is preserved (callouts still stand
out, tables still stretch full-width) while becoming dark-mode safe
and consistent with the main README.
2026-04-22 16:12:20 -04:00
Vijay Janapa Reddi
b9ee88ca70 docs(readmes): stretch HTML tables to full width
Add `width="100%"` to every HTML content and contributor table across all
project READMEs so they render full-width on GitHub instead of collapsing
to natural content width. Cell-level `width="X%"` percentages were already
in place but only take effect once the table itself has an explicit width.

Also update the contributor-sync scripts so the auto-generated tables stay
consistent on the next bot run:
  - .github/workflows/contributors/generate_main_readme.py
  - .github/workflows/contributors/generate_readme_tables.py

Scope: 27 files, 85 tables. Sub-project READMEs that already use the
"card" pattern (labs/, kits/ content sections with <table width="98%">
wrappers) are intentionally untouched.
2026-04-22 16:01:54 -04:00
Vijay Janapa Reddi
acd0632506 fix(instructors): drop broken /labs/INSTRUCTOR_GUIDE.html sidebar entry
The Resources sidebar in instructors/_quarto.yml advertised a "Labs
Instructor Guide" pointing at /labs/INSTRUCTOR_GUIDE.html, but no such
file exists anywhere in the labs/ source tree — so the link has always
404'd. Playwright smoke against the live instructor site picks this up
as a hard broken link.

Drop the entry. If a labs instructor guide is authored in the future,
re-add with a real href.
2026-04-22 10:51:07 -04:00
Vijay Janapa Reddi
59ecd34f51 docs(readme): standardize wide HTML tables across product READMEs
- Add wrap_readme_data_tables.py to frame <table>+<thead>/<tbody> blocks in a
  98% width panel (#cfd6dd border, #eef2f7 headers, zebra body rows where
  applied manually in converted tables).
- Apply wraps to book, kits, labs, slides, tinytorch; tbody wraps for kits
  docs/related and instructors overview.
- Convert remaining Markdown tables in mlsysim, mlperf-edu, and interviews to
  the same HTML pattern; replace StaffML markdown callouts with HTML panels.
- Add thead rows to kits/instructors body-only tables for clearer hierarchy.
2026-04-21 08:51:04 -04:00
Vijay Janapa Reddi
d569bfca47 docs(readme): use HTML callouts for 2026 early-release banners
Replace markdown blockquotes with a shared centered table pattern
(cellpadding, bgcolor panel, h3 + aligned paragraphs) so GitHub renders
consistent spacing. Align labs and mlsysim DEV-BANNER with the same layout
and 2026 messaging.
2026-04-21 08:26:06 -04:00
Vijay Janapa Reddi
27f4304e0b docs(readme): add consistent 2026 early-release banners for iterating projects
Use a short top-of-README callout for periodic-table, StaffML, TinyTorch,
slides, and instructors: live with the 2026 release, expect steady iteration,
link to GitHub issues. Slides banner replaces dev-only wording with the same
framing while keeping dev/live badges.
2026-04-21 08:24:13 -04:00
Vijay Janapa Reddi
8f09e80c4c PR-3: Scripts, audits, cleanup (build stamp, PDF dropdown, 404s, mirror guard, dedup, RELEASE-PREP) (#1406)
* feat(footer): build-time "last updated" stamp

Add a small build-time stamp to the page footer ("Last updated YYYY-MM-DD
· <site> · <commit>") so readers can see at a glance that the site is
fresh. Quarto's per-page `date-modified` already exists for chapter
pages, but it doesn't capture site-level rebuilds (theme tweaks,
navbar changes, deploy reruns).

Pieces:
  - shared/scripts/inject-build-stamp.sh: wraps a token-replace over a
    build directory. Search-and-replace on `<!-- MLSB_BUILD_STAMP -->`
    means sites that haven't adopted the token are unaffected — opt-in
    rollout per subsite.
  - book/quarto/config/shared/html/footer-common.yml: token added next
    to the existing copyright line in the shared book footer.
  - shared/config/footer-site.yml: token added next to the copyright
    in the unified-site footer.
  - shared/config/site-head.html: minimal CSS for `.mlsb-build-stamp`
    (small, neutral, dark-mode aware).
  - .github/workflows/kits-publish-live.yml: representative wiring —
    runs the stamp step after build and before deploy. Other publish-
    live workflows can adopt the step the same way as they roll
    through release-prep validation.

* feat(navbar): expose paper.pdf for TinyTorch / MLSys·im / StaffML

Each of these subsites already builds a companion paper.tex in CI and
ships the PDF alongside the HTML site. Surface those papers in the
navbar dropdowns where readers actually look for them:

  Build menu:
    - TinyTorch     → site
    - TinyTorch Paper (file-pdf icon, opens in new tab)
                    → /tinytorch/assets/downloads/TinyTorch-Paper.pdf
    - MLSys·im      → site
    - MLSys·im Paper (file-pdf icon, opens in new tab)
                    → /mlsysim/mlsysim-paper.pdf

  Prepare menu (after a separator):
    - StaffML Paper (file-pdf icon, opens in new tab)
                    → /staffml/downloads/StaffML-Paper.pdf

Paper URLs are intentionally kept in lockstep with the build steps in
tinytorch-publish-live (assets/downloads/), mlsysim-publish-live
(site root), and staffml-publish-live (out/downloads/). If a build
path moves, both the workflow and this navbar entry need to move
together — there is no single source.

* feat(404): per-site 404 pages for slides / instructors / unified site

The book, kits, labs, mlsysim, and tinytorch subsites already have
flavored 404.qmd pages that route lost readers to the right
neighborhood. Add the missing three so every subsite under
mlsysbook.ai has a coherent recovery experience instead of falling
back to GitHub Pages' default white-page 404.

  - slides/404.qmd       — slide-deck flavored copy, pointers back to
                           the deck index, the volumes, and the hub.
  - instructors/404.qmd  — instructor-flavored copy, pointers to the
                           course map, slides, and both volumes.
  - site/404.qmd         — landing-page flavored copy, the most
                           ecosystem-wide nav (links to every subsite)
                           because this is the most common 404 source
                           for inbound links from the legacy single-
                           volume mlsysbook.ai.

StaffML already has its own React not-found.tsx so no work needed.
TinyTorch's legacy Sphinx 404.md is preserved for now (still wired on
the Sphinx site that hasn't migrated yet).

* ci(precommit): block subsite-mirror drift on shared assets

Add a pre-commit hook that runs `shared/scripts/sync-mirrors.sh --check`
on every commit. The hook fails if any of the per-subsite real-file
mirrors (subscribe-modal.js, theme SCSS partials, logo) has drifted
from its canonical source in `shared/`.

Why a guard, not just a sync: Quarto's resource-copy step preserves
symlinks instead of dereferencing them, so we have to keep real
copies. Without the guard, "I'll edit the canonical and forget to
re-sync" silently re-introduces the duplicate-divergence bug we just
spent effort fixing. `always_run: true` because a mirror can drift via
deletion of the canonical, not just by editing the canonical itself.

To re-sync after a deliberate change:
  bash shared/scripts/sync-mirrors.sh

* refactor(audit): duplicate-file finder + clean up obvious leftover

Add shared/scripts/find-duplicates.py as a periodic duplication
auditor. It SHA-1 hashes every source-y file across the ecosystem
roots, groups identical contents, subtracts the intentional groups
declared in shared/scripts/sync-mirrors.sh, and reports the rest as
unintended duplicates. JSON report written to .audit/duplicates.json
for CI ingest later; --strict makes it exit non-zero.

Defaults err on the side of being useful out of the box:
  - Skips symlinks (those are deliberate aliases, not duplicates).
  - Skips small files (<256B) — LICENSE stubs, .gitkeep, etc.
  - Skips _site / _build / node_modules / .next / out / .git.
  - Source-y suffix list (.js, .ts, .scss, .css, .html, .yml, .py, .sh).
    Binary assets (images, PDFs) are NOT scanned because their dup
    story is different (logos, icons are intentionally repeated).

Initial-cleanup pass:
  - Delete tinytorch/scripts/cleanup_repo_history.sh — byte-identical
    leftover; the canonical version lives at
    tinytorch/tools/maintenance/cleanup_history.sh and is the one
    referenced by tinytorch/tools/maintenance/README.md.

After this commit the only remaining unintended duplicate is
runHistoryProvider.ts in three vscode-ext packages (kits / labs /
tinytorch). Promoting that into a shared vscode-ext package is real
refactor work — out of scope for release-prep, captured for later.

Add .audit/ and _audit/ (the latter from the Playwright site-audit
script) to .gitignore.

* docs(release-prep): handoff notes covering all five PR groupings

Add a single document at the worktree root that walks through what
this branch contains, why each piece is there, the recommended PR
split (PR-1 safety-net, PR-2 visual polish, PR-3 scripts/audits/
cleanup, PR-4 TinyTorch prep, PR-5 cutover skeletons), what was
intentionally LEFT OUT (and why), and what verification was done
locally vs. what still needs the dev mirror to exercise.

Treat this as the cover memo for the staged-rollout foundation
work; once the five PRs are individually merged into dev, this file
will outlive the branch but the per-PR sections still document why
each piece exists for anyone debugging months from now.
2026-04-19 16:23:26 -04:00
Vijay Janapa Reddi
335e134c4a docs(readmes): standardize sub-project Contributors sections
Audit of the eight sub-project READMEs showed inconsistent surrounding
text around the auto-managed contributor table — some had a Legend line,
some didn't; instructors used a different heading style; interviews was
missing the thanks blurb and CTA; mlsysim was missing the END marker
and the recognition CTA.

Standardize all eight to the same template: heading + thanks blurb +
legend + ALL-CONTRIBUTORS markers + Recognize-a-contributor CTA.

Per-project quirks preserved: interviews keeps its closing author
sign-off paragraph; CTA wording stays project-specific (e.g. labs
suggests "code, tutorial, test, or doc" while kits suggests
"tool, test, video, or doc").

Per-project sections kept (not consolidated into root). Sub-READMEs
are landing pages, sub-projects could be extracted to standalone repos
later, and recognition is more meaningful where the work lives. The
root README continues to aggregate everything via the existing
sectioned tables.
2026-04-19 11:19:20 -04:00
Vijay Janapa Reddi
23e27b2f40 ci(contributors): wire slides + instructors into all-contributors
Closes the gap where Slides and Instructor Site were first-class Quarto
sites but invisible to the contributor recognition pipeline, and fixes
two pre-existing holes for mlsysim/interviews.

Workflows
- all-contributors-add.yml: add `slides` and `instructors` to PROJECTS;
  add `slide`/`instructor` aliases. Tighten the LLM prompt with explicit
  multi-type and emoji/punctuation rules, and add a deterministic regex
  fallback that scans the trigger comment for type keywords and unions
  them with the LLM result so a flaky classification never drops a tag.
- update-contributors.yml: add `mlsysim`, `interviews`, `slides`,
  `instructors` to the push trigger paths and to the file/commit lists,
  so edits to those configs actually rebuild and push READMEs.

Generators
- generate_main_readme.py: refactor the per-section block to a single
  PROJECT_SECTIONS table so adding a project is one line; add Slides
  and Instructor Site sections.
- generate_readme_tables.py: register `slides` and `instructors`.

Configs / READMEs
- New `slides/.all-contributorsrc` and `instructors/.all-contributorsrc`
  seeded with profvjreddi.
- Add ALL-CONTRIBUTORS-LIST markers + recognize-a-contributor blurb to
  `slides/README.md` and `instructors/README.md`.
- Regenerate root, slides, instructors, and (sorted-badge drift) the
  interviews README via the generators.

Docs
- Refresh `.github/workflows/contributors/README.md` to list all 8
  projects and document the canonical-list-in-PROJECTS contract.
2026-04-19 11:02:37 -04:00
Vijay Janapa Reddi
8a36d39bb2 fix(shared): centralize font loading via site-head.html + fix carousel (#1403)
- Replace inline Google Fonts <link> tags in all 8 site configs with
  a single `- file: shared/config/site-head.html` reference, so fonts
  (Inter 400-800, JetBrains Mono) and Font Awesome are inherited from
  one shared file instead of duplicated across every _quarto.yml
- Add missing Inter weight 800 (was only in site-head.html, not configs)
- Add carousel CSS + JS for MLSys·im landing page (arrows, dots, slides,
  auto-rotation, keyboard nav) — fixes non-functional < > buttons
2026-04-18 16:33:45 -04:00