Skip to content

chore(main): release 0.3.0 - #36

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main--components--taskq-py
Open

chore(main): release 0.3.0#36
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main--components--taskq-py

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

🤖 I have created a release beep boop

0.3.0 (2026-09-10)

⚠ BREAKING CHANGES

  • page every job-list ordering, by ordering id with the sort column
  • obs: drop identity values from metric dimensions before they throttle ingestion
  • web: admin pages could be framed and UI-redressed; CSRF cookie lost Secure behind TLS termination
  • consumer: validate payload before acquire; pass the validated model
  • api: export the sanitized validate_actor_payload from the public API
  • ratelimit: refund the store that actually paid, not the configured one
  • EnqueueArgs.scheduled_at is now None-able and no longer defaults to a client-side now() stamp — "immediate" enqueue passes None and the server stamps it; Backend implementations that require a non-None datetime now fail loudly. The raw schedule_to_close datetime form is deprecated in favor of schedule_to_close_interval. Rate-limit Redis scripts derive time from redis.call('TIME') (caller-supplied now ARGV removed). Full suite 5122 passed; pyright, ruff, mkdocs, uv lock --check all clean.
  • deps: dotenvmodel 0.6.3 -> 1.0.0. Real environment variables now take precedence over .env file values (previously .env files overwrote os.environ); set DOTENV_OVERRIDE=true or pass override=True to restore files-beat-env-vars. TaskQSettings.load() no longer mutates os.environ. An invalid TaskQ(redis_url=...) now raises TypeCoercionError at open() (previously a late ValueError from redis-py) and an empty or whitespace redis_url raises ValueError at construction. AppSettings subclasses whose string field defaults contain ${VAR} now interpolate them at load time (unset references resolve to "").
  • testing: make_integration_settings/make_integration_settings_dict no longer default to the deterministic per-worker schema tq_; the default is a unique per-call name (explicit schema_name= unchanged).
  • consumer: always pass validated_payload to acquire_for_actor
  • ratelimit: make payload_type required, add .typed() to both keyed refs
  • actor-config: sync_actor_config (and therefore worker startup) no longer raises ActorConfigDriftList for a max_concurrent, max_pending, or result_ttl mismatch between the registered actor and the stored row — only queue and metadata mismatches still raise. ActorConfigDriftError.field narrows from Literal["max_concurrent", "max_pending", "queue", "result_ttl", "metadata"] to Literal["queue", "metadata"]. --force-update-actor-config / TASKQ_FORCE_UPDATE_ACTOR_CONFIG no longer affect capacity fields at all — they are unconditionally preserved by the UPSERT once a row exists. Consumers who relied on a differing @Actor(...) literal fatally refusing worker startup for capacity fields must now use taskq actor-config set to change stored capacity going forward; a stale literal is only logged.
  • actor-config: sync_actor_config (and therefore worker startup) no longer raises ActorConfigDriftList for a max_concurrent, max_pending, or result_ttl mismatch between the registered actor and the stored row — only queue and metadata mismatches still raise. ActorConfigDriftError.field narrows from Literal["max_concurrent", "max_pending", "queue", "result_ttl", "metadata"] to Literal["queue", "metadata"]. --force-update-actor-config / TASKQ_FORCE_UPDATE_ACTOR_CONFIG no longer affect capacity fields at all — they are unconditionally preserved by the UPSERT once a row exists. Consumers who relied on a differing @Actor(...) literal fatally refusing worker startup for capacity fields must now use taskq actor-config set to change stored capacity going forward; a stale literal is only logged.

