Source of truth stays the # %% .py. This skill only writes
derived .ipynb (and optional .nb.html). Do not rewrite the
.py from the notebook. cells run is not a substitute.
Human-facing prose
Details: setup-workspace references/human_facing_prose.md.
Tell the user the written .ipynb (and HTML viewer) paths. Do
not quote notebook convert, --html, or site build as
something they should run.
While policy.notebooks is true, explore-ml-data fills the
analysis file it wrote. model-ml-pipeline and
evaluate-ml-pipeline fill the experiment script and, when it
exists, audit/<stem>.py, with empty outputs.
audit-ml-pipeline fills audit/<stem>.py only on a direct
close. This skill owns on-demand fills, other sources, and
turning the flag on when it is null or false. A data-analysis,
experiment, or audit source uses notebook fill, not
notebook convert.
Workflow checkpoint execution
Stage owners read policy before executing a human # %% source.
Only policy.notebooks true enables automatic notebook
materialization; null and false keep the stage's non-notebook
execution and do not change policy.
When true, exploratory analysis uses materialize.py as its
one run, then notebook fill writes the .ipynb with empty
outputs. Add --html only when policy.site is also true. An
experiment or audit file is the same: notebook fill writes the
.ipynb with empty outputs, and materialize.py is the run that
writes the digest and the HTML viewers. Do not notebook convert
those files and do not cells run them. Kernel notebook convert
stays only for a source that is itself the execution (the unfitted
experiment snapshot). A generated notebook records its source
fingerprint; loop notebooks fills or converts again only when
the source or required HTML changed.
Lookup
Run status and read policy.notebooks. Take the first row that
matches. Fill leaves code-cell outputs empty. Do not stop after
reading the table.
policy.notebooks |
Request | Then |
|---|---|---|
null |
any | step 2, then match this table again. Do not take the convert row only because it is listed first. |
false |
any | step 3. Do not fill until the policy is true. |
true |
the user asked for HTML, a site viewer, or the notebook on the site | step 4 notebook fill --html, then step 5. data_analysis/, experiments/<stem>.py, and audit/<stem>.py stay notebook fill, not notebook convert. |
true |
the source is itself the execution (unfitted experiment snapshot, before skore.evaluate) and the user did not ask for HTML or a site viewer |
kernel notebook convert, not notebook fill |
true |
notebook, ipynb, or convert, with no HTML and no site viewer | step 4 notebook fill only. No --html. No site build. |
Sequence
-
python -m skore_skills status. Readpolicy.notebooksandskills. -
If
policy.notebooksisnull: persistpython -m skore_skills policy set notebooks true. Do not AskUserQuestion. Then loadadd-python-packageforjupytextandnbformat(agent) and continue. -
If
policy.notebooksis false: say notebooks are off; offer to turn them on. Do not fill until the policy is true. -
Fill the requested percent file (default
data_analysis/data_analysis.pywhen the user did not name one):python -m skore_skills notebook fill data_analysis/data_analysis.pyFill does not execute the file and leaves code-cell outputs empty. It needs jupytext and nbformat, not nbclient, ipywidgets, or IPython. Do not start EDA, an evaluation, or an audit from this skill to produce those outputs.
experiments/<stem>.pyandaudit/<stem>.pyare filled the same way. Missingjupytext/nbformat/nbconvertstays a one-line skip.If the user wants the notebook on the site, load
add-python-packagefornbconvert(agent) and pass--html(writes a self-contained<stem>.nb.htmlnext to the.py). The site embeds that file in the associated exploratory data analysis or design report with open-separately and fullscreen controls.Optional
--out path.ipynb. Keep*.ipynbgitignored unless the user askssetup-gitto track them.Fill-only requests (notebook / ipynb / convert, no HTML or site viewer): run only that
notebook fillline, with no--html. Tell the user the written.ipynbpath. Do not mention--htmlorsite buildas an optional aside.Kernel
notebook convertis only for a source that is itself the execution: the unfitted experiment snapshot, beforeskore.evaluateexists. Convert injects%matplotlib inlinefor that kernel run so seaborn / matplotlib last expressions emitimage/png, then strips that setup cell from the written notebook. Do not put%matplotlib inlinein the.py(style/ ruff would reject it). If that convert fails becauseipywidgetsis missing, loadadd-python-packagefor it (agent) and convert again. -
After
--html, ifpolicy.siteis true,export-ml-siteis installed, runpython -m skore_skills site build --if-staleso the viewer is packaged. Run--htmlandsite buildonly when the user asked for HTML or a site viewer. Fill without--htmldoes not rebuild the site. Skip in one line otherwise. Ifsite builderrors withmkdocs-material is required, loadadd-python-packageformkdocs-material(agent) and build once more. Do notpixi add/uv add. If that skill is missing, or the retry still fails, name the error in one line. Name a build error; do not fail the fill, and do not claim the website was updated. When the build ran, say the website has been updated and paste thefile://line from that output verbatim. Do not name the markdown file or the HTML viewer path. Do not quote the CLI.
Stop conditions
- Do not
git commitorgit end-turn. - Do not run
cells runas a substitute for fill. - Do not
pixi add/uv add; loadadd-python-package. - Missing skill or missing source → one-line skip.
- Do not name
--htmlorpython -m skore_skills site buildunless the user asked for HTML or a site viewer. Tell the user paths, not the CLI.