demolab-cli 2.2.0__tar.gz → 2.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of demolab-cli might be problematic. Click here for more details.

Files changed (132) hide show
  1. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/AGENTS.md +3 -4
  2. {demolab_cli-2.2.0/demolab_cli/scaffold/root → demolab_cli-2.3.0}/CLAUDE.md +1 -1
  3. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/PKG-INFO +1 -6
  4. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/README.md +0 -5
  5. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/AGENT.md +1 -1
  6. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/CHANGELOG.md +24 -3
  7. demolab_cli-2.3.0/demolab_cli/VERSION +1 -0
  8. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/guides/AUTORESEARCH-RULES.md +3 -3
  9. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/guides/RULES.md +9 -1
  10. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/AUTORESEARCH.md +1 -1
  11. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/FROM-JUPYTER.md +3 -4
  12. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/GETTING-STARTED.md +4 -5
  13. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/LINT.md +2 -3
  14. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/TOUR.md +1 -1
  15. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar010.pdf +255 -385
  16. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar018.pdf +339 -349
  17. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar019.pdf +82 -78
  18. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar023.pdf +454 -453
  19. demolab_cli-2.3.0/demolab_cli/scaffold/demo/artifacts/pdfs/ar027.pdf +0 -0
  20. demolab_cli-2.3.0/demolab_cli/scaffold/demo/artifacts/pdfs/book.pdf +8381 -6
  21. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar010.typ +0 -6
  22. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar018.typ +1 -1
  23. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar019.typ +1 -1
  24. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar023.typ +1 -2
  25. demolab_cli-2.3.0/demolab_cli/scaffold/demo/writings/ar027.typ +77 -0
  26. demolab_cli-2.3.0/demolab_cli/scaffold/root/AGENTS.md +4 -0
  27. {demolab_cli-2.2.0 → demolab_cli-2.3.0/demolab_cli/scaffold/root}/CLAUDE.md +1 -1
  28. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/demolab.yaml +5 -0
  29. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/test_engine_build.py +24 -0
  30. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/test_init_and_staging.py +6 -0
  31. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/typ/entry.typ +2 -1
  32. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/typ/lib.typ +11 -3
  33. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/typ/main.typ +3 -2
  34. demolab_cli-2.2.0/demolab_cli/VERSION +0 -1
  35. demolab_cli-2.2.0/demolab_cli/runbooks/FROM-PAPER.md +0 -48
  36. demolab_cli-2.2.0/demolab_cli/runbooks/GROUND-CLAIMS.md +0 -166
  37. demolab_cli-2.2.0/demolab_cli/runbooks/NEXT.md +0 -52
  38. demolab_cli-2.2.0/demolab_cli/runbooks/RED-TEAM.md +0 -72
  39. demolab_cli-2.2.0/demolab_cli/runbooks/STEELMAN.md +0 -44
  40. demolab_cli-2.2.0/demolab_cli/scaffold/demo/artifacts/pdfs/book.pdf +4 -8520
  41. demolab_cli-2.2.0/demolab_cli/scaffold/root/AGENTS.md +0 -5
  42. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/.gitattributes +0 -0
  43. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/.github/workflows/landing-preview.yml +0 -0
  44. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/.github/workflows/landing.yml +0 -0
  45. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/.github/workflows/publish.yml +0 -0
  46. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/.github/workflows/tests.yml +0 -0
  47. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/.gitignore +0 -0
  48. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/DEVELOPING.md +0 -0
  49. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/LICENSE +0 -0
  50. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/__init__.py +0 -0
  51. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/_paths.py +0 -0
  52. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/build.py +0 -0
  53. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/cli.py +0 -0
  54. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/deploy/deploy.yml +0 -0
  55. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/deploy/preview.yml +0 -0
  56. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/devserver.py +0 -0
  57. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/guides/GLOSSARY.md +0 -0
  58. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/guides/HOUSESTYLE.md +0 -0
  59. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/guides/SLIDES.md +0 -0
  60. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/guides/STRUCTURE.md +0 -0
  61. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/guides/SUPPORT.md +0 -0
  62. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/overlay.py +0 -0
  63. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/DOCTOR.md +0 -0
  64. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/EMBED-DOCS.md +0 -0
  65. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/LITERATURE-SEARCH.md +0 -0
  66. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/MIGRATE-CODE.md +0 -0
  67. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/MIGRATE-STACK.md +0 -0
  68. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/runbooks/UPDATE.md +0 -0
  69. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/data/ar018/swe-bench.svg +0 -0
  70. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar004.pdf +0 -0
  71. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar005.pdf +0 -0
  72. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar011.pdf +0 -0
  73. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar012.pdf +0 -0
  74. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar013.pdf +0 -0
  75. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar014.pdf +0 -0
  76. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar015.pdf +0 -0
  77. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar016.pdf +0 -0
  78. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar017.pdf +0 -0
  79. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar020.pdf +0 -0
  80. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar021.pdf +0 -0
  81. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar022.pdf +0 -0
  82. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar024.pdf +0 -0
  83. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar025.pdf +0 -0
  84. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/artifacts/pdfs/ar026.pdf +0 -0
  85. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/demolab.yaml +0 -0
  86. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/site/CNAME +0 -0
  87. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/site/landing.typ +0 -0
  88. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar004.slide.typ +0 -0
  89. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar005.slide.typ +0 -0
  90. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar011.typ +0 -0
  91. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar012.typ +0 -0
  92. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar013.typ +0 -0
  93. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar014.typ +0 -0
  94. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar015.typ +0 -0
  95. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar016.typ +0 -0
  96. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar017.typ +0 -0
  97. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar020.typ +0 -0
  98. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar021.typ +0 -0
  99. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar022.typ +0 -0
  100. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar024.typ +0 -0
  101. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar025.typ +0 -0
  102. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/demo/writings/ar026.typ +0 -0
  103. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/root/README.md +0 -0
  104. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/root/github/workflows/tests.yml +0 -0
  105. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/root/gitignore +0 -0
  106. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/root/pyproject.toml +0 -0
  107. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/.gitattributes +0 -0
  108. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/HOUSESTYLE.local.md +0 -0
  109. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/artifacts/data/.gitkeep +0 -0
  110. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/artifacts/pdfs/.gitkeep +0 -0
  111. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/experiments/helpers/__init__.py +0 -0
  112. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/experiments/helpers/provenance.py +0 -0
  113. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/experiments/helpers/style.py +0 -0
  114. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/experiments/helpers/test_provenance.py +0 -0
  115. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/tools/.gitkeep +0 -0
  116. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/skeleton/writings/.gitkeep +0 -0
  117. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/starters/monte-carlo-pi/README.md +0 -0
  118. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/starters/monte-carlo-pi/exp000.py +0 -0
  119. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/scaffold/starters/monte-carlo-pi/exp000.typ +0 -0
  120. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/slides.py +0 -0
  121. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/test_build_resilience.py +0 -0
  122. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/test_cli.py +0 -0
  123. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/test_command_catalog.py +0 -0
  124. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/test_devserver.py +0 -0
  125. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/test_overlay.py +0 -0
  126. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/test_slide_catalog.py +0 -0
  127. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/test_slides.py +0 -0
  128. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/typ/cite-popover.js +0 -0
  129. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/typ/favicon.svg +0 -0
  130. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/demolab_cli/typ/style.css +0 -0
  131. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/pyproject.toml +0 -0
  132. {demolab_cli-2.2.0 → demolab_cli-2.3.0}/uv.lock +0 -0
