AttachmentRecord

@Serializable
data class AttachmentRecord(val id: AttachmentId, val parent: GroupId, val child: GroupId, val weight: Weight)

The immutable fact of one attachment generation — a parent→child edge in the fairness tree, together with the child's weight among its siblings.

A record carries no seat (issue #1752). A generation's virtual-time origin used to be frozen into this record as an initialVirtualTime, which meant one proposer's local reading of the front became every peer's permanent fact — and a proposer reading a partial view froze a wrong one irrecoverably (#1713). The origin now lives in the replicated Gauge register, which every peer may write from its own view and whose componentwise join resolves the readings by max instead of preserving them. Two consequences worth knowing: the seat is an exact Rational rather than a rounded Long, so the old ⌈V⌉ rounding rule is simply gone; and a record built by hand can no longer express a seat at all, so there is nothing to get wrong.

Records are immutable and grow-only. In a healthy ledger one AttachmentId maps to exactly one record, but the merge never collapses divergent records under one id — the ledger keeps a set of records per id (see EntitlementLedger), so two conflicting records both survive the join and a later phase's validate can report the divergence. This is deliberate: silently picking a winner would be last-writer-wins on a parent pointer, which heddle-design.md §5.2 forbids. Set union is a join-semilattice on its own, so the record type needs no ordering.

Constructors

Link copied to clipboard
constructor(id: AttachmentId, parent: GroupId, child: GroupId, weight: Weight)

Properties

Link copied to clipboard

the child group the entitlement flows to.

Link copied to clipboard

this generation's identity.

Link copied to clipboard

the parent group the entitlement flows from.

Link copied to clipboard

the child's fairness share among its siblings; always positive.