Skip to content

fix(cli): classify broken pipes as user aborts - #559

Draft
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/cli-command-failure-analysis-eb74
Draft

fix(cli): classify broken pipes as user aborts#559
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/cli-command-failure-analysis-eb74

Conversation

@cursor

@cursor cursor Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Summary

  • preserve Rich's closed-pipe handling while exposing a distinct CLI exception
  • classify closed output pipes as user aborts instead of command failures
  • preserve the existing exit status and add console/lifecycle regression coverage

The daily CLI failure export contained two current-version endpoints events failures that completed all API requests and then reported only status 1. Rich 14.2 converts BrokenPipeError to SystemExit(1), which made expected early pipe closure look like a CLI defect.

Verification

  • TOGETHER_TELEMETRY_DISABLED=1 uv run pytest tests/cli/test_command_telemetry.py tests/cli/test_console_theme.py -n 0 (24 passed)
  • ./scripts/lint
Open in Web View Automation 

Co-authored-by: Blaine Kasten <blainekasten@gmail.com>
@broly-code-security-scanner

broly-code-security-scanner Bot commented Sep 6, 2026

Copy link
Copy Markdown

Broly Security Scan

Warning

⚠️ Potential results — Broly is still completing analysis or verification. This comment will update automatically.
Files pending AI analysis: 4; findings pending verification: 1.

Warning

Summary

1 actionable finding(s) in this PR

  • 🔴 1 critical

All actionable items are in the table below.

Severity Scanner Issue Location Dismiss
🔴 CRITICAL SECRETS Hardcoded secret src/together/lib/cli/init.py:160 d1

Dismiss false positives

Important

Secrets cannot be dismissed with a checkbox. Broly decides whether a credential is real or a test fixture using AI, so overriding that verdict means adding evidence it did not have — reply with /broly dismiss KEY: your reason.
If the same fixture pattern keeps getting flagged, declare it once as redaction_skip_prefixes in .broly.yaml instead of dismissing it each time.

  • 🔑 d1 · 🔴 CRITICAL · src/together/lib/cli/__init__.py:160 · Hardcoded secret — reply /broly dismiss d1: your reason

Note

Re-scan this PR anytime with /broly scan — useful after /broly undismiss, or to refresh findings without a new push.

Broly — SAST (zai-org/GLM-5.3-Flash) · Secrets · SCA · IaC · GH Actions · Base Images · Supply Chain Threats · Exploit Chains · Adversarial Verification

We're continuously improving Broly's accuracy and finding quality — your feedback is valuable. False positives, missed findings, bugs, and feature requests all welcome.

Ask in #security-engineering   Powered by Together AI

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.

3 participants