Browser acceptance against a live scaffold surfaced two defects: - A fresh observation anchors at the registry's earliest retained byte, so the client's gap predicate (anchor behind earliest) never fired for it: a viewer who watched eviction live saw the gap notice, while a reload of the same activity silently hid that the head was discarded. A fresh view (no accumulated text) anchored past offset zero now carries the gap mark; resumes keep their recorded state. - The trigger-anchored popover (left: 0, width 440px) overflowed the right viewport edge on narrow windows — max-width alone cannot see the anchor offset. The open popover now measures its anchor and shifts left to keep the Menu primitive's 12px viewport margin, re-fitting on window resize and falling back to the pure CSS anchor when layout reports no width (jsdom). JobListAction shares the latent overflow; tracked separately.
api/ — Remote API layers
English | 中文
The application-facing Remote stack. remotes owns BFF policy and the selected business API, while gateway implements the Typert unary RPC endpoints shared by Host and Client environments.
| Package | Role | ctx key |
|---|---|---|
remotes/ |
Host Agent/Session lookup policy and Client Remote contribution assembly | no service; configures ctx.typert and consumes ctx.remote |
gateway/ |
Host Typert dispatcher and Client Remote endpoint | ctx.typertGateway / ctx.remote |
The runtime dependency direction is remotes → gateway → connection → webserver: the BFF consumes the shared TypertClientRemote contract, Gateway delegates transport to Connection, and Connection mounts on the HTTP server. Cordis service injection and Client module metadata preserve this order without importing the concrete Gateway from the Remotes Client entry.
Known Limitations and Deferred Work
- Connection and WebServer remain at
client/connectionandhost/webserver; a later package-only move can place them underapi/connectionandapi/webserverwithout changing their service contracts. - The legacy API Proxy remains at
host/apiproxyas the fallback for methods not yet migrated to Remote. It consumes the Host resolver owned byapi-remotesso migrated and legacy methods retain one Agent/Session identity policy.