name: rosetta-release-notes description: "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'."
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-composeare production-facing and belong in release notes. Changes only in.env.h2or.env.IntegrationTestare 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 (likesync_status.stage), specific values (likeSYNCING,APPLYING_INDEXES), env var names, or technical implementation details (likeJOOQ 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/statusnow includes astagefield insync_statuswith valuesSYNCING,APPLYING_INDEXES, andLIVE"
- Use consistent capitalization for domain terms:
DRep(notdRep),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. Useold value → new valueformat.
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:
- DRep-related: DRep Delegation guide
- Pool-related: Pool Operations guide
- Staking-related: Staking guide
- CIP references:
https://cips.cardano.org/cip/CIP-XXXX - Conway/Voltaire: Chang upgrade
- Do NOT link to generic external references unless truly necessary
- Environment updates: group under a single
**Environment updates:**header as a flat bullet list. Showold 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/javachanges - 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.h2or.env.IntegrationTestare not user-facing.
Examples
See references/examples.md for complete v2.0.0 and v2.1.0 examples.