Conversation
|
@kp992 thanks for opening this. Excellent work! It is exciting to see how close we are now. From my review it looks like there a just a few issues and features we need before launch. Bugs:
Features:
|
- Add `markdown: commonmark` to all 24 lecture export configs so ipynb exports produce plain CommonMark markdown cells compatible with vanilla Jupyter Notebook, JupyterLab, and Google Colab - Add build-ipynb.yml workflow that clones QuantEcon/mystmd@myst-to-ipynb, builds from source, exports all ipynb files, and audits for MyST leaks - All 24 notebooks pass audit (0 MyST syntax leaks) Uses QuantEcon/mystmd myst-to-ipynb branch which adds: - CommonMark AST pre-transform (admonitions, math, figures, exercises, etc.) - Identifier/label stripping to prevent (label)= prefixes - Image directive stripping for plain  output - Empty cell filtering and block marker removal
|
Netlify preview only, not a production concern: assets here are served with |
Takes the theme from v2.2.0 to v2.3.0, per the release notes in QuantEcon/quantecon-theme.mystmd — git-history page headers (automatic, from this repo's git log at build time), opt-in in-page live compute via project.thebe (not enabled here), and CDN-free stylesheets (KaTeX/jupyter-matplotlib self-hosted, Font Awesome dropped), so maths renders correctly where jsdelivr/cdnjs are blocked. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@DrDrij I have just updated this to the latest release of quantecon-theme.mystmd incorporate recent merges. |
Resolves the two ci.yml conflicts, both from main evolving steps that jb2 rewrote for the mystmd toolchain: - Install JAX: took main's side — the jax 0.11.0 pin rationale comment (jax 0.11.1 hangs fori_loop on CPU paths) and the numpyro install apply to the executed lectures regardless of build toolchain. - The old jupyter-book steps (texlive, build-cache download, the jb clean prune from #616, sphinx-tojupyter): kept jb2's side — these steps do not exist in the myst pipeline, which builds cold with no restored sphinx cache, so the staleness problem the prune step addresses cannot occur here. The execution-cache key hashes ci.yml, so this merge forces a cold build — the pin, numpyro, and the v2.3.0 theme bump are all validated by real execution rather than replayed outputs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Takes the icon-only search trigger, PT Serif headings, QuantEcon-blue links, the Colab-only launcher and the first-paint fixes released today. Bumped from v2.3.0, so v2.3.1 (static-build asset URLs) and v2.4.0 (content typography, inline-code regression) come along too. See QuantEcon/quantecon-theme.mystmd/releases/tag/v2.5.0. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Bumped the theme pin in |
# Conflicts: # .github/workflows/ci.yml
Takes the QuantEcon code-token palette and seoul256 text colours (Phase 3), the language switcher with hreflang alternates, right-to-left support and the translator credit (Phases 4-5). No new site options are set here yet; the multilingual ones are for the translated editions. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Bumped the pinned theme to v2.6.0 in b9524ff. It brings the QuantEcon code-token palette and seoul256 text colours (Phase 3), and the language switcher, hreflang alternates, RTL support and translator credit (Phases 4–5). This edition sets none of the new multilingual options, so the only visible change here is the code and text colouring; the switcher appears once |
Patch release carrying the fix for QuantEcon/quantecon-theme.mystmd#186: on the Netlify preview, pressing Back after following an in-page anchor replaced the page with an "Application Error" screen, and the "Top" control did a full reload. No configuration changes are needed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Pinned theme bumped to v2.6.1, the patch release carrying the fix for QuantEcon/quantecon-theme.mystmd#186 (Back after an in-page anchor showed an "Application Error" screen on the Netlify preview; "↑ Top" did a full reload). No configuration changes. The preview built from this commit is the first real-content check of that fix. |
v2.7.0 carries the last items of the book-theme parity gate: the pinned, scroll-tracking "On this page" panel with nested subsections (QuantEcon/quantecon-theme.mystmd#182), collapsible stderr warnings and the full OpenGraph/Twitter card set (QuantEcon/quantecon-theme.mystmd#92), and a layout correction for desktop windows 1280-1327px wide (QuantEcon/quantecon-theme.mystmd#198). No configuration changes are needed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Pinned theme bumped to v2.7.0 in 41b1f83. It carries the last items of the book-theme parity gate: the pinned, scroll-tracking "On this page" panel with nested subsections (QuantEcon/quantecon-theme.mystmd#182), stderr output folded behind a "Code warnings" disclosure (QuantEcon/quantecon-theme.mystmd#92), and a layout correction for desktop windows 1280–1327px wide (QuantEcon/quantecon-theme.mystmd#198). No configuration changes are needed; this branch sets no |
v3.0.0 is a breaking release for this repo's config: the five `launch_*`
options are replaced, and a site that bumps the pinned theme without
editing `myst.yml` silently loses its Launch control.
The launch values are ported from the Sphinx build rather than invented --
`nb_repository_url` becomes `launch_notebook_repo` and `path_to_docs`
becomes `launch_notebook_source_dir`, with `launch_colab: true` standing in
for the `launch_buttons.colab_url` entry. The branch is left unset because
`main` is the default. Nothing is derived from `project.github` any more,
so the comment above it that said otherwise is corrected.
`site.parts.footer` and `lectures/footer.md` are removed: the theme renders
the licence notice by default from v3.0.0, and declaring a footer part
replaces that whole block. The default is a superset of what the file had
-- it adds the "A theme by QuantEcon" credit the Sphinx sites carried, which
footer.md had dropped. `lectures/_static/ccbysa.png` goes with it, since the
badge is now an inline SVG in the theme and nothing else referenced it.
`site_url` comes from the Sphinx build's `html.baseurl` and is what makes
the theme emit a canonical link and `og:url`.
`need_for_speed.md` and `polars.md` lose their `{raw} jupyter`
notebook-header blocks, rewritten out by the theme repo's
`scripts/rewrite-raw-blocks.mjs`: mystmd renders no `raw` node, so each
block's own source was reaching readers as escaped text under the page
title.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Theme v3.0.0 is now on this branch: #629 merged into Three things in the description above are now out of date, listed here rather than edited in so the history stays readable. The toolchain table says theme The The "Still open" bullet about launch defaults is resolved. The URLs are no longer on theme defaults — Also landed in #629, for completeness: |
The HTML build pins an exact SHA so failures stay bisectable, which is the right call -- but the pin had not moved since 2026-06-12 while the fork's `main` gained 40 commits, so it was building with `qe-v8` while build-ipynb.yml, which clones `main`, is on `qe-v10`. The two workflows were rendering the same lecture commit with materially different engines. Now pinned to c1f274b8a (2026-09-10, `qe-v10`). The comment no longer claims the SHA *is* the fork's main, since that is what went stale: it now records when the SHA was taken and that bumping is a deliberate act. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Engine bumped in The reason for bumping: the pin had fallen 40 commits behind, so the HTML build was rendering with Worth reading this run's log rather than just its check mark. Per the "Still open" note above, execution errors are reported without failing the build, so a green run does not by itself establish that the newer engine is clean. |
|
Followed my own advice and read the log rather than the check mark. The engine move is clean. Both builds pass (HTML 4m50s, ipynb 2m04s), and the bump is confirmed active in the logs: the previous run recorded Diagnostics are unchanged across the 40 commits of engine:
For the record, those 24 ⛔ lines are two known classes and neither is an execution failure: 23 are one-per-page Worth noting against the "Still open" item above: there are currently zero cell-execution errors in the build, so the "errors are reported but do not fail the build" hazard is latent rather than active right now, and this green run means what it appears to mean. |
Experimental setup for building the lectures with the QuantEcon MyST stack. This PR is built on top of #345.
Current toolchain
Both workflows now build with the QuantEcon fork of the MyST CLI and the new theme, so the Netlify preview shows the latest content rendered by the latest tooling.
QuantEcon/mystmd, cloned and built from source with bun, but the two workflows differ:ci.ymlis pinned to the exact SHA96ee78f5so failures stay bisectable, whilebuild-ipynb.ymlclones--branch mainand so tracks the fork's latest.quantecon/VERSION.ymlis printed to the log, so every build records theqe-vNstate it ran with — the ipynb build is currently onqe-v10, the HTML build on the pinned June engine.github/workflows/ci.yml(pinned),.github/workflows/build-ipynb.yml(main)quantecon-theme.mystmdv3.0.0, pinned to the release zip (taken in #629)lectures/myst.yml(site.template)myst build --html --execute.github/workflows/ci.ymlmainThe theme moves off the archived
QuantEcon/quantecon-themebundle (which the branch was still pulling as a floatingmain.zip) onto a pinned release of the new theme repo. Bump thevX.Y.Zin thesite.templateURL to take a newer theme; the fork stays onmaindeliberately, so the preview tracks the latest tooling.The build was not actually using the fork
Worth calling out separately, because it had been green and invisible: until this update the HTML preview was built by
jupyter book build, which cannot use the fork. jupyter-book 2.x is a thin Python shim —jupyter_book/__main__.pyexecs a compiled mystmd bundle vendored inside its own wheel (jupyter_book/dist/jupyter-book.cjs) and exposes no hook to point it at another CLI. The globally installed fork was simply ignored, and only thebuild-ipynbworkflow (which callsmystdirectly) ever exercised it.The last run before the fix shows it plainly: the jupyter-book HTML build emitted 27 ×
'output' unknown export output extension: exports/<page>.ipynb, because the per-page ipynb export is a fork feature (myst-to-ipynb,qe-v1) that upstream does not know about. The same commit built by the fork'smyst build --ipynbemitted none and exported 23 clean notebooks. The HTML build now runsmyst build --html --execute— the same engine and the same flags, since jupyter-book 2.x is mystmd, just our build of it.Everything else in this update
main. Brings in the new Polars lecture, the numba rewrite, thepandas_panelswitch to remote CSVs, and the translation-sync workflows. The one conflict wasci.yml, wheremainand this branch have rewritten the same job for different builders — resolved in favour of this branch's job, keepingmain's runner spec and action bumps.myst.ymlTOC re-synced with_toc.yml. It had drifted:autodiffand the newpolarslecture were missing,workspaceappeared twice, and one part title differed. The two files now list exactly the same 27 pages.project.githubcorrected tolecture-python-programming— it pointed atlecture-python-programming.myst, which now only survives as a rename redirect. At the time this mattered because the theme derived the notebook-launch repo from the value plus a.notebookssuffix; theme v3.0.0 removed that derivation, soproject.githubnow only drives the commit and "edit this page" links, and the launch repository is named explicitly (see chore: take theme v3.0.0, migrating the launch and footer config #629).ModuleNotFoundErrorcells forjax_intro,autodiffandnumpy_vs_numba_vs_jax, because this job installed onlymyst_requirements.txtwhile the jupyter-book 1.x job onmaininstallsjax[cuda13]separately. Same install, same runner family..nvmrc; it runs as a Remix server duringmyst build --html). This also clears the Node 20 runtime deprecation warnings. The unusedconfigure-pagesstep is gone — this job deploys to Netlify, not Pages.foo.py,newfile.txt,numbers.txt,output.txt,output2.txt,test_table.csv,us_cities.txt). All are written by%%file/%%writefilecells in the lectures themselves, all are matched by.gitignore, and none exist onmain.Still open
maingained a gate for the jupyter-book 1.x path in CI: gate the first jb build so notebook errors cannot pass green #588; the fork's CLI hasmyst build --strictfor this, but it should be turned on only once the remaining build diagnostics are triaged, or it will fail on unrelated warnings.Launch-button URLs are left on the theme defaults.Resolved by chore: take theme v3.0.0, migrating the launch and footer config #629. Theme v3.0.0 makes Launch opt-in, sosite.optionsnow nameslaunch_notebook_repo,launch_notebook_source_dirandlaunch_colab, ported fromlectures/_config.ymlrather than invented; the branch is left unset becausemainis the default. Confirmed on that PR's preview: the button resolves to…/lecture-python-programming.notebooks/blob/main/need_for_speed.ipynb.ci.ymlfork pin's comment is out of date. It says the SHA is "the exact SHA of the fork's main (unmoved since 2026-06-12)", but the fork'smainhas since moved toc1f274b8a(2026-09-10) and severalqe-vNcheckpoints have landed. The pin itself is a deliberate choice — it keeps failures bisectable — but the HTML build is now running a materially older engine thanbuild-ipynb.yml, which is worth a conscious decision rather than drift.