OPEN1 · The laptop command becomes spectio open¶
Running 2026-10-29 · branch autopilot/fold-open · Thomas decided: one package, spectio, carries the laptop command; the separate package spectio-open and its PyPI name are dropped

Before: autopilot/integration at 83d639b, where the laptop tool was the package spectio-open, standard library only, with its own PyPI name.
Why¶
This step is outside pipeline.yaml. Thomas, 2026-10-29: "pourquoi ne pas garder un seul package avec conditionnel spectio et spectio[runner] ou spectio[full] plutot que spectio et spectio-open ?" (why not one package with extras rather than spectio and spectio-open?). The answer: the design already has one package with extras (spectio, spectio[server]); spectio-open stood apart only to stay free of dependencies. Folding it in was recommended, and Thomas answered "oui go pour ceci" (decision log).
What changed¶
Each item: before, then after, then where it now lives.
- The command. Before:
spectio-open <host> [--node <login node>], the console script of a separate package. After:spectio open <host> [--node <login node>], a command of the basespectiopackage, installed on the laptop withuv tool install spectioorpipx, without extras. Its row is in the command tree (cli §2), next tolocal open, which opens a server on the same machine; behaviour and security stay in dev-env §15.3 (Access). - What it costs. Before: a few kilobytes on the laptop. After: the base package's environment, under 80 MB; in exchange, one name, one package, one install guide. Dev-env §15.3 and the decision log.
- The security requirements. Unchanged: req. 8 (values from the cluster, ssh argv, link built on the laptop) now names
spectio open; so do the state file and trust boundary paragraphs. - The code layout. Before: a
packages/spectio-open/row, "standard library only". After: no such row;spectio openis listed underpackages/spectio/. Architecture §6. - P1 Task 24. Before: create
packages/spectio-open/, a CI check that it imports only the standard library, and~/.config/spectio-open/clusters.toml. After:packages/spectio/src/spectio/cli/open.pyandopen_remote.py, tests inpackages/spectio/tests/test_open.py,~/.config/spectio/clusters.toml; the standard-library test is gone. Goal, Global Constraints, M5 and Done when follow. P1. - The names. Before: four names to claim. After: three (
nf-spectio,spectio,snakemake-logger-plugin-spectio). Claim the package names says to delete thespectio-openpending publisher and thepypi-spectio-openenvironment. Inbox #66. - The publish workflow. Before: three choices. After:
spectioandsnakemake-logger-plugin-spectio;tools/release/pypi-placeholders/spectio-open/is removed..github/workflows/pypi-publish.yml. - The board and figures.
LiteStates(link-expired state) showsspectio open embl;mvp001_cluster,p1_skeletonandname-claimare redrawn.
Evidence¶
git grep -n spectio-openon the branch leaves only: anchors to the 2026-10-28 log entry, dated notes saying what it was, and records of earlier steps (APPLY4, APPLY5, NAMES, UILITE, their reviews and figureapply4_access), which describe what was true then.LiteStatesrendered withtools/canvas/render.jsat 1440×1180 and looked at: the link-expired panel readsspectio open embl.- The three figures re-rendered from their scripts; the changed labels looked at in the light PNGs and the
name-claimheading in the dark one. python3 tools/docs/check.py --base origin/autopilot/integrationanduvx --with mkdocs-material mkdocs build --strict: see the PR's Checks.
Figures and media¶
- Sketch pair at the top:
mvp001_cluster(tools/diagrams/mvp001_cluster.py), the 0.0.1 access path withspectio open. It shows the result, not a before/after: the change is a rename and a packaging move, and the before is one word in the same picture. - Redrawn:
p1_skeleton(P1 page) andname-claim(three names, claim guide). - Board:
design/ui-canvas/LiteStates.dc.html, link-expired state, rendered at 1440×1180.
Findings and open questions¶
- Thomas: on pypi.org, delete the
spectio-openpending publisher; on GitHub, delete thepypi-spectio-openenvironment. Then check thesnakemake-logger-plugin-spectiopending publisher, whose run failed withinvalid-publisher, and run the workflow again for it. .github/is code-owned, so the PR waits for Thomas's review.