Rebuild the public face for v1.8.0: new demos, README cut to 139 lines - #72
Merged
Conversation
The README led with a hero GIF from 2026-05-01 that showed none of review, compliance, plan or integrate, and 53% of its 251 lines were six stacked "What's new" sections back to v1.3.0. Demos, all re-recorded against the shipped 1.8.0 CLI: - Hero now runs init, cost, compliance and plan, and ends on the DEPLOYABLE verdict from terraform validate. 300 KB, 30s. - New review demo: cloudwright review scores the patient-portal spec, then --traceability maps each component and resource to a violated HIPAA control. 320 KB, 20s. - The controls web demo loses 15s of plan spinner and drops to 2.4 MB. - The smart canvas demo is current and unchanged. Assets: deleted 12 orphaned GIFs that nothing referenced, 15.9 MB. The four GIFs the README embeds now total 6.0 MB, down from 25.4 MB across 16 files. Tapes: the hero tape hardcoded a path into .claude/worktrees/v1.3-audit-fixes and sourced its venv. Pruning that worktree would have made vhs record a broken shell with no error. Both tapes now run from the main checkout and write into the gitignored tmp/. Docs: cli-reference.md documents integrate, the last of 25 commands missing. Its mcp --tools list gained review, compliance and plan, which shipped in 1.7.0. No version bump. Docs and assets only.
The tapes traded one hardcoded path for another. Replacing the worktree path with an absolute path to this machine's checkout would have broken vhs for anyone who cloned the repo, in the same silent way. Both tapes now resolve the checkout with `git rev-parse --show-toplevel`, so they name no machine path. Run from outside a clone they now fail visibly instead of recording a bare prompt. Re-rendered both from the repo root; content is unchanged. The heading "grade, lint and diff a spec" named a command that is not in the nine. `diff` exists but the nine are lint, score, analyze, policy, security, drift, review, compliance and plan. Now "grade, scan and compare". Verified 22 MCP tools across 9 groups by counting `@mcp.tool` in the registry, which the README and cli-reference both state.
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 README led with a hero GIF from 2026-05-01. It showed
init,cost,validate,export terraformandexport pulumi-ts, and none ofreview,compliance,planorintegrate, which are the v1.5.0 to v1.7.0 differentiators. 134 of its 251 lines, 53%, were six stacked "What's new" sections going back to v1.3.0.No version bump. This is docs and assets only, so 1.8.0 stays. Nothing is tagged and nothing goes to PyPI.
The four GIFs the README embeds all show 1.8.0, and total 5.7 MiB
cloudwright-hero.gifcloudwright-review-demo.gifcloudwright-controls-web-demo.gifcloudwright-smart-canvas-demo.gifThe hero runs
init,cost,complianceandplanagainst thethree_tier_webtemplate, so it needs no LLM call and reproduces exactly. It ends onVerdict: DEPLOYABLEfromterraform validate. The tape hides the 15s terraform wait and prints that duration on screen, so the GIF does not implyplanis instant.The review demo is new.
cloudwright reviewscores the patient-portal spec 39/100 with 15 findings and 8 blocking, thencompliance --traceabilitymaps each component and Terraform resource to a violated HIPAA control. Both commands unset the API keys first, because neither needs one.The controls web demo was 39s, and 15 of those were a
Running plan...spinner. I cut that segment with ffmpeg and held the final frame. That is post-processing, not a re-record, so the do-not-re-record constraint holds. 3.5 MB to 2.4 MB.Verification: 4 frames extracted per GIF with ffmpeg and read back, 16 in total, against the final optimized bytes.
12 orphaned GIFs deleted, 17.2 MiB
Nine older recordings (
databricks,demo,dryrun,schema,security,v035,v040,v100at 9.3 MB alone, andv110), the two MCP recordings, andcontrols-demo. Summed from the blob sizes withgit cat-file -s, not fromdu.The debt list counted 11.
controls-demo.gifis the twelfth: the new hero coverscomplianceandplanon the same spec, so it is redundant. Its recipe,scripts/controls_demo.tape, goes with it.scripts/review_demo.tapemoves toexamples/tapes/cloudwright-review.tapenext to the hero tape.I grepped every basename across the whole repo before deleting, not just README and
docs/*.md. Two historical audit files underdocs/audits/mentioncloudwright-demo.gifin prose. Those are records of a past state, so I left them.A deliberate non-deletion: the README no longer embeds any of the 10 files in
docs/screenshots/, which the task protected from re-recording. They are now referenced only by CHANGELOG.md and their generator,scripts/ui_screenshots.py --readme. I left all 10. They regenerate on demand and the changelog points at them, so they are not the same category as the 12 above. Flagging it as a decision, not an oversight.The hero tape pointed into a worktree that could vanish
It hardcoded a path into
.claude/worktrees/v1.3-audit-fixesand sourced that worktree's venv. That worktree still exists and resolves to 1.8.0 by luck. Prune it and vhs records a broken shell, exits 0, and overwrites the GIF with garbage.My first fix replaced it with an absolute path to this machine's checkout, which is the same bug wearing a different hat: it would break in every clone. Both tapes now resolve the checkout with
git rev-parse --show-toplevel, so neither names a machine path. I tested this by running the tape from outside the repo: it now fails visibly, with the error on screen, instead of recording a bare prompt.The old tape also ran
rm -rf demorelative to its cwd. Repointed at the repo root that would delete at the root, so the new tapes work inside the gitignored scratch area.README: 251 lines to 139, and every heading states its finding
One
What's newsection, for v1.8.0. Earlier releases get one line and a CHANGELOG link. Zero em-dashes, down from 9. The version-stampedSmart Canvas + Module Catalog (v1.2)heading is gone.Read only the headings and the story is there: a prompt produces a spec, a cost, a control-mapped report and Terraform; every finding carries the control ID it violates; the review needs no API key; canvas edits never call the model; one MCP server reaches 11 coding agents.
Three claims were wrong or unchecked, and all three are now verified from source:
prompts.PROVIDER_SERVICES, summed per provider: aws 47, gcp 26, azure 29, databricks 12).cloudwright integrate --list.@mcp.tooldecorators across the registry.One heading claimed more than the section proved: "grade, lint and diff a spec" named
diff, which is a real command but is not one of the nine listed. It now reads "grade, scan and compare".All 14 links and 3 anchors in README.md resolve, checked with a loop over
<img src=,![]()and[](target), with GitHub's slug rule applied to the anchors.docs/cli-reference.md documents integrate, the last of 25
Full options table, the three modes, all 11 harnesses, and the
--writeand--forcebehaviour. Itsmcp --toolsrow also gainedreview,complianceandplan. Those three groups shipped in 1.7.0 and were never documented.Verification
ruff check packages/clean.ruff format --check packages/clean, 285 files..envhidden andenv -u ANTHROPIC_API_KEY -u OPENAI_API_KEY: core 1392 passed / 22 skipped, web 152 / 68 skipped, cli 137, mcp 35. Zero failures, matching the v1.8.0 baseline exactly.Three code bugs found and not fixed here
All three are code changes, and this PR is docs and assets only.
oscal.py:24hardcodes_CW_VERSION = "1.6.0", so every OSCAL component-definition reports 1.6.0 while the tool is 1.8.0. I kept it out of the review GIF by showing the traceability table instead of the OSCAL metadata block.mcp_cmd.py:13still advertises six tool groups in its--helpstring. The server accepts all nine, since the value passes straight tocreate_server, so only the help text is stale.cloudwright compliance --fail-on noneprintsStatus: FAILED (fail-on=none), which reads as a contradiction. Dropping the flag gives the clearerStatus: PASSED (fail-on=high).Reviewed by Xavier Puspus