Release develop → master: ingestor v0.8.0 (RFC-0003 I2 per-ingestion write path) - #421
Merged
Merged
Conversation
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Part of tracebloc/backend#1304 (epic #930). Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* Add pre-commit config (Layer 0 local lint guard) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Document pre-commit setup in Readme Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Address Bugbot findings: drop 3.11-only pin, align black floor - Remove default_language_version: the repo supports Python 3.11 and 3.12 (CI tests both); pinning python3.11 broke hook installs on 3.12-only setups. - requirements-dev.txt: black>=26,<27 so a local black run satisfies the hook's 26.3.1 --check (same 2026 stable style). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Align black dev floor with the pre-commit hook (26.x) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
77 findings at develop HEAD (ruff 0.15.20, org code-quality selection) -> 0 under the new repo config. - 59 F401: 36 safe-autofix removals; the 23 inside templates/ are ignored via ruff.toml per-file-ignores (byte-exact user sample files, never edit). - 2 F821 (real-bug family): quoted annotations referencing lazily-imported modules — layout.py now imports os at module level; validators/base.py resolves pd via TYPE_CHECKING, runtime import stays lazy. - 12 E402: json_ingestor.py stranded import block moved to top; deliberate per-section imports in tests/test_coverage_gaps*.py noqa'd with reason. - 1 E722: bare except -> except Exception (data_validator._validate_date). - 2 F841 + 1 E401: bindings dropped / import split. Part of tracebloc/backend#1303. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* ci(release): retire auto-release-on-master - the train owns the tag now
* ci(release): gate the image on the version actually being published
* fix(review): address Asad on the tag handover
Workflow:
- concurrency now keys on the TAG (inputs.ref || github.ref_name). On
workflow_dispatch github.ref is refs/heads/master, so a manual re-drive
sat in a different group from the tag-triggered run and the two raced;
both push :X.Y.Z/:X.Y/:X and both take the gh-release-create branch, so
one 422s after already pushing and signing an image. The new gate makes
this reachable: it can hold for ten minutes, and RELEASING.md tells
operators to dispatch when a run looks stuck.
- permissions: {} on verify-published. It is one unauthenticated curl,
but it was inheriting contents/packages/id-token/attestations write,
and an OIDC token minted there carries the release-image.yml
workflow_ref -- the identity consumers are told to trust.
- curl gets --connect-timeout 10 --max-time 30 --retry 2. curl has no
default timeout, so a peer that accepts and never replies hung the step
until timeout-minutes killed it, losing the one diagnostic this gate
exists to print.
- tag validation requires the leading v and digits-only components. The
old glob accepted 1x.2y.3junk while its error said 'not a vX.Y.Z tag',
and an optional v let -f ref=0.7.9 clear the gate then die in checkout.
- the final sleep is skipped once the verdict is decided.
- dropped the unused outputs block rather than leaving dead config.
Docs (all newly wrong, as flagged):
- RELEASING.md L15: the package can ship without the image but no longer
the reverse; states plainly that the gate proves the version string is
on PyPI, not that the tagged commit uploaded it.
- RELEASING.md section 5: the train cuts the tag, why it is not the bot
(the ruleset blocks it, and a bot tag would not start release-image),
and that the manual fallback needs release-managers.
- .cursor/BUGBOT.md: same correction, since it steers review here.
- two troubleshooting rows: a gate timeout, and a stranded tag with no
image (nothing re-drives it automatically).
…d#1303) (#417) Backlog at zero fleet-wide; the quality contexts are already required on develop. Also adds a workflow_dispatch(all-files) trigger for whole-tree scans (gitleaks baseline). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…ite path (#408) (#419) #408 (RFC-0003 I2, the ds_<uuid4 hex> immutable write path) merged without a version bump, so no vX.Y.Z tag was cut and no image was built — the published :0.7 line predates it. Bumping to 0.8.0 (a flag-gated feature, default off) so a v0.8.0 tag builds an ingestor image that actually carries the ds_ write path. Needed to functionally test D16 on staging (surfaced by Divya's run). Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Collaborator
Author
|
👋 Heads-up — Code review queue is at 40 / 30 Above the WIP limit. The team convention is to review existing PRs before opening new work. Open PRs currently in Code review (oldest first):
Pull from review before opening new work. (This is a nudge from the kanban WIP check, not a block.) |
divyasinghds
approved these changes
Jul 30, 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.
Promotes develop → master so the ingestor image gets built. The image only exists as a byproduct of a master release:
release-image.ymlis gated on the PyPI publish, which happens on master (publish-master.yml). Divya's staging test surfaced that the deployed:0.7ingestor predates #408, and my directv0.8.0tag couldn't build because 0.8.0 isn't on PyPI.What merging this does (automatically)
publish-master→tracebloc-ingestor==0.8.0to PyPI.auto-release-on-mastersees thev0.8.0tag already exists (pushed manually) with no Release → re-dispatchesrelease-image.yml, which now passes the PyPI gate and publishesghcr.io/tracebloc/ingestor:0.8.0(+:0.8,:0), signed.Why this is SAFE / inert — it changes what zero edges run
tag: "0.7"; prod pins the 0.7prodDigest. The moving:0.8/:0floats don't touch:0.7.:0.8.0deliberately to test — that's the only thing that runs it. Test-first is preserved (artifact exists, deployment gate stays closed).Carries (8 commits)
Notes
fr-gatewill block until items are Ready-for-prod — consciousskip-fr-gateis defensible here (the release is inert).Epic: tracebloc/backend#1151 · I2: #408 · image: #419
🤖 Generated with Claude Code
Note
Medium Risk
Release pipeline behavior changes (who tags, when images build) are operationally critical but explicitly gated on PyPI; ingest/runtime logic changes in this diff are limited to lint/exception-handling hygiene.
Overview
Release & CI:
__version__moves to 0.8.0.auto-release-on-master.ymlis removed —v*tags come from the org release train, notgithub-actions[bot].release-image.ymladds averify-publishedjob (poll PyPI, strictvX.Y.Zref validation, minimal permissions) before build/sign, and concurrency is keyed on the tag so manual re-drives don’t race tag-triggered runs.RELEASING.mdand.cursor/BUGBOT.mddocument the new flow and review rules.Quality gates: New
code-quality-caller.yml(org workflow,soft-fail: false),.pre-commit-config.yaml,ruff.toml, Black 26.x in dev deps, plus widespread unused-import / lint fixes in tests and small edits indata_validator(except Exception),json_ingestorimport order, andvalidators/basetyping.Reviewed by Cursor Bugbot for commit a831d78. Bugbot is set up for automated code reviews on this repo. Configure here.