diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/03-architecture/06-host-module-and-hybrid-model.md | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/docs/03-architecture/06-host-module-and-hybrid-model.md b/docs/03-architecture/06-host-module-and-hybrid-model.md index cfe1c8e..98b3523 100644 --- a/docs/03-architecture/06-host-module-and-hybrid-model.md +++ b/docs/03-architecture/06-host-module-and-hybrid-model.md @@ -256,6 +256,21 @@ pipeline: The same page-granular discipline already applies to the host-side bridge read/write helpers and to semaphore I/O. +3. **A slot consumed without running its work never runs it later.** When a + CE push cannot be resolved within its bounded hold, the fallback + acknowledges its release and consumes the entry so the client's tracker + keeps moving. That acknowledgement leaves the push's data work unrun; if + a later pin-batch rewind re-reads the consumed slot, executing the work + then would read a staging buffer the client has since refilled and write + the next chunk's data over a finished one (observed as a deterministic + input shift). The per-put-epoch consumed mark is therefore authoritative: + a slot consumed in the current epoch is skipped on every replay, + independently of the channel's deferral state, and only a put wrap (which + recycles slots for genuinely new pushes) clears the mark. Entry-word + identity is additionally checked against a hash of the recorded push + bytes, so a rewritten push that reuses the same entry words is treated as + new work rather than suppressed as a replay. + Rule 1 holds at *operation* granularity as well as per entry. A push whose decode finds one operand still under targeted translation is left pending and decoded again on the next pass; the operations that already ran before the |
