feat: lifetime elision, tooling CI, registry, and LSP locals
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.
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# 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`
|
||||
Reference in New Issue
Block a user