docs(bugbot): add .cursor/BUGBOT.md project context#409
Merged
Conversation
Cursor Bugbot reviews this repo with zero project context today — no repo in the org has a BUGBOT.md. This repo draws the most findings of any (232), and the recurring classes here are dishonest outcome reporting and mishandled interrupts, not generic security nits. Writing the house rules down stops Bugbot re-deriving them and lets its one pass land on the hard findings. Encodes the invariants with the reason and a real reference each: honest outcome reporting via classifyPushOutcome (a Job exiting 0 with row failures is "completed_with_failures", not "succeeded"), the FROZEN exit code contract, visible feedback on every errInteractiveCancelled path — including that mapClientErr swallows it silently today — HTTP 426 as a hard stop never a warning, fail-closed cosign/SHA256 verification in install.sh, per-call timeouts, empty/nil guards at boundaries, the cross-repo pin + generated-artifact rules, and the STYLE.md output contract. Also records verified non-issues: .golangci.yml does NOT gate CI (pinned standalone binaries do), staticcheck's deliberate -ST1005 exclusion, the single documented nolint, and the deadcode allowlist. Deliberately omits a SLSA/provenance claim — signing here is cosign keyless, and the term appears nowhere in the repo. Item 4 of tracebloc/backend#930. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
Author
|
bugbot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 60517e0. Configure here.
saadqbal
approved these changes
Jul 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
.cursor/BUGBOT.md— project context for the Cursor Bugbot reviewer. Zero repos in the org have one today, so Bugbot reviews every repo blind. This is item 4 of tracebloc/backend#930 and RFC 0001's own highest-value change.This repo draws the most Bugbot findings of any (232), and they cluster on classes generic security advice does not cover: dishonest outcome reporting and mishandled interrupts. Writing the house rules down means Bugbot stops re-deriving them and spends its one pass on genuinely hard findings.
What's in it
Every rule carries the reason and a real reference in this repo:
classifyPushOutcomeis named as the reference pattern: a Job that exits 0 but reports row failures returnscompleted_with_failures+ a non-zero code, notsucceeded. Plusdoctor.StatusUnknown— a check that cannot back a green prints neutral rather than a false tick.exitcodes.go.Cancelled — …sites, and flags thatmapClientErr(internal/cli/client.go:858) mapserrInteractiveCancelledstraight tonilwith no output — so a Ctrl-C atclient.go:334/delete.go:196currently exits 0 in total silence, right beside a declined-answer branch that does print.install.sh, andvalidate_version_tagbefore URL interpolation..data-ingestors-ref,.client-ref,.backend-ref, the goldens,chart-invariants).STYLE.mdoutput contract — Printer-only colour, colour never load-bearing, the terminology table, and regenerating the copy catalog golden.Plus a verified known-non-issues section:
.golangci.ymldoes not gate CI (pinned standalone binaries do, andstaticcheck/unusedare disabled there for runner OOM reasons);staticcheckruns-checks all,-ST1005deliberately, so error-string capitalisation is not a finding; the single documentednolintand its reasoning; and the deadcode allowlist entries.Type
Docs / DevEx. No code changes.
Test plan
make ciis unaffected.validate*convention instead).Checklist
develop.cursor/BUGBOT.mdin this PR🤖 Generated with Claude Code
Note
Low Risk
Single markdown file for Cursor Bugbot; no runtime, build, or customer-facing CLI behavior changes.
Overview
Introduces
.cursor/BUGBOT.md, a Cursor Bugbot guide for tracebloc/cli. It frames the product (signed releases, customer-run Kubernetes, scripting on exit codes,make ciparity) and lists what to always flag: dishonest success / JSON vs exit-code mismatch, unnamed exit codes, silent interactive cancel (includingmapClientErr), HTTP 426 as hard stop, fail-closedinstall.shverification, bounded external calls, boundary validation, cross-repo pins and generated artifacts,STYLE.md/ Printer output rules, and typed errors with%w.It also documents known non-issues (CI uses pinned linters, not
golangci-lint; deliberatestaticcheck -ST1005; documentednolint; integration timeouts; advisory workflows) and review tone for a public repo.No application code changes — documentation only for automated review.
Reviewed by Cursor Bugbot for commit 60517e0. Bugbot is set up for automated code reviews on this repo. Configure here.