The note at lines 36-42 explained why you should not write literal `<!-- ... -->` inside the docstring, and in doing so, wrote literal `<!-- ... -->` inside the docstring. HTML disallows nested comments, so the inner `-->` token in the warning text closed the outer comment on line 1, leaking the example markup (span and script tags) into the rendered page on every Quarto site that included this snippet via include-after-body. The leaked script tag carries a literal U+2026 ellipsis as part of its src attribute (the docstring abbreviated the path), so every page fetched a 404 for `<subsite>/…release-pill.js`.
Rewrites the note to describe the rule without using the literal characters it warns against. The outer comment now opens on line 1 and closes on line 61 with no intermediate delimiters.
After this lands, the release-pill 404 disappears across vol1, vol2, tinytorch, kits, mlsysim, and instructors. The actual release-pill JS (inline script at the bottom of this file) was always intact — only the leak from the bad docstring was failing.
1) release-pill.html: nested HTML comment broke every Quarto site that
included it via include-after-body. The Pattern B documentation
block contained a literal `<!-- in footer -->` inside the outer
`<!-- ... -->` doctring; HTML disallows nested comments, so the
inner `-->` terminated the outer comment early and the example
markup that followed (`<span data-release-pill>` and
`<script src="/release-pill.js">`) leaked into the rendered page —
producing a 404 on every page that fetched the script. Replaced
with a `// in footer:` pseudo-comment and added a NOTE warning.
2) shared/_navbar.scss: dim the SEAS shield in dark mode. The logo
asset is transparent-bg, but the white "VE RI TAS" books area at
the top of the crest read as a bright square against the dark
navbar. `filter: brightness(0.85) contrast(1.05)` softens the
crest without losing the crimson. Targets both `body.quarto-dark`
(Quarto's class) and `[data-bs-theme="dark"]` (Bootstrap 5+).
3) EcosystemBar.tsx: mirror Quarto's brand-title abbreviation.
StaffML was always rendering the full "Machine Learning Systems"
string with CSS ellipsis, so narrow viewports ellipsis-truncated
it mid-word — visually distinct from every Quarto site, which
swap to a clean "ML Systems" via the
`_mobile.scss @media (max-width: 1199px)` rule. Added an
`nav-xl:hidden` / `nav-xl:inline` pair (with an `sr-only` full
string for screen readers) so the abbreviation behaves
identically to Quarto on the same screen widths.
Lays foundation for unified release versioning across MLSysBook
publishable artifacts. Pure additions — no existing builds, configs,
or sources are touched.
scripts/version/release.py
Python CLI with helpers:
- compute-id: semver bump from previous tag (patch/minor/major/none/explicit)
- compute-hash: deterministic SHA-256 over input directories with per-file index
- emit-release: writes releases/<project>-<id>/release.json (canonical artifact)
- emit-manifest: writes the build-time manifest the deployable bundles
Tier A (citable) emits per-file Merkle index; Tier B (lite) is flat.
scripts/version/schema.json
JSON Schema for release.json. Validates project/tier/release_id/release_hash
+ Tier A's files[] index. Used by validators in CI.
shared/release/release-pill.html
Footer snippet — fetches deployable manifest at runtime, renders
"v0.1.0 · Apr 26, 2026" pill. Configured per-project via
<meta name="release-manifest"> tag. Silent on any fetch failure.
shared/release/release-card.html
About-page snippet — fuller release-identity card with
click-to-copy hash. Same fetch + meta-tag conventions.
shared/release/README.md
Operator-facing contract documentation.
.github/workflows/_release-prepare.yml
Reusable workflow_call. Validates confirm == "PUBLISH", computes
new_release_id from previous tag + bump (delegates to release.py
for canonical math). Outputs new_release_id/new_tag/previous_*
for caller's downstream build and finalize steps. Refuses to
re-tag existing releases (citation integrity).
Caller workflows still own their build commands and tag/release
creation; this only standardizes the input shape and version math.