Skip to content

Commit 042078a

Browse files
committed
Improve RELEASE.md formatting with icons, adjust code examples indentation, and enhance roadmap detailing future versions.
1 parent 08c9866 commit 042078a

1 file changed

Lines changed: 72 additions & 67 deletions

File tree

RELEASE.md

Lines changed: 72 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
# Aether Datafixers v0.2.0 — Testkit, Extended Rules, Diagnostics, and Performance
1+
# 🚀 **Aether Datafixers v0.2.0 — Testkit, Extended Rules, Diagnostics, and Performance**
22

33
Extended rules, testkit module, migration diagnostics, and high-performance APIs.
44

55
---
66

7-
## Highlights in v0.2.0
7+
## 🎯 Highlights in v0.2.0
88

9-
- **Testkit Module** — New `aether-datafixers-testkit` module with fluent test data builders, custom AssertJ assertions, and test harnesses for DataFix, Schema, and migration testing.
10-
- **Extended Rewrite Rules** — Convenience methods for batch operations, field grouping/flattening, path-based operations, and conditional rules.
11-
- **Migration Diagnostics** — Opt-in diagnostic system for structured reports with timing, snapshots, and warnings.
12-
- **High-Performance APIs** — Batch transformations and single-pass conditionals for optimized migrations.
13-
- **Performance Optimizations** — Internal improvements with memoized path parsing, pre-allocated lists, and reduced allocations.
9+
- **Testkit Module** — New `aether-datafixers-testkit` module with fluent test data builders, custom AssertJ assertions, and test harnesses for DataFix, Schema, and migration testing.
10+
- **Extended Rewrite Rules** — Convenience methods for batch operations, field grouping/flattening, path-based operations, and conditional rules.
11+
- **Migration Diagnostics** — Opt-in diagnostic system for structured reports with timing, snapshots, and warnings.
12+
- **High-Performance APIs** — Batch transformations and single-pass conditionals for optimized migrations.
13+
- **Performance Optimizations** — Internal improvements with memoized path parsing, pre-allocated lists, and reduced allocations.
1414

1515
---
1616

17-
## Installation
17+
## 📦 Installation
1818

1919
> [!TIP]
2020
> All Aether artifacts are available on **Maven Central** — no extra repository required.
@@ -23,72 +23,72 @@ Extended rules, testkit module, migration diagnostics, and high-performance APIs
2323

2424
```xml
2525
<dependency>
26-
<groupId>de.splatgames.aether.datafixers</groupId>
27-
<artifactId>aether-datafixers-core</artifactId>
28-
<version>0.2.0</version>
26+
<groupId>de.splatgames.aether.datafixers</groupId>
27+
<artifactId>aether-datafixers-core</artifactId>
28+
<version>0.2.0</version>
2929
</dependency>
3030
```
3131

3232
**Using the BOM**
3333

3434
```xml
3535
<dependencyManagement>
36-
<dependencies>
37-
<dependency>
38-
<groupId>de.splatgames.aether.datafixers</groupId>
39-
<artifactId>aether-datafixers-bom</artifactId>
40-
<version>0.2.0</version>
41-
<type>pom</type>
42-
<scope>import</scope>
43-
</dependency>
44-
</dependencies>
36+
<dependencies>
37+
<dependency>
38+
<groupId>de.splatgames.aether.datafixers</groupId>
39+
<artifactId>aether-datafixers-bom</artifactId>
40+
<version>0.2.0</version>
41+
<type>pom</type>
42+
<scope>import</scope>
43+
</dependency>
44+
</dependencies>
4545
</dependencyManagement>
4646

4747
<dependencies>
48-
<!-- No version needed -->
49-
<dependency>
50-
<groupId>de.splatgames.aether.datafixers</groupId>
51-
<artifactId>aether-datafixers-core</artifactId>
52-
</dependency>
48+
<!-- No version needed -->
49+
<dependency>
50+
<groupId>de.splatgames.aether.datafixers</groupId>
51+
<artifactId>aether-datafixers-core</artifactId>
52+
</dependency>
5353
</dependencies>
5454
```
5555

5656
### Gradle (Groovy)
5757

5858
```groovy
5959
dependencies {
60-
implementation 'de.splatgames.aether.datafixers:aether-datafixers-core:0.2.0'
61-
// Or with BOM:
62-
implementation platform('de.splatgames.aether.datafixers:aether-datafixers-bom:0.2.0')
63-
implementation 'de.splatgames.aether.datafixers:aether-datafixers-core'
60+
implementation 'de.splatgames.aether.datafixers:aether-datafixers-core:0.2.0'
61+
// Or with BOM:
62+
implementation platform('de.splatgames.aether.datafixers:aether-datafixers-bom:0.2.0')
63+
implementation 'de.splatgames.aether.datafixers:aether-datafixers-core'
6464
}
6565
```
6666

6767
### Gradle (Kotlin)
6868

6969
```kotlin
7070
dependencies {
71-
implementation("de.splatgames.aether.datafixers:aether-datafixers-core:0.2.0")
72-
// Or with BOM:
73-
implementation(platform("de.splatgames.aether.datafixers:aether-datafixers-bom:0.2.0"))
74-
implementation("de.splatgames.aether.datafixers:aether-datafixers-core")
71+
implementation("de.splatgames.aether.datafixers:aether-datafixers-core:0.2.0")
72+
// Or with BOM:
73+
implementation(platform("de.splatgames.aether.datafixers:aether-datafixers-bom:0.2.0"))
74+
implementation("de.splatgames.aether.datafixers:aether-datafixers-core")
7575
}
7676
```
7777

