v0.12.0
DFOS v0.12.0 completes the proof-layer bounds refactor and closes the remaining cross-implementation validity forks. Every protocol-surface change is a pre-v1 breaking wire change — adopting it requires a corpus re-mint, not an automatic update.
Protocol — @metalabel/dfos-protocol, dfos-protocol-go
- [BREAKING] (#90) — keys-per-role (
authKeys/assertKeys/controllerKeys) andservicescardinality caps raised 16 → 256; canonicalservicesbyte cap 8192 → 32768. Enforced identically in TS and Go. - [BREAKING] (#87) — per-field string-length caps (
did≤256,key.id≤64, multibase≤128,prevCID≤256,documentCID≤256,note≤256) collapsed into a single 65536-byte op-size bound, measured over the exact CID-committed bytes → identical-by-construction across TS/Go. Credentials exempt (depth-bounded). - [BREAKING] (#86) — delegation-chain depth pinned to ≤16 (the 17th is rejected); the Go guard moved
> 16→>= 16so both verifiers agree. Validity-determining. - [BREAKING] (#92) — removed the TS-only 256-char artifact
$schemacap; artifacts are bounded solely by the 16384-byte payload cap.
See the package changelog for detail.
Relay — @metalabel/dfos-web-relay, dfos-web-relay-go
- [BREAKING] (#88) — proof-plane routes namespaced under
/proof/v1(/proof/v1/operations,/proof/v1/log,/proof/v1/identities,/proof/v1/content, …). Clients must update to the namespaced paths. The content plane keeps its own paths. - (#89) — lite pull-only proof node mode (
write: false): gossips and pulls, rejects external writes. - (#97) —
publicGrantssurfaced on the content-state response (GET /proof/v1/content/:id): the live re-verified public read grants, so split-gateway / zero-trust callers can re-derive authorization.
Install / upgrade
- npm:
@metalabel/dfos-protocol@0.12.0,@metalabel/dfos-web-relay@0.12.0(published with provenance) - CLI: `curl -sSL https://protocol.dfos.com/install.sh | sh` · `brew upgrade dfos`
- Docker: `ghcr.io/metalabel/dfos:0.12.0` (multi-arch)
Full diff: v0.11.0...v0.12.0