Uh oh!
There was an error while loading. Please reload this page.
release-train: staging -> main - #211
Merged
Merged
Conversation
…, exempt elsewhere (#202) Now that the version-bump-gate callers are merged into the 5 version-published repos (data-ingestors, tracebloc-py-package, cli, design-system, client), add the reusable to the inventory so caller-drift enforces it: required on those 5, exempt (no version_file → gate N/A) on the rest. Closes the enrollment gap that let cli + py-package hit the version refusal only at the prod boundary (backend#1563). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
`scripts/__pycache__/standards-sync.cpython-314.pyc` was committed by a `git add -A` in #200 and reached `develop`. It is now riding the develop -> staging promotion in .github#203, which is how I noticed it. It is a build artifact and does not belong in the tree: version- and platform-specific (cpython-314, while CI runs 3.12), regenerated on every local run of the selftest, and a stale one silently shadows the source it was built from. Added a .gitignore covering the whole class rather than the one file that got caught -- `__pycache__/`, `*.py[cod]`, plus .DS_Store and .pytest_cache, which the same careless `add -A` would sweep in next. The file is also present on the #197 branch, which branched after #200; removed there too, so whichever lands first the artifact is gone and the other cannot reintroduce it. Selftest still passes (20 checks on this branch; #197 takes it to 27). Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…tes (backend#1602) (#197) * fix(standards): retry fresh-branch reads; refresh sha on rejected writes (backend#1602) Design rule 5: fresh refs are eventually consistent. On run 31373298821 (frontend-app leg) the contents read on a just-created branch transiently 404'd, the 404 was believed, and the sha-less PUT was rejected as 'Invalid request' — one flaky read failed a fleet run. remediate() now knows whether the base has the file: reads the base proves must succeed retry with backoff and fail closed if they never do; genuine absence is confirmed by a re-read; a 409/422-rejected write refreshes the sha and retries exactly once. Five new offline selftest checks pin the contract with a scripted gh stub (25 checks total). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(standards): a reused sync branch may honestly 404, and say so on a real conflict Two Bugbot findings on #197. 1. `expect_file` MEANS "a 404 here cannot be true" -- which holds only when the ref was cut moments ago from a base that has the file. That is the eventual consistency window the retry exists for. A REUSED branch (the 422 path) is a different situation: it may have been cut BEFORE CLAUDE.md existed on the base, so a 404 is honest and permanent. Passing file_on_base alone made the read retry five times and fail closed, so the sha-less create could never run and that repo was stuck forever. The old code read the 404 as absence and created the file, which was right here. expect_file is now `file_on_base and branch_is_fresh`. 2. The second-rejection message was UNREACHABLE. On attempt 2 the flow fell through to the generic return inside the loop, so the one failure worth distinguishing -- refreshed the sha and was rejected anyway, i.e. another writer is racing the branch -- was the one nobody could see. It now returns its own message, and the post-loop return is documented as a fail-closed backstop rather than dead code that would return None (i.e. SUCCESS). Selftest 25 -> 27. Mutation-verified both: reverting expect_file, and making the second-rejection branch unreachable again -- both CAUGHT. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * test(standards): the reused-branch check asserted an end state and proved nothing Mutation-checking the previous commit caught its own test. Reverting the expect_file fix left the selftest GREEN, because the check asserted only "the file got created". With the bug present the read retries, swallows the scripted PUT response, reads its `{}` body as the file, and the run reaches the same end state by a different path. Same outcome, wrong reason -- so the check could not distinguish fixed from broken, in either direction. Assert the READ COUNT instead: 2 when a 404 on a reused branch is believed as absence, 5 when it is wrongly treated as the eventual consistency window. That is the thing the fix actually changes. Also catches the stub's exhaustion assertion and records it as a failure rather than letting it abort the whole selftest. Re-verified: reverting expect_file is now CAUGHT (reads=3, expected 2). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore: drop the committed .pyc here too (backend#1602) Same artifact as .github#204, removed on this branch as well. This branch was cut after #200, so it carries the file; without this, merging #197 after #204 would put it straight back and the fix would look like it had held. The .gitignore is identical to #204's, so whichever merges first the other resolves cleanly. Selftest: 27 checks, 0 failed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* docs(claude): sync org-standards block (backend#1602) Managed sync from tracebloc/.github/org-standards.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(claude): sync org-standards block (backend#1602) Managed sync from tracebloc/.github/org-standards.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…fast-lane (#208) Saqlain (client-runtime#301): the new bug rule sends defects straight into Ready unrefined, but the next line still called Ready 'the refined queue' flatly, so a reader landing there assumes everything in Ready is refined. Qualify it with the bug exception. Source fix per our own rule (managed block — never hand-edit the synced copies); the standards-sync re-propagates to every repo's CLAUDE.md. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…ide (backend#1681) (#207) * fix(code-quality): make the per-job soft-fail overrides able to override (backend#1681) `action-pins-soft-fail` and `format-soft-fail` were combined with the global `soft-fail` via OR: SOFT_FAIL: ${{ (inputs.soft-fail || inputs.action-pins-soft-fail) && ... }} `soft-fail` defaults to true, so the override could only ever make a job MORE advisory -- never arm one. That is the opposite of its purpose: the input exists so a repo can arm the supply-chain check while the rest of its suite stays advisory during a migration. Measured on origin/develop: 16 of 16 callers pass `action-pins-soft-fail: false`, and docs, model-zoo, start-training and tracebloc-website carry a comment saying "Armed 2026-08-06 (backend#1492) ... Independent of soft-fail above" while passing no `soft-fail` at all -- so action-pins has been advisory in exactly the four repos that believe it is armed. Three of the four are public. Effect (truth table in the PR): the 12 repos that pass both inputs false are unchanged; the 4 above flip from advisory to armed. Verified safe before shipping with a byte-faithful replica of this job's own scanner, mutation-tested to report violations and to skip commented lines: 0 unpinned refs across all 16 repos, so no PR turns red on merge. `format-soft-fail` gets the identical fix and is behaviour-neutral today (no caller passes it; its default is true) -- it removes the same trap before it springs. Verified: YAML parses, actionlint clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(code-quality): keep format soft-fail additive (only action-pins is authoritative) Bugbot: format-soft-fail defaults to false, so replacing (soft-fail || format-soft-fail) with the input alone flipped every soft-fail:true caller from an advisory format job to a hard gate. Per this input's contract it is ADDITIVE ('advisory even when soft-fail is false'), unlike action-pins-soft-fail which 16 callers arm explicitly. Revert just the format job to the OR; action-pins keeps the authoritative override that backend#1681 is actually about. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
release-train: develop -> staging
release-train: develop -> staging
LukasWodka
commented
Aug 11, 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 3c4e84c. 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-mainbranch (a mirror ofstaging), so it never collides with a human PR. Merged only when the fr-gate is green.Note
Medium Risk
Changes how code-quality jobs pass or fail across the org (supply-chain pins and format gates) and how fleet-wide CLAUDE.md sync writes behave; mis-wiring would block merges or leave sync stuck, though the diff is targeted bug fixes with tests.
Overview
CI posture fixes in
code-quality.yml: The format job again treats black as advisory when either globalsoft-failorformat-soft-failis set (restoring the intended OR after a regression that made every advisory caller a hard format gate). The action-pins job now keys blocking behavior only onaction-pins-soft-fail, so repos that passaction-pins-soft-fail: falsecan actually enforce pinned actions while the rest of the suite stays soft-fail—previously the defaultsoft-fail: trueOR logic meant that override could never arm the check.Org standards sync:
standards-sync.pyadds retries and fail-closed handling for transient 404s on fresh sync branches and for stale/missing SHAs on writes, and only treats “file must exist on head” when the sync branch was just created (reused branches with a genuine missingCLAUDE.mdcan create the file again). Selftests cover those paths.Inventory & hygiene:
repo-inventory.ymllistsversion-bump-gate.ymlas a reusable and marks it required or exempt per repo. New root.gitignoredrops Python bytecode and local cache noise.org-standards.md/ syncedCLAUDE.mdtext clarifies kanban status rules (bugs go straight to Ready).Reviewed by Cursor Bugbot for commit 3c4e84c. Bugbot is set up for automated code reviews on this repo. Configure here.