@@ -1,8 +1,7 @@
1
1
  > **demolab lab** — before working here, run `uv run demolab docs` and follow what it
2
- > prints (the agent manual + runbook menu). In an ordinary lab where `demolab` is already
3
- > active, `demolab docs` is equivalent. Use `uvx demolab-cli docs` only when bootstrapping
4
- > a new lab with no project environment. A user message that is just a NAME in CAPS
5
- > (`HELP`, `LINT`, `DOCTOR`, …) is a command — the manual explains.
2
+ > prints (the agent manual + runbook menu). Do not substitute `uvx`: this lab's project
3
+ > environment is the source of truth. A user message that is just a NAME in CAPS (`HELP`,
4
+ > `LINT`, `DOCTOR`, …) is a command — the manual explains.
6
5
 
7
6
  **This checkout is also the demolab-cli source repo** — the engine lives in `demolab_cli/`
8
7
  (build code, Typst templates, runbooks, guides, scaffold, and the manual `demolab docs`
@@ -1,7 +1,7 @@
1
1
  Read [AGENTS.md](AGENTS.md) and follow it before doing anything else here.
2
2
 
3
3
  **Command reflex — applies before any other action.** A user message that is *only* a
4
- NAME in CAPS (SCREAMING-KEBAB) — `HELP`, `LINT`, `DOCTOR`, `NEXT`, `LITERATURE-SEARCH`, … —
4
+ NAME in CAPS (SCREAMING-KEBAB) — `HELP`, `LINT`, `DOCTOR`, `LITERATURE-SEARCH`, … —
5
5
  *is* a command, not a topic to research. Your first move is to run `demolab docs <NAME>`
6
6
  (bare `demolab docs` for the menu + manual), read the file it prints, and follow it. Don't
7
7
  grep for it, don't guess, don't ask the user what they meant — the runbook says what to do.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: demolab-cli
3
- Version: 2.2.0
3
+ Version: 2.3.0
4
4
  Summary: Lab notebook for computational science: Python tools produce per-run artifacts; Typst publishes them as a web bundle, per-entry PDFs, and a book.
5
5
  Project-URL: Homepage, https://github.com/eoinmurray/demolab
6
6
  Project-URL: Changelog, https://github.com/eoinmurray/demolab/blob/main/demolab_cli/CHANGELOG.md
@@ -70,15 +70,10 @@ Open your lab in your agent and say a runbook's name — it follows that runbook
70
70
  | **TOUR** | guided walkthrough of the lab — what's here, what it found, where to start |
71
71
  | **MIGRATE-CODE** | bring an existing codebase in, one experiment at a time |
72
72
  | **FROM-JUPYTER** | launder a Jupyter notebook into a reproducible, seeded experiment |
73
- | **FROM-PAPER** | scaffold experiments to reproduce a paper's key result in your stack |
74
73
  | **MIGRATE-STACK** | write your tools in MATLAB / Julia / R / Octave instead of Python |
75
74
  | **EMBED-DOCS** | drop demolab into another project as a `docs/` site |
76
- | **NEXT** | read your whole arc and propose the next experiments worth running |
77
- | **GROUND-CLAIMS** | find the source sentences behind each citation |
78
75
  | **LINT** | check your writeups against the house style |
79
76
  | **DOCTOR** | audit the repo against the conventions |
80
- | **RED-TEAM** | adversarially check a result holds up before you publish it |
81
- | **STEELMAN** | build the strongest honest case for a result, so you don't under-sell it |
82
77
  | **UPDATE** | update the engine package, leaving your content untouched |
83
78
 
84
79
  ## How it works
@@ -39,15 +39,10 @@ Open your lab in your agent and say a runbook's name — it follows that runbook
39
39
  | **TOUR** | guided walkthrough of the lab — what's here, what it found, where to start |
40
40
  | **MIGRATE-CODE** | bring an existing codebase in, one experiment at a time |
41
41
  | **FROM-JUPYTER** | launder a Jupyter notebook into a reproducible, seeded experiment |
42
- | **FROM-PAPER** | scaffold experiments to reproduce a paper's key result in your stack |
43
42
  | **MIGRATE-STACK** | write your tools in MATLAB / Julia / R / Octave instead of Python |
44
43
  | **EMBED-DOCS** | drop demolab into another project as a `docs/` site |
45
- | **NEXT** | read your whole arc and propose the next experiments worth running |
46
- | **GROUND-CLAIMS** | find the source sentences behind each citation |
47
44
  | **LINT** | check your writeups against the house style |
48
45
  | **DOCTOR** | audit the repo against the conventions |
49
- | **RED-TEAM** | adversarially check a result holds up before you publish it |
50
- | **STEELMAN** | build the strongest honest case for a result, so you don't under-sell it |
51
46
  | **UPDATE** | update the engine package, leaving your content untouched |
52
47
 
53
48
  ## How it works
@@ -23,7 +23,7 @@ machine-managed staging. Full tree: `demolab docs STRUCTURE`.
23
23
  demolab is driven by the user typing a **name in CAPS** (SCREAMING-KEBAB):
24
24
 
25
25
  - **`HELP`** — present the menu at the bottom of this output, one line each.
26
- - **`<RUNBOOK>`** (e.g. `LINT`, `DOCTOR`, `NEXT`) — run `demolab docs <NAME>`, read the
26
+ - **`<RUNBOOK>`** (e.g. `LINT`, `DOCTOR`, `TOUR`) — run `demolab docs <NAME>`, read the
27
27
  file it prints, then **start it** and drive it step by step: run a step, show the
28
28
  result, confirm before the next. Never dump the whole runbook at once.
29
29
  - **`<GUIDE>`** (e.g. `RULES`, `SLIDES`) — read it the same way, then **walk the user
@@ -13,6 +13,27 @@ the runbook shows the entries between your version and the latest.
13
13
 
14
14
  ## [Unreleased]
15
15
 
16
+ ## [2.3.0] — 2026-08-07
17
+
18
+ ### Added
19
+ - **Optional collaborative inline annotations with Hypothesis.** Set `annotations: hypothesis`
20
+ lab-wide in `demolab.yaml` or `annotations: "hypothesis"` on one writing's `meta`; web readers
21
+ can highlight text and use Hypothesis threads and private groups, while PDFs remain unchanged.
22
+ The new `ar027` demo article documents the workflow and opts itself in as a live example.
23
+
24
+ ## [2.2.1] — 2026-08-07
25
+
26
+ ### Fixed
27
+ - **Lab agent instructions no longer suggest the bootstrap-only `uvx` fallback.** Every
28
+ scaffolded lab now directs agents unambiguously to its project environment with
29
+ `uv run demolab docs`, preventing sessions from falsely claiming that `demolab` is not
30
+ on `PATH` and running a cached or released package instead.
31
+
32
+ ### Removed
33
+ - **Retired five overlapping runbooks:** `FROM-PAPER`, `NEXT`, `GROUND-CLAIMS`, `RED-TEAM`, and
34
+ `STEELMAN`. Their command routing, onboarding references, demo documentation, and published demo
35
+ artifacts have been removed with them.
36
+
16
37
  ## [2.2.0] — 2026-08-07
17
38
 
18
39
  ### Added
@@ -326,7 +347,7 @@ the runbook shows the entries between your version and the latest.
326
347
  last night + queue the next pre-registered experiments), **NIGHT-SHIFT** (work the queue on a
327
348
  branch, open a PR whose description is the digest) — plus the **AUTORESEARCH-RULES** guide
