@oletizi/audio-tools
Version:
Monorepo for hardware sampler utilities and format parsers
197 lines (135 loc) • 5.15 kB
Markdown
# Version Reset Plan
## Problem
Current versions are inflated (v7.0.0) due to aggressive major version bumping during pre-release refactoring. This gives a misleading impression of project maturity.
## Solution: Reset Before First npm Publish
Since packages are **NOT yet published to npm**, we can safely reset versions.
## Proposed Version Reset
### Core Packages (Currently v7.0.0)
Reset to **v1.0.0** to indicate "stable, ready for distribution":
- `sampler-devices`: 7.0.0 → **1.0.0**
- `sampler-lib`: 7.0.0 → **1.0.0**
- `sampler-midi`: 7.0.0 → **1.0.0**
- `sampler-translate`: 7.0.0 → **1.0.0**
**Rationale**: v1.0.0 signals "stable public API" without the inflated history
### Utility Packages (Currently v1.0.0)
Keep as-is:
- `sampler-export`: **1.0.0** ✓
- `sampler-backup`: **1.0.0** ✓
### Other Packages
- `sampler-interface`: 3.0.0 → **1.0.0** (for consistency)
- `sampler-attic`: 0.0.1 → **0.0.1** (private, not published)
### Alternative: v0.1.0 ("Still Stabilizing")
If you want to signal "API may still change":
- Core packages: 7.0.0 → **0.1.0**
- Allows breaking changes as minor versions (0.2.0, 0.3.0)
- Use v1.0.0 when API is truly stable
## Implementation Steps
### 1. Update package.json Files
```bash
# Update core packages to v1.0.0
cd modules/audio-tools
for pkg in sampler-devices sampler-lib sampler-midi sampler-translate sampler-interface; do
jq '.version = "1.0.0"' "$pkg/package.json" > "$pkg/package.json.tmp"
mv "$pkg/package.json.tmp" "$pkg/package.json"
done
```
### 2. Update CHANGELOG.md Files
For each package, update the version header:
```markdown
## [7.0.0] - 2025-10-04
```
Becomes:
```markdown
## [1.0.0] - 2025-10-04
```
And update the footer link:
```markdown
[7.0.0]: https://github.com/oletizi/audio-tools/releases/tag/sampler-devices-v7.0.0
```
Becomes:
```markdown
[1.0.0]: https://github.com/oletizi/audio-tools/releases/tag/sampler-devices-v1.0.0
```
### 3. Update Workspace Dependencies
Some packages depend on each other. Update `package.json` dependencies:
```json
"dependencies": {
"@oletizi/sampler-lib": "workspace:^7.0.0"
}
```
Becomes:
```json
"dependencies": {
"@oletizi/sampler-lib": "workspace:^1.0.0"
}
```
### 4. Update pnpm-lock.yaml
```bash
pnpm install
```
### 5. Commit the Reset
```bash
git add .
git commit -m "chore(audio-tools): reset versions to 1.0.0 before initial npm publish
BREAKING CHANGE: Version reset from inflated v7.0.0 to v1.0.0 for initial public release.
The v7.0.0 versions were artifacts of aggressive major version bumping during
pre-release refactoring. Since packages were never published to npm, we're
resetting to v1.0.0 to accurately reflect this as the first stable release.
See VERSIONS.md for historical context."
```
### 6. Create git tag
```bash
git tag -a audio-tools-v1.0.0 -m "audio-tools v1.0.0 - Initial public release"
```
### 7. Update VERSIONS.md
Add a section documenting the reset:
```markdown
## Version Reset (October 2025)
Before initial npm publish, versions were reset from v7.0.0 to v1.0.0.
**Why?** The v7.0.0 version was an artifact of aggressive major version bumping
during pre-release refactoring (7 breaking changes in 1 hour). Since packages
were never published to npm, we reset to v1.0.0 to accurately signal "first
stable public release" rather than "seven major releases."
**Safe?** Yes - no packages were published to npm, so no users were affected.
```
## Going Forward: Conservative Versioning
### New Guidelines
**Major versions (2.0.0, 3.0.0)**: Only for significant, intentional breaking changes
- Not for internal refactoring
- Not for dependency updates
- Only when you *intend* to break the public API for users
**Minor versions (1.1.0, 1.2.0)**: New features, backward compatible
- New exportable functions
- New optional parameters
- Enhanced functionality
**Patch versions (1.0.1, 1.0.2)**: Bug fixes and docs
- Bug fixes
- Documentation updates
- Internal refactoring (if no API changes)
### Pre-release Versions for Breaking Changes
If you need to experiment with breaking changes:
```
v1.0.0 → v2.0.0-alpha.1 → v2.0.0-alpha.2 → v2.0.0-beta.1 → v2.0.0
```
This allows iteration without inflating major versions.
## Verification Checklist
Before implementing:
- [ ] Confirm no packages published to npm (run `npm view @oletizi/sampler-devices`)
- [ ] Backup current state (`git tag audio-tools-v7.0.0-backup`)
- [ ] Update all package.json files
- [ ] Update all CHANGELOG.md files
- [ ] Update workspace dependencies
- [ ] Run `pnpm install` to update lockfile
- [ ] Run `pnpm test` to ensure everything still works
- [ ] Commit changes
- [ ] Create new git tag
- [ ] Update VERSIONS.md
## Timeline
- **Before reset**: v7.0.0 (inflated, never published)
- **After reset**: v1.0.0 (accurate "first stable release")
- **First npm publish**: v1.0.0
- **Future releases**: Conservative semver (1.0.x, 1.x.0, only necessary breaking changes)
---
**Decision**: Choose v1.0.0 or v0.1.0 based on API confidence:
- **v1.0.0** if you're confident the API is stable
- **v0.1.0** if you expect more breaking changes soon