open-code-review/cmd/opencodereview
超級の新人 66d71b23eb
fix(cmd): stream review progress to stderr for json and sarif (#929)
`--audience human --format json` ran completely silent: newQuietHandle
replaced stdout with io.Discard whenever the format was machine-readable,
without ever looking at the audience, so `--audience human` was ignored and
the user watched a blank terminal until the document appeared at the end.
`--format text` streamed progress but is not stable to parse, leaving no way
to have both live progress and machine-readable output.

Progress is now redirected to stderr instead of discarded when a human asked
to watch a machine-readable run. This is safe because every result document
(json, sarif, text) is encoded straight to os.Stdout and never travels
through stdout.Writer(), so stdout remains a single parseable document while
stderr carries the live [ocr] lines. Discarding was never necessary to
protect stdout; the two streams were already separate.

The three cases are now explicit: audience=agent discards progress regardless
of format because the caller asked for none, a machine-readable format with a
human audience redirects to stderr, and everything else leaves progress on
stdout.

Progress lines keep their existing text form. Emitting them as structured
NDJSON events, which the report also asks for, would mean defining an event
schema and reworking every call site; it is left for separate work.

Tests cover where progress lands for each format/audience pair, that stdout
stays empty and parseable while stderr receives the lines, and an end-to-end
review asserting stdout unmarshals as JSON with no [ocr] line while stderr
shows progress. Reverting the fix fails exactly the human-audience
assertions and leaves the agent ones passing.

The flag help and the CLI reference in all four locales are updated, along
with the tip that implied `--format json` means a quiet terminal.

Fixes #928
2026-08-19 19:05:53 +08:00
..
apply_provider_field_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
arg_errors.go fix(cmd): report expected arguments when positional count is wrong (#892) 2026-08-13 20:44:04 +08:00
arg_errors_test.go fix(cmd): report expected arguments when positional count is wrong (#892) 2026-08-13 20:44:04 +08:00
background_file.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
background_file_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
budget_output_test.go Feat/llm retry report:SDK retry-attempt observability for review (#785) (#790) 2026-08-13 14:31:18 +08:00
compat_test.go fix(resume): preserve checkpoints after Ctrl-C (#902) 2026-08-14 17:42:24 +08:00
completion.go fix(cmd): report expected arguments when positional count is wrong (#892) 2026-08-13 20:44:04 +08:00
config_cmd.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
config_cmd_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
config_dispatch_test.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
config_runset_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
config_unset_error_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
delegate_cmd.go fix(cmd): report expected arguments when positional count is wrong (#892) 2026-08-13 20:44:04 +08:00
delegate_exec_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
delegate_helpers_test.go feat(cmd): add SARIF output format (#820) 2026-08-12 18:03:34 +08:00
emit_run_result_test.go Feat/llm retry report:SDK retry-attempt observability for review (#785) (#790) 2026-08-13 14:31:18 +08:00
flag_suggest.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
flag_suggest_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
flags_test.go feat(config): make per-file token limit configurable (#716) 2026-08-07 11:23:38 +08:00
git.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
git_test.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
llm_cmd.go Feat/llm retry report:SDK retry-attempt observability for review (#785) (#790) 2026-08-13 14:31:18 +08:00
main.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
manual_e2e_retry_test.go chore: remove Chinese doc references from retry test comments (#886) 2026-08-13 15:41:28 +08:00
misc_helpers_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
output.go Feat/llm retry report:SDK retry-attempt observability for review (#785) (#790) 2026-08-13 14:31:18 +08:00
output_helpers_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
output_manifest_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
output_test.go chore(ci): fail CI when unapproved non-English text appears in source files (#876) 2026-08-13 14:43:55 +08:00
parent_cmd_test.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
procattr_unix.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
procattr_windows.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
progress_stream_e2e_test.go fix(cmd): stream review progress to stderr for json and sarif (#929) 2026-08-19 19:05:53 +08:00
provider_cmd.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
provider_cmd_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
provider_config_apply_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
provider_tui.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
provider_tui_cpinput_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
provider_tui_customform_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
provider_tui_deleteconfirm_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
provider_tui_editsave_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
provider_tui_funcs_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
provider_tui_manualenter_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
provider_tui_modeltui_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
provider_tui_persist_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
provider_tui_rollback_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
provider_tui_savefail_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
provider_tui_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
retry_fake_llm_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
retry_report_e2e_test.go chore: remove Chinese doc references from retry test comments (#886) 2026-08-13 15:41:28 +08:00
retry_report_render_test.go chore: remove Chinese doc references from retry test comments (#886) 2026-08-13 15:41:28 +08:00
review_cmd.go fix(resume): preserve checkpoints after Ctrl-C (#902) 2026-08-14 17:42:24 +08:00
review_cmd_test.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
review_helpers_test.go fix(resume): preserve checkpoints after Ctrl-C (#902) 2026-08-14 17:42:24 +08:00
review_mcp_more_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
review_resume_more_test.go feat(resume): add trusted resume validation and transition lineage (#786) (#845) 2026-08-14 11:31:40 +08:00
root.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
rules_check_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
rules_cmd.go fix(cmd): report expected arguments when positional count is wrong (#892) 2026-08-13 20:44:04 +08:00
sarif.go feat(cmd): add SARIF output format (#820) 2026-08-12 18:03:34 +08:00
sarif_test.go Feat/llm retry report:SDK retry-attempt observability for review (#785) (#790) 2026-08-13 14:31:18 +08:00
scan_budget_json_test.go feat(scan): report token budget stop in JSON summary.budget_exceeded (#791) 2026-08-16 19:21:18 +08:00
scan_cmd.go Feat/llm retry report:SDK retry-attempt observability for review (#785) (#790) 2026-08-13 14:31:18 +08:00
scan_cmd_test.go feat(config): make per-file token limit configurable (#716) 2026-08-07 11:23:38 +08:00
scan_helpers_test.go fix(cli): stop preview from creating a review session (#784) 2026-08-08 20:55:54 +08:00
scan_resume_more_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
session_cmd.go feat(resume): add trusted resume validation and transition lineage (#786) (#845) 2026-08-14 11:31:40 +08:00
session_cmd_test.go chore(ci): fail CI when unapproved non-English text appears in source files (#876) 2026-08-13 14:43:55 +08:00
session_complete_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
session_display_more_test.go test: raise statement coverage to 90% and enforce it in CI (#747) 2026-08-06 12:55:44 +08:00
shared.go fix(cmd): stream review progress to stderr for json and sarif (#929) 2026-08-19 19:05:53 +08:00
shared_flags.go fix(cmd): stream review progress to stderr for json and sarif (#929) 2026-08-19 19:05:53 +08:00
shared_llmruntime_test.go feat(config): resolve api_key/auth_token from a command (#236) (#605) 2026-08-17 14:40:37 +08:00
shared_test.go fix(cmd): stream review progress to stderr for json and sarif (#929) 2026-08-19 19:05:53 +08:00
shell_unix.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
shell_windows.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
smallfiles_test.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
version.go fix(cli): reject unexpected positional arguments (#749) 2026-08-06 21:41:07 +08:00
viewer_cmd.go chore: add SPDX license headers and automated verification (#740) 2026-08-05 21:26:27 +08:00
zero_args_test.go fix(cli): reject unexpected positional arguments (#749) 2026-08-06 21:41:07 +08:00