Resolves model_compression.qmd conflict by combining Zeljko's PDF layout
work (relocated Energy Dividend section + Modern hardware accelerators
paragraph, centered quantization-methods table, inlined NP-hard index tag)
with three additive index entries from local dev:
- Magnitude-Based Pruning!definition
- Dynamic Quantization!definition
- Sparse Tensor Core (singular, per index.md §4)
Also disables the book-check-figure-placement pre-commit hook in
.pre-commit-config.yaml. The 'near first reference' heuristic fights the
repositioning the copyeditor does to balance pages in print; deferring
to upstream layout going forward.
The Newsletter badge filtered by event=push, but
.github/workflows/sync-newsletter.yml triggers only on schedule and
workflow_dispatch -- no push trigger exists. With zero matching runs,
shields.io rendered "no status". Switch the filter to event=schedule so
the badge reflects the workflow's actual (passing) scheduled runs.
A manual workflow_dispatch on the same SHA as a push was cancelling
(or being cancelled by) the push run, since both shared the
concurrency group `book-validate-${{ github.ref }}`. The README
badges then showed the cancelled run's status (red) even though
the underlying build passed.
- book-validate-dev.yml: include `${{ github.event_name }}` in the
concurrency group so push and dispatch get separate slots.
- README.md: pin all 9 workflow status badges to `&event=push` so
the displayed status reflects the auto run, not whichever event
ran most recently.
GitHub displays the root LICENSE.md (CC-BY-NC-SA 4.0, the textbook
license) in the repository sidebar, but the curriculum is multi-licensed:
TinyTorch is MIT, MLSys·im is Apache 2.0, StaffML is AGPL v3, datasets
have their own permissive licenses. Without a README pointer, downstream
users can't easily discover which license applies to which component.
The new section is a table linking to each component's authoritative
LICENSE file plus a one-line summary of what it permits.
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.
- README.md: 'Cite' badge anchored to non-existent #citation--license
section; point it directly to CITATION.bib so it always works.
- tinytorch/README.md: 'Getting Started' link pointed to
site/getting-started.md which never existed; the actual file is
quarto/getting-started.qmd.
- shared/config/.lycheeignore: ignore star-history.com fragment URLs.
These use # for client-side SPA routing, not as document anchors —
lychee was incorrectly flagging them as missing fragments.
Verified locally with lychee 0.23: zero broken links remain in the
top-level READMEs and new community files except for three deleted
GitHub user accounts (Allen-Kuang, harishb00a, jettythek) which are
auto-regenerated by the contributor sync workflow and need to be
fixed at that layer.
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.
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.
The product is StaffML; "interviews" is just the directory it lives in.
Bot replies, commit messages, and the section heading should all say
StaffML. Source files don't move — only the project key does.
Workflow (all-contributors-add.yml)
- PROJECTS: rename `interviews` → `staffml`.
- PROJECT_ALIASES: invert to `interviews:staffml` so old comments still
route correctly (and tito/slide/instructor remain).
- New PROJECT_DIRS env var maps project key → on-disk directory; only
needed for entries where they differ. Currently: `staffml:interviews`.
- File-detection step uses a directory→project lookup, so a PR that only
touches `interviews/...` still gets routed to the `staffml` project.
- Python config-update, bash commit, and bot-reply steps all resolve
project key → directory through the same map (no more hard-coded
`${project}/.all-contributorsrc` paths that would break for staffml).
Generators
- generate_readme_tables.py: register `"staffml": "interviews/"` (key
changed, path unchanged); added a comment documenting the contract
with the workflow env block.
- generate_main_readme.py: section is now `🤖 StaffML Contributors`
with marker prefix `STAFFML-CONTRIBUTORS`. The on-disk directory is
still `interviews/`.
Docs
- contributors/README.md: replaced the project bullet list with a
project-key vs. on-disk-directory table, explained PROJECT_DIRS, and
flagged that `staffml/interviews` is the only mismatch.
No directory moves. The interviews/ tree, .all-contributorsrc inside it,
and per-project README markers are unchanged.
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.
Points at the sync-newsletter.yml workflow on dev so the README
reflects the health of the newsletter sync pipeline alongside Book,
TinyTorch, Labs, Kits, MLSys-im, Slides, Instructors, and StaffML.
Mission section: boxed mission statement, AI engineering definition,
Hennessy/Patterson & Andrew Ng acknowledgment, 1M learner goal with
log-scale star history chart, star-on-GitHub ask.
New "How We Teach" section: four pillars + expanded stats strip
(chapters, lecture decks, TinyTorch modules, universities).
People page: restructured as credits — featured founders (Vijay + Kari),
Global Outreach (Marco, Brian, Marcelo, Jeremy), Global Educators
compact grid, edX instructors. Initials fallback for missing avatars.
Events page: simplified from 250 lines to 3 cards + CTA linking to
tinyml.seas.harvard.edu as the operational hub.
Community page: renamed outreach section, added "Become a Member" CTA.
Partners page: updated to AI engineering framing.
New license page: multi-license structure (CC-BY-NC-SA for content,
Apache 2.0 for TinyTorch, AGPL v3 for StaffML).
Fixed root LICENSE.md from CC-BY-NC-ND to CC-BY-NC-SA to match intent.
Updated README badge to match.
Navbar: reordered About dropdown (Mission → Our Story → People →
Contributors → License). Stripped textbook accent-bar headers from
site pages via CSS overrides. Threaded "AI engineering" consistently
across all page heroes and taglines.
- curriculum-map.svg: "Interview Playbook" → "StaffML", 40+ → 5,700+ questions
- Root README: all references updated, description reflects current app
- StaffML badge moved to second row with Slides/Instructors, logo=target