release(core): tines-core 1.0.0

This commit is contained in:
2026-10-22 08:44:09 -07:00
parent 164cf97a5b
commit 8425232ba1
15 changed files with 145 additions and 27 deletions
+26 -8
View File
@@ -351,14 +351,11 @@ for event in node.drain_events() {
}
// Keep the store bounded.
node.trim(
&TrimPolicy {
keep_per_topic: Some(4),
max_age_ms: Some(3_600_000),
max_count: Some(10_000),
},
500,
);
let mut policy = TrimPolicy::default();
policy.keep_per_topic = Some(4);
policy.max_age_ms = Some(3_600_000);
policy.max_count = Some(10_000);
node.trim(&policy, 500);
```
`observe` rejects an oversized topic or payload with `ObserveError::TooLarge`;
@@ -598,6 +595,27 @@ sh scripts/ci.sh
GitHub Actions runs the same script on every push to `master` and on every
pull request.
## Stability
tines-core 1.0 guarantees, within the 1.x line:
- **Wire:** every 1.x release speaks wire v1. Only new optional `Frame`
variants may be added, plus new `SigAlgo` ids and signature versions within
the 64-byte `MAX_SIG` budget. A wire-v2 change, including any post-quantum
signature or a `MAX_FRAME` above 1500, ships as tines-core 2.0.
- **Identity:** `Observation::id` never changes within a major version, and
should not change across majors unless the hash itself is broken.
- **API:** standard semver; MSRV bumps are minor. Public types are
`#[non_exhaustive]` where new fields are plausible; a public trait may only
gain methods with a default implementation (or a new opt-in trait — e.g.
`WallClockStore` for wall-clock folds, which `Store` itself never carries).
- **Local behaviour** (capacities, timings, scheduling order, which candidate
goes first) can change in a minor release as long as the protocol
properties hold: custody always keeps ≥ 1 holder, receipts never shorten
world state, and every frame fits `mtu()`.
- **Signatures:** 1.0 carries them; 1.1 signs and verifies them, without
breaking the wire or the API.
## Security
tines has **no trust layer yet**, by design. Anyone in radio range can read