Skip to content

Commit 4522113

Browse files
chore: add release notes for 1.13.4 (#399)
* chore: add release notes for 1.13.4 Adds product-updates page for v1.13.4 and a prep-product-update skill that generates future release pages from a GitHub release link. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: filter 1.13.4 changelog to issue-tracked fixes only Removes non-explanatory bullets and drops entries whose commits don't reference a GitHub issue; keeps CVE-scoped security bumps. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 7be8894 commit 4522113

3 files changed

Lines changed: 235 additions & 0 deletions

File tree

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
---
2+
name: prep-product-update
3+
description: Use when the user shares an OpenMetadata GitHub release link (github.com/open-metadata/OpenMetadata/releases/tag/X.Y.Z-release) or the product-updates page URL for a version, and wants the site's product update page prepared. Also use when asked to "prep the product update", "draft the changelog", "add release notes", or "generate the release page" for a new version of open-metadata-site.
4+
---
5+
6+
# Prep OpenMetadata Product Update
7+
8+
## Overview
9+
10+
The user maintains open-metadata-site (this repo). Each OpenMetadata release needs a matching markdown file under `content/product-updates/` and a metadata entry in `content/product-updates/versions.json`. This skill takes a release identifier (a GitHub release URL or the product-updates page URL) and produces both files in the exact style the site already uses.
11+
12+
## Inputs Accepted
13+
14+
- `https://github.com/open-metadata/OpenMetadata/releases/tag/X.Y.Z-release`
15+
- `https://open-metadata.org/product-updates#vX.Y.Z-changelog`
16+
- Bare version + link — anything containing `X.Y.Z` is enough to derive the tag.
17+
18+
## Workflow
19+
20+
Follow these steps in order. Do not skip.
21+
22+
### 1. Parse the version
23+
24+
Extract `X.Y.Z` from the link. The GitHub tag is `X.Y.Z-release`. The site version string is `vX.Y.Z`. The file is `content/product-updates/vX.Y.Z.md`.
25+
26+
### 2. Confirm the previous release
27+
28+
Read `content/product-updates/versions.json` to find the most recent published version. Use its tag (e.g. `1.13.3-release`) as the base for the GitHub compare. Note its `id` — the new file's `id` is `max(id) + 1`.
29+
30+
### 3. Pull the release notes and commit list
31+
32+
Try the release body first:
33+
34+
```bash
35+
rtk gh api repos/open-metadata/OpenMetadata/releases/tags/X.Y.Z-release | jq -r '.body'
36+
```
37+
38+
If `body` is `null` or empty (common when the release is still being cut), fall back to the compare API and paginate manually — 100 per page — because releases regularly exceed 100 commits and `--paginate` gets swallowed by rtk's jq filter:
39+
40+
```bash
41+
gh api "repos/open-metadata/OpenMetadata/compare/PREV-release...X.Y.Z-release?per_page=100&page=1" > /tmp/p1.json
42+
gh api "repos/open-metadata/OpenMetadata/compare/PREV-release...X.Y.Z-release?per_page=100&page=2" > /tmp/p2.json
43+
jq -r '.commits[] | "\(.sha[0:8]) \(.commit.message | split("\n")[0])"' /tmp/p*.json > /tmp/commits.txt
44+
```
45+
46+
Check `.total_commits` first to know how many pages to fetch.
47+
48+
### 4. Read the previous version file as a style reference
49+
50+
`content/product-updates/vPREV.md` shows the exact tone, grouping, and formatting for a maintenance release. Match it:
51+
52+
- **One-sentence release summary** at the top of `## Changelog`, calling out the themes (e.g. "connector reliability, search and lineage correctness, governance workflow stability").
53+
- **Group by area** using the emoji headings from `content/product-updates/README.md`:
54+
- 🔌 Connectors & Ingestion
55+
- 📊 Data Quality
56+
- 🔍 Search & Discovery
57+
- 🛡️ Data Governance & Quality
58+
- 🔗 Lineage
59+
- 🤖 MCP Server / Automations
60+
- 🔐 Authentication
61+
- ⚙️ Platform
62+
- 🎛️ UI
63+
- 🔒 Security
64+
- 📣 Notifications
65+
- ⚠️ Backward Incompatible Changes (only if present)
66+
- **Each bullet is one line**: `**Short problem statement** [#PR](url): what the fix does + why it matters.` Focus on user-facing symptoms, not internal refactors.
67+
68+
### 5. Filter commits
69+
70+
Drop from the changelog:
71+
72+
- CI / workflow tweaks (`ci:`, `test(playwright):`, `test(e2e):`, `fix(e2e):`, `chore:`, `build fix`, `nit`, "Revert" followed by a re-apply)
73+
- Merge commits and branch rebases
74+
- Version bump commit itself (`chore(release): bump version to X.Y.Z`)
75+
- Test flake fixes that don't affect end users
76+
- Anything that got reverted with no re-apply
77+
78+
Keep:
79+
80+
- Connector fixes with a named connector (Snowflake, Databricks, Oracle, BigQuery, MLflow, Tableau, Trino, Unity Catalog, Fivetran, KafkaConnect, ADLS, BurstIQ, etc.)
81+
- Security bumps that clear a specific CVE or upgrade a runtime (Debian, Python, netty, thrift, BouncyCastle, httpclient5, c3p0, sqlparse, libthrift, etc.) — group these together under 🔒 Security
82+
- Search, lineage, governance, workflow, and MCP fixes
83+
- Backend fixes with visible impact (async delete, pagination, API endpoints, permissions)
84+
- Real UI regressions and new UI affordances
85+
- **Migrations** — always call these out (search for "migration" in the commit body if unsure)
86+
- Anything explicitly marked "Fixes #NNNN"
87+
88+
If a fix was reverted, then re-applied later in the same release, cite the final PR only.
89+
90+
### 6. Look up PR titles when unclear
91+
92+
The commit subject is usually enough. If a subject is opaque, fetch the PR body:
93+
94+
```bash
95+
gh pr view NNNN --repo open-metadata/OpenMetadata --json title,body
96+
```
97+
98+
Do this sparingly — batch grouping decisions from the subjects first.
99+
100+
### 7. Write the file
101+
102+
Path: `content/product-updates/vX.Y.Z.md`. Frontmatter:
103+
104+
```markdown
105+
---
106+
id: NEXT_ID
107+
version: vX.Y.Z
108+
date: Released on Nth <Month> YYYY.
109+
---
110+
```
111+
112+
- `date` — parse the release's `published_at` from the GitHub API. Format is the site's convention: `Released on 21st August 2026.` with ordinal suffix (`1st`, `2nd`, `3rd`, `4th`…).
113+
- Body starts with `## Changelog` on line 8 (one blank line above), matching the previous file.
114+
115+
### 8. Update versions.json
116+
117+
Prepend the new version to the array in `content/product-updates/versions.json`:
118+
119+
```json
120+
{
121+
"version": "vX.Y.Z",
122+
"date": "Released on Nth <Month> YYYY.",
123+
"hasFeatures": false
124+
},
125+
```
126+
127+
Set `hasFeatures` to `true` only if the release has a `## Features` section with actual product features (not maintenance fixes). For every `X.Y.Z` patch release, `hasFeatures` is `false`.
128+
129+
### 9. Verify
130+
131+
Before reporting done:
132+
133+
- `rtk proxy grep "^id:" content/product-updates/*.md | sort -t: -k2 -n | tail` — confirm no duplicate IDs.
134+
- Open `versions.json` and check the new entry is first and the JSON is still valid.
135+
- Skim the generated markdown once — every bullet should read as a sentence a user cares about, every link should point at a real PR.
136+
137+
## Style Rules (do not violate)
138+
139+
- **One line per fix.** No sub-bullets, no paragraphs.
140+
- **Bold the problem, not the fix.** Users scan for symptoms.
141+
- **Cite the merged PR**, not the linked issue. Link format: `[#NNNNN](https://github.com/open-metadata/OpenMetadata/pull/NNNNN)`.
142+
- **Never fabricate PR numbers.** If you can't find the PR, leave the commit SHA link: `[\`abcdef12\`](https://github.com/open-metadata/OpenMetadata/commit/abcdef12345…)`.
143+
- **No emojis in bullet text**, only in section headings.
144+
- **No "we", "our", "the team".** Third-person, present tense.
145+
- **Group carry-forwards from the previous release only when they were actively reinforced** (a follow-up fix in this release). Otherwise skip — don't rehash last version's changelog.
146+
147+
## Quick Reference
148+
149+
| Task | Command |
150+
|---|---|
151+
| Release body | `gh api repos/open-metadata/OpenMetadata/releases/tags/X.Y.Z-release \| jq -r '.body'` |
152+
| Compare commits | `gh api "repos/open-metadata/OpenMetadata/compare/PREV-release...X.Y.Z-release?per_page=100&page=N"` |
153+
| PR detail | `gh pr view NNNN --repo open-metadata/OpenMetadata --json title,body` |
154+
| Next id | `grep "^id:" content/product-updates/*.md \| awk -F: '{print $NF+0}' \| sort -n \| tail -1` |
155+
| Published date | `gh api repos/open-metadata/OpenMetadata/releases/tags/X.Y.Z-release \| jq -r '.published_at'` |
156+
157+
## Common Mistakes
158+
159+
- **Skipping pagination.** `--paginate` + `jq -s` looks fine but silently truncates when the compare exceeds a page. Always check `.total_commits` and fetch page-by-page.
160+
- **Copying the raw commit list.** The changelog is curated, not a mirror of `git log`. If a bullet doesn't have a user-facing effect, drop it.
161+
- **Wrong id.** New files continue the counter from the highest existing `id:`, not from the previous version's id + 1 (patches can be out of order — always take the max).
162+
- **`hasFeatures: true` on a patch.** A patch never has a Features section. Only major/minor releases do.
163+
- **Guessed dates.** Read `published_at` from the GitHub API; don't guess from the tag name.
164+
165+
## Verification Checklist
166+
167+
Before ending the turn:
168+
169+
- [ ] `content/product-updates/vX.Y.Z.md` exists with the correct frontmatter.
170+
- [ ] `content/product-updates/versions.json` has the new entry as its first element.
171+
- [ ] Every PR link is a real PR on `open-metadata/OpenMetadata`.
172+
- [ ] Every reverted-and-not-reapplied change is absent.
173+
- [ ] The one-sentence intro names the themes, not just "maintenance release".
174+
- [ ] Migrations are called out explicitly.
175+
- [ ] Security section groups CVE bumps together with the CVE ID where known.

content/product-updates/v1.13.4.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
---
2+
id: 121
3+
version: v1.13.4
4+
date: Released on 21st August 2026.
5+
---
6+
7+
8+
## Changelog
9+
10+
OpenMetadata 1.13.4 is a maintenance release focused on connector reliability, search and lineage correctness, governance and MCP fixes, and a broad security cleanup across ingestion and platform dependencies.
11+
12+
### 🔌 Connectors & Ingestion
13+
14+
- **Hive: test connection failed when no metastore was selected** [#30380](https://github.com/open-metadata/OpenMetadata/issues/30380): The metastore step is optional again, restoring the pre-1.13 behaviour for Hive services that don't front a metastore.
15+
- **Oracle: view definitions truncated by bulk LONG fetch** [#30319](https://github.com/open-metadata/OpenMetadata/issues/30319): Falls back to a per-view fetch when the bulk LONG read truncates, recovering full view DDL for downstream lineage.
16+
- **BigQuery: dataset and table object caches collide across schemas** [#30973](https://github.com/open-metadata/OpenMetadata/issues/30973): Caches are keyed per schema, preventing cross-schema object collisions on large projects.
17+
- **Fivetran: lineage lost when service names are unset; Table → Topic edges missing** [#31265](https://github.com/open-metadata/OpenMetadata/issues/31265): Falls back cleanly when service names are missing and adds Table → Topic lineage support.
18+
- **KafkaConnect: Debezium lineage broken on single-database services** [#31280](https://github.com/open-metadata/OpenMetadata/issues/31280): Debezium source lineage now resolves against single-database KafkaConnect services.
19+
- **BurstIQ: invalid system wallet failing silently** [#29727](https://github.com/open-metadata/OpenMetadata/issues/29727): Test connection surfaces an invalid system wallet with an actionable error.
20+
- **Table-owner extraction using the inspector instead of the dialect** [#31479](https://github.com/open-metadata/OpenMetadata/issues/31479): The owner extractor now dispatches on the SQL dialect, matching how the rest of the connector routes queries.
21+
- **Lineage parser: rows without a table name reaching the DB** [#31523](https://github.com/open-metadata/OpenMetadata/issues/31523): Parsed table references with no table name are skipped rather than persisted as broken rows.
22+
23+
### 🔍 Search & Discovery
24+
25+
- **Inherited domain lost on descendants when an asset is moved** [#30678](https://github.com/open-metadata/OpenMetadata/issues/30678): Moving an asset now propagates the inherited domain to all descendants in search.
26+
- **Search connection pool starvation** [#31658](https://github.com/open-metadata/OpenMetadata/issues/31658): Bounds `httpclient5` connection-request timeouts so the search client stops starving under load.
27+
28+
### 🛡️ Data Governance & Quality
29+
30+
- **Read authorization depending on the requested fields projection** [#29835](https://github.com/open-metadata/OpenMetadata/issues/29835): Read authorization is now independent of the `fields` query parameter, closing a projection-based bypass.
31+
- **Orphan test case 404s the whole test case listing** [#31379](https://github.com/open-metadata/OpenMetadata/issues/31379): A single stale test case no longer breaks paginated test-case listings.
32+
- **Any-language recognizer normalization** [#28883](https://github.com/open-metadata/OpenMetadata/issues/28883): Recognizers behave consistently regardless of source language.
33+
34+
### 🤖 MCP Server
35+
36+
- **CORS headers, unused capability, and OAuth `iss` parameter** [#30673](https://github.com/open-metadata/OpenMetadata/issues/30673): Fixes MCP CORS headers, removes the unused resources capability, and populates the OAuth `iss` parameter.
37+
- **Null `protected_resource_metadata` in the discovery response** [#30642](https://github.com/open-metadata/OpenMetadata/issues/30642): Omits the field entirely when unset instead of returning `null`.
38+
39+
### ⚙️ Platform
40+
41+
- **`/metadata/types/customProperties` returning non-custom properties** [#31171](https://github.com/open-metadata/OpenMetadata/issues/31171): The endpoint returns only custom properties, matching its name.
42+
- **Container re-parenting via PATCH** [#24294](https://github.com/open-metadata/OpenMetadata/issues/24294): Containers can be re-parented through PATCH like other hierarchical assets.
43+
- **Data Product reference indexing** [#30387](https://github.com/open-metadata/OpenMetadata/issues/30387): Search stays consistent after linked-entity updates on Data Products.
44+
45+
### 🎛️ UI
46+
47+
- **Related terms `+N` badge not expandable** [#31009](https://github.com/open-metadata/OpenMetadata/issues/31009): The `+N` badge on glossary related terms is clickable to reveal the full list.
48+
- **Query Tab: UI backend integration** [#30688](https://github.com/open-metadata/OpenMetadata/issues/30688): UI-side backend calls for the Query Tab align with the current API surface.
49+
- **Queries tab: badge count skeleton while loading** [#31688](https://github.com/open-metadata/OpenMetadata/issues/31688): The Queries tab shows a skeleton in the badge while the count fetches, instead of flashing `0`.
50+
51+
### 🔒 Security
52+
53+
- **`netty` → 4.1.137.Final** for CVE-2026-59903 [#31792](https://github.com/open-metadata/OpenMetadata/pull/31792).
54+
- **`c3p0` 0.12.0 → 0.14.1** for CVE-2026-55223 [#31458](https://github.com/open-metadata/OpenMetadata/pull/31458).
55+
- **`httpcore5` pinned to 5.4.3** for CVE-2026-54399 [#31513](https://github.com/open-metadata/OpenMetadata/pull/31513).

content/product-updates/versions.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
[
2+
{
3+
"version": "v1.13.4",
4+
"date": "Released on 21st August 2026.",
5+
"hasFeatures": false
6+
},
27
{
38
"version": "v1.13.3",
49
"date": "Released on 31st July 2026.",

0 commit comments

Comments
 (0)