328
349
  they cite. DOCTOR gains a one-plan-one-log / every-queued-entry-has-a-kill check; LINT exempts
329
- the `log` from the prose rules; NEXT reads the `log`'s decision arc. Opt-in and additive:
350
+ the `log` from the prose rules. Opt-in and additive:
330
351
  nothing changes for a lab that doesn't create a `plan` article.
331
352
  - **Per-PR site previews (`deploy.yml` rewrite + new `preview.yml`).** `demolab deploy-setup` now
332
353
  installs two workflows. Production (`deploy.yml`) switched from the GitHub-Actions Pages flow
@@ -662,8 +683,8 @@ Initial versioned release — the engine after its foundational build-out.
662
683
  The demo lives in `demolab-engine/scaffold/` and doubles as the smoke-test fixture.
663
684
  - **One-line installers** — `install.sh` (macOS/Linux) and `install.ps1` (Windows), served from the
664
685
  project landing page at demolab.eoinmurray.info.
665
- - **14 agent runbooks** — getting-started, tour, migrate-code, from-jupyter, from-paper,
666
- migrate-stack, embed-docs, next, ground-claims, lint, doctor, red-team, steelman, update — plus a
686
+ - **Agent runbooks** — getting-started, tour, migrate-code, from-jupyter,
687
+ migrate-stack, embed-docs, lint, doctor, and update — plus a
667
688
  `HELP` index, each triggerable by bare name.
