The pre-0.6 documentation pass: PyPI links, two shipped commands, and the two-host claim - #104
Merged
Merged
Conversation
… the two-host claim Everything here is documentation, and none of it touches `src/`. Five things that would each have been wrong at the tag. **1. The README is the PyPI page, and it would have rendered broken.** `pyproject` sets `readme = "README.md"`, and PyPI resolves a relative URL against `pypi.org/project/ctrlrun/`. v0.5.0's README linked absolutely and carried no images; the rewrite that gave it a wordmark, a demo GIF and twenty-three relative links was green on every check this repository had, because all of them are correct on GitHub. Every link and asset is absolute now, and a test refuses a relative one. It costs no coverage: `links.py` already treats a `github.com/.../blob/<ref>/<path>` URL as an internal link wearing an absolute one. **2. `ctrlrun scan` had no changelog entry at all**, having merged after the last changelog edit. It has one now, together with `ctrlrun mcp-operator`, under a heading that keeps them out of the milestone's claims: v0.6 says *the surface did not grow*, and it did not -- these grew it afterwards. The separate `[Unreleased]` section is folded in, since two undated sections above one release is not a changelog anybody can read at the tag. **3. A docs page claimed what its own test denies.** `how-reservation-works.mdx` cited `T157`/`T158` for "one winner across two hosts"; `test_cross_host.py` opens with *"They are **not** two hosts"*, and `ROADMAP.md` says it stays unclaimed. Both production pages now say what was actually run -- separate OS processes against one Postgres, connection broken by a proxy the tests own -- and that a network partition between machines is exercised by nothing here. **4. The hero excluded the outcome the product is about.** *"happens once, exactly as approved, or not at all"* is a two-way disjunction, and a lost reply is neither: it is `AMBIGUOUS`, which the next section of the same README calls the whole point. The sentence now says at most once, and says what happens when the outcome is unknown. The category noun arrives with it -- what CTRLRun *is* was on the docs home and in `pyproject`'s description and nowhere in the README. **5. Three shipped commands were invisible and one release was unexplained.** `scan`, `mcp-operator` and `effects` are in the CLI section now, `scan` with the sentence that matters -- no score, no percentage, no badge. A "New in 0.6" section says what the durable-runtime release actually changed, which the README never did. And the "It can't" list now says CTRLRun does not detect prompt injection, which it did not, beside a problem-table row that could be read as claiming it. Kept in step: `docs/index.mdx`, `docs/IA.md` and `docs/CLAIMS.md` carry the same hero; CLAIMS gains rows for the new section, both subcommands and the injection disclaimer. Its citation guard rejected four invented test names while this was written, which is the guard working.
Contributor
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
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.
Documentation only — nothing under
src/. Five things that would each have been wrong at the tag.1. The README is the PyPI page, and it would have rendered broken
pyproject.tomlsetsreadme = "README.md", and PyPI resolves relative URLs againstpypi.org/project/ctrlrun/. v0.5.0's README linked absolutely and carried no images. The rewrite that gave it a wordmark, a demo GIF and 23 relative links was green on every check this repository has, because all of them are correct on GitHub — so publishing 0.6.0 would have shipped a broken hero image, a broken demo GIF and 23 links that 404.Every link and asset is absolute now, and
test_the_readme_carries_no_relative_link_and_no_relative_imagerefuses a new one, with a positive control beside it. It costs no link coverage:links.pyalready resolvesgithub.com/CTRLRun/ctrlrun/blob/<ref>/<path>against the checkout, so a dead target still fails there. Verified:links.py README.md→ 0 broken.2.
ctrlrun scanhad no changelog entry at allIt merged in #100, after the last changelog edit. It has one now, with
ctrlrun mcp-operator, under "Shipped in this release, and not part of the v0.6 milestone" — a heading that keeps them out of the milestone's claims, because v0.6 says the surface did not grow and it did not; these grew it afterwards, each under its own specification. The separate top-level[Unreleased]section is folded in: two undated sections stacked above one release is not a changelog anybody can read at the tag.released()still parses to 0.5.0.3. A docs page claimed what its own test denies
how-reservation-works.mdxcitedT157/T158for "one winner across two hosts".tests/test_cross_host.pyopens with "They are not two hosts", andROADMAP.mdsays the two-host case stays unclaimed. Both production pages now state what was actually run — separate OS processes against one Postgres, connection broken by a proxy the tests own — and that a network partition between machines is exercised by nothing here.postgres.mdx's table row no longer says "across hosts" as though it were measured.4. The hero excluded the outcome the product is about
"Every consequential action happens once, exactly as approved, or not at all" is a two-way disjunction, and a lost reply is neither — it is
AMBIGUOUS, which the next section of the same README calls the whole point. It now reads:The category noun arrives with it: what CTRLRun is was on
docs/index.mdxand inpyproject's description and nowhere in the README, so a reader had to infer it from three slogans.5. Three shipped commands were invisible, and the release was unexplained
scan,mcp-operatorandeffectsare in the CLI section now —scanwith the sentence that matters: no score, no percentage, no badge. A "New in 0.6" section says what the durable-runtime release actually changed, which the README never did. And the "It can't" list now says CTRLRun does not detect prompt injection, beside a problem-table row that could be read as claiming it.Kept in step
docs/index.mdx,docs/IA.mdanddocs/CLAIMS.mdcarry the same hero, so the site and the README do not drift; CLAIMS gains rows for the new section, both subcommands and the injection disclaimer. Its citation guard rejected four invented test names while this was written, which is the guard doing its job — the rows now cite what the table already cites for those claims. T180 caught the new "receipts are not signed" line and required it allow-listed with a reason, which it now is.docs/BUILD-PROMPTS-docs-0.6.mdis deliberately left alone: it is a record of prompts that were issued, not a live document.Checks
ruff check,ruff format --check,mypy --strict src/: cleanlinks.py: 180 documents, 0 broken ·lint.py: 186 documents, 0 findingssrc/untouched🤖 Generated with Claude Code