Skip to content

Cut qe-v9 and validate the 2026-08-10 upstream sync in the lecture books #79

Description

@mmcky

Follow-up to the 2026-08-10 upstream sync (#78, merged as 44cf0621). main now carries 23 upstream commits up to d41a821e and sits on upstream 1.10.1, but two merged features are still untagged, so there is no fork identifier that consumer projects can pin to this state.

VERSION.yml currently reads qe_version: qe-v8, with entries 12 (ci-deflake, e2bac528) and 13 (ipynb-attachment-fixes, a34ab190) at tag: null. Cutting qe-v9 over the post-sync main gives book-dp1 / book-dp2 a pinnable identifier that includes both features and the upstream catch-up.

Step 1 — qe-v9 metadata PR

Per the tag procedure in quantecon/README.md, the metadata update lands before the tag so the tagged tree is self-consistent. Both features are already tracked (via #63 and #65), so this PR is small: bump qe_version to qe-v9 in quantecon/VERSION.yml, and set tag: qe-v9 on entries 12 and 13. Nothing to change in UPSTREAM-PRS.yml — the sync already recorded the myst-to-ipynb cherry-pick caveat there. Squash-merge it (feature/doc PRs squash; only sync PRs take a merge commit).

Step 2 — cut and push the tag

Against the main commit produced by Step 1:

git tag qe-v9 <sha> -m "qe-v9: upstream 1.10.1 catch-up, CI deflake, ipynb attachment fixes"
git push origin qe-v9

Step 3 — deploy and test in the lecture books

Point book-dp1 / book-dp2 at qe-v9 using the pinned-clone recipe in quantecon/README.md, and run a full build. The 23 upstream commits are the untested surface here — the fork's own features were verified in #78 (build, lint, format, 72 turbo tasks, plus 58 myst-to-ipynb tests) and all six CI checks were green on node 20/22/24.

Where to concentrate the testing

Three upstream changes land in the notebook execution path, which is exactly what the lecture builds exercise hardest:

Upstream change What to watch for
Switch to .ipynb build cache (jupyter-book#2970) Cache writes now go to .ipynb through a tiered cache that still reads the old format as a fallback, so an existing _build/execute should not force a full re-execution. Confirm that on a warm build — a surprise full re-run is the signal something is off.
Execution session type set to console (jupyter-book#3019) One-line change in myst-execute/src/kernel.ts. Watch for kernel start failures or changed error surfacing under --execute.
Kernel path normalized to forward slashes (jupyter-book#3023) Path handling around kernel launch; low risk on macOS/Linux, but it touches the same file as the above.

Two further items worth an explicit look:

  • proof:kind spelling. Upstream added {proof:proof} / {proof:theorem} alongside the legacy prf: forms, and Sync with upstream/main (23 commits) #78 extended the fork's amsthm unnumbered default to cover the new spelling. Lecture sources use prf: today, so this should be a no-op — worth confirming theorem and proof numbering is unchanged in a built book rather than assuming it.
  • Isolated bun linker. Upstream set linker = "isolated" in bunfig.toml and the repo now declares packageManager: bun@1.3.10. The consumer install recipe uses oven-sh/setup-bun@v2 without a version pin, which resolves to latest — confirm that holds in the book CI, since an older bun would not honour isolated linking.

Done when

  • qe-v9 metadata PR merged
  • qe-v9 tag pushed
  • book-dp1 builds clean against qe-v9
  • book-dp2 builds clean against qe-v9
  • Execution cache behaves on a warm build (no unexpected full re-execution)
  • Theorem/proof numbering unchanged in the built output

Metadata

Metadata

Assignees

No one assigned

    Labels

    maintenanceMaintenance tasks on the repository

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions