Docs rewrite 5/5: reconcile CLAUDE.md and the doc-drift check - #189
Merged
Conversation
The freeze is over, so the rules that enforced it go: CLAUDE.md now says docs are live and every change lands with its docs — the verb's cli/ page, the module's api/ page, the user guide for visible behavior — with the same document-only-what-exists discipline. The design-doc pointer records the decision made during the rewrite: the records stay in the sibling checkout and are dropped when the rebuild completes, never imported. The workflow inventory catches up too (run-eval label, check-docs, release-tracking deploys), as does the extending table's docs column. check-docs.yml gets a prompt that knows the new structure: a map from change kind to doc home, and the two failure modes that matter most — quoted console output drifting from what the CLI prints, and docs describing anything the code no longer delivers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DJzmp2MUhwiNHR94cB91dx
Contributor
✅ Eval
lc statusConfusion & pain points (Claude analysis)Confusion & pain points
Full trace: |
EiffL
added a commit
that referenced
this pull request
Aug 21, 2026
…ibility (#190) This merges the clean rebuild of lightcone-cli onto main — the full re-architecture from the Snakemake shim to the model where **the locked environment is the execution environment**. The pre-rebuild codebase was deliberately stripped and functionality re-added one layer at a time, each layer landing with its own tests, dependencies, and (since the rewrite) docs. 21 PRs, all individually reviewed and merged into `clean_rebuild`; this PR is the promotion. ## What lightcone-cli is now A project is `pyproject.toml` + `uv.lock` + `astra.yaml` — uv is the only environment substrate, and mode is derived, never configured: direct by default (recipes in the project's `.venv` under Landlock/Seatbelt), containerized when `[tool.lightcone.image]` is declared (recipes in a content-addressed image archived in the repository itself). Five verbs: `init`, `materialize`, `status`, `run`, `build`. - **Identity**: `definition_version` (what an output *is*) and `env_version` (what it ran under) are separate on purpose — a spec contradiction is `stale` and remade; an environment move is `behind`, reported and left alone. `--refresh` widens by exactly that one state. - **Storage**: the DataLad model — git carries history, git-annex carries bytes, behind ordinary `git add`/`git commit`. Every output is committed with a manifest and a run record `datalad rerun` can replay; runs start and end on a clean tree; foreign writes are detected by history and classify stale. - **Execution**: one exec boundary (`Policy` → pure argv rewrite → honest attestation) shared by recipes and the `lc run` probe; a recipe writes its own output directory and nothing else; denials carry copy-pasteable remedies. Network is uncontrolled on every mechanism, symmetrically attested. - **Venues**: detected, never configured — a SLURM allocation is spanned with one worker per node; known centers get a login guard whose refusal prints the center's own `salloc`/`sbatch` spellings; podman-hpc makes multi-node containerized runs real. - **Publication**: declaring `[project].license` turns on the RO-Crate view — `ro-crate-metadata.json` converged by materialize, validated against Provenance Run Crate 0.5 in CI. Deposit is `git archive`. - **The engine is the host's uv tool, never a project dependency** — a project's lock carries only what the analysis imports, and an engine upgrade rebuilds nothing. ## The layers, as merged | PR | Layer | |---|---| | #173 | Layer 5: the exec boundary and `lc run` (landed first — the smallest honest consumer of the boundary) | | #175 | Layers 2 + 4: identity, provenance, `lc materialize` | | #178 | The engine is the host's uv tool (deletes layer 3 by decision) | | #180 | Layer 6: the container hatch | | #181 | Layer 7: venues — SLURM in-allocation, podman-hpc | | #182 | Layer 8: the publication view | | #184 | Hardening: the recorded residues closed (UV_* scrub, write-scope narrowing, symmetric network attestation, machine-level uv.toml advisory) | | #183 | The agentic eval reactivated: `uv tool install` of the branch under test, empty-environment task, RO-Crate gate — three green runs | | #185–#189 | The documentation rewritten end to end: README, user guide, CLI reference, developer corner, governance — every command block executed before shipping, every refusal quoted from a real run | ## Verification - The suite (tests, lint, mypy strict) is green on `clean_rebuild`, including the three gated suites CI requires: sandbox enforcement (Landlock on Linux, Seatbelt on macOS), container smoke (real build → archive → bytes-free-clone `datalad rerun`), and crate smoke (the official validator, REQUIRED clean). - The agentic eval passes end-to-end on this branch: an agent builds a supernova-cosmology analysis from the spec, manages the environment with `uv add`, materializes through the real engine, and publishes a crate — $0.70–$1.22 per run. - `zensical build` renders the rewritten docs with zero issues; the site deploys on the next release. ## Known deferred work (tracked, not blocking) - The one-time **Perlmutter spike** (layer 7's pending items are listed in CLAUDE.md) — HPC support ships honestly labeled "early days". - **hub/GKE + Cloud Build** venue and **apptainer/singularity** runtimes — design headroom recorded, deliberately not stubbed. - Multi-arch image archives; the design-doc drop and CLAUDE.md slimming when the rebuild formally closes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01DJzmp2MUhwiNHR94cB91dx --------- Co-authored-by: Claude Opus 5 (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.
Final pass of the documentation rewrite — no doc pages this time, just bringing the two things that govern the docs in line with their new reality.
CLAUDE.md
docs/cli/page, an engine change itsdocs/api/module page, user-visible behavior the user guide. The docs inherit the codebase's own discipline: document only what exists, quote refusals from real runs, verify command blocks by executing them.docs/(reverses the paragraph's earlier plan).run-evallabel (re-trigger by re-adding it),check-docs.ymlreviews merged PRs,docs-deploy.ymltracks releases; the docs build command is stated.Deliberately not done: slimming CLAUDE.md's invariant sections now that the developer corner overlaps them. CLAUDE.md is still the working memory for the remaining rebuild (Perlmutter spike, deferred layers), and gutting it mid-rebuild trades a known-good reference for dedup. Worth revisiting when the rebuild closes and the design docs drop.
check-docs.yml
The post-merge doc-drift check was written before the freeze and knew nothing about the structure. Its prompt now carries:
docs/cli/, module →docs/api/+ architecture, user-visible → user guide + README, workflow/conventions → contributing);evals/are maintained separately) replacing the staleskills/rule.Verification
zensical build: zero issues.frozen/stale workflow descriptions in CLAUDE.md comes back clean.This closes the 5-PR docs rewrite. The site deploys with the next release (or a manual
docs-deploydispatch).🤖 Generated with Claude Code
https://claude.ai/code/session_01DJzmp2MUhwiNHR94cB91dx