Partition by ownership
Place state where one block can make it precise.
Partitioning is not drawing boxes around functions. It assigns every mutation, wait, retry, and completion to one owner while controlling shared critical paths.
CH0descriptorepochprogress
CH1descriptorepochprogress
CH2descriptorepochprogress
CH3descriptorepochprogress
eligibilityScheduler + credit gate→Burst formation→Response ledger
256-bit downstream boundaryacceptance · ordering · error · backpressure
| State | Allocate | Mutate | Retire | Observable evidence |
|---|---|---|---|---|
| Descriptor context | Channel front | Channel front | Channel front | accepted / active / completed counters |
| Fabric credit | Response ledger | Issue + response | Response ledger | outstanding high-water mark |
| Burst progress | Burst engine | Burst engine | Response ledger | channel, descriptor, burst, beat identity |
| First error | Response ledger | write-once until retire | Channel front | cause, address, bytes committed, epoch |
Interface and state contracts
Define acceptance, lifetime, and cancellation together.
Signal direction is not an interface contract. Every boundary also needs a sampling event, stability rule, ownership transfer, ordering scope, error semantics, and reset behavior.
Descriptor request
- Accept
- req_valid && req_ready
- Stable while blocked
- address, length, channel, flags
- Transfer
- caller → channel front
- Reject
- alignment, range, or disabled channel
Fabric beat
- Accept
- valid && ready at the fabric edge
- Stable while blocked
- payload, byte enables, ID, LAST
- Order
- as defined for the selected ID and channel
- Capacity
- one credit per accepted outstanding unit
Channel completion
- Emit
- after every accepted burst reaches terminal state
- Report
- status, bytes committed, first error
- Reuse
- only after completion acceptance
- Reset
- drain, cancel, or reject by declared epoch
Conservation invariantaccepted descriptors = completed descriptors + active descriptors
Refine the same conservation equation for bursts, beats, credits, and response IDs. After quiescence, every active count must reach zero.
