Repository navigation
Add eight feature tours with screenshots from a demo repository - #22
Open
christophwille wants to merge 2 commits into
Open
christophwille wants to merge 2 commits into
christophwille wants to merge 2 commits into
Conversation
The docs said how the tool is built and nothing showed what it does. The tours are short on purpose - one topic each, under five minutes - because one long walkthrough is read by nobody who already reviews code for a living. The screenshots are not taken by hand. Each is a script of harness commands under docs/tour/shots, played by shoot.ps1 against christophwille/stampeded-demo, whose pull requests are staged for this, so a change to the UI is one command away from new pictures. On Windows a tooltip or the comment editor is a window of its own that the harness's rendering of the main window does not contain. shoot.ps1 asks each of the app's windows to print itself for those shots rather than copying the screen, which could photograph whatever lies over the app. Assisted-by: Claude:claude-fable-5-1:Claude Code
The first draft read like a manual: clipped sentences, a handful of lines written for effect, and headings that made a point instead of saying what the step is. The steps and the claims are unchanged; the headings are now literal, the lines for effect are gone, and the prose talks to a developer the way one would across a desk. Assisted-by: Claude:claude-fable-5-1:Claude Code
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.
Adds
docs/tour/: eight short, illustrated tours of what Stampeded! does on a C# repository, written for an experienced developer, each meant to be followed in under five minutes. Start at docs/tour/README.md.][npvo, context gaps, unified and side by sideNo app code changes. 43 PNGs (1280x800, light theme, 7 MB), 43 shot scripts, one PowerShell script, nine markdown files, and one link each from
README.mdanddocs/README.md.How it was built
1. A demo repository with staged pull requests. christophwille/stampeded-demo is a toy C# solution (
Corral: a herd of cattle, brands, pricing; a library, a CLI, NUnit tests, one NuGet dependency, a CI workflow). Every staged branch is kept as a tag understage/, and itsstage.ps1pushes the tags back over the branches, opens a pull request for each branch that has none open, and replaces the review comments with seed ones. That makes the state repeatable, including after tour 8 merges a pull request.stage.ps1 -Push2force-pushes v2, rebased onto a newermain, first commit amended, a third commit added; a comment on a line that moveslocal/dirty-work(stage.ps1 -Local, not pushed)mainwith one commit and an uncommitted editAll pull requests and comments are authored by one account, so Approve and Request Changes are greyed out in the pictures.
2. Screenshots through the app's own harness. Each image has a script of the same name in
docs/tour/shots/holdingScreenshotWatchercommands (open-url:,open-file:,goto:,key:,press:/release:,menu:,pane:,commit-scope,since-last-pass, ...).docs/tour/shoot.ps1plays them and adds three directives of its own:---ends one harness request and starts the next - a command that opens something has not finished when its own capture is taken;sleep:Nwaits after a request;screen/screen:X,Ytakes the image from the operating system instead.shoot.ps1 -Startsets aside the reader's window, theme, layout, scope and recent-repository settings and writes fixed ones (so no private repository name ends up in a start page shot);-Stopputs them back.-Verifychecks that every image is referenced and every reference has an image.3. Texts written against the images, with every claim checked against either a screenshot, the UI's own labels and tooltips, or the existing docs. Claims that could not be verified were removed.
What did not go as planned
OverlayPopupsis only set for X11).screenasks each visible window of the process to print itself (PrintWindow) and composes them, rather than copying the screen. A tooltip opens where the real pointer is, which a harness-moved pointer is not, soscreen:X,Ydraws it under the hovered point.Observed in the app while shooting
Not addressed here; worth their own issues.
Tests: A/B ...line.ghalready reportsCLEAN; it reads the same after a successful merge.git logwithout a revision, so they read the clone's checked-out branch and do not see the commits of the pull request under review.Not done
Nobody has walked a tour by hand with a stopwatch; "under five minutes" is an estimate from the number of steps.
Re-creating this from nothing
Enough to rebuild the feature without any memory of how it was made.
Prerequisites: Windows with PowerShell 7,
git,ghlogged in with push rights to the demo repository, .NET 10 SDK,dotnet tool install -g dotnet-coverage(tour 6), and a Debug build of the app (dotnet build Stampeded.slnx).If the demo repository still exists, clone it next to this repository (
../stampeded-demo) and:Things that will need adjusting when doing so:
08-01-merge-state.txtopenspull/4. The typo pull request has a new number after every staging (gh pr list -R christophwille/stampeded-demo); put the current one in.press:,move:,release:orscreen:X,Yhold window coordinates measured at a 1280x800 logical window (window.txt=80 40 1600 1000 normalat 125 % display scaling; at another scaling change that line inshoot.ps1so the PNG comes out 1280x800). In the unified diff the text starts at x=340, a character is about 7.67 px wide, a line 17.5 px high. Re-measure after a layout change by taking the shot and reading positions off the image.ScreenshotWatcherhandles them, not the order written (callgraph,menu:,click:, pointer,type:,key:,open-file:,goto:). Anything that must happen in sequence goes in separate---blocks.key:OemCloseBrackets/key:OemOpenBrackets.07-02-local-rangeis best shot in a freshly started app, because of the stale Tests line noted above.If the demo repository is gone, rebuild it with these properties, then stage as above:
mainhas three commits: A (the initial solution, taggedstage/main-before), B (addsAnimal.Born,AgeInYears,Herd.Yearlings), C (stage.ps1);stage/main= tip.Corral.slnx;src/Corral(Animalrecord,HerdwithAdd,IsValidBrand,RegisterBrand,OwnerOf,TotalWeight,ByBrand;PricingwithPriceFor(Animal),PriceFor(Herd),FlatPrice;HerdReport.Summarizeusing Humanizer'sToQuantity, formatting with the invariant culture);src/Corral.Cli(top-level program with a--helptext containing the typo "woth");tests/Corral.Tests(NUnit on Microsoft.Testing.Platform,global.jsontest runner as in this repository);docs/pricing.md;.github/workflows/ci.ymlrunningdotnet buildanddotnet test --solution Corral.slnx --report-trxonpull_request.stage/weight-pricingon B, four commits: renamePricingtoPriceCalculator(file and class, tests too); addWeightClassenum,ClassOf(< 350light,< 600standard, else heavy) and a factor per class inPriceFor; removeFlatPrice, theweighedparameter and--flat; list classes per brand in the report withHumanize(LetterCasing.LowerCase)and rewritedocs/pricing.mdwith a table whose limits read differently from the code (that discrepancy is what the seed comment is about).stage/brand-registry-v1on A, two commits:IBrandRegistry/BrandRegistryextracted,Herd(IBrandRegistry),IsValidBrandrewritten as a block that also refuses all-digit brands; thenBrandRegistryTests.stage/brand-registry-v2on B: the same two commits withIsValidBrandmoved to the end ofHerd.cs, plus a third commit refusing an empty owner.stage/herd-cacheon B, two commits: cacheTotalWeightin a nullable field invalidated byAdd; addRemove(which forgets to invalidate - the failing testRemove_TakesTheAnimalOutOfTheTotal) andClear(untested).stage/cli-helpon B: "woth" to "worth".stage/local-workon A:ByBrandordered by tag;stage.ps1 -Localchecks it out aslocal/dirty-workand adds an uncommittedAverageWeight.stage.ps1against the staged commits, lines found by their text: on PR Apply the fontconfig font mappings only off Windows #1 an open thread on< 350 => WeightClass.Lightand a resolved thread with one reply on.OrderBy(g => g.Key)inHerdReport.cs; on PR Run on a newer major runtime than the one built against #2 one comment onif (brand.All(char.IsAsciiDigit))inHerd.csat v1. The issue "Heavy animals sell for too little" is created after the pull requests, so they keep numbers 1-4, and PR Apply the fontconfig font mappings only off Windows #1's body ends inCloses #<issue>.Writing rules the texts follow: one premise sentence, five to eight numbered steps, each step a key or menu command, one image and at most a few sentences on what differs from a web diff; ASCII only; menu paths as they are in
MainWindow.axaml(the top-level menus are Review, Navigate, Tools, View, Help); keys as inKeyboardShortcuts.Text; nothing claimed that a screenshot, a UI label or the existing docs does not back.🤖 Generated with Claude Code