Skip to content

chore(release): cut v1.0.0 — a new foundation for production Vision AI#98

Merged
stwilt merged 4 commits into
mainfrom
chore/release-v1.0.0
May 19, 2026
Merged

chore(release): cut v1.0.0 — a new foundation for production Vision AI#98
stwilt merged 4 commits into
mainfrom
chore/release-v1.0.0

Conversation

@stwilt

@stwilt stwilt commented May 17, 2026

Copy link
Copy Markdown
Contributor

📋 What does this PR do?

OpenFilter 1.0. Bumps VERSION to v1.0.0 and adds the 1.0 release notes to RELEASE.md. v0.2.1's entry stays below as preserved history of the preview cycle.

🔍 Why is this needed?

OpenFilter 1.0 transitions the runtime from an evolving framework into a stable, production-grade platform. The typed declarative-config surface (FilterConfigBase, FilterOutputSchema, the openfilter emit-schema CLI) introduced during the v0.2.x preview cycle is committed as 1.0's public API. Filters can rely on these surfaces under SemVer.

OpenFilter 1.0 ships 2026-05-18.

🧪 How was it tested?

  • VERSION and RELEASE.md agree on v1.0.0.
  • changelog-parser-action parses the new header cleanly.

🔗 Related Issues

✅ Checklist

  • I have read and agreed to the terms of the LICENSE
  • I have read the CONTRIBUTING guide
  • I have followed the coding style
  • I have signed all commits in compliance with the DCO (git commit -s)
  • I have added or updated tests as needed (no test impact; release-notes + version-bump only)
  • I have added or updated documentation as needed (this PR is the documentation change — release notes for 1.0)

OpenFilter 1.0. Bumps `VERSION` to `v1.0.0` and adds the 1.0 release
notes to `RELEASE.md`. v0.2.1's entry stays below as preserved history
of the preview cycle.

OpenFilter 1.0 transitions the runtime from an evolving framework into
a stable, production-grade platform. The typed declarative-config
surface (`FilterConfigBase`, `FilterOutputSchema`, the `openfilter
emit-schema` CLI) introduced during the v0.2.x preview cycle is
committed as 1.0's public API. Filters can rely on these surfaces
under SemVer.

OpenFilter 1.0 ships 2026-05-18.

- `VERSION` and `RELEASE.md` agree on `v1.0.0`.
- `changelog-parser-action` parses the new header cleanly.

