Development record
Consent gates judge /dev/null a terminal: term.IsTerminal is a character-device test, so stdin redirected from /dev/null (and a closed fd 0, which the Go runtime reopens on /dev/null) reads as a person at a terminal. The tool-install question is printed to stderr, EOF reads as no, and the decline says 'answered no at the terminal' instead of 'no terminal to ask at'; the itd-131 identity offer asks the same way, and the provider-key reader in ahoy_connect.go hand-rolls the same check and refuses /dev/null as 'stdin is a terminal'.
issueresolvedminoriss-2609300905174086
Consent gates judge /dev/null a terminal: term.IsTerminal is a character-device test, so stdin redirected from /dev/null (and a closed fd 0, which the Go runtime reopens on /dev/null) reads as a person at a terminal. The tool-install question is printed to stderr, EOF reads as no, and the decline says 'answered no at the terminal' instead of 'no terminal to ask at'; the itd-131 identity offer asks the same way, and the provider-key reader in ahoy_connect.go hand-rolls the same check and refuses /dev/null as 'stdin is a terminal'.
Grounds
- pursued: stdin from /dev/null or a pipe reads as no terminal, so the tool-install and itd-131 gates decline as 'no terminal to ask at' and never print a question; a pty still reads as a terminal. Shown wrong if TestIsTerminalRefusesWhatIsNotATerminal, TestIsTerminalAnswersTrueOnAPty or TestConsentGatesTreatTheNullDeviceAsNoTerminal fails, or a real terminal stops being asked.
Frontmatter
| id | iss-2609300905174086 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2609300905174086-consent-gates-judge-dev-null-a-terminal.md
open on GitHub ↗ · commit history ↗
mentions1
- itd-131The managed-repo identity gate: the human is the author of record on every commit, before the first one