Harmless reads
gstack’s docs-sync tests stop failing harmless joined reads
wc -l <SKILL.md>cat a; echo ----; cat bgstack's docs-sync tests no longer fail a run when Claude joins or pipes a harmless read. A line count on a skill file, or two reads split by a semicolon, used to turn the gate red.
One rule
One shared rule decides whether a command line only reads
; && ||One shared rule now decides whether a command line only reads: common tools like cat, grep and head, joined on one line. Redirects, substitutions, variables and writes are refused, and on Windows it accepts nothing.
Stricter paths
Every path must stay inside the fixture home
pwd · ls · cat · stat.claude.jsonThe test also got stricter: every path must stay inside the fixture's home, and Claude's config file holding the API key stays unreadable. Zero of about a thousand replayed commands are newly rejected.
Your fixtures
Writing a fixture? Opt in when it isn’t about which reads happen
CHANGELOG.mdgstack release notes, “If you…”Writing a gstack fixture? Opt in unless its contract is about which reads happen; those fixtures keep their narrow lists. In your runs, does Claude Code chain reads on one line, or one command per call?