7878
---
7979

80-
## What's New
80+
## 🆕 What's New
8181

82-
### Testkit Module
82+
### 🧪 Testkit Module
8383

8484
New module `aether-datafixers-testkit` for testing migrations:
8585

8686
```xml
8787
<dependency>
88-
<groupId>de.splatgames.aether.datafixers</groupId>
89-
<artifactId>aether-datafixers-testkit</artifactId>
90-
<version>0.2.0</version>
91-
<scope>test</scope>
88+
<groupId>de.splatgames.aether.datafixers</groupId>
89+
<artifactId>aether-datafixers-testkit</artifactId>
90+
<version>0.2.0</version>
91+
<scope>test</scope>
9292
</dependency>
9393
```
9494

@@ -106,9 +106,9 @@ New module `aether-datafixers-testkit` for testing migrations:
106106
```java
107107
// Create test data fluently
108108
Dynamic<JsonElement> input = TestData.gson().object()
109-
.put("name", "Alice")
110-
.put("level", 10)
111-
.build();
109+
.put("name", "Alice")
110+
.put("level", 10)
111+
.build();
112112

113113
// Test a DataFix
114114
DataFixTester.forFix(myFix)
@@ -126,7 +126,7 @@ MigrationTester.forFixer(myFixer)
126126
.verify();
127127
```
128128

129-
### Extended Rewrite Rules
129+
### 📐 Extended Rewrite Rules
130130

131131
New convenience methods in `Rules` class:
132132

@@ -151,13 +151,13 @@ New convenience methods in `Rules` class:
151151
**Example:**
152152
```java
153153
Rules.seq(
154-
Rules.renameFields(ops, Map.of("playerName", "name", "xp", "experience")),
155-
Rules.groupFields(ops, "position", "x", "y", "z"),
154+
Rules.renameFields(ops, Map.of("playerName", "name", "xp", "experience")),
155+
Rules.groupFields(ops, "position", "x", "y", "z"),
156156
Rules.ifFieldMissing(ops, "version", Rules.setField(ops, "version", d -> d.createInt(1)))
157-
)
157+
)
158158
```
159159

160-
### Migration Diagnostics
160+
### 📊 Migration Diagnostics
161161

162162
New opt-in diagnostic system for capturing structured reports:
163163

@@ -176,28 +176,28 @@ New opt-in diagnostic system for capturing structured reports:
176176
- `DiagnosticOptions.defaults()` — Full diagnostics with snapshots and rule details
177177
- `DiagnosticOptions.minimal()` — Timing only, minimal overhead
178178

179-
### High-Performance APIs
179+
### High-Performance APIs
180180

181181
**BatchTransform:**
182182
```java
183183
Rules.batch(ops, batch -> batch
184-
.rename("oldName", "newName")
184+
.rename("oldName", "newName")
185185
.remove("deprecated")
186186
.set("version", d -> d.createInt(2))
187-
.transform("count", d -> d.createInt(d.asInt(0) + 1))
188-
.addIfMissing("created", d -> d.createLong(System.currentTimeMillis()))
189-
)
187+
.transform("count", d -> d.createInt(d.asInt(0) + 1))
188+
.addIfMissing("created", d -> d.createLong(System.currentTimeMillis()))
189+
)
190190
```
191191

192192
**Single-Pass Conditionals:**
193193
```java
194194
Rules.conditionalTransform(ops,
195-
d -> d.get("type").asString("").equals("legacy"),
196-
d -> d.set("migrated", d.createBoolean(true))
197-
)
195+
d -> d.get("type").asString("").equals("legacy"),
196+
d -> d.set("migrated", d.createBoolean(true))
197+
)
198198
```
199199

200-
### Performance Optimizations
200+
### 🚀 Performance Optimizations
201201

202202
Internal optimizations with no API changes:
203203
- Path parsing uses character-based parsing with memoization cache
@@ -207,7 +207,7 @@ Internal optimizations with no API changes:
207207

208208
---
209209

210-
## Changelog
210+
## 📝 Changelog
211211

212212
**New in 0.2.0**
213213

@@ -223,20 +223,25 @@ Internal optimizations with no API changes:
223223

224224
---
225225

226-
## Roadmap (next)
226+
## 🗺️ Roadmap (next)
227+
228+
- **v0.3.0**
229+
- **CLI module** — Migrate files and print/export a migration report (batch-friendly)
230+
- **Schema tooling** — Runtime schema validation + diff utilities between versions
227231

228-
- **0.3.x**
229-
- Additional codec implementations
230-
- Schema validation enhancements
231-
- Migration dry-run mode
232+
- **v0.4.0**
233+
- **Spring Boot integration** — Auto-configuration for DataFixer in Spring apps
234+
- **Extra ops modules** — Optional YAML/TOML support (format adapters)
235+
- **Debug utilities** — Pretty printers / tree diff for Dynamic structures (dev-facing)
232236

233-
- **1.0.x**
234-
- Stable API surface
235-
- Comprehensive documentation
236-
- Production-ready release
237+
- **v0.5.0** (API freeze candidate)
238+
- **API stabilization pass** — Naming/packaging cleanup + deprecations completed
239+
- **Compatibility checks in CI** — Binary/source compatibility guardrails for public API
240+
- **Hardened error model** — Consistent exception types + structured error details
241+
- **Release readiness** — Final review of docs/examples against frozen API
237242

238243
---
239244

240-
## License
245+
## 📜 License
241246

242247
**MIT** — see `LICENSE`.

0 commit comments

Comments
 (0)