skillby ksoichiro

versioning

Versioning strategy and Semantic Versioning guide for Chrono Dawn mod

Installs: 0
Used in: 1 repos
Updated: 2d ago
$npx ai-builder add skill ksoichiro/versioning

Installs to .claude/skills/versioning/

# Versioning Guide

**Purpose**: Document versioning strategy and provide guidance for version updates in Chrono Dawn mod.

**When to use**: When updating mod version, preparing for release, or understanding version numbering.

---

## Semantic Versioning Overview

Chrono Dawn follows **Semantic Versioning 2.0.0** (https://semver.org/).

### Version Format

```
<major>.<minor>.<patch>-<prerelease>+<buildmetadata>
```

**Examples**:
- `0.2.0-beta+1.21.1-fabric` - Beta version for Minecraft 1.21.1 (Fabric)
- `1.0.0+1.21.1-neoforge` - Stable release for Minecraft 1.21.1 (NeoForge)
- `1.2.3-rc.1+1.21.2-fabric` - Release Candidate 1 for Minecraft 1.21.2 (Fabric)

### Components

1. **Version Number** (`major.minor.patch`):
   - `major`: Incompatible API changes (e.g., 0.x.x → 1.0.0)
   - `minor`: New features, backward-compatible (e.g., 1.0.0 → 1.1.0)
   - `patch`: Bug fixes, backward-compatible (e.g., 1.1.0 → 1.1.1)

2. **Prerelease Identifier** (optional, `-<identifier>`):
   - Separated by hyphen `-`
   - Examples: `-alpha`, `-beta`, `-rc.1`
   - Indicates unstable/pre-release version
   - Removed for stable releases

3. **Build Metadata** (`+<minecraft-version>-<loader>`):
   - Separated by plus `+`
   - Format: `+<minecraft_version>-<fabric|neoforge>`
   - Example: `+1.21.1-fabric`
   - Automatically appended by build system

---

## Chrono Dawn Versioning Strategy

### Development vs. Release Versions

**Development** (during feature implementation):
```
mod_version=0.2.0-beta
```
Builds to: `chronodawn-0.2.0-beta+1.21.1-fabric.jar`

**Release** (when publishing):
```
mod_version=0.2.0
```
Builds to: `chronodawn-0.2.0+1.21.1-fabric.jar`

### Prerelease Identifiers

Use appropriate identifiers based on development stage:

- **`-alpha`**: Early development, major features incomplete
  - Example: `0.2.0-alpha`
  - Use case: Initial implementation of new dimension

- **`-beta`**: Feature-complete, testing in progress
  - Example: `0.2.0-beta`
  - Use case: All bosses implemented, playtesting phase

- **`-rc.1`, `-rc.2`, etc.**: Release Candidate
  - Example: `1.0.0-rc.1`
  - Use case: Final testing before stable release, no new features

- **No identifier**: Stable release
  - Example: `1.0.0`
  - Use case: Production-ready, fully tested

### Version Increment Guide

| Change Type | Example | When to Use |
|------------|---------|-------------|
| `0.1.0` → `0.2.0` | New major features (new dimension area, new boss system) |
| `0.2.0` → `0.2.1` | Bug fixes only |
| `0.9.0` → `1.0.0` | First stable release |
| `1.0.0` → `2.0.0` | Breaking changes (incompatible with old saves) |

---

## Build System Integration

### gradle.properties

Define **only** the version number and prerelease identifier:

```properties
mod_version=0.2.0-beta
```

**Do NOT include** Minecraft version or loader name here.

### Build Scripts

**fabric/build.gradle** (line 86):
```groovy
archiveVersion = "${rootProject.mod_version}+${rootProject.minecraft_version}-fabric"
```

**neoforge/build.gradle** (line 98):
```groovy
archiveVersion = "${rootProject.mod_version}+${rootProject.minecraft_version}-neoforge"
```

These scripts **automatically append** `+1.21.1-fabric` or `+1.21.1-neoforge`.

### Resulting JAR Names

From `mod_version=0.2.0-beta`:
- Fabric: `chronodawn-0.2.0-beta+1.21.1-fabric.jar`
- NeoForge: `chronodawn-0.2.0-beta+1.21.1-neoforge.jar`
- Common: `common-0.2.0-beta.jar`

---

## Version Update Procedure

### Files to Update

When changing `mod_version` in `gradle.properties`, also update:

1. **gradle.properties** (line 6)
   ```properties
   mod_version=X.Y.Z-prerelease
   ```

2. **README.md** (lines 81-83, 209, 220)
   - Build output file names
   - Installation instructions

3. **docs/player_guide.md** (lines 78-79)
   - Download file names

4. **docs/developer_guide.md** (lines 235, 274-276)
   - gradle.properties example
   - Build output file names

5. **fabric.mod.json** and **neoforge.mods.toml**
   - Use `${version}` placeholder (no manual update needed)

### Version Update Checklist

- [ ] Update `gradle.properties` with new version
- [ ] Update all documentation with correct JAR names (include `+1.21.1`)
- [ ] Verify version format follows Semantic Versioning
- [ ] For release: Remove prerelease identifier (e.g., `-beta`)
- [ ] Test build: `./gradlew clean build`
- [ ] Verify JAR names match documentation

---

## Common Patterns

### Preparing Next Version (Development)

```bash
# Start development on 0.3.0
mod_version=0.3.0-alpha
```

### Pre-Release Testing

```bash
# Feature-complete, ready for testing
mod_version=0.3.0-beta
```

### Release Candidate

```bash
# Final testing before release
mod_version=0.3.0-rc.1
```

### Stable Release

```bash
# Production release
mod_version=0.3.0
```

### Hotfix Release

```bash
# Critical bug fix for 0.3.0
mod_version=0.3.1
```

---

## Examples by Scenario

### Scenario 1: Starting Development on 0.2.0
```
Current: 0.1.0 (stable)
Change to: 0.2.0-alpha
Reason: Beginning work on new features
```

### Scenario 2: Entering Beta Phase
```
Current: 0.2.0-alpha
Change to: 0.2.0-beta
Reason: All features implemented, testing phase
```

### Scenario 3: Preparing Release
```
Current: 0.2.0-beta
Change to: 0.2.0-rc.1
Reason: Final testing before release
```

### Scenario 4: Stable Release
```
Current: 0.2.0-rc.1
Change to: 0.2.0
Reason: Release candidate passed testing
```

### Scenario 5: Bug Fix Release
```
Current: 0.2.0 (stable)
Change to: 0.2.1
Reason: Critical bug found, needs hotfix
```

---

## Automated Version Update

Use the `update-version` command to automate version updates:

```bash
/update-version 0.3.0-beta
```

This will:
1. Update `gradle.properties`
2. Update all documentation files with correct JAR names
3. Verify version format

---

## Reference

- **Semantic Versioning Spec**: https://semver.org/
- **Current Version**: Check `gradle.properties` line 6
- **Version History**: See git tags and CHANGELOG.md (if exists)

---

**Last Updated**: 2026-01-01
**Maintained by**: Chrono Dawn Development Team

Quick Install

$npx ai-builder add skill ksoichiro/versioning

Details

Type
skill
Author
ksoichiro
Slug
ksoichiro/versioning
Created
6d ago