Skip to content

release-train: develop -> staging - #206

Merged
tracebloc-release-train[bot] merged 5 commits into
stagingfrom
release-train/to-staging
Aug 11, 2026
Merged

release-train: develop -> staging#206
tracebloc-release-train[bot] merged 5 commits into
stagingfrom
release-train/to-staging

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Automated promotion by the release train (RFC-0008 D14). Head is the train-managed release-train/to-staging branch (a mirror of develop), so it never collides with a human PR. Merged only when the fr-gate is green.


Note

Medium Risk
Changes tighten org-wide CI inventory (version-bump gate) and fleet CLAUDE.md sync behavior; misconfiguration could block promotions or stall sync PRs, but no application runtime or auth paths are touched.

Overview
This promotion bundles org governance and automation fixes in tracebloc/.github.

Org standards & kanban proseorg-standards.md (and the synced CLAUDE.md block) now require every board ticket to have a Status, route bugs straight to Ready, and clarify that Ready is the default pull queue (bugs excepted).

Caller-drift contractrepo-inventory.yml registers version-bump-gate.yml as a reusable and assigns required on the five version-published repos (cli, client, data-ingestors, design-system, tracebloc-py-package); everyone else gets a written version_gate_not_applicable exemption.

Standards-sync remediationstandards-sync.py adds design rule 5 (fresh-ref eventual consistency): retried reads on new sync branches, sha refresh + one retry on failed writes, and expect_file only when the sync branch was just created so reused branches can still create CLAUDE.md when missing (#197). Selftests cover the race and reused-branch paths.

Hygiene — New .gitignore for __pycache__, *.pyc, .pytest_cache, and .DS_Store after a committed bytecode artifact slipped through a promotion.

Reviewed by Cursor Bugbot for commit e413018. Bugbot is set up for automated code reviews on this repo. Configure here.

LukasWodkaand others added 4 commits August 10, 2026 19:34
…, 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>
@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

bugbot run

Comment threadscripts/tests/standards-sync-selftest.py
…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>
@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

bugbot run

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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 e413018. Configure here.

@tracebloc-release-traintracebloc-release-trainBot added gate-nudge Toggled by the release train to (re-)fire the fr-gate and removed gate-nudge Toggled by the release train to (re-)fire the fr-gate labels Aug 11, 2026
@tracebloc-release-train
tracebloc-release-trainBot merged commit 168df42 into stagingAug 11, 2026
20 checks passed
Sign up for freeto 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.

1 participant

@LukasWodka