668
689
  - **Citations** — `#cite(...)` inline numbered cites + `#reference-list(...)` with DOI links, and
669
690
  Wikipedia-style hover popovers on the web (DOIs open in a new tab).
@@ -0,0 +1 @@
1
+ 2.3.0
@@ -237,9 +237,9 @@ non-compliant artifact can't ship even if the agent misses the rule.
237
237
  can't drift from what ran.
238
238
  - Pre-registration = **provenance** (RULES §4.7): the mandate's commit predates the results' commits.
239
239
  - Long runs use **staged runners** (RULES §7.5) so a night can re-enter compute without repeating it.
240
- - **NEXT** reads the night documents' records and digests (not just published results), so it
241
- proposes from the decision arc; its suggestions are raw material a human may approve as
242
- `queued` entries in **AUTORESEARCH**.
240
+ - **AUTORESEARCH** reads the night documents' records and digests (not just published results),
241
+ so each review continues from the decision arc and may propose `queued` entries for human
242
+ approval.
243
243
  - **DOCTOR** checks program structure (each night document carries a mandate + record + digest,
244
244
  every `queued` entry has a `kill`, no AI-attribution trailer in commits or PR descriptions).
245
245
  - **LINT** applies the full prose rules to night documents, including the cold-read dimension.
@@ -31,7 +31,7 @@ The concrete annotated file tree is in [`STRUCTURE.md`](STRUCTURE.md); this sect
31
31
 
