Skip to content

Release develop → master: ingestor v0.8.0 (RFC-0003 I2 per-ingestion write path) - #421

Merged
LukasWodka merged 8 commits into
masterfrom
sync/develop-to-master-v0.8.0
Jul 30, 2026
Merged

Release develop → master: ingestor v0.8.0 (RFC-0003 I2 per-ingestion write path)#421
LukasWodka merged 8 commits into
masterfrom
sync/develop-to-master-v0.8.0

Conversation

@LukasWodka

@LukasWodka LukasWodka commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Promotes develop → master so the ingestor image gets built. The image only exists as a byproduct of a master release: release-image.yml is gated on the PyPI publish, which happens on master (publish-master.yml). Divya's staging test surfaced that the deployed :0.7 ingestor predates #408, and my direct v0.8.0 tag couldn't build because 0.8.0 isn't on PyPI.

What merging this does (automatically)

  1. publish-mastertracebloc-ingestor==0.8.0 to PyPI.
  2. auto-release-on-master sees the v0.8.0 tag already exists (pushed manually) with no Release → re-dispatches release-image.yml, which now passes the PyPI gate and publishes ghcr.io/tracebloc/ingestor:0.8.0 (+ :0.8, :0), signed.

Why this is SAFE / inert — it changes what zero edges run

Carries (8 commits)

Notes

  • fr-gate will block until items are Ready-for-prod — conscious skip-fr-gate is defensible here (the release is inert).
  • The stale Sync develop → master for v0.7.8 release #400 (sync for v0.7.8) can be closed — v0.7.8 already released.

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.yml is removedv* tags come from the org release train, not github-actions[bot]. release-image.yml adds a verify-published job (poll PyPI, strict vX.Y.Z ref validation, minimal permissions) before build/sign, and concurrency is keyed on the tag so manual re-drives don’t race tag-triggered runs. RELEASING.md and .cursor/BUGBOT.md document 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 in data_validator (except Exception), json_ingestor import order, and validators/base typing.

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

LukasWodka and others added 8 commits July 29, 2026 10:38
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>
… on #413) (#414)

Co-authored-by: Claude Opus 4.8 <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>
@LukasWodka LukasWodka self-assigned this Jul 30, 2026
@LukasWodka

Copy link
Copy Markdown
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.)

@LukasWodka LukasWodka added the skip-fr-gate Emergency override of the FR gate. Requires a written reason on the PR. label Jul 30, 2026
@LukasWodka
LukasWodka merged commit eba34a7 into master Jul 30, 2026
22 of 24 checks passed
@LukasWodka
LukasWodka deleted the sync/develop-to-master-v0.8.0 branch July 30, 2026 11:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-fr-gate Emergency override of the FR gate. Requires a written reason on the PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants