You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Repository: QuantEcon/quantecon-theme.mystmd Revised: 2026-09-14 (nineteenth revision, final) — main @ 2ca0288 (v3.0.0); latest release v3.0.0 (2026-09-12); open PRs #195 (#114) off the gate; gate complete: every sub-issue is closed, v3.0.0 carries the work, and both consumers have taken it. #183 and #181 moved back to the design review #187 Scope: everything that must land before the all-at-once migration of the QuantEcon lecture series to MyST / Jupyter Book ≥2 on this theme. Sources: PLAN.md on main; the book-theme parity milestone; the #93 maintainer resolutions (2026-08-24, recorded in #145); the 2026-09-04 scope change on #143; the 2026-09-11 parity validation study (quantecon-book-theme @ 649cc376, this theme @ 5260864, 103 features assessed and adversarially verified, headline claims re-checked against live sites).
This is a long-lived tracker, not a period plan: it is the single source of truth for cutover-gate state, revised in place against live state rather than accumulating narrative, and it is resumed and updated but never session-closed. Revision history is in the comments.
Outcome — gate complete
Every gate item is closed, released and in consumers' hands. The validation study's gaps were implemented one issue per PR on 2026-09-12 and released together in v3.0.0 (2026-09-12), a major release because #205 makes Launch opt-in. Both consumers moved to it the same day: QuantEcon/lecture-wasm#78 is merged on main, and QuantEcon/lecture-python-programming#629 is merged into jb2, the branch behind the experimental build PR QuantEcon/lecture-python-programming#363.
#183 and #181 moved back to #187 on 2026-09-14, by maintainer decision: both are style questions for @DrDrij's design review, not parity defects the cutover waits on. That leaves this issue with no open sub-issues, and the book-theme parity milestone at 0 open and 21 closed.
What still gates the cutover is outside this theme: QuantEcon/mystmd#113 (redirects for the old Sphinx URLs) blocks it, and the source rewrite is coordinated in QuantEcon/workspace-lectures#64. Both are under Sequencing.
Source migration: QuantEcon/workspace-lectures#64, the jb1 → jb2 source-migration project. It inventories every construct mystmd does not render across 20 lecture repos, and plans the cutover rewrite as one PR per repo; its tooling is QuantEcon/workspace-lectures#65 (open).
New constructs: that inventory found four no issue had covered: capitalised {prf:Theorem}, {any}, {todo} and {fas}.
The parity project brings this theme to feature parity with quantecon-book-theme (Sphinx, JB<2) ahead of migrating the lecture series. Phases 0–2 (release infrastructure, git-history headers, launch parity with Colab + in-page JupyterLite/Thebe) shipped in v2.3.0 (2026-08-20); lecture-wasm is live on it and has tracked every release since (v2.7.0 as of QuantEcon/lecture-wasm#77, 2026-09-11). The #93 maintainer decisions (closed 2026-08-24) settled the remaining strategy: features are built local-first with upstreaming deferred to a registry (UPSTREAM-CANDIDATES.yml), and — most consequentially — the migration is all-or-nothing: every lecture series moves at once, onto a single common publishing base, when parity is complete. That decision converts the remaining parity backlog from nice-to-have into a hard cutover gate, and this issue is the single tracker for that gate.
One #93 resolution has since been superseded: the git-metadata plugin was to live permanently in this repo, but decision D8 of the report-theme design review (2026-09-02) created QuantEcon/quantecon-plugins.mystmd as the plugin family's home. The move is QuantEcon/quantecon-plugins.mystmd#11, this repo's side of it is #157, and the living-document corrections are #159. It does not gate the cutover.
Where we stand (verified 2026-09-14)
The gate is complete. Phases 0–6 were released by v2.7.0, and the gaps found by the 2026-09-11 validation study by v3.0.0.
Parity work that landed outside this item list. v2.4.0 (2026-09-04) and v2.5.0 (2026-09-05) carried a run of visual-parity changes that were never phased in PLAN.md: content typography matched to the existing builds (#155), the Sphinx lecture heading typography restored (#166), content links coloured QuantEcon blue (#167), the icon-only search trigger (#165), the contents drawer rebuilt on the Popover API (#144) and the first-paint fixes (#168, #169). v2.7.0 added the 1280–1327px layout correction (#198). They narrow the visible gap to the Sphinx sites but were not gate items; they are recorded here so the tracker does not understate what has shipped.
Parity validation study (2026-09-11)
The study inventoried quantecon-book-theme in eight independent sweeps (config surface, template, scripts, styles, user docs, changelog and tests, the fixtures corpus, and which options the lecture repos actually set across 29 repos), consolidated 100 features, assessed each against this theme with an adversarial reviewer and adjudication of disputes, and added 3 features a completeness critic found. Result: 28 implemented, 50 partial, 13 missing and untracked, 1 missing and tracked, 6 dropped by earlier decision, 5 not applicable. The headline claims were then re-checked against the live lecture-wasm site, the lecture-python-programming preview and the lecture sources; one was corrected and then re-corrected: both forms of the notebook header ({raw} jupyter and {raw} html) render as literal markup under the page title; the study's scale was essentially right (about 456 lecture files across the lecture repos; the #204 review later counted 549 header blocks across 18 lecture repos).
The gate items it produced, by phase. Every phase has met its exit criterion.
Phase
Intent
Exit criterion
Decisions
Settle the question a fix depends on
The licence-footer default is decided
Content correctness
Remove defects a reader sees on lecture pages at cutover
No literal notebook-header markup; Launch shows no dead links and can be switched off; plots centred; canonical emitted and the favicon resolves on sub-path sites. The byline contrast (#183) and the landing-page listing (#181) left this criterion when they moved back to #187
Navigation
Match the Sphinx outline depth
h4 sections appear in "On this page" and expand under an active h3
Migration readiness
Make the theme configuration move cleanly
A migration checklist page names every step the Sphinx build did implicitly: maths macros, git-metadata history depth, notebook repo naming, the notebook header setting, the {raw} source rewrite, and language and analytics settings. Under #203 the licence footer needs no step
Close-out
Close on an accurate record
The docs describe what shipped (#217), and PLAN.md carries a closing note, with its lasting guidance moved to CONTRIBUTING.md (#218)
Gates. None remain. The close-out ran last, as planned: the docs review (#217), then the PLAN.md close-out (#218).
Sequencing
The gate is green. Phases 0–6 shipped in v2.3.1 through v2.7.0, and the study's gap list in v3.0.0. Both consumers pin v3.0.0.
The cutover itself — repointing every lecture repo and running the migration — belongs to the lecture migration project and is deliberately not a sub-issue here; this gate is an input to its migration-route decision.
Migration dependencies outside the theme. The study found lecture-source constructs the QuantEcon mystmd fork does not yet handle: {nb-exec-table} (QuantEcon/mystmd#76), {only}, {glue:figure} and {youtube} render as error callouts until supported or rewritten, and the scroll-output cell tags are silently ignored, so long outputs render at full length. They are filed as QuantEcon/mystmd#104 ({only}), QuantEcon/mystmd#105 ({glue:figure}), QuantEcon/mystmd#106 (scroll-output tags) and QuantEcon/mystmd#107 (the {youtube} decision). They are filed in QuantEcon/mystmd without a parent: they gate the content migration (they surface when the lecture sources build on the fork), not this theme's parity, so they are referenced here rather than tracked.
All four are filed without a parent. The lecture-source side is coordinated in QuantEcon/workspace-lectures#64: the inventory, the rewrite rules and the one-PR-per-repo rollout at cutover. That issue also tracks the constructs its inventory found that no other issue covers: {prf:Theorem}, {any}, {todo} and {fas}.
Added by the #207 review:QuantEcon/mystmd#113, redirect pages written at build time for the old Sphinx page URLs and the existing redirect maps. Without it every inbound link to the lecture sites breaks, so unlike the other dependencies it blocks the cutover. Each repository's redirect map is recorded on QuantEcon/workspace-lectures#64.
The study's remaining partial rows (cosmetic and behavioural differences such as font-size persistence, the dark-mode palette and the header site title) are recorded in the study report and are not gate items.
✅ In sync. The book-theme parity milestone and this issue describe the same gate: 0 open and 21 closed. #183 and #181 left the milestone when they moved back to #187, whose items carry no milestone.
Repository: QuantEcon/quantecon-theme.mystmd
Revised: 2026-09-14 (nineteenth revision, final) — main @ 2ca0288 (v3.0.0); latest release v3.0.0 (2026-09-12); open PRs #195 (#114) off the gate; gate complete: every sub-issue is closed, v3.0.0 carries the work, and both consumers have taken it. #183 and #181 moved back to the design review #187
Scope: everything that must land before the all-at-once migration of the QuantEcon lecture series to MyST / Jupyter Book ≥2 on this theme.
Sources: PLAN.md on main; the book-theme parity milestone; the #93 maintainer resolutions (2026-08-24, recorded in #145); the 2026-09-04 scope change on #143; the 2026-09-11 parity validation study (quantecon-book-theme @ 649cc376, this theme @ 5260864, 103 features assessed and adversarially verified, headline claims re-checked against live sites).
This is a long-lived tracker, not a period plan: it is the single source of truth for cutover-gate state, revised in place against live state rather than accumulating narrative, and it is resumed and updated but never session-closed. Revision history is in the comments.
Outcome — gate complete
Every gate item is closed, released and in consumers' hands. The validation study's gaps were implemented one issue per PR on 2026-09-12 and released together in v3.0.0 (2026-09-12), a major release because #205 makes Launch opt-in. Both consumers moved to it the same day: QuantEcon/lecture-wasm#78 is merged on
main, and QuantEcon/lecture-python-programming#629 is merged intojb2, the branch behind the experimental build PR QuantEcon/lecture-python-programming#363.#183 and #181 moved back to #187 on 2026-09-14, by maintainer decision: both are style questions for @DrDrij's design review, not parity defects the cutover waits on. That leaves this issue with no open sub-issues, and the
book-theme paritymilestone at 0 open and 21 closed.What still gates the cutover is outside this theme: QuantEcon/mystmd#113 (redirects for the old Sphinx URLs) blocks it, and the source rewrite is coordinated in QuantEcon/workspace-lectures#64. Both are under Sequencing.
footer.mdreplacing it whole{raw}blocksscripts/rewrite-raw-blocks.mjs, run by the PR preview), v3.0.0launch_*options, and no repository name is guessedog:urlcome fromsite_url, and every head link is aware of the base URLdocs/migrating.md), v3.0.0docs/and CONTRIBUTING.md against what shippedSpun out of the review:
{iframe}undermarkdown: commonmark) and ipynb export drops every raw node, including {raw} text and {raw} latex content, and logs an error that --strict does not count mystmd#111 (rawnodes).{prf:Theorem},{any},{todo}and{fas}.languagesandtranslators, can become nested settings.nb_repository_urlvalues that name missing notebooks repositories.Background
The parity project brings this theme to feature parity with
quantecon-book-theme(Sphinx, JB<2) ahead of migrating the lecture series. Phases 0–2 (release infrastructure, git-history headers, launch parity with Colab + in-page JupyterLite/Thebe) shipped in v2.3.0 (2026-08-20); lecture-wasm is live on it and has tracked every release since (v2.7.0 as of QuantEcon/lecture-wasm#77, 2026-09-11). The #93 maintainer decisions (closed 2026-08-24) settled the remaining strategy: features are built local-first with upstreaming deferred to a registry (UPSTREAM-CANDIDATES.yml), and — most consequentially — the migration is all-or-nothing: every lecture series moves at once, onto a single common publishing base, when parity is complete. That decision converts the remaining parity backlog from nice-to-have into a hard cutover gate, and this issue is the single tracker for that gate.One #93 resolution has since been superseded: the git-metadata plugin was to live permanently in this repo, but decision D8 of the report-theme design review (2026-09-02) created
QuantEcon/quantecon-plugins.mystmdas the plugin family's home. The move is QuantEcon/quantecon-plugins.mystmd#11, this repo's side of it is #157, and the living-document corrections are #159. It does not gate the cutover.Where we stand (verified 2026-09-14)
The gate is complete. Phases 0–6 were released by v2.7.0, and the gaps found by the 2026-09-11 validation study by v3.0.0.
jb2Parity work that landed outside this item list. v2.4.0 (2026-09-04) and v2.5.0 (2026-09-05) carried a run of visual-parity changes that were never phased in PLAN.md: content typography matched to the existing builds (#155), the Sphinx lecture heading typography restored (#166), content links coloured QuantEcon blue (#167), the icon-only search trigger (#165), the contents drawer rebuilt on the Popover API (#144) and the first-paint fixes (#168, #169). v2.7.0 added the 1280–1327px layout correction (#198). They narrow the visible gap to the Sphinx sites but were not gate items; they are recorded here so the tracker does not understate what has shipped.
Parity validation study (2026-09-11)
The study inventoried quantecon-book-theme in eight independent sweeps (config surface, template, scripts, styles, user docs, changelog and tests, the fixtures corpus, and which options the lecture repos actually set across 29 repos), consolidated 100 features, assessed each against this theme with an adversarial reviewer and adjudication of disputes, and added 3 features a completeness critic found. Result: 28 implemented, 50 partial, 13 missing and untracked, 1 missing and tracked, 6 dropped by earlier decision, 5 not applicable. The headline claims were then re-checked against the live lecture-wasm site, the lecture-python-programming preview and the lecture sources; one was corrected and then re-corrected: both forms of the notebook header (
{raw} jupyterand{raw} html) render as literal markup under the page title; the study's scale was essentially right (about 456 lecture files across the lecture repos; the #204 review later counted 549 header blocks across 18 lecture repos).The gate items it produced, by phase. Every phase has met its exit criterion.
{raw}source rewrite, and language and analytics settings. Under #203 the licence footer needs no stepGates. None remain. The close-out ran last, as planned: the docs review (#217), then the PLAN.md close-out (#218).
Sequencing
The gate is green. Phases 0–6 shipped in v2.3.1 through v2.7.0, and the study's gap list in v3.0.0. Both consumers pin v3.0.0.
The cutover itself — repointing every lecture repo and running the migration — belongs to the lecture migration project and is deliberately not a sub-issue here; this gate is an input to its migration-route decision.
Migration dependencies outside the theme. The study found lecture-source constructs the QuantEcon mystmd fork does not yet handle:
{nb-exec-table}(QuantEcon/mystmd#76),{only},{glue:figure}and{youtube}render as error callouts until supported or rewritten, and the scroll-output cell tags are silently ignored, so long outputs render at full length. They are filed as QuantEcon/mystmd#104 ({only}), QuantEcon/mystmd#105 ({glue:figure}), QuantEcon/mystmd#106 (scroll-output tags) and QuantEcon/mystmd#107 (the{youtube}decision). They are filed in QuantEcon/mystmd without a parent: they gate the content migration (they surface when the lecture sources build on the fork), not this theme's parity, so they are referenced here rather than tracked.Added by the #204 review:
settings.myst_to_ipynb.headerproject setting, so the notebook logo header comes from configuration instead of copies in lecture files.{iframe}undermarkdown: commonmark) and ipynb export drops every raw node, including {raw} text and {raw} latex content, and logs an error that --strict does not count mystmd#111 (rawnodes).All four are filed without a parent. The lecture-source side is coordinated in QuantEcon/workspace-lectures#64: the inventory, the rewrite rules and the one-PR-per-repo rollout at cutover. That issue also tracks the constructs its inventory found that no other issue covers:
{prf:Theorem},{any},{todo}and{fas}.Added by the #207 review: QuantEcon/mystmd#113, redirect pages written at build time for the old Sphinx page URLs and the existing redirect maps. Without it every inbound link to the lecture sites breaks, so unlike the other dependencies it blocks the cutover. Each repository's redirect map is recorded on QuantEcon/workspace-lectures#64.
Not in scope (and why)
server:backend, incl. localhost) #154 (Thebe server/localhost compute) — demand-driven launch/compute enhancements beyond the book-theme feature set as the lecture repos actually configure it; none gates the cutover. Deliberately kept off the milestone. The study confirmed no lecture repo setsjupyterhub_url.thebe: false; built as PR feat(compute): per-lecture live compute via an enable_live_compute site option #195 on its own merits.Tracker hygiene
✅ In sync. The book-theme parity milestone and this issue describe the same gate: 0 open and 21 closed. #183 and #181 left the milestone when they moved back to #187, whose items carry no milestone.