Conversation
The fork's tool and binary are snadcat from here on: cmd/snadcat, the root command, the version banner, the root package, and every user-visible string that names the tool or hints a command to run. The bash CLI under cli/ keeps its name. Deliberately unchanged: the on-disk and environment surface both tools produce — .sandcat/, ~/.config/sandcat/, SANDCAT_* variables, sandcat-cache-* volumes, the "# Sandcat" gitignore markers, and the shared templates. The parity harness diffs exactly that surface against the bash oracle, so it is renamed as its own step once the bash tree is gone, ideally through the manifest so existing projects migrate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YKma722KMnAX3LcDLUYDQ5
The two tools should coexist on one machine, and snadcat will diverge (podman-only), so the surface is its own: .snadcat/, ~/.config/snadcat/, SNADCAT_* variables, snadcat-cache-* volumes and their label, and the "# Snadcat" gitignore block. Every user-visible path in help and the init summary follows. What stays "sandcat" is internal to the generated tree and shared with the bash templates (.devcontainer/sandcat/, sandcat.env, in-container script names) until the bash tree goes. The complexity lands in the tests rather than the tool: parity tests normalize snadcat's names back to sandcat's before comparing, and the harness renames paths and rewrites contents the same way. That is sound rather than heuristic because the shared templates never contain the string "snadcat", so every occurrence in Go output is the tool's own. Fixtures that seed a project dir now seed both, one per tool. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YKma722KMnAX3LcDLUYDQ5
JEHoctor
commented
Sep 22, 2026
The build-output comment still said cmd/sandcat. The local-settings entry is upstream's, there because this repo is itself a project someone may sandbox — so snadcat's path is added rather than substituted: both tools exist in the tree and either can be run here. The sandcat line goes when the bash CLI does. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YKma722KMnAX3LcDLUYDQ5
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 Go tool becomes
snadcat, in two commits:cmd/snadcat, root command, banner, root package, user-visible strings..snadcat/,~/.config/snadcat/,SNADCAT_*(all seven variables),snadcat-cache-*volumes + label,# Snadcatgitignore block, and every path named in help/summary output.Kept
sandcat, deliberately: things internal to the generated tree and shared with the bash templates —.devcontainer/sandcat/,sandcat.env, in-container script names, the-sandboxproject-name suffix, upstream'sghcr.io/virtuslab/sandcat-mitmproxy-*images. Those follow when the bash tree is removed. Coexistence is per machine, not per project: both tools write.devcontainer/and derive the same compose project name.Complexity pushed into the tests, not the tool.
internal/testutil.Normalizemaps snadcat's names back to sandcat's before each bash comparison;normalize_treeindifftest.shrenames paths and rewrites contents the same way. This is sound rather than heuristic: the shared templates never contain the stringsnadcat, so every occurrence in Go output provably came from the tool's own naming. Verified on a real run that the Go tree is renamed before normalization (.snadcat/,snadcat-cache-*,SNADCAT_MOUNT_GIT_READONLYhonoured).17/17, 33/33.
🤖 Generated with Claude Code
https://claude.ai/code/session_01YKma722KMnAX3LcDLUYDQ5