/**
 * The pre-spawn identity comparison: which established reads of one plan resolve somewhere else now.
 *
 * Compared PER CANDIDATE, never as one pooled set of targets: a candidate is keyed by where it stands in the plan
 * (segment, nested plan) and by what it is (deny-only or a read, provenance, spelling, expansion, raw word), and its
 * set of established targets is compared with the same candidate's set from the re-establishment. A pooled set let
 * one candidate's targets hide another's move — `head linkx` retargeted onto a path some other word's pattern already
 * matched, or onto a home shadow's target, left the pool unchanged and the call was admitted unjudged.
 */
import type { EstablishedPlan } from "./shell-read-establish.js";
import type { ObservedEnvironment } from "./shell-read-environment.js";
import type { EstablishedRead } from "./shell-read-judge.js";
import { type HomeViewsCarrier } from "./read-deny-home.js";
/** Every read of either establishment whose candidate's settled target set differs between the two. */
export declare function movedReads(previous: EstablishedPlan, again: EstablishedPlan): EstablishedRead[];
/**
 * The establishment with every read that landed carrying its HOME VIEW (read-deny-home.ts) among its spellings, nested
 * plans included: the deny judge then places a home-anchored row wherever the target IS below the home, whatever it is
 * spelled through. The views are `placed`'s — the home views of the placement the boundary's deny seats were compiled
 * at. A read that did not land (lexical, unestablishable) is left as it is.
 */
export declare function withHomeViews(door: Pick<ObservedEnvironment, "fs" | "adopt">, placed: HomeViewsCarrier | undefined, established: EstablishedPlan, signal?: AbortSignal): Promise<EstablishedPlan>;
