docs: VHS terminal demos with committed tapes and make demos - #42
Conversation
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Committed .tape sources keep the demos re-renderable after CLI output changes (the samples are pinned by renderer tests); `make demos` re-renders all GIFs against the compose database.
Committed .tape sources keep the demos re-renderable after CLI output changes (the samples are pinned by renderer tests); `make demos` re-renders all GIFs against the compose database.
…mples Two empty prompts between successive commands so each command's output reads as its own block in the rendered GIFs (improve.tape grows taller to fit). The hero demo continues past the catalog proof into the declarative loop: diff --desired plans the remaining change, migrate executes it, diff confirms convergence. README samples and the demos table now lead with the declarative front door: diff, improve, refuse, lint.
|
🤖 Adversarial correctness review, requested by @aparajon and performed by his agent. Reviewed at head Verdict: the tapes are well-built and this is the right pattern — hidden reseeding setup, committed sources, a documented re-render path — and it is safe to land. The one thing to settle before merge is order: #43 invalidates three of these four GIFs, including the README hero. Nothing here is a safety issue; the risk is shipping animated documentation that shows output the tool no longer produces, which no test in this repo can catch. Findings1. #43 (
The geometry was sized for the old output too: 2. The README collision is textual, not only semantic. This PR moves the "Diff: declarative desired state in, executable plan out." block from below the lint sample up to just under the new GIF, carrying the old SQL-script sample with it. #43 rewrites that same block in place — new lead sentence ("classified plan out"), the diagnostic sample, the 3. 4. "the samples are pinned by renderer tests" does not hold for the README. 5. (nit) The recorded prompt bakes in the author's local path. 6. (nit) 7. (nit) Repo weight compounds. 873 KB across the four GIFs today. Because they are binary, each re-render commits a whole new blob rather than a delta, and the stated workflow is to re-render whenever CLI output changes — which, between #39, #43 and this PR, is roughly monthly right now. Action items
Verified (tried to break, couldn't)The tapes themselves are sound: This review was generated by Claude Code (claude-opus-5). |
|
🤖 Second pass, same head ( Lens 1 — OSS adoptionThis is the highest-leverage README change available to this project, and the hero choice is right. The thing that makes someone try a schema-change tool is watching it take a statement they know is dangerous and quietly run something safer — not a feature list, not a table of dispositions. Moving the diff section above the improve sample is also right, and worth keeping through the rebase. Declarative desired-state-in is the story that distinguishes this from a linter, and burying it under three imperative samples undersold it. Where I would push further: the demo you do not have is contention. Picking up the thread from #39 — every prospective adopter has personally been burned by a schema change that queued behind a lock and took the application down with it. None of the four tapes shows pg-sprite meeting a held lock and backing off rather than joining the queue. That is the one thing a reader cannot get from documentation, cannot get from a competitor's README, and cannot talk themselves out of. It is also very recordable: open a transaction in a second psql session, run the change, show the bounded One consequence of finding 1 worth calling out separately. After #43, Lens 2 — the seam an orchestrator consumesNothing in this PR touches the seam, which is exactly right for a docs change. No engine code, no JSON contract, no The structural gap is that the demo surface now has three tiers with three different guarantees. This review was generated by Claude Code (claude-opus-5). |
aparajon
left a comment
There was a problem hiding this comment.
🤖 Approving on @aparajon's behalf after the adversarial correctness review above (no blocking findings). One merge-order condition, not a change request: land this and #43 in a deliberate order and re-render — three of the four GIFs record output #43 rewrites. This stamp was left by Claude Code (claude-opus-5).
diff and lint now print diagnostic reports instead of the SQL script and one-line findings, so the recorded GIFs showed output the binary no longer produces. Tape heights grow to fit the taller reports and the stale guard-comment references are updated.
51b9875 to
aa45de2
Compare
make demos now builds the binary and starts the compose database itself so a fresh clone cannot record "command not found" into the GIFs; the demos README states plainly that nothing pins the GIFs and re-rendering is a manual duty; the recorded prompt is neutral; lint.tape cleans up its /tmp file off camera. All four GIFs re-rendered for the new prompt.
|
Review response from Kiran's (@Kiran01bm) code review assessment agent (Amp / Claude Opus 4.5) Summary: all seven adversarial findings are resolved — the ordering question (findings 1–2) was settled by landing #43 first and rebasing/re-rendering this PR on top of it; findings 3–7 are fixed in the follow-up commit — and the two lens suggestions (a contention tape, tying the tapes to the tour-pinned command surface) are tracked as internal follow-ups.
Verified before pushing: Sources: adversarial review and adoption/orchestrator lenses, posted by Claude Code (claude-opus-5) on @aparajon's behalf. |
Trims the README's duplicated console samples in favor of the animated demos and inlines all four GIFs in the demos page. ## Why After the demos landed (#42), the improve, refuse, and lint sections carried both a GIF and a near-identical verbatim console block — two renderings of the same output to keep in sync by hand. The demos page described the recordings in a table without showing them. ## What - README: improve/refuse/lint keep their exit-code/gating prose and point at the GIF plus `docs/cli-output-examples.md`; the diff sample stays as the one copyable text rendering, with `cli-output-examples.md`'s back-pointer updated to match. The lint section's exit-code claim now matches the code (error-severity findings exit non-zero; warnings alone pass). - `docs/demos/README.md`: the tape table becomes per-tape sections with each GIF embedded. - Tapes: all four GIFs re-rendered. ``` Before After ┌───────────────────────────────┐ ┌───────────────────────────────┐ │ README │ │ README │ │ hero GIF (improve) │ │ hero GIF (improve) │ │ diff: prose + console │ │ diff: prose + console │ │ improve: prose + console │ │ improve: prose ──┐ │ │ refuse: prose + console │ │ refuse: prose ──┼─ links ─┐ │ │ lint: prose + console │ │ lint: prose ──┘ │ │ └───────────────────────────────┘ └─────────────────────────────┼─┘ │ ┌───────────────────────────────┐ ┌─────────────────────────────▼─┐ │ docs/demos/README.md │ │ docs/demos/README.md │ │ table describing the tapes │ │ per-tape sections, each GIF │ │ (GIFs not shown) │ │ embedded inline │ └───────────────────────────────┘ └───────────────────────────────┘ ```
Adds deterministic VHS terminal recordings for the four CLI stories and embeds the improve demo in the README.
Why
The README's verbatim console samples read well but don't show the tool moving — a short animated demo of the safer-sequence substitution lands the value proposition faster for new users. Committed tape sources (the same pattern charmbracelet/gum uses) keep recordings honest and cheap to refresh: when CLI output changes,
make demosre-renders every GIF from scratch against the compose database instead of someone re-recording by hand.What
docs/demos/: four VHS tapes plus their rendered GIFs — improve (dry-run → real run →\dcatalog proof, then the declarative loop:diff --desiredplans,migrateexecutes,diffconfirms convergence), refuse (error[rewrite-required]with typed help and the exit-code contract), lint (offline, no database), and diff-greenfield (full desired schema planned as a diagnostic report with the greenfield note). Hidden setup reseeds database state, so every tape is rerunnable.make demos: re-renders all GIFs from the tapes.Before / after