README: lead with the homepage's pitch, and record the README's own three steps - #185
Merged
Merged
Conversation
|
Warning Review limit reachedNext included review available in 29 seconds. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (9)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…hree steps The README is the GitHub and PyPI surface and ctrlrun.dev is the marketing one, and until now they led with different sentences. The header now opens with the homepage's H1 and lede verbatim, the first section carries its extra-zero example, "Three ways to use it" carries its line about agents you can and can't modify, "How it works" walks the seven steps of its diagram in the same order, the tiers are the homepage's three, and the file closes on its footer line. tests/test_readme_assets.py pins the strings here; the docs repository reads them out of index.mdx on a branch of the same name, so a drift on either side fails CI on the other. The animation was `ctrlrun demo`'s first two scenarios, piped through sed and a pacing loop. It was a true recording and a hard one to read: a stranger saw a transcript with two pipes in the command line and no code, and could not tell from it what CTRLRun is. It is now a recording of the README's own "Use it in three steps" section: the policy file, the agent that runs one refund and is stopped on the next, the human answering from the shell, and the same approval refused for a different amount. The three files it records are committed under docs/assets/recording/ and asserted byte for byte equal to the README's runnable blocks; the lines it ends on are committed as before, and the test now runs those files against the library instead of the demo. Both programs exit non-zero on the path where the refusal did not happen, so a recording of a broken build fails instead of looking fine. The terminal is 65 columns at 20px rather than 120 at 17px, so the text is legible at the width GitHub renders it. The quick start moves from IAM back to a refund so that the README, the animation, the homepage and the quickstart tell one story; the multi-domain point #122 made is kept by the sentence after it and by the nine-domain table. "How it works" gains a paragraph on budgets, scope and tasks, which 0.9 shipped and the README did not mention. Signed-off-by: arpan <contact@arpanghoshal.com>
arpanghoshal
force-pushed
the
readme/launch-sync
branch
from
September 13, 2026 20:17
f89c103 to
5d414d7
Compare
Signed-off-by: arpan <contact@arpanghoshal.com> # Conflicts: # tests/test_readme_assets.py
This was referenced Sep 13, 2026
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.
What this does
The README says what the homepage says. ctrlrun.dev leads with CTRLRun stops AI agents from taking wrong, restricted, or malicious actions in your workflows and the README led with Execution safety for AI agents; a stranger arriving from one met a second pitch. The header now opens with the homepage's H1 and lede verbatim, the first section carries its extra-zero example (without / with CTRLRun), Three ways to use it carries its line about agents you can and can't modify, How it works walks the seven steps of its diagram in the same order (normalize, decide, approve, reserve, execute, resolve, record) with its three refusals. Nothing commercial crosses over: no tiers, no early-access or engagement links, no slogan. Every documentation link goes to
https://docs.ctrlrun.dev/, which serves each page underctrlrun.dev/docsat the same path; the three badges that point at pages are regenerated from the docs repository's generator.tests/test_readme_assets.pypins the strings here, and the ctrlrun-docs branch of the same name reads them out ofindex.mdx, so a drift on either side fails CI on the other.The animation is now the README's own three steps. It was
ctrlrun demo's first two scenarios piped throughsedand a pacing loop: a true recording, and one a stranger could not read (two pipes in the command line, no code, a transcript in the library's own vocabulary). It is now a recording of the Use it in three steps section against the real library: the policy file,python agent.py(€500 runs, €5,000 stops and names the request),ctrlrun approve(the grant names the action hash),python approved.py(€5,000 with the approval runs, €9,000 on that same approval is refused, one call reached the provider). 65 columns at 20px instead of 120 at 17px, so it is legible at the width GitHub renders it. 25 seconds, 222 KB.What keeps it honest.
docs/assets/recording/holds the three files, asserted byte for byte equal to the README's runnable blocks; the tape copies them into an empty directory off screen and types every command that produces output on screen;demo.expected.txtholds the lines the recording ends on, and the test runs the same three files and asserts each is printed and each is quoted by the README. Both programssys.exiton the path where the refusal did not happen, so a recording of a broken build fails instead of looking fine.Other README changes. The quick start moves from IAM back to a refund so that README, animation, homepage and quickstart tell one story; #122's multi-domain point is kept by the sentence after it and the nine-domain table (unchanged, still parsed by
test_examples.py). How it works gains a paragraph on budgets, scope and tasks, which 0.9 shipped and the README did not mention. The demo transcript block, the capability matrix and the badge row are untouched. No em dashes in anything new.Pairs with
CTRLRun/ctrlrun-docs#21:tests/test_home_and_readme_agree.py, which reads the homepage's sentences out ofindex.mdxand asserts this README carries them. Merge this PR first, then re-run and merge the docs PR: the docs CI checks out kernelmain, so that test is red there until this lands. Nothing in this PR depends on the docs PR; the header test keeps its old name soCLAIMS.md's citation stays valid.Checks run locally
ruff check .andruff format --check .clean. The recording files are linted too, with one scopedI001ignore for the sibling import, explained inpyproject.toml.tests/test_readme_assets.py,test_demo.py,test_packaging.py,test_examples.py,test_repository_signals.py,test_scan.py,test_verify_*.py,test_preconditions.py,test_release_v0_6.py,test_framework_probe.py,test_fuzzing.py: 787 passed.test_release_documents,test_docs_audit,test_home_and_readme_agreegreen.docsjob checks out ctrlrun-docsmainand may showtest_the_claims_table_line_numbers_point_at_what_they_name, the readiness count (24 vs 27 guarantees) and the OWASP rows for G25 to G27 red. Those fail againstmaintoday as well: v0.10 items merged into the kernel ahead of their docs pages. Not from this PR.🤖 Generated with Claude Code