#!/usr/bin/env node // One field per job. Fails when core code hand-builds something a shared // component already does: // // pick a server ............ components/ServerPicker.jsx // enter a domain ........... components/DomainField.jsx (+ services/attachDomain.js) // enter a host port ........ components/PortField.jsx // choose one of N .......... components/ui/select.jsx (Radix) or ds/SegControl // // Each rule names the only files allowed to touch the underlying API or // element. A new exception needs a reason in this file, not a copy of the // component. Copy-to-clipboard is ratcheted by check-frontend-boundaries. // Extension copies under src/plugins/ are out of scope (their source repos // adopt the SDK exports instead). import { readFileSync, readdirSync, statSync } from 'node:fs'; import { join, relative, sep } from 'node:path'; const SRC = new URL('../src', import.meta.url).pathname.replace(/^\/([A-Za-z]:)/, '$1'); const RULES = [ { name: 'native