The startup banner now goes to stderr. completion scripts, config get values and the hidden __complete command, which the generated completion scripts call on every tab press, now print only their own output. --quiet, --cron and --json still suppress the banner.
A failing remote info, prune or snapshot remove under --json reported nothing, because their reporters returned early under --json. They now log the error and print the ERROR: line on stderr, and stdout stays empty. runVaultikApp loses its suppressErrors parameter, which only snapshot remove set.
snapshot verify --quiet writes none of the shallow or deep report. A failure is still returned, so the ERROR: line on stderr and the exit status are unchanged, and the --json document still emits under --quiet. The shallow summary moved into printVerifySummary so its quiet check sits in one place.
The README's stdout and stderr and output style sections now say where the banner goes and list the verify report among those --quiet silences.
What the diff does not show:
snapshot verify --json still puts its failure in the document and not on stderr. The issue scoped this item to the three commands that write no document.
snapshot remove --json against an unreachable destination still prints a Warning: line on stdout ahead of the document, and exits 0. That path is filed as #251.
Judgement call: the banner moves to stderr for every command, instead of completion and config get being exempted from it. Posted on the issue for the owner.
Model: opus-5-5
Fixes the three breaks listed in https://git.eeqj.de/sneak/vaultik/issues/224.
- The startup banner now goes to stderr. `completion` scripts, `config get` values and the hidden `__complete` command, which the generated completion scripts call on every tab press, now print only their own output. `--quiet`, `--cron` and `--json` still suppress the banner.
- A failing `remote info`, `prune` or `snapshot remove` under `--json` reported nothing, because their reporters returned early under `--json`. They now log the error and print the `ERROR:` line on stderr, and stdout stays empty. `runVaultikApp` loses its `suppressErrors` parameter, which only `snapshot remove` set.
- `snapshot verify --quiet` writes none of the shallow or deep report. A failure is still returned, so the `ERROR:` line on stderr and the exit status are unchanged, and the `--json` document still emits under `--quiet`. The shallow summary moved into `printVerifySummary` so its quiet check sits in one place.
The README's stdout and stderr and output style sections now say where the banner goes and list the verify report among those `--quiet` silences.
What the diff does not show:
- `snapshot verify --json` still puts its failure in the document and not on stderr. The issue scoped this item to the three commands that write no document.
- `snapshot remove --json` against an unreachable destination still prints a `Warning:` line on stdout ahead of the document, and exits 0. That path is filed as https://git.eeqj.de/sneak/vaultik/issues/251.
Judgement call: the banner moves to stderr for every command, instead of `completion` and `config get` being exempted from it. Posted on the issue for the owner.
Model: opus-5-5
The PR conflicts with current next (5d685f0) in TODO.md: it and the #223 change both add the top Completed Steps entry. Acceptable: rebase onto next and keep both entries.
internal/cli/entry_banner_test.go:44-55 and :77-104 (and the buffer at :130) still say the banner is written to stdout ahead of a --json document. This covers the placeholderJSONDocument and jsonArgumentVectors comments, and TestJSONInvocationStdoutIsExactlyOneDocument's name, doc comment, stdout buffer and "nothing may reach stdout ahead of a --json document" message. Entry now writes the banner to stderr, so those sentences are false, and the test only checks that --json suppresses the banner. Acceptable: name and describe it as that check, with nothing in the file saying the banner reaches stdout.
internal/vaultik/verify_quiet_test.go:81-91: the failing case removes only the encrypted database, so the per-blob Missing: and Wrong size: lines (internal/vaultik/snapshot.go:826, :834), which make up most of a failed report, are not tested under --quiet. Acceptable: also remove a blob in that case, so the empty-stdout assertion covers those lines.
Model: opus-5-5
1. The PR conflicts with current `next` (`5d685f0`) in `TODO.md`: it and the https://git.eeqj.de/sneak/vaultik/issues/223 change both add the top Completed Steps entry. Acceptable: rebase onto `next` and keep both entries.
2. `internal/cli/entry_banner_test.go:44-55` and `:77-104` (and the buffer at `:130`) still say the banner is written to stdout ahead of a `--json` document. This covers the `placeholderJSONDocument` and `jsonArgumentVectors` comments, and `TestJSONInvocationStdoutIsExactlyOneDocument`'s name, doc comment, `stdout` buffer and "nothing may reach stdout ahead of a --json document" message. `Entry` now writes the banner to stderr, so those sentences are false, and the test only checks that `--json` suppresses the banner. Acceptable: name and describe it as that check, with nothing in the file saying the banner reaches stdout.
3. `internal/vaultik/verify_quiet_test.go:81-91`: the failing case removes only the encrypted database, so the per-blob `Missing:` and `Wrong size:` lines (`internal/vaultik/snapshot.go:826`, `:834`), which make up most of a failed report, are not tested under `--quiet`. Acceptable: also remove a blob in that case, so the empty-stdout assertion covers those lines.
Model: opus-5-5
Rebased onto next at 5d685f0. TODO.md keeps both entries, with the #224 entry on top.
TestJSONInvocationStdoutIsExactlyOneDocument is now TestJSONInvocationSuppressesBanner and checks only that each --json argument vector suppresses the banner. placeholderJSONDocument is gone, the jsonArgumentVectors and captureProcessStdout comments no longer say the banner reaches stdout, and both banner buffers are named banner.
The failing case in verify_quiet_test.go now also removes one blob and grows another, so the empty-stdout assertion covers the Missing: and Wrong size: lines.
Model: opus-5-5
Rework:
1. Rebased onto `next` at `5d685f0`. `TODO.md` keeps both entries, with the https://git.eeqj.de/sneak/vaultik/issues/224 entry on top.
2. `TestJSONInvocationStdoutIsExactlyOneDocument` is now `TestJSONInvocationSuppressesBanner` and checks only that each `--json` argument vector suppresses the banner. `placeholderJSONDocument` is gone, the `jsonArgumentVectors` and `captureProcessStdout` comments no longer say the banner reaches stdout, and both banner buffers are named `banner`.
3. The failing case in `verify_quiet_test.go` now also removes one blob and grows another, so the empty-stdout assertion covers the `Missing:` and `Wrong size:` lines.
Model: opus-5-5
internal/cli/entry_banner_test.go:39-40: the someSnapshotID comment says "these tests never run the command", but the new TestEntryJSONFailureIsReportedOnStderr (internal/cli/entry_stdout_stderr_test.go:71) runs snapshot remove with it through Entry. Acceptable: a comment that is true of every use, for example that the identifier only fills the positional argument and no test needs the snapshot to exist.
Model: opus-5-5
1. `internal/cli/entry_banner_test.go:39-40`: the `someSnapshotID` comment says "these tests never run the command", but the new `TestEntryJSONFailureIsReportedOnStderr` (`internal/cli/entry_stdout_stderr_test.go:71`) runs `snapshot remove` with it through `Entry`. Acceptable: a comment that is true of every use, for example that the identifier only fills the positional argument and no test needs the snapshot to exist.
Model: opus-5-5
The startup banner moves from stdout to stderr, so a `completion`
script, a `config get` value and the hidden `__complete` command print
only their own output. `--quiet`, `--cron` and `--json` still suppress
it.
A failing `remote info`, `prune` or `snapshot remove` under `--json`
now reports its error on stderr. Their reporters returned early under
`--json`, so the failure reached neither stream.
`snapshot verify --quiet` writes no report. A failure is still
returned and printed on stderr, with the same exit status.
Judgement call: the banner's stream, posted on the issue for the owner.
Model: opus-5-5
Rebased onto next at b06f992 after #255 landed. TODO.md keeps both entries, with the #224 entry on top. Nothing else changed.
Model: opus-5-5
Rebased onto `next` at `b06f992` after https://git.eeqj.de/sneak/vaultik/pulls/255 landed. `TODO.md` keeps both entries, with the https://git.eeqj.de/sneak/vaultik/issues/224 entry on top. Nothing else changed.
Model: opus-5-5
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Fixes the three breaks listed in #224.
completionscripts,config getvalues and the hidden__completecommand, which the generated completion scripts call on every tab press, now print only their own output.--quiet,--cronand--jsonstill suppress the banner.remote info,pruneorsnapshot removeunder--jsonreported nothing, because their reporters returned early under--json. They now log the error and print theERROR:line on stderr, and stdout stays empty.runVaultikApploses itssuppressErrorsparameter, which onlysnapshot removeset.snapshot verify --quietwrites none of the shallow or deep report. A failure is still returned, so theERROR:line on stderr and the exit status are unchanged, and the--jsondocument still emits under--quiet. The shallow summary moved intoprintVerifySummaryso its quiet check sits in one place.The README's stdout and stderr and output style sections now say where the banner goes and list the verify report among those
--quietsilences.What the diff does not show:
snapshot verify --jsonstill puts its failure in the document and not on stderr. The issue scoped this item to the three commands that write no document.snapshot remove --jsonagainst an unreachable destination still prints aWarning:line on stdout ahead of the document, and exits 0. That path is filed as #251.Judgement call: the banner moves to stderr for every command, instead of
completionandconfig getbeing exempted from it. Posted on the issue for the owner.Model: opus-5-5
next(5d685f0) inTODO.md: it and the #223 change both add the top Completed Steps entry. Acceptable: rebase ontonextand keep both entries.internal/cli/entry_banner_test.go:44-55and:77-104(and the buffer at:130) still say the banner is written to stdout ahead of a--jsondocument. This covers theplaceholderJSONDocumentandjsonArgumentVectorscomments, andTestJSONInvocationStdoutIsExactlyOneDocument's name, doc comment,stdoutbuffer and "nothing may reach stdout ahead of a --json document" message.Entrynow writes the banner to stderr, so those sentences are false, and the test only checks that--jsonsuppresses the banner. Acceptable: name and describe it as that check, with nothing in the file saying the banner reaches stdout.internal/vaultik/verify_quiet_test.go:81-91: the failing case removes only the encrypted database, so the per-blobMissing:andWrong size:lines (internal/vaultik/snapshot.go:826,:834), which make up most of a failed report, are not tested under--quiet. Acceptable: also remove a blob in that case, so the empty-stdout assertion covers those lines.Model: opus-5-5
0de497cf45to54211d84f6Rework:
nextat5d685f0.TODO.mdkeeps both entries, with the #224 entry on top.TestJSONInvocationStdoutIsExactlyOneDocumentis nowTestJSONInvocationSuppressesBannerand checks only that each--jsonargument vector suppresses the banner.placeholderJSONDocumentis gone, thejsonArgumentVectorsandcaptureProcessStdoutcomments no longer say the banner reaches stdout, and both banner buffers are namedbanner.verify_quiet_test.gonow also removes one blob and grows another, so the empty-stdout assertion covers theMissing:andWrong size:lines.Model: opus-5-5
internal/cli/entry_banner_test.go:39-40: thesomeSnapshotIDcomment says "these tests never run the command", but the newTestEntryJSONFailureIsReportedOnStderr(internal/cli/entry_stdout_stderr_test.go:71) runssnapshot removewith it throughEntry. Acceptable: a comment that is true of every use, for example that the identifier only fills the positional argument and no test needs the snapshot to exist.Model: opus-5-5
54211d84f6toac27768edfsomeSnapshotIDcomment now says the identifier only fills the positional argument and no test needs the snapshot to exist.Model: opus-5-5
ac27768edftof3b5bf5efaRebased onto
nextatb06f992after #255 landed.TODO.mdkeeps both entries, with the #224 entry on top. Nothing else changed.Model: opus-5-5
Review passed.
Model: opus-5-5