How version updates are managed to maintain repository consistency
The palimpsest-license repository is designed to remain structurally consistent across all version updates. When v1.1, v1.2, v2.0, or any future version is released, the repository does not shapeshift - it maintains the same clear structure and navigation patterns.
Core Principle: One current version, clearly visible. All others archived systematically.
These elements never change regardless of version:
palimpsest-license/
├── vX.Y/ ← CURRENT version directory (always present)
│ ├── LICENSE.txt ← Always here
│ ├── README.adoc ← Always here
│ ├── INDEX.adoc ← Always here
│ ├── docs/ ← Always here
│ ├── exhibits/ ← Always here
│ ├── examples/ ← Always here
│ └── tools/ ← Always here
├── ARCHIVE/ ← OLD versions (grows over time)
│ ├── v0.3/
│ ├── v0.4/
│ ├── v1.0/ ← Moved here when v1.1 releases
│ └── v1.1/ ← Moved here when v1.2 releases
├── legal/ ← Cross-version resources
├── docs/ ← Cross-version documentation
├── tools/ ← Tooling (current)
├── research/ ← Research materials
├── spec/ ← Specifications
├── README.adoc ← Main entry point (updated per version)
├── LICENSE ← Current license text
└── ... ← Other cross-version filesFormat: vMAJOR.MINOR
-
Major versions (v1.0 → v2.0): Breaking changes, legal text modifications
-
Minor versions (v1.0 → v1.1): Additions, clarifications, non-breaking changes
-
Patch versions: Not used for license text (only for tooling/docs)
Current version directory: Always named after the current stable version (e.g., v1.0/, v1.1/, v2.0/)
When releasing a new version (e.g., v1.0 → v1.1):
-
Create new version branch:
git checkout -b release/v1.1
-
Run migration script:
./scripts/migrate-version.jl --from 1.0 --to 1.1
This script automatically: - Moves
v1.0/→ARCHIVE/v1.0/- Creates newv1.1/directory with template - Updates README.adoc to reference v1.1 - Updates STATE.scm, ECOSYSTEM.scm, META.scm - Updates LICENSE to point to v1.1 - Creates ARCHIVE/v1.0/README.adoc with archival notice -
Populate v1.1/ content:
-
Update
v1.1/LICENSE.txtwith new license text -
Update
v1.1/README.adocwith version-specific info -
Update
v1.1/docs/with new documentation -
Add new examples if applicable
-
-
Update CHANGELOG.adoc:
Document all changes from v1.0 → v1.1
-
Verify all links in README.adoc work
-
Check that v1.0 materials are properly archived
-
Ensure ARCHIVE/v1.0/README.adoc has clear notice
-
Test all scripts and examples for v1.1
-
Review STATE.scm reflects current state
-
Merge release branch:
git checkout main git merge release/v1.1 git tag -a v1.1 -m "Release PMPL v1.1" git push origin main --tags -
Create GitHub Release:
-
Use tag v1.1
-
Title: "PMPL v1.1 - [Brief Description]"
-
Body: Link to CHANGELOG.adoc section
-
Attach
v1.1/LICENSE.txtas asset
-
-
Update GitHub repository settings:
-
Default branch: main
-
Description: "Palimpsest-MPL License v1.1"
-
Topics: Include
pmpl-1-1
-
The ARCHIVE/ directory maintains a consistent structure:
ARCHIVE/
├── README.adoc ← Index of all archived versions
├── v0.3/
│ ├── README.adoc ← "This version is archived" notice
│ └── ... ← Original v0.3 materials
├── v0.4/
│ ├── README.adoc ← "This version is archived" notice
│ ├── guides/ ← Moved from GUIDES_v0.4/
│ ├── metadata/ ← Moved from METADATA_v0.4/
│ └── toolkit/ ← Moved from TOOLKIT_v0.4/
├── v1.0/ ← Created when v1.1 releases
│ ├── README.adoc ← "Superseded by v1.1" notice
│ ├── LICENSE.txt ← Preserved v1.0 license text
│ ├── docs/ ← Preserved v1.0 docs
│ └── ...
└── v1.1/ ← Created when v1.2 releases
└── ...Each archived version includes a README.adoc:
= PMPL vX.Y - ARCHIVED VERSION
⚠️ **This version has been superseded by PMPL vN.M**
This directory contains historical materials for PMPL vX.Y.
**For current version**: See link:../../vN.M/[vN.M/]
== Archival Information
- **Archived**: YYYY-MM-DD
- **Superseded by**: vN.M
- **Status**: Historical reference only
- **Do not use for new projects**
== What's Here
[Description of what's in this archived version]
== Migration
If you're using PMPL vX.Y, see link:../../docs/MIGRATION.md[Migration Guide] for upgrading to vN.M.These rules ensure the repository never "shapeshifts":
Always exactly one version directory at root level (e.g., v1.1/).
Never have multiple version dirs at root like:
v1.0/
v1.1/ ← Wrong! Only one should be at rootThe main README.adoc always has:
- Giant section highlighting current version
- Link to vX.Y/LICENSE.txt
- Link to vX.Y/README.adoc
- Version table showing current as ✅ STABLE
Root LICENSE file always contains or links to current version text.
Once a version is in ARCHIVE/, it never moves again.
ARCHIVE/v1.0/ ← Stays here forever, even after v2.0, v3.0, etc.Resources that span versions stay in their own directories:
-
docs/- Cross-version documentation -
legal/- Legal resources and frameworks -
research/- Research papers -
spec/- Formal specifications -
tools/- Current tooling
The scripts/migrate-version.jl script automates the migration:
# Migrate from v1.0 to v1.1
./scripts/migrate-version.jl --from 1.0 --to 1.1
# Dry run (preview changes)
./scripts/migrate-version.jl --from 1.0 --to 1.1 --dry-run-
✅ Validates current state (checks v1.0/ exists)
-
✅ Creates
ARCHIVE/v1.0/directory -
✅ Moves
v1.0/*→ARCHIVE/v1.0/ -
✅ Creates
v1.1/from template -
✅ Copies necessary files to v1.1/ for editing
-
✅ Updates README.adoc version references
-
✅ Updates STATE.scm version and archived copy
-
✅ Creates
ARCHIVE/v1.0/README.adocwith notice -
✅ Updates CHANGELOG.adoc structure
-
✅ Creates git branch:
release/v1.1
| Version | Status | Support |
|---|---|---|
Current (v1.1) |
✅ STABLE |
Full support, updates, bug fixes |
Previous Minor (v1.0) |
🗄️ Archived |
Security fixes only (6 months) |
Older Minors (v0.x) |
🗄️ Archived |
No support, historical reference |
Previous Major (v0.x when v1.x current) |
🗄️ Archived |
Critical security fixes only (12 months) |
Multiple version directories at root level create confusion about which version is current. The single vX.Y/ directory at root makes it unmistakably obvious which version to use.
The migration script can optionally create a symlink:
v1.0 → ARCHIVE/v1.0/But this should be temporary. Update your links to point to ARCHIVE.
Yes, create a release/v1.1 branch and work there. Don’t merge until ready to make v1.1 current.
Patch releases for tooling/docs don’t trigger full migration. Update files in place and tag.
Patch releases for license text are treated as minor versions (v1.0 → v1.1).
Version migrations require approval from the Palimpsest Stewardship Council:
-
Minor versions (v1.0 → v1.1): Requires 4/7 Council approval
-
Major versions (v1.0 → v2.0): Requires 6/7 Council approval
See GOVERNANCE.adoc for full decision-making process.
-
CHANGELOG.adoc - Version history
-
GOVERNANCE.adoc - Decision-making process
-
CONTRIBUTING.adoc - How to propose changes
-
scripts/README.adoc - Script documentation