Documentation site + 5 reproducible tutorials - #2
Merged
Conversation
Stand up a full documentation site, mirroring the sibling iontrap-dynamics 1:1 (tooling, structure, branding, reproducibility). Docs/tooling/tests only — no package source or public-API change. Trail in docs/LOG.md. Site (MkDocs + Material + mkdocstrings): - Welcome, Overview (the producer/consumer boundary), Getting Started, Conventions (§10/§11), Validation (oracle catalogue), Provenance, and an mkdocstrings API reference. Branding (tokens.css/extra.css) shared with the sibling for cross-project consistency. Reproducible tutorials (the FAIR core): - Markdown is the single source of truth; tools/build_tutorial_notebooks.py generates Colab notebooks (--check freshness guard), and tests/docs/test_tutorials_execute.py runs every tutorial end-to-end with its embedded asserts as the oracle. - Five tutorials: (1) first crystal — James-1998 to machine precision; (2) the ModeConfig handoff to iontrap-dynamics; (3) mixed-species — symmetric-D vs M^-1 H, residual ~8e-15; (4) the coupling parameter Gamma; (5) the linear->zigzag transition (critical aspect ratio ~2.5, the guard). CI/CD and packaging: - ci.yml gains docs (mkdocs build --strict), tutorials (execute), and notebooks (Colab freshness) jobs; the unit matrix deselects `tutorial`. - docs-deploy.yml publishes the site to GitHub Pages on main. - New [docs]/[plot] extras, a `tutorial` pytest marker + --strict-markers, and a Documentation URL. Docs are dual-licensed (docs/LICENCE): Coastline CC BY-SA 4.0, Sail tutorials CC BY-NC-SA 4.0; code stays MIT. Tutorials were drafted and self-verified in parallel (each agent ran the pytest harness on its page), then manually reviewed for voice/consistency. Verified: ruff, mypy, mkdocs --strict, notebook freshness all clean; pytest 58 passed / 1 skipped (53 unit + 5 tutorials). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stand up a full documentation site for
iontrap-structure, mirroring the siblingiontrap-dynamics1:1 (tooling, structure, branding, reproducibility guarantees). Docs / tooling / tests only — no package source or public-API change. Decision/findings trail indocs/LOG.md.Site (MkDocs + Material + mkdocstrings)
mkdocstrings.tokens.css/extra.css) is shared verbatim with the sibling for cross-project visual consistency (provenance indocs/LICENCE). The internaldocs/LOG.mdlab-notebook is excluded from the published site.Reproducible tutorials — the FAIR core
tools/build_tutorial_notebooks.pygenerates Colab notebooks (with a--checkfreshness guard), andtests/docs/test_tutorials_execute.pyexecutes every tutorial end-to-end with its embeddedasserts as the oracle.to_mode_configs()across the boundary; runs with or withoutiontrap-dynamicsinstalled.DvsM⁻¹Hcontrast; generalized-eigenproblem residual ~8e-15.CI/CD and packaging
ci.ymlgainsdocs(mkdocs build --strict),tutorials(execute), andnotebooks(Colab freshness) jobs; the unit matrix deselectstutorial.docs-deploy.ymlpublishes the site to GitHub Pages onmain(needs Settings → Pages → Source: GitHub Actions set once).[docs]/[plot]extras, atutorialmarker +--strict-markers, aDocumentationURL. Docs are dual-licensed (docs/LICENCE): Coastline CC BY-SA 4.0, Sail tutorials CC BY-NC-SA 4.0; code stays MIT.How it was built & verified
The five tutorials were drafted and self-verified in parallel by a workflow (each agent ran the actual
pytesttutorial harness on its page until green), then manually reviewed for voice/consistency (two cosmetic Next-steps formatting fixes applied).Verified locally:
ruffclean ·mypyclean ·mkdocs build --strictclean · notebook freshness clean ·pytest58 passed / 1 skipped (53 unit + 5 tutorials; the skip is the optionaliontrap-dynamicsinterop export).🤖 Generated with Claude Code