fix(v4.0.0): step 6e review round 2 -- only the message looked at is taken, moved or dropped; the kernel's port has no queue in a fabric; an answer nobody awaits is not a loss

- Engine: a wire keeps whether the message at its mark is the one last
  looked at; a node's take, move and drop of any other answer 3 and write
  nothing (MESH.md 7d.3).  A wire cut and made again between a look and a
  take no longer has a NACK done as text, or 256 cells written where one
  was looked for.
- Engine: v4_fabric_wire_kernel wires a kernel to a port with no queues;
  a message for it is refused at once, error 18, on a mesh as on the
  products.
- The result of a drop is looked at; a take that does not take has the
  message dropped, or gone past: nothing goes round.
- An answer nobody waits for is let go uncounted; (LOST) counts what should
  have been delivered or acted on and was not.  The flood's account is
  exact.
- Error 18 from under a word that was printing empties the data stack, as
  a fault does: that word's own values are not left there.
- Tests: the take and drop windows cut at every step, with and without
  another message put; a refusal owed to a stuck node whose wire is full.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rajames
2026-10-08 22:36:59 -04:00
co-authored by Claude Opus 5.5
parent 6a7d0aa27f
commit f1419e739c
15 changed files with 345 additions and 63 deletions
+17 -3
View File
@@ -800,6 +800,17 @@ the engine and happens whole.
- Each wire has a mark for the node that reads it: the message that
look, take, move and drop are about. First and next move it; with no
message there, those four answer 3.
- **Take, move and drop are done only on the message last looked at.**
A node looks, decides, and then takes; the wire may have been cut and
made again in between, and another message put where that one was. So
the wire keeps whether the message at its mark is the one last looked
at: a look that finds a message makes it so, and first, next, the
message's going, and the cutting of the wire undo it. Take, move and
drop of anything else answer 3 and change nothing, and a take writes
the cells of the message looked at and no more. *(Added 2026-10-08, fix
round 2 of tasks 2 and 3: a NACK was done as text, and a text of 1,024
characters taken where a NACK had been looked at overwrote the node's
variables.)*
- Only 8 and 9 block. A node blocked there executes nothing.
- **Sleep is woken by a message coming, not by one being there.** A node
may leave a message for itself on a wire -- text it will not begin
@@ -877,9 +888,12 @@ waiting, the words that turned it, the list of NACKs owed, and
### 7d.5 The products
The lone node on the hosted and bare-metal products is given the same
addresses by its host (`v4/system/boot.c`): its two wires are the
console and the kernel. Nothing else changes for it: the kernel's
requests stay a word at a time.
addresses by its host (`v4/system/boot.c`): its one wire is the
console's. **The kernel's port has no queue** *(ruled 2026-10-08)*, on
the products and in a fabric (`v4_fabric_wire_kernel`): the kernel is
asked by words written to its port, as before, and takes no messages. A
message for that port is refused at once -- error 18, "No one on that
port".
### 7d.6 What will be limits