32
32
  **3.2 — Machine-managed staging** (gitignored, owned by the CLI — never hand-edit): `.demolab/` at the lab root holds the few engine files Typst must read from inside the lab tree (`lib.typ`, the web assets, a `VERSION` stamp); every build refreshes it when the installed engine version changes. `temp/bundle/` holds the staged bundle root (`main.typ`) plus build scratch. Local edits to either are overwritten without warning — a customisation that seems to need them is a missing config knob (see 3.3, or propose it upstream).
33
33
 
34
- **3.3 — Your root overrides, optional** (root files the framework reads; never overwritten by updates): `demolab.yaml` (wordmark + PDF titles + collections — also the **lab marker**: the CLI finds the lab root by walking up to it, so don't delete it) and `HOUSESTYLE.local.md` (your house-style overrides, which extend or replace the default `HOUSESTYLE.md`; an agent reads it). Every key defaults ⇒ a minimal file is fine. The root stubs (`AGENTS.md`, `CLAUDE.md`, `README.md`, `pyproject.toml`, `.gitignore`, CI) are laid down once by `demolab init` and are yours from then on.
34
+ **3.3 — Your root overrides, optional** (root files the framework reads; never overwritten by updates): `demolab.yaml` (wordmark + PDF titles + collections + optional web annotations — also the **lab marker**: the CLI finds the lab root by walking up to it, so don't delete it) and `HOUSESTYLE.local.md` (your house-style overrides, which extend or replace the default `HOUSESTYLE.md`; an agent reads it). Every key defaults ⇒ a minimal file is fine. The root stubs (`AGENTS.md`, `CLAUDE.md`, `README.md`, `pyproject.toml`, `.gitignore`, CI) are laid down once by `demolab init` and are yours from then on.
35
35
 
36
36
  **3.4 — User content** (100% the user's — freely deletable and replaceable): `tools/*`, `experiments/*` (runners, plus `playground.py` — the Streamlit demo, exempt from the contract), `writings/*` (`.typ` writeups), `artifacts/*` (`data/` per-run figures + `numbers.json`, `pdfs/` compiled PDFs; `artifacts/site/` is a gitignored build), `temp/*` (regenerable scratch).
37
37
 
@@ -118,6 +118,14 @@ Numbers must come from the run (§5.4) — never hand-type a literal that could
118
118
 
119
119
  See `ar006` for a worked example — ten references with DOIs, inline cites throughout, and the reference list at the foot of the body.
120
120
 
121
+ **6.7 — Collaborative annotations are opt-in and web-only.** Set `annotations: hypothesis`
122
+ in root `demolab.yaml` to embed the hosted Hypothesis client on every article and experiment,
123
+ or put `annotations: "hypothesis"` in one writing's `meta` block to enable only that entry. An
124
+ entry-level `annotations: none` disables a lab-wide setting. The client is never emitted into PDFs.
125
+ Hypothesis owns annotation accounts, storage, private-group membership, anchoring, and threads;
126
+ collaborators must choose their private group before posting if the discussion is not public. See
127
+ demo article `ar027` for the complete setup and a live example.
128
+
121
129
  ## 7. Adding an experiment
122
130
 
123
131
  **7.1 — Tool subcommand.** Add a subcommand (or reuse one) in the relevant `tools/<tool>/tool.py`. Pass a `manifest` to `write_output` declaring the headline metrics (and a video, for a rendering tool).
@@ -92,7 +92,7 @@ Give one explicit verdict:
92
92
  - **SUITABLE** — ready to formulate as a program;
93
93
  - **NEEDS REFINEMENT** — promising, but an outcome, baseline, contrast, or scope is still vague;
94
94
  - **BLOCKED** — required evidence or infrastructure is unavailable;
95
- - **WRONG WORKFLOW** — this is better handled as a one-off experiment, `FROM-PAPER`,
95
+ - **WRONG WORKFLOW** — this is better handled as a one-off experiment,
96
96
  `LITERATURE-SEARCH`, or another named workflow.
97
97
 
98
98
  Do not force every interesting thought into AUTORESEARCH merely because it owns a capitalized
@@ -68,10 +68,9 @@ working lab, or a bare `demolab scaffold`) and `demolab build` green before you
68
68
  and the reproducible version is the correct one. That's a feature, not a regression.
69
69
 
70
70
  6. **Hand off.** Show the page + its PDF. State plainly **what was dropped** (scratch cells) and
71
- **what was fixed** (seeds added, drifting numbers wired to the run, deps pinned). Then offer to
72
- run **RED-TEAM** on the fresh experiment — a just-laundered notebook is exactly the thing to
73
- adversarially check before anyone trusts it. Note: the original `.ipynb` is yours to keep or
74
- delete — it's not part of the demolab record once the experiment reproduces.
71
+ **what was fixed** (seeds added, drifting numbers wired to the run, deps pinned). Note: the
72
+ original `.ipynb` is yours to keep or delete — it's not part of the demolab record once the
73
+ experiment reproduces.
75
74
 
76
75
  ---
77
76
 
@@ -133,7 +133,7 @@ freestyling, not following this runbook.
133
133
  **scatter** of the sampled points coloured inside/outside with the quarter-circle arc, and a
134
134
  **log-x convergence curve** settling toward π. Its `README.md` states the figure contract.
135
135
  - **Bringing something in?** Existing codebase → [`MIGRATE-CODE.md`](MIGRATE-CODE.md); a
136
- notebook → [`FROM-JUPYTER.md`](FROM-JUPYTER.md); a paper → [`FROM-PAPER.md`](FROM-PAPER.md).
136
+ notebook → [`FROM-JUPYTER.md`](FROM-JUPYTER.md).
137
137
  Land the **first** experiment via that runbook (same live-page payoff as below), and set
138
138
  the expectation that the rest migrates incrementally, later.
139
139
  - **Stack, in passing:** Python (`uv`) is the default — don't ask, just note it. If their
@@ -208,8 +208,7 @@ freestyling, not following this runbook.
208
208
  runbook and then every guide as a **numbered list, one per line with its one-line
209
209
  description** (don't hand-summarise from memory or trim to a favourite few — the whole
210
210
  point is they see everything demolab can do next). Runbooks
211
- first (**NEXT** to pick the next experiment, **TOUR**, **MIGRATE-CODE**, **FROM-JUPYTER**,
212
- **FROM-PAPER**, **LINT**, **DOCTOR**, **RED-TEAM**, **UPDATE**, …), then the guides
211
+ first (**TOUR**, **MIGRATE-CODE**, **FROM-JUPYTER**, **LINT**, **DOCTOR**, **UPDATE**, …), then the guides
213
212
  (**RULES**, **HOUSESTYLE**, **STRUCTURE**, **GLOSSARY**, …). Tell them: **HELP** re-shows
214
213
  this menu anytime, and typing any name in it starts that job.
215
214
  - **Ask me anything about the repo** — how it works, where something lives, why a convention
@@ -244,8 +243,8 @@ data and the landing site's source — read it for file shapes, never overlay it
244
243
  - **Missing a prerequisite?** — if `uv` or `typst` doesn't resolve, ask them to install it
245
244
  themselves and wait; skip entirely if both already resolve. `[1]`
246
245
  - **What should your first experiment be?** — open but shaped: their idea · field → three
247
- numbered starters · bring in code/notebook/paper (→ `MIGRATE-CODE` / `FROM-JUPYTER` /
248
- `FROM-PAPER`). No idea / no field? Fall back to the **Monte Carlo π** starter so no one
246
+ numbered starters · bring in code/notebook (→ `MIGRATE-CODE` / `FROM-JUPYTER`).
247
+ No idea / no field? Fall back to the **Monte Carlo π** starter so no one
249
248
  freezes here — this is the one question with a safety net, not a hard no-default. `[2]`
250
249
  - **Publish to GitHub Pages?** — free unless the repo is private; default yes, if no skip (it
251
250
  works locally). `[5]`
@@ -6,9 +6,8 @@
6
6
 
7
7
  ## When to use
8
8
  When you want the prose and plots to read like a person — not an LLM — wrote them, and to
9
- conform to the house style before publishing. This is the **style** pass — one of three:
10
- *Doctor* audits the structural RULES, *Lint* (here) audits the prose **and the figures**, and
11
- *Red-team* audits whether the result is true and defensible. Run all three for a full check.
9
+ conform to the house style before publishing. This is the **style** pass: *Doctor* audits the
10
+ structural RULES, while *Lint* (here) audits the prose **and the figures**.
12
11
  `HOUSESTYLE.md` is the source of truth for every rule: this runbook cites it, it does not
13
12
  restate it. Scope is `writings/*.typ` (the published prose) **and the rendered figures it
14
13
  embeds** (`artifacts/data/<id>/*.svg`, `*.png`) — the plots are half of a writing and are lint
@@ -27,7 +27,7 @@ Adapt the depth to who's asking: a new lab member wants the on-ramp, a reviewer
27
27
 
28
28
  2. **Orient for their goal.** Ask what they're here to do, and tailor the close:
29
29
  - *Contributing?* → GETTING-STARTED's add-an-experiment flow, and RULES.
30
- - *Reviewing?* → the results, then RED-TEAM.
30
+ - *Reviewing?* → the results, their supporting artifacts, and the relevant tests.
31
31
  - *Taking it over?* → flag anything undocumented or fragile you noticed while reading.
32
32
 
33
33
  Keep it warm and readable — this is the door into someone else's (or past-you's) thinking.