- [FILTER-441](https://plainsight-ai.atlassian.net/browse/FILTER-441) —
  typed `FilterConfigBase` + `emit_schema`
- [FILTER-442](https://plainsight-ai.atlassian.net/browse/FILTER-442) —
  `emit-schema` CLI
- [FILTER-444](https://plainsight-ai.atlassian.net/browse/FILTER-444) —
  `FilterOutputSchema` + shape catalog
- [FILTER-452](https://plainsight-ai.atlassian.net/browse/FILTER-452) —
  `$id` inheritance fix
- [FILTER-461](https://plainsight-ai.atlassian.net/browse/FILTER-461) —
  Python 3.10 shutdown race
- [FILTER-462](https://plainsight-ai.atlassian.net/browse/FILTER-462) —
  release-pipeline cascade trigger

- [x] I have read and agreed to the terms of the [LICENSE](../LICENSE)
- [x] I have read the [CONTRIBUTING](../CONTRIBUTING.md) guide
- [x] I have followed the [coding style](../CONTRIBUTING.md#coding-style)
- [x] I have signed all commits in compliance with the DCO (`git commit -s`)
- [x] I have added or updated **tests** as needed (no test impact;
      release-notes + version-bump only)
- [x] I have added or updated **documentation** as needed (this PR
      *is* the documentation change — release notes for 1.0)

Signed-off-by: stwilt <swilt@plainsight.ai>
@stwilt stwilt requested a review from lucasmundim May 17, 2026 18:03

@shingonoide shingonoide left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for cutting v1.0.0. The VERSION / RELEASE.md pairing is consistent and the version-match check at .github/workflows/create-release.yaml:67-80 will pass. Three observations before workflow_dispatch fires.

1. Release date stamped one day in the futureRELEASE.md:5

## v1.0.0 - 2026-05-18

Today is 2026-05-17. If the workflow is triggered today the published GH release notes will carry tomorrow's date while the actual PyPI/Docker publish timestamps will be today's. Either advance the heading to 2026-05-17 or hold the workflow_dispatch until 2026-05-18.

2. ResolveHint is a public export not covered by stability commitmentsopenfilter/filter_runtime/__init__.py:8,56; RELEASE.md:39-43

ResolveHint is imported and listed in __all__ of openfilter.filter_runtime, but the "Stability commitments" section commits only FilterConfigBase (with Managed/Resolve), FilterOutputSchema+shape catalog, and openfilter emit-schema. ResolveHint is the Literal that parameterizes the resolve= argument of Managed/Resolve, so callers annotating their config fields with it are implicitly relying on it. Either add it to the committed surface or document it as explicitly excluded so a future rename does not require a 2.0 bump.

3. Conflicting `dev` groups across PEP 621 and PEP 735 — `pyproject.toml:61-71` and `:123-127`

`dev` is defined under `[project.optional-dependencies]` (PEP 621, ~10 packages including `pytest`, `twine`, `build`) and again under `[dependency-groups]` (PEP 735, only `pytest>=9.0.2` and `pytest-benchmark>=5.1.0`). The two groups give silently different environments depending on the tool: `pip install ".[dev]"` resolves the PEP 621 set while `uv sync --group dev` resolves the PEP 735 set. For a v1.0.0 cut it would be worth either consolidating to one source of truth or renaming one of the groups (e.g. `dev-bench`) so the divergence is explicit.

No blockers found. Items unchanged from prior reviews still apply: VERSION match check, changelog-parser format, breaking-change docs for `OTLP_GRPC_ENDPOINT_SECURITY` and `frame.image` read-only, cascade tag pattern matching `v1.0.0`, and `GH_BOT_USER_PAT` wiring all look correct.

- RELEASE.md: correct the release-date heading to 2026-05-17 (was
  2026-05-18, one day ahead — would have led the actual PyPI/Docker
  publish timestamps on the day of dispatch).
- RELEASE.md: extend the stability commitments to name the ResolveHint
  literal that parameterizes Managed/Resolve. Callers annotating their
  config fields with explicit ResolveHint were already implicitly
  depending on it; committing it explicitly means a future rename
  requires a 2.0 bump rather than silently breaking type-annotated
  consumers.
- pyproject.toml: drop the orphaned PEP 735 [dependency-groups] block.
  Nothing under Makefile / CI / docs / scripts uses `uv sync --group`
  or `--group dev`; the canonical dev install is `pip install -e
  .[all,dev]` via the PEP 621 extra (Makefile:82). The PEP 735 dev
  group held a strict subset of the PEP 621 dev extra (pytest +
  pytest-benchmark only, vs 9 packages including build / twine /
  pytest-cov), so `uv sync --group dev` would have silently produced
  a different dev env than the documented install path.

Signed-off-by: stwilt <swilt@plainsight.ai>
@stwilt stwilt requested a review from shingonoide May 18, 2026 01:14

@lucasmundim lucasmundim left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code review

Approving. Two non-blocking suggestions inline:

  1. v1.0.0's preamble frames the release as additive ("filters built against earlier versions keep running unchanged"), and ### Breaking Changes only lists the OTLP scheme inference (#90). The Frame.image read-only break introduced in v0.1.28 is a real source-incompatible change with explicit migration notes. Consumers who skip the preview cycle and jump straight to 1.0 lose that signal. Either re-surface it under v1.0.0 ### Breaking Changes, or soften the preamble.

  2. Section order in the new v1.0.0 entry is Fixed -> Removed -> Infrastructure. Keep-a-Changelog and the prior v0.1.30 entry put Removed before Fixed. Same nit raised on #96 but not addressed; recurring here.

Comment thread RELEASE.md
Comment thread RELEASE.md

@shingonoide shingonoide left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks. Re-review against ff1566e:

  1. Release dateRELEASE.md:5 now reads ## v1.0.0 - 2026-05-17. Addressed.
  2. ResolveHint in stability commitmentsRELEASE.md:41 explicitly names the ResolveHint literal alongside FilterConfigBase / Managed / Resolve. Addressed.
  3. PEP 735 [dependency-groups] — removed from pyproject.toml; PEP 621 [project.optional-dependencies].dev remains the single source of truth, consistent with the .[all,dev] install path at Makefile:82. Addressed.

Approving.

- Re-surface the v0.1.28 `Frame.image` read-only break under v1.0's
  ### Breaking Changes. v1.0 is the SemVer-stable rollup of the
  preview cycle, so users upgrading from pre-v0.1.28 directly to
  v1.0.0 need this listed under v1.0's breaking section, not buried
  under the v0.1.28 preview-cycle entry. Includes the same migration
  guidance (`image = frame.image.copy()` / construct new frame) and
  symptom (`ValueError: assignment destination is read-only`) as the
  v0.1.28 source entry.
- Tighten the preamble so it no longer claims every addition is
  additive — that claim is contradicted by ### Breaking Changes
  existing at all. Point readers there for behavioral changes; the
  "purely additive" framing now correctly scopes only to the typed
  config surface coexisting with `dict`-based FilterConfig.
- Reorder ### Removed before ### Fixed under v1.0 to match the
  Keep-a-Changelog canonical ordering (https://keepachangelog.com)
  and the precedent set by the v0.1.30 entry already in this file.

Signed-off-by: stwilt <swilt@plainsight.ai>

@lucasmundim lucasmundim left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review against bfba5af. Both items from my prior approval are addressed:

  1. frame.image read-only break is re-surfaced under v1.0.0 ### Breaking Changes with explicit migration guidance and the ValueError symptom; preamble at RELEASE.md:7 softened to scope behavioral changes to the list. Addressed.
  2. Section order swapped to Removed -> Fixed -> Infrastructure, matching Keep-a-Changelog and v0.1.30. Addressed.

Approving. One small date-stamp observation inline.

Comment thread RELEASE.md Outdated
Per lucasmundim's inline review on PR #98 (RELEASE.md:5), today's UTC
date is 2026-05-18 and the heading still read 2026-05-17. Bumping the
stamp so the published GH release notes align with the same-day PyPI /
Docker publish timestamps.

Signed-off-by: stwilt <swilt@plainsight.ai>

@lucasmundim lucasmundim left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review against c31ede6. Date bump from 2026-05-172026-05-18 addresses my prior inline comment — RELEASE.md:5 now matches today's UTC date and the imminent publish timestamps. No other changes since bfba5af. VERSION/RELEASE.md heading agree on v1.0.0 and the create-release version-match check will pass.

Approving. Safe to fire workflow_dispatch.

@stwilt stwilt merged commit 85e17c3 into main May 19, 2026
11 checks passed
@stwilt stwilt deleted the chore/release-v1.0.0 branch May 19, 2026 16:50
Sign up for free to 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.

3 participants