Rosetta Release Notes
Generate or iterate on release notes for cardano-rosetta-java by investigating git diffs between version tags.
Modes
- From scratch: generate all manual sections (opening, Key Improvements, Upgrade / Compatibility, API / Configuration) from git investigation
- Iterate on existing: fetch current release with
gh release view <tag>, identify gaps or writing issues in specific sections, propose targeted improvements
Repo context
- Repo:
cardano-foundation/cardano-rosetta-java
- Rosetta endpoints:
/block, /block/transaction, /account/balance, /account/coins, /search/transactions, /construction/preprocess, /construction/payloads, /construction/metadata, /construction/parse, /construction/combine, /construction/submit, /construction/hash, /construction/derive, /network/list, /network/status, /network/options, /mempool, /mempool/transaction
- API spec:
api/src/main/resources/rosetta-specifications-1.4.15/api.yaml
- Env files:
.env.docker-compose (production mainnet), .env.docker-compose-preprod (production preprod), .env.h2 / .env.h2-testdata (local dev/test), .env.IntegrationTest (CI). Changes in .env.docker-compose are production-facing and belong in release notes. Changes only in .env.h2 or .env.IntegrationTest are not user-facing.
- Error types:
api/src/main/java/org/cardanofoundation/rosetta/common/enumeration/RosettaErrorType.java
- Operation types:
api/src/main/java/org/cardanofoundation/rosetta/common/enumeration/OperationType.java
- Docs site:
https://cardano-foundation.github.io/cardano-rosetta-java/docs/
Investigation workflow
1. Identify version range
Determine the two tags to compare. User provides them or infer from context (e.g., "2.1.0 release notes" → compare 2.0.0..2.1.0). Verify tags exist with git tag.
2. Fetch existing release notes (if iterating)
Run gh release view <new-tag>. Note what's already written — avoid duplicating content across sections.
3. Investigate diffs (parallel)
Run these in parallel:
- API spec:
git diff <old>..<new> -- api/src/main/resources/rosetta-specifications-1.4.15/api.yaml
- Env files:
git diff <old>..<new> -- .env.docker-compose .env.h2 .env.IntegrationTest
- Production code (stat only):
git diff <old>..<new> --stat -- api/src/main/java/ yaci-indexer/src/main/java/
- Java test changes (stat only):
git diff <old>..<new> --stat -- api/src/test/java/ (exclude load tests)
- Python test changes (stat only):
git diff <old>..<new> --stat -- tests/ (exclude load tests)
- Error types:
git diff <old>..<new> -- api/src/main/java/org/cardanofoundation/rosetta/common/enumeration/RosettaErrorType.java
- Operation types:
git diff <old>..<new> -- api/src/main/java/org/cardanofoundation/rosetta/common/enumeration/OperationType.java
- Exception handler:
git diff <old>..<new> -- api/src/main/java/org/cardanofoundation/rosetta/common/exception/
- Documentation pages:
git diff <old>..<new> --stat -- docs/
4. Deep-dive into test changes
Tests are the best clue for API-visible behavior changes. Classify each change:
- HTTP status change → API-visible, likely breaking
- Response body/shape change → API-visible
- New error codes → API-visible
- New operations in responses → API-visible
- Test data value changes (balances, counts, hashes) → check production code. If only test-data-generator changed, NOT an API behavior change
- Internal refactors (class renames, method signatures) → NOT API-visible
- Test infrastructure (base classes, Allure migration) → NOT API-visible
5. Verify every claim against diffs
Every claim in the release notes must be backed by a specific line in a diff. If you can't point to the diff line, the claim is fabricated.
Rule 1: no diff evidence = no claim. For every env var change, every "new" feature, every behavior change — cite the actual diff. Don't infer changes from commit messages or code structure alone.
Rule 2: check existence in previous version. A diff only shows what changed — it won't show things that already existed. When claiming something is "new" (new error code, new field, new operation), always verify it didn't exist in the previous tag:
git show <old-tag>:<file> | grep "PATTERN"
If it's already there, the change is behavioral (how it's used), not additive (new code).
Rule 3: distinguish preparation from exposure. A dependency enabled in the indexer (e.g., governance starter uncommented) is NOT an API change unless an endpoint actually exposes that data in this version. Check whether production controller/service code uses the new capability before claiming it as an API-visible change.
6. Write the sections
Follow the format and rules below for each section.
Release page structure
The GitHub release page has these sections:
- Title + opening paragraph — one-liner summary of the release
- Key Improvements — bullet list of high-level features/changes
- Upgrade / Compatibility — upgrade path, resync requirements, infrastructure breaking changes
- API / Configuration — explicit API and env var changes with affected endpoints
- What's Changed — auto-generated by GitHub (list of merged PRs)
- New Contributors — auto-generated by GitHub
Sections 5 and 6 are auto-generated — never touch them. The skill covers sections 1–4.
Detail level by section
Each section has a distinct role. Never repeat the same information across sections.
| Section |
Role |
Detail level |
| Title + opening |
Theme of the release |
One sentence, no specifics |
| Key Improvements |
What changed |
One line per feature, no field names, no endpoint paths, no technical values. Just the human-readable summary. |
| Upgrade / Compatibility |
What the operator must do |
Migration steps, resync scope, removed infra. Don't re-explain features — just say what action is needed. |
| API / Configuration |
Technical precision |
Endpoint paths, field names, old→new values, breaking details. This is where the specifics live. |
Section formats and rules
Title + opening paragraph
# Cardano Rosetta Java vX.Y.Z
Cardano Rosetta Java vX.Y.Z introduces [concise summary of the release theme].
Keep it to one sentence. Don't repeat what's in Key Improvements.
Key Improvements
## Key Improvements
- [Feature/change description with relevant links]
- [Another feature]
Rules:
- Only externally visible changes — include only what an API consumer or deployment operator would notice. Internal config properties, dependency wiring, or build-only changes don't belong here.
- High-level only — one line per feature describing what changed in plain language. Do NOT include endpoint paths (like
/network/status), field names (like sync_status.stage), specific values (like SYNCING, APPLYING_INDEXES), env var names, or technical implementation details (like JOOQ classes, peer selection randomization). Those belong in API / Configuration.
- Good: "Sync status now reports three stages, giving operators visibility into progress and index readiness"
- Bad: "
/network/status now includes a stage field in sync_status with values SYNCING, APPLYING_INDEXES, and LIVE"
- Use consistent capitalization for domain terms:
DRep (not dRep), SPO, CIP-129
- Link CIPs inline:
[CIP-129](https://cips.cardano.org/cip/CIP-0129)
- Keep bullets self-contained — each should make sense without reading the others
- No repetition within the section — never mention the same feature, link, or docs page in multiple bullets. If a docs page relates to a feature, link it inline in that feature's bullet.
- Docs pages go inline — link new docs pages in the relevant feature bullet. Do NOT create a separate "New documentation" bullet unless the page has no parent feature to attach to.
- Attribute benefits precisely — if a performance gain comes from multiple changes, name them all or use neutral phrasing. Don't credit only one.
Upgrade / Compatibility
## Upgrade / Compatibility
- **From vX.Y.Z**: [compatible / requires resync / specific migration steps]
- **From older versions**: [compatibility notes]
- [Any removed deployment methods, changed defaults, or infrastructure breaking changes]
Always answer these questions:
- Can users upgrade from the previous minor/patch version without resync?
- Can users upgrade from older major versions?
- Were any deployment methods or infrastructure components removed or changed (e.g., containers removed, new sidecar services required)?
- When resync is required, what is the scope? Specify "yaci-indexer resync only (Cardano Node data can be kept)" — schema/PG changes affect the indexer database, NOT the Cardano Node blockchain data. Link to the resync procedure.
Notes:
- Environment variable and configuration changes belong in API / Configuration, not here.
- Don't re-explain features already covered in Key Improvements. Focus on what the operator needs to do, not what the feature is.
API / Configuration
Uses bullet points with bold title + indented detail.
Ordering rules
- Breaking API behavior changes first (bold "Breaking:" prefix) — reserve "Breaking:" for changes to endpoint responses, status codes, or request formats that require client code updates. Env var renames/removals are NOT "Breaking:" items — they go in the environment updates list.
- Endpoint-specific changes next (group by endpoint path)
- Environment variable updates last — grouped under a single
**Environment updates:** header as a flat list, NOT as individual bold-title bullets. Use old value → new value format.
Content rules
- Each item is a bullet with bold title, detail indented below
- Every change must name the affected endpoints explicitly
- Cross-cutting changes must list ALL affected endpoints in parentheses
- Only API behavior and env var changes — internal library version bumps (pom.xml dependencies like Yaci Store, client-lib) don't belong here unless exposed as user-facing env vars. Internal preparations (e.g., governance starter enabled but no endpoint serving the data) are not API changes.
- Add inline links to project docs and external specs where relevant:
- Do NOT link to generic external references unless truly necessary
- Environment updates: group under a single
**Environment updates:** header as a flat bullet list. Show old value → new value. For removed vars, show the old value and note "(removed)". For new vars, show the value and note "(new)".
Writing rules
Evidence rules
- No diff evidence = no claim — every change asserted must map to a specific line in a git diff
- "New" means absent in previous version — verify with
git show <old-tag>:<file> | grep "PATTERN"
- Value changes require diff proof — cite both old and new lines from the diff
- Tests are clues, not proof — always cross-check with
src/main/java changes
- Test data regeneration is not a bug fix — if only
test-data-generator/ changed, endpoint behavior is unchanged
Visibility rules
- Only externally visible changes — API consumers and deployment operators. Internal config, dependency wiring, or build changes don't qualify.
- Preparation ≠ exposure — enabling a dependency is NOT an API change unless endpoint code actually serves that data in this version
- Scope matters —
.env.docker-compose = production. Changes only in .env.h2 or .env.IntegrationTest are not user-facing.
Examples
See references/examples.md for complete v2.0.0 and v2.1.0 examples.
1---2name: rosetta-release-notes3description: Generate or improve release notes for cardano-rosetta-java GitHub releases. Covers all manually-written sections: opening paragraph, Key Improvements, Upgrade / Compatibility, and API / Configuration. Use when the user asks to write, draft, update, or iterate on release notes for cardano-rosetta-java, or when comparing versions to identify API-visible changes. Triggers on keywords like 'release notes', 'api changes between versions', 'what changed in v2.x', 'draft release notes'.4---56# Rosetta Release Notes78Generate or iterate on release notes for cardano-rosetta-java by investigating git diffs between version tags.910## Modes1112- **From scratch**: generate all manual sections (opening, Key Improvements, Upgrade / Compatibility, API / Configuration) from git investigation13- **Iterate on existing**: fetch current release with `gh release view <tag>`, identify gaps or writing issues in specific sections, propose targeted improvements1415## Repo context1617- **Repo**: `cardano-foundation/cardano-rosetta-java`18- **Rosetta endpoints**: `/block`, `/block/transaction`, `/account/balance`, `/account/coins`, `/search/transactions`, `/construction/preprocess`, `/construction/payloads`, `/construction/metadata`, `/construction/parse`, `/construction/combine`, `/construction/submit`, `/construction/hash`, `/construction/derive`, `/network/list`, `/network/status`, `/network/options`, `/mempool`, `/mempool/transaction`19- **API spec**: `api/src/main/resources/rosetta-specifications-1.4.15/api.yaml`20- **Env files**: `.env.docker-compose` (production mainnet), `.env.docker-compose-preprod` (production preprod), `.env.h2` / `.env.h2-testdata` (local dev/test), `.env.IntegrationTest` (CI). Changes in `.env.docker-compose` are production-facing and belong in release notes. Changes only in `.env.h2` or `.env.IntegrationTest` are not user-facing.21- **Error types**: `api/src/main/java/org/cardanofoundation/rosetta/common/enumeration/RosettaErrorType.java`22- **Operation types**: `api/src/main/java/org/cardanofoundation/rosetta/common/enumeration/OperationType.java`23- **Docs site**: `https://cardano-foundation.github.io/cardano-rosetta-java/docs/`2425## Investigation workflow2627### 1. Identify version range2829Determine the two tags to compare. User provides them or infer from context (e.g., "2.1.0 release notes" → compare `2.0.0..2.1.0`). Verify tags exist with `git tag`.3031### 2. Fetch existing release notes (if iterating)3233Run `gh release view <new-tag>`. Note what's already written — avoid duplicating content across sections.3435### 3. Investigate diffs (parallel)3637Run these in parallel:3839- **API spec**: `git diff <old>..<new> -- api/src/main/resources/rosetta-specifications-1.4.15/api.yaml`40- **Env files**: `git diff <old>..<new> -- .env.docker-compose .env.h2 .env.IntegrationTest`41- **Production code** (stat only): `git diff <old>..<new> --stat -- api/src/main/java/ yaci-indexer/src/main/java/`42- **Java test changes** (stat only): `git diff <old>..<new> --stat -- api/src/test/java/` (exclude load tests)43- **Python test changes** (stat only): `git diff <old>..<new> --stat -- tests/` (exclude load tests)44- **Error types**: `git diff <old>..<new> -- api/src/main/java/org/cardanofoundation/rosetta/common/enumeration/RosettaErrorType.java`45- **Operation types**: `git diff <old>..<new> -- api/src/main/java/org/cardanofoundation/rosetta/common/enumeration/OperationType.java`46- **Exception handler**: `git diff <old>..<new> -- api/src/main/java/org/cardanofoundation/rosetta/common/exception/`47- **Documentation pages**: `git diff <old>..<new> --stat -- docs/`4849### 4. Deep-dive into test changes5051Tests are the best clue for API-visible behavior changes. Classify each change:5253- **HTTP status change** → API-visible, likely breaking54- **Response body/shape change** → API-visible55- **New error codes** → API-visible56- **New operations in responses** → API-visible57- **Test data value changes** (balances, counts, hashes) → check production code. If only test-data-generator changed, NOT an API behavior change58- **Internal refactors** (class renames, method signatures) → NOT API-visible59- **Test infrastructure** (base classes, Allure migration) → NOT API-visible6061### 5. Verify every claim against diffs6263Every claim in the release notes must be backed by a specific line in a diff. If you can't point to the diff line, the claim is fabricated.6465**Rule 1: no diff evidence = no claim.** For every env var change, every "new" feature, every behavior change — cite the actual diff. Don't infer changes from commit messages or code structure alone.6667**Rule 2: check existence in previous version.** A diff only shows what changed — it won't show things that already existed. When claiming something is "new" (new error code, new field, new operation), always verify it didn't exist in the previous tag:68```bash69git show <old-tag>:<file> | grep "PATTERN"70```71If it's already there, the change is behavioral (how it's used), not additive (new code).7273**Rule 3: distinguish preparation from exposure.** A dependency enabled in the indexer (e.g., governance starter uncommented) is NOT an API change unless an endpoint actually exposes that data in this version. Check whether production controller/service code uses the new capability before claiming it as an API-visible change.7475### 6. Write the sections7677Follow the format and rules below for each section.7879## Release page structure8081The GitHub release page has these sections:82831. **Title + opening paragraph** — one-liner summary of the release842. **Key Improvements** — bullet list of high-level features/changes853. **Upgrade / Compatibility** — upgrade path, resync requirements, infrastructure breaking changes864. **API / Configuration** — explicit API and env var changes with affected endpoints875. **What's Changed** — auto-generated by GitHub (list of merged PRs)886. **New Contributors** — auto-generated by GitHub8990Sections 5 and 6 are auto-generated — never touch them. The skill covers sections 1–4.9192### Detail level by section9394Each section has a distinct role. Never repeat the same information across sections.9596| Section | Role | Detail level |97|---|---|---|98| Title + opening | Theme of the release | One sentence, no specifics |99| Key Improvements | What changed | One line per feature, no field names, no endpoint paths, no technical values. Just the human-readable summary. |100| Upgrade / Compatibility | What the operator must do | Migration steps, resync scope, removed infra. Don't re-explain features — just say what action is needed. |101| API / Configuration | Technical precision | Endpoint paths, field names, old→new values, breaking details. This is where the specifics live. |102103## Section formats and rules104105### Title + opening paragraph106107```markdown108# Cardano Rosetta Java vX.Y.Z109110Cardano Rosetta Java vX.Y.Z introduces [concise summary of the release theme].111```112113Keep it to one sentence. Don't repeat what's in Key Improvements.114115### Key Improvements116117```markdown118## Key Improvements119- [Feature/change description with relevant links]120- [Another feature]121```122123Rules:124- **Only externally visible changes** — include only what an API consumer or deployment operator would notice. Internal config properties, dependency wiring, or build-only changes don't belong here.125- **High-level only** — one line per feature describing *what* changed in plain language. Do NOT include endpoint paths (like `/network/status`), field names (like `sync_status.stage`), specific values (like `SYNCING`, `APPLYING_INDEXES`), env var names, or technical implementation details (like `JOOQ classes`, `peer selection randomization`). Those belong in API / Configuration.126 - Good: "Sync status now reports three stages, giving operators visibility into progress and index readiness"127 - Bad: "`/network/status` now includes a `stage` field in `sync_status` with values `SYNCING`, `APPLYING_INDEXES`, and `LIVE`"128- Use consistent capitalization for domain terms: `DRep` (not `dRep`), `SPO`, `CIP-129`129- Link CIPs inline: `[CIP-129](https://cips.cardano.org/cip/CIP-0129)`130- Keep bullets self-contained — each should make sense without reading the others131- **No repetition within the section** — never mention the same feature, link, or docs page in multiple bullets. If a docs page relates to a feature, link it inline in that feature's bullet.132- **Docs pages go inline** — link new docs pages in the relevant feature bullet. Do NOT create a separate "New documentation" bullet unless the page has no parent feature to attach to.133- **Attribute benefits precisely** — if a performance gain comes from multiple changes, name them all or use neutral phrasing. Don't credit only one.134135### Upgrade / Compatibility136137```markdown138## Upgrade / Compatibility139- **From vX.Y.Z**: [compatible / requires resync / specific migration steps]140- **From older versions**: [compatibility notes]141- [Any removed deployment methods, changed defaults, or infrastructure breaking changes]142```143144Always answer these questions:1451. Can users upgrade from the previous minor/patch version without resync?1462. Can users upgrade from older major versions?1473. Were any deployment methods or infrastructure components removed or changed (e.g., containers removed, new sidecar services required)?1484. When resync is required, what is the scope? Specify "yaci-indexer resync only (Cardano Node data can be kept)" — schema/PG changes affect the indexer database, NOT the Cardano Node blockchain data. Link to the [resync procedure](https://cardano-foundation.github.io/cardano-rosetta-java/docs/advanced-configuration/pruning#how-to-resynchronize-the-indexer).149150Notes:151- Environment variable and configuration changes belong in **API / Configuration**, not here.152- Don't re-explain features already covered in Key Improvements. Focus on *what the operator needs to do*, not *what the feature is*.153154### API / Configuration155156Uses bullet points with bold title + indented detail.157158#### Ordering rules1591. Breaking API behavior changes first (bold "Breaking:" prefix) — reserve "Breaking:" for changes to endpoint responses, status codes, or request formats that require client code updates. Env var renames/removals are NOT "Breaking:" items — they go in the environment updates list.1602. Endpoint-specific changes next (group by endpoint path)1613. Environment variable updates last — grouped under a single `**Environment updates:**` header as a flat list, NOT as individual bold-title bullets. Use `old value → new value` format.162163#### Content rules164- Each item is a bullet with **bold title**, detail indented below165- Every change must name the affected endpoints explicitly166- Cross-cutting changes must list ALL affected endpoints in parentheses167- **Only API behavior and env var changes** — internal library version bumps (pom.xml dependencies like Yaci Store, client-lib) don't belong here unless exposed as user-facing env vars. Internal preparations (e.g., governance starter enabled but no endpoint serving the data) are not API changes.168- Add inline links to project docs and external specs where relevant:169 - DRep-related: [DRep Delegation guide](https://cardano-foundation.github.io/cardano-rosetta-java/docs/user-guides/drep-delegation)170 - Pool-related: [Pool Operations guide](https://cardano-foundation.github.io/cardano-rosetta-java/docs/user-guides/pool-operations)171 - Staking-related: [Staking guide](https://cardano-foundation.github.io/cardano-rosetta-java/docs/user-guides/staking)172 - CIP references: `https://cips.cardano.org/cip/CIP-XXXX`173 - Conway/Voltaire: [Chang upgrade](https://docs.cardano.org/about-cardano/evolution/upgrades/chang/)174- Do NOT link to generic external references unless truly necessary175- Environment updates: group under a single `**Environment updates:**` header as a flat bullet list. Show `old value → new value`. For removed vars, show the old value and note "(removed)". For new vars, show the value and note "(new)".176177## Writing rules178179### Evidence rules180- **No diff evidence = no claim** — every change asserted must map to a specific line in a git diff181- **"New" means absent in previous version** — verify with `git show <old-tag>:<file> | grep "PATTERN"`182- **Value changes require diff proof** — cite both old and new lines from the diff183- **Tests are clues, not proof** — always cross-check with `src/main/java` changes184- **Test data regeneration is not a bug fix** — if only `test-data-generator/` changed, endpoint behavior is unchanged185186### Visibility rules187- **Only externally visible changes** — API consumers and deployment operators. Internal config, dependency wiring, or build changes don't qualify.188- **Preparation ≠ exposure** — enabling a dependency is NOT an API change unless endpoint code actually serves that data in this version189- **Scope matters** — `.env.docker-compose` = production. Changes only in `.env.h2` or `.env.IntegrationTest` are not user-facing.190191## Examples192193See [references/examples.md](references/examples.md) for complete v2.0.0 and v2.1.0 examples.