summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/03-architecture/06-host-module-and-hybrid-model.md15
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