15754bfd
docs: the collapse traded a file's import ban for its module's grant
a73x 2026-08-30 14:11
Commit message
docs/decisions.md
| Old | New | ||
|---|---|---|---|
| @@ -7603,6 +7603,11 @@ body-capable request that declared no length now closes its connection. | |||
| 7603 | - **`predict.zig` moved to `src/tui/`.** The overlay is the wall's, and out | 7603 | - **`predict.zig` moved to `src/tui/`.** The overlay is the wall's, and out |
| 7604 | of `src/engine/` the `term` component structurally cannot see it — before, | 7604 | of `src/engine/` the `term` component structurally cannot see it — before, |
| 7605 | "prediction never enters the replica" rested on prose and a table edge. | 7605 | "prediction never enters the replica" rested on prose and a table edge. |
| 7606 | - **What it cost: a per-file import BAN is now a per-component grant.** | ||
| 7607 | `quic_server.zig` carrying opaque bytes and `shellint.zig` knowing nothing | ||
| 7608 | of the protocol were each an empty import list the table enforced. Both are | ||
| 7609 | child files of `daemon` now and may spell whatever that row grants, so those | ||
| 7610 | two disciplines are prose a reviewer holds, not a refusal the build makes. | ||
| 7606 | - **`webhub` stayed a row.** A module's root directory is the dirname of its | 7611 | - **`webhub` stayed a row.** A module's root directory is the dirname of its |
| 7607 | root file, so `@import("../client/webhub.zig")` from `src/cli/` is "import | 7612 | root file, so `@import("../client/webhub.zig")` from `src/cli/` is "import |
| 7608 | of file outside module path": making the hub a child of the dispatcher | 7613 | of file outside module path": making the hub a child of the dispatcher |
src/tui/interact.zig
| Old | New | ||
|---|---|---|---|
| @@ -12,9 +12,9 @@ | |||
| 12 | //! One driver: a wall tile's pump (`wallview.pumpTile`); every tile holds | 12 | //! One driver: a wall tile's pump (`wallview.pumpTile`); every tile holds |
| 13 | //! its own transport and replica, and nothing here dials. | 13 | //! its own transport and replica, and nothing here dials. |
| 14 | //! | 14 | //! |
| 15 | //! The transport is `anytype` throughout because `Transport` sits ABOVE | 15 | //! The transport is `anytype` by choice, not by layering: naming only |
| 16 | //! this module: the only thing this module can say about it is the | 16 | //! `writeFrame(proto.MsgType, []const u8) !void` keeps this loop |
| 17 | //! surface it uses, `writeFrame(proto.MsgType, []const u8) !void`. | 17 | //! transport-blind and testable with no dial behind it. |
| 18 | //! | 18 | //! |
| 19 | //! Keeper of two CLAUDE.md invariants: prediction never enters the | 19 | //! Keeper of two CLAUDE.md invariants: prediction never enters the |
| 20 | //! replica, and `replica.zig` is the one applier. | 20 | //! replica, and `replica.zig` is the one applier. |