Skip to content

Release: v7.17.1 - #511

Merged
Data-Wise merged 2 commits into
mainfrom
dev
Aug 24, 2026
Merged

Release: v7.17.1#511
Data-Wise merged 2 commits into
mainfrom
dev

Conversation

@Data-Wise

Copy link
Copy Markdown
Owner

Summary

Patch release: fixes a critical tr-alias-shadowing bug where an interactive shell's tr alias silently hijacked every | tr pipeline in shipped lib/*.zsh code (107 sites, 34 files), corrupting output in commands like teach deploy --dry-run. Fixed via command tr at every call site (#509), release-cut in #510.

Commits

  • bc2b366bb fix: use command tr so a user alias cannot hijack shipped pipelines
  • 8955482d9 chore(release): v7.17.1

Test plan

  • PR chore(release): v7.17.1 #510 CI green (Full Test Suite, ZSH Plugin Tests, Extended Suite soak)
  • Changelog parity, manpage version sync, docs strict build all passed
  • CI green on this PR
  • Tag v7.17.1 + GitHub release after merge

Data-Wise and others added 2 commits August 23, 2026 22:47
…#509)

Dispatchers run in the user's INTERACTIVE shell, where aliases are live and
expand at parse time. A user alias on a coreutil silently hijacks any
pipeline using it.

Found live, not hypothetically. This machine has:

    tr='track-activity report'

so every `... | tr -d ' '` in lib/ ran `track-activity report -d ' '` and
its output landed in the variable instead of the count. Visible in
`teach deploy --dry-run` against a real course repo:

    Would deploy Monthly Terminal Report (2026-08):
    ================================== files:

where "675" belonged. The same alias also corrupted the uncommitted-file
count added in v7.17.0 - I found it because my own new line was garbled,
then traced it and discovered the pre-existing file_count line had the
identical bug.

101 pipeline sites across 34 files. All now use `command tr`, which
bypasses aliases and functions and is identical when no alias exists.

Verified in the affected repo:

    bare tr:     [Monthly Terminal Report (2026-08):\n===...]
    command tr:  [1]

    Note: 1 uncommitted file(s) are NOT included below.
    Would deploy 675 files:

tests/test-alias-shadowing.zsh guards it three ways: no bare `| tr` remains
in lib/*.zsh, `command tr` survives a planted hostile alias, and a NEGATIVE
control confirms the bare form really is hijacked - so if the environment
ever stops reproducing it, the test says so instead of going vacuously
green.

Not changed: `grep` is also aliased here, but to
`grep --color=auto --exclude-dir={...}`, which is behaviourally compatible.
Only `tr` was destructive.

Full suite 83 passed / 2 failed - both (e2e-em-dispatcher,
test-atlas-contract) reproduce on unmodified dev and are green in CI.

Co-authored-by: Test User <test@example.com>
Patch release for the alias-shadowing fix (#509).

A user alias on a coreutil could hijack shipped pipelines: dispatchers run
in the interactive shell where aliases expand at parse time, so on a machine
with tr='track-activity report' every '| tr -d' in lib/ ran that instead.
teach deploy --dry-run printed 'Would deploy Monthly Terminal Report
(2026-08):' where 'Would deploy 675 files:' belonged. 101 sites now use
'command tr'.

Both changelogs cut [7.17.1] with identical bodies; parity test green.
docs/index.md updated by hand again - release.sh still does not touch it
(both the What's New banner and the footer), which is worth folding into
the script.

Man-page guard 12/12, mkdocs --strict exit 0, no stale 7.17.0 refs outside
changelogs. Full suite 81 passed / 1 failed / 3 timeout - the failure and
timeouts are the known local-only set (e2e-em-dispatcher,
test-atlas-contract and friends), all green in CI.

Co-authored-by: Test User <test@example.com>
@Data-Wise
Data-Wise merged commit edebabc into main Aug 24, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant