feat(aterm)!: make the launch sound opt-in #1425

Merged
coilyco-ops merged 1 commit from aos/claude/zc49-sound-optin into main 2026-08-29 21:06:05 +00:00
Owner

Kai wants the sound off. --silent and ATERM_SILENT become --sound
and ATERM_SOUND, and a window is quiet unless one of them asks.

Why a default rather than an env var

ATERM_SILENT=1 in a shell profile would have covered a typed aterm
and nothing else. The generated .app wrapper harvests exactly PATH
from a login shell (bundle_contents.go), and a Finder launch carries
none of the caller's environment, so every Dock and Spotlight launch would
have kept chiming. Two ways in, and only a default reaches both.

Not a removal

The samples still ship, just aterm-sounds still renders them, and the
timbre still travels on the session card, so --sound is a full restore
rather than a rebuild. The contract test still asserts every timbre has a
sample. What changed is which way the switch points.

One test refactor this forced

soundWanted took stdout and the opt-in together, and the suite runs off
a terminal, so the positive case was unassertable through it: the old test
read as proving --silent won when a pipe would have returned false
anyway. The opt-in splits into soundAsked, which is testable anywhere,
and soundWanted stays the terminal gate over it. Both are now covered in
both directions rather than one of them passing for the wrong reason.

Verification

  • go test ./... green, just aterm-contract green.
  • pre-commit run --all-files green.
  • A real --dry-run --json: the default plan carries no --sound, and
    --sound puts it in the session argv.

Co-authored-by: Kai Siren coilysiren@gmail.com
Co-authored-by: Claude noreply@anthropic.com
Agent-Role: frontend

Kai wants the sound off. `--silent` and `ATERM_SILENT` become `--sound` and `ATERM_SOUND`, and a window is quiet unless one of them asks. ## Why a default rather than an env var `ATERM_SILENT=1` in a shell profile would have covered a typed `aterm` and nothing else. The generated `.app` wrapper harvests exactly `PATH` from a login shell (`bundle_contents.go`), and a Finder launch carries none of the caller's environment, so every Dock and Spotlight launch would have kept chiming. Two ways in, and only a default reaches both. ## Not a removal The samples still ship, `just aterm-sounds` still renders them, and the timbre still travels on the session card, so `--sound` is a full restore rather than a rebuild. The contract test still asserts every timbre has a sample. What changed is which way the switch points. ## One test refactor this forced `soundWanted` took stdout and the opt-in together, and the suite runs off a terminal, so the positive case was unassertable through it: the old test read as proving `--silent` won when a pipe would have returned false anyway. The opt-in splits into `soundAsked`, which is testable anywhere, and `soundWanted` stays the terminal gate over it. Both are now covered in both directions rather than one of them passing for the wrong reason. ## Verification - `go test ./...` green, `just aterm-contract` green. - `pre-commit run --all-files` green. - A real `--dry-run --json`: the default plan carries no `--sound`, and `--sound` puts it in the session argv. Co-authored-by: Kai Siren <coilysiren@gmail.com> Co-authored-by: Claude <noreply@anthropic.com> Agent-Role: frontend
feat(aterm)!: make the launch sound opt-in
All checks were successful
ci / aos-cli-tests (pull_request) Successful in 31s
ci / gate (pull_request) Successful in 53s
8e419f71d2
Kai wants the sound off. `--silent` and `ATERM_SILENT` become `--sound`
and `ATERM_SOUND`, and a window is quiet unless one of them asks.

## Why a default rather than an env var

`ATERM_SILENT=1` in a shell profile would have covered a typed `aterm`
and nothing else. The generated `.app` wrapper harvests exactly `PATH`
from a login shell (`bundle_contents.go`), and a Finder launch carries
none of the caller's environment, so every Dock and Spotlight launch would
have kept chiming. Two ways in, and only a default reaches both.

## Not a removal

The samples still ship, `just aterm-sounds` still renders them, and the
timbre still travels on the session card, so `--sound` is a full restore
rather than a rebuild. The contract test still asserts every timbre has a
sample. What changed is which way the switch points.

## One test refactor this forced

`soundWanted` took stdout and the opt-in together, and the suite runs off
a terminal, so the positive case was unassertable through it: the old test
read as proving `--silent` won when a pipe would have returned false
anyway. The opt-in splits into `soundAsked`, which is testable anywhere,
and `soundWanted` stays the terminal gate over it. Both are now covered in
both directions rather than one of them passing for the wrong reason.

## Verification

- `go test ./...` green, `just aterm-contract` green.
- `pre-commit run --all-files` green.
- A real `--dry-run --json`: the default plan carries no `--sound`, and
  `--sound` puts it in the session argv.

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Agent-Role: frontend
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agentic-os!1425
No description provided.