This repository (mega-index-map, the DSH plugin) and a sibling cross-harness build (an MCP server
plus CLI) share one lineage but must never touch each other's files. The sibling checkout is declared
locally - MEGA_INDEX_SIBLING, or .isolation.local.json beside this checkout, which never ships - so
no shipped file has to name it. The rule is two-way and absolute:
- This repository is read-only with respect to the sibling. Nothing here may create, modify, move or delete anything under the sibling tree - not at build time, not at run time, not from a script, not from a test. The sibling may be read (to compare tables, to proofread), never written.
- The sibling is read-only with respect to this repository. Nothing in the sibling tree may write into this repository either. Its own cross-check tool reads a file here and reports; that is the only permitted direction.
Both directions exist because the trees are deliberately separate: this one is the narrow DSH-only plugin, the sibling is the wider universal build. Merging them silently would destroy the point of having two.
scripts/check-isolation.mjs- static rules, run bynpm run checkand therefore by CI on every push: no write-capable call in this repository may name the sibling or carry a hardcoded absolute path as its target, and this repository may not spawn a program pointed at the sibling. The guard is built from the locally declared path, so it bites on the machine that has the sibling without the name appearing in shipped source. When the sibling tree is present it is scanned the same way, in the opposite direction.- Witness mode, for the read-only claim itself:
node scripts/check-isolation.mjs snapshotrecords hashes of this repository, of the sibling tree (when declared) and of the real$DSH_HOME/library/index.json;node scripts/check-isolation.mjs verifyre-hashes and fails if a single byte moved. Run the snapshot before a test or proofreading session and verify after it: a clean verify is the evidence that the session wrote to neither tree and did not disturb the user's own library. - The reasoning behind each deliberate non-interaction is recorded in
PROOFREADING.md.
Only these, and never anything else:
- the library under
$DSH_HOME/library(index, payloads, local packs, logs, reports, drafts); - files under the operating system's temp directory, for dialogs and probes;
- the output path a caller passes explicitly to a tool (
out,path,filearguments).
Every write target is computed from $DSH_HOME, from os.tmpdir() or from a caller argument. A
hardcoded absolute path in a write call is treated as a defect by the isolation check, even if it
happens to point somewhere harmless.