Features

  • accept init= per-connection hook in make_pg_pool_factory (#31) (#34) (c6fd05a)
  • accept primitive instances in actor rate_limits/reservations declarations (3503b82)
  • acquire_for_actor normalizes primitive instances to .name (599107e)
  • actor-config: make capacity fields operator-owned, not code-asserted (abc38d1)
  • actor-config: make capacity fields operator-owned, not code-asserted (#33) (07a6cfe)
  • actor-config: make max_pending genuinely operator-owned at enqueue time (76e084a)
  • add 'taskq actor-config deregister' CLI command (fc7af6e)
  • add actor deregistration exception hierarchy (66b6c41)
  • add ActorsClient pool-wrapping facade (4b2def9)
  • add admin UI actors page with deregister button (982e098)
  • add BulkCancelResult type and EmptyFilterError exception (b0c8dca)
  • add cancel_where to Backend protocol (a7df046)
  • add deregister_actor with force=False/force=True safety checks and purge_queue (b06c6ea)
  • add RateLimitRegistry.clear() test-isolation aid (78dcc23)
  • add tags and missing fields to SubJobEnqueuer.enqueue() (dfca461)
  • add TaskQ.actors property and export ActorsClient, DeregisterResult from public API (59d9d5c)
  • allow a leading digit in queue names, and prove the rule is enforced (370ac12)
  • api: give consumers public paths where they were monkey-patching internals (5ee5b35)
  • backend: add count_active_jobs to Backend protocol and implementations (429d497)
  • batch: add BatchAbortedError and EmptyBatchError exceptions (fae8b9f)
  • batch: add batches table migration (f75762b)
  • batch: add BatchFailurePolicy and AbortBatchAfter types (1501eff)
  • batch: add BatchRow, BatchCounts, BatchFilter, Backend protocol batch methods (e2fed4c)
  • batch: add failure_policy, finalizer, streaming, list_batches to client + facade (3b111f9)
  • batch: add InMemoryBackend batch operations + PostgresBackend protocol stubs (296b1b5)
  • batch: add post-terminal-write batch hook + wait_for_batch safety (d14ce84)
  • batch: add PostgresBackend batch SQL and methods (e723026)
  • batch: keyset pagination for list_batches, and validate the queue-name write path (0725feb)
  • batch: stale-batch completion sweep + prune old batches in leader (4b1e34f)
  • cli: resolve credential providers from the CLI so rotation actually rotates (5a803f4)
  • config: route credential providers through dotenvmodel, dedupe literals (573dc3f)
  • export missing public API types for 1.0 surface (e41f49f)
  • export OIDCSettings and SAMLSettings from public API surface (6ab5aac)
  • fleet-wide queue concurrency cap and KeyedRateLimitRef (#30) (b042028)
  • forward setup, server_settings, connection_class in pool/conn factories (2eb7fe4)
  • health: serve probes over HTTP, because ACA has no exec probe type (ce103e9)
  • implement cancel_where for InMemoryBackend (166b53b)
  • implement cancel_where for PostgresBackend + JobsClient/TaskQ (8c26d77)
  • implement job handle fetching to avoid multiple calls #95 (947a0f5)
  • injectable rate_limit_registry at worker bootstrap with actor-declared collection pass (6333eae)
  • injectable rate_limit_registry for admin app; examples use owned instance (309c0bf)
  • make crash-reclamation observable via a fleet-wide event cursor (#25) (db16364)
  • migrate: let migrations opt out of the transaction wrapper (879813b), closes #29
  • per-worker rate-limit registry in leader sweeps; de-gate keyed eviction (4244b00)
  • PG-backed multi-status pagination parity test, docstring clarifications (04df2bd)
  • queues: make queue mode configurable so fairness_key is not a no-op (0e4d36a)
  • ratelimit: make payload_type required, add .typed() to both keyed refs (a3013fb)
  • ratelimit: validate payloads to BaseModel before key_fn in registry (88c4c08)
  • scope idempotency_key uniqueness via idempotency_scope (#27) (c27e702)
  • settings: add idle drain mode fields to WorkerSettings (28285a4)
  • testing: hermetic dotfiles, strict-mode fixtures, health-sock helper, bind retries (801095c)
  • two-tier loop-lag watchdog, lease invariant, merge fallout fixes (a48a17b)
  • unify time on the database clock across enqueue, cron, ratelimit (1ab2340)
  • widen JobFilter.status to accept multiple statuses, add active meta-filter (e863850), closes #22
  • widen JobFilter.status to accept multiple statuses, add active meta-filter (#28) (c5ea971)
  • worker: add drain_failures counter to WorkerDeps (dbda072)
  • worker: implement drain monitor loop in drain.py (83bd758)
  • worker: return AttemptOutcome from dispatch_one_job, increment drain_failures (9cf20e7)
  • worker: wire until_idle through _main/worker_main + CLI --until-idle (ac569e0)

Bug Fixes

  • actor existence check first, job_events on cancel, canonical status sets, force-aware error message (80c6ff3)
  • actor-config: address review — result_ttl completion fallback, validation guards, cache hardening (9d917df)
  • address adversarial review findings (a9d6ffe)
  • address adversarial review findings (47e9eed)
  • address adversarial review findings (a479656)
  • address adversarial review findings — code quality, DRY, test gaps (8706290)
  • address all review findings (C1-C2, H1, M1-M11, Low) (20245b1)
  • address approved-review follow-ups — clock_timestamp, read_timeout validation, hasattr gap, stale docs (b72b790)
  • address PR #37 review — bound all remaining closes, fix shutdown race (87474a2)
  • admin: age timestamps in the database clock domain, not the app's (123acfd)
  • admin: answer a pg-only bucket reset with an explanatory 404, not a 500 (6a27c5f)
  • admin: bound the job list's status and tags filter inputs (e7c00ef)
  • admin: compute schedule skip with the row's stored dst_strategy (ed4209c)
  • admin: gate schedule enable/disable/skip on admin_actions_enabled (1a3a4c9)
  • admin: keyset pagination must follow the sort direction, and bind the cursor at its column type (2569da5)
  • admin: reject NUL in text filters with a clean 400 (6423aa8)
  • admin: warn when the admin UI is served with no authentication (2e162ef)
  • admin: warn when the admin UI is served with no authentication (07a6c8f)
  • all remaining L findings — CSRF test, notice whitelist, exit codes, schema assertion, edge-case tests (048da63)
  • api: export the sanitized validate_actor_payload from the public API (a24f697)
  • attempts: measure duration_ms on the database clock, drop the freed params (dbb19eb)
  • attestations gate via explicit input, stale now() in docs, misleading test docstring (328600f)
  • auth: refresh Postgres credentials per physical connection (9111d9b)
  • backend: bound BatchFilter.limit at 500 (68c8236)
  • backend: reject a NUL in JobFilter's text predicates (8ac867a)
  • backend: reject a NUL in ScheduleCreateArgs caller text (7572073)
  • backend: validate dst_strategy and DRY the strategy set (9c8710c)
  • batch: address adversarial review findings — docs, bugs, tests, types (e066ce0)
  • batch: resolve all PR #62 review findings — C1-C3, H1-H6, M1-M19 (28c665b)
  • bound add_listener calls with wait_for timeout (2f19188)
  • bound mid-run error-path closes (#38) (4768920)
  • bound worker teardown closes with wait_for + terminate-on-timeout (fc5559a)
  • bound worker teardown closes with wait_for + terminate-on-timeout (#37) (5d65b42)
  • bump BACKEND_PROTOCOL_VERSION to 3 for the list_jobs contract change (8a1896b)
  • cancel: clear cancel state on every retry arm, both backends (c06ba0e)
  • client: bound the schedule seed clock read on the pool (3e724cf)
  • client: cap sub-job batches, and bound two unindexed admin filters (a9ebcaf)
  • client: hand back a cursor for every ordering, and finish two dedupes (a01ddb9)
  • client: honour an explicit trace_id/span_id on JobsClient.enqueue (79ef633)
  • client: report capacity has_snapshot from refresh success, not row count (af22922)
  • cli: reject queue max_concurrent=0 before it hits the DB CHECK (c50205b)
  • close redis client on initialize() failure + tighten bounded-close tests (cd059d8)
  • close remaining unbounded closes and shutdown double-close race (2247801)
  • code review findings L1-L3 (8223898)
  • complete the clock_timestamp() database-clock invariant (bc5c395)
  • complete three half-applied invariants (dispatcher acquire timeout, CLI close bound, single-job tags NUL guard) (dfb41f4)
  • complete two half-applied invariants (schema re-validation, jsonb NUL guard) (0690e51)
  • concurrent deregistration safety, 404 for unknown actor, RETURNING for purge, spec doc fixes (8bf4c13)
  • concurrent test with real interleaving, audit trail assertions, fixture convergence, template/doc fixes (39a5767)
  • constants: anchor _IDENT_RE with \A/\Z so a trailing newline is rejected (e222be2)
  • consumer: always pass validated_payload to acquire_for_actor (12fd571)
  • consumer: validate payload before acquire; pass the validated model (b3f0bd4)
  • cron: detect and warn on cron schedule drift at startup (474600a)
  • cron: make a contended cron tick observable (eee9265)
  • cron: read dst_strategy back, so 'allof' and 'firstof' actually apply (7d7e01c)
  • deps: clear PYSEC-2026-3552 and PYSEC-2026-3721 from pip-audit (308478b)
  • deps: lower opentelemetry-api floor to 1.30.0 for Azure Monitor (7064035)
  • deps: move the uv required-version pin to the 0.12.x line (9959123)
  • deps: raise floors for two CVEs the security lane is failing on (6b19690)
  • deps: widen uv floor to 0.12.7 for Dependabot, track compose with docker-compose (4426288)
  • dispatch: bound the producer's pool acquire and re-validate its schema (61cd656)
  • e2e: align finalizer snooze_interval with test settings and fix gather anti-pattern (4888b10)
  • e2e: correct stage-2 tag count in test_sub_job_explicit_tags_merge_with_parent (2d310f1)
  • e2e: poll for cron job succeeded status instead of one-shot check (bcd1584)
  • enqueue: enforce NUL rejection at the EnqueueArgs chokepoint (9a4178a)
  • enqueue: make unique_for + identity_key actually single-flight (92d1d93)
  • enqueuer: explicit empty tags suppress inheritance instead of inheriting (5f01da5)
  • enqueuer: reject an empty sub-job batch before any connection use (97ef4af)
  • fail fast on ambiguous rate_limit_registry explicit+DI co-presence (3898267)
  • H1+M1+M5+M6 — wrap registry ValidationError, extract shared helper, fix runner (d018398)
  • hardcoded terminal statuses, missing actor registration, count_batch_non_terminal connection param (e297a3f)
  • harden JobFilter list path — schema re-validation, sort tie-break parity, input validation (7b15ed6)
  • harden queue-stranding warning, top-level status exports, in-memory expiry pins (96884d8)
  • heartbeat: always run run_post_tx, and heal a rolled-back phase-2 write (329acad)
  • idempotency_scope migration test handles 01.00.02_01 (#40) (b39f5cb)
  • in-memory result expiry, queue-stranding warning, grace default 75s (d0fcd79)
  • job handle fixes (9744c96)
  • JobsClient.list never emits an unusable cursor for non-default order_by (041c9c4)
  • jobs: emit batch-streaming-enqueued in kebab case (6fe38ce)
  • jobs: seed schedule next_fire_at from the due-check's clock domain (7183318)
  • keep every persisted/compared timestamp in the database clock domain (7565d3f)
  • leader: clear leader-only gauges on demotion (a742d13)
  • leader: keep the stranded-jobs detector reporting after the first tick (d9df857)
  • leader: log a schema-muted sampler as an error-level *-disabled event (36fd840)
  • leader: run the stale-batch sweep leader-gated, not under keyed-RL state (db1e28a)
  • M4+M7+M8+H2+L1-L8 — DRY helpers, docs, changelog, test hardening (a5120da)
  • make every in-memory get() return an isolated row copy (0b2b20a)
  • migrate: address PR #35 review feedback (caa3695)
  • migrate: lock migrate up and bound the advisory-lock wait (b9d080b)
  • migrate: report the truth for transaction-control guard rejections (c6fb4db)
  • migrate: tag the phase-ordering guard's exception with the offending migration (c722c26)
  • migrate: warn when the lock_timeout reset fails on a caller-owned conn (3d43fc3)
  • None-safe sweep fallback; drop dead store; stale provider module docstring (e8279b4)
  • obs: drop identity values from metric dimensions before they throttle ingestion (6a7368d)
  • obs: finalize kebab-case event names and job-failed docstrings (0c3132f)
  • obs: log the worker/workgroup identity that cron and supervisor events dropped (bb5a2cf)
  • obs: one event name for a state change, whichever backend logged it (bf3cfc7)
  • obs: redact last_error in cron auto-disable span event (fe425dc)
  • obs: render redacted exception detail on the JSON log channel (6f3aa16)
  • obs: replace an arbitrary 512-char message cap with the bound already in the tree (349c51b)
  • obs: scrub DETAIL/HINT/CONTEXT lines flattened by repr() (91412b5)
  • obs: scrub exception text before the LogRecord reaches ANY root handler (010a60a)
  • obs: scrub exception-bearing log fields through the redaction helpers (067ab80)
  • obs: scrub the terminal-write log's job/infra error fields (5c745ea)
  • obs: stop deleting HINT and CONTEXT, and let an operator turn redaction off (76a10cc)
  • obs: stop the OTel SDK re-emitting the exception text spans just scrubbed (87a47ab)
  • obs: surface capacity-cache fail-open as a metric, not just a log (cdef3ee)
  • ops: keep the queues row while non-terminal jobs still reference it (ebd61c3)
  • ops: record each force-cancelled job's real prev status in its event (b594fdc)
  • page every job-list ordering, by ordering id with the sort column (d8e9b20)
  • pass resolved_rl_registry to _served_redis_rate_limits instead of module singleton (758ac78)
  • ratelimit: bound the unbounded 1/refill quantities in TokenBucket (87a3df1)
  • ratelimit: drop payload embedding from key_fn ValueError messages (6b54fd5)
  • ratelimit: refund the store that actually paid, not the configured one (1e860fb)
  • read contracted columns by subscript, not by defaulting .get() (baaeec0)
  • redteam findings — clock completeness, concurrency guards, test robustness (246dc46)
  • register batch_abort_finalizer actor in e2e worker entry (af2ee48)
  • reject a NUL in a job payload at enqueue instead of looping forever (6dd167c)
  • reject a NUL in a job payload at enqueue instead of looping forever (a394047)
  • reject non-LOOP RateLimitRegistry value provider at bootstrap (fa5f038)
  • remove _revive_uuids from JSON deserialization — Pydantic owns type coercion (1e8aeaf)
  • remove dead now parameter from PG sweep functions (94b85e4)
  • remove invented caps, and two bugs they were hiding (40fdcd9)
  • reservation: fence slot release to the lease that acquired it (7230a1e)
  • reset-handler owned-registry round-trip test; None-safe setup_admin_state fallback (b2c3417)
  • resolve integration merge conflicts — lint, typecheck, and test fixes (4eea47a)
  • resolve pyright type error in test_batch_enqueue result attribute access (21c3cac)
  • retry: saturate exponential backoff instead of raising OverflowError (88726c7)
  • review findings + add full-stack client integration tests (f924c39)
  • ruff all sort in actor_config_ops.py (de3ebc6)
  • ruff format (76abb7f)
  • ruff format on test files (63c25ed)
  • settings: cap schema_name at Postgres' 63-byte identifier limit (7905fea)
  • settings: validate schema_name via a hook so validate=False cannot skip it (2538325)
  • settings: validate worker identity fields at load time (deddb16)
  • shared actor summaries, export ActorConfigRow, CLI schema test, e2e purge assertion, doc gaps (e609b16)
  • shutdown: model the bounded-close tail in the shutdown budget (270f169)
  • sso: thread session_max_age_seconds into the SAML config (1125953)
  • standardize 3 remaining non-kebab-case event names in _leader_sweeps.py (1ead8f1)
  • standardize leader connection close/keepalive labels (aaae997)
  • standardize structured log event names to kebab-case (80dbf30)
  • test: clear the SSE slot registry on BOTH sides of every test (8dd2aec)
  • test: drop the shadowed _ACQUIRE_TIMEOUT the watchdog commit left behind (b21dcdf)
  • testing: make ChaosPool honour acquire(timeout=) with real asyncpg semantics (235f32e)
  • testing: mirror PG's bind-time NUL guard for payload/metadata on InMemory enqueue (f7b3b23)
  • testing: read sweep-guard images live from docker-compose.yml (ebb90b2)
  • testing: scope the shared test pair and holder registry per invocation (350b0f0)
  • testing: track shared-pair references by live holder pid, not creator labels (c6ee1cc)
  • test: pass validated_payload in queue cap saturation test (950502b)
  • test: use None instead of MagicMock for finalizer_handle (type-safe) (5a4c869)
  • types: satisfy pyright strict on the hardening changes (8ea5677)
  • use gt=0 instead of ge=0.1 for interval settings (f4a1bf2)
  • validate settings that crash at runtime instead of load time (1b19d01)
  • validation: re-anchor the queue/tag/keyed-key regexes with \A...\Z (83ab3da)
  • validation: run the queue-name validator at the enqueue and actor chokepoints (2470b2f)
  • web: admin pages could be framed and UI-redressed; CSRF cookie lost Secure behind TLS termination (6d1b615)
  • web: admin session cookie was sent to the whole host origin, and an empty group allowlist was silent (b137be8)
  • web: cap concurrent SSE connections on both uncapped streams (1195d61)
  • worker: address PR #39 follow-up findings + parallel review fixes (c906187)
  • worker: address XBeg9's PR #39 follow-up findings (7d27029)
  • worker: bound the Redis drain retry instead of hanging on a wedged socket (188bcb2)
  • worker: exit-code contract, CLI rename, handler return values, validation (1348597)
  • worker: forget drain monitor liveness registration on exit (09e3774)
  • worker: register the drain monitor's worst-case tick gap (a3fe701)
  • worker: warn instead of silently ignoring TASKQ_MIGRATE_ON_START (4304558)

Performance Improvements

  • dispatch: write state-change events in one statement, not one per job (f66b53e)

Reverts

  • admin: _time_ago's int/float branches are unreachable and unguessable (1dcf9f9)
  • admin: the status-count cap only ever fired where the dedup already had (08dffc5)
  • backend: a limit cap on a listing with no cursor hides rows for good (e48c5ba)
  • enqueuer: keep tags=[] unioning with the parent's tags (e7652f9)
  • obs: schedule_id is a bounded operator-created set, not a per-process UUID (9bb30bc)

Documentation

  • add actor deregistration documentation (1042fcb)
  • add configuration and troubleshooting guides to index Next Steps (2b977cd)
  • add missing settings to configuration guide (6f8cdd1)
  • align keyed rate-limit growth phrasing with eviction scheduling (829c02e)
  • architecture rewrap + uv pin comment accuracy (15e8ee1)
  • clarify concurrency layers, capacity seeding and retry classification (#103) (5f69fa2)
  • close: caveat the teardown-tail model for the sibling-crash path (e1cc11e)
  • dispatch: stop documenting max_concurrent as a hard fleet-wide cap (4b9414b)
  • document cancel_where, sub-job tags, and tag inheritance (fea6db3)
  • document leader sweep interval settings added in #39 (b01dd7b)
  • document taskq.worker.actor_config → taskq.actor_config migration (f0d6320)
  • document watchdog subsystem, transient errors, and SIGUSR2 dump in architecture guide (9d17a7d)
  • drop the state-change breaking entry -- the rename never touched production (b9ec371)
  • e2e: reference the surviving chaos modules in the infra-free guard (89783fe)
  • fix doc-vs-code drift across extras, protocol listing, and guides (8018981)
  • fix stale keyed-eviction scheduling claim; robustify register snippet (bb96b97)
  • jobs: disclose that enqueue_batch_streaming never enforces max_pending (dcadc79)
  • jobs: state the caller-connection batch-row ordering and its counting gap (f6345d7)
  • note rate_limit_registry ambiguity TypeError and collection-log semantics in bootstrap (5b9cfb4)
  • obs: correct two claims the code does not support (130ed81)
  • ops: say what actually strands a deregistered actor's running job (a81beb7)
  • pg: note that verify-ca/verify-full need an explicit sslrootcert (55dec89)
  • rate-limit registry ownership model, testing patterns, architecture paragraph (d325f84)
  • record every consumer-visible change this consolidation ships (8563283)
  • record the seven consumer-visible changes 8563283 left out (fb5ce38)
  • settings: correct the environment field description to match shipped behavior (20a2dce)
  • soften prerequisites registration claim for actor-declared instances (6154b26)
  • state the server-anchored next_fire_at seeding truth in ScheduleCreateArgs (fedef48)
  • test: module docstring describes the inventory audit that replaced the grep (92a4e44)
  • test: record the triage of the static guards that survive the sweep (962fc29)
  • update Backend protocol listing in architecture guide (f6ec7c9)
  • update rate-limiting guide and architecture for typed key_fn (ebfb75c)
  • update workers.md, cli.md, architecture.md for until-idle mode (4f27c44)
  • upgrading: warn that capacity literals no longer win, and pin the asymmetry (043fa98)
  • worker: failure-log contract names the events that are actually emitted (ffbc79c)

Miscellaneous Chores

  • deps: bump dotenvmodel to >=1.0.0,<2, adopt 1.0 defaults, drop workarounds (ea22a66)

Code Refactoring

  • conftest unit-test isolation uses public RateLimitRegistry.clear() (da64077)
  • drop the clock parameters left dead by the DB-clock unification (b888823)
  • extract filter→SQL WHERE builder into _filter_sql.py (4262eeb)
  • extract filter→SQL WHERE builder into _filter_sql.py (3ca37a3)
  • move actor_config and actor_config_ops to top-level package (c2b1674)
  • obs: type the exc_info boundary honestly for pyright strict (7cbf553)
  • remove sub_job_inherit_tags kill switch (aa1fdfc)
  • resolve every remaining accepted-and-ignored parameter (4b9fc12)
  • style and architecture improvements in batch subsystem (dcd1643)

Continuous Integration

  • make uv usage locked, no-sync and interpreter-pinned (a19b732)
  • make uv usage locked, no-sync and interpreter-pinned (81d18ba)

This PR was generated with Release Please. See documentation.

@github-actions
github-actions Bot requested a review from rcbevans as a code owner July 27, 2026 21:10
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--taskq-py branch 6 times, most recently from 4733b5e to 97e1f36 Compare July 28, 2026 18:52
@github-actions github-actions Bot changed the title chore(main): release 0.3.0 chore(main): release 1.0.0 Jul 29, 2026
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--taskq-py branch 2 times, most recently from 7ba91c5 to c5a33e4 Compare July 30, 2026 04:32
@github-actions github-actions Bot changed the title chore(main): release 1.0.0 chore(main): release 0.3.0 Sep 2, 2026
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--taskq-py branch 13 times, most recently from 87ef3fa to 92a24b6 Compare September 8, 2026 03:29
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--taskq-py branch from 92a24b6 to f49217c Compare September 10, 2026 04:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

0 participants