53b43b0f79
Ship the QUALITY_PLAN stretch from ownership through ecosystem: C.1 lifetime elision (bootstrap + selfhost), bux fmt/test/doc CI hooks, stdlib goldens, package registry (bux search/add), and LSP 0.4 position-sensitive locals with inferred let types. Full-tree format pass plus Map/Set remove double-free fix.
77 lines
2.1 KiB
Markdown
77 lines
2.1 KiB
Markdown
# Bux Semantic Versioning Policy
|
|
|
|
> Status: Draft for v0.x → v1.0 freeze (E.3)
|
|
|
|
Bux follows [Semantic Versioning 2.0.0](https://semver.org/) with the
|
|
clarifications below.
|
|
|
|
---
|
|
|
|
## Version numbers
|
|
|
|
```
|
|
MAJOR.MINOR.PATCH[-prerelease]
|
|
```
|
|
|
|
| Component | When it increases |
|
|
|-----------|-------------------|
|
|
| **MAJOR** | Breaking language / stdlib / CLI changes |
|
|
| **MINOR** | Backward-compatible features |
|
|
| **PATCH** | Backward-compatible bug fixes |
|
|
|
|
During **0.x** (pre-1.0):
|
|
|
|
- `0.MINOR.PATCH` — MINOR may still introduce breaking changes (documented in
|
|
the release notes and `MIGRATION_*.sh` when needed).
|
|
- Prefer deprecation warnings for at least one MINOR before removal when
|
|
practical.
|
|
|
|
After **1.0.0** (language freeze):
|
|
|
|
- Breaking changes require a MAJOR bump and a migration guide.
|
|
- The Language Reference is the normative spec; compiler bugs that contradict
|
|
the ref are fixed without a MAJOR bump.
|
|
|
|
---
|
|
|
|
## What counts as “breaking”
|
|
|
|
- Removing or renaming a public stdlib symbol
|
|
- Changing the type or semantics of a public API
|
|
- Changing CLI flags that scripts rely on (`build`, `test`, `fmt --check`, …)
|
|
- Changing `bux.toml` / `bux.lock` fields in an incompatible way
|
|
- Changing the fat `func` / tuple C ABI in a way that breaks linked code
|
|
|
|
**Not breaking:**
|
|
|
|
- New keywords that were previously valid identifiers only if reserved carefully
|
|
(prefer contextual keywords)
|
|
- New diagnostics / stricter `@[Checked]` (document; may be gated)
|
|
- Formatter whitespace-only changes
|
|
|
|
---
|
|
|
|
## Package versions (registry)
|
|
|
|
Registry packages use the same MAJOR.MINOR.PATCH scheme.
|
|
|
|
`bux add foo` / `bux add foo 0.1` resolution:
|
|
|
|
| Request | Matches |
|
|
|---------|---------|
|
|
| `*` / omitted | Latest entry for `foo` in the index |
|
|
| `0.1.1` | Exact version |
|
|
| `0.1` | First version with that prefix (e.g. `0.1.1`) |
|
|
|
|
Lockfiles pin the **resolved** version and source path/URL.
|
|
|
|
---
|
|
|
|
## Release checklist (maintainers)
|
|
|
|
1. Update `docs/LanguageRef.md` if behaviour changed
|
|
2. Update `docs/QUALITY_PLAN.md` / changelog notes
|
|
3. Run `make test` (includes `fmt-check`, examples, goldens)
|
|
4. Run `make selfhost-loop`
|
|
5. Tag `vMAJOR.MINOR.PATCH`
|