export interface CanonSyncOptions { /** Canon store working clone (default: defaultCanonStore() in storePath.ts — CANON_STORE, an existing /tmp/canon-store, else ~/.cache/nexus-canon/store; auto-cloned). */ store?: string; /** Home dir for harness roots + the mtime/size manifest (default $HOME). */ home?: string; /** Report what would copy; write nothing. */ dryRun?: boolean; /** Store remote for the auto-clone (or env CANON_REPO). Unconfigured + no store = fail-fast. */ repoUrl?: string; /** SCOPED sync (or env CANON_SYNC_SCOPE): 'auto' = clone/materialize only the * legs whose harness roots exist on THIS machine (a container capturing its * own sessions gets ~its leg, not the whole multi-GB surface); or an explicit * comma list of harness labels ('nexus-cortex,browser-cortex'). Unset = full * surface (repl default — translate/graph need everything and REFUSE scoped * stores). Scoped stores are cone-mode sparse clones; root config files and * native/SKIPPED.md remain present (cone semantics). */ scope?: string; } export interface CanonSyncResult { copied: number; unchanged: number; skipped: string[]; chunked: number; scrubbedHits: number; pushed: boolean; } /** * Harness capture sources — DECLARATIVE. Defaults below cover this * environment; `/HARNESSES.json` overrides/extends them: * { "harnesses": { "