core/ and shared/ depend UPWARD on view/ (relocate shQuote, emit)The dispatch loop and the git wire client import the rendering layer —
an upward dependency that makes view/ un-droppable from a headless or
server build and couples the transport to the UI. Worst: wire.js, a
git transport client, pulls the POSIX-quoting primitive shQuote from
view/render.js. emit.js (the output sink in core/) requires
view/render.js + view/theme.js at module top. Method: Issues.
const shq = require("../view/render.js").shQuote;
— a transport module reaching into the renderer for a shell quoter.function shQuote(s){…} — pure POSIX single-
quote, zero render dependency; exported at render.js:35.view/render.js + view/theme.js at top
— core/ depending on view/ for the columniser/theme.require(_here+"/view/bro.js") — the dispatch loop
reaches into view/ for the edge renderHunkLog.shQuote to shared/util/shell.js; wire.js + render.js +
status.js consume it from there (no view/ import in wire.js).shared/ and the transport import NOTHING from view/.shared/util/shell.js::shQuote is the canonical home (a sibling
of util/path.js + util/sha.js, JSQUE-016 layering); render.js
re-exports for back-compat.shared/wire.js:22 still require("../view/render.js").shQuote;
core/emit.js:14-15 still require view/render.js+view/theme.js; no shared/util/shell.js
exists (shared/util/ holds only ignore/path/sha).require("../view/render.js").shQuote; emit.js:14-15 require view/render.js+view/theme.js; shared/util/ = ignore/path/sha only, no shell.js