Rebuild the homepage as a scrolling page, and cut the README to three questions - #132
Merged
Conversation
…ains The three-slide scroll-snap deck depended on 100dvh slides and a JS transform scale to make content fit; it broke deep links and read badly on short viewports. The homepage is now an ordinary document. Content: - Five regulated domains — finance, healthcare, insurance, life sciences, legal — one per check, so each card demonstrates a different refusal. Public Sector cannot be a label: lint.py forbids "sector". - A fourth rule card for the decision record, so receipts and verify are not absent from the homepage. - One sentence restoring what CTRLRun is not: not an LLM, does not read prompts, checks the action rather than the thinking. - /try states again that its rules are not industry defaults. - The boundary gate carries the logo lockup rather than a plain wordmark. - adopt.ctrlrun.dev linked for businesses, in the production strip and footer. - The navbar primary returns to the safety review; the hero keeps the demo, so the two CTAs stop competing for the same destination. Cleanup: - Delete deck-nav.jsx, orphaned once the deck went, along with ~30 dead rules (pillars, how-steps, outcomes, chain-cta, commercial, comparison, failure). - Fix a specificity bug: .cr-home-hero in @media(max-width:800px) could never beat .cr-home .cr-home-hero, so the tablet hero padding never applied. - Collapse two generations of duplicated .cr-lede and .cr-home-hero rules. - Restore Payments as the explorer default; on DevOps the demo copy degrades from $500/$5,000 to "one approved target". lint.py 0 findings, links.py 0 broken. Every /try deep link validated against the explorer's domain and situation data. No horizontal overflow at 390, 768 or 1440.
Contributor
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
The two columns repeated their first two steps verbatim: same ticket, same agent request, printed twice. Ten boxes carrying six boxes of information, in a card 607px tall that pushed the hero past the fold. State the premise once, then fork. The card is 467px, and the headline says what the example is about — a tool the agent was allowed to call, with an amount it was not — instead of asserting the model's state of mind.
The /try page opened on dropdowns with no statement of who was doing what: the three-lane explanation of agent, boundary and real system was collapsed into a details element below the demo, the chips and the share box. A visitor reached the controls before being told what they were controlling. /try: - Lift the three lanes above the controls and say plainly that an LLM picks the action and believes it is right. - Title states the division: the model decides what, CTRLRun decides whether. - Number the three controls and hand the visitor a role before them. Homepage: - A 49 second screencast of a policy file and the decisions it produces, between the domains section and the integration section. Re-encoded 2560x1440 to 720p, 4.2MB to 1.1MB, poster frame and preload none so only a viewer who scrolls to it pays for it. Plays on scroll via IntersectionObserver, muted and looping, pausing when it leaves view and respecting prefers-reduced-motion. - Five integration surfaces under the CTA: Python, the MCP gateway, the framework adapters, non-agent workloads, and the HTTP API marked PLANNED because it is not built and carries no milestone. - Move the proof links under the code block they refer to. Spacing pass throughout, and two bugs it exposed: the code column was centred against a taller sibling, and .cr-surfaces lost its top margin to the .cr-site ul reset, which outranks a bare class. No em dashes in visitor-facing copy.
705 lines down to 355. The page now answers what CTRLRun does, how to use it in three steps, and how it works, and everything else is a link to ctrlrun.dev. Kept as extras: the wordmark, the badges, the demo animation, contributing and the licence. What went, and where its guard went with it: - The demo transcript is now a collapsed block rather than a section. `test_the_readme_demo_section_quotes_the_demo_output_verbatim` and `test_every_expected_line_is_one_the_readme_quotes` still hold every line the demo prints against the README; only their anchor moved. - The verify report had two copies, and now has one. `docs/docs/verify.md` keeps the verbatim-output guard, renamed to say so, and the drift test between the two copies is gone because there is nothing left to drift. The README keeps the sentence that stops the badge being read as more than it is. - The readiness block keeps its two homes on the site. READINESS_HOMES drops the README; the generator still refuses a shrunken suite. - The four paragraphs on what CTRLRun is not are one paragraph. Both halves of SPEC-v0.6 §6.4's sentence survive it, so T180's allow-list is updated to the line that now carries them rather than pruned. The nine-domain table, the adapter section's negative sentence (SPEC-v0.5 §7 item 4, T139), the capability matrix, the runnable quickstart blocks and every absolute link are unchanged. 4443 passed, 47 skipped. links, lint and snippets clean.
The T180 entry was rewritten when the README's four limits became one paragraph, and the new line fits in 100 columns, so `# noqa: E501` became an unused directive and RUF100 failed the `check` job on it. Caught by CI rather than locally because ruff runs first in `scripts/check.sh` and the last local run of it predates that edit.
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.
The three-slide scroll-snap deck depended on
100dvhslides and a JStransform: scale()fitter to make content fit. It broke deep links and read badly on short viewports. The homepage is now an ordinary scrolling document.Content
lint.pyforbidssector.verifywere absent from the homepage entirely after the rewrite./trystates again that its rules are not industry defaults.Cleanup
snippets/deck-nav.jsx, orphaned once the deck went, plus ~30 dead rules (cr-pillars,cr-how-steps,cr-outcomes,cr-chain-cta,cr-commercial,cr-comparison,cr-failure)..cr-home-heroinside@media (max-width:800px)is one class and could never beat.cr-home .cr-home-hero, so the tablet hero padding never applied. Confirmed fixed — 38px/48px at 768..cr-ledeand.cr-home-herodeclarations.Paymentsas the explorer default. On DevOps the demo copy degrades from$500 → $5,000to "one approved target".Verification
lint.py0 findings,links.py0 broken. Every/trydeep link validated against the explorer's domain, action and situation data. Rendered at 390 / 768 / 1440: oneh1, no horizontal overflow, rule cards 4 → 2 → 1, domain cards 5 → 2.Known, not addressed here
docs/assets/verify-website.cjsdrives the scenario explorer against/, which stopped being true at #130/#131. It needs repointing at/tryand itsgetByLabel('Explore a situation')selector updated toChoose what goes wrong. Pre-existing, tracked separately.The README, cut to three questions
Added after the homepage work, in
f07a007and945b708. 705 lines to 355. The page answerswhat CTRLRun does, how to use it in three steps, and how it works. Everything else is a link to
ctrlrun.dev. Kept as extras: the wordmark, the badges, the demo animation, contributing, licence.
What went, and where its guard went with it
The README is pinned by tests in eight files, so nothing was deleted without moving the check
behind it.
test_the_readme_demo_section_quotes_the_demo_output_verbatimandtest_every_expected_line_is_one_the_readme_quotesstill hold every line the demo printsagainst the README; only their anchor moved, and a missing block is a failure rather than an
empty string that would pass vacuously.
docs/docs/verify.mdis now its only home andkeeps the verbatim-output guard, renamed to say so. The drift test between the two copies is
gone because there is nothing left to drift. The README keeps the badge sentence, asserted by
a new
test_the_readme_says_what_the_badge_does_not_mean.READINESS_HOMESdrops the README;the generator still refuses a shrunken suite.
survive it, so T180's allow-list points at the line that now carries them rather than losing
the entry.
docs/docs/CLAIMS.mdfollows the two renamed tests.Unchanged: the nine-domain table read back against
examples/policies/, SPEC-v0.5 §7 item 4'snegative sentence (T139), the capability matrix, the runnable quickstart blocks, and
absolute-only links for PyPI.
MANIFEST.inshipsdocs/images/*.mp4and*.jpg, which is whatcheckwas failing on at7eeec77: the homepage video is tracked, andtest_the_sdist_carries_everything_the_tests_readrequires a tracked file the tests read to be in the sdist.
Verification
PYTHON=.venv/bin/python scripts/check.sh: 4443 passed, 47 skipped, ruff and mypy --strictclean.
links.py0 broken,lint.py0 findings,snippets.py97 runnable blocks, 0 failed.