Uh oh!
There was an error while loading. Please reload this page.
release-train: develop -> staging - #419
Merged
Merged
Conversation
…, a visible note (#410) Ctrl-C at `client create`'s "Provision this client?" confirm and at `delete`'s typed-name confirmation exited 0 having printed nothing about it: `mapClientErr` mapped errInteractiveCancelled straight to nil with no Printer call. A script could not tell an aborted run from a completed one, and the declined-answer branch sitting directly beside each one DID print. Centralise the convention instead of duplicating it a fifth and sixth time: - `cleanCancel(p, nothing, …)` is now the only place a cancellation is reported — it prints "Cancelled — <nothing>." and returns the clean exit. - `mapClientErr` becomes `mapPromptErr(p, err, nothing, …)`: the Printer and the note are in the signature, so the silent-return shape is unreachable. Non-cancel errors still map to exit 1. - All six prompt sites route their cancellation through it, including the declined-answer twins, so Ctrl-C and "no" cannot drift apart. Output is byte-identical at the four sites that were already correct; `client create`'s terse "Cancelled." becomes "Cancelled — nothing was provisioned." Exit code stays 0, which is what all six sites already did and what exitOK documents. exitInterrupted (130) is used only for a Ctrl-C that cuts short work already in flight (sign-in wait, status --wait, the seal suite, an installer re-run) — its comment claimed the prompt case too, contradicting exitOK and every call site, so fix that and the matching row in docs/troubleshooting.md. Tests: cancel_test.go is a table over every prompt a user can back out of, asserting the exit code, the user-visible line, and that the command did not act anyway. The copy-catalog harvester learns about the new copy helper so the assembled "Cancelled — …" lines stay in the catalog. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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>
…oc/backend#930) (#411) GitHub auto-closes an issue in another repository only when the PR body names it owner-qualified. A bare `repo#N` merely cross-references and closes nothing -- and the template's own hint taught `Ref tracebloc/other-repo#456`, which is not a closing keyword at all. Eight code-complete issues stayed open for days-to-weeks this way (tracebloc/backend#1171-#1176, tracebloc/client#376, #393), dragging two epics to 0% and 14% when the true figures were 67% and 24%. Someone had to notice and close all eight by hand. Also corrects CONTRIBUTING.md, which asserted that a `Closes #N` body line auto-closes on merge. This repo's default branch is `main` while PRs land on `develop`, and GitHub fires closing keywords only on merges into the default branch -- so that claim was wrong in both directions and helped propagate the bug. cli#393 is one of the eight. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
RFC numbers are assigned per repo, so a bare "RFC 0001" names four different documents across the org and "RFC 0002"/"RFC 0003" name two each. Add the qualified ID (`RFC-CLI-0001` … `RFC-CLI-0003`) to each header, in the blockquote style these documents already use. Two of the three also record which document the existing bare in-code references actually mean: nearly all `RFC-0001` comments across backend/cli/client point at RFC-CLI-0001, and the `RFC-0003` references in client's chart templates and docs/SEAL-CHECK.md point at RFC-CLI-0003 — not at backend's own 0001/0003. Nothing is renumbered and no file is moved, so existing links still resolve. The org-wide index lives in tracebloc/backend (private) at docs/rfcs/README.md. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…nt (Bugbot #397) (#414) #404 made writeUpdateCache refuse to recreate a wiped ~/.tracebloc, but latestReleaseVersion still fetched from GitHub whenever the cache couldn't be read. On a fresh install / after offboard the dir is absent, so the throttle can never be persisted and every TTY command re-hit the releases API, burning updateCheckTimeout each time. Reconcile both: introduce configDirExists as the single "can the throttle be persisted?" gate, used by writeUpdateCache (skip write — #404) AND latestReleaseVersion (skip the network check entirely — #397) when the dir is absent. A dir-present-but-stale/unreadable cache still falls through to the normal throttled fetch, so the everyday path is unchanged. Co-authored-by: shujaat hasan <shujaathasan@shujaats-MacBook-Pro.local> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…9) (#415) install.sh verified downloaded binaries against certificate-identity-regexp '.../release.yml@.*' — @.* matches ANY ref, so a binary signed by release.yml running on a feature branch verified identically to a tagged release. Anchor to '@refs/tags/v.*' so only tag-built releases are trusted. Same anchor applied to the documented verify command in release.yml. Part of tracebloc/backend#1269 (row 4). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…#417) * chore: declare next release in VERSION (0.10.1) for the release train The train reads this file to cut tags: vX.Y.Z-rc.N on every staging promotion (pre-release binaries for FR; 'latest' never sees them) and vX.Y.Z on the prod promotion. The binary's own version still derives from the tag at build time (release.yml ldflags) -- this file only declares intent, uniform with tracebloc-py-package's pyproject version. 0.10.1 ships the cosign identity anchor fix (#415). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(release): enforce tag==VERSION + strict prerelease detection Two guards raised in release-train review: (1) any tag's base X.Y.Z must match the VERSION file (train-cut or manual), so the file can never go silently stale after an out-of-train release; pre-VERSION tags are grandfathered for rebuilds. (2) STRICT stability: only plain vX.Y.Z is a stable release -- rc tags AND malformed variants (v1.2.3rc1, no dash) are prereleases, so 'releases/latest' (the installer bootstrap) can only ever resolve a real production build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * style: quote GITHUB_OUTPUT redirects (shellcheck SC2086) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
LukasWodka
commented
Jul 29, 2026
ContributorAuthor
bugbot run |
Uh oh!
There was an error while loading. Please reload this page.
LukasWodka
commented
Jul 29, 2026
ContributorAuthor
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 cd995b5. Configure here.
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Automated promotion by the release train (RFC-0008 D14). Head is the train-managed
release-train/to-stagingbranch (a mirror ofdevelop), so it never collides with a human PR. Merged only when the fr-gate is green.Note
Medium Risk
Changes frozen exit-code semantics and prompt-cancel behavior that customer scripts may rely on, plus release tagging and cosign identity rules that affect installs and what counts as
latest.Overview
Release train promotion (develop → staging) carrying 0.10.1 via a new root
VERSIONfile and release-workflow checks that fail if a tag’s semver base doesn’t matchVERSION, plus stricter GitHub prerelease labeling so only plainvX.Y.Zcan becomelatest.CLI behavior (scripting contract): Adds shared
cleanCancel/mapPromptErrso backing out of prompts (Ctrl-C or “no”) always printsCancelled — …and exits 0, fixing silent success onclient create,delete, and aligningdata ingest,data delete, andresources set. Docs andexitcodes.gonow distinguish prompt cancel (0) from interrupting work already running (130). Newcancel_test.goand copy-catalog golden updates guard the contract.Update check: Skips GitHub fetch when
~/.traceblocis missing (fresh install / after offboard) so every command doesn’t pay the timeout;writeUpdateCacheuses the sameconfigDirExistsgate so offboard doesn’t recreate the config dir.Install/release verification: Cosign certificate identity regexp tightens from workflow
@.*to@refs/tags/v.*ininstall.sh,install.ps1, andrelease.ymlcomments.Docs/process: Adds
.cursor/BUGBOT.md, qualified RFC banner IDs, PR template / CONTRIBUTING cross-repo issue closing notes, anddocs/troubleshooting.mdexit-code table updates.Reviewed by Cursor Bugbot for commit cd995b5. Bugbot is set up for automated code reviews on this repo. Configure here.