Scenario Browser
Filter, search, and copy snippets for every scenario in one place. The data is generated from the package registry at build time — the same allScenarios array spinUpScenario reads from. Add a scenario in the source and it shows up here next build.
Each card has a commit graph view — the real git log --graph output, captured at build time by materializing the scenario. Because every scenario is byte-identical (and therefore hash-identical) on every run, the short hashes you see here are exactly the ones you’ll get locally.
-
empty-repobranchfreshly-initialized repo, no commits, no files, no remotes
6 contracts
- HEAD is unborn (no commits)
- main is the current branch
- working tree is empty
- no remotes configured
- no tags
- no stashes
-
feature-pr-readybranchfeature branch with 4 commits, clean worktree, ready to open a PR
4 contracts
- main has 3 commits
- feat/widget-v2 is checked out
- feat/widget-v2 is 4 commits ahead of main
- worktree is clean
commit graph · 7 lines
* 0d92e8f (HEAD -> feat/widget-v2) docs: document widget-v2 API and migration path * 7e06c32 test: cover widget-v2 happy path and edge cases * 4a4ba62 feat: expose widget-v2 from public index * 7ef2a30 feat: add widget-v2 entry point and types * 8f8c1d3 (main) test: add baseline widget tests * 3377978 feat: scaffold widget module * 51d305e chore: initial commit -
feature-branch-one-commitbranchmain + feat/x (1 commit ahead, src/feature.ts)
5 contracts
- main has 1 commit
- feat/x is checked out
- feat/x has 1 commit on top of main
- src/feature.ts exists
- worktree is clean
commit graph · 2 lines
* 7d4e915 (HEAD -> feat/x) feat: add feature module * 26c2b1e (main) chore: initial commit -
multi-commit-branchbranchfeature branch with 8 varied commits (feat/fix/chore/docs/refactor/test)
4 contracts
- main has 2 commits
- feat/dashboard is checked out
- feat/dashboard has 8 commits on top of main
- worktree is clean
commit graph · 10 lines
* 7e70f15 (HEAD -> feat/dashboard) feat: add dashboard export-to-csv action * 8dc878e chore: bump dev dependencies * e65142a docs: document dashboard configuration * a1f5fd4 refactor: extract dashboard data-fetch into hook * d1545d7 fix: dashboard refresh interval respects user setting * 0448e2b test: cover dashboard reducer * 60ff18b feat: wire dashboard to data source * a6e44d1 feat: add dashboard layout * 5c57eab (main) chore: baseline app shell * 36b092a chore: initial scaffold -
two-commit-featurebranchbaseline scaffold + a single feat commit, clean worktree
4 contracts
- main has 2 commits
- commit subjects are "chore: initial commit" and "feat: add feature module"
- src/feature.ts exists
- worktree is clean
commit graph · 2 lines
* 7d4e915 (HEAD -> main) feat: add feature module * 26c2b1e chore: initial commit -
orphan-branchbranchmain + gh-pages with no shared history (orphan branch)
4 contracts
- main has 2 commits
- gh-pages is checked out
- gh-pages has 1 commit
- main and gh-pages share no common ancestor
commit graph · 3 lines
* 0895935 (HEAD -> gh-pages) docs: scaffold gh-pages site * d0a705b (main) feat: add module * 3e7cbf7 chore: initial commit -
branch-tracking-upstreambranchmain tracks origin/main, both at the same commit, worktree clean
5 contracts
- main is checked out
- main has 3 commits
- origin/main exists at the same commit as main
- main is configured to track origin/main
- worktree is clean
commit graph · 3 lines
* 6e30e6b (HEAD -> main, origin/main) feat: two * c9e8aea feat: one * 7520170 chore: initial -
branch-ahead-of-upstreambranchmain is 3 commits ahead of origin/main, worktree clean
5 contracts
- main is checked out
- main has 6 commits
- main is 3 commits ahead of origin/main
- main tracks origin/main
- worktree is clean
commit graph · 6 lines
* e27a9c8 (HEAD -> main) feat: ahead three * afb7f71 feat: ahead two * a2b6066 feat: ahead one * 0d8eaf9 (origin/main) feat: baseline two * f269069 feat: baseline one * 7520170 chore: initial -
branch-behind-upstreambranchmain is 3 commits behind origin/main, worktree clean
5 contracts
- main is checked out
- main has 2 commits
- main is 3 commits behind origin/main
- main tracks origin/main
- worktree is clean
commit graph · 5 lines
* 2237af0 (origin/main) upstream feat three * 0890736 upstream feat two * 4fe142e upstream feat one * e657666 (HEAD -> main) feat: shared baseline * 7520170 chore: initial -
branch-divergedbranchmain is 2 ahead AND 2 behind origin/main, worktree clean
5 contracts
- main is checked out
- main has 4 commits
- main is 2 ahead and 2 behind origin/main
- main tracks origin/main
- worktree is clean
commit graph · 7 lines
* a64cf51 (HEAD -> main) local N * 3d6bc88 local M | * 6b28d74 (origin/main) upstream Y | * 2b2b356 upstream X |/ * e657666 feat: shared baseline * 7520170 chore: initial -
branch-sync-showcasebranchfive local branches in five different upstream sync states (behind / ahead / diverged / synced / no-upstream); HEAD on the behind branch
8 contracts
- main is checked out
- main is 2 commits behind origin/main
- feat/ahead-only is 3 commits ahead of origin/feat/ahead-only
- feat/diverged is 2 ahead and 2 behind origin/feat/diverged
- feat/synced is at the same commit as origin/feat/synced
- local-only has no upstream configured
- all four tracked branches have branch.<X>.remote = origin
- worktree is clean
commit graph · 18 lines
* f5f2e63 (local-only) wip: local-only experiment | * a0d340e (feat/diverged) local: diverged 2 | * a3e16ed local: diverged 1 |/ | * 9899a93 (feat/ahead-only) feat: ahead three | * 1fb5f8e feat: ahead two | * 9f3f5cc feat: ahead one |/ | * c7736d0 (origin/main) upstream: main 2 | * 867156f upstream: main 1 |/ | * e334429 (origin/feat/synced, feat/synced) feat: synced-branch work |/ | * bd9cfd5 (origin/feat/diverged) upstream: diverged 2 | * 6a8b392 upstream: diverged 1 |/ * 7443f6e (HEAD -> main, origin/feat/ahead-only) feat: shared baseline module * 3657d81 chore: initial commit -
multi-remote-with-trackingbranchorigin + upstream remotes; main tracks upstream/main, feat/fork-work tracks origin
7 contracts
- origin and upstream remotes are configured
- feat/fork-work is checked out
- main tracks upstream/main
- feat/fork-work tracks origin/feat/fork-work
- feat/fork-work is 2 commits ahead of origin/feat/fork-work
- main and upstream/main are at the same commit
- worktree is clean
commit graph · 5 lines
* ad1e759 (HEAD -> feat/fork-work) feat: fork work two * 6ba3e46 feat: fork work one * 59f2ca6 (origin/feat/fork-work) feat: scaffold fork work * a0dbf3b (upstream/main, main) feat: baseline * 5eb70f1 chore: initial -
detached-headbranchHEAD detached at main~2, worktree clean
5 contracts
- HEAD is detached
- main still exists as a branch
- main has 4 commits
- HEAD is 2 commits behind main
- worktree is clean
commit graph · 4 lines
* 34c4535 (main) feat: three * 3c9536f feat: two * 1ab1c9c (HEAD) feat: one * 7520170 chore: initial -
signed-commits-requiredbranchrepo configured to require signed commits (commit.gpgsign=true + signingkey set)
5 contracts
- main is checked out
- main has 3 commits
- commit.gpgsign is true
- user.signingkey is set
- worktree is clean
commit graph · 3 lines
* 3c9536f (HEAD -> main) feat: two * 1ab1c9c feat: one * 7520170 chore: initial -
dangling-commitbranchexperimental commit dropped from main, reachable only via reflog
4 contracts
- main has 2 commits
- worktree is clean
- the experimental commit is not reachable from any branch
- the experimental commit is recoverable via the reflog (HEAD@{1})
commit graph · 2 lines
* dca4ab1 (HEAD -> main) feat: keep this * 7520170 chore: initial -
reset-recoverable-headbranchmain reset 2 commits back; former tip recoverable via main@{1}
4 contracts
- main has 2 commits
- worktree is clean
- the former tip (4th commit) is not reachable from main
- the former tip is recoverable via main@{1} in the reflog
commit graph · 2 lines
* 1ab1c9c (HEAD -> main) feat: one * 7520170 chore: initial -
mid-bisectoperation20-commit history with `git bisect` started, HEAD at midpoint
4 contracts
- main has 20 commits
- a bisect is in progress
- HEAD is detached
- no bisect decisions logged yet
commit graph · 20 lines
* 15b968b (main) feat: step 19 * 776dd30 feat: step 18 * a99fde7 feat: step 17 * 8bd95f6 feat: step 16 * 0355588 feat: step 15 * 9158a8d feat: step 14 * 4f6883e feat: step 13 * a47e02b feat: step 12 * 254b819 feat: step 11 * 5bc0d05 feat: step 10 * 7f298e0 (HEAD) feat: step 9 * b3adf88 feat: step 8 * feb4808 feat: step 7 * 6bdf65e feat: step 6 * 533991d feat: step 5 * 7f97f0c feat: step 4 * e368ff3 feat: step 3 * de6b63b feat: step 2 * 92f90a2 feat: step 1 * 06a10b7 chore: initial scaffold -
mid-merge-conflictoperationin-progress merge with one unresolved conflict in src/widget.ts
4 contracts
- main is checked out
- a merge is in progress (MERGE_HEAD exists)
- src/widget.ts has unresolved conflict markers
- exactly 1 unresolved conflict
commit graph · 5 lines
* a9cd5e1 (HEAD -> main) feat: rename widget on main | * 4be74e3 (feat/x) feat: rename widget on feat/x |/ * 43bb961 feat: baseline widget * f1f1793 chore: initial scaffold -
mid-rebase-conflictoperationin-progress rebase with one unresolved conflict in src/config.ts
4 contracts
- a rebase is in progress (.git/rebase-merge/ exists)
- REBASE_HEAD is set
- src/config.ts has unresolved conflict markers
- exactly 1 unresolved conflict
commit graph · 5 lines
* 36f0bb6 (HEAD, main) feat: switch to production env | * fb0615b (feat/refactor) refactor: use staging env |/ * 2de6c56 feat: baseline config * 8b3fa17 chore: initial scaffold -
mid-cherry-pick-conflictoperationin-progress cherry-pick with one unresolved conflict in src/utils.ts
4 contracts
- main is checked out
- a cherry-pick is in progress (CHERRY_PICK_HEAD exists)
- src/utils.ts has unresolved conflict markers
- exactly 1 unresolved conflict
commit graph · 5 lines
* 9668eb6 (HEAD -> main) feat: use UTC string for dates | * 04126d9 (feat/hotfix) fix: use locale string for dates |/ * ebd06d3 feat: baseline utils * 1e9b280 chore: initial scaffold -
mid-revert-conflictoperationin-progress revert with one unresolved conflict in src/service.ts
4 contracts
- main is checked out
- a revert is in progress (REVERT_HEAD exists)
- src/service.ts has unresolved conflict markers
- exactly 1 unresolved conflict
commit graph · 3 lines
* 26066af (HEAD -> main) feat: add role field and deleteUser method * 16aeb7f feat: add email field and listUsers method * 44eebf1 feat: add user service -
merge-conflict-rename-renameoperationin-progress merge with a rename/rename conflict (orig.txt → two different names)
6 contracts
- main is checked out
- a merge is in progress (MERGE_HEAD exists)
- orig.txt was renamed to main-name.txt on main and to feat-name.txt on feat/x
- main-name.txt and feat-name.txt both exist in the worktree (no conflict markers)
- orig.txt is absent from the worktree (DD — deleted by both sides)
- at least 2 unresolved conflicts (AU/UA/DD index entries)
commit graph · 5 lines
* 5ef56bd (HEAD -> main) refactor: rename orig.txt to main-name.txt | * 78644df (feat/x) refactor: rename orig.txt to feat-name.txt |/ * 740a739 chore: add shared file * f4ee0a9 chore: initial scaffold -
merge-conflict-delete-modifyoperationin-progress merge with a delete/modify conflict on src/component.ts
5 contracts
- main is checked out
- a merge is in progress (MERGE_HEAD exists)
- src/component.ts was deleted on main but modified on feat/x
- src/component.ts exists in the worktree with feat/x content (no conflict markers)
- exactly 1 unresolved conflict (DU status: deleted by us, modified by them)
commit graph · 5 lines
* 3685503 (feat/x) feat: update component to v2 | * da99c48 (HEAD -> main) refactor: remove component |/ * 6626e42 feat: add component * f4ee0a9 chore: initial scaffold -
merge-conflict-add-addoperationin-progress merge with an add/add conflict on src/config.ts
5 contracts
- main is checked out
- a merge is in progress (MERGE_HEAD exists)
- src/config.ts was independently added on both branches with different content
- src/config.ts has unresolved conflict markers
- exactly 1 unresolved conflict (AA status: added by both)
commit graph · 4 lines
* 3c5fcfd (HEAD -> main) feat: add config for production | * d9e1e2e (feat/x) feat: add config for development |/ * f4ee0a9 chore: initial scaffold -
interactive-rebase-mid-editoperationinteractive rebase paused at an edit action with 2 remaining picks
4 contracts
- a rebase is in progress (.git/rebase-merge/ exists)
- .git/rebase-merge/interactive exists
- HEAD is detached
- .git/rebase-merge/git-rebase-todo has at least 1 remaining pick
commit graph · 4 lines
* a0afc60 (main) feat: add module c * 895b026 feat: add module b * 8c99000 (HEAD) feat: add module a * f4ee0a9 chore: initial scaffold -
merge-no-conflicthistorya successful --no-ff merge of feat/x into main, fully committed
5 contracts
- main has the merge commit at HEAD
- HEAD has 2 parents
- worktree is clean
- main is checked out
- feat/x exists and is merged into main
commit graph · 6 lines
* 34a6587 (HEAD -> main) Merge branch feat/x |\ | * ad8c9b1 (feat/x) feat: add x |/ * d37e34b feat: baseline a * 7520170 chore: initial -
rich-history-graphhistorymulti-branch history that exercises bucket dividers, type coloring, branch chips, lane topology
6 contracts
- main is checked out
- feat/wip exists and is NOT merged into main
- two --no-ff merge commits sit on main (feat/auth, feat/payments)
- worktree is clean
- commits span at least 6 distinct date buckets (today through 2 older months)
- commit messages cover feat / fix / chore / docs / refactor / test / perf / revert and a breaking-change `!:`
commit graph · 28 lines
* 9109b4b (HEAD -> main) feat(search): trigram-based subject filter * 25ced15 revert: temporary rollback of v1-shim removal * 7f089dd chore: tidy imports * 069596f fix!: drop deprecated v1 endpoints | * 8fba97e (feat/wip) chore(search): prototype lookup cache | * e8cee63 feat(search): experimental trigram backend |/ * 3e8e574 perf(db): index user_id on sessions * b8a15ab fix(db): retry on transient timeout * 86bab4d perf(api): cache compiled route matcher * 7a4ec73 Merge branch 'feat/payments' |\ | * d8ef61a (feat/payments) test: cover stripe checkout flow | * 2d6e7f2 fix(payments): handle 3D-secure redirect | * f79b8c7 feat(payments): stripe checkout adapter |/ * 0e4d041 docs: contributor guide * 12d70a4 chore(deps): bump simple-git to 4.x * c36d837 fix(api): route precedence for catch-all * 1b20d70 refactor(api): centralise error shapes * 93086cc Merge branch 'feat/auth' |\ | * 8e0a6d9 (feat/auth) test: cover session edge cases | * cb2679f feat(auth): session middleware |/ * c0321ac docs: project README and contributor guide * d079bc9 feat(api): public router skeleton * 80328cd Initial scaffold -
chip-rendering-showcasehistory6-commit history with every branch-tip-chip variant visible at once (HEAD, local, slashy-local, two remotes, tag)
10 contracts
- main is checked out
- main has 6 commits
- develop branch exists at commit 2
- feat/widgets branch exists at commit 4
- origin/main exists at commit 5
- upstream/main exists at commit 3
- tag v0.1.0 exists at commit 1
- main is 1 commit ahead of origin/main
- main tracks origin/main
- worktree is clean
commit graph · 6 lines
* 7476241 (HEAD -> main) feat: widget tests * 0ca3242 (origin/main) feat: widget interactions * 7f6d04d (feat/widgets) feat: add widget module * c4e9179 (upstream/main) refactor: extract helpers * af22682 (develop) feat: scaffold core module * 2cbc857 (tag: v0.1.0) chore: initial commit -
shallow-clonehistoryshallow repo with only 3 of 10 commits reachable from HEAD
4 contracts
- main is checked out
- repo is shallow (git rev-parse --is-shallow-repository = true)
- main has 10 total commits in object store
- only 4 commits are reachable from HEAD (depth boundary inclusive)
commit graph · 4 lines
* e5dcc92 (HEAD -> main) chore: release v1.0.0 * c6d192f docs: update readme * 5059beb test: add test suite * 8d9bff2 (grafted) feat: add auth -
large-repohistory115 commits across 3 branches with tags — for pagination and performance testing
6 contracts
- main is checked out
- main has 80 commits
- feat/large-feature exists with 25 commits ahead of its fork point
- develop exists with 10 commits ahead of its fork point
- tags v0.1.0, v0.5.0, v1.0.0 exist
- total commit count across all branches is 115
commit graph · 117 lines
* b1c0890 (HEAD -> main, tag: v1.0.0) ci: implement module 79 * 0a045ef perf: implement module 78 * 65cbaf4 test: implement module 77 * 710e670 refactor: implement module 76 * fe8e254 docs: implement module 75 * 7190ec9 chore: implement module 74 * e206fee fix: implement module 73 * 35f598f feat: implement module 72 * 436f9bc ci: implement module 71 * f4c3f31 perf: implement module 70 * 27f4cea test: implement module 69 * 0af78ce refactor: implement module 68 * 11dfb38 docs: implement module 67 * a7310db chore: implement module 66 * ea5d4a7 fix: implement module 65 * 14ee0bd feat: implement module 64 * 6eca227 ci: implement module 63 * 56748de perf: implement module 62 * 3da726d test: implement module 61 * 1c5c8fa refactor: implement module 60 | * 989beb1 (develop) feat: develop iteration 10 | * 5bad990 feat: develop iteration 9 | * 5736a01 feat: develop iteration 8 | * e24278a feat: develop iteration 7 | * 4372311 feat: develop iteration 6 | * c06bc45 feat: develop iteration 5 | * 82afcfa feat: develop iteration 4 | * be22023 feat: develop iteration 3 | * bf49971 feat: develop iteration 2 | * 15c32b6 feat: develop iteration 1 |/ * 12af7f3 (tag: v0.5.0) docs: implement module 59 * 89d507e chore: implement module 58 * 08770c7 fix: implement module 57 * 077215c feat: implement module 56 * bef04c9 ci: implement module 55 * 4209dfd perf: implement module 54 * 1302551 test: implement module 53 * 7db0e61 refactor: implement module 52 * 67fc474 docs: implement module 51 * cfc9e79 chore: implement module 50 * 07a9dee fix: implement module 49 * f8b9d89 feat: implement module 48 * 5b72539 ci: implement module 47 * bf0572b perf: implement module 46 * d385530 test: implement module 45 * 271ca4d refactor: implement module 44 * 4ec6208 docs: implement module 43 * 81ebee3 chore: implement module 42 * e635343 fix: implement module 41 * 9334e2e feat: implement module 40 | * ef7c08d (feat/large-feature) feat: large-feature step 25 | * 3887a6f feat: large-feature step 24 | * 96a6efd feat: large-feature step 23 | * ab42f78 feat: large-feature step 22 | * 2effada feat: large-feature step 21 | * 6f41315 feat: large-feature step 20 | * d44eadf feat: large-feature step 19 | * 4a31dd7 feat: large-feature step 18 | * 9464e9e feat: large-feature step 17 | * 72e8580 feat: large-feature step 16 | * 893b047 feat: large-feature step 15 | * 1443724 feat: large-feature step 14 | * 39f4d4d feat: large-feature step 13 | * ad4cb6b feat: large-feature step 12 | * 9ebefc1 feat: large-feature step 11 | * db1b9fd feat: large-feature step 10 | * 6b2c4a5 feat: large-feature step 9 | * 578b519 feat: large-feature step 8 | * ce39f33 feat: large-feature step 7 | * 55c6a20 feat: large-feature step 6 | * 5309d8f feat: large-feature step 5 | * e1aa4b4 feat: large-feature step 4 | * 55d72de feat: large-feature step 3 | * 6e48154 feat: large-feature step 2 | * 2e10cea feat: large-feature step 1 |/ * 6b01f40 ci: implement module 39 * e3652b4 perf: implement module 38 * 3e99867 test: implement module 37 * aacd176 refactor: implement module 36 * 02dd835 docs: implement module 35 * e501176 chore: implement module 34 * 925d604 fix: implement module 33 * 263311b feat: implement module 32 * e3c596c ci: implement module 31 * e8d31aa perf: implement module 30 * 76101c2 test: implement module 29 * 5e2b2fa refactor: implement module 28 * 66b050f docs: implement module 27 * 6a0a86d chore: implement module 26 * c5001c3 fix: implement module 25 * bd2f59a feat: implement module 24 * 1bdf060 ci: implement module 23 * 8c97a7b perf: implement module 22 * fdc5804 test: implement module 21 * 1b7985c refactor: implement module 20 * 4b36a8e (tag: v0.1.0) docs: implement module 19 * c12dcec chore: implement module 18 * 5253217 fix: implement module 17 * 08bfd34 feat: implement module 16 * 8457df2 ci: implement module 15 * 0ecda09 perf: implement module 14 * 344f85b test: implement module 13 * 496ee34 refactor: implement module 12 * 72566f5 docs: implement module 11 * da6326c chore: implement module 10 * 789d452 fix: implement module 9 * 724ee95 feat: implement module 8 * c56f9a1 ci: implement module 7 * 1a435dc perf: implement module 6 * 29a2395 test: implement module 5 * 79ec158 refactor: implement module 4 * 1e49b44 docs: implement module 3 * cf4ca59 chore: implement module 2 * 0835472 fix: implement module 1 * 2fdb479 feat: implement module 0 -
stashed-changesstashclean worktree on main + 3 stashes, each touching a different file
4 contracts
- main has 2 commits
- worktree is clean
- git stash list reports 3 entries
- each stash touches a different file
commit graph · 7 lines
*-. 79423b5 (refs/stash) On main: WIP: experiment-c |\ \ | | * 69a2165 untracked files on main: 0e3655b chore: baseline content for stashing | * ec8f6a3 index on main: 0e3655b chore: baseline content for stashing |/ * 0e3655b (HEAD -> main) chore: baseline content for stashing * 257b4b9 chore: initial scaffold -
stash-with-untrackedstashone stash containing both modified tracked + untracked new files
4 contracts
- main has 2 commits
- worktree is clean
- git stash list reports 1 entry
- the stash includes both modified tracked and untracked new files
commit graph · 7 lines
*-. 5b6e7cc (refs/stash) On main: WIP: feature v2 + new-feature scaffolding |\ \ | | * b27d53a untracked files on main: 44f2eaf feat: baseline feature | * 8c19173 index on main: 44f2eaf feat: baseline feature |/ * 44f2eaf (HEAD -> main) feat: baseline feature * c3cfc31 chore: initial scaffold -
single-staged-fileworktreeone baseline commit + a single staged README
3 contracts
- main has 1 commit
- exactly 1 staged file (README.md)
- no unstaged or untracked files
commit graph · 1 line
* bdc267e (HEAD -> main) chore: initial commit -
partial-stageworktree2 staged + 2 modified-unstaged + 1 untracked — the "mixed worktree" shape
4 contracts
- main has 2 commits
- exactly 2 staged files
- exactly 2 modified-but-unstaged files
- exactly 1 untracked file
commit graph · 2 lines
* 0ab8fc8 (HEAD -> main) chore: baseline content * ff79513 chore: initial commit -
monorepo-multi-packageworktreeworkspaces monorepo with 3 packages: app (clean), lib (staged), cli (unstaged)
5 contracts
- main has 3 commits
- root package.json declares packages/* workspaces
- packages/app is clean (no staged or unstaged changes)
- packages/lib has staged changes
- packages/cli has unstaged changes
commit graph · 3 lines
* 821231a (HEAD -> main) feat(lib,cli): scaffold lib + cli packages * 698a421 feat(app): scaffold app package * 5bf487d chore: scaffold workspace root -
dirty-many-filesworktree12 staged + 6 unstaged + 3 untracked across 3 top-level dirs
5 contracts
- main has 2 commits
- worktree has 12 staged files
- worktree has 6 unstaged files
- worktree has 3 untracked files
- changes span src/, tests/, and docs/
commit graph · 2 lines
* b963a11 (HEAD -> main) chore: baseline app scaffold * 15d9042 chore: initial commit -
multiple-worktreesworktreeprimary worktree on main + 3 linked worktrees on feature/hotfix branches
5 contracts
- main is checked out in the primary worktree
- 3 linked worktrees exist
- feat/alpha has 1 commit ahead of main
- feat/beta has 2 commits ahead of main
- hotfix/urgent has 1 commit ahead of main
commit graph · 7 lines
* c4f2fe0 (hotfix/urgent) fix: critical hotfix | * 9c01773 (feat/beta) feat: beta part 2 | * afd85cf feat: beta part 1 |/ | * e586e91 (feat/alpha) feat: alpha feature |/ * f53cf2e (HEAD -> main) chore: initial scaffold -
locked-worktreeworktreeprimary worktree on main + 1 linked worktree locked with a reason
4 contracts
- 1 linked worktree exists
- the linked worktree is locked
- git worktree list --porcelain shows locked with a reason
- .git/worktrees/ has a locked file for the linked worktree
commit graph · 1 line
* c949dcc (HEAD -> main, hotfix/reserved) chore: initial scaffold -
submodule-with-historysubmoduleparent with 4 commits + vendor/lib submodule pinned at its 4-commit HEAD
6 contracts
- parent main has 4 commits
- main is checked out
- .gitmodules registers vendor/lib with branch = main
- vendor/lib is a clean submodule (pin matches HEAD)
- vendor/lib has 4 commits of its own
- parent worktree is clean
commit graph · 4 lines
* 8554d0b (HEAD -> main) feat: integrate vendor/lib into entry point * 1660bc7 chore: add vendor/lib submodule * 9326672 feat: app shell * 5f49d93 chore: initial scaffold -
out-of-date-submodulesubmoduleparent pinned to an older submodule SHA while the submodule has moved ahead
4 contracts
- parent main has 2 commits
- .gitmodules registers vendor/lib
- git submodule status shows + for vendor/lib
- vendor/lib HEAD is 1 commit ahead of the parent pin
commit graph · 2 lines
* c4d8ca4 (HEAD -> main) chore: add vendor/lib submodule * c428bd9 chore: initial scaffold -
git-lfs-pointerworktreerepo with a Git LFS pointer file committed for a binary asset (no lfs binary required)
5 contracts
- main is checked out
- main has 2 commits
- .gitattributes marks *.bin as LFS-tracked (filter=lfs diff=lfs merge=lfs -text)
- assets/blob.bin contains a canonical LFS pointer (version + oid sha256 + size)
- worktree is clean
commit graph · 2 lines
* b7b3122 (HEAD -> main) feat: add lfs-tracked binary asset * 7520170 chore: initial -
crlf-normalizationworktreerepo with .gitattributes enforcing LF line endings on all text files (text=auto eol=lf)
5 contracts
- main is checked out
- main has 2 commits
- .gitattributes contains "* text=auto eol=lf"
- src/lf-only.txt is committed with LF-only line endings
- worktree is clean
commit graph · 2 lines
* 9afdcd6 (HEAD -> main) chore: enforce LF line endings via .gitattributes * 7520170 chore: initial -
case-collisionworktreerepo whose history holds src/File.ts and src/file.ts — a case-only path collision invisible on case-insensitive filesystems
6 contracts
- main is checked out
- main has 2 commits
- HEAD tree contains src/File.ts (PascalCase variant)
- HEAD tree contains src/file.ts (lowercase variant)
- both case variants are absent from the working tree
- core.ignoreCase is false
commit graph · 2 lines
* ad7c59b (HEAD -> main) feat: add case-colliding sources * 7520170 chore: initial -
installed-hooksworktreerepo with pre-commit and commit-msg hooks installed and marked executable
5 contracts
- main is checked out
- main has 2 commits
- .git/hooks/pre-commit exists and is executable
- .git/hooks/commit-msg exists and is executable
- worktree is clean
commit graph · 2 lines
* 39669d4 (HEAD -> main) feat: add source * 7520170 chore: initial -
commits-with-noteshistorytwo commits annotated with git notes; first commit also carries a note in a second namespace (refs/notes/ci)
5 contracts
- main is checked out
- main has 2 commits
- HEAD~1 has a note in refs/notes/commits containing "Reviewed-by: Alice"
- HEAD~1 has a note in refs/notes/ci containing "CI: passed"
- HEAD has a note in refs/notes/commits containing "Reviewed-by: Bob" and "Coverage: 92%"
commit graph · 6 lines
* c8df691 (HEAD -> main) fix: widget alignment * f42f25b feat: initial widget * 465151c Notes added by 'git notes append' * fbc9631 Notes added by 'git notes add' * 3ce2336 Notes added by 'git notes add' * 552cc08 Notes added by 'git notes add' -
mixed-tagshistorylightweight tag (v0.1.0), annotated tag (v1.0.0), and a tag pointing at a tree object (tree-snapshot)
6 contracts
- main is checked out
- main has 3 commits
- v0.1.0 is a lightweight tag pointing at HEAD~2 (git cat-file -t → commit)
- v1.0.0 is an annotated tag object pointing at HEAD (git cat-file -t → tag)
- tree-snapshot is a lightweight tag pointing at a tree object (git cat-file -t → tree)
- worktree is clean
commit graph · 3 lines
* bbd015e (HEAD -> main, tag: v1.0.0) feat: stable release * f207e93 feat: v0.1.0 content * 7520170 (tag: v0.1.0) chore: initial
No scenarios match the current filters.
Tips
- Kind chips are mutually exclusive. Click “All” to clear.
- Tag chips are multi-select with AND semantics — click two tags and you get only scenarios that carry both.
- Search matches against name, summary, and contract lines.
- Commit graph expands the captured
git log --graphfor that scenario — fork lines, merge tips, and decorations included. - Copy buttons put either
spinUpScenario('name')ornpx git-scenarios create nameon your clipboard. - URL hash is honored on load:
?kind=operation&tag=conflictwould arrive pre-filtered. - Scenario name links to that scenario’s dedicated permalink page (e.g.
/scenarios/mid-merge-conflict), which includes the full description, contracts, copy-paste snippets, and the captured git graph.
See also
- Playground — interactive commit-graph view for every scenario, deep-linkable per graph
- Scenarios overview — flat reference of all 46 scenarios grouped by kind
- CLI Reference — same filter semantics as
git-scenarios list --kind ... --tag ... --json - Custom scenarios — register your own and they’ll appear in the registry too (though not on this site, since the data is built from the package’s source)
- Each scenario also has its own permalink at
/scenarios/<name>— shareable links with full description and code snippets